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

EventDataModel/EventHandle.cxx

Go to the documentation of this file.
00001 
00002 // $Id: EventHandle.cxx,v 1.1 2007/02/09 04:43:48 fmwk Exp $
00003 //
00004 // Provide a handle to an event to control access to EDMEvents. This
00005 // allows for things like partial I/O of the event as well as imroved
00006 // "const-correctness".
00007 //
00008 // messier@indiana.edu
00010 #include "EventDataModel/EventHandle.h"
00011 #include "EventDataModel/DataBucket.h"
00012 #include "EventDataModel/Event.h"
00013 #include "TProcessID.h"
00014 using namespace edm;
00015 
00016 //......................................................................
00020 EventHandle::EventHandle() : 
00021   fObjectCnt(TProcessID::GetObjectCount()),
00022   fEvent  (new Event ),
00023   fMC     (fEvent->fMC    ),
00024   fDetSim (fEvent->fDetSim),
00025   fDAQ    (fEvent->fDAQ   ),
00026   fRaw    (fEvent->fRaw   ),
00027   fRawAux (fEvent->fRawAux),
00028   fCal    (fEvent->fCal   ),
00029   fReco   (fEvent->fReco  ),
00030   fUser   (fEvent->fUser  ),
00031   fSummary(fEvent->fSummary)
00032 {
00033   for (int i = 0; i<kNBranch; ++i) fIsLoaded[i] = false;
00034 }
00035 
00036 //......................................................................
00040 EventHandle::~EventHandle() 
00041 {
00042   fMC.     ClearArrays();
00043   fDetSim. ClearArrays();
00044   fDAQ.    ClearArrays();
00045   fRaw.    ClearArrays();
00046   fRawAux. ClearArrays();
00047   fCal.    ClearArrays();
00048   fReco.   ClearArrays();
00049   fUser.   ClearArrays();
00050   fSummary.ClearArrays();
00051   delete fEvent;
00052 }
00053 
00054 //......................................................................
00058 void EventHandle::Clear() 
00059 {
00060   this->ClearLoadFlags();
00061   fEvent->Clear();
00062 }
00063 
00064 //......................................................................
00071 int EventHandle::ClearLoadFlags() 
00072 {
00073   int isave=0;
00074   TProcessID::SetObjectCount(fObjectCnt);
00075 
00076   for (int i=0; i<kNBranch; ++i) { // Mark all branches as unloaded
00077     if (fIsLoaded[i] == true) isave |= (1 << i);
00078     fIsLoaded[i] = false;     
00079   }
00080   return isave;
00081 }
00082 
00083 //......................................................................
00090 void EventHandle::SetLoaded(int branchId) const
00091 {
00092   assert(branchId>=0 && branchId<=kNBranch);
00093   // Use kNBranch to mark that all branches are loaded
00094   if (branchId==kNBranch) {
00095     for (int i=0; i<kNBranch; ++i) fIsLoaded[i] = true;
00096     return;
00097   }
00098   // Use others to mark branches one-by-one
00099   fIsLoaded[branchId] = true;
00100 }
00101 
00102 //......................................................................
00107 EventHeader& EventHandle::Header() 
00108 {
00109   if (this->IsLoaded(kHeaderID) == false) this->Load(kHeaderID);
00110 
00111   return *(fEvent->fHeader);
00112 }
00113 
00114 //......................................................................
00119 const EventHeader& EventHandle::Header() const
00120 {
00121   if (this->IsLoaded(kHeaderID) == false) this->Load(kHeaderID);
00122   
00123   return *(fEvent->fHeader);
00124 }
00125 
00126 //......................................................................
00133 DataBucket& EventHandle::Bucket(BranchID_t branchID) const
00134 {
00135   if (this->IsLoaded(branchID)==false) this->Load(branchID);
00136 
00137   switch (branchID) {
00138   case kMCID:      return fMC;
00139   case kDetSimID:  return fDetSim;
00140   case kDAQID:     return fDAQ;
00141   case kRawID:     return fRaw;
00142   case kRawAuxID:  return fRawAux;
00143   case kCalID:     return fCal;
00144   case kRecoID:    return fReco;
00145   case kUserID:    return fUser;
00146   case kSummaryID: return fSummary;
00147   default:         abort();
00148   } 
00149 
00150   // Provide return code to quiet compilers
00151   static DataBucket empty(0);
00152   return empty;
00153 }
00154 
00155 //......................................................................
00156 
00157 DataBucket& EventHandle::MC()     { return this->Bucket(kMCID);     }
00158 DataBucket& EventHandle::DetSim() { return this->Bucket(kDetSimID); }
00159 DataBucket& EventHandle::DAQ()    { return this->Bucket(kDAQID);    }
00160 DataBucket& EventHandle::Raw()    { return this->Bucket(kRawID);    }
00161 DataBucket& EventHandle::RawAux() { return this->Bucket(kRawAuxID); }
00162 DataBucket& EventHandle::Cal()    { return this->Bucket(kCalID);    }
00163 DataBucket& EventHandle::Reco()   { return this->Bucket(kRecoID);   }
00164 DataBucket& EventHandle::User()   { return this->Bucket(kUserID);   }
00165 DataBucket& EventHandle::Summary(){ return this->Bucket(kSummaryID);}
00166 
00167 const DataBucket& EventHandle::MC() const {
00168   return this->Bucket(kMCID); 
00169 }
00170 const DataBucket& EventHandle::DetSim() const { 
00171   return this->Bucket(kDetSimID);
00172 }
00173 const DataBucket& EventHandle::DAQ() const { 
00174   return this->Bucket(kDAQID);
00175 }
00176 const DataBucket& EventHandle::Raw() const { 
00177   return this->Bucket(kRawID);
00178 }
00179 const DataBucket& EventHandle::RawAux() const { 
00180   return this->Bucket(kRawAuxID);
00181 }
00182 const DataBucket& EventHandle::Cal() const { 
00183   return this->Bucket(kCalID);
00184 }
00185 const DataBucket& EventHandle::Reco() const { 
00186   return this->Bucket(kRecoID);
00187 }
00188 const DataBucket& EventHandle::User() const { 
00189   return this->Bucket(kUserID);
00190 }
00191 const DataBucket& EventHandle::Summary() const { 
00192   return this->Bucket(kSummaryID);
00193 }
00194 
00195 //......................................................................
00201 bool EventHandle::IsLoaded(BranchID_t id) const
00202 {
00203   if (id < kNBranch && id >= 0) return fIsLoaded[id];
00204   abort();
00205   return false;
00206 }
00207 

Generated on Mon Dec 1 02:35:17 2008 for NOvA Offline by  doxygen 1.3.9.1