Adding code to patch St1 HV mapping
[u/mrichter/AliRoot.git] / MUON / AliMUONMCDataInterface.h
CommitLineData
1df4a03e 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
e8636ba0 14//
15// Moved parts of old AliMUONDataInterface interface to AliMUONMCDataInterface
16// Artur Szostak <artursz@iafrica.com> (University of Cape Town)
1df4a03e 17
18#ifndef ROOT_TObject
19# include "TObject.h"
20#endif
21
e9bef706 22class AliMUONVStore;
e8636ba0 23class AliMUONVHitStore;
24class AliMUONVDigitStore;
e9bef706 25class AliMUONVTriggerStore;
e8636ba0 26class AliMUONHit;
27class AliMUONVDigit;
28class AliMUONLocalTrigger;
29class AliMUONRegionalTrigger;
30class AliMUONGlobalTrigger;
31
32class AliLoader;
e9bef706 33class AliStack;
e8636ba0 34
35class TIterator;
1df4a03e 36class TClonesArray;
e8636ba0 37class TParticle;
1df4a03e 38
39class AliMUONMCDataInterface : public TObject
40{
41public:
42 AliMUONMCDataInterface(const char* filename="galice.root");
43 virtual ~AliMUONMCDataInterface();
e9bef706 44
45 void Open(const char* filename);
1df4a03e 46
e8636ba0 47 /// Returns true if the data interface was able to open the root file correctly.
48 Bool_t IsValid() const { return fIsValid; };
e9bef706 49
1df4a03e 50 Int_t NumberOfEvents() const;
46df197d 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.
e8636ba0 56 Int_t CurrentEvent() const { return fCurrentEvent; }
57
e9bef706 58 Int_t NumberOfTracks(Int_t event);
59 Int_t NumberOfTrackRefs(Int_t event);
1df4a03e 60
e9bef706 61 AliMUONVHitStore* HitStore(Int_t event, Int_t track);
62 AliMUONVDigitStore* SDigitStore(Int_t event);
63 AliMUONVDigitStore* DigitStore(Int_t event);
e8636ba0 64 AliStack* Stack(Int_t event);
e9bef706 65 TClonesArray* TrackRefs(Int_t event, Int_t track);
66 AliMUONVTriggerStore* TriggerStore(Int_t event);
1df4a03e 67
e9bef706 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);
1df4a03e 74
e8636ba0 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
1df4a03e 103private:
e8636ba0 104
44c98559 105 /// The various identifiers for the type of iterator constructed.
e8636ba0 106 enum IteratorType
107 {
44c98559 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.
e8636ba0 116 };
117
1df4a03e 118 /// Not implemented
119 AliMUONMCDataInterface(const AliMUONMCDataInterface&);
120 /// Not implemented
121 AliMUONMCDataInterface& operator=(const AliMUONMCDataInterface&);
122
e9bef706 123 void DumpSorted(const AliMUONVStore& store) const;
e8636ba0 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);
e9bef706 133
1df4a03e 134
e9bef706 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
1df4a03e 143
e8636ba0 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
e9bef706 150 static Int_t fgInstanceCounter; //!< To build unique folder name for each instance
151
1df4a03e 152 ClassDef(AliMUONMCDataInterface,0) // Easy to use MC data accessor
153};
154
155#endif