Gaudi Framework, version v23r0

Home   Generated: Mon Jan 30 2012
Public Member Functions | Public Attributes

GaudiMP::GMPBase::GMPComponent Class Reference

Inheritance diagram for GaudiMP::GMPBase::GMPComponent:
Inheritance graph
[legend]

List of all members.

Public Member Functions

def __init__
def Start
def Engine
def processConfiguration
def SetupGaudiPython
def StartGaudiPython
def LoadTES
def getEventNumber
def IdentifyWriters
def dumpHistograms
def Initialize
def Finalize
def Report

Public Attributes

 nodeType
 finalEvent
 lastEvent
 log
 nodeID
 currentEvent
 evcom
 evcoms
 hq
 fq
 nIn
 nOut
 stat
 iTime
 rTime
 fTime
 firstEvTime
 tTime
 proc
 a
 evt
 hvt
 fsr
 inc
 pers
 ts
 TS

Detailed Description

Definition at line 389 of file GMPBase.py.


Constructor & Destructor Documentation

def GaudiMP::GMPBase::GMPComponent::__init__ (   self,
  nodeType,
  nodeID,
  queues,
  events,
  params 
)

Definition at line 396 of file GMPBase.py.

00397                                                                     :
00398         # declare a Gaudi MultiProcessing Node
00399         # the nodeType is going to be one of Reader, Worker, Writer
00400         # qPair is going to be a tuple of ( qin, qout )
00401         # for sending and receiving
00402         # if nodeType is "Writer", it will be a list of qPairs,
00403         # as there's one queue-in from each Worker
00404         #
00405         # params is a tuple of (nWorkers, config, log)
00406 
00407         self.nodeType = nodeType
00408         current_process().name = nodeType
00409 
00410         # Synchronisation Event() objects for keeping track of the system
00411         self.initEvent, eventLoopSyncer, self.finalEvent = events
00412         self.eventLoopSyncer, self.lastEvent = eventLoopSyncer   # unpack tuple
00413 
00414         # necessary for knowledge of the system
00415         self.nWorkers, self.sEvent, self.config, self.log = params
00416         self.nodeID   = nodeID
00417 
00418         # describe the state of the node by the current Event Number
00419         self.currentEvent = None
00420 
00421         # Unpack the Queues : (events, histos, filerecords)
00422         qPair, histq, fq = queues
00423 
00424         # Set up the Queue Mechanisms ( Event Communicators )
00425         if self.nodeType == 'Reader' or self.nodeType == 'Worker' :
00426             # Reader or Worker Node
00427             qin, qout = qPair
00428             self.evcom = EventCommunicator( self, qin, qout )
00429         else :
00430             # Writer : many queues in, no queue out
00431             assert self.nodeType == 'Writer'
00432             self.evcoms = []
00433             qsin = qPair[0]
00434             for q in qsin :
00435                 ec = EventCommunicator( self, q, None )
00436                 self.evcoms.append( ec )
00437         # Histogram Queue
00438         self.hq = histq
00439         # FileRecords Queue
00440         self.fq = fq
00441 
00442         # Universal Counters (available to all nodes)
00443         # Use sensibly!!!
00444         self.nIn  = 0
00445         self.nOut = 0
00446 
00447         # Status Flag (possibly remove later)
00448         self.stat = SUCCESS
00449 
00450         # Set logger name
00451         self.log.name = '%s-%i'%(self.nodeType, self.nodeID)
00452 
00453         # Heuristic variables
00454         # time for init, run, final, firstEventTime, totalTime
00455         self.iTime       = 0.0
00456         self.rTime       = 0.0
00457         self.fTime       = 0.0
00458         self.firstEvTime = 0.0
00459         self.tTime       = 0.0
00460 
00461         # define the separate process
00462         self.proc = Process( target=self.Engine )


Member Function Documentation

def GaudiMP::GMPBase::GMPComponent::dumpHistograms (   self )
Method used by the GaudiPython algorithm CollectHistos
to obtain a dictionary of form { path : object }
representing the Histogram Store

Definition at line 562 of file GMPBase.py.

00563                                :
00564         '''
00565         Method used by the GaudiPython algorithm CollectHistos
00566         to obtain a dictionary of form { path : object }
00567         representing the Histogram Store
00568         '''
00569         nlist = self.hvt.getHistoNames( )
00570         histDict = {}
00571         objects = 0 ; histos = 0
00572         if nlist :
00573             for n in nlist :
00574                 o = self.hvt[ n ]
00575                 if type(o) in aidatypes :
00576                     o = aida2root(o)
00577                     histos  += 1
00578                 else :
00579                     objects += 1
00580                 histDict[ n ] = o
00581         else :
00582             print 'WARNING : no histograms to recover?'
00583         return histDict

def GaudiMP::GMPBase::GMPComponent::Engine (   self )

Reimplemented in GaudiMP::GMPBase::Reader, GaudiMP::GMPBase::Worker, and GaudiMP::GMPBase::Writer.

Definition at line 467 of file GMPBase.py.

00468                        :
00469         # This will be the method carried out by the Node
00470         # Different for all
00471         pass

def GaudiMP::GMPBase::GMPComponent::Finalize (   self )

Definition at line 593 of file GMPBase.py.

00594                          :
00595         start = time.time()
00596         self.a.stop()
00597         self.a.finalize()
00598         self.log.info( '%s-%i Finalized'%(self.nodeType, self.nodeID) )
00599         self.finalEvent.set()
00600         self.fTime = time.time() - start

def GaudiMP::GMPBase::GMPComponent::getEventNumber (   self )

Definition at line 506 of file GMPBase.py.

00507                                :
00508         # Using getList or getHistoNames can result in the EventSelector
00509         # re-initialising connection to RootDBase, which costs a lot of
00510         # time... try to build a set of Header paths??
00511 
00512         # First Attempt : Unpacked Event Data
00513         lst = [ '/Event/Gen/Header',
00514                 '/Event/Rec/Header' ]
00515         for l in lst :
00516             path = l
00517             try :
00518                 n = self.evt[path].evtNumber()
00519                 return n
00520             except :
00521                 # No evt number at this path
00522                 continue
00523 
00524         # second attepmt : try DAQ/RawEvent data
00525         # The Evt Number is in bank type 16, bank 0, data pt 4
00526         try :
00527             n = self.evt['/Event/DAQ/RawEvent'].banks(16)[0].data()[4]
00528             return n
00529         except :
00530             pass
00531 
00532         # Default Action
00533         if self.nIn > 0 or self.nOut > 0 :
00534             pass
00535         else :
00536             self.log.warning('Could not determine Event Number')
00537         return -1

def GaudiMP::GMPBase::GMPComponent::IdentifyWriters (   self )

Definition at line 538 of file GMPBase.py.

00539                                 :
00540         #
00541         # Identify Writers in the Configuration
00542         #
00543         d = {}
00544         keys = [ "events", "records", "tuples", "histos" ]
00545         for k in keys :
00546             d[k] = []
00547 
00548         # Identify Writers and Classify
00549         wkeys = WRITERTYPES.keys()
00550         for v in self.config.values() :
00551             if v.__class__.__name__ in wkeys :
00552                 writerType = WRITERTYPES[ v.__class__.__name__ ]
00553                 d[writerType].append( MiniWriter(v, writerType, self.config) )
00554                 if self.nodeID == 0 :
00555                     self.log.info('Writer Found : %s'%(v.name()))
00556 
00557         # Now Check for the Histogram Service
00558         if 'HistogramPersistencySvc' in  self.config.keys() :
00559             hfile =self.config['HistogramPersistencySvc'].getProp('OutputFile')
00560             d[ "histos" ].append( hfile )
00561         return d

def GaudiMP::GMPBase::GMPComponent::Initialize (   self )

Definition at line 584 of file GMPBase.py.

00585                            :
00586         start = time.time()
00587         self.processConfiguration( )
00588         self.SetupGaudiPython( )
00589         # Set the initialisation flag!
00590         self.initEvent.set()
00591         self.StartGaudiPython( )
00592         self.iTime = time.time() - start

def GaudiMP::GMPBase::GMPComponent::LoadTES (   self,
  tbufferfile 
)

Definition at line 500 of file GMPBase.py.

00501                                      :
00502         root = gbl.DataObject()
00503         setOwnership(root, False)
00504         self.evt.setRoot( '/Event', root )
00505         self.ts.loadBuffer(tbufferfile)

def GaudiMP::GMPBase::GMPComponent::processConfiguration (   self )

Reimplemented in GaudiMP::GMPBase::Reader, GaudiMP::GMPBase::Worker, and GaudiMP::GMPBase::Writer.

Definition at line 472 of file GMPBase.py.

00473                                      :
00474         # Different for all ; customize Configuration for multicore
00475         pass

def GaudiMP::GMPBase::GMPComponent::Report (   self )

Definition at line 601 of file GMPBase.py.

00602                        :
00603         self.log.name = "%s-%i Audit"%(self.nodeType, self.nodeID)
00604         allTime  = "Alive Time     : %5.2f"%(self.tTime)
00605         initTime = "Init Time      : %5.2f"%(self.iTime)
00606         frstTime = "1st Event Time : %5.2f"%(self.firstEvTime)
00607         runTime  = "Run Time       : %5.2f"%(self.rTime)
00608         finTime  = "Finalise Time  : %5.2f"%(self.fTime)
00609         tup = ( allTime, initTime, frstTime, runTime, finTime )
00610         for t in tup :
00611             self.log.info( t )
00612         self.log.name = "%s-%i"%(self.nodeType, self.nodeID)
00613         # and report from the TESSerializer
00614         self.TS.Report()
00615 
00616 # =============================================================================

def GaudiMP::GMPBase::GMPComponent::SetupGaudiPython (   self )

Definition at line 476 of file GMPBase.py.

00477                                  :
00478         # This method will initialize the GaudiPython Tools
00479         # such as the AppMgr and so on
00480         self.a   = AppMgr()
00481         if SMAPS :
00482             from AlgSmapShot import SmapShot
00483             smapsLog = self.nodeType+'-'+str(self.nodeID)+'.smp'
00484             ss = SmapShot( logname=smapsLog )
00485             self.a.addAlgorithm( ss )
00486         self.evt = self.a.evtsvc()
00487         self.hvt = self.a.histsvc()
00488         self.fsr = self.a.filerecordsvc()
00489         self.inc = self.a.service('IncidentSvc','IIncidentSvc')
00490         self.pers = self.a.service( 'EventPersistencySvc', 'IAddressCreator' )
00491         self.ts  = gbl.GaudiMP.TESSerializer( self.evt._idp, self.pers )
00492         self.TS  = TESSerializer( self.ts, self.evt,
00493                                   self.nodeType, self.nodeID, self.log )
00494         return SUCCESS

def GaudiMP::GMPBase::GMPComponent::Start (   self )

Definition at line 463 of file GMPBase.py.

00464                       :
00465         # Fork and start the separate process
00466         self.proc.start()

def GaudiMP::GMPBase::GMPComponent::StartGaudiPython (   self )

Definition at line 495 of file GMPBase.py.

00496                                  :
00497         self.a.initialize()
00498         self.a.start()
00499         return SUCCESS


Member Data Documentation

Definition at line 476 of file GMPBase.py.

Reimplemented in GaudiMP::GMPBase::Reader, GaudiMP::GMPBase::Worker, and GaudiMP::GMPBase::Writer.

Definition at line 396 of file GMPBase.py.

Definition at line 396 of file GMPBase.py.

Definition at line 396 of file GMPBase.py.

Definition at line 476 of file GMPBase.py.

Definition at line 396 of file GMPBase.py.

Reimplemented in GaudiMP::GMPBase::Reader, and GaudiMP::GMPBase::Worker.

Definition at line 396 of file GMPBase.py.

Definition at line 396 of file GMPBase.py.

Definition at line 476 of file GMPBase.py.

Definition at line 396 of file GMPBase.py.

Definition at line 396 of file GMPBase.py.

Definition at line 476 of file GMPBase.py.

Definition at line 476 of file GMPBase.py.

Definition at line 396 of file GMPBase.py.

Definition at line 396 of file GMPBase.py.

Definition at line 396 of file GMPBase.py.

Reimplemented in GaudiMP::GMPBase::Worker.

Definition at line 396 of file GMPBase.py.

Reimplemented in GaudiMP::GMPBase::Worker.

Definition at line 396 of file GMPBase.py.

Definition at line 396 of file GMPBase.py.

Reimplemented in GaudiMP::GMPBase::Reader.

Definition at line 396 of file GMPBase.py.

Definition at line 476 of file GMPBase.py.

Definition at line 396 of file GMPBase.py.

Reimplemented in GaudiMP::GMPBase::Writer.

Definition at line 396 of file GMPBase.py.

Reimplemented in GaudiMP::GMPBase::Reader.

Definition at line 396 of file GMPBase.py.

Definition at line 476 of file GMPBase.py.

Definition at line 476 of file GMPBase.py.

Reimplemented in GaudiMP::GMPBase::Reader, and GaudiMP::GMPBase::Worker.

Definition at line 396 of file GMPBase.py.


The documentation for this class was generated from the following file:
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Defines

Generated at Mon Jan 30 2012 13:53:33 for Gaudi Framework, version v23r0 by Doxygen version 1.7.2 written by Dimitri van Heesch, © 1997-2004