]>
Commit | Line | Data |
---|---|---|
1 | #ifndef ALIMUON_H | |
2 | #define ALIMUON_H | |
3 | /* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. * | |
4 | * See cxx source for full Copyright notice */ | |
5 | ||
6 | /* $Id$ */ | |
7 | // Revision of includes 07/05/2004 | |
8 | ||
9 | /// \ingroup base | |
10 | /// \class AliMUON | |
11 | /// \brief AliDetector class for MUON subsystem providing | |
12 | /// simulation data management | |
13 | ||
14 | ||
15 | #include <TObjArray.h> | |
16 | ||
17 | #include "AliDetector.h" | |
18 | #include "AliMUONData.h" | |
19 | #include "AliMUONChamber.h" | |
20 | #include "AliMUONTrigger.h" | |
21 | ||
22 | #include <TVectorfwd.h> | |
23 | ||
24 | class TFile; | |
25 | class TTree; | |
26 | ||
27 | class AliLoader; | |
28 | class AliMUONTriggerCircuit; | |
29 | class AliMUONTriggerCircuitNew; | |
30 | class AliMUONData; | |
31 | class AliMUONResponse; | |
32 | class AliMUONSegmentation; | |
33 | class AliMUONHit; | |
34 | class AliMUONRawCluster; | |
35 | class AliMUONGeometry; | |
36 | class AliMUONGeometryTransformer; | |
37 | class AliMUONGeometryBuilder; | |
38 | class AliMUONRawWriter; | |
39 | class AliMUONVGeometryBuilder; | |
40 | class AliESD; | |
41 | ||
42 | class AliMUON : public AliDetector | |
43 | { | |
44 | public: | |
45 | AliMUON(); | |
46 | AliMUON(const char* name, const char *title="FactoryV4", | |
47 | const char* sDigitizerType="sdigitizer:AliMUONSDigitizerV2", | |
48 | const char* digitizerType="digitizer:NewDigitizerWithNoiseOldTrigger"); | |
49 | virtual ~AliMUON(); | |
50 | ||
51 | // Geometry | |
52 | void AddGeometryBuilder(AliMUONVGeometryBuilder* geomBuilder); | |
53 | void ResetGeometryBuilder(); | |
54 | ||
55 | virtual void BuildGeometry(); | |
56 | ||
57 | /// Return geometry builder | |
58 | AliMUONGeometryBuilder* GetGeometryBuilder() const {return fGeometryBuilder;} | |
59 | const AliMUONGeometryTransformer* GetGeometryTransformer() const; | |
60 | /// Return segmentation | |
61 | AliMUONSegmentation* GetSegmentation() const { return fSegmentation; } | |
62 | ||
63 | /// Return MUONData | |
64 | AliMUONData* GetMUONData() {return fMUONData;} | |
65 | ||
66 | // MUONLoader definition | |
67 | virtual AliLoader* MakeLoader(const char* topfoldername); //builds standard getter (AliLoader type) | |
68 | ||
69 | // Interface with AliMUONData | |
70 | /// Make branch | |
71 | virtual void MakeBranch(Option_t *opt=" ") {GetMUONData()->MakeBranch(opt);} | |
72 | virtual void SetTreeAddress(); | |
73 | /// Reset hits | |
74 | virtual void ResetHits() {GetMUONData()->ResetHits();} | |
75 | /// Reset digits | |
76 | virtual void ResetDigits() {GetMUONData()->ResetDigits();} | |
77 | /// Reset trigger | |
78 | virtual void ResetTrigger() {GetMUONData()->ResetTrigger();} | |
79 | /// Reset raw clusters | |
80 | virtual void ResetRawClusters() {GetMUONData()->ResetRawClusters();} | |
81 | /// Set split level | |
82 | virtual void SetSplitLevel(Int_t SplitLevel) {fSplitLevel=SplitLevel;} | |
83 | ||
84 | // Digitisation | |
85 | virtual AliDigitizer* CreateDigitizer(AliRunDigitizer* manager) const; | |
86 | virtual void SDigits2Digits(); | |
87 | virtual void Hits2SDigits(); | |
88 | virtual void Digits2Raw(); | |
89 | ||
90 | // Trigger | |
91 | /// Create trigger | |
92 | virtual AliTriggerDetector* CreateTriggerDetector() const | |
93 | { return new AliMUONTrigger(); } | |
94 | ||
95 | ||
96 | // Configuration Methods (per station id) | |
97 | // | |
98 | // Set Signal Generation Parameters | |
99 | virtual void SetSigmaIntegration(Int_t id, Float_t p1); | |
100 | virtual void SetChargeSlope(Int_t id, Float_t p1); | |
101 | virtual void SetChargeSpread(Int_t id, Float_t p1, Float_t p2); | |
102 | virtual void SetMaxAdc(Int_t id, Int_t p1); | |
103 | // Set Response Model | |
104 | virtual void SetResponseModel(Int_t id, AliMUONResponse *response); | |
105 | ||
106 | // Set Stepping Parameters | |
107 | virtual void SetMaxStepGas(Float_t p1); | |
108 | virtual void SetMaxStepAlu(Float_t p1); | |
109 | virtual void SetMaxDestepGas(Float_t p1); | |
110 | virtual void SetMaxDestepAlu(Float_t p1); | |
111 | ||
112 | // Get Stepping Parameters | |
113 | virtual Float_t GetMaxStepGas() const; | |
114 | virtual Float_t GetMaxStepAlu() const; | |
115 | virtual Float_t GetMaxDestepGas() const; | |
116 | virtual Float_t GetMaxDestepAlu() const; | |
117 | ||
118 | // Set alignement option | |
119 | virtual void SetAlign(Bool_t align = true); | |
120 | virtual void SetAlign(const TString& fileName, Bool_t align = true); | |
121 | ||
122 | /// Set scaler event for trigger | |
123 | virtual void SetTriggerScalerEvent(Bool_t scaler = true){fTriggerScalerEvent = scaler;} | |
124 | ||
125 | // trigger response version | |
126 | virtual void SetTriggerResponseV1(Bool_t trigResV1 = false) | |
127 | {fTriggerResponseV1 = trigResV1;} | |
128 | virtual Bool_t GetTriggerResponseV1() const; | |
129 | ||
130 | // Getters | |
131 | /// Return reference to Chamber \a id | |
132 | virtual AliMUONChamber& Chamber(Int_t id) | |
133 | {return *((AliMUONChamber *) (*fChambers)[id]);} | |
134 | /// Return reference to Circuit \a id | |
135 | virtual AliMUONTriggerCircuit& TriggerCircuit(Int_t id) | |
136 | {return *((AliMUONTriggerCircuit *) (*fTriggerCircuits)[id]);} | |
137 | /// Return reference to New Circuit \a id | |
138 | virtual AliMUONTriggerCircuitNew& TriggerCircuitNew(Int_t id) | |
139 | {return *((AliMUONTriggerCircuitNew*) (*fTriggerCircuitsNew)[id]);} | |
140 | ||
141 | // Return pointers to digit | |
142 | AliMUONRawCluster *RawCluster(Int_t ichamber, Int_t icathod, | |
143 | Int_t icluster); | |
144 | // Inherited and overridden from AliModule: | |
145 | //PH virtual void RemapTrackHitIDs(Int_t * map); | |
146 | ||
147 | TString SDigitizerType() const; | |
148 | TString DigitizerType() const; | |
149 | ||
150 | protected: | |
151 | AliMUON(const AliMUON& rMUON); | |
152 | AliMUON& operator = (const AliMUON& rhs); | |
153 | ||
154 | const AliMUONGeometry* GetGeometry() const; | |
155 | ||
156 | Int_t fNCh; ///< Number of chambers | |
157 | Int_t fNTrackingCh; ///< Number of tracking chambers* | |
158 | AliMUONData* fMUONData; ///< Data container for MUON subsystem | |
159 | Int_t fSplitLevel; ///< Splitlevel when making branches in outfiles. | |
160 | TObjArray* fChambers; ///< List of Tracking Chambers | |
161 | TObjArray* fTriggerCircuits; ///< List of Trigger Circuits | |
162 | TObjArray* fTriggerCircuitsNew; ///< List of Trigger Circuits | |
163 | AliMUONGeometryBuilder* fGeometryBuilder; ///< Geometry builder | |
164 | AliMUONSegmentation* fSegmentation; ///< New segmentation | |
165 | ||
166 | // | |
167 | Bool_t fAccCut; ///<Transport acceptance cut | |
168 | Float_t fAccMin; ///<Minimum acceptance cut used during transport | |
169 | Float_t fAccMax; ///<Minimum acceptance cut used during transport | |
170 | // | |
171 | // Stepping Parameters | |
172 | Float_t fMaxStepGas; ///< Maximum step size inside the chamber gas | |
173 | Float_t fMaxStepAlu; ///< Maximum step size inside the chamber aluminum | |
174 | Float_t fMaxDestepGas; ///< Maximum relative energy loss in gas | |
175 | Float_t fMaxDestepAlu; ///< Maximum relative energy loss in aluminum | |
176 | ||
177 | // Pad Iterator | |
178 | Int_t fMaxIterPad; ///< Maximum pad index | |
179 | Int_t fCurIterPad; ///< Current pad index | |
180 | ||
181 | // setting scaler for trigger | |
182 | Bool_t fTriggerScalerEvent; ///< Flag to generates scaler event | |
183 | Bool_t fTriggerResponseV1; ///< Flag to select TriggerResponseV1 | |
184 | ||
185 | TString fSDigitizerType; ///< Class to use for SDigitizer | |
186 | TString fDigitizerType; ///< Class to use for Digitizer | |
187 | ||
188 | AliMUONRawWriter* fRawWriter; //!< Raw data writer | |
189 | ||
190 | ClassDef(AliMUON,13) // MUON Detector base class | |
191 | }; | |
192 | #endif | |
193 |