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

In This Package:

DybBaseAlg.h

Go to the documentation of this file.
00001 
00013 #ifndef DYBBASEALG
00014 #define DYBBASEALG
00015 
00016 #include "Event/HeaderObject.h"
00017 #include "GaudiAlg/GaudiAlgorithm.h"
00018 
00019 #include <vector>
00020 
00021 class IJobInfoSvc;
00022 
00023 class DybBaseAlg : public GaudiAlgorithm 
00024 {
00025 public:
00026     DybBaseAlg(const std::string& name, ISvcLocator* pSvcLocator);
00027     virtual ~DybBaseAlg();
00028     
00030     virtual StatusCode sysInitialize();
00031 
00033     virtual StatusCode sysExecute();
00034 
00036     virtual StatusCode preExecute();
00037 
00039     virtual StatusCode postExecute();
00040 
00042     virtual StatusCode sysFinalize();
00043 
00045 
00047     IDataProviderSvc* arcSvc() const;
00048 
00051     void putTES(DataObject* obj, std::string location) const;
00052 
00056     template <class TYPE>
00057     TYPE* getTES(std::string location) const;
00058 
00063     template <class TYPE>
00064     TYPE* getAES(std::string location, int index) const;
00065 
00072     std::vector<DataObject*> getAEScollection(std::string location) const;
00073 
00075     int getExecNum() { return m_execNum; }
00076 
00078     std::string Location() const { return m_location; }
00079 
00080 protected:    
00081     
00083     void InitializeHeader(DayaBay::HeaderObject* header);
00084 
00087     void AppendInputHeader(const DayaBay::HeaderObject* header) const;
00088 
00089     DayaBay::HeaderObject* m_headerObject;
00090 
00092     bool m_pullMode;
00093     
00094 private:
00095 
00099     int m_execNum;
00100 
00104     int m_saveRandomState;
00105 
00106     mutable std::vector<const DayaBay::HeaderObject*> m_inputHeaders;
00107 
00109     std::vector<unsigned long> m_state;
00111     IJobInfoSvc* m_jobInfoSvc;
00112 
00113 protected:
00114 
00118     std::string m_location;
00119 
00120 };
00121 
00122 template <class TYPE>
00123 TYPE* DybBaseAlg::getTES(std::string location) const
00124 {
00125     TYPE* obj = get<TYPE>(location);
00126     // If object happens to be a HeaderObject, save it in the intputHeaders
00127     DayaBay::HeaderObject* header = dynamic_cast<DayaBay::HeaderObject*>(obj);
00128     if (header) {
00129         if (std::find(m_inputHeaders.begin(),m_inputHeaders.end(),header) == m_inputHeaders.end()) {
00130             this->AppendInputHeader(header);
00131             debug() << "Saved " << m_inputHeaders.size() 
00132                    << " input headers from TES, latest: " 
00133                    << header->name() 
00134                    << endreq;
00135         }
00136     }
00137     return obj;
00138 }
00139 
00140 template <class TYPE>
00141 TYPE* DybBaseAlg::getAES(std::string location, int index) const
00142 {
00143     if (index<0) return 0;
00144 
00145     std::vector<DataObject*> vec = this->getAEScollection(location);
00146     if (!vec.size() || index >= vec.size()) return 0;
00147     DataObject* dobj = vec[index];
00148     TYPE* obj = dynamic_cast<TYPE*>(dobj);
00149     if (!obj) return 0;
00150 
00151     DayaBay::HeaderObject* header = dynamic_cast<DayaBay::HeaderObject*>(obj);
00152     if (header) {
00153         if (std::find(m_inputHeaders.begin(),m_inputHeaders.end(),header) == m_inputHeaders.end()) {
00154             this->AppendInputHeader(header);
00155             debug() << "Saved " << m_inputHeaders.size() 
00156                    << " input headers from TES, latest: " 
00157                    << header->name() 
00158                    << endreq;
00159         }
00160     }
00161 
00162     return obj;
00163 }
00164 #endif  // DYBBASEALG
| Classes | Job Modules | Data Objects | Services | Algorithms | Tools | Packages | Directories | Tracs |

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