]> git.uio.no Git - u/mrichter/AliRoot.git/blame - PWG3/vertexingHF/AliRDHFCutsLctopKpi.cxx
Coverity
[u/mrichter/AliRoot.git] / PWG3 / vertexingHF / AliRDHFCutsLctopKpi.cxx
CommitLineData
e3d40058 1/**************************************************************************
2 * Copyright(c) 1998-2010, 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/////////////////////////////////////////////////////////////
17//
18// Class for cuts on AOD reconstructed Lc->pKpi
19//
20// Author: A.Dainese, andrea.dainese@pd.infn.it
21/////////////////////////////////////////////////////////////
22
23#include <TDatabasePDG.h>
24#include <Riostream.h>
25
26#include "AliRDHFCutsLctopKpi.h"
27#include "AliAODRecoDecayHF3Prong.h"
28#include "AliAODTrack.h"
29#include "AliESDtrack.h"
30
31ClassImp(AliRDHFCutsLctopKpi)
32
33//--------------------------------------------------------------------------
a9b75906 34AliRDHFCutsLctopKpi::AliRDHFCutsLctopKpi(const char* name) :
35AliRDHFCuts(name)
e3d40058 36{
37 //
38 // Default Constructor
39 //
40 Int_t nvars=12;
41 SetNVars(nvars);
42 TString varNames[12]={"inv. mass [GeV]",
43 "pTP [GeV/c]",
44 "pTPi [GeV/c]",
45 "d0P [cm] lower limit!",
46 "d0Pi [cm] lower limit!",
47 "dist12 (cm)",
48 "sigmavert (cm)",
49 "dist prim-sec (cm)",
50 "pM=Max{pT1,pT2,pT3} (GeV/c)",
51 "cosThetaPoint",
52 "Sum d0^2 (cm^2)",
53 "dca cut (cm)"};
54 Bool_t isUpperCut[12]={kTRUE,
55 kFALSE,
56 kFALSE,
57 kFALSE,
58 kFALSE,
59 kFALSE,
60 kTRUE,
61 kFALSE,
62 kFALSE,
63 kFALSE,
64 kFALSE,
65 kTRUE};
66 SetVarNames(nvars,varNames,isUpperCut);
4755453e 67 Bool_t forOpt[12]={kFALSE,
e3d40058 68 kFALSE,
69 kFALSE,
70 kFALSE,
71 kFALSE,
72 kFALSE,
73 kTRUE,
74 kTRUE,
75 kTRUE,
76 kTRUE,
77 kTRUE,
78 kFALSE};
4755453e 79 SetVarsForOpt(5,forOpt);
e3d40058 80 Float_t limits[2]={0,999999999.};
81 SetPtBins(2,limits);
82}
83//--------------------------------------------------------------------------
84AliRDHFCutsLctopKpi::AliRDHFCutsLctopKpi(const AliRDHFCutsLctopKpi &source) :
85 AliRDHFCuts(source)
86{
87 //
88 // Copy constructor
89 //
90
91}
92//--------------------------------------------------------------------------
93AliRDHFCutsLctopKpi &AliRDHFCutsLctopKpi::operator=(const AliRDHFCutsLctopKpi &source)
94{
95 //
96 // assignment operator
97 //
98 if(&source == this) return *this;
99
100 AliRDHFCuts::operator=(source);
101
102 return *this;
103}
104
105
106//---------------------------------------------------------------------------
107void AliRDHFCutsLctopKpi::GetCutVarsForOpt(AliAODRecoDecayHF *d,Float_t *vars,Int_t nvars,Int_t *pdgdaughters) {
108 //
109 // Fills in vars the values of the variables
110 //
111
112 if(nvars!=fnVarsForOpt) {
113 printf("AliRDHFCutsLctopKpi::GetCutsVarsForOpt: wrong number of variables\n");
114 return;
115 }
116
117 AliAODRecoDecayHF3Prong *dd = (AliAODRecoDecayHF3Prong*)d;
118
119 Int_t iter=-1;
120 if(fVarsForOpt[0]){
121 iter++;
122 vars[iter]=dd->InvMassLcpKpi();
123 }
124 if(fVarsForOpt[1]){
125 iter++;
126 for(Int_t iprong=0;iprong<3;iprong++){
127 if(TMath::Abs(pdgdaughters[iprong])==2212) {
128 vars[iter]=dd->PtProng(iprong);
129 }
130 }
131 }
132 if(fVarsForOpt[2]){
133 iter++;
134 for(Int_t iprong=0;iprong<3;iprong++){
135 if(TMath::Abs(pdgdaughters[iprong])==211) {
136 vars[iter]=dd->PtProng(iprong);
137 }
138 }
139 }
140 if(fVarsForOpt[3]){
141 iter++;
142 for(Int_t iprong=0;iprong<3;iprong++){
143 if(TMath::Abs(pdgdaughters[iprong])==2212) {
144 vars[iter]=dd->Getd0Prong(iprong);
145 }
146 }
147 }
148 if(fVarsForOpt[4]){
149 iter++;
150 for(Int_t iprong=0;iprong<3;iprong++){
151 if(TMath::Abs(pdgdaughters[iprong])==211) {
152 vars[iter]=dd->Getd0Prong(iprong);
153 }
154 }
155 }
156 if(fVarsForOpt[5]){
157 iter++;
158 vars[iter]=dd->GetDist12toPrim();
159 }
160 if(fVarsForOpt[6]){
161 iter++;
162 vars[iter]=dd->GetSigmaVert();
163 }
164 if(fVarsForOpt[7]){
165 iter++;
166 vars[iter] = dd->DecayLength();
167 }
168 if(fVarsForOpt[8]){
169 iter++;
170 Float_t ptmax=0;
171 for(Int_t i=0;i<3;i++){
172 if(dd->PtProng(i)>ptmax)ptmax=dd->PtProng(i);
173 }
174 vars[iter]=ptmax;
175 }
176 if(fVarsForOpt[9]){
177 iter++;
178 vars[iter]=dd->CosPointingAngle();
179 }
180 if(fVarsForOpt[10]){
181 iter++;
182 vars[iter]=dd->Getd0Prong(0)*dd->Getd0Prong(0)+dd->Getd0Prong(1)*dd->Getd0Prong(1)+dd->Getd0Prong(2)*dd->Getd0Prong(2);
183 }
184 if(fVarsForOpt[11]){
185 iter++;
186 vars[iter]=dd->GetDCA();
187 }
188
189 return;
190}
191//---------------------------------------------------------------------------
192Int_t AliRDHFCutsLctopKpi::IsSelected(TObject* obj,Int_t selectionLevel) {
193 //
194 // Apply selection
195 //
196
197 if(!fCutsRD){
198 cout<<"Cut matrice not inizialized. Exit..."<<endl;
199 return 0;
200 }
201 //PrintAll();
202 AliAODRecoDecayHF3Prong* d=(AliAODRecoDecayHF3Prong*)obj;
203
204 if(!d){
205 cout<<"AliAODRecoDecayHF3Prong null"<<endl;
206 return 0;
207 }
208
209
210 // selection on daughter tracks
211 if(selectionLevel==AliRDHFCuts::kAll ||
212 selectionLevel==AliRDHFCuts::kTracks) {
213 if(!AreDaughtersSelected(d)) return 0;
214 }
215
216
228974b3 217 Int_t returnvalue=3;
e3d40058 218
219 // selection on candidate
220 if(selectionLevel==AliRDHFCuts::kAll ||
221 selectionLevel==AliRDHFCuts::kCandidate) {
222
223 Double_t pt=d->Pt();
224
225 Int_t ptbin=PtBin(pt);
226
227 Double_t mLcpKpi,mLcpiKp;
228 Int_t okLcpKpi=1,okLcpiKp=1;
229
230 Double_t mLcPDG = TDatabasePDG::Instance()->GetParticle(4122)->Mass();
231
232 mLcpKpi=d->InvMassLcpKpi();
233 mLcpiKp=d->InvMassLcpiKp();
234
235 if(TMath::Abs(mLcpKpi-mLcPDG)>fCutsRD[GetGlobalIndex(0,ptbin)]) okLcpKpi = 0;
236 if(TMath::Abs(mLcpiKp-mLcPDG)>fCutsRD[GetGlobalIndex(0,ptbin)]) okLcpiKp = 0;
237 if(!okLcpKpi && !okLcpiKp) return 0;
238
239 if(TMath::Abs(d->PtProng(1)) < fCutsRD[GetGlobalIndex(1,ptbin)] || TMath::Abs(d->Getd0Prong(1))<fCutsRD[GetGlobalIndex(3,ptbin)]) return 0;//Kaon
228974b3 240 //if(TMath::Abs(d->PtProng(0)) < fCutsRD[GetGlobalIndex(2,ptbin)] || TMath::Abs(d->Getd0Prong(0))<fCutsRD[GetGlobalIndex(4,ptbin)]) return 0;//Proton
241 //if(TMath::Abs(d->PtProng(2)) < fCutsRD[GetGlobalIndex(2,ptbin)] || TMath::Abs(d->Getd0Prong(2))<fCutsRD[GetGlobalIndex(4,ptbin)]) return 0;//Pion
242 if((TMath::Abs(d->PtProng(0)) < fCutsRD[GetGlobalIndex(2,ptbin)]) || (TMath::Abs(d->PtProng(2)) < 0.4)) okLcpKpi=0;
243 if((TMath::Abs(d->PtProng(2)) < fCutsRD[GetGlobalIndex(2,ptbin)]) || (TMath::Abs(d->PtProng(0)) < 0.4))okLcpiKp=0;
244 if(!okLcpKpi && !okLcpiKp) return 0;
e3d40058 245
246
247
248 //2track cuts
249 if(d->GetDist12toPrim()<fCutsRD[GetGlobalIndex(5,ptbin)]|| d->GetDist23toPrim()<fCutsRD[GetGlobalIndex(5,ptbin)]) return 0;
228974b3 250 if(d->GetDist12toPrim()>1.) return 0;
251 if(d->GetDist23toPrim()>1.) return 0;
e3d40058 252 if(d->Getd0Prong(0)*d->Getd0Prong(1)<0. && d->Getd0Prong(2)*d->Getd0Prong(1)<0.) return 0;
253
254 //sec vert
255 if(d->GetSigmaVert()>fCutsRD[GetGlobalIndex(6,ptbin)]) return 0;
256
257 if(d->DecayLength()<fCutsRD[GetGlobalIndex(7,ptbin)]) return 0;
228974b3 258 if(d->DecayLength()>0.5) return 0;
e3d40058 259
260 if(TMath::Abs(d->PtProng(0))<fCutsRD[GetGlobalIndex(8,ptbin)] && TMath::Abs(d->PtProng(1))<fCutsRD[GetGlobalIndex(8,ptbin)] && TMath::Abs(d->PtProng(2))<fCutsRD[GetGlobalIndex(8,ptbin)]) return 0;
261 if(d->CosPointingAngle()< fCutsRD[GetGlobalIndex(9,ptbin)]) return 0;
262 Double_t sum2=d->Getd0Prong(0)*d->Getd0Prong(0)+d->Getd0Prong(1)*d->Getd0Prong(1)+d->Getd0Prong(2)*d->Getd0Prong(2);
263 if(sum2<fCutsRD[GetGlobalIndex(10,ptbin)]) return 0;
264
265 //DCA
266 for(Int_t i=0;i<3;i++) if(d->GetDCA(i)>fCutsRD[GetGlobalIndex(11,ptbin)]) return 0;
267
268
269 if(okLcpKpi) returnvalue=1; //cuts passed as Lc->pKpi
270 if(okLcpiKp) returnvalue=2; //cuts passed as Lc->piKp
271 if(okLcpKpi && okLcpiKp) returnvalue=3; //cuts passed as both pKpi and piKp
272
273 }
274
275 return returnvalue;
276}
277//---------------------------------------------------------------------------