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