]> git.uio.no Git - u/mrichter/AliRoot.git/blob - MUON/AliMUONData.h
350c0c7d828016f6d7b9f8f9397091c3a443af3a
[u/mrichter/AliRoot.git] / MUON / AliMUONData.h
1 #ifndef ALIMUONDATA_H
2 #define ALIMUONDATA_H
3 //
4 /*  Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
5  * See cxx source for full Copyright notice                               */
6
7 /* $Id$ */
8 // Revision of includes 07/05/2004
9
10 // AliMUONData
11 // Class containing MUON data: hits, digits, rawclusters, globaltrigger, localtrigger, etc ...
12 // Gines Martinez, Subatech,  September 2003
13 //
14
15 #include <TNamed.h>
16 #include <TArrayI.h>
17
18 #include "AliLoader.h"
19
20 class TClonesArray;
21 class TNamed;
22 class TObjArray;
23 class TTree;
24
25 class AliMUONConstants;
26 class AliMUONRawCluster;
27 class AliMUONTrack;
28 class AliMUONTriggerTrack;
29 class AliMUONDigit;
30 class AliMUONHit;
31 class AliMUONLocalTrigger;
32 class AliMUONGlobalTrigger;
33
34 //__________________________________________________________________
35 /////////////////////////////////////////////////////////////////////
36 //                                                                 //
37 //  class AliMUONData                                              //
38 //                                                                 //
39 /////////////////////////////////////////////////////////////////////
40
41 class AliMUONData : public TNamed 
42 {
43   public:
44     AliMUONData();
45     AliMUONData(AliLoader * loader, const char* name, const char* title);
46     virtual ~AliMUONData();  
47     virtual void   AddDigit(Int_t id, Int_t* tracks, Int_t* charges,
48                              Int_t* digits); 
49     virtual void   AddSDigit(Int_t id, Int_t* tracks, Int_t* charges,
50                              Int_t* digits); 
51     virtual void   AddDigit(Int_t id, const AliMUONDigit& digit); // use copy constructor
52     virtual void   AddSDigit(Int_t id, const AliMUONDigit& digit); // use copy constructor
53     virtual void   AddHit(Int_t fIshunt, Int_t track, Int_t iChamber, 
54                           Int_t idpart, Float_t X, Float_t Y, Float_t Z, 
55                           Float_t tof, Float_t momentum, Float_t theta, 
56                           Float_t phi, Float_t length, Float_t destep, 
57                           Float_t Xref,Float_t Yref,Float_t Zref);
58                           // TBR
59     virtual void   AddHit2(Int_t fIshunt, Int_t track, Int_t detElemId, 
60                           Int_t idpart, Float_t X, Float_t Y, Float_t Z, 
61                           Float_t tof, Float_t momentum, Float_t theta, 
62                           Float_t phi, Float_t length, Float_t destep, 
63                           Float_t Xref,Float_t Yref,Float_t Zref);
64     
65     virtual void   AddGlobalTrigger(Int_t *singlePlus, Int_t *singleMinus,
66                                     Int_t *singleUndef, Int_t *pairUnlike, 
67                                     Int_t *pairLike);
68     virtual void   AddGlobalTrigger(const AliMUONGlobalTrigger& trigger); // use copy constructor
69
70     virtual void   AddLocalTrigger(const Int_t* ltrigger, const TArrayI& digits);
71     virtual void   AddLocalTrigger(const AliMUONLocalTrigger& trigger); // use copy constructor
72
73     virtual void   AddRawCluster(Int_t id, const AliMUONRawCluster& clust);
74     virtual void   AddRecTrack(const AliMUONTrack& track);
75     virtual void   AddRecTriggerTrack(const AliMUONTriggerTrack& triggertrack);
76
77     TClonesArray*  Hits() {return fHits;}
78     TClonesArray*  Digits(Int_t DetectionPlane);
79     TClonesArray*  SDigits(Int_t DetectionPlane);
80 //    TClonesArray*  LocalTrigger() {return fLocalTrigger;}
81 //    TClonesArray*  GlobalTrigger() {return fGlobalTrigger;}
82     TClonesArray*  LocalTrigger();
83     TClonesArray*  GlobalTrigger();    
84     TClonesArray*  RawClusters(Int_t DetectionPlane);
85     TClonesArray*  RecTracks() {return fRecTracks;}
86     TClonesArray*  RecTriggerTracks() {return fRecTriggerTracks;}
87
88     void           GetTrack(Int_t it) const  {fLoader->TreeH()->GetEvent(it);}
89     Int_t          GetNtracks() const      {return (Int_t) fLoader->TreeH()->GetEntries();}
90     void           GetDigits() const {fLoader->TreeD()->GetEvent(0);}
91     void           GetSDigits() const {fLoader->TreeS()->GetEvent(0);}
92     void           GetRawClusters() const {fLoader->TreeR()->GetEvent(0);}
93     void           GetTrigger() const {fLoader->TreeR()->GetEvent(0);}
94     void           GetTriggerD() const {fLoader->TreeD()->GetEvent(0);}
95     Int_t          GetSplitLevel() const {return fSplitLevel;}
96     void           GetRecTracks() const {fLoader->TreeT()->GetEvent(0);}
97     void           GetRecTriggerTracks() const {fLoader->TreeT()->GetEvent(0);}
98
99     Bool_t        IsRawClusterBranchesInTree();
100     Bool_t        IsDigitsBranchesInTree();
101     Bool_t        IsTriggerBranchesInTree();
102     Bool_t        IsTriggerBranchesInTreeD();
103     Bool_t        IsTrackBranchesInTree();
104     Bool_t        IsTriggerTrackBranchesInTree();
105
106     virtual AliLoader* GetLoader() {return fLoader;}
107     virtual void       SetLoader(AliLoader * loader) {fLoader=loader;}    
108     
109     virtual void   Fill(Option_t* opt=" ");
110     virtual void   MakeBranch(Option_t *opt=" ");
111     virtual void   SetTreeAddress(Option_t *opt=" ");
112     
113     void           SetSplitLevel(Int_t SplitLevel) {fSplitLevel=SplitLevel;}
114     
115
116     virtual void   ResetHits();
117     virtual void   ResetDigits();
118     virtual void   ResetSDigits();
119     virtual void   ResetTrigger();
120     virtual void   ResetRawClusters();
121     virtual void   ResetRecTracks();
122     virtual void   ResetRecTriggerTracks();
123   
124     TTree*         TreeH() {return fLoader->TreeH(); }
125     TTree*         TreeD() {return fLoader->TreeD(); }
126     TTree*         TreeS() {return fLoader->TreeS(); }
127     TTree*         TreeR() {return fLoader->TreeR(); }
128     TTree*         TreeT() {return fLoader->TreeT(); }
129     TTree*         TreeP() {return fLoader->TreeP(); }
130
131   protected: 
132     AliMUONData(const AliMUONData& rhs);
133     AliMUONData& operator=(const AliMUONData& rhs);
134
135     AliLoader*  fLoader; //! Detector Loader pointer
136     TClonesArray*   fHits;  // One event in treeH per primary track
137     TObjArray*      fDigits; // One event in treeD and one branch per detection plane
138     TObjArray*      fSDigits; // One event in treeS and one branch per detection plane
139     TObjArray*      fRawClusters; //One event in TreeR/Rawcluster and one branch per tracking detection plane
140     TClonesArray*   fGlobalTrigger;  // List of Global Trigger One event in TreeR/GlobalTriggerBranch
141     TClonesArray*   fLocalTrigger;  // List of Local Trigger, One event in TreeR/LocalTriggerBranch
142     TClonesArray*   fRecTracks; // pointer to array of reconstructed tracks
143     TClonesArray*   fRecTriggerTracks; // pointer to array of reconstructed trigger tracks
144
145     Int_t           fNhits; //!  Number of Hits
146     Int_t*          fNdigits;//! Number of Digits
147     Int_t*          fNSdigits;//! Number of Digits
148     Int_t*          fNrawclusters;//! Number of Raw Clusters
149     Int_t           fNglobaltrigger;//! Number of Global trigger
150     Int_t           fNlocaltrigger;//! Number of Local trigger
151     Int_t           fNrectracks; //! Number of reconstructed tracks
152     Int_t           fNrectriggertracks; //! Number of reconstructed tracks
153     Int_t           fSplitLevel; // Splitting of branches 0 no spitting (root files are smaller) 1 splitting (larger output files)
154
155   private:  
156     //descendant classes should
157     //use protected interface methods to access these folders
158
159   
160   ClassDef(AliMUONData,2)
161 };
162 #endif
163