Public Member Functions | |
def | __init__ |
def | initialize |
def | execute |
def | finalize |
def | findPromptReadouts |
def | markForStorage |
def | findRegistrations |
def | addInputHeaders |
def | makeStorageList |
Public Attributes | |
ReadoutLocation | |
RegSeqLocation | |
StorePaths | |
CoincidenceWindow | |
DetectorNames | |
AdOnly | |
SameDetectorOnly | |
SaveIntermediate | |
SaveNeighbors | |
NeighborWindow | |
detectors |
Definition at line 99 of file FilterAlgs.py.
def DybAlg::FilterAlgs::CoincidenceFilterAlg::__init__ | ( | self, | ||
name | ||||
) |
Definition at line 101 of file FilterAlgs.py.
00101 : 00102 DybPythonAlg.__init__(self,name) 00103 # Properties 00104 self.ReadoutLocation = ReadoutHeader.defaultLocation() 00105 self.RegSeqLocation = RegistrationSequence.defaultLocation() 00106 self.StorePaths = [ ReadoutHeader.defaultLocation() ] 00107 self.CoincidenceWindow = 1.0 * units.millisecond 00108 self.DetectorNames = [] 00109 self.AdOnly = False 00110 self.SameDetectorOnly = False 00111 self.SaveIntermediate = False 00112 self.SaveNeighbors = False 00113 self.NeighborWindow = 1000.0 * units.nanosecond 00114 # Internal variables 00115 self.detectors = [] 00116 return 00117 def initialize(self):
def DybAlg::FilterAlgs::CoincidenceFilterAlg::initialize | ( | self | ) |
Definition at line 118 of file FilterAlgs.py.
00118 : 00119 status = DybPythonAlg.initialize(self) 00120 self.info("initializing") 00121 for detName in self.DetectorNames: 00122 self.detectors.append(Detector(detName)) 00123 return status 00124 def execute(self):
def DybAlg::FilterAlgs::CoincidenceFilterAlg::execute | ( | self | ) |
Definition at line 125 of file FilterAlgs.py.
00125 : 00126 self.info("executing") 00127 # Get the readout headers in the archive 00128 readoutArchive = self.getAES(self.ReadoutLocation) 00129 if readoutArchive == None: return FAILURE 00130 if len(readoutArchive)<1: return SUCCESS # No ReadoutHeaders in archive 00131 # Get current readout (first in archive list) 00132 currentReadout = readoutArchive[0].readout() 00133 if currentReadout == None: return SUCCESS # No readout this cycle 00134 currentDet = currentReadout.detector() 00135 if self.AdOnly and not currentDet.isAD(): # Select AD coincidence only 00136 return SUCCESS 00137 if len(self.detectors)>0: # Use list of selected detectors 00138 if currentDet not in self.detectors: 00139 return SUCCESS # Detector not in selected list 00140 # Get previous readouts from archive 00141 previousReadouts = [] 00142 for readoutHdr in readoutArchive[1:]: 00143 readout = readoutHdr.readout() 00144 if readout != None: previousReadouts.append(readout) 00145 if len(previousReadouts)<1: return SUCCESS # No preceeding readouts 00146 # Look for coincidences with the current readout 00147 promptReadouts = self.findPromptReadouts(currentReadout, 00148 previousReadouts) 00149 if len(promptReadouts)==0: return SUCCESS # No prompts 00150 # Make the list of readouts we want to store in the output file 00151 storageReadoutHeaders = self.makeStorageList(currentReadout, 00152 promptReadouts, 00153 previousReadouts) 00154 # Mark the readouts (and associated data) for storage 00155 status = self.markForStorage(storageReadoutHeaders) 00156 return status 00157 def finalize(self):
def DybAlg::FilterAlgs::CoincidenceFilterAlg::finalize | ( | self | ) |
Definition at line 158 of file FilterAlgs.py.
00158 : 00159 self.info("finalizing") 00160 status = DybPythonAlg.finalize(self) 00161 return status 00162 def findPromptReadouts(self, currentReadout, previousReadouts):
def DybAlg::FilterAlgs::CoincidenceFilterAlg::findPromptReadouts | ( | self, | ||
currentReadout, | ||||
previousReadouts | ||||
) |
Definition at line 163 of file FilterAlgs.py.
00163 : 00164 # Use the coincidence time to find the prompt readouts 00165 promptReadouts = [] 00166 for previousReadout in previousReadouts: 00167 if ( (self.SameDetectorOnly or self.AdOnly) 00168 and currentReadout.detector() != previousReadout.detector()): 00169 continue # Limited to the same detector? 00170 if len(self.detectors)>0: # Use list of selected detectors 00171 if currentReadout.detector() not in self.detectors: continue 00172 # Check time between readouts 00173 deltaTime = TimeStamp(currentReadout.triggerTime().GetSec() 00174 - previousReadout.triggerTime().GetSec(), 00175 currentReadout.triggerTime().GetNanoSec() 00176 - previousReadout.triggerTime().GetNanoSec()) 00177 self.verbose("dT readout: "+str(deltaTime.GetSeconds())) 00178 if deltaTime.GetSeconds()*units.second <= self.CoincidenceWindow: 00179 # Found coincidence 00180 self.debug("Found coincidence dT [s]: " 00181 +str(deltaTime.GetSeconds()) ) 00182 promptReadouts.append(previousReadout) 00183 return promptReadouts 00184 def markForStorage(self, storageHeaders):
def DybAlg::FilterAlgs::CoincidenceFilterAlg::markForStorage | ( | self, | ||
storageHeaders | ||||
) |
Definition at line 185 of file FilterAlgs.py.
00185 : 00186 # Mark the headers (and associated data) for storage 00187 # First, recursively add input headers to storage list 00188 for header in storageHeaders: 00189 self.addInputHeaders( header, storageHeaders ) 00190 # Second, loop over RegistrationSequences, and find header Registrations 00191 registrations = [] 00192 status = self.findRegistrations( storageHeaders, registrations ) 00193 if not status.isSuccess(): return status 00194 for header, registration in zip( storageHeaders, registrations ): 00195 if registration == None: 00196 self.error("Failed to find registration for header " 00197 +header.name()) 00198 return FAILURE 00199 if registration.path() in self.StorePaths: 00200 self.debug("Storing header at "+registration.path()) 00201 registration.setStore(True) # Mark header for storage 00202 return SUCCESS 00203 def findRegistrations(self, headers, registrations):
def DybAlg::FilterAlgs::CoincidenceFilterAlg::findRegistrations | ( | self, | ||
headers, | ||||
registrations | ||||
) |
Definition at line 204 of file FilterAlgs.py.
00204 : 00205 # Find the ObjectReg registrations for each header in list 00206 # Initialize registration list with 'None' 00207 for header in headers: 00208 registrations.append(None) 00209 # Get Registration Archive 00210 regSeqArchive = self.getAES(self.RegSeqLocation) 00211 if regSeqArchive == None: return FAILURE 00212 for regSequence in regSeqArchive: 00213 for registration in regSequence.registrations(): 00214 hdrObj = registration.object() 00215 if hdrObj == None: 00216 self.error("Failed to retrieve object at " 00217 +registration.path()) 00218 return FAILURE 00219 if hdrObj in headers: 00220 # Found the registration for this header 00221 hdrIndex = headers.index(hdrObj) 00222 registrations[hdrIndex] = regSequence.registration(hdrObj) 00223 return SUCCESS 00224 def addInputHeaders(self, header, headerList):
def DybAlg::FilterAlgs::CoincidenceFilterAlg::addInputHeaders | ( | self, | ||
header, | ||||
headerList | ||||
) |
Definition at line 225 of file FilterAlgs.py.
00225 : 00226 # Recurse up the header.inputHeaders and add to headerList 00227 for inputHeader in header.inputHeaders(): 00228 if inputHeader not in headerList: 00229 headerList.append(inputHeader) 00230 self.addInputHeaders(inputHeader, headerList) 00231 return 00232 def makeStorageList(self, delayedReadout, promptReadouts, previousReadouts):
def DybAlg::FilterAlgs::CoincidenceFilterAlg::makeStorageList | ( | self, | ||
delayedReadout, | ||||
promptReadouts, | ||||
previousReadouts | ||||
) |
Definition at line 233 of file FilterAlgs.py.
00233 : 00234 # Generate the list of readouts for storage 00235 storageHeaders = [delayedReadout.header()] 00236 storageHeaders += [readout.header() for readout in promptReadouts] 00237 if not self.SaveIntermediate and not self.SaveNeighbors: 00238 return storageHeaders 00239 # Save all readouts between or near prompt/delayed pair 00240 delayedTime = delayedReadout.triggerTime() 00241 earliestTime = TimeStamp(promptReadouts[0].triggerTime()) 00242 # First, find earliest prompt readout 00243 for promptReadout in promptReadouts: 00244 if promptReadout.triggerTime() < earliestTime: 00245 earliestTime = promptReadout.triggerTime() 00246 # Add time window to catch readouts just before prompt? 00247 if self.SaveNeighbors: 00248 earliestTime.Add(TimeStamp(0, 00249 int(-self.NeighborWindow 00250 /units.nanosecond))) 00251 # Catch intermediate and neigboring readouts 00252 for previousReadout in previousReadouts: 00253 prevTime = previousReadout.triggerTime() 00254 deltaT_earliest = TimeStamp( prevTime.GetSec() 00255 - earliestTime.GetSec(), 00256 prevTime.GetNanoSec() 00257 - earliestTime.GetNanoSec()) 00258 deltaT_delayed = TimeStamp( prevTime.GetSec() 00259 - delayedTime.GetSec(), 00260 prevTime.GetNanoSec() 00261 - delayedTime.GetNanoSec()) 00262 if (deltaT_earliest.GetSeconds() >= 0 00263 and deltaT_delayed.GetSeconds() <= 0): 00264 if previousReadout.header() not in storageHeaders: 00265 storageHeaders.append(previousReadout.header()) 00266 return storageHeaders 00267
Definition at line 104 of file FilterAlgs.py.
Definition at line 105 of file FilterAlgs.py.
Definition at line 106 of file FilterAlgs.py.
Definition at line 107 of file FilterAlgs.py.
Definition at line 108 of file FilterAlgs.py.
Definition at line 109 of file FilterAlgs.py.
Definition at line 110 of file FilterAlgs.py.
Definition at line 111 of file FilterAlgs.py.
Definition at line 112 of file FilterAlgs.py.
Definition at line 113 of file FilterAlgs.py.
Definition at line 115 of file FilterAlgs.py.