]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - PWG3/vertexingHF/AliRDHFCutsDplustoKpipi.cxx
introduce the option to analyze with PROOF, plus cosmetics
[u/mrichter/AliRoot.git] / PWG3 / vertexingHF / AliRDHFCutsDplustoKpipi.cxx
index 9fcdeace8fbca5ad2048da116176f442e47c8864..50687d49cfd6bb85d4f86448e811802f9eb26464 100644 (file)
@@ -13,6 +13,8 @@
  * provided "as is" without express or implied warranty.                  *
  **************************************************************************/
 
+/* $Id$ */
+
 /////////////////////////////////////////////////////////////
 //
 // Class for cuts on AOD reconstructed D+->Kpipi
@@ -35,14 +37,16 @@ ClassImp(AliRDHFCutsDplustoKpipi)
 //--------------------------------------------------------------------------
 AliRDHFCutsDplustoKpipi::AliRDHFCutsDplustoKpipi(const char* name) : 
 AliRDHFCuts(name),
-fUseStrongPid(kFALSE)
+  fUseStrongPid(0),
+  fMaxPtStrongPid(0.),
+  fUseImpParProdCorrCut(kFALSE)
 {
   //
   // Default Constructor
   //
-  Int_t nvars=12;
+  Int_t nvars=14;
   SetNVars(nvars);
-  TString varNames[12]={"inv. mass [GeV]",
+  TString varNames[14]={"inv. mass [GeV]",
                        "pTK [GeV/c]",
                        "pTPi [GeV/c]",
                        "d0K [cm]   lower limit!",
@@ -53,8 +57,10 @@ fUseStrongPid(kFALSE)
                        "pM=Max{pT1,pT2,pT3} (GeV/c)",
                        "cosThetaPoint",
                        "Sum d0^2 (cm^2)",
-                       "dca cut (cm)"};
-  Bool_t isUpperCut[12]={kTRUE,
+                       "dca cut (cm)",
+                       "dec len XY (cm)",
+                       "cosThetaPointXY"};
+  Bool_t isUpperCut[14]={kTRUE,
                         kFALSE,
                         kFALSE,
                         kFALSE,
@@ -65,9 +71,11 @@ fUseStrongPid(kFALSE)
                         kFALSE,
                         kFALSE,
                         kFALSE,
-                        kTRUE};
+                        kTRUE,
+                        kFALSE,
+                        kFALSE};
   SetVarNames(nvars,varNames,isUpperCut);
-  Bool_t forOpt[12]={kFALSE,
+  Bool_t forOpt[14]={kFALSE,
                     kFALSE,
                     kFALSE,
                     kFALSE,
@@ -78,8 +86,10 @@ fUseStrongPid(kFALSE)
                     kTRUE,
                     kTRUE,
                     kTRUE,
-                    kFALSE};
-  SetVarsForOpt(5,forOpt);
+                    kFALSE,
+                    kTRUE,
+                    kTRUE};
+  SetVarsForOpt(7,forOpt);
   Float_t limits[2]={0,999999999.};
   SetPtBins(2,limits);
   if(fPidHF)delete fPidHF;
@@ -110,8 +120,9 @@ fUseStrongPid(kFALSE)
 //--------------------------------------------------------------------------
 AliRDHFCutsDplustoKpipi::AliRDHFCutsDplustoKpipi(const AliRDHFCutsDplustoKpipi &source) :
   AliRDHFCuts(source),
-  fUseStrongPid(source.fUseStrongPid)
-
+  fUseStrongPid(source.fUseStrongPid),
+  fMaxPtStrongPid(source.fMaxPtStrongPid),
+  fUseImpParProdCorrCut(source.fUseImpParProdCorrCut)
 {
   //
   // Copy constructor
@@ -134,7 +145,7 @@ AliRDHFCutsDplustoKpipi &AliRDHFCutsDplustoKpipi::operator=(const AliRDHFCutsDpl
 
 
 //---------------------------------------------------------------------------
-void AliRDHFCutsDplustoKpipi::GetCutVarsForOpt(AliAODRecoDecayHF *d,Float_t *vars,Int_t nvars,Int_t *pdgdaughters) {
+void AliRDHFCutsDplustoKpipi::GetCutVarsForOpt(AliAODRecoDecayHF *d,Float_t *vars,Int_t nvars,Int_t *pdgdaughters,AliAODEvent *aod) {
   // 
   // Fills in vars the values of the variables 
   //
@@ -146,6 +157,18 @@ void AliRDHFCutsDplustoKpipi::GetCutVarsForOpt(AliAODRecoDecayHF *d,Float_t *var
   }
 
   AliAODRecoDecayHF3Prong *dd = (AliAODRecoDecayHF3Prong*)d;
+  //recalculate vertex w/o daughters
+  Bool_t cleanvtx=kFALSE;
+  AliAODVertex *origownvtx=0x0;
+  if(fRemoveDaughtersFromPrimary) {
+    if(dd->GetOwnPrimaryVtx()) origownvtx=new AliAODVertex(*dd->GetOwnPrimaryVtx());
+    cleanvtx=kTRUE;
+    if(!RecalcOwnPrimaryVtx(dd,aod)) {
+      CleanOwnPrimaryVtx(dd,aod,origownvtx);
+      cleanvtx=kFALSE;
+    }
+  }
 
   Int_t iter=-1;
   if(fVarsForOpt[0]){
@@ -201,7 +224,7 @@ void AliRDHFCutsDplustoKpipi::GetCutVarsForOpt(AliAODRecoDecayHF *d,Float_t *var
   }
   if(fVarsForOpt[6]){
     iter++;
-    vars[iter]=dd->GetSigmaVert();
+    vars[iter]=dd->GetSigmaVert(aod);
   }
   if(fVarsForOpt[7]){
     iter++;
@@ -233,6 +256,17 @@ void AliRDHFCutsDplustoKpipi::GetCutVarsForOpt(AliAODRecoDecayHF *d,Float_t *var
     }
     vars[iter]=maxDCA;
   }
+  if(fVarsForOpt[12]){
+    iter++;
+    vars[iter]=dd->NormalizedDecayLengthXY()*dd->P()/dd->Pt();
+  }
+  if(fVarsForOpt[13]){
+    iter++;
+    vars[iter]=dd->CosPointingAngleXY();
+  }
+
+  if(cleanvtx)CleanOwnPrimaryVtx(dd,aod,origownvtx);
+
   return;
 }
 //---------------------------------------------------------------------------
@@ -280,14 +314,12 @@ Int_t AliRDHFCutsDplustoKpipi::IsSelectedPID(AliAODRecoDecayHF *rd)
     if(isKaon<0) nNotKaons++;  
     if(sign==track->Charge()){//pions
       if(isPion<0)return 0;
-      if(rd->Pt()<2. && isPion<=0 && fUseStrongPid)return 0;
+      if(rd->Pt()<fMaxPtStrongPid && isPion<=0 && fUseStrongPid>1)return 0;
+    }
+    else{//kaons
+      if(isKaon<0)return 0;
+       if(rd->Pt()<fMaxPtStrongPid && isKaon<=0 && fUseStrongPid>0)return 0;
     }
-      else{//kaons
-       if(isKaon<0)return 0;
-       if(rd->Pt()<2. && isKaon<=0 && fUseStrongPid)return 0;
-      }
-    
-      
   }
   
   if(nkaons>1)return 0;
@@ -303,6 +335,10 @@ Int_t AliRDHFCutsDplustoKpipi::IsSelected(TObject* obj,Int_t selectionLevel, Ali
   // Apply selection, returns 3 if accepted, 0 if not accepted
   //
 
+
+  fIsSelectedCuts=0;
+  fIsSelectedPID=0;
+
   if(!fCutsRD){
     cout<<"Cut matrix not inizialized. Exit..."<<endl;
     return 0;
@@ -316,26 +352,17 @@ Int_t AliRDHFCutsDplustoKpipi::IsSelected(TObject* obj,Int_t selectionLevel, Ali
     return 0;
   }
 
+  if(fKeepSignalMC) if(IsSignalMC(d,aod,411)) return 3;
 
-  // selection on daughter tracks 
-  if(selectionLevel==AliRDHFCuts::kAll || 
-     selectionLevel==AliRDHFCuts::kTracks) {
-    if(!AreDaughtersSelected(d)) return 0;
-  }
-  
   // PID selection
   Int_t returnvaluePID=3;
   Int_t returnvalueCuts=3;
-                                          
 
-  //if(selectionLevel==AliRDHFCuts::kAll || 
-  if(selectionLevel==AliRDHFCuts::kCandidate ||     
-     selectionLevel==AliRDHFCuts::kPID) {
-    returnvaluePID = IsSelectedPID(d);
-  }
-  if(returnvaluePID==0)return 0;
-  
+  Double_t pt=d->Pt();
+  if(pt<fMinPtCand) return 0;
+  if(pt>fMaxPtCand) return 0;
+
+  if(d->HasBadDaughters()) return 0;
   
   // selection on candidate
   if(selectionLevel==AliRDHFCuts::kAll || 
@@ -343,79 +370,82 @@ Int_t AliRDHFCutsDplustoKpipi::IsSelected(TObject* obj,Int_t selectionLevel, Ali
     
     //recalculate vertex w/o daughters
     AliAODVertex *origownvtx=0x0;
-    AliAODVertex *recvtx=0x0;
     if(fRemoveDaughtersFromPrimary) {
-      if(!aod) {
-       AliError("Can not remove daughters from vertex without AOD event");
-       return 0;
-      }
       if(d->GetOwnPrimaryVtx()) origownvtx=new AliAODVertex(*d->GetOwnPrimaryVtx());
-      recvtx=d->RemoveDaughtersFromPrimaryVtx(aod);
-      if(!recvtx){
-       AliDebug(2,"Removal of daughter tracks failed");
-       //recvtx=d->GetPrimaryVtx();
-       if(origownvtx){
-         delete origownvtx;
-         origownvtx=NULL;
-       }
+      if(!RecalcOwnPrimaryVtx(d,aod)) {
+       CleanOwnPrimaryVtx(d,aod,origownvtx);
        return 0;
       }
-      //set recalculed primary vertex
-      d->SetOwnPrimaryVtx(recvtx);
-      delete recvtx; recvtx=NULL;
     }
 
-    Double_t pt=d->Pt();
-    
     Int_t ptbin=PtBin(pt);
     if (ptbin==-1) {
-      if(origownvtx){
-       d->SetOwnPrimaryVtx(origownvtx);
-       delete origownvtx;
-       origownvtx=NULL;
-      }
-      else d->UnsetOwnPrimaryVtx();
+      CleanOwnPrimaryVtx(d,aod,origownvtx);
       return 0;
     }
     
     Double_t mDplusPDG = TDatabasePDG::Instance()->GetParticle(411)->Mass();
     Double_t mDplus=d->InvMassDplus();
-    if(TMath::Abs(mDplus-mDplusPDG)>fCutsRD[GetGlobalIndex(0,ptbin)])returnvalueCuts=0;
-    //    if(d->PtProng(1) < fCutsRD[GetGlobalIndex(3,ptbin)] || d->PtProng(0) < fCutsRD[GetGlobalIndex(4,ptbin)]) okD0 = 0;
-    if(TMath::Abs(d->PtProng(1)) < fCutsRD[GetGlobalIndex(1,ptbin)] || TMath::Abs(d->Getd0Prong(1))<fCutsRD[GetGlobalIndex(3,ptbin)])returnvalueCuts=0;//Kaon
-    if(TMath::Abs(d->PtProng(0)) < fCutsRD[GetGlobalIndex(2,ptbin)] || TMath::Abs(d->Getd0Prong(0))<fCutsRD[GetGlobalIndex(4,ptbin)])returnvalueCuts=0;//Pion1
-    if(TMath::Abs(d->PtProng(2)) < fCutsRD[GetGlobalIndex(2,ptbin)] || TMath::Abs(d->Getd0Prong(2))<fCutsRD[GetGlobalIndex(4,ptbin)])returnvalueCuts=0;//Pion2
-
-    
+    if(TMath::Abs(mDplus-mDplusPDG)>fCutsRD[GetGlobalIndex(0,ptbin)]) {CleanOwnPrimaryVtx(d,aod,origownvtx); return 0;}
 
     //2track cuts
-    if(d->GetDist12toPrim()<fCutsRD[GetGlobalIndex(5,ptbin)]|| d->GetDist23toPrim()<fCutsRD[GetGlobalIndex(5,ptbin)])returnvalueCuts=0;
-    if(d->Getd0Prong(0)*d->Getd0Prong(1)<0. && d->Getd0Prong(2)*d->Getd0Prong(1)<0.)returnvalueCuts=0;
-    
-    //sec vert
-    if(d->GetSigmaVert()>fCutsRD[GetGlobalIndex(6,ptbin)])returnvalueCuts=0;
-    
-    if(d->DecayLength()<fCutsRD[GetGlobalIndex(7,ptbin)])returnvalueCuts=0;
-    
-    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;
-    if(d->CosPointingAngle()< fCutsRD[GetGlobalIndex(9,ptbin)])returnvalueCuts=0;
+    if(d->GetDist12toPrim()<fCutsRD[GetGlobalIndex(5,ptbin)]|| d->GetDist23toPrim()<fCutsRD[GetGlobalIndex(5,ptbin)]) {CleanOwnPrimaryVtx(d,aod,origownvtx); return 0;}
+
     Double_t sum2=d->Getd0Prong(0)*d->Getd0Prong(0)+d->Getd0Prong(1)*d->Getd0Prong(1)+d->Getd0Prong(2)*d->Getd0Prong(2);
-    if(sum2<fCutsRD[GetGlobalIndex(10,ptbin)])returnvalueCuts=0;
-    
+    if(sum2<fCutsRD[GetGlobalIndex(10,ptbin)]) {CleanOwnPrimaryVtx(d,aod,origownvtx); return 0;}
+
+    if(fUseImpParProdCorrCut){
+      if(d->Getd0Prong(0)*d->Getd0Prong(1)<0. && d->Getd0Prong(2)*d->Getd0Prong(1)<0.) {CleanOwnPrimaryVtx(d,aod,origownvtx); return 0;}
+    }
+
+
     //DCA
-    for(Int_t i=0;i<3;i++) if(d->GetDCA(i)>fCutsRD[GetGlobalIndex(11,ptbin)]) returnvalueCuts=0;
+    for(Int_t i=0;i<3;i++) if(d->GetDCA(i)>fCutsRD[GetGlobalIndex(11,ptbin)]) {CleanOwnPrimaryVtx(d,aod,origownvtx); return 0;}
+
+    if(d->Pt2Prong(1) < fCutsRD[GetGlobalIndex(1,ptbin)]*fCutsRD[GetGlobalIndex(1,ptbin)] || TMath::Abs(d->Getd0Prong(1))<fCutsRD[GetGlobalIndex(3,ptbin)]) {CleanOwnPrimaryVtx(d,aod,origownvtx); return 0;}//Kaon
+
+    if(d->Pt2Prong(0) < fCutsRD[GetGlobalIndex(2,ptbin)]*fCutsRD[GetGlobalIndex(2,ptbin)] || TMath::Abs(d->Getd0Prong(0))<fCutsRD[GetGlobalIndex(4,ptbin)]) {CleanOwnPrimaryVtx(d,aod,origownvtx); return 0;}//Pion1
+
+    if(d->Pt2Prong(2) < fCutsRD[GetGlobalIndex(2,ptbin)]*fCutsRD[GetGlobalIndex(2,ptbin)] || TMath::Abs(d->Getd0Prong(2))<fCutsRD[GetGlobalIndex(4,ptbin)]) {CleanOwnPrimaryVtx(d,aod,origownvtx); return 0;}//Pion2
+    
+    if(d->Pt2Prong(0)<fCutsRD[GetGlobalIndex(8,ptbin)]*fCutsRD[GetGlobalIndex(8,ptbin)] && d->Pt2Prong(1)<fCutsRD[GetGlobalIndex(8,ptbin)]*fCutsRD[GetGlobalIndex(8,ptbin)] && d->Pt2Prong(2)<fCutsRD[GetGlobalIndex(8,ptbin)]*fCutsRD[GetGlobalIndex(8,ptbin)]) {CleanOwnPrimaryVtx(d,aod,origownvtx); return 0;}
+
+    if(d->DecayLength2()<fCutsRD[GetGlobalIndex(7,ptbin)]*fCutsRD[GetGlobalIndex(7,ptbin)]) {CleanOwnPrimaryVtx(d,aod,origownvtx); return 0;}
+
+    if(d->CosPointingAngle()< fCutsRD[GetGlobalIndex(9,ptbin)]) {CleanOwnPrimaryVtx(d,aod,origownvtx); return 0;}
+
+    if(d->NormalizedDecayLengthXY()*d->P()/pt<fCutsRD[GetGlobalIndex(12,ptbin)]){CleanOwnPrimaryVtx(d,aod,origownvtx); return 0;}
+
+    if(d->CosPointingAngleXY()<fCutsRD[GetGlobalIndex(13,ptbin)]){CleanOwnPrimaryVtx(d,aod,origownvtx); return 0;}
+
+    //sec vert
+    Double_t sigmavert=d->GetSigmaVert(aod);
+    if(sigmavert>fCutsRD[GetGlobalIndex(6,ptbin)]) {CleanOwnPrimaryVtx(d,aod,origownvtx); return 0;}
+
     // unset recalculated primary vertex when not needed any more
-    if(origownvtx) {
-      d->SetOwnPrimaryVtx(origownvtx);
-      delete origownvtx;
-      origownvtx=NULL;
-    } else if(fRemoveDaughtersFromPrimary) {
-      d->UnsetOwnPrimaryVtx();
-      AliDebug(3,"delete new vertex\n");
-    }
+    CleanOwnPrimaryVtx(d,aod,origownvtx);
     
-    return returnvalueCuts;
+    fIsSelectedCuts=returnvalueCuts;
+
+    //if(!returnvalueCuts) return 0; // returnvalueCuts cannot be 0 here
   }
+  
+  if(selectionLevel==AliRDHFCuts::kAll || 
+     selectionLevel==AliRDHFCuts::kCandidate ||     
+     selectionLevel==AliRDHFCuts::kPID) {
+    returnvaluePID = IsSelectedPID(d);
+    fIsSelectedPID=returnvaluePID;
+  }
+  if(returnvaluePID==0)return 0;
+
+  // selection on daughter tracks 
+  if(selectionLevel==AliRDHFCuts::kAll || 
+     selectionLevel==AliRDHFCuts::kTracks) {
+    if(!AreDaughtersSelected(d)) return 0;
+  }
+  
+
 
   return 3;
 }
@@ -457,7 +487,7 @@ void AliRDHFCutsDplustoKpipi::SetStandardCutsPP2010() {
   
  
   const Int_t nptbins =13;
-  const Int_t nvars=12;
+  const Int_t nvars=14;
   Float_t ptbins[nptbins+1];
   ptbins[0]=0.;
   ptbins[1]=1; 
@@ -479,50 +509,27 @@ void AliRDHFCutsDplustoKpipi::SetStandardCutsPP2010() {
   anacutsval=new Float_t*[nvars];
   
   for(Int_t ic=0;ic<nvars;ic++){anacutsval[ic]=new Float_t[nptbins];}
+
   //Double_t cutsDplus[12]={0.2,0.4,0.4,0.,0.,0.01,0.06,0.02,0.,0.85,0.,10000000000.};
-  Int_t ic=0;
-  for(Int_t ipt=0;ipt<nptbins;ipt++){
-    anacutsval[ic][ipt]=0.2;
-  }
-  
-  ic=3;
   for(Int_t ipt=0;ipt<nptbins;ipt++){
-    anacutsval[ic][ipt]=0.;
+    anacutsval[0][ipt]=0.2;
+    anacutsval[3][ipt]=0.;
+    anacutsval[4][ipt]=0.;
+    anacutsval[5][ipt]=0.01;
+    anacutsval[11][ipt]=10000000000.;
+    anacutsval[12][ipt]=0.;
+    anacutsval[13][ipt]=0.;
   }
-  ic=4;
-  for(Int_t ipt=0;ipt<nptbins;ipt++){
-    anacutsval[ic][ipt]=0.;
-  }
-  ic=5;
-  for(Int_t ipt=0;ipt<nptbins;ipt++){
-    anacutsval[ic][ipt]=0.01;
-  }
-  //ic=6;
-  //for(Int_t ipt=0;ipt<nptbins;ipt++){
-  // anacutsval[ic][ipt]=0.06;
-  
-  ic=11;
-  for(Int_t ipt=0;ipt<nptbins;ipt++){
-    anacutsval[ic][ipt]=10000000000.;
-  }
-  
-  
+
   anacutsval[1][0]=0.3;
   anacutsval[1][1]=0.3;
-  anacutsval[1][2]=0.4;
-  
+  anacutsval[1][2]=0.4; 
   anacutsval[2][0]=0.3;
   anacutsval[2][1]=0.3;
-  anacutsval[2][2]=0.4;
-  
-  
-  ic=1;
-  for(Int_t ipt=3;ipt<nptbins;ipt++){
-    anacutsval[ic][ipt]=0.4;
-  }
-  ic=2;
+  anacutsval[2][2]=0.4;  
   for(Int_t ipt=3;ipt<nptbins;ipt++){
-    anacutsval[ic][ipt]=0.4;
+    anacutsval[1][ipt]=0.4;
+    anacutsval[2][ipt]=0.4;
   }
   
   anacutsval[6][0]=0.022100;
@@ -531,47 +538,20 @@ void AliRDHFCutsDplustoKpipi::SetStandardCutsPP2010() {
   anacutsval[6][3]=0.020667;
   anacutsval[6][4]=0.020667;
   anacutsval[6][5]=0.023333;
-  anacutsval[6][6]=0.023333;
-  anacutsval[6][7]=0.023333;
-  anacutsval[6][8]=0.023333;
-  anacutsval[6][9]=0.023333;
-  anacutsval[6][10]=0.06;
-  anacutsval[6][11]=0.06;
-  anacutsval[6][12]=0.06;
-  anacutsval[6][13]=0.06;
-  
+    
   
   anacutsval[7][0]=0.08;
   anacutsval[7][1]=0.08;
   anacutsval[7][2]=0.09;  
   anacutsval[7][3]=0.095;
   anacutsval[7][4]=0.095;
-  anacutsval[7][5]=0.115;
-  anacutsval[7][6]=0.115;
-  anacutsval[7][7]=0.115;
-  anacutsval[7][8]=0.115;
-  anacutsval[7][9]=0.115;
-  anacutsval[7][10]=0.02;
-  anacutsval[7][11]=0.02;
-  anacutsval[7][12]=0.02;
-  anacutsval[7][13]=0.02;
-  
-  
+   
   anacutsval[8][0]=0.5;
   anacutsval[8][1]=0.5;
   anacutsval[8][2]=1.0;
   anacutsval[8][3]=0.5;
   anacutsval[8][4]=0.5;
-  anacutsval[8][5]=0.5;
-  anacutsval[8][6]=0.5;
-  anacutsval[8][7]=0.5;
-  anacutsval[8][8]=0.5;
-  anacutsval[8][9]=0.5;
-  anacutsval[8][10]=0.2;
-  anacutsval[8][11]=0.2;
-  anacutsval[8][12]=0.2;
-  anacutsval[8][13]=0.2;
-    
+     
     
   anacutsval[9][0]=0.95;
   anacutsval[9][1]=0.95;
@@ -586,24 +566,23 @@ void AliRDHFCutsDplustoKpipi::SetStandardCutsPP2010() {
   anacutsval[9][10]=0.90;
   anacutsval[9][11]=0.90;
   anacutsval[9][12]=0.90;
-  anacutsval[9][13]=0.90;
   
   anacutsval[10][0]=0.0055;
   anacutsval[10][1]=0.0055;
   anacutsval[10][2]= 0.0028;
   anacutsval[10][3]=0.000883;
   anacutsval[10][4]=0.000883;
-  anacutsval[10][5]=0.000883;
-  anacutsval[10][6]=0.000883;
-  anacutsval[10][7]=0.000883;
-  anacutsval[10][8]=0.000883;
-  anacutsval[10][9]=0.000883;
-  anacutsval[10][10]=0.0;
-  anacutsval[10][11]=0.0;
-  anacutsval[10][12]=0.0;
-  anacutsval[10][13]=0.0;
-  
+
   
+  for(Int_t ipt=5;ipt<nptbins;ipt++){
+    anacutsval[6][ipt]=0.02333;
+    anacutsval[7][ipt]=0.115;
+    anacutsval[8][ipt]=0.5;
+    anacutsval[10][ipt]=0.000883;
+    }   
+
+
+  SetGlobalIndex(nvars,nptbins);
   SetPtBins(nptbins+1,ptbins);
   SetCuts(nvars,nptbins,anacutsval);
   SetUsePID(kTRUE);
@@ -611,6 +590,10 @@ void AliRDHFCutsDplustoKpipi::SetStandardCutsPP2010() {
   
   PrintAll();
 
+  for(Int_t iic=0;iic<nvars;iic++){delete [] anacutsval[iic];}
+  delete [] anacutsval;
+  anacutsval=NULL;
+
   return;
 }
 
@@ -648,6 +631,7 @@ void AliRDHFCutsDplustoKpipi::SetStandardCutsPbPb2010() {
   const Int_t nptbins=10;
   Float_t* ptbins;
   ptbins=new Float_t[nptbins+1];
+
   ptbins[0]=0.;
   ptbins[1]=1.;
   ptbins[2]=2.;
@@ -659,116 +643,93 @@ void AliRDHFCutsDplustoKpipi::SetStandardCutsPbPb2010() {
   ptbins[8]=12.;
   ptbins[9]=16.;
   ptbins[10]=24.;
-  const Int_t nvars=12;
-    
-    
+  const Int_t nvars=14;
     
   Float_t** anacutsval;
   anacutsval=new Float_t*[nvars];
   
   for(Int_t ic=0;ic<nvars;ic++){anacutsval[ic]=new Float_t[nptbins];}
   //Double_t cutsDplus[12]={0.2,0.4,0.4,0.,0.,0.01,0.06,0.02,0.,0.85,0.,10000000000.};
-  Int_t ic=0;
-  for(Int_t ipt=0;ipt<nptbins;ipt++){
-    anacutsval[ic][ipt]=0.2;
-  }
-  
-  ic=3;
-  for(Int_t ipt=0;ipt<nptbins;ipt++){
-    anacutsval[ic][ipt]=0.;
-  }
-  ic=4;
-  for(Int_t ipt=0;ipt<nptbins;ipt++){
-    anacutsval[ic][ipt]=0.;
-  }
-  ic=5;
-  for(Int_t ipt=0;ipt<nptbins;ipt++){
-    anacutsval[ic][ipt]=0.01;
-  }
-  //ic=6;
-  //for(Int_t ipt=0;ipt<nptbins;ipt++){
-  // anacutsval[ic][ipt]=0.06;
-  
-  ic=11;
-  for(Int_t ipt=0;ipt<nptbins;ipt++){
-    anacutsval[ic][ipt]=10000000000.;
-  }
-  
-  
-  
-  
-  ic=1;
-  for(Int_t ipt=0;ipt<nptbins;ipt++){
-    anacutsval[ic][ipt]=0.8;
-  }
-  ic=2;
+
   for(Int_t ipt=0;ipt<nptbins;ipt++){
-    anacutsval[ic][ipt]=0.8;
-  }
-  
-    
+    anacutsval[0][ipt]=0.2;
+    anacutsval[1][ipt]=0.8;
+    anacutsval[2][ipt]=0.8;
+    anacutsval[3][ipt]=0.;
+    anacutsval[4][ipt]=0.;
+    anacutsval[5][ipt]=0.01;
+    anacutsval[11][ipt]=10000000000.;
+    anacutsval[12][ipt]=0.;
+    anacutsval[13][ipt]=0.;
+  }
+  anacutsval[1][5]=0.9;
+
   anacutsval[6][0]=0.022100;
   anacutsval[6][1]=0.022100;
   anacutsval[6][2]=0.034;
   anacutsval[6][3]=0.020667;
   anacutsval[6][4]=0.020667;
   anacutsval[6][5]=0.023333;
-  anacutsval[6][6]=0.023333;
-  anacutsval[6][7]=0.023333;
-  anacutsval[6][8]=0.023333;
-  anacutsval[6][9]=0.023333;
   
   anacutsval[7][0]=0.08;
   anacutsval[7][1]=0.08;
-  anacutsval[7][2]=0.09;  
-  anacutsval[7][3]=0.095;
-  anacutsval[7][4]=0.095;
-  anacutsval[7][5]=0.115;
-  anacutsval[7][6]=0.115;
-  anacutsval[7][7]=0.115;
-  anacutsval[7][8]=0.115;
-  anacutsval[7][9]=0.115;
-  
-  anacutsval[8][0]=0.5;
-  anacutsval[8][1]=0.5;
-  anacutsval[8][2]=1.0;
+  anacutsval[7][2]=0.17;  
+  anacutsval[7][3]=0.14;
+  anacutsval[7][4]=0.14;
+  anacutsval[7][5]=0.19;
+  
+  anacutsval[8][0]=0.8;
+  anacutsval[8][1]=0.8;
+  anacutsval[8][2]=1.1;
   anacutsval[8][3]=0.5;
   anacutsval[8][4]=0.5;
   anacutsval[8][5]=0.5;
-  anacutsval[8][6]=0.5;
-  anacutsval[8][7]=0.5;
-  anacutsval[8][8]=0.5;
-  anacutsval[8][9]=0.5;
   
   anacutsval[9][0]=0.995;
   anacutsval[9][1]=0.995;
   anacutsval[9][2]=0.997; 
-  anacutsval[9][3]=0.989; 
-  anacutsval[9][4]= 0.989;
-  anacutsval[9][5]=0.997;
-  anacutsval[9][6]=0.997;
-  anacutsval[9][7]=0.997;
-  anacutsval[9][8]=0.997;
-  anacutsval[9][9]=0.997;
+  anacutsval[9][3]=0.998; 
+  anacutsval[9][4]=0.998;
+  anacutsval[9][5]=0.995;
+  
   anacutsval[10][0]=0.0055;
   anacutsval[10][1]=0.0055;
   anacutsval[10][2]= 0.0028;
   anacutsval[10][3]=0.000883;
   anacutsval[10][4]=0.000883;
   anacutsval[10][5]=0.000883;
-  anacutsval[10][6]=0.000883;
-  anacutsval[10][7]=0.000883;
-  anacutsval[10][8]=0.000883;
-  anacutsval[10][9]=0.000883;
-    
-    
+
+  anacutsval[12][5]=12.;
+  anacutsval[13][5]=0.998571;
+  anacutsval[12][6]=10.;
+  anacutsval[13][6]=0.997143;
+
+  for(Int_t ipt=6;ipt<nptbins;ipt++){
+    anacutsval[6][ipt]=0.02333;
+    anacutsval[7][ipt]=0.19;
+    anacutsval[8][ipt]=2.0;
+    anacutsval[9][ipt]=0.997;
+    anacutsval[10][ipt]=0.000883;
+  }   
+  anacutsval[7][6]=0.14;
+  anacutsval[9][6]=0.995;
+
   SetPtBins(nptbins+1,ptbins);
   SetCuts(nvars,nptbins,anacutsval);
   SetUsePID(kTRUE);
+  SetMinCentrality(1E-10);
+  SetMaxCentrality(20.);
+  SetUseCentrality(AliRDHFCuts::kCentV0M);
   SetRemoveDaughtersFromPrim(kFALSE);
     
   PrintAll();
 
+  for(Int_t iic=0;iic<nvars;iic++){delete [] anacutsval[iic];}
+  delete [] anacutsval;
+  anacutsval=NULL;
+
+  delete [] ptbins;
+  ptbins=NULL;
+
   return;
 }