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

In This Package:

HeaderObject.cc

Go to the documentation of this file.
00001 #include "Event/HeaderObject.h"
00002 
00003 DayaBay::HeaderObject::~HeaderObject()
00004 {
00005     const DayaBay::IHeader         *pIHeader;
00006     const DayaBay::HeaderObject    *pHeaderObj;
00007     DayaBay::HeaderObject          *pNonConst;
00008     
00009     //inputHeaders may live in a different time frame
00010     //This will improve the robustness of the code.
00011     //pull method and I/O will need this.
00012     for(size_t ind=0;ind<m_inputHeaders.size();ind++) {
00013         pIHeader=m_inputHeaders[ind];
00014         try{
00015             pHeaderObj=dynamic_cast<const DayaBay::HeaderObject*>(pIHeader);
00016             pNonConst=const_cast<DayaBay::HeaderObject*>(pHeaderObj);
00017         }
00018         catch(...) {
00019             // output something
00020         }
00021         pNonConst->release();
00022     }
00023     m_inputHeaders.clear();
00024 }
00025 
00026 std::ostream& DayaBay::HeaderObject::fillStream(std::ostream& s) const
00027 {
00028     TemporalDataObject::fillStream(s);
00029     IHeader::fillStream(s);
00030 
00031     s << "{ " 
00032       << "context :     " << m_context << std::endl
00033       << "execNumber :  " << m_execNumber << std::endl
00034       << "jobId :       " << m_jobId.uuid() << std::endl;
00035 
00036     s << "randomState : [";
00037     for (size_t ind=0; ind<m_randomState.size(); ++ind) {
00038         s << " " << m_randomState[ind];
00039     }
00040     s << " ]" << std::endl;
00041 
00042     size_t siz = m_inputHeaders.size();
00043     s << "inputHeaders :\t" << siz << ": [\n";
00044     for (size_t ind=0; ind<siz; ++ind) {
00045         m_inputHeaders[ind]->fillStream(s);
00046     }
00047     s << "\n]\n}";
00048     return s;
00049 }
00050 
00051 const TimeStamp& DayaBay::HeaderObject::timeStamp() const
00052 {
00053     return m_context.GetTimeStamp();
00054 }
00055 
00056 void DayaBay::HeaderObject::setTimeStamp(const TimeStamp& ts)
00057 {
00058     m_context.SetTimeStamp(ts);
00059 }
00060 
00061 void DayaBay::HeaderObject::setInputHeaders(const std::vector<const DayaBay::IHeader*>& iheaders)
00062 {
00063     const DayaBay::IHeader         *pIHeader;
00064     const DayaBay::HeaderObject    *pHeaderObj;
00065     DayaBay::HeaderObject          *pNonConst;
00066 
00067     // release the old ones first if they exist
00068     for(size_t ind=0;ind<m_inputHeaders.size();ind++) {
00069         pIHeader=m_inputHeaders[ind];
00070         try{
00071             pHeaderObj=dynamic_cast<const DayaBay::HeaderObject*>(pIHeader);
00072             pNonConst=const_cast<DayaBay::HeaderObject*>(pHeaderObj);
00073         }
00074         catch(...) {
00075             // output something
00076         }
00077         pNonConst->release();
00078     }
00079     m_inputHeaders.clear();
00080 
00081     // then set the new one
00082     m_inputHeaders = iheaders;
00083 
00084     //inputHeaders may live in a different time frame
00085     //This will improve the robustness of the code. 
00086     //pull method and I/O will need this.
00087     for(size_t ind=0;ind<m_inputHeaders.size();ind++) {
00088         pIHeader=m_inputHeaders[ind];
00089         try{
00090             pHeaderObj=dynamic_cast<const DayaBay::HeaderObject*>(pIHeader);
00091             pNonConst=const_cast<DayaBay::HeaderObject*>(pHeaderObj);
00092         }
00093         catch(...){
00094             // output something
00095         }       
00096         pNonConst->addRef();
00097     }
00098 }
00099 
00100 void DayaBay::HeaderObject::addInputHeader(const DayaBay::IHeader* iheader)
00101 {
00102     // Append this input header
00103     m_inputHeaders.push_back(iheader);
00104 
00105     // Add a reference to ensure this object is not prematurely deleted
00106     const DayaBay::HeaderObject    *pHeaderObj;
00107     DayaBay::HeaderObject          *pNonConst;
00108     try{
00109       pHeaderObj=dynamic_cast<const DayaBay::HeaderObject*>(iheader);
00110       pNonConst=const_cast<DayaBay::HeaderObject*>(pHeaderObj);
00111     }
00112     catch(...){
00113       // output something
00114     }       
00115     pNonConst->addRef();
00116 
00117 }
00118 
00119 
00120 const std::vector<const DayaBay::IHeader*> DayaBay::HeaderObject::findHeaders(const CLID& clid) const
00121 {
00122   // This is for output
00123   std::vector<const DayaBay::IHeader*> iHeaders;
00124   // By default, nothing found
00125   iHeaders.clear();
00126   
00127   const DayaBay::IHeader* pIH;
00128   const DayaBay::HeaderObject* pHO;
00129   std::vector<const DayaBay::IHeader*> grandparents;
00130   std::vector<const DayaBay::IHeader*>::const_iterator cit;
00131 
00132   // Searching in the immediate parent level
00133   for( size_t ind=0; ind<m_inputHeaders.size(); ind++ ) {
00134 
00135     pIH = m_inputHeaders[ind];
00136     pHO = dynamic_cast< const DayaBay::HeaderObject* > (pIH);
00137 
00138     if( pHO->clID()==clid ) {
00139       // check for duplications
00140       cit = find( iHeaders.begin(), iHeaders.end(), pIH );
00141       if( cit==iHeaders.end() ) {
00142         // add it to output
00143         iHeaders.push_back(pIH);
00144       }
00145     }
00146 
00147     // Searching in the grandparents level
00148     grandparents = pHO->findHeaders( clid );
00149 
00150     for( size_t idx=0; idx<grandparents.size(); idx++ ) {
00151       pIH = grandparents[idx];
00152       // Check for duplications
00153       cit = find( iHeaders.begin(), iHeaders.end(), pIH );
00154       if( cit==iHeaders.end() ) {
00155         // Not find, then add it.
00156         iHeaders.push_back(pIH);
00157       }
00158     }
00159   }
00160 
00161   return iHeaders;
00162 }
| Classes | Job Modules | Data Objects | Services | Algorithms | Tools | Packages | Directories | Tracs |

Generated on Mon Apr 11 20:18:02 2011 for BaseEvent by doxygen 1.4.7