| Classes | Job Modules | Data Objects | Services | Algorithms | Tools | Packages | Directories | Tracs |

In This Package:

ACUNeutronCapturePosition.py

Go to the documentation of this file.
00001 #!/usr/bin/env python
00002 #
00003 # Usage :
00004 #       nuwa.py -n -1 CapturePosition SimAndRecData.root
00005 #
00006 # Load DybPython
00007 import math
00008 from DybPython.DybPythonAlg import DybPythonAlg
00009 from GaudiPython import SUCCESS, FAILURE
00010 from GaudiPython import gbl, loaddict
00011 from DybPython.Util import irange
00012 
00013 TH1F = gbl.TH1F
00014 TH2F = gbl.TH2F
00015 
00016 loaddict("libCLHEPRflx")
00017 loaddict("libHepMCRflx")
00018 Detector = gbl.DayaBay.Detector
00019 AdPmtSensor = gbl.DayaBay.AdPmtSensor
00020 ServiceMode = gbl.ServiceMode
00021 ReconStatus = gbl.ReconStatus
00022 
00023 XYZPoint = gbl.Gaudi.XYZPoint
00024 
00025 class CapturePositionAlg(DybPythonAlg):
00026     def __init__(self,name):
00027         DybPythonAlg.__init__(self,name)
00028         return
00029 
00030     def initialize(self):
00031         status = DybPythonAlg.initialize(self)
00032         if status.isFailure(): return status
00033         self.info("initializing")
00034 
00035         self.cableSvc = self.svc('ICableSvc','StaticCableSvc')
00036         if self.cableSvc == None:
00037             self.error("Failed to get StaticCableSvc")
00038             return FAILURE
00039 
00040         # Make position histograms
00041         hist = TH2F("CapturePosition","Captured Particle z vs x",
00042                 500,-2500.0,2500.0, 500, 1500.0, 4500.0)
00043         hist.GetXaxis().SetTitle("x [mm]")
00044         hist.GetYaxis().SetTitle("z [mm]")
00045         self.stats["/file0/position/CapturePositionAll"] = hist
00046 
00047 
00048         hist = TH2F("CapturePosition","Captured Particle z vs x",
00049                 500,-2500.0,2500.0, 500, 1500.0 , 4500.0)
00050         hist.GetXaxis().SetTitle("x [mm]")
00051         hist.GetYaxis().SetTitle("z [mm]")
00052         self.stats["/file0/position/CapturePosition"] = hist
00053 
00054         hist = TH2F("CapturePosition","Capture Position for particles with E > 6MeV "
00055                 ,500,-2500.0,2500.0, 500, 1500.0 , 4500.0)
00056         hist.GetXaxis().SetTitle("x [mm]")
00057         hist.GetYaxis().SetTitle("z [mm]")
00058         self.stats["/file0/position/CapturePosition6MeV"] = hist
00059     
00060         hist = TH2F("Reconstructed Position","Energy range 0~2MeV"
00061                 ,500, -2500.0, 2500.0, 500, -500.0, 3500.0)
00062         hist.GetXaxis().SetTitle("x [mm]")
00063         hist.GetYaxis().SetTitle("z [mm]")
00064         self.stats["/file0/position/ReconPosition1"] = hist
00065         
00066         hist = TH2F("Reconstructed Position","Energy range 2~4MeV"
00067                 ,500, -2500.0, 2500.0, 500, -500.0, 3500.0)
00068         hist.GetXaxis().SetTitle("x [mm]")
00069         hist.GetYaxis().SetTitle("z [mm]")
00070         self.stats["/file0/position/ReconPosition2"] = hist
00071 
00072         hist = TH2F("Reconstructed Position","Energy range 4~6MeV"
00073                 ,500, -2500.0, 2500.0, 500, -500.0, 3500.0)
00074         hist.GetXaxis().SetTitle("x [mm]")
00075         hist.GetYaxis().SetTitle("z [mm]")
00076         self.stats["/file0/position/ReconPosition3"] = hist
00077 
00078         hist = TH2F("Reconstructed Position","Energy range 6~8MeV"
00079                 ,500, -2500.0, 2500.0, 500, -500.0, 3500.0)
00080         hist.GetXaxis().SetTitle("x [mm]")
00081         hist.GetYaxis().SetTitle("z [mm]")
00082         self.stats["/file0/position/ReconPosition4"] = hist
00083         
00084         hist = TH2F("Reconstructed Position","Energy range > 8 MeV"
00085                 ,500, -2500.0, 2500.0, 500, -500.0, 3500.0)
00086         hist.GetXaxis().SetTitle("x [mm]")
00087         hist.GetYaxis().SetTitle("z [mm]")
00088         self.stats["/file0/position/ReconPosition5"] = hist
00089 
00090         hist = TH1F("reconEnergy", "Reconstructed Energy",500,0.0,10.0)
00091         hist.GetXaxis().SetTitle("E (MeV)")
00092         hist.GetYaxis().SetTitle("Events")
00093         self.stats["/file0/energy/ReconEnergy"] = hist  
00094         
00095         return SUCCESS
00096 
00097     def execute(self):
00098         self.info("executing")
00099         evt = self.evtSvc()
00100 
00101         #The Capture Position of the Particles that Generate Signals in AD
00102         simHdr = evt["/Event/Sim/SimHeader"]
00103         if simHdr == None:
00104             self.error("Failed to get SimHeader")
00105             return FAILURE
00106         statsHdr = simHdr.unobservableStatistics()
00107         simStats = statsHdr.stats()
00108 
00109         x1 = simStats["xEnd_Trk1"].sum()
00110         y1 = simStats["yEnd_Trk1"].sum()
00111         z1 = simStats["zEnd_Trk1"].sum()
00112 
00113         globalPos1 = XYZPoint(x1, y1, z1)
00114         ad1 = self.detSvc("/dd/Structure/AD/db-oil1")
00115         localPos1 = ad1.geometry().toLocal(globalPos1)
00116         cx = localPos1.x()
00117         cz = localPos1.z()
00118         self.stats["/file0/position/CapturePositionAll"].Fill(cx,cz)
00119 
00120         recHdr = evt["/Event/Rec/RecHeader"]
00121         if recHdr == None:
00122             self.error("Failed to get RecHeader")
00123             return FAILURE
00124         recResults = recHdr.recResults()
00125         recTrigger = recResults["AdSimple"]
00126         if recTrigger.positionStatus() == ReconStatus.kGood:
00127             reconPos = recTrigger.position()
00128             rx = reconPos.x()
00129             rz = reconPos.z()
00130             self.stats["/file0/position/CapturePosition"].Fill(cx,cz)
00131             
00132         if recTrigger.energyStatus() == ReconStatus.kGood:
00133             reconEnergy = recTrigger.energy()
00134             self.stats["/file0/energy/ReconEnergy"].Fill(reconEnergy)
00135             if ((reconEnergy >= 0) & (reconEnergy < 2)):
00136                 self.stats["/file0/position/ReconPosition1"].Fill(rx,rz)
00137 
00138             if ((reconEnergy >= 2) & (reconEnergy < 4)) :
00139                 self.stats["/file0/position/ReconPosition2"].Fill(rx,rz)
00140 
00141             if ((reconEnergy >= 4) & (reconEnergy < 6)) :
00142                 self.stats["/file0/position/ReconPosition3"].Fill(rx,rz)
00143 
00144             if ((reconEnergy >= 6) & (reconEnergy < 8)) :
00145                 self.stats["/file0/position/ReconPosition4"].Fill(rx,rz)
00146                 self.stats["/file0/position/CapturePosition6MeV"].Fill(cx,cz)
00147             if reconEnergy >= 8 :
00148                 self.stats["/file0/position/ReconPosition5"].Fill(rx,rz)
00149                 self.stats["/file0/position/CapturePosition6MeV"].Fill(cx,cz)
00150 
00151         return SUCCESS
00152         
00153     def finalize(self):
00154         self.info("finalizing")
00155         status = DybPythonAlg.finalize(self)
00156         return status
00157 
00158 
00159 #####  Job Configuration for nuwa.py ########################################
00160 
00161 def configure():
00162     from StatisticsSvc.StatisticsSvcConf import StatisticsSvc
00163     statsSvc = StatisticsSvc()
00164     statsSvc.Output ={"file0":"CapturePosition.root"}
00165     import DataSvc
00166     DataSvc.Configure()
00167     return
00168 
00169 def run(app):
00170     '''
00171     Configure and add an algorithm to job
00172     '''
00173     app.ExtSvc += ["StaticCableSvc", "StatisticsSvc"]
00174     capturePositionAlg = CapturePositionAlg("MyCapturePosition")
00175     app.addAlgorithm(capturePositionAlg)
00176     pass
00177 
| Classes | Job Modules | Data Objects | Services | Algorithms | Tools | Packages | Directories | Tracs |

Generated on Mon Apr 11 20:11:24 2011 for Calibration by doxygen 1.4.7