Adding more bins in QA (Alis)
[u/mrichter/AliRoot.git] / MUON / AliMUONMCDataInterface.h
1 #ifndef ALIMUONMCDATAINTERFACE_H
2 #define ALIMUONMCDATAINTERFACE_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
9 /// \ingroup sim
10 /// \class AliMUONMCDataInterface
11 /// \brief Easy to use data access to MC information
12 /// 
13 // Author Laurent Aphecetche
14 //
15 // Moved parts of old AliMUONDataInterface interface to AliMUONMCDataInterface
16 //  Artur Szostak <artursz@iafrica.com> (University of Cape Town)
17
18 #ifndef ROOT_TObject
19 #  include "TObject.h"
20 #endif
21
22 class AliMUONVStore;
23 class AliMUONVHitStore;
24 class AliMUONVDigitStore;
25 class AliMUONVTriggerStore;
26 class AliMUONHit;
27 class AliMUONVDigit;
28 class AliMUONLocalTrigger;
29 class AliMUONRegionalTrigger;
30 class AliMUONGlobalTrigger;
31
32 class AliLoader;
33 class AliStack;
34
35 class TIterator;
36 class TClonesArray;
37 class TParticle;
38
39 class AliMUONMCDataInterface : public TObject
40 {
41 public:
42   AliMUONMCDataInterface(const char* filename="galice.root");
43   virtual ~AliMUONMCDataInterface();
44
45   void Open(const char* filename);
46   
47   /// Returns true if the data interface was able to open the root file correctly.
48   Bool_t IsValid() const { return fIsValid; };
49
50   Int_t NumberOfEvents() const;
51
52   /// Returns the index number of the current event loaded.
53   /// This is the event number as was used in the last calls to any of the methods
54   /// in this interface that have 'Int_t event' in the parameter list.
55   /// GetEvent(Int_t event) for example.
56   Int_t   CurrentEvent() const { return fCurrentEvent; }
57
58   Int_t NumberOfTracks(Int_t event);
59   Int_t NumberOfTrackRefs(Int_t event);
60   
61   AliMUONVHitStore* HitStore(Int_t event, Int_t track);
62   AliMUONVDigitStore* SDigitStore(Int_t event);
63   AliMUONVDigitStore* DigitStore(Int_t event);
64   AliStack* Stack(Int_t event);
65   TClonesArray* TrackRefs(Int_t event, Int_t track);
66   AliMUONVTriggerStore* TriggerStore(Int_t event);
67   
68   void DumpDigits(Int_t event, Bool_t sorted=kTRUE);
69   void DumpSDigits(Int_t event, Bool_t sorted=kTRUE);
70   void DumpHits(Int_t event);
71   void DumpKine(Int_t event);
72   void DumpTrackRefs(Int_t event);
73   void DumpTrigger(Int_t event);
74   
75   Bool_t GetEvent(Int_t event = 0);
76   
77   // Note the following methods can be extremely slow. Remember they are only
78   // here for end user convenience for his/her small tests and macros.
79   // If you want speed then don't use these methods. If you really want peak
80   // performance then you should be talking to the AliRunLoader and Store
81   // objects directly.
82   Int_t NumberOfParticles();
83   TParticle* Particle(Int_t index);
84   Int_t NumberOfTracks();
85   Int_t NumberOfHits(Int_t track);
86   AliMUONHit* Hit(Int_t track, Int_t index);
87   Int_t NumberOfSDigits(Int_t detElemId);
88   AliMUONVDigit* SDigit(Int_t detElemId, Int_t index);
89   Int_t NumberOfSDigits(Int_t chamber, Int_t cathode);
90   AliMUONVDigit* SDigit(Int_t chamber, Int_t cathode, Int_t index);
91   Int_t NumberOfDigits(Int_t detElemId);
92   AliMUONVDigit* Digit(Int_t detElemId, Int_t index);
93   Int_t NumberOfDigits(Int_t chamber, Int_t cathode);
94   AliMUONVDigit* Digit(Int_t chamber, Int_t cathode, Int_t index);
95   Int_t NumberOfLocalTriggers();
96   AliMUONLocalTrigger* LocalTrigger(Int_t index);
97   Int_t NumberOfRegionalTriggers();
98   AliMUONRegionalTrigger* RegionalTrigger(Int_t index);
99   AliMUONGlobalTrigger* GlobalTrigger();
100   Int_t NumberOfTrackRefs();
101   TClonesArray* TrackRefs(Int_t track);
102   
103 private:
104
105   /// The various identifiers for the type of iterator constructed.
106   enum IteratorType
107   {
108     kNoIterator,  ///< No iterator was constructed.
109     kHitIterator,  ///< An iterator to iterate over the hits.
110     kSDigitIteratorByDetectorElement,  ///< A summable digit iterator to iterate over the detector elements.
111     kSDigitIteratorByChamberAndCathode,  ///< A summable digit iterator to iterate over chambers and cathodes.
112     kDigitIteratorByDetectorElement,  ///< An iterator for simulated digits to iterate over the detector elements.
113     kDigitIteratorByChamberAndCathode,  ///< An iterator for simulated digits to iterate over chambers and cathodes.
114     kLocalTriggerIterator,  ///< An iterator for iterating over the simulated local triggers.
115     kRegionalTriggerIterator  ///< An iterator for iterating over the simulated regional triggers.
116   };
117   
118   /// Not implemented
119   AliMUONMCDataInterface(const AliMUONMCDataInterface&);
120   /// Not implemented
121   AliMUONMCDataInterface& operator=(const AliMUONMCDataInterface&);
122
123   void DumpSorted(const AliMUONVStore& store) const;
124   Bool_t LoadEvent(Int_t event);
125   
126   void ResetStores();
127   
128   TIterator* GetIterator(IteratorType type, Int_t x = 0, Int_t y = 0);
129   void ResetIterator();
130   
131   Int_t CountObjects(TIterator* iter);
132   TObject* FetchObject(TIterator* iter, Int_t index);
133   
134   
135   AliLoader* fLoader; //!< Tree accessor
136   AliMUONVHitStore* fHitStore; //!< current hit store (owner)
137   AliMUONVDigitStore* fSDigitStore; //!< current sdigit store (owner)
138   AliMUONVDigitStore* fDigitStore; //!< current digit store (owner)
139   AliMUONVTriggerStore* fTriggerStore; //!< current trigger store (owner)
140   TClonesArray* fTrackRefs; //!< current trackrefs (owner)
141   Int_t fCurrentEvent; //!< Current event we've read in
142   Bool_t fIsValid; //!< whether we were initialized properly or not
143   
144   IteratorType fCurrentIteratorType;  //!< The type of iterator that is currently set.
145   Int_t fCurrentIndex;  //!< A current index number maintained for certain iteration operations.
146   Int_t fDataX; //!< Extra data parameter about the iterator, can be the chamber number, detector element or track number.
147   Int_t fDataY; //!< Extra data parameter about the iterator, can be the cathode number.
148   TIterator* fIterator; //!< Iterator for various iteration operations.
149   
150   static Int_t fgInstanceCounter; //!< To build unique folder name for each instance
151
152   ClassDef(AliMUONMCDataInterface,0) // Easy to use MC data accessor
153 };
154
155 #endif