Additional protection
[u/mrichter/AliRoot.git] / HLT / MUON / src / AliRoot / TriggerSource.hpp
CommitLineData
8356cc1d 1////////////////////////////////////////////////////////////////////////////////
2//
3// Author: Artur Szostak
4// Email: artur@alice.phy.uct.ac.za | artursz@iafrica.com
5//
6////////////////////////////////////////////////////////////////////////////////
7
69d7cf2e 8#ifndef ALIHLTMUONTRIGGERSOURCE_H
9#define ALIHLTMUONTRIGGERSOURCE_H
8356cc1d 10
11#include "TROOT.h"
12#include "TObject.h"
13#include "TString.h"
14#include "TClonesArray.h"
15#include "AliRoot/TriggerRecord.hpp"
16
17class AliMUON;
18class AliMUONLocalTrigger;
19class AliMUONDataInterface;
20
21
69d7cf2e 22class AliHLTMUONTriggerSource : public TObject
8356cc1d 23{
24public:
25
26 enum AreaType
27 {
28 FromWholePlane,
29 FromLeftHalfPlane,
30 FromRightHalfPlane
31 };
32
33 enum SourceType
34 {
35 FromHits,
36 FromLocalTriggers
37 };
38
39
69d7cf2e 40 AliHLTMUONTriggerSource();
8356cc1d 41
42 /* Creates a new trigger source object by filling data from the data interface.
43 */
69d7cf2e 44 AliHLTMUONTriggerSource(AliMUONDataInterface* data);
8356cc1d 45
69d7cf2e 46 virtual ~AliHLTMUONTriggerSource();
8356cc1d 47
48 /* Get and set methods to specify how the FillFrom methods should fill the
49 internal data structures.
50 */
e33f3609 51 void AreaToUse(AreaType value) { fAreaToUse = value; };
8356cc1d 52 AreaType AreaToUse() const { return fAreaToUse; };
e33f3609 53 void DataToUse(SourceType value) { fDataToUse = value; };
8356cc1d 54 SourceType DataToUse() const { return fDataToUse; };
e33f3609 55 void MaxBlockSize(UInt_t value) { fMaxBlockSize = value; };
8356cc1d 56 UInt_t MaxBlockSize() const { return fMaxBlockSize; };
e33f3609 57 void UseLookupTable(Bool_t value) { fUseLookupTable = value; };
8356cc1d 58 Bool_t UseLookupTable() const { return fUseLookupTable; };
59
60 /* Fills the internal data structures from the specified data interface
61 for all the events found in AliMUONDataInterface.
62 */
63 void FillFrom(AliMUONDataInterface* data);
64
65 /* Fills the internal data structures from the specified data interface
66 for the given event.
67 */
e33f3609 68 void FillFrom(AliMUONDataInterface* data, Int_t event);
8356cc1d 69
70 /* Fills the internal data structures from the specified data interface
71 for the given event and trigger number.
72 If 'newblock' is set to true then the new trigger record is added to
73 a new block. Otherwise the point is added to the current block.
74 Note: This method ignores the fAreaToUse and fMaxBlockSize flags.
75 This is very usefull for custom trigger source filling.
76 For the case of adding data from AliMUONHit objects the 'trigger'
77 parameter becomes the track number in TreeH and not the index of the
78 AliMUONLocalTrigger object.
79 */
80 void FillFrom(
81 AliMUONDataInterface* data,
e33f3609 82 Int_t event, Int_t trigger, Bool_t newblock = kFALSE
8356cc1d 83 );
84
85 /* Clears all the internal arrays.
86 */
12ab84fc 87 virtual void Clear(Option_t* option = "");
8356cc1d 88
89 // Get methods.
90 TString FileName() const { return fFilename; };
91 TString FolderName() const { return fFoldername; };
92
93 /* Returns the number of events stored.
94 */
95 Int_t NumberOfEvents() const { return fEventList.GetEntriesFast(); };
96
69d7cf2e 97 /* Fetches the specified event number stored in this AliHLTMUONTriggerSource.
8356cc1d 98 Sets the current block and trigger to the first block and trigger record in
99 the event. If there are no blocks or trigger records then these pointers are
100 set to NULL. kTRUE is returned if the event was found, kFALSE otherwise.
101 */
e33f3609 102 Bool_t GetEvent(Int_t eventnumber) const;
8356cc1d 103
69d7cf2e 104 /* Fetches the first event stored in this AliHLTMUONTriggerSource.
8356cc1d 105 Sets the current block and trigger record to the first block and trigger
106 in the event. If there are no blocks or trigger records then these pointers
107 are set to NULL. kTRUE is returned if the event was found, kFALSE otherwise.
108 */
109 Bool_t GetFirstEvent() const;
110
111 /* Returns kTRUE if there are more events to iterate over.
112 */
113 Bool_t MoreEvents() const;
114
115 /* Fetches the next event stored following the currently selected one.
116 kTRUE is returned if the event was found, kFALSE otherwise.
117 The internal pointers are reset if we reached the last event.
118 */
119 Bool_t GetNextEvent() const;
120
121 /* Returns the corresponding AliRoot event number for the current event.
122 -1 is returned if no event is selected.
123 */
124 Int_t CurrentEvent() const;
125
126 /* Returns the number of trigger record blocks in the current event.
127 -1 is returned if no event is selected.
128 */
129 Int_t NumberOfBlocks() const;
130
131 /* Fetches the index'th block in the current event.
132 Sets the current trigger record to the first trigger in the block.
133 If there are no trigger records then this pointer is set to NULL.
134 kTRUE is returned if the block was found, kFALSE otherwise.
135 */
e33f3609 136 Bool_t GetBlock(Int_t index) const;
8356cc1d 137
138 /* Fetches the first block in the current event.
139 Sets the current trigger record to the first trigger in the block.
140 If there are no trigger records then this pointer is set to NULL.
141 kTRUE is returned if the block was found, kFALSE otherwise.
142 */
143 Bool_t GetFirstBlock() const;
144
145 /* Returns kTRUE if there are more blocks to be traversed.
146 */
147 Bool_t MoreBlocks() const;
148
149 /* Fetches the next block in the current event.
150 kTRUE is returned if the block was found, kFALSE otherwise.
151 */
152 Bool_t GetNextBlock() const;
153
154 /* Returns the currently selected block number.
155 -1 is returned if no blocks are selected.
156 */
157 Int_t CurrentBlock() const { return fBlockIndex; };
158
159 /* Returns the number of trigger records in the current block.
160 -1 is returned if no block is selected.
161 */
162 Int_t NumberOfTriggers() const;
163
164 /* Fetches the trigger record with the specified trigger number from
165 the current block.
166 NULL is returned if the record was not found.
167 */
69d7cf2e 168 const AliHLTMUONTriggerRecord* GetTrigger(Int_t triggernumber) const;
8356cc1d 169
170 /* Fetches the first trigger record in the current block.
171 NULL is returned if the record was not found.
172 */
69d7cf2e 173 const AliHLTMUONTriggerRecord* GetFirstTrigger() const;
8356cc1d 174
175 /* Returns kTRUE if there are more triggers to iterate over.
176 */
177 Bool_t MoreTriggers() const;
178
179 /* Fetches the next trigger record in the current block.
180 NULL is returned if the record was not found.
181 */
69d7cf2e 182 const AliHLTMUONTriggerRecord* GetNextTrigger() const;
8356cc1d 183
184 /* Returns the current trigger record.
185 NULL is returned if the record was not found.
186 */
69d7cf2e 187 const AliHLTMUONTriggerRecord* GetTrigger() const { return fCurrentTrigger; };
8356cc1d 188
189 /* Returns the trigger record number for the currently selected trigger record.
190 This number corresponds to the index'th AliMUONLocalTrigger object for the
191 current event.
192 -1 is returned if no trigger record is selected.
193 */
194 Int_t CurrentTrigger() const;
195
196
197private:
198
199 /* Adds a new EventData block to the fEventList and updates the fCurrentEvent,
200 fCurrentBlock and fCurrentTrigger pointers.
201 */
e33f3609 202 void AddEvent(Int_t eventnumber);
8356cc1d 203
204 /* Adds a new block to the current event and updates fCurrentBlock and fCurrentTrigger.
205 */
206 void AddBlock();
207
208 /* Adds a new trigger record to the current event and block.
209 The fCurrentTrigger is updated appropriately.
210 */
69d7cf2e 211 void AddTrigger(const AliHLTMUONTriggerRecord& data);
8356cc1d 212
69d7cf2e 213 /* Checks if the file and folder names correspond to this AliHLTMUONTriggerSource's
8356cc1d 214 file and folder names. kTRUE is returned if they do.
215 If the file and folder names are empty then they are assigned the names
216 as found in the data interface and kTRUE is returned.
217 */
218 Bool_t FileAndFolderOk(AliMUONDataInterface* data);
219
220 /* Adds the whole event from the data interface to the internal data structures.
221 It is assumed that FileAndFolderOk(data) returns true just before calling
222 this method.
223 */
e33f3609 224 void AddEventFrom(AliMUONDataInterface* data, AliMUON* module, Int_t event);
8356cc1d 225
226 /* Adds the specified trigger record from the given data interface.
227 The data interface should be initialised correctly, that is the event
228 should already be selected before calling this method.
229 */
e33f3609 230 void AddTriggerFrom(AliMUONDataInterface* data, AliMUON* module, Int_t trigger);
8356cc1d 231
232 /* Checks to see if the specified trigger record is in the chamber region
233 we want to fill from.
234 kTRUE is returned if (x, y) is in the region, and kFALSE otherwise.
235 */
69d7cf2e 236 Bool_t InFillRegion(const AliHLTMUONTriggerRecord& data);
8356cc1d 237
238 /* Fills the trigger data from the AliMUONLocalTrigger object.
239 if the fUseLookupTable is set to true then we use the L0 lookup table to
240 fill the Pt value otherwise we use the PtCal method in AliMUONTriggerCircuit.
241 Note the fTriggerNumber parameter is not filled in to 'record'.
242 */
243 void FillTriggerFromLocalTrigger(
69d7cf2e 244 AliMUONLocalTrigger* trigger, AliMUON* module, AliHLTMUONTriggerRecord& record
8356cc1d 245 );
246
247 /* Fills the TriggerRecord structure from AliMUONHit objects.
248 The hits on the last 4 chambers are used (i.e. chambers 11 to 14).
249 kTRUE is returned if the structure was filled successfully.
250 */
69d7cf2e 251 Bool_t FillTriggerFromHits(AliMUONDataInterface* data, Int_t track, AliHLTMUONTriggerRecord& record);
8356cc1d 252
253 /* Fetches the AliMUON module from the AliRun global object. AliRun will be loaded
254 by the runloader if it has not yet been loaded. In such a case the AliRun object
255 will also we unloaded when we are done with it.
256 kTRUE is returned if no error occured and kFALSE otherwise.
257 Note that if fDataToUse is set to FromHits then gAlice is not loaded and 'module'
258 will be left untouched. The method will still return kTRUE however since this is
259 not an error. We do not need the AliMUON module when filling from hits.
260 */
261 Bool_t FetchAliMUON(AliMUON*& module);
262
263 /* After one is finished with the AliMUON object returned by GetAliMUON, one
264 should call this method.
265 If the gAlice object was loaded by GetAliMUON then it will be unloaded at
266 this point, otherwise nothing is done.
267 */
268 void FinishedWithAliMUON();
269
270 /* Sets all the current pointers to NULL and indices to -1.
271 */
272 void ResetAllPointers() const;
273
274 /* Sets the block and trigger pointers to NULL and indices to -1.
275 */
276 void ResetBlockPointers() const;
277
278 /* Sets just the current trigger record pointer to NULL and index to -1.
279 */
280 void ResetTriggerPointers() const;
281
282
283public: // Unfortunately ROOT requires the following to be public.
284
285 class EventData : public TObject
286 {
287 public:
288 EventData();
e33f3609 289 EventData(Int_t eventnumber);
8356cc1d 290 virtual ~EventData();
291
292 Int_t fEventNumber; // Event number in AliMUONDataInterface from which the triggers were taken.
293 TClonesArray fBlocks; // The list of blocks of trigger records.
294
cbee67e7 295 ClassDef(EventData, 1) // Data per event.
8356cc1d 296 };
297
298private:
299
300 AreaType fAreaToUse; //! The part of the chamber to fill from.
301 SourceType fDataToUse; //! The type of raw AliRoot data to fill from.
302 UInt_t fMaxBlockSize; //! The maximum block size to create in the fill methods.
303 Bool_t fUseLookupTable; //! Set to true if the L0 lookup table should be used for finding Pt.
304
305 TString fFilename; // The file from which the trigger data was taken.
306 TString fFoldername; // The folder name from which trigger data was taken.
307
308 mutable Int_t fEventIndex; //! The index number of the currently selected event.
309 mutable EventData* fCurrentEvent; //! Pointer to the currently selected event.
310 mutable Int_t fBlockIndex; //! The index number of the currently selected block.
311 mutable TClonesArray* fCurrentBlock; //! Pointer to the currently selected block.
312 mutable Int_t fTriggerIndex; //! The index number of the currently selected trigger record.
69d7cf2e 313 mutable AliHLTMUONTriggerRecord* fCurrentTrigger; //! Pointer to the currently selected trigger record.
8356cc1d 314
315 TClonesArray fEventList; // List of trigger records per event.
316
317 Bool_t fHadToLoadgAlice; //! Flag indicating if this object had to load the AliRun object.
318
69d7cf2e 319 ClassDef(AliHLTMUONTriggerSource, 1) // The source of trigger records for dHLT.
8356cc1d 320};
321
322
69d7cf2e 323#endif // ALIHLTMUONTRIGGERSOURCE_H