00001 #ifndef BESVISALG_H_ 00002 #define BESVISALG_H_ 00003 00004 // something needed by Gaudi 00005 #include "GaudiKernel/Algorithm.h" 00006 #include "GaudiKernel/IDataProviderSvc.h" 00007 #include "GaudiKernel/IConversionSvc.h" 00008 #include "GaudiKernel/IDataManagerSvc.h" 00009 #include "GaudiKernel/IDataStoreAgent.h" 00010 #include "GaudiKernel/DataStoreItem.h" 00011 00012 #include "NetDataWriter/NetDataWriter.h" 00013 // something needed by root 00014 #include "RootEventData/TRecTrackEvent.h" 00015 #include "RootEventData/TDigiEvent.h" 00016 #include "RootEventData/TJobInfo.h" 00017 #include "RootCnvSvc/commonData.h" 00018 #include "RootCnvSvc/RootInterface.h" 00019 00020 #include "RootCnvSvc/RootCnvSvc.h" 00021 #include "TTree.h" 00022 #include "TFile.h" 00023 00024 00025 using namespace std; 00026 00027 class TBossFullEvent; 00028 00030 00031 00032 class EventWriter : public Algorithm { 00033 public: 00034 EventWriter (const std::string& name, ISvcLocator* pSvcLocator); 00035 ~EventWriter(); 00036 StatusCode initialize(); 00037 StatusCode execute(); 00038 StatusCode finalize(); 00039 00040 private: 00041 // some variables needed by semaphore 00042 00043 // Gaudi service interface 00044 IDataManagerSvc *m_pDataManager; 00045 IDataProviderSvc *m_pDataProvider; 00046 IConversionSvc *m_pConversionSvc; 00047 IDataStoreAgent *m_pAgent; 00048 DataStoreItem *m_currentItem; 00049 RootInterface *m_pRootInterface; 00050 RootCnvSvc* m_cnvSvc; 00051 TRecTrackEvent *m_trkEvt; 00052 TDigiEvent *m_digiEvt; 00053 TMcEvent *m_mcEvt; 00054 THltEvent *m_hltEvt; 00055 TEvtHeader *m_evtHd; 00056 virtual std::string getJobOptions(); 00057 virtual std::string getDecayOptions(); 00058 00059 typedef std::vector<DataStoreItem*> Items; 00060 typedef std::vector<std::string> ItemNames; 00061 00062 commonData m_common; 00063 TFile* m_single_outputFiles; 00064 TTree* m_single_outputTrees; 00065 TTree* m_jobInfoTree; 00066 int st; 00067 string m_dofileName; 00068 string m_dofileName_1; 00069 Items m_itemList; 00070 ItemNames m_itemNames; 00071 StatusCode getSvc(); 00072 void addItem(Items& itms, const std::string& descriptor); 00073 void clearItems(Items& items); 00074 DataStoreItem* findItem(const std::string& path); 00075 StatusCode collectObjects(); 00076 std::vector<std::string> m_jobOptions; 00077 std::string m_bossVer; 00078 std::string m_decayOptions; 00079 TJobInfo* jobInfo; 00080 00081 // for DistBoss 00082 int m_mode; //2-OfflineMode, 3-DistBossMode 00083 std::string m_svrName; 00084 TBossFullEvent *m_TFullEvt; 00085 NetDataWriter *m_writer; 00086 int m_bufsize; 00087 char *m_cbuf; 00088 }; 00089 00090 #endif