/** * \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 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: public: 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; TTree* tree_clone[8]; // TRefArray* sorted_tracks; // TRefArray sorted_tracks; TClonesArray *tsorted; TClonesArray *timage; PamTrack *track; //store the last required Bool_t CAL2; //level2 branch Bool_t CAL1; //level1 branch Bool_t TRK2; //level2 branch Bool_t TRK1; //level1 branch Bool_t TRKh; //hough branch Bool_t TRG; Bool_t TOF; Bool_t S4; Bool_t ND; Bool_t AC; Bool_t ORB; Bool_t RUN; PamLevel2(); ~PamLevel2(){Delete();}; void Clear(); void Delete(); GL_RUN* GetRunInfo() { return run_obj; }; // ========================================= // methods needed to read/write Level2 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*); void CreateCloneTrees0(TChain *fChain, TFile* file); void CreateCloneTrees(TFile* file); void FillCloneTrees(); TTree *GetCloneTree(TString); void WriteCloneTrees(); void SetBranchAddress(TTree *); void SetBranchAddress(TChain *); // ======================================================== // methods needed to retrieve subdetector general variables // ======================================================== void* GetPointerTo(const char*); 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;}; // ============================================== // 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