/** * \file PamLevel2.h * \author Elena Vannuccini */ #ifndef pamlevel2_h #define pamlevel2_h #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #define NCLONES 10 using namespace std; /** * \brief Class to describe particle tracks in the apparatus, including tracker and track-related variables from other detectors (calorimeter and TOF). * * This class inherites from TrkTrack, CaloTrkVar ecc... * */ //class PamTrack : public TrkTrack, public CaloTrkVar, public ToFTrkVar { class PamTrack : public TObject { private: TrkTrack* trk_track; CaloTrkVar* calo_track; ToFTrkVar* tof_track; bool candeleteobj; // TClonesArray *Cluster; ///< clusters (if stored) public: PamTrack(); PamTrack(TrkTrack* , CaloTrkVar* , ToFTrkVar* ); PamTrack(const PamTrack&); ~PamTrack(){ Delete(); }; void Clear(); void Clear(Option_t *option){Clear();}; void Delete(); TrkTrack* GetTrkTrack(){return trk_track;}; CaloTrkVar* GetCaloTrack(){return calo_track;}; ToFTrkVar* GetToFTrack(){return tof_track;}; ClassDef(PamTrack,1); }; /** * \brief Class to describe PAMELA LEVEL2 data. * * This class inherites from TrkLevel2, CaloLevel2 ecc... and it overrides the TrkLevel2:GetTrack(int it) and TrkLevel2:GetTrackImage(int it) methods. * This allows to solve the tracker ambiguity (that is, to choose between track images) by using also information from other detectors. */ //class PamLevel2 : public CaloLevel2, public CaloLevel1, public ToFLevel2, public TrkLevel2, public TrkLevel1, public TrkHough, public TrigLevel2, public S4Level2, public NDLevel2, public AcLevel2, public OrbitalInfo { class PamLevel2 : public TObject { private: // ------------------------------ // variables to retrieve run info // ------------------------------ Int_t irun; //current run entry, relative to the TChain ULong64_t runfirstentry; //first entry of run, relative to the TChain ULong64_t runlastentry; //last entry of run, relative to the TChain Int_t irunentry; //position of current entry, relative to the run TChain* run_tree; TTree* run_tree_clone; TChain* sel_tree; TTree* sel_tree_clone; // --------------------------------- // variables to retrieve level0 info // --------------------------------- TFile* l0_file; TTree* l0_tree; Int_t iroot; // -------------------------------------------- // variables to store Level0 info (if required) // -------------------------------------------- EventHeader* h0_obj; TrkLevel0* trk0_obj; // --------------------------- // variables to connect the DB // --------------------------- TSQLServer* dbc; TString host; TString user; TString psw; // --------------------------------------------- // variables to retrieve and clone level1-2 info // --------------------------------------------- TChain* pam_tree; TTree* pam_tree_clone[NCLONES]; // -------------------------------------------- // variables to store Level0 info (if required) // -------------------------------------------- TrkLevel1* trk1_obj; TrkLevel2* trk2_obj; TrkHough* trkh_obj; CaloLevel1* calo1_obj; CaloLevel2* calo2_obj; ToFLevel2* tof_obj; TrigLevel2* trig_obj; S4Level2* s4_obj; NDLevel2* nd_obj; AcLevel2* ac_obj; OrbitalInfo* orb_obj; GL_RUN* run_obj; SoftInfo* soft_obj; // Emiliano // ----------------------------------- // variables to sort the track // ----------------------------------- TClonesArray *tsorted; TClonesArray *timage; PamTrack *track; //store the last required // ----- // flags // ----- Bool_t CAL2; //level2 branch Bool_t CAL1; //level1 branch Bool_t CAL0; //yoda Bool_t TRK2; //level2 branch Bool_t TRK1; //level1 branch Bool_t TRKh; //hough branch Bool_t TRK0; //yoda Bool_t TOF; Bool_t TOF0; Bool_t TRG; Bool_t S4; Bool_t ND; Bool_t AC; Bool_t ORB; Bool_t RUN; Int_t SELLI; //trees of selected events (there is a selection list) public: PamLevel2(); ~PamLevel2(){Delete();}; void Clear(); void Delete(); // ============================================= // methods needed to read/write Level0-1-2 trees // ============================================= void SetWhichTrees(TString); void GetWhichTrees(TFile*); TTree* GetPamTree(TFile*,TString); TTree* GetPamTree(TFile* f){return GetPamTree(f,"");}; TList* GetListOfLevel2Files(TString, TString); Bool_t CheckLevel2File(TString); TChain* GetPamTree(TList*,TString); TChain* GetPamTree(TString ddir,TString list,TString detlist){ return GetPamTree(GetListOfLevel2Files(ddir,list),detlist); }; TChain* GetPamTree(TString ddir,TString list){ return GetPamTree(GetListOfLevel2Files(ddir,list),""); }; TTree* GetRunTree(TFile*); TChain* GetRunTree(TList*); TChain* GetRunTree(TString ddir,TString list){ return GetRunTree(GetListOfLevel2Files(ddir,list)); }; Bool_t UpdateRunInfo(TTree *,ULong64_t); Bool_t UpdateRunInfo(TChain *,ULong64_t); void CreateCloneTrees0(TChain *fChain, TFile* file); void CreateCloneTrees(TFile* file); void FillCloneTrees(); TTree *GetCloneTree(TString); void WriteCloneTrees(); void SetBranchAddress(TTree *); void SetBranchAddress(TChain *); Int_t GetEntry(Int_t); Int_t GetYodaEntry(); TChain* GetPamTree(){return pam_tree;}; TChain* GetRunTree(){return run_tree;}; TTree* GetYodaTree(); // ============= // DB connection // ============= void SetDBHost(TString str){host=str;}; void SetDBUser(TString str){user=str;}; void SetDBPsw(TString str){psw=str;}; // ======================================================== // methods needed to retrieve subdetector general variables // ======================================================== void* GetPointerTo(const char*); TrkLevel0 *GetTrkLevel0() { return trk0_obj; }; TrkLevel1 *GetTrkLevel1() { return trk1_obj; }; TrkLevel2 *GetTrkLevel2() { return trk2_obj; }; TrkHough *GetTrkHough() { return trkh_obj; }; CaloLevel1 *GetCaloLevel1() { return calo1_obj;}; CaloLevel2 *GetCaloLevel2() { return calo2_obj;}; ToFLevel2 *GetToFLevel2() { return tof_obj; }; TrigLevel2 *GetTrigLevel2() { return trig_obj; }; S4Level2 *GetS4Level2() { return s4_obj; }; NDLevel2 *GetNDLevel2() { return nd_obj; }; AcLevel2 *GetAcLevel2() { return ac_obj; }; OrbitalInfo *GetOrbitalInfo(){ return orb_obj; }; GL_RUN *GetRunInfo() { return run_obj; }; SoftInfo *GetSoftInfo() { return soft_obj; }; // Emiliano // ============================================== // methods to retrieve subdetectors stored tracks // ============================================== TrkTrack* GetTrkStoredTrack(int seqno){return trk2_obj->TrkLevel2::GetStoredTrack(seqno); }; CaloTrkVar* GetCaloStoredTrack(int); ToFTrkVar* GetToFStoredTrack(int); // PamTrack* GetPamTrackAlong(TrkTrack*); // PamTrack* GetPamTrackAlong(CaloTrkVar*); //se serve // PamTrack* GetPamTrackAlong(ToFTrkVar*); //se serve // ================================= // methods to retrieve pamela tracks // ================================= PamTrack* GetStoredTrack(Int_t); // void SortTracks(TString); //assign value to variable sorted_tracks // TRefArray* GetTracks(); //return sorted_tracks TClonesArray* GetTracks(); //return sorted_tracks PamTrack* GetTrack(int); PamTrack* GetTrackImage(int); // ================================= // other methods // ================================= // Int_t ntrk(){ return trk2_obj->TrkLevel2::ntrk(); }; ClassDef(PamLevel2,1); }; //=============================================================================================== // // // // //=============================================================================================== #endif