Main Page | Namespace List | Class Hierarchy | Alphabetical List | Class List | Directories | File List | Namespace Members | Class Members | File Members | Related Pages

jobc::Node Class Reference

A node is the smallest unit of analysis and/or reconstruction code that defines a job. More...

#include <Node.h>

Inheritance diagram for jobc::Node:

jobc::Sequence jobc::Job List of all members.

Public Member Functions

 Node ()
 Node (const char *name, const char *ver="default", bool isSeq=false)
 Node (const Node &n)
virtual ~Node ()
const char * Name () const
const char * FolderName () const
bool IsSequence () const
void SetFilter (bool onoff=true)
void ReverseFilter (bool onoff=true)
void ActivateReco (bool onoff=true)
void ActivateAna (bool onoff=true)
void StepInToFolder () const
void StepOutOfFolder () const
Nodeoperator= (const Node &rhs)
ModuleGetModule ()
virtual NodeGetNode (const char *)
virtual bool Exec (edm::EventHandle &evt)
virtual void Print (const char *indent=0) const
virtual void ResourceReport (bool printheader=false) const
double AnaTime () const
double RecoTime () const
std::string AsXML () const

Protected Attributes

ModulefModule
bool fIsSequence
std::string fName
 Name of module/node.
std::string fVersion
 Configuration version used by module.
std::string fFolderName
 Name of folder used for histogram output.
bool fFilterActive
 Are the filters active?
bool fFilterReversed
 Reverse the meanings of pass/fail?
bool fRecoActive
 Run the Reco method?
bool fAnaActive
 Run the Ana method?
unsigned int fNpassReco
 # of events which passed Reco method
unsigned int fNfailReco
 # of events which passed Reco method
unsigned int fNpassAna
 # of events which passed Ana method
unsigned int fNfailAna
 # of events which failed Ana method
Resource fResourceAna
 Resources used by Ana method.
Resource fResourceReco
 Resources used by Reco method.

Detailed Description

A node is the smallest unit of analysis and/or reconstruction code that defines a job.

Definition at line 21 of file Node.h.


Constructor & Destructor Documentation

Node::Node  ) 
 

Definition at line 25 of file Node.cxx.

Referenced by jobc::Sequence::PushBack(), and jobc::Sequence::PushFront().

00025            :
00026   fModule         ( 0     ),
00027   fIsSequence     ( false ),
00028   fName           ( "*"   ),
00029   fVersion        ( "*"   ),
00030   fFolderName     ( "?"   ),
00031   fFilterActive   ( true  ),
00032   fFilterReversed ( false ),
00033   fRecoActive     ( true  ),
00034   fAnaActive      ( true  ),
00035   fNpassReco      ( 0     ),
00036   fNfailReco      ( 0     ),
00037   fNpassAna       ( 0     ),
00038   fNfailAna       ( 0     )
00039 { }

Node::Node const char *  name,
const char *  ver = "default",
bool  isSeq = false
 

Definition at line 43 of file Node.cxx.

References fFolderName, fIsSequence, and fVersion.

00043                                                             : 
00044   fModule         ( 0       ),
00045   fIsSequence     ( isSeq   ),
00046   fName           ( name    ),
00047   fVersion        ( version ),
00048   fFolderName     ( ""      ),
00049   fFilterActive   ( true    ),
00050   fFilterReversed ( false   ),
00051   fRecoActive     ( true    ),
00052   fAnaActive      ( true    ),
00053   fNpassReco      ( 0       ),
00054   fNfailReco      ( 0       ),
00055   fNpassAna       ( 0       ),
00056   fNfailAna       ( 0       )
00057 { 
00058   // strip ':' (which come from namespaces) from folder names
00059   for (int i=0; name[i]!='\0'; ++i)
00060     if (name[i] != ':') fFolderName += name[i];
00061 
00062   // Attach version to folder name if its not 'default'
00063   if (fIsSequence==false && fVersion!="default") {
00064 
00065     fFolderName += "_";
00066     fFolderName += fVersion;
00067   }
00068 
00069 }

Node::Node const Node n  ) 
 

Definition at line 73 of file Node.cxx.

00073                         :
00074   fModule         ( 0     ),
00075   fIsSequence     ( false ),
00076   fName           ( "*"   ),
00077   fVersion        ( "*"   ),
00078   fFolderName     ( "?"   ),
00079   fFilterActive   ( true  ),
00080   fFilterReversed ( false ),
00081   fRecoActive     ( true  ),
00082   fAnaActive      ( true  ),
00083   fNpassReco      ( 0     ),
00084   fNfailReco      ( 0     ),
00085   fNpassAna       ( 0     ),
00086   fNfailAna       ( 0     ),
00087   fResourceAna    (n.fResourceAna),
00088   fResourceReco   (n.fResourceReco)
00089 { *this = n; }

Node::~Node  )  [virtual]
 

Definition at line 93 of file Node.cxx.

References fModule, StepInToFolder(), and jobc::HistoFile::StepOut().

00094 {
00095   if (fModule) { 
00096     this->StepInToFolder();
00097     delete fModule;
00098     fModule = 0;
00099     HistoFile::StepOut();
00100   }
00101 }


Member Function Documentation

void jobc::Node::ActivateAna bool  onoff = true  )  [inline]
 

Definition at line 35 of file Node.h.

Referenced by jobc::nodeBuilder::Build(), testJobCJob(), testJobCNode(), and testJobCSequence().

00035 { fAnaActive      = onoff; }

void jobc::Node::ActivateReco bool  onoff = true  )  [inline]
 

Definition at line 34 of file Node.h.

Referenced by jobc::nodeBuilder::Build(), testJobCJob(), testJobCNode(), and testJobCSequence().

00034 { fRecoActive     = onoff; }

double Node::AnaTime  )  const
 

Definition at line 105 of file Node.cxx.

References fResourceAna, jobc::Resource::stime, and jobc::Resource::utime.

Referenced by jobc::Sequence::Print().

00105                             {
00106   return fResourceAna.stime+fResourceAna.utime;
00107 }

std::string Node::AsXML  )  const
 

Return a string which contains the XML flags required to create this node

Reimplemented in jobc::Job, and jobc::Sequence.

Definition at line 371 of file Node.cxx.

References fName, and fVersion.

Referenced by testJobCNode().

00372 {
00373   std::ostringstream xml;
00374   
00375   xml << "<node ";
00376   if (fIsSequence) xml << "sequence=\"" << fName << "\" ";
00377   else             xml << "module=\""   << fName << "\" ";
00378   
00379   xml << "config=\"" << fVersion << "\" ";
00380   
00381   if (fRecoActive) xml << "reco=\"1\" ";
00382   else             xml << "reco=\"0\" ";
00383 
00384   if (fAnaActive) xml << "ana=\"1\" ";
00385   else            xml << "ana=\"0\" ";
00386 
00387   if (fFilterActive) {
00388     if (fFilterReversed) xml << "filter=\"reversed\"";
00389     else                 xml << "filter=\"on\"";
00390   }
00391   else {
00392     xml << "filter=\"off\"";
00393   }
00394   xml << "/>";
00395   
00396   return xml.str();
00397 }

bool Node::Exec edm::EventHandle evt  )  [virtual]
 

Todo:
Support filters based on any combination of Reco and Ana results

Reimplemented in jobc::Sequence.

Definition at line 176 of file Node.cxx.

References jobc::Module::Ana(), jobc::Resource::Difference(), fAnaActive, fFilterActive, fRecoActive, fResourceAna, fResourceReco, GetModule(), jobc::Resource::Log(), jobc::Module::Reco(), jobc::Result, StepInToFolder(), StepOutOfFolder(), and jobc::Resource::Sum().

00177 {
00178 //======================================================================
00179 // Run the Ana/Reco methods for the module
00180 //======================================================================
00181   bool     passed     = true;
00182   Result   passedReco = kPassed;
00183   Result   passedAna  = kPassed;
00184   Resource r0;
00185   Resource r1;
00186   if (fRecoActive) {
00187     // Execute the method
00188     this->StepInToFolder();
00189     r0.Log();
00190     passedReco = this->GetModule()->Reco(evt);
00191     r1.Log();
00192     r1.Difference(r0);
00193     fResourceReco.Sum(r1);
00194     this->StepOutOfFolder();
00195     if (passedReco==kPassed) ++fNpassReco;
00196     else                     ++fNfailReco;
00197   }
00198   if (fAnaActive) {
00199     this->StepInToFolder();
00200     r0.Log();
00201     passedAna = this->GetModule()->Ana(evt);
00202     r1.Log();
00203     r1.Difference(r0);
00204     fResourceAna.Sum(r1);
00205     this->StepOutOfFolder();
00206     if (passedAna==kPassed) ++fNpassAna;
00207     else                    ++fNfailAna;
00208   }
00209   
00210   // No filters active, pass all events
00211   if (fFilterActive==false) return true;
00212 
00215   // if (fFilterMode == kRecoOnly)         passed = passedReco;
00216   // if (fFilterMode == kAnaOnly )         passed = passedAna;
00217   // if (fFilterMode == kRecoAndAna)       passed = passedReco&passedAna;
00218   // if (fFilterMode == kRecoOrAna)        passed = passedReco|passedAna;
00219   // if (fFilterMode == kRecoAndNotAna)    passed = passedReco&(!passedAna);
00220   // if (fFilterMode == kNotRecoAndAna)    passed = (!passedReco)&passedAna;
00221 
00222   // For now consider an event failed if either Reco or Ana fail the
00223   // event
00224   passed = true;
00225   if (fRecoActive && (passedReco==kFailed)) passed = false;
00226   if (fAnaActive  && (passedAna ==kFailed)) passed = false;
00227 
00228   if (fFilterReversed) return !passed; // Flip pass/fail
00229   return                       passed; // Normal case
00230 }

const char* jobc::Node::FolderName  )  const [inline]
 

Definition at line 29 of file Node.h.

00029 { return fFolderName.c_str(); }

Module * Node::GetModule  ) 
 

Definition at line 117 of file Node.cxx.

References fModule, fName, fVersion, jobc::ModuleFactory::Instance(), jobc::ModuleFactory::LookUp(), jobc::ModuleMaker_t, StepInToFolder(), and StepOutOfFolder().

Referenced by jobc::Sequence::EndFile(), jobc::Sequence::EndRun(), jobc::Sequence::EndSubrun(), Exec(), jobc::Sequence::NewFile(), jobc::Sequence::NewRun(), and jobc::Sequence::NewSubrun().

00118 {
00119 //======================================================================
00120 // Return the module associated with this node
00121 //======================================================================
00122   if (fModule==0) {
00123     ModuleMaker_t mm = ModuleFactory::Instance().LookUp(fName.c_str());
00124     if (mm==0) {
00125       std::cerr << "JobCNode:" << __LINE__ 
00126                 << " Unable to find module " << fName.c_str() << std::endl;
00127       abort();
00128       return 0;
00129     }
00130     this->StepInToFolder();
00131     fModule = (*mm)(fVersion.c_str()); // Build the module
00132     this->StepOutOfFolder();
00133   }
00134   return fModule;
00135 }

virtual Node* jobc::Node::GetNode const char *   )  [inline, virtual]
 

Reimplemented in jobc::Sequence.

Definition at line 43 of file Node.h.

00043 { return this; }

bool jobc::Node::IsSequence  )  const [inline]
 

Definition at line 30 of file Node.h.

Referenced by jobc::sequenceBuilder::Build(), jobc::jobBuilder::Build(), jobc::Sequence::EndFile(), jobc::Sequence::EndRun(), jobc::Sequence::EndSubrun(), jobc::Sequence::NewFile(), jobc::Sequence::NewRun(), jobc::Sequence::NewSubrun(), jobc::Sequence::operator=(), jobc::Sequence::Print(), and jobc::Sequence::ResourceReport().

00030 { return fIsSequence;         }

const char* jobc::Node::Name  )  const [inline]
 

Definition at line 28 of file Node.h.

Referenced by jobc::Sequence::GetNode(), jobc::SeqTable::Insert(), jobc::Sequence::Print(), and jobc::Job::Run().

00028 { return fName.c_str();       }

Node & Node::operator= const Node rhs  ) 
 

Definition at line 139 of file Node.cxx.

References fAnaActive, fFilterActive, fFilterReversed, fFolderName, fIsSequence, fModule, fName, fNfailAna, fNfailReco, fNpassAna, fNpassReco, fRecoActive, fVersion, StepInToFolder(), and StepOutOfFolder().

Referenced by jobc::Sequence::operator=().

00140 {
00141   if (fModule) {
00142     this->StepInToFolder();
00143     delete fModule;
00144     this->StepOutOfFolder();
00145   }
00146   fModule         = 0;
00147   fIsSequence     = rhs.fIsSequence;
00148   fName           = rhs.fName;
00149   fVersion        = rhs.fVersion;
00150   fFolderName     = rhs.fFolderName;
00151   fFilterActive   = rhs.fFilterActive;
00152   fFilterReversed = rhs.fFilterReversed;
00153   fRecoActive     = rhs.fRecoActive;
00154   fAnaActive      = rhs.fAnaActive;
00155   fNpassReco      = 0;
00156   fNfailReco      = 0;
00157   fNpassAna       = 0;
00158   fNfailAna       = 0;
00159   return *this;
00160 }

void Node::Print const char *  indent = 0  )  const [virtual]
 

Definition at line 234 of file Node.cxx.

References fFilterActive, fResourceAna, fResourceReco, jobc::Resource::stime, and jobc::Resource::utime.

Referenced by jobc::Sequence::Print(), and testJobCNode().

00235 {
00236   const char*                             filterStr = " ";
00237   if ( fFilterActive && !fFilterReversed) filterStr = "+";
00238   if ( fFilterActive &&  fFilterReversed) filterStr = "!";
00239 
00240   const char*      recoStr = "-reco";
00241   if (fRecoActive) recoStr = "+reco";
00242 
00243   const char*     anaStr = "-ana ";
00244   if (fAnaActive) anaStr = "+ana ";
00245   
00246   std::string mod("");
00247   if (indent) mod += indent;
00248   mod += filterStr;
00249   mod += fName; 
00250   mod += "/"; 
00251   mod += fVersion; 
00252   mod += "/";
00253   
00254   char buff[256];
00255   sprintf(buff,
00256           "%-32s %s/%.5d/%.5d/%.5d %.2e/%.2e\n"
00257           "%-32s %s/%.5d/%.5d/%.5d %.2e/%.2e",
00258           mod.c_str(),
00259           recoStr,
00260           fNpassReco,
00261           fNfailReco,
00262           fNpassReco+fNfailReco,
00263           fResourceReco.utime,
00264           fResourceReco.stime,
00265           "",
00266           anaStr,
00267           fNpassAna,
00268           fNfailAna,
00269           fNpassAna+fNfailAna,
00270           fResourceAna.utime,
00271           fResourceAna.stime);
00272   std::cout << buff << std::endl;
00273 }

double Node::RecoTime  )  const
 

Definition at line 111 of file Node.cxx.

References fResourceReco, jobc::Resource::stime, and jobc::Resource::utime.

Referenced by jobc::Sequence::Print().

00111                             {
00112   return fResourceReco.stime+fResourceReco.utime;
00113 }

void Node::ResourceReport bool  printheader = false  )  const [virtual]
 

Reimplemented in jobc::Sequence.

Definition at line 277 of file Node.cxx.

References fName, fResourceAna, fResourceReco, jobc::Resource::idrss, jobc::Resource::inblock, jobc::Resource::isrss, jobc::Resource::ixrss, jobc::Resource::majflt, jobc::Resource::maxrss, jobc::Resource::minflt, jobc::Resource::msgrcv, jobc::Resource::msgsnd, jobc::Resource::nivcsw, jobc::Resource::nsignals, jobc::Resource::nswap, jobc::Resource::nvcsw, jobc::Resource::oublock, jobc::Resource::statm_drs, jobc::Resource::statm_dt, jobc::Resource::statm_lrs, jobc::Resource::statm_resident, jobc::Resource::statm_shared, jobc::Resource::statm_size, jobc::Resource::statm_trs, jobc::Resource::stime, and jobc::Resource::utime.

Referenced by jobc::Sequence::ResourceReport().

00278 {
00279   const char* label[] = {
00280     "Module/Method", "utime",  "stime",    "maxrss",
00281     "ixrss",         "idrss",  "isrss",    "minflt",
00282     "majflt",        "nswap",  "inblock",  "oublock",
00283     "msgsnd",        "msgrcv", "nsignals", "nvcsw",
00284     "nivcsw",        "size",   "resident", "shared",
00285     "trs",           "drs",    "lrs",      "dt",
00286     0
00287   };
00288   if (printheader) {
00289     printf("%20s "
00290            "%8s %8s %8s %8s "
00291            "%8s %8s %8s %8s "
00292            "%8s %8s %8s %8s "
00293            "%8s %8s %8s %8s "
00294            "%8s %8s %8s %8s\n",
00295            label[0],
00296            label[1],  label[2],  label[3],  label[4],
00297            label[5],  label[6],  label[7],  label[5],
00298            label[9],  label[10], label[11], label[6],
00299            label[13], label[14], label[15], label[16],
00300            label[17], label[18], label[19], label[20]);
00301   }
00302 
00303   std::string reco(fName); reco += ":reco";
00304   printf("%20s "
00305          "%8.2e %8.2e %8.2e %8.2e %8.2e "
00306          "%8.2e %8.2e %8.2e %8.2e %8.2e "
00307          "%8.2e %8.2e %8.2e %8.2e %8.2e "
00308          "%8.2e %8.2e %8.2e %8.2e %8.2e "
00309          "%8.2e %8.2e %8.2e\n",
00310          reco.c_str(),
00311          fResourceReco.utime,
00312          fResourceReco.stime,
00313          fResourceReco.maxrss,
00314          fResourceReco.ixrss,
00315          fResourceReco.idrss,
00316          fResourceReco.isrss,
00317          fResourceReco.minflt,
00318          fResourceReco.majflt,
00319          fResourceReco.nswap,
00320          fResourceReco.inblock,
00321          fResourceReco.oublock,
00322          fResourceReco.msgsnd,
00323          fResourceReco.msgrcv,
00324          fResourceReco.nsignals,
00325          fResourceReco.nvcsw,
00326          fResourceReco.nivcsw,
00327          fResourceReco.statm_size,
00328          fResourceReco.statm_resident,
00329          fResourceReco.statm_shared,
00330          fResourceReco.statm_trs,
00331          fResourceReco.statm_drs,
00332          fResourceReco.statm_lrs,
00333          fResourceReco.statm_dt);
00334   std::string ana(fName); ana += ":ana";
00335   printf("%20s "
00336          "%8.2e %8.2e %8.2e %8.2e %8.2e "
00337          "%8.2e %8.2e %8.2e %8.2e %8.2e "
00338          "%8.2e %8.2e %8.2e %8.2e %8.2e "
00339          "%8.2e %8.2e %8.2e %8.2e %8.2e "
00340          "%8.2e %8.2e %8.2e\n",
00341          ana.c_str(),
00342          fResourceAna.utime,
00343          fResourceAna.stime,
00344          fResourceAna.maxrss,
00345          fResourceAna.ixrss,
00346          fResourceAna.idrss,
00347          fResourceAna.isrss,
00348          fResourceAna.minflt,
00349          fResourceAna.majflt,
00350          fResourceAna.nswap,
00351          fResourceAna.inblock,
00352          fResourceAna.oublock,
00353          fResourceAna.msgsnd,
00354          fResourceAna.msgrcv,
00355          fResourceAna.nsignals,
00356          fResourceAna.nvcsw,
00357          fResourceAna.nivcsw,
00358          fResourceAna.statm_size,
00359          fResourceAna.statm_resident,
00360          fResourceAna.statm_shared,
00361          fResourceAna.statm_trs,
00362          fResourceAna.statm_drs,
00363          fResourceAna.statm_lrs,
00364          fResourceAna.statm_dt);
00365 }

void jobc::Node::ReverseFilter bool  onoff = true  )  [inline]
 

Definition at line 33 of file Node.h.

Referenced by jobc::nodeBuilder::Build(), testJobCJob(), testJobCNode(), and testJobCSequence().

00033 { fFilterReversed = onoff; }

void jobc::Node::SetFilter bool  onoff = true  )  [inline]
 

Definition at line 32 of file Node.h.

Referenced by jobc::nodeBuilder::Build(), testJobCJob(), testJobCNode(), and testJobCSequence().

00032 { fFilterActive   = onoff; }

void Node::StepInToFolder  )  const
 

Definition at line 164 of file Node.cxx.

References jobc::HistoFile::StepIn().

Referenced by jobc::Sequence::EndFile(), jobc::Sequence::EndRun(), jobc::Sequence::EndSubrun(), Exec(), GetModule(), jobc::Sequence::NewFile(), jobc::Sequence::NewRun(), jobc::Sequence::NewSubrun(), operator=(), and ~Node().

00164                                 {
00165   HistoFile::StepIn(this->fFolderName.c_str());
00166 }

void Node::StepOutOfFolder  )  const
 

Definition at line 170 of file Node.cxx.

References jobc::HistoFile::StepOut().

Referenced by jobc::Sequence::EndFile(), jobc::Sequence::EndRun(), jobc::Sequence::EndSubrun(), Exec(), GetModule(), jobc::Sequence::NewFile(), jobc::Sequence::NewRun(), jobc::Sequence::NewSubrun(), and operator=().

00170                                  {
00171   HistoFile::StepOut();
00172 }


Member Data Documentation

bool jobc::Node::fAnaActive [protected]
 

Run the Ana method?

Definition at line 62 of file Node.h.

Referenced by Exec(), and operator=().

bool jobc::Node::fFilterActive [protected]
 

Are the filters active?

Definition at line 59 of file Node.h.

Referenced by Exec(), operator=(), and Print().

bool jobc::Node::fFilterReversed [protected]
 

Reverse the meanings of pass/fail?

Definition at line 60 of file Node.h.

Referenced by operator=().

std::string jobc::Node::fFolderName [protected]
 

Name of folder used for histogram output.

Definition at line 58 of file Node.h.

Referenced by Node(), and operator=().

bool jobc::Node::fIsSequence [protected]
 

Definition at line 54 of file Node.h.

Referenced by Node(), and operator=().

Module* jobc::Node::fModule [protected]
 

Definition at line 53 of file Node.h.

Referenced by GetModule(), operator=(), and ~Node().

std::string jobc::Node::fName [protected]
 

Name of module/node.

Definition at line 56 of file Node.h.

Referenced by AsXML(), GetModule(), operator=(), and ResourceReport().

unsigned int jobc::Node::fNfailAna [protected]
 

# of events which failed Ana method

Definition at line 66 of file Node.h.

Referenced by operator=().

unsigned int jobc::Node::fNfailReco [protected]
 

# of events which passed Reco method

Definition at line 64 of file Node.h.

Referenced by operator=().

unsigned int jobc::Node::fNpassAna [protected]
 

# of events which passed Ana method

Definition at line 65 of file Node.h.

Referenced by operator=().

unsigned int jobc::Node::fNpassReco [protected]
 

# of events which passed Reco method

Definition at line 63 of file Node.h.

Referenced by operator=().

bool jobc::Node::fRecoActive [protected]
 

Run the Reco method?

Definition at line 61 of file Node.h.

Referenced by Exec(), and operator=().

Resource jobc::Node::fResourceAna [protected]
 

Resources used by Ana method.

Definition at line 67 of file Node.h.

Referenced by AnaTime(), Exec(), Print(), and ResourceReport().

Resource jobc::Node::fResourceReco [protected]
 

Resources used by Reco method.

Definition at line 68 of file Node.h.

Referenced by Exec(), Print(), RecoTime(), and ResourceReport().

std::string jobc::Node::fVersion [protected]
 

Configuration version used by module.

Definition at line 57 of file Node.h.

Referenced by AsXML(), GetModule(), Node(), and operator=().


The documentation for this class was generated from the following files:
Generated on Sun Nov 22 04:45:32 2009 for NOvA Offline by  doxygen 1.3.9.1