00001
00002 '''
00003 Add an info dumper algorithm
00004 '''
00005
00006 from DybPython.DybPythonAlg import DybPythonAlg, gbl, SUCCESS, FAILURE, irange, units
00007
00008 class SayWhat(DybPythonAlg):
00009
00010 def __init__(self, name = None):
00011 DybPythonAlg.__init__(self,name)
00012
00013 self.genPath = '/Event/Gen/GenHeader'
00014 self.readoutPath = '/Event/Readout/ReadoutHeader'
00015
00016 return
00017
00018 def dump_genheader(self,gh):
00019 if not gh:
00020 self.info("GenHeader does not exist")
00021 return
00022
00023
00024 evt = gh.event()
00025
00026 self.info("GenHeader(%s)#%d @ %s" % (gh.generatorName(), evt.event_number(),
00027 gh.context().AsString()))
00028 vtx = evt.signal_process_vertex()
00029 for part in irange(vtx.particles_out_const_begin(), vtx.particles_out_const_end()):
00030 self.info('\t%d (%d) %f MeV' % (part.pdg_id(), part.status(),
00031 part.generatedMass()/units.MeV) )
00032 continue
00033 return
00034
00035 def dump_roheader(self,rh):
00036 if not rh:
00037 self.info("ReadoutHeader does not exist")
00038 return
00039
00040 self.info("ReadoutHeader @ %s" % rh.context().AsString())
00041
00042 ro = rh.readout()
00043 if not ro:
00044 self.info("No Readout object in the ReadoutHeader")
00045 else:
00046 self.info("Readout: %s #%d @ %s %d" % (ro.detector().asString(),
00047 ro.triggerNumber(),
00048 ro.triggerTime().AsString(),
00049 ro.triggerType()) )
00050 pass
00051
00052 dc = rh.daqCrate()
00053 if not dc:
00054 self.info("No DaqCrate object in the ReadoutHeader")
00055 else:
00056 self.info("DaqCrate: %s #%d[%d] @ %s %d" % (dc.detector().asString(),
00057 dc.eventNumber(),
00058 dc.localTriggerNumber(),
00059 dc.triggerTime().AsString(),
00060 dc.triggerType() ))
00061 pass
00062 return
00063
00064 def check_roheader(self,roh):
00065 'Return True if okay'
00066 dt = roh.latest().GetSeconds() - roh.earliest().GetSeconds()
00067 if dt <= 1e-9:
00068
00069
00070 return False
00071 return True
00072
00073 def execute(self):
00074 tes = self.evtSvc()
00075
00076 self.info("Dumping TES")
00077 self.dump_genheader(tes[self.genPath])
00078 roh = tes[self.readoutPath]
00079 self.dump_roheader(roh)
00080 if not self.check_roheader(roh):
00081 pass
00082
00083
00084 self.info("Dumping AES")
00085 ghlist = self.getAES(self.genPath) or []
00086 for gh in ghlist:
00087 self.dump_genheader(gh)
00088 rhlist = self.getAES(self.readoutPath) or []
00089 for rh in rhlist:
00090 self.dump_roheader(rh)
00091
00092 return SUCCESS
00093
00094 def configure(argv=None):
00095 return
00096
00097 def run(app):
00098 sw = SayWhat()
00099 app.addAlgorithm(sw)
00100