00001
00002
00003
00004
00005
00006
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
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
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
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