| Classes | Job Modules | Data Objects | Services | Algorithms | Tools | Packages | Directories | Tracs |

In This Package:

DybAlg::FilterAlgs::CoincidenceFilterAlg Class Reference

List of all members.

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

Detailed Description

Definition at line 99 of file FilterAlgs.py.


Member Function Documentation

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 


Member Data Documentation

DybAlg::FilterAlgs::CoincidenceFilterAlg::ReadoutLocation

Definition at line 104 of file FilterAlgs.py.

DybAlg::FilterAlgs::CoincidenceFilterAlg::RegSeqLocation

Definition at line 105 of file FilterAlgs.py.

DybAlg::FilterAlgs::CoincidenceFilterAlg::StorePaths

Definition at line 106 of file FilterAlgs.py.

DybAlg::FilterAlgs::CoincidenceFilterAlg::CoincidenceWindow

Definition at line 107 of file FilterAlgs.py.

DybAlg::FilterAlgs::CoincidenceFilterAlg::DetectorNames

Definition at line 108 of file FilterAlgs.py.

DybAlg::FilterAlgs::CoincidenceFilterAlg::AdOnly

Definition at line 109 of file FilterAlgs.py.

DybAlg::FilterAlgs::CoincidenceFilterAlg::SameDetectorOnly

Definition at line 110 of file FilterAlgs.py.

DybAlg::FilterAlgs::CoincidenceFilterAlg::SaveIntermediate

Definition at line 111 of file FilterAlgs.py.

DybAlg::FilterAlgs::CoincidenceFilterAlg::SaveNeighbors

Definition at line 112 of file FilterAlgs.py.

DybAlg::FilterAlgs::CoincidenceFilterAlg::NeighborWindow

Definition at line 113 of file FilterAlgs.py.

DybAlg::FilterAlgs::CoincidenceFilterAlg::detectors

Definition at line 115 of file FilterAlgs.py.


The documentation for this class was generated from the following file:
| Classes | Job Modules | Data Objects | Services | Algorithms | Tools | Packages | Directories | Tracs |

Generated on Mon Apr 11 20:40:41 2011 for DybAlg by doxygen 1.4.7