#ifndef analysis_IAnalyzeTreesMain_hxx #define analysis_IAnalyzeTreesMain_hxx #include #include #include "IVTreeAnalyzer.hxx" #include "IBeamlineCoordinates.hxx" class TFile; class TChain; class TBranch; namespace COMET{ class IAnalyzeTreesMain; } class COMET::IAnalyzeTreesMain{ protected: typedef std::vector AnalyzerList; enum Terminate_t{ kErrorStop=0, kNoErrorStop, kErrorContinue, kNoErrorContinue, kNumTerminates }; bool Terminate(Terminate_t status){ return status==kErrorStop || status==kNoErrorStop; } public: IAnalyzeTreesMain(); virtual ~IAnalyzeTreesMain(); bool Initialise(int argc, char* argv[]); bool Process(); bool Finalize(); const COMET::IBeamlineCoordinates& GetBeamlineCoordinates()const{return fBeamline;} protected: void PrintUsage(); std::string GetOptionString(); Terminate_t ProcessAllOptions(int argc, char* argv[]); Terminate_t ProcessOption(int opt, const char* value); Terminate_t ParseInputFileList(const char* value); TChain* InitChain(const std::vector& file_list, const std::string& tree_name); Terminate_t PrepareData( std::map& data); Terminate_t SetupAnalyzers( std::map& data); void DisableUnusedBranches(); bool ProcessOneEvent(); private: std::string fProgName; std::string fInputTreeName; std::vector fInputFileNames; std::string fOutputFileName; std::string fParamFile; long unsigned int fEntriesToRead; long unsigned int fCurrentEntry; int fPrintEntry; std::set fBranchWhiteList; std::set fBranchBlackList; TChain* fInputChain; TFile* fOutputFile; AnalyzerList fAnalyzers; COMET::analysis::ListOfClonesArrays fClonesArrays; COMET::IBeamlineCoordinates fBeamline; }; #endif // analysis_IAnalyzeTreesMain_hxx