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 z1=-3000
00016 z2=3500
00017 x1=-3000
00018 x2=3000
00019 y1=-3000
00020 y2=3000
00021 r2=5000
00022
00023 from math import sqrt, atan2
00024
00025
00026 TH1F = gbl.TH1F
00027 TH2F = gbl.TH2F
00028
00029
00030
00031 loaddict("libCLHEPRflx")
00032 loaddict("libHepMCRflx")
00033 Detector = gbl.DayaBay.Detector
00034 AdPmtSensor = gbl.DayaBay.AdPmtSensor
00035 ServiceMode = gbl.ServiceMode
00036 ReconStatus = gbl.ReconStatus
00037
00038
00039 class PositionStatsAlg(DybPythonAlg):
00040 "Algorithm to make Position Statistics file"
00041 def __init__(self,name):
00042 DybPythonAlg.__init__(self,name)
00043 return
00044
00045 def initialize(self):
00046 status = DybPythonAlg.initialize(self)
00047 if status.isFailure(): return status
00048 self.info("initializing")
00049
00050 self.cableSvc = self.svc('ICableSvc','StaticCableSvc')
00051 if self.cableSvc == None:
00052 self.error("Failed to get StaticCableSvc")
00053 return FAILURE
00054
00055 hist = TH2F("reconZvsX",
00056 "Reconstructed Z position vs. X position",
00057 200,x1,x2,
00058 200,z1,z2)
00059 hist.GetXaxis().SetTitle("X position")
00060 hist.GetYaxis().SetTitle("Z position")
00061 self.stats["/file0/position/reconZvsX"] = hist
00062
00063 hist = TH2F("reconZvsY",
00064 "Reconstructed Z position vs. Y position",
00065 200,y1,y2,
00066 200,z1,z2)
00067 hist.GetXaxis().SetTitle("Y position")
00068 hist.GetYaxis().SetTitle("Z position")
00069 self.stats["/file0/position/reconZvsY"] = hist
00070
00071 hist = TH2F("reconYvsX",
00072 "Reconstructed Y position vs. X position",
00073 200,x1,x2,
00074 200,y1,y2)
00075 hist.GetXaxis().SetTitle("X position")
00076 hist.GetYaxis().SetTitle("Y position")
00077 self.stats["/file0/position/reconYvsX"] = hist
00078
00079
00080 hist = TH2F("reconZvsR",
00081 "Reconstructed Z position vs. R position",
00082 200,0.0,r2,
00083 200,z1,z2)
00084 hist.GetXaxis().SetTitle("R position")
00085 hist.GetYaxis().SetTitle("Z position")
00086 self.stats["/file0/position/reconZvsR"] = hist
00087
00088 return SUCCESS
00089
00090 def execute(self):
00091 self.info("executing")
00092
00093 evt = self.evtSvc()
00094
00095
00096 recHdr = evt["/Event/Rec/RecHeader"]
00097 if recHdr == None:
00098 self.error("Failed to get RecHeader")
00099 return FAILURE
00100 recResults = recHdr.recResults()
00101 recTrigger = recResults["AdSimple"]
00102 if recTrigger.positionStatus() == ReconStatus.kGood:
00103 reconPosition = recTrigger.position()
00104 recPositionR=sqrt(reconPosition.y()**2+reconPosition.x()**2)
00105 recPositionPhi=atan2(reconPosition.y(),reconPosition.x())
00106
00107 self.stats["/file0/position/reconZvsX"].Fill(
00108 reconPosition.x(),
00109 reconPosition.z() )
00110 self.stats["/file0/position/reconZvsY"].Fill(
00111 reconPosition.y(),
00112 reconPosition.z() )
00113 self.stats["/file0/position/reconYvsX"].Fill(
00114 reconPosition.x(),
00115 reconPosition.y() )
00116 self.stats["/file0/position/reconZvsR"].Fill(
00117 recPositionR,
00118 reconPosition.z() )
00119
00120 return SUCCESS
00121
00122 def finalize(self):
00123 self.info("finalizing")
00124 status = DybPythonAlg.finalize(self)
00125 return status
00126
00127
00128
00129
00130 def configure():
00131 from StatisticsSvc.StatisticsSvcConf import StatisticsSvc
00132 statsSvc = StatisticsSvc()
00133 statsSvc.Output ={"file0":"positionStats.root"}
00134 import DataSvc
00135 DataSvc.Configure()
00136 return
00137
00138 def run(app):
00139 '''
00140 Configure and add an algorithm to job
00141 '''
00142 app.ExtSvc += ["StaticCableSvc", "StatisticsSvc"]
00143 positionStatsAlg = PositionStatsAlg("MyPositionStats")
00144 app.addAlgorithm(positionStatsAlg)
00145 pass
00146