Line data Source code
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 0 : 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 0 : 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 16 : ClassDef(AliMUONMCDataInterface,0) // Easy to use MC data accessor
153 : };
154 :
155 : #endif
|