Implementation of 1D PID LQ method
[u/mrichter/AliRoot.git] / TRD / AliTRDrecoParam.cxx
1 /**************************************************************************
2  * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
3  *                                                                        *
4  * Author: The ALICE Off-line Project.                                    *
5  * Contributors are mentioned in the code where appropriate.              *
6  *                                                                        *
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  **************************************************************************/
15
16 /* $Id$ */
17
18 ///////////////////////////////////////////////////////////////////////////////
19 //                                                                           //
20 //  Parameter class for the TRD reconstruction                               //
21 //                                                                           //
22 //  Authors:                                                                 //
23 //    Alex Bercuci <A.Bercuci@gsi.de>                                        //
24 //    Markus Fasel <M.Fasel@gsi.de>                                          //
25 //                                                                           //
26 ///////////////////////////////////////////////////////////////////////////////
27
28 #include "AliTRDrecoParam.h"
29 #include "AliTRDrawStreamBase.h"
30
31 ClassImp(AliTRDrecoParam)
32
33
34 //______________________________________________________________
35 AliTRDrecoParam::AliTRDrecoParam()
36   :AliDetectorRecoParam()
37   ,fkdNchdy(12.)
38   ,fkMaxTheta(1.0)      
39   ,fkMaxPhi(2.0) 
40   ,fkRoad0y(6.0)
41   ,fkRoad0z(8.5) 
42   ,fkRoad1y(2.0)
43   ,fkRoad1z(20.0)       
44   ,fkRoad2y(3.0)
45   ,fkRoad2z(20.0)
46   ,fkPlaneQualityThreshold(5.0)// 4.2? under Investigation
47   ,fkRoadzMultiplicator(1.5)
48   ,fkFindable(.333)
49   ,fkChi2Z(30./*14.*//*12.5*/)
50   ,fkChi2Y(.25)
51   ,fkChi2YSlope(7.73)
52   ,fkChi2ZSlope(0.069)
53         ,fkChi2YCut(0.5)
54   ,fkPhiSlope(10.6)
55   ,fkNMeanClusters(20.)
56   ,fkNSigmaClusters(2.)
57   ,fkNClusterNoise(0.)
58   ,fkNMeanTracklets(5.5)
59   ,fkTrackLikelihood(-15.)
60   ,fFlags(0)
61   ,fRawStreamVersion("REAL")
62   ,fADCBaseline(0)
63   ,fMinMaxCutSigma(4.)
64   ,fMinLeftRightCutSigma(8.)
65   ,fClusMaxThresh(4.5)
66   ,fClusSigThresh(3.5)
67   ,fTCnexp(1)
68   ,fNumberOfPresamples(0)
69   ,fNumberOfPostsamples(0)
70 {
71   //
72   // Default constructor
73   //
74   fSysCovMatrix[0] = 0.; // y direction (1 cm)
75   fSysCovMatrix[1] = 0.; // z direction (1 cm)
76   fSysCovMatrix[2] = 0.; // snp
77   fSysCovMatrix[3] = 0.; // tgl
78   fSysCovMatrix[4] = 0.; // 1/pt
79
80   // Xe tail cancellation parameters
81   fTCParams[0] = 1.156; // r1
82   fTCParams[1] = 0.130; // r2
83   fTCParams[2] = 0.114; // c1
84   fTCParams[3] = 0.624; // c2
85   // Ar tail cancellation parameters
86   fTCParams[4] = 6.;    // r1
87   fTCParams[5] = 0.62;  // r2
88   fTCParams[6] = 0.0087;// c1
89   fTCParams[7] = 0.07;  // c2
90
91   memset(fPIDThreshold, 0, AliTRDCalPID::kNMom*sizeof(Double_t));
92   memset(fStreamLevel, 0, kTRDreconstructionTasks * sizeof(Int_t));
93
94   SetPIDNeuralNetwork();
95   SetEightSlices();
96   SetImproveTracklets();
97   SetLUT();
98   SetTailCancelation();
99 }
100
101 //______________________________________________________________
102 AliTRDrecoParam::AliTRDrecoParam(const AliTRDrecoParam &ref)
103   :AliDetectorRecoParam(ref)
104   ,fkdNchdy(ref.fkdNchdy)
105   ,fkMaxTheta(ref.fkMaxTheta)
106   ,fkMaxPhi(ref.fkMaxPhi)
107   ,fkRoad0y(ref.fkRoad0y)
108   ,fkRoad0z(ref.fkRoad0z) 
109   ,fkRoad1y(ref.fkRoad1y)
110   ,fkRoad1z(ref.fkRoad1z)       
111   ,fkRoad2y(ref.fkRoad2y)
112   ,fkRoad2z(ref.fkRoad2z)
113   ,fkPlaneQualityThreshold(ref.fkPlaneQualityThreshold)
114   ,fkRoadzMultiplicator(ref.fkRoadzMultiplicator)
115   ,fkFindable(ref.fkFindable)
116   ,fkChi2Z(ref.fkChi2Z)
117   ,fkChi2Y(ref.fkChi2Y)
118   ,fkChi2YSlope(ref.fkChi2YSlope)
119   ,fkChi2ZSlope(ref.fkChi2ZSlope)
120         ,fkChi2YCut(ref.fkChi2YCut)
121   ,fkPhiSlope(ref.fkPhiSlope)
122   ,fkNMeanClusters(ref.fkNMeanClusters)
123   ,fkNSigmaClusters(ref.fkNSigmaClusters)
124   ,fkNClusterNoise(ref.fkNClusterNoise)
125   ,fkNMeanTracklets(ref.fkNMeanTracklets)
126   ,fkTrackLikelihood(ref.fkTrackLikelihood)
127   ,fFlags(ref.fFlags)
128   ,fRawStreamVersion(ref.fRawStreamVersion)
129   ,fADCBaseline(ref.fADCBaseline)
130   ,fMinMaxCutSigma(ref.fMinMaxCutSigma)
131   ,fMinLeftRightCutSigma(ref.fMinLeftRightCutSigma)
132   ,fClusMaxThresh(ref.fClusMaxThresh)
133   ,fClusSigThresh(ref.fClusSigThresh)
134   ,fTCnexp(ref.fTCnexp)
135   ,fNumberOfPresamples(ref.fNumberOfPresamples)
136   ,fNumberOfPostsamples(ref.fNumberOfPostsamples)
137 {
138   //
139   // Copy constructor
140   //
141   memcpy(fSysCovMatrix, ref.fSysCovMatrix, 5*sizeof(Double_t));
142   memcpy(fTCParams, ref.fTCParams, 8*sizeof(Double_t));
143   memcpy(fPIDThreshold, ref.fPIDThreshold, AliTRDCalPID::kNMom*sizeof(Double_t));
144   memcpy(fStreamLevel, ref.fStreamLevel, kTRDreconstructionTasks * sizeof(Int_t));
145 }
146
147 //______________________________________________________________
148 AliTRDrecoParam *AliTRDrecoParam::GetLowFluxParam()
149 {
150   //
151   // Parameters for the low flux environment
152   //
153
154   AliTRDrecoParam *rec = new AliTRDrecoParam();
155   rec->fkdNchdy = 12.; // pp in TRD
156   rec->SetVertexConstrained();
157   rec->SetCheckTimeConsistency();
158   return rec;
159
160 }
161
162 //______________________________________________________________
163 AliTRDrecoParam *AliTRDrecoParam::GetHighFluxParam()
164 {
165   //
166   // Parameters for the high flux environment
167   //
168
169   AliTRDrecoParam *rec = new AliTRDrecoParam();
170   rec->fkdNchdy = 4000.; // PbPb in TRD
171   rec->SetVertexConstrained();
172   rec->SetCheckTimeConsistency();
173   return rec;
174
175 }
176
177 //______________________________________________________________
178 AliTRDrecoParam *AliTRDrecoParam::GetCosmicTestParam()
179 {
180   //
181   // Parameters for the cosmics data
182   //
183
184   AliTRDrecoParam *par = new AliTRDrecoParam();
185   par->fSysCovMatrix[0] = 2.; // y direction (1 cm)
186   par->fSysCovMatrix[1] = 2.; // z direction (1 cm)
187   par->fkChi2YSlope     = 0.11853;
188   par->fkChi2ZSlope     = 0.04527;
189   par->fkChi2YCut       = 1.;
190   par->fkPhiSlope       = 10.; //3.17954;
191   par->fkMaxTheta       = 2.1445;
192   par->fkMaxPhi         = 2.7475;
193   par->fkNMeanClusters  = 12.89;
194   par->fkNSigmaClusters = 2.095;
195   par->fkRoadzMultiplicator = 3.;
196   par->fADCBaseline = 10;
197   par->fStreamLevel[kTracker] = 1;
198   par->SetCheckTimeConsistency();
199   return par;
200
201 }
202
203
204 //______________________________________________________________
205 Float_t AliTRDrecoParam::GetNClusters() const
206 {
207   // Estimate the number of clusters in the TRD detector
208   
209   Float_t nclusters = (fkNMeanClusters + 2*fkNSigmaClusters)*fkNMeanTracklets*fkdNchdy;
210   nclusters *= 1.+fkNClusterNoise;
211   return nclusters;
212 }
213
214 //______________________________________________________________
215 void AliTRDrecoParam::SetPIDLQslices(Int_t s)
216 {
217 // Setting number of slices used by the PID LQ method s={1, 2}
218 // If PID NN is set this function will change to PID LQ.
219  
220   if(IsPIDNeuralNetwork()){
221     AliWarning("PID set to NN. Changing to LQ.");
222     SetPIDNeuralNetwork(kFALSE);
223   } 
224
225   switch(s){
226   case 1: 
227     if(TESTBIT(fFlags, kLQ2D)) CLRBIT(fFlags, kLQ2D);
228     break;
229   case 2:
230     SETBIT(fFlags, kLQ2D);
231     break;
232   default:
233     AliWarning(Form("N[%d] PID LQ slices not implemented. Using default 2.", s));
234     SETBIT(fFlags, kLQ2D);
235     break;
236   }
237 }
238