]> git.uio.no Git - u/mrichter/AliRoot.git/blame - MUON/AliMUONDigitizer.h
Adding MuonSim.SetMakeTrigger(MUON); now required by the new CTP framework (Christian)
[u/mrichter/AliRoot.git] / MUON / AliMUONDigitizer.h
CommitLineData
28752ff4 1#ifndef ALIMUONDIGITIZER_H
2#define ALIMUONDIGITIZER_H
3/* Copyright(c) 1998-2001, ALICE Experiment at CERN, All rights reserved. *
4 * See cxx source for full Copyright notice */
5
6/* $Id$ */
30178c30 7// Revision of includes 07/05/2004
8
692de412 9/// \ingroup sim
10/// \class AliMUONDigitizer
11/// \brief Class for MUON merging/digitization
12
b8278504 13#include "AliDigitizer.h"
30178c30 14#include "AliMUONDigit.h"
28752ff4 15
16class AliRunDigitizer;
30178c30 17class AliRunLoader;
8f36c696 18class AliMUONHitMapA1;
30178c30 19class AliMUON;
20class AliMUONData;
21class AliMUONLoader;
22class AliMUONTransientDigit;
ce3e25a8 23class AliMUONTriggerDecision;
cf286af7 24
7bd1d684 25static const Int_t kMAXTRACKS=10;
26
cf286af7 27class AliMUONDigitizer : public AliDigitizer
28{
29public:
30
31 /* Default constructor initializes all the internal pointers to NULL.
32 */
33 AliMUONDigitizer();
34
35 /* Constructor initialises all the internal pointers to NULL and
36 sets this digitizers manager to the one specified.
37 */
38 AliMUONDigitizer(AliRunDigitizer * manager);
39
8789635b 40 // Destructor
41 virtual ~AliMUONDigitizer();
42
cf286af7 43 // The Init method does nothing.
44 // All initialization happens in Exec at the moment.
45 virtual Bool_t Init();
46
47 // Override the TTask Exec method.
48 virtual void Exec(Option_t* option = 0);
49
cf286af7 50protected:
11ca64ac 51 AliMUONDigitizer(const AliMUONDigitizer& rhs);
52 AliMUONDigitizer& operator=(const AliMUONDigitizer& rhs);
53
cf286af7 54 /* Digitizers inheriting from AliMUONDigitizer should implement this abstract method
55 so that TransientDigit objects are generated and put onto the fTDList.
56 The method would be implemented as some loop over the input stream. The data can be
30178c30 57 fetched from the fMUONData pointer. To add to the fTDList once should use code similar
cf286af7 58 to the following:
59
60 TObject* source_object; // Assume the object from which the transient digit
61 // is created is already initialized at this point.
62 AliMUONTransientDigit* td = new AliMUONTransientDigit();
63 // Initialize the transient digit.
64 // ...
65
66 // The following line of code is required to have working digitisers that want
67 // to store information about which digits were created from which hits.
68 OnCreateTransientDigit(td, source_object);
69
70 AddOrUpdateTransientDigit(td); // Adds to the fTDList preventing duplicates.
71 */
72 virtual void GenerateTransientDigits() = 0;
ce3e25a8 73
cf286af7 74 // Loops over the fTDList of transient digits to write them to the output stream.
75 virtual void CreateDigits();
76
30178c30 77 /* Inheriting digitizers should implement this method to prepare the fMUONData
cf286af7 78 object before GenerateTransientDigits() is called.
79 If the initialization was successful then kTRUE should be returned otherwise
80 kFALSE should be returned.
81 */
82 virtual Bool_t InitInputData(AliMUONLoader* muonloader) = 0;
83
84 /* This method should be overridden to undo/cleanup what was done in the
85 InitInputData method call.
86 */
87 virtual void CleanupInputData(AliMUONLoader* muonloader) = 0;
88
30178c30 89 /* Inheriting digitizers should implement this method to prepare the fMUONData
cf286af7 90 object before CreateDigits() is called.
91 If the initialization was successful then kTRUE should be returned otherwise
92 kFALSE should be returned.
93 */
94 virtual Bool_t InitOutputData(AliMUONLoader* muonloader) = 0;
95
30178c30 96 /* When all the data is added to the fMUONData object and the trees need to be
cf286af7 97 filled then this method is called by CreateDigits().
98 Thus code like
30178c30 99 fMUONData->Fill("D")
cf286af7 100 should go into this method.
101 */
102 virtual void FillOutputData() = 0;
103
104 /* This method should be overridden to undo/cleanup what was done in the
105 InitOutputData method call.
106 */
107 virtual void CleanupOutputData(AliMUONLoader* muonloader) = 0;
108
109 /* This is called by CreateDigits when it wants the Signal value that will be written
110 to the output stream. Inheriting digitizers can override this to apply some kind
111 of detector response.
112 */
113 virtual Int_t GetSignalFrom(AliMUONTransientDigit* td) = 0;
114
115 /* Should be overridden by inheriting digitizers such that this method adds the digits
116 to the correct tree.
117 */
76fa1113 118 virtual void AddDigit(Int_t chamber, Int_t tracks[kMAXTRACKS], Int_t charges[kMAXTRACKS], Int_t digits[7]) = 0;
cf286af7 119
120 /* Should be called by GenerateTransientDigits() when a new transient digit is generated
121 form a source object from the input stream. The source object could be an AliMUONHit
122 or AliMUONSDigit for example.
123 */
124 virtual void OnCreateTransientDigit(AliMUONTransientDigit* /*digit*/, TObject* /*source_object*/);
125
126 /* Called by AddDigit(AliMUONTransientDigit*, Int_t) when transient digit is added to the
30178c30 127 fMUONData object ready for writing to the data trees.
cf286af7 128 */
129 virtual void OnWriteTransientDigit(AliMUONTransientDigit* digit);
130
131 // Wrapper method for AddDigit(Int_t, Int_t[kMAXTRACKS], Int_t[kMAXTRACKS], Int_t[6])
b812d393 132 void AddDigit(AliMUONTransientDigit* td, Int_t responseCharge, Int_t digitindex);
cf286af7 133
134 // Creates a new fTDList object, and creates and fills the fHitMap arrays.
135 // Note: this method assumes the array pointers are NULL when calling this method.
136 void InitArrays();
137
138 // Frees the memory allocated for fTDList and the fHitMap arrays.
139 void CleanupArrays();
140
141 /* Gets the run loader and muon loader pointers from the given folder name. If an error
142 occurred then kFALSE is returned else kTRUE on success.
143 */
144 Bool_t FetchLoaders(const char* foldername, AliRunLoader*& runloader, AliMUONLoader*& muonloader);
145
146 /* Gets the gAlice, and MUON module pointers from the specified run loader. If an error
147 occurred then kFALSE is returned else kTRUE on success.
148 */
149 Bool_t FetchGlobalPointers(AliRunLoader* runloader);
150
151 // Adds the transient digit uniquely to the fTDList.
152 void AddOrUpdateTransientDigit(AliMUONTransientDigit* mTD);
153
154 // Updates a TransientDigit in fTDList
155 void UpdateTransientDigit(AliMUONTransientDigit * mTD);
156
157 // Adds the new TransientDigit to fTDList
158 void AddTransientDigit(AliMUONTransientDigit * mTD);
159
160 // Verify that a TransientDigit already exists.
161 Bool_t ExistTransientDigit(AliMUONTransientDigit * mTD);
162
163 // Sorts the 3 most significant tracks.
30178c30 164 void SortTracks(Int_t *tracks, Int_t *charges, Int_t ntr) const;
cf286af7 165
ce3e25a8 166 // trigger purpose
167 virtual Bool_t FetchTriggerPointer(AliMUONLoader* loader);
168 virtual void CreateTrigger() = 0;
169 virtual void CleanupTriggerArrays() = 0;
170 virtual void FillTriggerOutput() = 0;
2be06f1e 171 virtual void AddDigitTrigger(
172 Int_t chamber, Int_t tracks[kMAXTRACKS],
173 Int_t charges[kMAXTRACKS], Int_t digits[6],
7fe0032c 174 Int_t digitindex ) = 0;
cf286af7 175
ce3e25a8 176 AliRunLoader* fRunLoader; //! Global run loader.
177 AliMUONLoader* fGime; //! MUON specific loader.
178 AliMUON* fMUON; //! Pointer to MUON module.
179 AliMUONData* fMUONData; //! muon data interface
180 AliMUONTriggerDecision* fTrigDec; //!trigger pointer
cf286af7 181
182 AliMUONHitMapA1 **fHitMap; //! pointer to array of pointers to hitmaps
183 TObjArray *fTDList; //! list of AliMUONTransientDigits
184 Int_t fTDCounter; //! nr. of AliMUONTransientDigit
185 Int_t fMask; //! mask dependent on input file
186 Bool_t fSignal; //! kTRUE if signal file is processed
a713db22 187 Int_t fSegmentation; //! segmentation type 1=old, 2=new;
edb96c6a 188 Int_t fNDetElemId[1500]; //! detection element number array
189
cf286af7 190
191private:
192
cf286af7 193 ClassDef(AliMUONDigitizer, 1) // MUON merging/digitization
28752ff4 194};
195#endif