]> git.uio.no Git - u/mrichter/AliRoot.git/blob - PWG3/vertexingHF/AliRDHFCutsDplustoKpipi.cxx
9fcdeace8fbca5ad2048da116176f442e47c8864
[u/mrichter/AliRoot.git] / PWG3 / vertexingHF / AliRDHFCutsDplustoKpipi.cxx
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 D+->Kpipi
19 //
20 // Author: R. Bala, bala@to.infn.it
21 //         G. Ortona, ortona@to.infn.it
22 /////////////////////////////////////////////////////////////
23
24 #include <TDatabasePDG.h>
25 #include <Riostream.h>
26
27 #include "AliRDHFCutsDplustoKpipi.h"
28 #include "AliAODRecoDecayHF3Prong.h"
29 #include "AliAODTrack.h"
30 #include "AliESDtrack.h"
31
32
33 ClassImp(AliRDHFCutsDplustoKpipi)
34
35 //--------------------------------------------------------------------------
36 AliRDHFCutsDplustoKpipi::AliRDHFCutsDplustoKpipi(const char* name) : 
37 AliRDHFCuts(name),
38 fUseStrongPid(kFALSE)
39 {
40   //
41   // Default Constructor
42   //
43   Int_t nvars=12;
44   SetNVars(nvars);
45   TString varNames[12]={"inv. mass [GeV]",
46                         "pTK [GeV/c]",
47                         "pTPi [GeV/c]",
48                         "d0K [cm]   lower limit!",
49                         "d0Pi [cm]  lower limit!",
50                         "dist12 (cm)",
51                         "sigmavert (cm)",
52                         "dist prim-sec (cm)",
53                         "pM=Max{pT1,pT2,pT3} (GeV/c)",
54                         "cosThetaPoint",
55                         "Sum d0^2 (cm^2)",
56                         "dca cut (cm)"};
57   Bool_t isUpperCut[12]={kTRUE,
58                          kFALSE,
59                          kFALSE,
60                          kFALSE,
61                          kFALSE,
62                          kFALSE,
63                          kTRUE,
64                          kFALSE,
65                          kFALSE,
66                          kFALSE,
67                          kFALSE,
68                          kTRUE};
69   SetVarNames(nvars,varNames,isUpperCut);
70   Bool_t forOpt[12]={kFALSE,
71                      kFALSE,
72                      kFALSE,
73                      kFALSE,
74                      kFALSE,
75                      kFALSE,
76                      kTRUE,
77                      kTRUE,
78                      kTRUE,
79                      kTRUE,
80                      kTRUE,
81                      kFALSE};
82   SetVarsForOpt(5,forOpt);
83   Float_t limits[2]={0,999999999.};
84   SetPtBins(2,limits);
85   if(fPidHF)delete fPidHF;
86   fPidHF=new AliAODPidHF();
87   Double_t plim[2]={0.6,0.8};
88   Double_t nsigma[5]={2.,1.,2.,3.,0.};
89   
90   fPidHF->SetPLimit(plim);
91   fPidHF->SetAsym(kTRUE);
92   fPidHF->SetSigma(nsigma);
93   fPidHF->SetMatch(1);
94   fPidHF->SetTPC(1);
95   fPidHF->SetTOF(1);
96   fPidHF->SetITS(0);
97   fPidHF->SetTRD(0);
98   fPidHF->SetCompat(kTRUE);
99
100   
101 }
102
103
104
105
106
107
108
109
110 //--------------------------------------------------------------------------
111 AliRDHFCutsDplustoKpipi::AliRDHFCutsDplustoKpipi(const AliRDHFCutsDplustoKpipi &source) :
112   AliRDHFCuts(source),
113   fUseStrongPid(source.fUseStrongPid)
114
115 {
116   //
117   // Copy constructor
118   //
119
120 }
121 //--------------------------------------------------------------------------
122 AliRDHFCutsDplustoKpipi &AliRDHFCutsDplustoKpipi::operator=(const AliRDHFCutsDplustoKpipi &source)
123 {
124   //
125   // assignment operator
126   //
127   if(&source == this) return *this;
128
129   AliRDHFCuts::operator=(source);
130
131   return *this;
132 }
133 //
134
135
136 //---------------------------------------------------------------------------
137 void AliRDHFCutsDplustoKpipi::GetCutVarsForOpt(AliAODRecoDecayHF *d,Float_t *vars,Int_t nvars,Int_t *pdgdaughters) {
138   // 
139   // Fills in vars the values of the variables 
140   //
141
142
143   if(nvars!=fnVarsForOpt) {
144     printf("AliRDHFCutsDplustoKpipi::GetCutsVarsForOpt: wrong number of variables\n");
145     return;
146   }
147
148   AliAODRecoDecayHF3Prong *dd = (AliAODRecoDecayHF3Prong*)d;
149
150   Int_t iter=-1;
151   if(fVarsForOpt[0]){
152     iter++;
153     vars[iter]=dd->InvMassDplus();
154   }
155   if(fVarsForOpt[1]){
156     iter++;
157     for(Int_t iprong=0;iprong<3;iprong++){
158       if(TMath::Abs(pdgdaughters[iprong])==321) {
159         vars[iter]=dd->PtProng(iprong);
160       }
161     }
162   }
163   if(fVarsForOpt[2]){
164     iter++;
165     Float_t minPtDau=1000000.0;
166     for(Int_t iprong=0;iprong<3;iprong++){
167       if(TMath::Abs(pdgdaughters[iprong])==211) {
168         if(dd->PtProng(iprong)<minPtDau){
169           minPtDau=dd->PtProng(iprong);
170         }
171       }
172     }
173     vars[iter]=minPtDau;
174   }
175   if(fVarsForOpt[3]){
176     iter++;
177     for(Int_t iprong=0;iprong<3;iprong++){
178       if(TMath::Abs(pdgdaughters[iprong])==321) {
179         vars[iter]=dd->Getd0Prong(iprong);
180       }
181     }
182   }
183   if(fVarsForOpt[4]){
184     iter++;
185     Float_t minImpParDau=1000000.0;
186     for(Int_t iprong=0;iprong<3;iprong++){
187       if(TMath::Abs(pdgdaughters[iprong])==211) {
188         if(dd->Getd0Prong(iprong)<minImpParDau){
189           minImpParDau=dd->Getd0Prong(iprong);
190         }
191       }
192     }
193    vars[iter]=minImpParDau;
194   }
195   if(fVarsForOpt[5]){
196     iter++;
197     Float_t dist12 = dd->GetDist12toPrim();
198     Float_t dist23 = dd->GetDist23toPrim();
199     if(dist12<dist23)vars[iter]=dist12;
200     else vars[iter]=dist23;
201   }
202   if(fVarsForOpt[6]){
203     iter++;
204     vars[iter]=dd->GetSigmaVert();
205   }
206   if(fVarsForOpt[7]){
207     iter++;
208     vars[iter] = dd->DecayLength();
209   }
210   if(fVarsForOpt[8]){
211     iter++;
212     Float_t ptmax=0;
213     for(Int_t i=0;i<3;i++){
214       if(dd->PtProng(i)>ptmax)ptmax=dd->PtProng(i);
215     }
216     vars[iter]=ptmax;
217   }
218   if(fVarsForOpt[9]){
219     iter++;
220     vars[iter]=dd->CosPointingAngle();
221   }
222   if(fVarsForOpt[10]){
223     iter++;
224     vars[iter]=dd->Getd0Prong(0)*dd->Getd0Prong(0)+dd->Getd0Prong(1)*dd->Getd0Prong(1)+dd->Getd0Prong(2)*dd->Getd0Prong(2);
225   }
226   if(fVarsForOpt[11]){
227     iter++;
228     Float_t maxDCA=0;
229     for(Int_t iprong=0;iprong<3;iprong++){
230       if(dd->GetDCA(iprong)<maxDCA){
231         maxDCA=dd->GetDCA(iprong);
232       }
233     }
234     vars[iter]=maxDCA;
235   }
236   return;
237 }
238 //---------------------------------------------------------------------------
239 Bool_t AliRDHFCutsDplustoKpipi::IsInFiducialAcceptance(Double_t pt, Double_t y) const
240 {
241   //
242   // Checking if Dplus is in fiducial acceptance region 
243   //
244
245   if(pt > 5.) {
246     // applying cut for pt > 5 GeV
247     AliDebug(2,Form("pt of D+ = %f (> 5), cutting at |y| < 0.8",pt)); 
248     if (TMath::Abs(y) > 0.8) return kFALSE;
249     
250   } else {
251     // appliying smooth cut for pt < 5 GeV
252     Double_t maxFiducialY = -0.2/15*pt*pt+1.9/15*pt+0.5; 
253     Double_t minFiducialY = 0.2/15*pt*pt-1.9/15*pt-0.5;         
254     AliDebug(2,Form("pt of D+ = %f (< 5), cutting  according to the fiducial zone [%f, %f]\n",pt,minFiducialY,maxFiducialY)); 
255     if (y < minFiducialY || y > maxFiducialY) return kFALSE;    
256   }
257
258   return kTRUE;
259 }
260
261 //---------------------------------------------------------------------------
262 Int_t AliRDHFCutsDplustoKpipi::IsSelectedPID(AliAODRecoDecayHF *rd)
263 {
264   //
265   // PID selection, returns 3 if accepted, 0 if not accepted
266   // 
267   if(!fUsePID || !rd) return 3;
268   //if(fUsePID)printf("i am inside the pid \n");
269   Int_t nkaons=0;
270   Int_t nNotKaons=0;
271   Int_t sign= rd->GetCharge(); 
272   for(Int_t daught=0;daught<3;daught++){
273     AliAODTrack *track=(AliAODTrack*)rd->GetDaughter(daught);
274     Int_t isPion=fPidHF->MakeRawPid(track,AliPID::kPion);
275     Int_t isKaon=fPidHF->MakeRawPid(track,AliPID::kKaon);
276     Int_t isProton=fPidHF->MakeRawPid(track,AliPID::kProton);
277     
278     if(isProton>0 &&  isKaon<0  && isPion<0) return 0;
279     if(isKaon>0 && isPion<0) nkaons++;
280     if(isKaon<0) nNotKaons++;  
281     if(sign==track->Charge()){//pions
282       if(isPion<0)return 0;
283       if(rd->Pt()<2. && isPion<=0 && fUseStrongPid)return 0;
284     }
285       else{//kaons
286         if(isKaon<0)return 0;
287         if(rd->Pt()<2. && isKaon<=0 && fUseStrongPid)return 0;
288       }
289     
290       
291   }
292   
293   if(nkaons>1)return 0;
294   if(nNotKaons==3)return 0;
295   
296   return 3;   
297 }
298
299
300 //---------------------------------------------------------------------------
301 Int_t AliRDHFCutsDplustoKpipi::IsSelected(TObject* obj,Int_t selectionLevel, AliAODEvent* aod) {
302   //
303   // Apply selection, returns 3 if accepted, 0 if not accepted
304   //
305
306   if(!fCutsRD){
307     cout<<"Cut matrix not inizialized. Exit..."<<endl;
308     return 0;
309   }
310   //PrintAll();
311   AliAODRecoDecayHF3Prong* d=(AliAODRecoDecayHF3Prong*)obj; 
312
313   
314   if(!d){
315     cout<<"AliAODRecoDecayHF3Prong null"<<endl;
316     return 0;
317   }
318
319
320  
321   // selection on daughter tracks 
322   if(selectionLevel==AliRDHFCuts::kAll || 
323      selectionLevel==AliRDHFCuts::kTracks) {
324     if(!AreDaughtersSelected(d)) return 0;
325   }
326   
327   // PID selection
328   Int_t returnvaluePID=3;
329   Int_t returnvalueCuts=3;
330                                           
331
332   //if(selectionLevel==AliRDHFCuts::kAll || 
333   if(selectionLevel==AliRDHFCuts::kCandidate ||     
334      selectionLevel==AliRDHFCuts::kPID) {
335     returnvaluePID = IsSelectedPID(d);
336   }
337   if(returnvaluePID==0)return 0;
338   
339   
340   // selection on candidate
341   if(selectionLevel==AliRDHFCuts::kAll || 
342      selectionLevel==AliRDHFCuts::kCandidate) {
343     
344     //recalculate vertex w/o daughters
345     AliAODVertex *origownvtx=0x0;
346     AliAODVertex *recvtx=0x0;
347     if(fRemoveDaughtersFromPrimary) {
348       if(!aod) {
349         AliError("Can not remove daughters from vertex without AOD event");
350         return 0;
351       }
352       if(d->GetOwnPrimaryVtx()) origownvtx=new AliAODVertex(*d->GetOwnPrimaryVtx());
353       recvtx=d->RemoveDaughtersFromPrimaryVtx(aod);
354       if(!recvtx){
355         AliDebug(2,"Removal of daughter tracks failed");
356         //recvtx=d->GetPrimaryVtx();
357         if(origownvtx){
358           delete origownvtx;
359           origownvtx=NULL;
360         }
361         return 0;
362       }
363       //set recalculed primary vertex
364       d->SetOwnPrimaryVtx(recvtx);
365       delete recvtx; recvtx=NULL;
366     }
367
368     Double_t pt=d->Pt();
369     
370     Int_t ptbin=PtBin(pt);
371     if (ptbin==-1) {
372       if(origownvtx){
373         d->SetOwnPrimaryVtx(origownvtx);
374         delete origownvtx;
375         origownvtx=NULL;
376       }
377       else d->UnsetOwnPrimaryVtx();
378       return 0;
379     }
380     
381     Double_t mDplusPDG = TDatabasePDG::Instance()->GetParticle(411)->Mass();
382     Double_t mDplus=d->InvMassDplus();
383     if(TMath::Abs(mDplus-mDplusPDG)>fCutsRD[GetGlobalIndex(0,ptbin)])returnvalueCuts=0;
384     //    if(d->PtProng(1) < fCutsRD[GetGlobalIndex(3,ptbin)] || d->PtProng(0) < fCutsRD[GetGlobalIndex(4,ptbin)]) okD0 = 0;
385     if(TMath::Abs(d->PtProng(1)) < fCutsRD[GetGlobalIndex(1,ptbin)] || TMath::Abs(d->Getd0Prong(1))<fCutsRD[GetGlobalIndex(3,ptbin)])returnvalueCuts=0;//Kaon
386     if(TMath::Abs(d->PtProng(0)) < fCutsRD[GetGlobalIndex(2,ptbin)] || TMath::Abs(d->Getd0Prong(0))<fCutsRD[GetGlobalIndex(4,ptbin)])returnvalueCuts=0;//Pion1
387     if(TMath::Abs(d->PtProng(2)) < fCutsRD[GetGlobalIndex(2,ptbin)] || TMath::Abs(d->Getd0Prong(2))<fCutsRD[GetGlobalIndex(4,ptbin)])returnvalueCuts=0;//Pion2
388
389     
390
391     //2track cuts
392     if(d->GetDist12toPrim()<fCutsRD[GetGlobalIndex(5,ptbin)]|| d->GetDist23toPrim()<fCutsRD[GetGlobalIndex(5,ptbin)])returnvalueCuts=0;
393     if(d->Getd0Prong(0)*d->Getd0Prong(1)<0. && d->Getd0Prong(2)*d->Getd0Prong(1)<0.)returnvalueCuts=0;
394     
395     //sec vert
396     if(d->GetSigmaVert()>fCutsRD[GetGlobalIndex(6,ptbin)])returnvalueCuts=0;
397     
398     if(d->DecayLength()<fCutsRD[GetGlobalIndex(7,ptbin)])returnvalueCuts=0;
399     
400     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)])returnvalueCuts=0;
401     if(d->CosPointingAngle()< fCutsRD[GetGlobalIndex(9,ptbin)])returnvalueCuts=0;
402     Double_t sum2=d->Getd0Prong(0)*d->Getd0Prong(0)+d->Getd0Prong(1)*d->Getd0Prong(1)+d->Getd0Prong(2)*d->Getd0Prong(2);
403     if(sum2<fCutsRD[GetGlobalIndex(10,ptbin)])returnvalueCuts=0;
404     
405     //DCA
406     for(Int_t i=0;i<3;i++) if(d->GetDCA(i)>fCutsRD[GetGlobalIndex(11,ptbin)]) returnvalueCuts=0;
407     // unset recalculated primary vertex when not needed any more
408     if(origownvtx) {
409       d->SetOwnPrimaryVtx(origownvtx);
410       delete origownvtx;
411       origownvtx=NULL;
412     } else if(fRemoveDaughtersFromPrimary) {
413       d->UnsetOwnPrimaryVtx();
414       AliDebug(3,"delete new vertex\n");
415     }
416     
417     return returnvalueCuts;
418   }
419
420   return 3;
421 }
422
423
424
425
426 //---------------------------------------------------------------------------
427
428
429 void AliRDHFCutsDplustoKpipi::SetStandardCutsPP2010() {
430   //
431   //STANDARD CUTS USED FOR 2010 pp analysis 
432   //                                            
433   
434   SetName("DplustoKpipiCutsStandard");
435   SetTitle("Standard Cuts for D+ analysis");
436   
437   // PILE UP REJECTION
438   SetOptPileup(AliRDHFCuts::kRejectPileupEvent);
439
440   // EVENT CUTS
441   SetMinVtxContr(1);
442
443   AliESDtrackCuts* esdTrackCuts=new AliESDtrackCuts();
444   esdTrackCuts->SetRequireSigmaToVertex(kFALSE);
445   //default
446   esdTrackCuts->SetRequireTPCRefit(kTRUE);
447   esdTrackCuts->SetRequireITSRefit(kTRUE);
448   //esdTrackCuts->SetMinNClustersITS(4); // default is 5
449   esdTrackCuts->SetMinNClustersTPC(70);
450   esdTrackCuts->SetClusterRequirementITS(AliESDtrackCuts::kSPD,
451                                          AliESDtrackCuts::kAny); 
452   // default is kBoth, otherwise kAny
453   esdTrackCuts->SetMinDCAToVertexXY(0.);
454   esdTrackCuts->SetPtRange(0.3,1.e10);
455   
456   AddTrackCuts(esdTrackCuts);
457   
458  
459   const Int_t nptbins =13;
460   const Int_t nvars=12;
461   Float_t ptbins[nptbins+1];
462   ptbins[0]=0.;
463   ptbins[1]=1;  
464   ptbins[2]=2.;
465   ptbins[3]=3.;
466   ptbins[4]=4.;
467   ptbins[5]=5.;
468   ptbins[6]=6.;
469   ptbins[7]=8.;
470   ptbins[8]=10.;
471   ptbins[9]=12.;
472   ptbins[10]=14.;
473   ptbins[11]=16.;
474   ptbins[12]=24.;
475   ptbins[13]=99999.;
476       
477     
478   Float_t** anacutsval;
479   anacutsval=new Float_t*[nvars];
480   
481   for(Int_t ic=0;ic<nvars;ic++){anacutsval[ic]=new Float_t[nptbins];}
482   //Double_t cutsDplus[12]={0.2,0.4,0.4,0.,0.,0.01,0.06,0.02,0.,0.85,0.,10000000000.};
483   Int_t ic=0;
484   for(Int_t ipt=0;ipt<nptbins;ipt++){
485     anacutsval[ic][ipt]=0.2;
486   }
487   
488   ic=3;
489   for(Int_t ipt=0;ipt<nptbins;ipt++){
490     anacutsval[ic][ipt]=0.;
491   }
492   ic=4;
493   for(Int_t ipt=0;ipt<nptbins;ipt++){
494     anacutsval[ic][ipt]=0.;
495   }
496   ic=5;
497   for(Int_t ipt=0;ipt<nptbins;ipt++){
498     anacutsval[ic][ipt]=0.01;
499   }
500   //ic=6;
501   //for(Int_t ipt=0;ipt<nptbins;ipt++){
502   // anacutsval[ic][ipt]=0.06;
503   
504   ic=11;
505   for(Int_t ipt=0;ipt<nptbins;ipt++){
506     anacutsval[ic][ipt]=10000000000.;
507   }
508   
509   
510   anacutsval[1][0]=0.3;
511   anacutsval[1][1]=0.3;
512   anacutsval[1][2]=0.4;
513   
514   anacutsval[2][0]=0.3;
515   anacutsval[2][1]=0.3;
516   anacutsval[2][2]=0.4;
517   
518   
519   ic=1;
520   for(Int_t ipt=3;ipt<nptbins;ipt++){
521     anacutsval[ic][ipt]=0.4;
522   }
523   ic=2;
524   for(Int_t ipt=3;ipt<nptbins;ipt++){
525     anacutsval[ic][ipt]=0.4;
526   }
527   
528   anacutsval[6][0]=0.022100;
529   anacutsval[6][1]=0.022100;
530   anacutsval[6][2]=0.034;
531   anacutsval[6][3]=0.020667;
532   anacutsval[6][4]=0.020667;
533   anacutsval[6][5]=0.023333;
534   anacutsval[6][6]=0.023333;
535   anacutsval[6][7]=0.023333;
536   anacutsval[6][8]=0.023333;
537   anacutsval[6][9]=0.023333;
538   anacutsval[6][10]=0.06;
539   anacutsval[6][11]=0.06;
540   anacutsval[6][12]=0.06;
541   anacutsval[6][13]=0.06;
542   
543   
544   anacutsval[7][0]=0.08;
545   anacutsval[7][1]=0.08;
546   anacutsval[7][2]=0.09;  
547   anacutsval[7][3]=0.095;
548   anacutsval[7][4]=0.095;
549   anacutsval[7][5]=0.115;
550   anacutsval[7][6]=0.115;
551   anacutsval[7][7]=0.115;
552   anacutsval[7][8]=0.115;
553   anacutsval[7][9]=0.115;
554   anacutsval[7][10]=0.02;
555   anacutsval[7][11]=0.02;
556   anacutsval[7][12]=0.02;
557   anacutsval[7][13]=0.02;
558   
559   
560   anacutsval[8][0]=0.5;
561   anacutsval[8][1]=0.5;
562   anacutsval[8][2]=1.0;
563   anacutsval[8][3]=0.5;
564   anacutsval[8][4]=0.5;
565   anacutsval[8][5]=0.5;
566   anacutsval[8][6]=0.5;
567   anacutsval[8][7]=0.5;
568   anacutsval[8][8]=0.5;
569   anacutsval[8][9]=0.5;
570   anacutsval[8][10]=0.2;
571   anacutsval[8][11]=0.2;
572   anacutsval[8][12]=0.2;
573   anacutsval[8][13]=0.2;
574     
575     
576   anacutsval[9][0]=0.95;
577   anacutsval[9][1]=0.95;
578   anacutsval[9][2]=0.95; 
579   anacutsval[9][3]=0.95; 
580   anacutsval[9][4]= 0.95;
581   anacutsval[9][5]=0.92;
582   anacutsval[9][6]=0.92;
583   anacutsval[9][7]=0.92;
584   anacutsval[9][8]=0.92;
585   anacutsval[9][9]=0.90;
586   anacutsval[9][10]=0.90;
587   anacutsval[9][11]=0.90;
588   anacutsval[9][12]=0.90;
589   anacutsval[9][13]=0.90;
590   
591   anacutsval[10][0]=0.0055;
592   anacutsval[10][1]=0.0055;
593   anacutsval[10][2]= 0.0028;
594   anacutsval[10][3]=0.000883;
595   anacutsval[10][4]=0.000883;
596   anacutsval[10][5]=0.000883;
597   anacutsval[10][6]=0.000883;
598   anacutsval[10][7]=0.000883;
599   anacutsval[10][8]=0.000883;
600   anacutsval[10][9]=0.000883;
601   anacutsval[10][10]=0.0;
602   anacutsval[10][11]=0.0;
603   anacutsval[10][12]=0.0;
604   anacutsval[10][13]=0.0;
605   
606   
607   SetPtBins(nptbins+1,ptbins);
608   SetCuts(nvars,nptbins,anacutsval);
609   SetUsePID(kTRUE);
610   SetRemoveDaughtersFromPrim(kTRUE);
611   
612   PrintAll();
613
614   return;
615 }
616
617
618 void AliRDHFCutsDplustoKpipi::SetStandardCutsPbPb2010() {
619   //
620   //STANDARD CUTS USED FOR 2010 Pb Pb analysis.... not optimized yet 
621   //                                              
622   
623   SetName("DplustoKpipiCutsStandard");
624   SetTitle("Standard Cuts for D+ analysis in PbPb2010 run");
625   
626   // PILE UP REJECTION
627   //SetOptPileup(AliRDHFCuts::kRejectPileupEvent);
628
629   // EVENT CUTS
630   SetMinVtxContr(1);
631
632   
633   AliESDtrackCuts* esdTrackCuts=new AliESDtrackCuts();
634   esdTrackCuts->SetRequireSigmaToVertex(kFALSE);
635   //default
636   esdTrackCuts->SetRequireTPCRefit(kTRUE);
637   esdTrackCuts->SetRequireITSRefit(kTRUE);
638   //esdTrackCuts->SetMinNClustersITS(4); // default is 5
639   esdTrackCuts->SetMinNClustersTPC(70);
640   esdTrackCuts->SetClusterRequirementITS(AliESDtrackCuts::kSPD,
641                                          AliESDtrackCuts::kAny); 
642   // default is kBoth, otherwise kAny
643   esdTrackCuts->SetMinDCAToVertexXY(0.);
644   esdTrackCuts->SetPtRange(0.8,1.e10);
645     
646   AddTrackCuts(esdTrackCuts);
647     
648   const Int_t nptbins=10;
649   Float_t* ptbins;
650   ptbins=new Float_t[nptbins+1];
651   ptbins[0]=0.;
652   ptbins[1]=1.;
653   ptbins[2]=2.;
654   ptbins[3]=3.;
655   ptbins[4]=4.;
656   ptbins[5]=5.;
657   ptbins[6]=6.;
658   ptbins[7]=8.;
659   ptbins[8]=12.;
660   ptbins[9]=16.;
661   ptbins[10]=24.;
662   const Int_t nvars=12;
663     
664     
665     
666   Float_t** anacutsval;
667   anacutsval=new Float_t*[nvars];
668   
669   for(Int_t ic=0;ic<nvars;ic++){anacutsval[ic]=new Float_t[nptbins];}
670   //Double_t cutsDplus[12]={0.2,0.4,0.4,0.,0.,0.01,0.06,0.02,0.,0.85,0.,10000000000.};
671   Int_t ic=0;
672   for(Int_t ipt=0;ipt<nptbins;ipt++){
673     anacutsval[ic][ipt]=0.2;
674   }
675   
676   ic=3;
677   for(Int_t ipt=0;ipt<nptbins;ipt++){
678     anacutsval[ic][ipt]=0.;
679   }
680   ic=4;
681   for(Int_t ipt=0;ipt<nptbins;ipt++){
682     anacutsval[ic][ipt]=0.;
683   }
684   ic=5;
685   for(Int_t ipt=0;ipt<nptbins;ipt++){
686     anacutsval[ic][ipt]=0.01;
687   }
688   //ic=6;
689   //for(Int_t ipt=0;ipt<nptbins;ipt++){
690   // anacutsval[ic][ipt]=0.06;
691   
692   ic=11;
693   for(Int_t ipt=0;ipt<nptbins;ipt++){
694     anacutsval[ic][ipt]=10000000000.;
695   }
696   
697   
698   
699   
700   ic=1;
701   for(Int_t ipt=0;ipt<nptbins;ipt++){
702     anacutsval[ic][ipt]=0.8;
703   }
704   ic=2;
705   for(Int_t ipt=0;ipt<nptbins;ipt++){
706     anacutsval[ic][ipt]=0.8;
707   }
708   
709     
710   anacutsval[6][0]=0.022100;
711   anacutsval[6][1]=0.022100;
712   anacutsval[6][2]=0.034;
713   anacutsval[6][3]=0.020667;
714   anacutsval[6][4]=0.020667;
715   anacutsval[6][5]=0.023333;
716   anacutsval[6][6]=0.023333;
717   anacutsval[6][7]=0.023333;
718   anacutsval[6][8]=0.023333;
719   anacutsval[6][9]=0.023333;
720   
721   anacutsval[7][0]=0.08;
722   anacutsval[7][1]=0.08;
723   anacutsval[7][2]=0.09;  
724   anacutsval[7][3]=0.095;
725   anacutsval[7][4]=0.095;
726   anacutsval[7][5]=0.115;
727   anacutsval[7][6]=0.115;
728   anacutsval[7][7]=0.115;
729   anacutsval[7][8]=0.115;
730   anacutsval[7][9]=0.115;
731   
732   anacutsval[8][0]=0.5;
733   anacutsval[8][1]=0.5;
734   anacutsval[8][2]=1.0;
735   anacutsval[8][3]=0.5;
736   anacutsval[8][4]=0.5;
737   anacutsval[8][5]=0.5;
738   anacutsval[8][6]=0.5;
739   anacutsval[8][7]=0.5;
740   anacutsval[8][8]=0.5;
741   anacutsval[8][9]=0.5;
742   
743   anacutsval[9][0]=0.995;
744   anacutsval[9][1]=0.995;
745   anacutsval[9][2]=0.997; 
746   anacutsval[9][3]=0.989; 
747   anacutsval[9][4]= 0.989;
748   anacutsval[9][5]=0.997;
749   anacutsval[9][6]=0.997;
750   anacutsval[9][7]=0.997;
751   anacutsval[9][8]=0.997;
752   anacutsval[9][9]=0.997;
753  
754   anacutsval[10][0]=0.0055;
755   anacutsval[10][1]=0.0055;
756   anacutsval[10][2]= 0.0028;
757   anacutsval[10][3]=0.000883;
758   anacutsval[10][4]=0.000883;
759   anacutsval[10][5]=0.000883;
760   anacutsval[10][6]=0.000883;
761   anacutsval[10][7]=0.000883;
762   anacutsval[10][8]=0.000883;
763   anacutsval[10][9]=0.000883;
764     
765     
766   SetPtBins(nptbins+1,ptbins);
767   SetCuts(nvars,nptbins,anacutsval);
768   SetUsePID(kTRUE);
769   SetRemoveDaughtersFromPrim(kFALSE);
770     
771   PrintAll();
772
773   return;
774 }