]> git.uio.no Git - u/mrichter/AliRoot.git/blame - PWGHF/vertexingHF/AliRDHFCutsLctopK0sfromAODtracks.cxx
Merge branch 'feature-movesplit'
[u/mrichter/AliRoot.git] / PWGHF / vertexingHF / AliRDHFCutsLctopK0sfromAODtracks.cxx
CommitLineData
b5c5bbb6 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/* $Id$ */
17
18/////////////////////////////////////////////////////////////
19//
20// Class for cuts on AOD reconstructed Lc->p+K0s
21//
22// Modified by Y.S Watanabe - wyosuke@cns.s.u-tokyo.ac.jp
23//
24/////////////////////////////////////////////////////////////
25
26#include <Riostream.h>
27
28#include <TDatabasePDG.h>
29#include <TMath.h>
30
31#include "AliAnalysisManager.h"
32#include "AliInputEventHandler.h"
33#include "AliPIDResponse.h"
34#include "AliRDHFCutsLctopK0sfromAODtracks.h"
35#include "AliAODRecoCascadeHF.h"
36#include "AliAODTrack.h"
37#include "AliESDtrack.h"
38#include "AliESDVertex.h"
39#include "AliAODVertex.h"
40#include "AliAODv0.h"
41#include "AliAODcascade.h"
42#include "AliESDv0.h"
43
44using std::cout;
45using std::endl;
46
47ClassImp(AliRDHFCutsLctopK0sfromAODtracks)
48
49//--------------------------------------------------------------------------
50AliRDHFCutsLctopK0sfromAODtracks::AliRDHFCutsLctopK0sfromAODtracks(const char* name) :
51AliRDHFCuts(name),
52 fPIDStrategy(kNSigmaCuts),
53 fCombinedPIDThreshold(0.),
54 fUseOnTheFlyV0(kFALSE),
55 fProdTrackPtMin(0.3),
56 fProdTrackEtaRange(0.8),
57 fProdUseAODFilterBit(kTRUE),
58 fProdV0MassTolK0s(0.01),
59 fProdV0PtMin(0.5),
60 fProdV0CosPointingAngleToPrimVtxMin(0.99),
61 fProdV0DcaDaughtersMax(1.5),
62 fProdV0DaughterEtaRange(0.8),
63 fProdV0DaughterPtMin(0.0),
64 fProdV0DaughterTPCClusterMin(70),
65fProdRoughMassTol(0.25),
66fProdRoughPtMin(0.0),
67fnCuts(0),
68 fnTotalCutBins(1),
69 fCutsArray(0)
70{
71 //
72 // Default Constructor
73 //
74
75 const Int_t nvars=7;
76 SetNVars(nvars);
77 TString varNames[nvars]={"Lc inv. mass [GeV/c2]", // 0
78 "Lc pT [GeV/c]", //1
79 "Bachelor pT [GeV/c]", //2
80 "Bachelor d0 [cm]", //3
81 "V0 d0 [cm]", //4
82 "K0s mass [GeV/c2]", //5
83 "Decay Length XY [cm]" //6
84 };
85
86 Bool_t isUpperCut[nvars]={kTRUE, // 0
87 kFALSE, //1
88 kFALSE, //2
89 kTRUE, //3
90 kTRUE, //4
91 kTRUE, //5
92 kFALSE //6
93 };
94 SetVarNames(nvars,varNames,isUpperCut);
95 Bool_t forOpt[nvars]={kFALSE, // 0
96 kFALSE, //1
97 kTRUE, //2
98 kTRUE, //3
99 kTRUE, //4
100 kTRUE, //5
101 kTRUE //6
102 };
103 SetVarsForOpt(nvars,forOpt);
104
105 Float_t limits[2]={0,999999999.};
106 SetPtBins(2,limits);
107}
108//--------------------------------------------------------------------------
109AliRDHFCutsLctopK0sfromAODtracks::AliRDHFCutsLctopK0sfromAODtracks(const AliRDHFCutsLctopK0sfromAODtracks &source) :
110 AliRDHFCuts(source),
111 fPIDStrategy(source.fPIDStrategy),
112 fCombinedPIDThreshold(source.fCombinedPIDThreshold),
113 fUseOnTheFlyV0(source.fUseOnTheFlyV0),
114 fProdTrackPtMin(source.fProdTrackPtMin),
115 fProdTrackEtaRange(source.fProdTrackEtaRange),
116 fProdUseAODFilterBit(source.fProdUseAODFilterBit),
117 fProdV0MassTolK0s(source.fProdV0MassTolK0s),
118 fProdV0PtMin(source.fProdV0PtMin),
119 fProdV0CosPointingAngleToPrimVtxMin(source.fProdV0CosPointingAngleToPrimVtxMin),
120 fProdV0DcaDaughtersMax(source.fProdV0DcaDaughtersMax),
121 fProdV0DaughterEtaRange(source.fProdV0DaughterEtaRange),
122 fProdV0DaughterPtMin(source.fProdV0DaughterPtMin),
123 fProdV0DaughterTPCClusterMin(source.fProdV0DaughterTPCClusterMin),
124 fProdRoughMassTol(source.fProdRoughMassTol),
125 fProdRoughPtMin(source.fProdRoughPtMin),
126 fnCuts(source.fnCuts),
127 fnTotalCutBins(source.fnTotalCutBins),
128 fCutsArray(0)
129{
130 //
131 // Copy constructor
132 //
133 if(source.fCutsArray) SetCutsArray(source.fnTotalCutBins,source.fCutsArray);
134}
135//--------------------------------------------------------------------------
136AliRDHFCutsLctopK0sfromAODtracks &AliRDHFCutsLctopK0sfromAODtracks::operator=(const AliRDHFCutsLctopK0sfromAODtracks &source)
137{
138 //
139 // assignment operator
140 //
141
142 if (this != &source) {
143 AliRDHFCuts::operator=(source);
144 }
145
146 fPIDStrategy = source.fPIDStrategy;
147 fCombinedPIDThreshold = source.fCombinedPIDThreshold;
148 fUseOnTheFlyV0 = source.fUseOnTheFlyV0;
149 fProdTrackPtMin = source.fProdTrackPtMin;
150 fProdTrackEtaRange = source.fProdTrackEtaRange;
151 fProdUseAODFilterBit = source.fProdUseAODFilterBit;
152 fProdV0MassTolK0s = source.fProdV0MassTolK0s;
153 fProdV0PtMin = source.fProdV0PtMin;
154 fProdV0CosPointingAngleToPrimVtxMin = source.fProdV0CosPointingAngleToPrimVtxMin;
155 fProdV0DcaDaughtersMax=source.fProdV0DcaDaughtersMax;
156 fProdV0DaughterEtaRange=source.fProdV0DaughterEtaRange;
157 fProdV0DaughterPtMin=source.fProdV0DaughterPtMin;
158 fProdV0DaughterTPCClusterMin=source.fProdV0DaughterTPCClusterMin;
159 fProdRoughMassTol = source.fProdRoughMassTol;
160 fProdRoughPtMin = source.fProdRoughPtMin;
161
162 if(source.fnCuts) fnCuts = source.fnCuts;
163 if(source.fnTotalCutBins) fnTotalCutBins = source.fnCuts;
164 if(source.fCutsArray) SetCutsArray(source.fnTotalCutBins,source.fCutsArray);
165
166 return *this;
167}
168
169//---------------------------------------------------------------------------
170AliRDHFCutsLctopK0sfromAODtracks::~AliRDHFCutsLctopK0sfromAODtracks() {
171 //
172 // Default Destructor
173 //
174
175 if(fCutsArray) delete[] fCutsArray;
176}
177
178//---------------------------------------------------------------------------
179void AliRDHFCutsLctopK0sfromAODtracks::GetCutVarsForOpt(AliAODRecoDecayHF *d,Float_t *vars,Int_t nvars,Int_t *pdgdaughters) {
180 //
181 // Fills in vars the values of the variables
182 //
183
184 if (pdgdaughters[0]==-9999) return; // dummy
185
186 AliAODRecoCascadeHF* dd=(AliAODRecoCascadeHF*)d;
187 if(!dd){
188 AliError("No AliAODRecoCascadeHF object found\n");
189 return;
190 }
191
192 if (nvars!=fnVarsForOpt) {
193 AliError("Cut object seems to have the wrong number of variables\n");
194 return;
195 }
196
197 //Double_t ptD=d->Pt();
198 //Int_t ptbin=PtBin(ptD);
199 Int_t iter=-1;
200
201 if(fVarsForOpt[0]){
202 iter++;
203 Double_t mlcPDG = TDatabasePDG::Instance()->GetParticle(4122)->Mass();
204 vars[iter]= TMath::Abs(dd->InvMassLctoK0sP()-mlcPDG) ;
205 }
206 if(fVarsForOpt[1]){
207 iter++;
208 vars[iter]= dd->Pt();
209 }
210 if(fVarsForOpt[2]){
211 iter++;
212 AliAODTrack *part = dd->GetBachelor();
213 vars[iter]= part->Pt();
214 }
215 if(fVarsForOpt[3]){
216 iter++;
217 vars[iter]= dd->Getd0Prong(0);
218 }
219 if(fVarsForOpt[4]){
220 iter++;
221 vars[iter]= dd->Getd0Prong(1);
222 }
223 if(fVarsForOpt[5]){
224 iter++;
225 AliAODv0 *v0 = dd->Getv0();
226 vars[iter]= v0->MassK0Short();
227 }
228 if(fVarsForOpt[6]){
229 iter++;
230 vars[iter]= dd->DecayLengthXY();
231 }
232
233 return;
234}
235
236//---------------------------------------------------------------------------
237Int_t AliRDHFCutsLctopK0sfromAODtracks::IsSelected(TObject* obj, Int_t selectionLevel) {
238 //
239 // Apply selection
240 //
241
242 if (!fCutsRD) {
243 AliFatal("Cut matrix not inizialized. Exit...");
244 return 0;
245 }
246
247 AliAODRecoCascadeHF* d=(AliAODRecoCascadeHF*)obj;
248 if(!d){
249 AliDebug(2,"AliAODRecoCascadeHF null");
250 return 0;
251 }
252
253 Double_t ptD=d->Pt();
254 if(ptD<fMinPtCand) return 0;
255 if(ptD>fMaxPtCand) return 0;
256
257 if (selectionLevel==AliRDHFCuts::kAll ||
258 selectionLevel==AliRDHFCuts::kTracks) {
259 //Performed in production stage
260 }
261
262 Int_t returnvalueCuts=1;
263 // selection on candidate
264 if (selectionLevel==AliRDHFCuts::kAll ||
265 selectionLevel==AliRDHFCuts::kCandidate) {
266
267 Double_t pt=d->Pt();
268 Int_t ptbin=PtBin(pt);
269 if (ptbin==-1) {
270 return 0;
271 }
272 Bool_t okcand=kTRUE;
273
274 Double_t mlcPDG = TDatabasePDG::Instance()->GetParticle(4122)->Mass();
275 Double_t mk0sPDG = TDatabasePDG::Instance()->GetParticle(310)->Mass();
276 AliAODTrack *part = d->GetBachelor();
277 AliAODv0 *v0 = d->Getv0();
278
279 if(TMath::Abs(d->InvMassLctoK0sP()-mlcPDG) > fCutsRD[GetGlobalIndex(0,ptbin)])
280 {
281 okcand = kFALSE;
282 }
283 if(d->Pt() < fCutsRD[GetGlobalIndex(1,ptbin)])
284 {
285 okcand = kFALSE;
286 }
287 if(part->Pt() < fCutsRD[GetGlobalIndex(2,ptbin)])
288 {
289 okcand = kFALSE;
290 }
291 if(TMath::Abs(d->Getd0Prong(0)) > fCutsRD[GetGlobalIndex(3,ptbin)])
292 {
293 okcand = kFALSE;
294 }
295 if(TMath::Abs(d->Getd0Prong(1)) > fCutsRD[GetGlobalIndex(4,ptbin)])
296 {
297 okcand = kFALSE;
298 }
299 if(TMath::Abs(v0->MassK0Short()-mk0sPDG) > fCutsRD[GetGlobalIndex(5,ptbin)])
300 {
301 okcand = kFALSE;
302 }
303 if(d->DecayLengthXY() < fCutsRD[GetGlobalIndex(6,ptbin)])
304 {
305 okcand = kFALSE;
306 }
307
308 if(!okcand) return 0;
309 returnvalueCuts = 1;
310 }
311
312 Int_t returnvaluePID=1;
313 if(selectionLevel==AliRDHFCuts::kAll ||
314 selectionLevel==AliRDHFCuts::kCandidate||
315 selectionLevel==AliRDHFCuts::kPID) {
316
317 switch(fPIDStrategy){
318 case kNSigmaCuts:
319 returnvaluePID = IsSelectedPID(d);
320 break;
321 case kCombinedCuts:
322 returnvaluePID = IsSelectedCombinedPID(d);
323 break;
324 }
325 }
326
327 Int_t returnvalue = 0;
328 if(returnvalueCuts==1 && returnvaluePID==1) returnvalue=1;
329
330 return returnvalue;
331}
332
333//---------------------------------------------------------------------------
334Int_t AliRDHFCutsLctopK0sfromAODtracks::IsSelectedPID(AliAODRecoDecayHF* obj)
335{
336 //
337 // IsSelectedPID
338 //
339
340 if(!fUsePID || !obj) return 1;
341
342 AliAODRecoCascadeHF* dd=(AliAODRecoCascadeHF*)obj;
343 AliAODTrack *part = dd->GetBachelor();
344
345 Int_t returnvalue=1;
346
347 if(fPidHF->GetPidResponse()==0x0){
348 AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();
349 AliInputEventHandler *inputHandler=(AliInputEventHandler*)mgr->GetInputEventHandler();
350 AliPIDResponse *pidResp=inputHandler->GetPIDResponse();
351 fPidHF->SetPidResponse(pidResp);
352 }
353
354 Int_t isProton=fPidHF->MakeRawPid(part,4);
355 if(isProton<1) returnvalue = 0;
356
357 return returnvalue;
358}
359
360//---------------------------------------------------------------------------
361Int_t AliRDHFCutsLctopK0sfromAODtracks::IsSelectedCombinedPID(AliAODRecoDecayHF* obj) {
362 //
363 // IsSelectedCombinedPID
364 //
365
366 if(!fUsePID || !obj) {return 1;}
367
368 AliAODRecoCascadeHF* dd=(AliAODRecoCascadeHF*)obj;
369 AliAODTrack *part = dd->GetBachelor();
370 if(!part) return 0;
371
372 Int_t returnvalue=1;
373 Double_t probProton = GetProtonProbabilityTPCTOF(part);
374 if(probProton<fCombinedPIDThreshold) returnvalue = 0;
375
376 return returnvalue;
377}
378
379//________________________________________________________________________
380Double_t AliRDHFCutsLctopK0sfromAODtracks::GetProtonProbabilityTPCTOF(AliAODTrack* trk)
381{
382 //
383 // Get Proton probability
384 //
385 fPidHF->GetPidCombined()->SetDetectorMask(AliPIDResponse::kDetTPC+AliPIDResponse::kDetTOF);
386 Double_t prob1[AliPID::kSPECIES];
387 UInt_t detUsed1 = fPidHF->GetPidCombined()->ComputeProbabilities(trk, fPidHF->GetPidResponse(), prob1);
388 if (detUsed1 != (UInt_t)fPidHF->GetPidCombined()->GetDetectorMask() )
389 {
390 fPidHF->GetPidCombined()->SetDetectorMask(AliPIDResponse::kDetTPC);
391 detUsed1 = fPidHF->GetPidCombined()->ComputeProbabilities(trk, fPidHF->GetPidResponse(), prob1);
392 }
393 return prob1[AliPID::kProton];
394}
395
396//________________________________________________________________________
397Bool_t AliRDHFCutsLctopK0sfromAODtracks::SingleTrkCuts(AliAODTrack *trk)
398{
399 //
400 // Single Track Cut to be applied before object creation
401 //
402
403 if(trk->GetStatus()&AliESDtrack::kITSpureSA) return kFALSE;
404 if(!(trk->GetStatus()&AliESDtrack::kITSin)) return kFALSE;
405 if(fProdUseAODFilterBit && !trk->TestFilterMask(BIT(4))) return kFALSE;
406 if(fabs(trk->Eta())>fProdTrackEtaRange) return kFALSE;
407 if(trk->Pt()<fProdTrackPtMin) return kFALSE;
408
409 if(fUsePID)
410 {
411 if(fPidHF->GetPidResponse()==0x0){
412 AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();
413 AliInputEventHandler *inputHandler=(AliInputEventHandler*)mgr->GetInputEventHandler();
414 AliPIDResponse *pidResp=inputHandler->GetPIDResponse();
415 fPidHF->SetPidResponse(pidResp);
416 }
417
418 Int_t isProton=fPidHF->MakeRawPid(trk,4);
419 if(isProton<1) return kFALSE;
420 }
421
422 return kTRUE;
423}
424
425//________________________________________________________________________
426Bool_t AliRDHFCutsLctopK0sfromAODtracks::SingleV0Cuts(AliAODv0 *v0, AliAODVertex *primVert)
427{
428 //
429 // Single V0 Cut to be applied before object creation
430 //
431
432 Bool_t onFlyV0 = v0->GetOnFlyStatus(); // on-the-flight V0s
433 if ( onFlyV0 && !fUseOnTheFlyV0 ) return kFALSE;
434
435 AliAODTrack *cptrack = (AliAODTrack*)(v0->GetDaughter(0));
436 AliAODTrack *cntrack = (AliAODTrack*)(v0->GetDaughter(1));
437 if(!cptrack || !cntrack) return kFALSE;
438 if ( cptrack->Charge() == cntrack->Charge() ) return kFALSE;
439 if(!(cptrack->GetStatus() & AliESDtrack::kTPCrefit) ||
440 !(cntrack->GetStatus() & AliESDtrack::kTPCrefit)) return kFALSE;
441 AliAODVertex *maybeKinkPos = (AliAODVertex*)cptrack->GetProdVertex();
442 AliAODVertex *maybeKinkNeg = (AliAODVertex*)cntrack->GetProdVertex();
443 if (maybeKinkPos->GetType()==AliAODVertex::kKink || maybeKinkNeg->GetType()==AliAODVertex::kKink)
444 return kFALSE;
445
446 if ( ( ( cptrack->GetTPCClusterInfo(2,1) ) < (Float_t)fProdV0DaughterTPCClusterMin ) ||
447 ( ( cntrack->GetTPCClusterInfo(2,1) ) < (Float_t)fProdV0DaughterTPCClusterMin) ) return kFALSE;
448
449 Double_t massK0S = v0->MassK0Short();
450 Double_t mk0sPDG = TDatabasePDG::Instance()->GetParticle(310)->Mass();
451 if(fabs(massK0S-mk0sPDG)>fProdV0MassTolK0s) return kFALSE;
452
453
454 if(TMath::Abs(v0->DcaV0Daughters())>fProdV0DcaDaughtersMax) return kFALSE;
455 Double_t posVtx[3] = {0.,0.,0.};
456 primVert->GetXYZ(posVtx);
457 Double_t cospav0 = v0->CosPointingAngle(posVtx);
458 if(cospav0<fProdV0CosPointingAngleToPrimVtxMin) return kFALSE;
459 if(v0->Pt()<fProdV0PtMin) return kFALSE;
460 if(fabs(cptrack->Eta())>fProdV0DaughterEtaRange) return kFALSE;
461 if(fabs(cntrack->Eta())>fProdV0DaughterEtaRange) return kFALSE;
462 if(cptrack->Pt()<fProdV0DaughterPtMin) return kFALSE;
463 if(cntrack->Pt()<fProdV0DaughterPtMin) return kFALSE;
464
465 return kTRUE;
466}
467
468//________________________________________________________________________
469Bool_t AliRDHFCutsLctopK0sfromAODtracks::SelectWithRoughCuts(AliAODv0 *v0, AliAODTrack *part)
470{
471 //
472 // Mass and pT Cut to be applied before object creation
473 //
474
475 Double_t mprPDG = TDatabasePDG::Instance()->GetParticle(2212)->Mass();
476 Double_t mLcPDG = TDatabasePDG::Instance()->GetParticle(4122)->Mass();
477
478 Double_t pxpr_init = part->Px();
479 Double_t pypr_init = part->Py();
480 Double_t pzpr_init = part->Pz();
481 Double_t Epr_init = sqrt(pxpr_init*pxpr_init+pypr_init*pypr_init+pzpr_init*pzpr_init+mprPDG*mprPDG);
482
483 Double_t pxv0_init = v0->Px();
484 Double_t pyv0_init = v0->Py();
485 Double_t pzv0_init = v0->Pz();
486 Double_t massv0_init = v0->MassK0Short();
487 Double_t Ev0_init = sqrt(pxv0_init*pxv0_init+pyv0_init*pyv0_init+pzv0_init*pzv0_init+massv0_init*massv0_init);
488
489 Double_t pxlc_init = pxpr_init+pxv0_init;
490 Double_t pylc_init = pypr_init+pyv0_init;
491 Double_t pzlc_init = pzpr_init+pzv0_init;
492 Double_t Elc_init = Epr_init+Ev0_init;
493 Double_t lcmass_init = sqrt(Elc_init*Elc_init-pxlc_init*pxlc_init-pylc_init*pylc_init-pzlc_init*pzlc_init);
494
495 if(lcmass_init<mLcPDG-fProdRoughMassTol || lcmass_init>mLcPDG+fProdRoughMassTol) return kFALSE;
496 if(sqrt(pxlc_init*pxlc_init+pylc_init*pylc_init)<fProdRoughPtMin) return kFALSE;
497
498 return kTRUE;
499}
500
501//________________________________________________________________________
502void AliRDHFCutsLctopK0sfromAODtracks::SetCutsArray(Int_t nCuts, Int_t nVars, Int_t nPtBins, Float_t ***cutsArray)
503{
504 //
505 // store the cuts
506 //
507 if (nVars!=fnVars) {
508 AliError(" wrong number of variables\n");
509 return;
510 }
511 if (nCuts!=fnCuts) {
512 AliError(" wrong number of cuts\n");
513 return;
514 }
515 if (nPtBins!=fnPtBins) {
516 AliError(" wrong number of pT bin\n");
517 return;
518 }
519
520 if(!fCutsArray)
521 {
522 fnTotalCutBins = nCuts * nVars * nPtBins;
523 fCutsArray = new Float_t[fnTotalCutBins];
524 }
525
526 for(Int_t icuts=0;icuts<nCuts;icuts++){
527 for(Int_t iv=0;iv<nVars;iv++){
528 for(Int_t ip=0;ip<nPtBins;ip++){
529 Int_t gid = GetCutArrayID(icuts,iv,ip);
530 fCutsArray[gid] = cutsArray[icuts][iv][ip];
531 }
532 }
533 }
534 return;
535}
536
537//________________________________________________________________________
538void AliRDHFCutsLctopK0sfromAODtracks::SetCutsArray(Int_t nTotBins, Float_t *cutsArray)
539{
540 //
541 // store the cuts
542 //
543
544 if (nTotBins!=fnVars*fnPtBins*fnCuts) {
545 AliError(" wrong number of variables\n");
546 return;
547 }
548
549 if(!fCutsArray)
550 {
551 fnTotalCutBins = fnCuts * fnVars * fnPtBins;
552 fCutsArray = new Float_t[fnTotalCutBins];
553 }
554
555 for(Int_t i=0;i<nTotBins;i++){
556 fCutsArray[i] = cutsArray[i];
557 }
558
559 return;
560}
561
562//________________________________________________________________________
563void AliRDHFCutsLctopK0sfromAODtracks::SetCutsFromArray(Int_t iCuts)
564{
565 //
566 // Read Cuts from fCutsArray and update fCutsRD
567 //
568 Float_t** cutsarray;
569 cutsarray=new Float_t*[fnVars];
570 for(Int_t ic=0;ic<fnVars;ic++){cutsarray[ic]=new Float_t[fnPtBins];}
571
572 for(Int_t i=0;i<fnVars;i++){
573 for(Int_t j=0;j<fnPtBins;j++){
574 Int_t gid = GetCutArrayID(iCuts,i,j);
575 cutsarray[i][j] = fCutsArray[gid];
576 }
577 }
578 SetCuts(fnVars,fnPtBins,cutsarray);
579
580 for(Int_t ic=0;ic<fnVars;ic++){
581 delete[] cutsarray[ic];
582 }
583 delete[] cutsarray;
584}
585
586//________________________________________________________________________
587Int_t AliRDHFCutsLctopK0sfromAODtracks::GetCutArrayID(Int_t ic, Int_t iv, Int_t ip)
588{
589 //
590 // Global index of fCutsArray
591 //
592 return ic*fnVars*fnPtBins+iv*fnPtBins+ip;
593}