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 fMinBendingMomentum(0.),
42 fMaxBendingMomentum(0.),
43 fMaxNonBendingSlope(0.),
44 fNonBendingVertexDispersion(0.),
45 fBendingVertexDispersion(0.),
46 fMaxNonBendingDistanceToTrack(0.),
47 fMaxBendingDistanceToTrack(0.),
48 fSigmaCutForTracking(0.),
49 fSigmaCutForImprovement(0.),
50 fSigmaCutForTrigger(0.),
51 fMaxNormChi2MatchTrigger(0.),
52 fPercentOfFullClusterInESD(10.),
53 fCombinedClusterTrackReco(kFALSE),
54 fTrackAllTracks(kFALSE),
55 fRecoverTracks(kFALSE),
56 fMakeTrackCandidatesFast(kFALSE),
57 fMakeMoreTrackCandidates(kFALSE),
58 fComplementTracks(kFALSE),
59 fImproveTracks(kFALSE),
61 fSaveFullClusterInESD(kTRUE),
62 fCalibrationMode("NOGAIN"),
66 SetNameTitle("MUON","MUON");
68 // use the default parameters for low flux environment
72 //_____________________________________________________________________________
73 AliMUONRecoParam::~AliMUONRecoParam()
78 //_____________________________________________________________________________
80 AliMUONRecoParam::GetCalibrationMode() const
82 /// Return the calibration mode. Can be :
83 /// NOGAIN : only do pedestal subtraction
84 /// GAIN : do pedestal subtraction, and apply gain correction, but with a
85 /// single capacitance value for all channels
86 /// GAINCONSTANTCAPA : as GAIN, but with a channel-dependent capacitance value
88 return fCalibrationMode.Data();
91 //_____________________________________________________________________________
92 AliMUONRecoParam *AliMUONRecoParam::GetLowFluxParam()
94 /// Return default reconstruction parameters for low flux environment
96 AliMUONRecoParam *param = new AliMUONRecoParam();
97 param->SetLowFluxParam();
102 //_____________________________________________________________________________
103 AliMUONRecoParam *AliMUONRecoParam::GetHighFluxParam()
105 /// Return default reconstruction parameters for high flux environment
107 AliMUONRecoParam *param = new AliMUONRecoParam();
108 param->SetHighFluxParam();
113 //_____________________________________________________________________________
114 void AliMUONRecoParam::SetLowFluxParam()
116 /// Set reconstruction parameters for low flux environment
118 fMinBendingMomentum = 1.;
119 fMaxBendingMomentum = 3000.;
120 fMaxNonBendingSlope = 0.3;
121 fNonBendingVertexDispersion = 10.;
122 fBendingVertexDispersion = 10.;
123 fMaxNonBendingDistanceToTrack = 1.;
124 fMaxBendingDistanceToTrack = 1.;
125 fSigmaCutForTracking = 6.;
126 fSigmaCutForImprovement = 5.;
127 fSigmaCutForTrigger = 8.;
128 fMaxNormChi2MatchTrigger = 16.;
129 fCombinedClusterTrackReco = kFALSE;
130 fTrackAllTracks = kTRUE;
131 fRecoverTracks = kTRUE;
132 fMakeTrackCandidatesFast = kFALSE;
133 fMakeMoreTrackCandidates = kFALSE;
134 fComplementTracks = kTRUE;
135 fImproveTracks = kTRUE;
136 fUseSmoother = kTRUE;
137 for (Int_t iCh = 0; iCh < 10; iCh++) fUseChamber[iCh] = kTRUE;
138 for (Int_t iSt = 0; iSt < 5; iSt++) fRequestStation[iSt] = kTRUE;
139 fBypassSt45 = kFALSE;
143 //_____________________________________________________________________________
144 void AliMUONRecoParam::SetHighFluxParam()
146 /// Set reconstruction parameters for high flux environment
148 fMinBendingMomentum = 1.;
149 fMaxBendingMomentum = 3000.;
150 fMaxNonBendingSlope = 0.3;
151 fNonBendingVertexDispersion = 10.;
152 fBendingVertexDispersion = 10.;
153 fMaxNonBendingDistanceToTrack = 1.;
154 fMaxBendingDistanceToTrack = 1.;
155 fSigmaCutForTracking = 6.;
156 fSigmaCutForImprovement = 5.;
157 fSigmaCutForTrigger = 8.;
158 fMaxNormChi2MatchTrigger = 16.;
159 fCombinedClusterTrackReco = kFALSE;
160 fTrackAllTracks = kTRUE;
161 fRecoverTracks = kTRUE;
162 fMakeTrackCandidatesFast = kFALSE;
163 fMakeMoreTrackCandidates = kFALSE;
164 fComplementTracks = kTRUE;
165 fImproveTracks = kTRUE;
166 fUseSmoother = kTRUE;
167 for (Int_t iCh = 0; iCh < 10; iCh++) fUseChamber[iCh] = kTRUE;
168 for (Int_t iSt = 0; iSt < 5; iSt++) fRequestStation[iSt] = kTRUE;
169 fBypassSt45 = kFALSE;
173 //_____________________________________________________________________________
174 void AliMUONRecoParam::Print(Option_t *option) const
176 /// print reconstruction parameters
177 /// if option = FULL then print also unused parameters
179 cout<<endl<<"\t------Reconstruction parameters------"<<endl;
181 cout<<Form("Calibration mode = %s",fCalibrationMode.Data())<<endl;
182 cout<<Form("Clustering mode = %s",fClusteringMode.Data())<<endl;
183 cout<<Form("Tracking mode = %s",fTrackingMode.Data())<<endl;
185 if (BypassSt45()) cout << "Will bypass St45 (replacing their clusters by generated ones from trigger tracks)" << endl;
187 if (fCombinedClusterTrackReco) cout<<"Combined cluster/track reconstruction: ON"<<endl;
188 else cout<<"Combined cluster/track reconstruction: OFF"<<endl;
190 if (fSaveFullClusterInESD) cout<<Form("Save all cluster info in ESD for %5.2f %% of events",fPercentOfFullClusterInESD)<<endl;
191 else cout<<"Save partial cluster info in ESD"<<endl;
193 cout<<Form("Bending momentum range = [%5.2f,%5.2f]",fMinBendingMomentum,fMaxBendingMomentum)<<endl;
195 cout<<Form("Maximum non bending slope = %5.2f",fMaxNonBendingSlope)<<endl;
197 if (strstr(fTrackingMode,"ORIGINAL"))
198 cout<<Form("Vertex dispertion = (%5.2f,%5.2f)",fNonBendingVertexDispersion,fBendingVertexDispersion)<<endl;
199 else if (strstr(option,"FULL"))
200 cout<<Form("Vertex dispertion (used for original tracking only) = (%5.2f,%5.2f)",fNonBendingVertexDispersion,fBendingVertexDispersion)<<endl;
202 cout<<Form("Maximum distance to track = (%5.2f,%5.2f)",fMaxNonBendingDistanceToTrack,fMaxBendingDistanceToTrack)<<endl;
204 cout<<Form("Sigma cut for tracking = %5.2f",fSigmaCutForTracking)<<endl;
206 cout<<Form("Sigma cut for trigger hit pattern = %5.2f",fSigmaCutForTrigger)<<endl;
208 if (fTrackAllTracks) cout<<"Track all the possible candidates"<<endl;
209 else cout<<"Track only the best candidates"<<endl;
211 if (strstr(option,"FULL")) {
212 cout<<"Make track candidates assuming linear propagation between stations 4 and 5: ";
213 if (fMakeTrackCandidatesFast) cout<<"ON"<<endl;
214 else cout<<"OFF"<<endl;
215 } else if (fMakeTrackCandidatesFast)
216 cout<<"Make track candidates assuming linear propagation between stations 4 and 5"<<endl;
218 if (strstr(option,"FULL")) {
219 cout<<"Make track candidates starting from 1 cluster in each of the stations 4 and 5: ";
220 if (fMakeMoreTrackCandidates) cout<<"ON"<<endl;
221 else cout<<"OFF"<<endl;
222 } else if (fMakeMoreTrackCandidates)
223 cout<<"Make track candidates starting from 1 cluster in each of the stations 4 and 5"<<endl;
225 if (strstr(option,"FULL")) {
226 cout<<"Try to recover tracks getting lost during tracking: ";
227 if (fRecoverTracks) cout<<"ON"<<endl;
228 else cout<<"OFF"<<endl;
229 } else if (fRecoverTracks)
230 cout<<"Try to recover tracks getting lost during tracking"<<endl;
232 if (strstr(option,"FULL")) {
233 cout<<"Try to complete the reconstructed tracks by adding missing clusters: ";
234 if (fComplementTracks) cout<<"ON"<<endl;
235 else cout<<"OFF"<<endl;
236 } else if (fComplementTracks)
237 cout<<"Try to complete the reconstructed tracks by adding missing clusters"<<endl;
239 if (strstr(option,"FULL")) {
240 cout<<"Try to improve the reconstructed tracks by removing bad clusters: ";
241 if (fImproveTracks) cout<<Form("ON (sigma cut = %5.2f)",fSigmaCutForImprovement)<<endl;
242 else cout<<"OFF"<<endl;
243 } else if (fImproveTracks)
244 cout<<Form("Try to improve the reconstructed tracks by removing bad clusters (sigma cut = %5.2f)",fSigmaCutForImprovement)<<endl;
246 if (strstr(option,"FULL")) {
247 cout<<"Use smoother to compute final track parameters, etc, at each cluster (used for Kalman tracking only): ";
248 if (fUseSmoother) cout<<"ON"<<endl;
249 else cout<<"OFF"<<endl;
250 } else if (fUseSmoother)
251 cout<<"Use smoother to compute final track parameters, etc, at each cluster"<<endl;
253 cout<<Form("Maximum normalized chi2 of tracking/trigger track matching = %5.2f",fMaxNormChi2MatchTrigger)<<endl;
255 Bool_t discardedCh = kFALSE;
258 if (!UseChamber(ch)) {
260 cout<<"Discarded chambers(1..): "<<ch+1;
263 else cout<<" "<<ch+1;
266 if (discardedCh) cout<<endl;
268 Bool_t discardedSt = kFALSE;
271 if (!RequestStation(st)) {
273 cout<<"Not requested stations(1..): "<<st+1;
276 else cout<<" "<<st+1;
279 if (discardedSt) cout<<endl;
281 if (strstr(option,"FULL")) {
282 cout<<"Bypass stations 4 and 5 (use trigger tracks as primary track candidates): ";
283 if (fBypassSt45) cout<<"ON"<<endl;
284 else cout<<"OFF"<<endl;
285 } else if (fBypassSt45)
286 cout<<"Bypass stations 4 and 5 (use trigger tracks as primary track candidates)"<<endl;
289 cout<<"\t-------------------------------------"<<endl<<endl;