00001
00002
00003
00004
00005
00006
00007
00008
00009 from DybPython.DybPythonAlg import DybPythonAlg
00010 from GaudiPython import SUCCESS, FAILURE
00011 from GaudiPython import gbl, loaddict
00012 from DybPython.Util import irange
00013
00014
00015 TH1F = gbl.TH1F
00016 TH2F = gbl.TH2F
00017
00018
00019
00020 loaddict("libCLHEPRflx")
00021 loaddict("libHepMCRflx")
00022 Detector = gbl.DayaBay.Detector
00023 AdPmtSensor = gbl.DayaBay.AdPmtSensor
00024 ServiceMode = gbl.ServiceMode
00025 ReconStatus = gbl.ReconStatus
00026
00027
00028 class EnergyStatsAlg(DybPythonAlg):
00029 "Algorithm to make Energy Statistics file"
00030 def __init__(self,name):
00031 DybPythonAlg.__init__(self,name)
00032 return
00033
00034 def initialize(self):
00035 status = DybPythonAlg.initialize(self)
00036 if status.isFailure(): return status
00037 self.info("initializing")
00038
00039 self.cableSvc = self.svc('ICableSvc','StaticCableSvc')
00040 if self.cableSvc == None:
00041 self.error("Failed to get StaticCableSvc")
00042 return FAILURE
00043
00044
00045
00046 hist = TH1F("EnergyBias","Energy Bias",500,-2.0,2.5)
00047 hist.GetXaxis().SetTitle("Energy Difference [MeV]")
00048 hist.GetYaxis().SetTitle("Generated Particles")
00049 hist.SetLineColor(4)
00050 self.stats["/file0/energy/EnergyBias"] = hist
00051
00052 hist = TH1F("reconEnergy","Reconstructed Energy",500,0.0,3.0)
00053 hist.GetXaxis().SetTitle("Reconstructed Visible Energy [E_rec]")
00054 hist.GetYaxis().SetTitle("Triggered Readouts")
00055 hist.SetLineColor(4)
00056 self.stats["/file0/energy/reconEnergy"] = hist
00057 return SUCCESS
00058
00059 def execute(self):
00060 self.info("executing")
00061
00062 evt = self.evtSvc()
00063
00064
00065
00066 recHdr = evt["/Event/Rec/RecHeader"]
00067
00068
00069 roHdr = evt["/Event/Readout/ReadoutHeader"]
00070 readout = roHdr.readout()
00071 if readout != None:
00072 trigTime = readout.triggerTime()
00073 print "seconds=", trigTime.GetSec()
00074 print "nanoseconds=", trigTime.GetNanoSec()
00075
00076
00077 if recHdr == None:
00078 self.error("Failed to get RecHeader")
00079 return FAILURE
00080 recResults = recHdr.recResults()
00081 recTrigger = recResults["AdSimple"]
00082 if recTrigger.energyStatus() == ReconStatus.kGood:
00083 reconEnergy = recTrigger.energy()
00084 self.stats["/file0/energy/reconEnergy"].Fill(reconEnergy)
00085 self.stats["/file0/energy/EnergyBias"].Fill(reconEnergy-1.022)
00086 return SUCCESS
00087
00088 def finalize(self):
00089 self.info("finalizing")
00090
00091 status = DybPythonAlg.finalize(self)
00092 return status
00093
00094
00095
00096
00097 def configure():
00098 from StatisticsSvc.StatisticsSvcConf import StatisticsSvc
00099 statsSvc = StatisticsSvc()
00100 statsSvc.Output ={"file0":"energyStats.root"}
00101 import DataSvc
00102 DataSvc.Configure()
00103 return
00104
00105 def run(app):
00106 '''
00107 Configure and add an algorithm to job
00108 '''
00109 app.ExtSvc += ["StaticCableSvc", "StatisticsSvc"]
00110 energyStatsAlg = EnergyStatsAlg("MyEnergyStats")
00111 app.addAlgorithm(energyStatsAlg)
00112 pass
00113