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 */
7 // Revision of includes 07/05/2004
9 #include "AliDigitizer.h"
10 #include "AliMUONDigit.h"
12 class AliRunDigitizer;
14 class AliMUONHitMapA1;
18 class AliMUONTransientDigit;
20 class AliMUONDigitizer : public AliDigitizer
24 /* Default constructor initializes all the internal pointers to NULL.
28 /* Constructor initialises all the internal pointers to NULL and
29 sets this digitizers manager to the one specified.
31 AliMUONDigitizer(AliRunDigitizer * manager);
34 virtual ~AliMUONDigitizer();
36 // The Init method does nothing.
37 // All initialization happens in Exec at the moment.
38 virtual Bool_t Init();
40 // Override the TTask Exec method.
41 virtual void Exec(Option_t* option = 0);
43 Int_t GetDebug() const {return fDebug;} // Get debug level.
44 void SetDebug(Int_t level){fDebug = level;} // Set debug level.
47 AliMUONDigitizer(const AliMUONDigitizer& rhs);
48 AliMUONDigitizer& operator=(const AliMUONDigitizer& rhs);
51 // Parses the option string given to the Exec method.
52 virtual void ParseOptions(Option_t* options);
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
57 fetched from the fMUONData pointer. To add to the fTDList once should use code similar
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.
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);
70 AddOrUpdateTransientDigit(td); // Adds to the fTDList preventing duplicates.
72 virtual void GenerateTransientDigits() = 0;
74 // Loops over the fTDList of transient digits to write them to the output stream.
75 virtual void CreateDigits();
77 /* Inheriting digitizers should implement this method to prepare the fMUONData
78 object before GenerateTransientDigits() is called.
79 If the initialization was successful then kTRUE should be returned otherwise
80 kFALSE should be returned.
82 virtual Bool_t InitInputData(AliMUONLoader* muonloader) = 0;
84 /* This method should be overridden to undo/cleanup what was done in the
85 InitInputData method call.
87 virtual void CleanupInputData(AliMUONLoader* muonloader) = 0;
89 /* Inheriting digitizers should implement this method to prepare the fMUONData
90 object before CreateDigits() is called.
91 If the initialization was successful then kTRUE should be returned otherwise
92 kFALSE should be returned.
94 virtual Bool_t InitOutputData(AliMUONLoader* muonloader) = 0;
96 /* When all the data is added to the fMUONData object and the trees need to be
97 filled then this method is called by CreateDigits().
100 should go into this method.
102 virtual void FillOutputData() = 0;
104 /* This method should be overridden to undo/cleanup what was done in the
105 InitOutputData method call.
107 virtual void CleanupOutputData(AliMUONLoader* muonloader) = 0;
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.
113 virtual Int_t GetSignalFrom(AliMUONTransientDigit* td) = 0;
115 /* Should be overridden by inheriting digitizers such that this method adds the digits
118 virtual void AddDigit(Int_t chamber, Int_t tracks[kMAXTRACKS], Int_t charges[kMAXTRACKS], Int_t digits[6]) = 0;
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.
124 virtual void OnCreateTransientDigit(AliMUONTransientDigit* /*digit*/, TObject* /*source_object*/);
126 /* Called by AddDigit(AliMUONTransientDigit*, Int_t) when transient digit is added to the
127 fMUONData object ready for writing to the data trees.
129 virtual void OnWriteTransientDigit(AliMUONTransientDigit* digit);
131 // Wrapper method for AddDigit(Int_t, Int_t[kMAXTRACKS], Int_t[kMAXTRACKS], Int_t[6])
132 void AddDigit(AliMUONTransientDigit* td, Int_t responseCharge);
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.
138 // Frees the memory allocated for fTDList and the fHitMap arrays.
139 void CleanupArrays();
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.
144 Bool_t FetchLoaders(const char* foldername, AliRunLoader*& runloader, AliMUONLoader*& muonloader);
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.
149 Bool_t FetchGlobalPointers(AliRunLoader* runloader);
151 // Adds the transient digit uniquely to the fTDList.
152 void AddOrUpdateTransientDigit(AliMUONTransientDigit* mTD);
154 // Updates a TransientDigit in fTDList
155 void UpdateTransientDigit(AliMUONTransientDigit * mTD);
157 // Adds the new TransientDigit to fTDList
158 void AddTransientDigit(AliMUONTransientDigit * mTD);
160 // Verify that a TransientDigit already exists.
161 Bool_t ExistTransientDigit(AliMUONTransientDigit * mTD);
163 // Sorts the 3 most significant tracks.
164 void SortTracks(Int_t *tracks, Int_t *charges, Int_t ntr) const;
167 AliRunLoader* fRunLoader; //! Global run loader.
168 AliMUONLoader* fGime; //! MUON specific loader.
169 AliMUON* fMUON; //! Pointer to MUON module.
170 AliMUONData* fMUONData; //! muon data interface
172 AliMUONHitMapA1 **fHitMap; //! pointer to array of pointers to hitmaps
173 TObjArray *fTDList; //! list of AliMUONTransientDigits
174 Int_t fTDCounter; //! nr. of AliMUONTransientDigit
175 Int_t fMask; //! mask dependent on input file
176 Bool_t fSignal; //! kTRUE if signal file is processed
180 Int_t fDebug; //! Debug level.
182 ClassDef(AliMUONDigitizer, 1) // MUON merging/digitization