/search.css" rel="stylesheet" type="text/css"/> /search.js">
00001 #!/usr/bin/env python 00002 00003 '''Algorithm to test RPC readout simulation 00004 00005 It can be called via nuwa.py: 00006 00007 nuwa.py -n XXX -m 'ReadoutSim.CheckAlg ["my optional message"]' 00008 00009 ''' 00010 00011 00012 from DybPython.DybPythonAlg import DybPythonAlg 00013 from GaudiPython import SUCCESS, FAILURE 00014 #import PyCintex 00015 #ElecFecCrate = PyCintex.makeClass('DayaBay::ElecFecCrate') 00016 00017 class CheckAlg(DybPythonAlg): 00018 ''' 00019 Algorithm to test RPC readout simulation 00020 ''' 00021 00022 def __init__(self,myname): 00023 ''' ''' 00024 DybPythonAlg.__init__(self,myname) 00025 return 00026 00027 def initialize(self): 00028 status = DybPythonAlg.initialize(self) 00029 if status.isFailure(): return status 00030 self.info("initializing") 00031 00032 #self.stats.defaultPath = "/file1/examples/" 00033 ## Make the trigger time histogram 00034 #self.stats["TrigTime"] = TH1F("TrigTime","Trigger Time [s]", 00035 #100,0.0,10.0) 00036 ## Make the TDC histogram 00037 #self.stats["Tdc"] = TH1F("Tdc","TDC Values",300,0,300) 00038 00039 return SUCCESS 00040 00041 def execute(self): 00042 self.info("executing") 00043 evt = self.evtSvc() 00044 00045 # Elec header info dump 00046 elhdr = evt["/Event/Elec/ElecHeader"] 00047 self.info("===== ElecSim =====") 00048 if elhdr == None: 00049 self.info("No ElecSim header this cycle") 00050 else : 00051 # pulses: 00052 pulhdr = elhdr.pulseHeader() 00053 # signals: 00054 crhdr = elhdr.crateHeader() 00055 00056 self.info( "Elec time: %s"%(elhdr.timeStamp().GetSeconds()) ) 00057 if pulhdr == None: 00058 self.info("No pulse header stored this cycle") 00059 else : 00060 self.info( "Number of pulse collections: %d"%(pulhdr.pulseCollection().size()) ) 00061 00062 if crhdr == None: 00063 self.info("No crate header this cycle") 00064 else : 00065 self.info( "Number of crates: %d"%(crhdr.crates().size()) ) 00066 det = crhdr.crates().begin().first 00067 feccr = crhdr.crates()[det] 00068 self.info("%d FEC boards stored in the crate."%feccr.fecBoards().size()) 00069 00070 # SimTrig header info dump 00071 trighdr = evt["/Event/SimTrig/SimTrigHeader"] 00072 self.info("===== TrigSim =====") 00073 if trighdr == None: 00074 self.info("No SimElec header this cycle") 00075 else : 00076 cmdhdr = trighdr.commandHeader() 00077 cmdcoll= cmdhdr.collections()[cmdhdr.collections().begin().first] 00078 00079 if cmdcoll == None: 00080 self.info("No trigger command collection") 00081 else : 00082 self.info("SimTrig: Detector: %s"%(cmdcoll.detector().detName())) 00083 self.info( "SimTrig: %d commands in TriggerCommandCollection."%(cmdcoll.commands().size()) ) 00084 for cmd in cmdcoll.commands() : 00085 self.info("%d input triggers in this command."%cmd.inTriggers().size()) 00086 self.info("%d output triggers in this command."%cmd.outTriggers().size()) 00087 00088 # SimReadout header info dump 00089 self.info("===== SimReadout =====") 00090 simrohdr = evt["/Event/SimReadout/SimReadoutHeader"] 00091 if simrohdr == None: 00092 self.info("No SimReadoutHeader header this cycle") 00093 else : 00094 simros = simrohdr.readouts() 00095 self.info("SimReadout: Got %d simreadouts."%simros.size()) 00096 for simro in simros : 00097 ro = simro.readout() 00098 if ro == None: 00099 self.info("No Readout this cycle") 00100 else : 00101 self.info("Readout: Detector: %s"%(ro.detector().detName())) 00102 self.info("Readout: Trigger time: %f"%(ro.triggerTime().GetSeconds())) 00103 self.info("Readout: TriggerType: 0x%x"%ro.triggerType()) 00104 if (ro.detector().isRPC()) : 00105 self.info("Readout: RPC readouts: %d"%(ro.fecReadouts().size())) 00106 self.info("Readout: Hitmaps: ") 00107 i = 0 00108 for fec in ro.fecReadouts() : 00109 hitmap = fec.second.hitMap() 00110 print "%d: 0x%0x"%(i,hitmap) 00111 i += 1 00112 simdaq = ro.daqCrate(1,1,1) 00113 self.info("DaqCrate: Detector: %s"%(simdaq.detector().detName())) 00114 self.info("DaqCrate: Trigger time: %f"%(simdaq.triggerTime().GetSeconds())) 00115 self.info("DaqCrate: TriggerType: 0x%x"%simdaq.triggerType()) 00116 if (simdaq.detector().isRPC()) : 00117 self.info( "DaqCrate: RPC readouts: %d"%(simdaq.rpcPanelReadouts().size()) ) 00118 00119 # Readout header info dump 00120 self.info("===== Readout =====") 00121 rohdr = evt["/Event/Readout/ReadoutHeader"] 00122 if rohdr == None: 00123 self.info("No ReadoutHeader header this cycle") 00124 else : 00125 ro = rohdr.readout() 00126 if ro == None: 00127 self.info("No Readout this cycle") 00128 else : 00129 self.info("Readout: Detector: %s"%(ro.detector().detName())) 00130 self.info("Readout: Trigger time: %f"%(ro.triggerTime().GetSeconds())) 00131 self.info("Readout: TriggerType: %x"%ro.triggerType()) 00132 if (ro.detector().isRPC()) : 00133 self.info("Readout: RPC readouts: %d"%(ro.fecReadouts().size())) 00134 self.info("Readout: Hitmaps: ") 00135 i = 0 00136 for fec in ro.fecReadouts() : 00137 hitmap = fec.second.hitMap() 00138 print "%d: 0x%0x"%(i,hitmap) 00139 i += 1 00140 daq = rohdr.daqCrate() 00141 if daq == None: 00142 self.info("No daq crate this cycle") 00143 else : 00144 self.info("DaqCrate: Detector: %s"%(daq.detector().detName())) 00145 self.info("DaqCrate: Trigger time: %f"%(daq.triggerTime().GetSeconds())) 00146 self.info("DaqCrate: TriggerType: 0x%x"%daq.triggerType()) 00147 if (daq.detector().isRPC()) : 00148 self.info( "DaqCrate: RPC readouts: %d"%(daq.rpcPanelReadouts().size()) ) 00149 self.info("DaqCrate: Hitmaps:") 00150 for i in range(daq.rpcPanelReadouts().size()) : 00151 hitmap = daq.rpcPanelReadouts()[i].hitMap() 00152 print "%d: 0x%0x"%(i,hitmap) 00153 00154 return SUCCESS 00155 pass 00156 00157 00158 00159 ### nuwa.py hooks: 00160 00161 def configure(argv = []): 00162 pass 00163 00164 def run(app): 00165 alg = CheckAlg("RpcCheckAlg") 00166 app.addAlgorithm(alg) 00167 return 00168 00169 00170