Public Member Functions | |
def | __init__ |
def | initialize |
def | execute |
def | finalize |
Public Attributes | |
cableSvc |
Definition at line 28 of file EnergyStats.py.
def EnergyStats::EnergyStatsAlg::__init__ | ( | self, | ||
name | ||||
) |
Definition at line 30 of file EnergyStats.py.
00030 : 00031 DybPythonAlg.__init__(self,name) 00032 return 00033 def initialize(self):
def EnergyStats::EnergyStatsAlg::initialize | ( | self | ) |
Definition at line 34 of file EnergyStats.py.
00034 : 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 # Make energy histograms 00045 hist = TH1F("genEnergy","Generated Particle Energy",100,937.0,940.0) 00046 hist.GetXaxis().SetTitle("Particle Energy [MeV]") 00047 hist.GetYaxis().SetTitle("Generated Particles") 00048 hist.SetLineColor(4) 00049 self.stats["/file0/energy/genEnergy"] = hist 00050 00051 00052 hist = TH1F("genKineticEnergy","Generated Particle Kinetic Energy", 00053 100,0.0,10.0) 00054 hist.GetXaxis().SetTitle("Particle Kinetic Energy [MeV]") 00055 hist.GetYaxis().SetTitle("Generated Particles") 00056 hist.SetLineColor(4) 00057 self.stats["/file0/energy/genKineticEnergy"] = hist 00058 00059 hist = TH1F("simScintEnergy","Energy deposited in Scintillator", 00060 500,0.0,10.0) 00061 hist.GetXaxis().SetTitle("Ionization Energy [MeV]") 00062 hist.GetYaxis().SetTitle("Simulated Events") 00063 hist.SetLineColor(4) 00064 self.stats["/file0/energy/simScintEnergy"] = hist 00065 00066 hist = TH1F("simQuenchedEnergy","Quenched Energy in Scintillator", 00067 500,0.0,10.0) 00068 hist.GetXaxis().SetTitle("Quenched Ionization Energy [MeV]") 00069 hist.GetYaxis().SetTitle("Simulated Events") 00070 hist.SetLineColor(4) 00071 self.stats["/file0/energy/simQuenchedEnergy"] = hist 00072 00073 hist = TH2F("simQuenching", 00074 "Quenching vs. Total Energy in Scintillator", 00075 300,0.0,10.0, 00076 300,0.0,1.5) 00077 hist.GetXaxis().SetTitle("Ionization Energy [MeV]") 00078 hist.GetYaxis().SetTitle("Quenched Energy / Ionization Energy") 00079 self.stats["/file0/energy/simQuenching"] = hist 00080 00081 hist = TH1F("simHits","Number of Simulated Hits on PMTs", 00082 500,0.0,2000) 00083 hist.GetXaxis().SetTitle("Simulated Number of Photoelectrons [NPE]") 00084 hist.GetYaxis().SetTitle("Simulated Events") 00085 hist.SetLineColor(4) 00086 self.stats["/file0/energy/simHits"] = hist 00087 00088 hist = TH2F("simHitsVsQE", 00089 "Number of Simulated Hits vs. Quenched Energy", 00090 200,0.0,10.0, 00091 200,0.0,200) 00092 hist.GetXaxis().SetTitle("Quenched Energy [MeV]") 00093 hist.GetYaxis().SetTitle("Photelectrons / Quenched Energy") 00094 self.stats["/file0/energy/simHitsVsQE"] = hist 00095 00096 hist = TH2F("adcSumVsSimHits", 00097 "Sum of Raw ADC vs. Number of Simulated PMT Hits", 00098 200,0.0,2000, 00099 200,0.0,1000.0) 00100 hist.GetXaxis().SetTitle("Simulated Number of Photoelectrons [NPE]") 00101 hist.GetYaxis().SetTitle("Raw ADC Sum / Photoelectrons") 00102 self.stats["/file0/energy/adcSumVsSimHits"] = hist 00103 00104 hist = TH1F("calibAdcSum","Sum of Calibrated ADC",500,0.0,2000.) 00105 hist.GetXaxis().SetTitle("Sum of calibrated ADC values in AD [ADC_SPE]") 00106 hist.GetYaxis().SetTitle("Simulated Triggered Readouts") 00107 hist.SetLineColor(4) 00108 self.stats["/file0/energy/calibAdcSum"] = hist 00109 00110 hist = TH2F("calibAdcSumVsSimHits", 00111 "Sum of Calibrated ADC vs. Number of Simulated PMT Hits", 00112 200,0.0,2000.0, 00113 200,0.0,2.) 00114 hist.GetXaxis().SetTitle("Simulated Number of Photoelectrons [NPE]") 00115 hist.GetYaxis().SetTitle("Calibrated ADC Sum / Photoelectrons") 00116 self.stats["/file0/energy/calibAdcSumVsSimHits"] = hist 00117 00118 hist = TH1F("reconEnergy","Reconstructed Energy",500,0.0,10.0) 00119 hist.GetXaxis().SetTitle("Reconstructed Visible Energy [E_rec]") 00120 hist.GetYaxis().SetTitle("Triggered Readouts") 00121 hist.SetLineColor(4) 00122 self.stats["/file0/energy/reconEnergy"] = hist 00123 00124 hist = TH2F("calibAdcSumVsReconEnergy", 00125 "Sum of Calibrated ADC vs. Reconstructed Energy", 00126 200,0.0,10.0, 00127 200,0.0,150.) 00128 hist.GetXaxis().SetTitle("Reconstructed Visible Energy [E_rec]") 00129 hist.GetYaxis().SetTitle("Calibrated ADC Sum / Reconstructed Energy") 00130 self.stats["/file0/energy/calibAdcSumVsReconEnergy"] = hist 00131 00132 hist = TH2F("reconEnergyVsQE","Reconstructed vs. Quenched Energy", 00133 200,0.0,10.0, 00134 200,0.0,1.5) 00135 hist.GetXaxis().SetTitle("Quenched Energy [MeV]") 00136 hist.GetYaxis().SetTitle("Reconstructed Energy / Quenched Energy") 00137 self.stats["/file0/energy/reconEnergyVsQE"] = hist 00138 00139 return SUCCESS 00140 def execute(self):
def EnergyStats::EnergyStatsAlg::execute | ( | self | ) |
Definition at line 141 of file EnergyStats.py.
00141 : 00142 self.info("executing") 00143 00144 evt = self.evtSvc() 00145 00146 # Generated Particle Data 00147 genHdr = evt["/Event/Gen/GenHeader"] 00148 if genHdr == None: 00149 self.error("Failed to get GenHeader") 00150 return FAILURE 00151 # Fill particle histograms 00152 totalGenEnergy = 0 00153 totalGenKineticEnergy = 0 00154 genEvt = genHdr.event() 00155 for vertex in irange(genEvt.vertices_begin(), 00156 genEvt.vertices_end()): 00157 for particle in irange(vertex.particles_out_const_begin(), 00158 vertex.particles_out_const_end()): 00159 totalGenEnergy += particle.momentum().e() 00160 totalGenKineticEnergy += (particle.momentum().e() 00161 - particle.momentum().m()) 00162 self.stats["/file0/energy/genEnergy"].Fill(totalGenEnergy) 00163 self.stats["/file0/energy/genKineticEnergy"].Fill(totalGenKineticEnergy) 00164 00165 # Simulated Particle Data 00166 simHdr = evt["/Event/Sim/SimHeader"] 00167 if simHdr == None: 00168 self.error("Failed to get SimHeader") 00169 return FAILURE 00170 statsHdr = simHdr.unobservableStatistics() 00171 simScintEnergy = 0 00172 simQuenchedEnergy = 0 00173 if statsHdr == None: 00174 self.warning("No SimStatistics for this event") 00175 else: 00176 simStats = statsHdr.stats() 00177 simScintEnergy = (simStats["EDepInGdLS"].sum() 00178 + simStats["EDepInLS"].sum()) 00179 simQuenchedEnergy = (simStats["QEDepInGdLS"].sum() 00180 + simStats["QEDepInLS"].sum()) 00181 self.stats["/file0/energy/simScintEnergy"].Fill( simScintEnergy ) 00182 self.stats["/file0/energy/simQuenchedEnergy"].Fill( 00183 simQuenchedEnergy ) 00184 if simScintEnergy > 0: 00185 self.stats["/file0/energy/simQuenching"].Fill( simScintEnergy, 00186 simQuenchedEnergy/simScintEnergy ) 00187 # Simulated Hits 00188 hitCollectionMap = simHdr.hits().hitCollection() 00189 detector = Detector("DayaBayAD1") 00190 hitCollection = hitCollectionMap[detector.siteDetPackedData()] 00191 if hitCollection == None: 00192 self.info("No Hit Collection for "+detector.detName()) 00193 return SUCCESS 00194 hits = hitCollectionMap[detector.siteDetPackedData()].collection() 00195 nSimHits = 0 00196 for hit in hits: 00197 pmtId = AdPmtSensor( hit.sensDetId() ) 00198 if pmtId.ring() < 1: continue # Skip calibration PMTs 00199 nSimHits += 1 00200 self.stats["/file0/energy/simHits"].Fill( nSimHits ) 00201 if simQuenchedEnergy > 0: 00202 self.stats["/file0/energy/simHitsVsQE"].Fill( simQuenchedEnergy, 00203 nSimHits/simQuenchedEnergy) 00204 00205 # Raw Readout Data 00206 readoutHdr = evt["/Event/Readout/ReadoutHeader"] 00207 if readoutHdr == None: 00208 self.error("Failed to get ReadoutHeader") 00209 return FAILURE 00210 readout = readoutHdr.readout() 00211 if readout == None: 00212 self.info("No Triggered Readout for this event") 00213 return SUCCESS 00214 adcSum = 0 00215 svcMode = ServiceMode( readoutHdr.context(), 0 ) 00216 for channelPair in readout.channelReadout(): 00217 channel = channelPair.second 00218 chanId = channel.channelId() 00219 pmtId = self.cableSvc.adPmtSensor( chanId, svcMode ) 00220 if pmtId.ring() < 1: continue # Skip calibration PMTs 00221 #adcSum += channel.peakAdc() 00222 adcSum += channel.peakAdc() 00223 if nSimHits > 0: 00224 self.stats["/file0/energy/adcSumVsSimHits"].Fill( nSimHits, 00225 adcSum/nSimHits ) 00226 00227 # Calibrated Readout Data 00228 calibReadoutHdr = evt["/Event/CalibReadout/CalibReadoutHeader"] 00229 if calibReadoutHdr == None: 00230 self.error("Failed to get CalibReadoutHeader") 00231 return FAILURE 00232 calibReadout = calibReadoutHdr.calibReadout() 00233 if calibReadout == None: 00234 self.info("No Calibrate Readout for this event") 00235 return SUCCESS 00236 calibAdcSum = 0 00237 svcMode = ServiceMode( calibReadoutHdr.context(), 0 ) 00238 for channelPair in calibReadout.channelReadout(): 00239 channel = channelPair.second 00240 chanId = channel.channelId() 00241 pmtId = self.cableSvc.adPmtSensor( chanId, svcMode ) 00242 if pmtId.ring() < 1: continue # Skip calibration PMTs 00243 calibAdcSum += channel.peakAdc() 00244 self.stats["/file0/energy/calibAdcSum"].Fill( calibAdcSum ) 00245 if nSimHits > 0: 00246 self.stats["/file0/energy/calibAdcSumVsSimHits"].Fill( 00247 nSimHits, 00248 calibAdcSum/nSimHits 00249 ) 00250 00251 recHdr = evt["/Event/Rec/RecHeader"] 00252 if recHdr == None: 00253 self.error("Failed to get RecHeader") 00254 return FAILURE 00255 recResults = recHdr.recResults() 00256 recTrigger = recResults["AdSimple"] 00257 if recTrigger.energyStatus() == ReconStatus.kGood: 00258 reconEnergy = recTrigger.energy() 00259 self.stats["/file0/energy/reconEnergy"].Fill(reconEnergy) 00260 self.stats["/file0/energy/calibAdcSumVsReconEnergy"].Fill( 00261 reconEnergy, 00262 calibAdcSum/reconEnergy ) 00263 if simQuenchedEnergy > 0: 00264 self.stats["/file0/energy/reconEnergyVsQE"].Fill( 00265 simQuenchedEnergy, 00266 reconEnergy/simQuenchedEnergy ) 00267 00268 return SUCCESS 00269 def finalize(self):
def EnergyStats::EnergyStatsAlg::finalize | ( | self | ) |
Definition at line 270 of file EnergyStats.py.
00270 : 00271 self.info("finalizing") 00272 status = DybPythonAlg.finalize(self) 00273 return status 00274 00275 ##### Job Configuration for nuwa.py ########################################
Definition at line 39 of file EnergyStats.py.