1 /**************************************************************************
2 * Copyright(c) 1998-2007, ALICE Experiment at CERN, All rights reserved. *
4 * Author: The ALICE Off-line Project. *
5 * Contributors are mentioned in the code where appropriate. *
7 * Permission to use, copy, modify and distribute this software and its *
8 * documentation strictly for non-commercial purposes is hereby granted *
9 * without fee, provided that the above copyright notice appears in all *
10 * copies and that both the copyright notice and this permission notice *
11 * appear in the supporting documentation. The authors make no claims *
12 * about the suitability of this software for any purpose. It is *
13 * provided "as is" without express or implied warranty. *
14 **************************************************************************/
17 //-----------------------------------------------------------------------------
18 /// \class AliMUONRecoParam
20 /// Class with MUON reconstruction parameters
22 /// \author Philippe Pillot
23 //-----------------------------------------------------------------------------
27 #include "AliMUONRecoParam.h"
31 #include <Riostream.h>
33 ClassImp(AliMUONRecoParam)
36 //_____________________________________________________________________________
37 AliMUONRecoParam::AliMUONRecoParam()
38 : AliDetectorRecoParam(),
39 fClusteringMode("MLEM"),
40 fTrackingMode("KALMAN"),
41 fMostProbBendingMomentum(0.),
42 fMinBendingMomentum(0.),
43 fMaxBendingMomentum(0.),
44 fMaxNonBendingSlope(0.),
46 fNonBendingVertexDispersion(0.),
47 fBendingVertexDispersion(0.),
48 fMaxNonBendingDistanceToTrack(0.),
49 fMaxBendingDistanceToTrack(0.),
50 fSigmaCutForTracking(0.),
51 fSigmaCutForImprovement(0.),
52 fSigmaCutForTrigger(0.),
53 fStripCutForTrigger(0.),
54 fMaxStripAreaForTrigger(0.),
55 fMaxNormChi2MatchTrigger(0.),
56 fPercentOfFullClusterInESD(10.),
57 fCombinedClusterTrackReco(kFALSE),
58 fTrackAllTracks(kFALSE),
59 fRecoverTracks(kFALSE),
60 fMakeTrackCandidatesFast(kFALSE),
61 fMakeMoreTrackCandidates(kFALSE),
62 fComplementTracks(kFALSE),
63 fImproveTracks(kFALSE),
65 fSaveFullClusterInESD(kTRUE),
66 fCalibrationMode("NOGAIN"),
70 SetNameTitle("MUON","MUON");
72 // use the default parameters for low flux environment
76 //_____________________________________________________________________________
77 AliMUONRecoParam::~AliMUONRecoParam()
82 //_____________________________________________________________________________
84 AliMUONRecoParam::GetCalibrationMode() const
86 /// Return the calibration mode. Can be :
87 /// NOGAIN : only do pedestal subtraction
88 /// GAIN : do pedestal subtraction, and apply gain correction, but with a
89 /// single capacitance value for all channels
90 /// GAINCONSTANTCAPA : as GAIN, but with a channel-dependent capacitance value
92 return fCalibrationMode.Data();
95 //_____________________________________________________________________________
96 AliMUONRecoParam *AliMUONRecoParam::GetLowFluxParam()
98 /// Return default reconstruction parameters for low flux environment
100 AliMUONRecoParam *param = new AliMUONRecoParam();
101 param->SetLowFluxParam();
106 //_____________________________________________________________________________
107 AliMUONRecoParam *AliMUONRecoParam::GetHighFluxParam()
109 /// Return default reconstruction parameters for high flux environment
111 AliMUONRecoParam *param = new AliMUONRecoParam();
112 param->SetHighFluxParam();
117 //_____________________________________________________________________________
118 AliMUONRecoParam *AliMUONRecoParam::GetCosmicParam()
120 /// Return default reconstruction parameters for high flux environment
122 AliMUONRecoParam *param = new AliMUONRecoParam();
123 param->SetCosmicParam();
128 //_____________________________________________________________________________
129 void AliMUONRecoParam::SetLowFluxParam()
131 /// Set reconstruction parameters for low flux environment
133 fMostProbBendingMomentum = 2.;
134 fMinBendingMomentum = 1.;
135 fMaxBendingMomentum = 3000.;
136 fMaxNonBendingSlope = 0.3;
137 fMaxBendingSlope = 0.4;
138 fNonBendingVertexDispersion = 10.;
139 fBendingVertexDispersion = 10.;
140 fMaxNonBendingDistanceToTrack = 1.;
141 fMaxBendingDistanceToTrack = 1.;
142 fSigmaCutForTracking = 6.;
143 fSigmaCutForImprovement = 5.;
144 fSigmaCutForTrigger = 8.;
145 fStripCutForTrigger = 1.;
146 fMaxStripAreaForTrigger = 3.;
147 fMaxNormChi2MatchTrigger = 16.;
148 fCombinedClusterTrackReco = kFALSE;
149 fTrackAllTracks = kTRUE;
150 fRecoverTracks = kTRUE;
151 fMakeTrackCandidatesFast = kFALSE;
152 fMakeMoreTrackCandidates = kFALSE;
153 fComplementTracks = kTRUE;
154 fImproveTracks = kTRUE;
155 fUseSmoother = kTRUE;
156 for (Int_t iCh = 0; iCh < 10; iCh++) fUseChamber[iCh] = kTRUE;
157 for (Int_t iSt = 0; iSt < 5; iSt++) fRequestStation[iSt] = kTRUE;
158 fBypassSt45 = kFALSE;
162 //_____________________________________________________________________________
163 void AliMUONRecoParam::SetHighFluxParam()
165 /// Set reconstruction parameters for high flux environment
167 fMostProbBendingMomentum = 2.;
168 fMinBendingMomentum = 1.;
169 fMaxBendingMomentum = 3000.;
170 fMaxNonBendingSlope = 0.3;
171 fMaxBendingSlope = 0.4;
172 fNonBendingVertexDispersion = 10.;
173 fBendingVertexDispersion = 10.;
174 fMaxNonBendingDistanceToTrack = 1.;
175 fMaxBendingDistanceToTrack = 1.;
176 fSigmaCutForTracking = 6.;
177 fSigmaCutForImprovement = 5.;
178 fSigmaCutForTrigger = 8.;
179 fStripCutForTrigger = 1.;
180 fMaxStripAreaForTrigger = 3.;
181 fMaxNormChi2MatchTrigger = 16.;
182 fCombinedClusterTrackReco = kFALSE;
183 fTrackAllTracks = kTRUE;
184 fRecoverTracks = kTRUE;
185 fMakeTrackCandidatesFast = kFALSE;
186 fMakeMoreTrackCandidates = kFALSE;
187 fComplementTracks = kTRUE;
188 fImproveTracks = kTRUE;
189 fUseSmoother = kTRUE;
190 for (Int_t iCh = 0; iCh < 10; iCh++) fUseChamber[iCh] = kTRUE;
191 for (Int_t iSt = 0; iSt < 5; iSt++) fRequestStation[iSt] = kTRUE;
192 fBypassSt45 = kFALSE;
196 //_____________________________________________________________________________
197 void AliMUONRecoParam::SetCosmicParam()
199 /// Set reconstruction parameters for high flux environment
201 fMostProbBendingMomentum = 2.;
202 fMinBendingMomentum = 1.;
203 fMaxBendingMomentum = 10000000.;
204 fMaxNonBendingSlope = 0.3;
205 fMaxBendingSlope = 0.4;
206 fNonBendingVertexDispersion = 10.;
207 fBendingVertexDispersion = 10.;
208 fMaxNonBendingDistanceToTrack = 10.;
209 fMaxBendingDistanceToTrack = 10.;
210 fSigmaCutForTracking = 20.;
211 fSigmaCutForImprovement = 20.;
212 fSigmaCutForTrigger = 8.;
213 fMaxNormChi2MatchTrigger = 16.;
214 fPercentOfFullClusterInESD = 100.;
215 fCombinedClusterTrackReco = kFALSE;
216 fTrackAllTracks = kTRUE;
217 fRecoverTracks = kTRUE;
218 fMakeTrackCandidatesFast = kFALSE;
219 fMakeMoreTrackCandidates = kFALSE;
220 fComplementTracks = kTRUE;
221 fImproveTracks = kTRUE;
222 fUseSmoother = kTRUE;
223 fSaveFullClusterInESD = kTRUE;
224 for (Int_t iCh = 0; iCh < 10; iCh++) fUseChamber[iCh] = kTRUE;
225 for (Int_t iSt = 0; iSt < 5; iSt++) fRequestStation[iSt] = kTRUE;
226 fBypassSt45 = kFALSE;
230 //_____________________________________________________________________________
231 void AliMUONRecoParam::Print(Option_t *option) const
233 /// print reconstruction parameters
234 /// if option = FULL then print also unused parameters
236 cout<<endl<<"\t------Reconstruction parameters------"<<endl;
238 cout<<Form("Calibration mode = %s",fCalibrationMode.Data())<<endl;
239 cout<<Form("Clustering mode = %s",fClusteringMode.Data())<<endl;
240 cout<<Form("Tracking mode = %s",fTrackingMode.Data())<<endl;
242 if (BypassSt45()) cout << "Will bypass St45 (replacing their clusters by generated ones from trigger tracks)" << endl;
244 if (fCombinedClusterTrackReco) cout<<"Combined cluster/track reconstruction: ON"<<endl;
245 else cout<<"Combined cluster/track reconstruction: OFF"<<endl;
247 if (fSaveFullClusterInESD) cout<<Form("Save all cluster info in ESD for %5.2f %% of events",fPercentOfFullClusterInESD)<<endl;
248 else cout<<"Save partial cluster info in ESD"<<endl;
250 cout<<Form("Most probable bending momentum (used only if B=0) = %5.2f",fMostProbBendingMomentum)<<endl;
252 cout<<Form("Bending momentum range = [%5.2f,%5.2f]",fMinBendingMomentum,fMaxBendingMomentum)<<endl;
254 cout<<Form("Maximum non bending slope = %5.2f",fMaxNonBendingSlope)<<endl;
256 cout<<Form("Maximum bending slope (used only if B=0) = %5.2f",fMaxBendingSlope)<<endl;
258 if (strstr(fTrackingMode,"ORIGINAL"))
259 cout<<Form("Vertex dispertion = (%5.2f,%5.2f)",fNonBendingVertexDispersion,fBendingVertexDispersion)<<endl;
260 else if (strstr(option,"FULL"))
261 cout<<Form("Vertex dispertion (used for original tracking only) = (%5.2f,%5.2f)",fNonBendingVertexDispersion,fBendingVertexDispersion)<<endl;
263 cout<<Form("Maximum distance to track = (%5.2f,%5.2f)",fMaxNonBendingDistanceToTrack,fMaxBendingDistanceToTrack)<<endl;
265 cout<<Form("Sigma cut for tracking = %5.2f",fSigmaCutForTracking)<<endl;
267 cout<<Form("Sigma cut for trigger hit pattern = %5.2f",fSigmaCutForTrigger)<<endl;
269 cout<<Form("Cut in strips for trigger chamber efficiency = %5.2f",fStripCutForTrigger)<<endl;
271 cout<<Form("Max search area in strips for trigger chamber efficiency = %5.2f",fMaxStripAreaForTrigger)<<endl;
273 if (fTrackAllTracks) cout<<"Track all the possible candidates"<<endl;
274 else cout<<"Track only the best candidates"<<endl;
276 if (strstr(option,"FULL")) {
277 cout<<"Make track candidates assuming linear propagation between stations 4 and 5: ";
278 if (fMakeTrackCandidatesFast) cout<<"ON"<<endl;
279 else cout<<"OFF"<<endl;
280 } else if (fMakeTrackCandidatesFast)
281 cout<<"Make track candidates assuming linear propagation between stations 4 and 5"<<endl;
283 if (strstr(option,"FULL")) {
284 cout<<"Make track candidates starting from 1 cluster in each of the stations 4 and 5: ";
285 if (fMakeMoreTrackCandidates) cout<<"ON"<<endl;
286 else cout<<"OFF"<<endl;
287 } else if (fMakeMoreTrackCandidates)
288 cout<<"Make track candidates starting from 1 cluster in each of the stations 4 and 5"<<endl;
290 if (strstr(option,"FULL")) {
291 cout<<"Try to recover tracks getting lost during tracking: ";
292 if (fRecoverTracks) cout<<"ON"<<endl;
293 else cout<<"OFF"<<endl;
294 } else if (fRecoverTracks)
295 cout<<"Try to recover tracks getting lost during tracking"<<endl;
297 if (strstr(option,"FULL")) {
298 cout<<"Try to complete the reconstructed tracks by adding missing clusters: ";
299 if (fComplementTracks) cout<<"ON"<<endl;
300 else cout<<"OFF"<<endl;
301 } else if (fComplementTracks)
302 cout<<"Try to complete the reconstructed tracks by adding missing clusters"<<endl;
304 if (strstr(option,"FULL")) {
305 cout<<"Try to improve the reconstructed tracks by removing bad clusters: ";
306 if (fImproveTracks) cout<<Form("ON (sigma cut = %5.2f)",fSigmaCutForImprovement)<<endl;
307 else cout<<"OFF"<<endl;
308 } else if (fImproveTracks)
309 cout<<Form("Try to improve the reconstructed tracks by removing bad clusters (sigma cut = %5.2f)",fSigmaCutForImprovement)<<endl;
311 if (strstr(option,"FULL")) {
312 cout<<"Use smoother to compute final track parameters, etc, at each cluster (used for Kalman tracking only): ";
313 if (fUseSmoother) cout<<"ON"<<endl;
314 else cout<<"OFF"<<endl;
315 } else if (fUseSmoother)
316 cout<<"Use smoother to compute final track parameters, etc, at each cluster"<<endl;
318 cout<<Form("Maximum normalized chi2 of tracking/trigger track matching = %5.2f",fMaxNormChi2MatchTrigger)<<endl;
320 Bool_t discardedCh = kFALSE;
323 if (!UseChamber(ch)) {
325 cout<<"Discarded chambers(1..): "<<ch+1;
328 else cout<<" "<<ch+1;
331 if (discardedCh) cout<<endl;
333 Bool_t discardedSt = kFALSE;
336 if (!RequestStation(st)) {
338 cout<<"Not requested stations(1..): "<<st+1;
341 else cout<<" "<<st+1;
344 if (discardedSt) cout<<endl;
346 cout<<"\t-------------------------------------"<<endl<<endl;