]> git.uio.no Git - u/mrichter/AliRoot.git/commitdiff
Possibility to use variables with recalculated primary vertex for significance optimi...
authordainese <dainese@f7af4fe6-9843-0410-8265-dc069ae4e863>
Thu, 23 Jun 2011 11:46:33 +0000 (11:46 +0000)
committerdainese <dainese@f7af4fe6-9843-0410-8265-dc069ae4e863>
Thu, 23 Jun 2011 11:46:33 +0000 (11:46 +0000)
17 files changed:
PWG3/vertexingHF/AliAnalysisTaskSEDplus.cxx
PWG3/vertexingHF/AliAnalysisTaskSESignificance.cxx
PWG3/vertexingHF/AliAnalysisTaskSESignificance.h
PWG3/vertexingHF/AliRDHFCuts.cxx
PWG3/vertexingHF/AliRDHFCuts.h
PWG3/vertexingHF/AliRDHFCutsD0toKpi.cxx
PWG3/vertexingHF/AliRDHFCutsD0toKpi.h
PWG3/vertexingHF/AliRDHFCutsD0toKpipipi.cxx
PWG3/vertexingHF/AliRDHFCutsD0toKpipipi.h
PWG3/vertexingHF/AliRDHFCutsDStartoKpipi.h
PWG3/vertexingHF/AliRDHFCutsDplustoKpipi.cxx
PWG3/vertexingHF/AliRDHFCutsDplustoKpipi.h
PWG3/vertexingHF/AliRDHFCutsDstoKKpi.cxx
PWG3/vertexingHF/AliRDHFCutsDstoKKpi.h
PWG3/vertexingHF/AliRDHFCutsJpsitoee.h
PWG3/vertexingHF/AliRDHFCutsLctoV0.h
PWG3/vertexingHF/AliRDHFCutsLctopKpi.h

index 78d20101dcd3f8ec696aefd119bfbc03a9c5c09a..26b13a8b3ca430dfdfe9ff381e1f4be31cdcc871 100644 (file)
@@ -108,9 +108,7 @@ fDoLS(0)
   // 
   // Standrd constructor
   //
-  //Double_t ptlim[5]={0.,2.,3.,5,9999999.};
-   //SetPtBinLimit(5, ptlim);
-  SetPtBinLimit(fRDCutsAnalysis->GetNPtBins()+1,fRDCutsAnalysis->GetPtBinLimits());
+  fNPtBins=fRDCutsAnalysis->GetNPtBins();
   // Default constructor
    // Output slot #1 writes into a TList container
   DefineOutput(1,TList::Class());  //My private output
@@ -238,34 +236,6 @@ void  AliAnalysisTaskSEDplus::SetMassLimits(Float_t lowlimit, Float_t uplimit){
       SetBinWidth(bw);
     }
 }
-//________________________________________________________________________
-void AliAnalysisTaskSEDplus::SetPtBinLimit(Int_t n, Float_t* lim){
-  // define pt bins for analysis
-  if(n>kMaxPtBins){
-    printf("Max. number of Pt bins = %d\n",kMaxPtBins);
-    fNPtBins=kMaxPtBins;
-    fArrayBinLimits[0]=0.;
-    fArrayBinLimits[1]=2.;
-    fArrayBinLimits[2]=3.;
-    fArrayBinLimits[3]=5.;
-    for(Int_t i=4; i<kMaxPtBins+1; i++) fArrayBinLimits[i]=99999999.;
-  }else{
-    fNPtBins=n-1;
-    fArrayBinLimits[0]=lim[0];
-    for(Int_t i=1; i<fNPtBins+1; i++) 
-      if(lim[i]>fArrayBinLimits[i-1]){
-       fArrayBinLimits[i]=lim[i];
-      }
-      else {
-       fArrayBinLimits[i]=fArrayBinLimits[i-1];
-      }
-    for(Int_t i=fNPtBins; i<kMaxPtBins+1; i++) fArrayBinLimits[i]=99999999.;
-  }
-  if(fDebug > 1){
-    printf("Number of Pt bins = %d\n",fNPtBins);
-    for(Int_t i=0; i<fNPtBins; i++) printf(" Bin%d = %8.2f-%8.2f\n",i,fArrayBinLimits[i],fArrayBinLimits[i+1]);    
-  }
-}
 //________________________________________________________________
 void AliAnalysisTaskSEDplus::SetBinWidth(Float_t w){
   Float_t width=w;
@@ -282,12 +252,6 @@ void AliAnalysisTaskSEDplus::SetBinWidth(Float_t w){
   fBinWidth=width;
 }
 //_________________________________________________________________
-Double_t  AliAnalysisTaskSEDplus::GetPtBinLimit(Int_t ibin){
-  // get pt bin limit
-  if(ibin>fNPtBins)return -1;
-  return fArrayBinLimits[ibin];
-} 
-//_________________________________________________________________
 Int_t AliAnalysisTaskSEDplus::GetNBinsHistos(){
   return (Int_t)((fUpmasslimit-fLowmasslimit)/fBinWidth+0.5);
 }
@@ -925,15 +889,17 @@ void AliAnalysisTaskSEDplus::UserExec(Option_t */*option*/)
 
     if(fRDCutsProduction->IsSelected(d,AliRDHFCuts::kCandidate,aod)) {
 
-      Int_t iPtBin = -1;
       Double_t ptCand = d->Pt();
-
-      for(Int_t ibin=0;ibin<fNPtBins&&iPtBin<0&&ptCand>fArrayBinLimits[0]&&ptCand<fArrayBinLimits[fNPtBins];ibin++){
-       if(ptCand<fArrayBinLimits[ibin+1])iPtBin=ibin;
-      }
+      Int_t iPtBin = fRDCutsProduction->PtBin(ptCand);
       
       Int_t passTightCuts=fRDCutsAnalysis->IsSelected(d,AliRDHFCuts::kCandidate,aod);
-     
+      Bool_t recVtx=kFALSE;
+      AliAODVertex *origownvtx=0x0;
+      if(fRDCutsProduction->GetIsPrimaryWithoutDaughters()){
+       if(d->GetOwnPrimaryVtx()) origownvtx=new AliAODVertex(*d->GetOwnPrimaryVtx());  
+       if(fRDCutsProduction->RecalcOwnPrimaryVtx(d,aod))recVtx=kTRUE;
+       else fRDCutsProduction->CleanOwnPrimaryVtx(d,aod,origownvtx);
+      }
       
       Int_t labDp=-1;
       Float_t deltaPx=0.;
@@ -961,6 +927,7 @@ void AliAnalysisTaskSEDplus::UserExec(Option_t */*option*/)
          pdgCode=-1;
        }
       }
+
       Double_t invMass=d->InvMassDplus();
       Double_t rapid=d->YDplus();
       fYVsPt->Fill(ptCand,rapid);
@@ -971,7 +938,16 @@ void AliAnalysisTaskSEDplus::UserExec(Option_t */*option*/)
        if(passTightCuts) fPtVsMassTC->Fill(invMass,ptCand);
       }
       Float_t tmp[24];
-      if(fFillNtuple){           
+      Double_t  dlen=d->DecayLength();
+      Double_t cosp=d->CosPointingAngle();
+      Double_t sumD02=d->Getd0Prong(0)*d->Getd0Prong(0)+d->Getd0Prong(1)*d->Getd0Prong(1)+d->Getd0Prong(2)*d->Getd0Prong(2);
+      Double_t dca=d->GetDCA();
+      Double_t sigvert=d->GetSigmaVert();         
+      Double_t ptmax=0;
+      for(Int_t i=0;i<3;i++){
+       if(d->PtProng(i)>ptmax)ptmax=d->PtProng(i);
+      }
+        if(fFillNtuple){         
        tmp[0]=pdgCode;
        tmp[1]=deltaPx;
        tmp[2]=deltaPy;
@@ -984,30 +960,21 @@ void AliAnalysisTaskSEDplus::UserExec(Option_t */*option*/)
        tmp[9]=d->PtProng(1);
        tmp[10]=d->PtProng(2);
        tmp[11]=d->Pt();
-       tmp[12]=d->CosPointingAngle();
-       tmp[13]=d->DecayLength();
+       tmp[12]=cosp;
+       tmp[13]=dlen;
        tmp[14]=d->Xv();
        tmp[15]=d->Yv();
        tmp[16]=d->Zv();
        tmp[17]=d->InvMassDplus();
-       tmp[18]=d->GetSigmaVert();
+       tmp[18]=sigvert;
        tmp[19]=d->Getd0Prong(0);
        tmp[20]=d->Getd0Prong(1);
        tmp[21]=d->Getd0Prong(2);
-       tmp[22]=d->GetDCA();
+       tmp[22]=dca;
        tmp[23]=d->Prodd0d0(); 
        fNtupleDplus->Fill(tmp);
        PostData(4,fNtupleDplus);
       }
-      Double_t dlen=d->DecayLength();
-      Double_t cosp=d->CosPointingAngle();
-      Double_t sumD02=d->Getd0Prong(0)*d->Getd0Prong(0)+d->Getd0Prong(1)*d->Getd0Prong(1)+d->Getd0Prong(2)*d->Getd0Prong(2);
-      Double_t dca=d->GetDCA();
-      Double_t sigvert=d->GetSigmaVert();         
-      Double_t ptmax=0;
-      for(Int_t i=0;i<3;i++){
-       if(d->PtProng(i)>ptmax)ptmax=d->PtProng(i);
-      }
       if(iPtBin>=0){
        Float_t dlxy=d->NormalizedDecayLengthXY();
        Float_t cxy=d->CosPointingAngleXY();
@@ -1153,7 +1120,7 @@ void AliAnalysisTaskSEDplus::UserExec(Option_t */*option*/)
        }
        
       }
-      
+      if(recVtx)fRDCutsProduction->CleanOwnPrimaryVtx(d,aod,origownvtx);
     }
     if(unsetvtx) d->UnsetOwnPrimaryVtx();
   }
index 26ec8318170a0f72b3649d67e89f149735d1cc87..e350fe4bcdee87f6ed10cce6ecc1b325b50c274f 100644 (file)
@@ -576,7 +576,7 @@ void AliAnalysisTaskSESignificance::UserExec(Option_t */*option*/)
     
       Int_t nVals=0;
       if(fDecChannel==3) SetPDGdaughterDstoKKpi();
-      fRDCuts->GetCutVarsForOpt(d,fVars,fNVars,fPDGdaughters);
+      fRDCuts->GetCutVarsForOpt(d,fVars,fNVars,fPDGdaughters,aod);
       Int_t ptbin=fRDCuts->PtBin(d->Pt());
       if(ptbin==-1) continue;
       TString mdvname=Form("multiDimVectorPtBin%d",ptbin);
@@ -624,7 +624,7 @@ void AliAnalysisTaskSESignificance::UserExec(Option_t */*option*/)
       if (fDecChannel==3 && isSelected&2){
        SetPDGdaughterDstopiKK();
        nVals=0;
-       fRDCuts->GetCutVarsForOpt(d,fVars,fNVars,fPDGdaughters);
+       fRDCuts->GetCutVarsForOpt(d,fVars,fNVars,fPDGdaughters,aod);
        delete [] addresses;
        addresses = muvec->GetGlobalAddressesAboveCuts(fVars,(Float_t)d->Pt(),nVals);
        if(fDebug>1)printf("nvals = %d\n",nVals);
index 7a7d6c064a94180c866d7cbf13481f81da7c867f..809fd56da922773766fe247fb9f6cedeb6907307 100644 (file)
@@ -93,8 +93,8 @@ class AliAnalysisTaskSESignificance : public AliAnalysisTaskSE
   void FillLambdac(AliAODRecoDecayHF* d,TClonesArray *arrayMC,Int_t index, Int_t isSel);
 
 
-  enum {kMaxPtBins=5};
-  enum {kMaxCutVar=5};
+  enum {kMaxPtBins=8};
+  enum {kMaxCutVar=10};
   enum {kMaxSteps=10};
   enum {kMaxNHist=500000};
   enum {kDplustoKpipi,kD0toKpi,kDstartoKpipi,kDstoKKpi,kD0toKpipipi,kLambdactopKpi};
index cebcfdfc7e87b18ab1a1ba61fd7c8b46e022e97f..bd2fd42de22465de3d5beea785c1682c7211b923 100644 (file)
@@ -275,11 +275,11 @@ Bool_t AliRDHFCuts::IsEventSelected(AliVEvent *event) {
 
   // TEMPORARY FIX FOR REFERENCES
   // Fix references to daughter tracks
-//  if(fFixRefs) {
-//    AliAnalysisVertexingHF *fixer = new AliAnalysisVertexingHF();
-//    fixer->FixReferences((AliAODEvent*)event);
-//    delete fixer;
-//  }
+  //  if(fFixRefs) {
+  //    AliAnalysisVertexingHF *fixer = new AliAnalysisVertexingHF();
+  //    fixer->FixReferences((AliAODEvent*)event);
+  //    delete fixer;
+  //  }
   //
 
 
index 60badc2c4f65e081d8601024cb07a469d14113ac..2b34accb05f3a2068b48cf228a613208f8f9163f 100644 (file)
@@ -96,8 +96,8 @@ class AliRDHFCuts : public AliAnalysisCuts
   AliESDtrackCuts *GetTrackCuts() const {return fTrackCuts;}
   virtual AliESDtrackCuts *GetTrackCutsSoftPi() const {return 0;}
   virtual void GetCutVarsForOpt(AliAODRecoDecayHF *d,Float_t *vars,Int_t nvars,Int_t *pdgdaughters) = 0;
-  //virtual void GetCutVarsForOpt(AliAODRecoDecayHF *d,Float_t *vars,Int_t nvars,Int_t *pdgdaughters,AliAODEvent * /*aod*/)
-  //{return GetCutVarsForOpt(d,vars,nvars,pdgdaughters);}
+  virtual void GetCutVarsForOpt(AliAODRecoDecayHF *d,Float_t *vars,Int_t nvars,Int_t *pdgdaughters,AliAODEvent * /*aod*/)
+            {return GetCutVarsForOpt(d,vars,nvars,pdgdaughters);}
   Int_t   GetGlobalIndex(Int_t iVar,Int_t iPtBin) const;
   void    GetVarPtIndex(Int_t iGlob, Int_t& iVar, Int_t& iPtBin) const;
   Bool_t  GetIsUsePID() const {return fUsePID;}
@@ -143,6 +143,9 @@ class AliRDHFCuts : public AliAnalysisCuts
   Bool_t SetMCPrimaryVtx(AliAODRecoDecayHF *d,AliAODEvent *aod) const;
   void   CleanOwnPrimaryVtx(AliAODRecoDecayHF *d,AliAODEvent *aod,AliAODVertex *origownvtx) const;
 
+  Bool_t CountEventForNormalization() const 
+  { if(fWhyRejection==0) {return kTRUE;} else {return kFALSE;} }
+
  protected:
 
   void SetNPtBins(Int_t nptBins){fnPtBins=nptBins;}
index 01ea6c26fc7d2aa7a4f7b136580d641b72aec607..5729b603120cec9bf8e1ebc394435d881e1e0892 100644 (file)
@@ -120,7 +120,7 @@ AliRDHFCutsD0toKpi &AliRDHFCutsD0toKpi::operator=(const AliRDHFCutsD0toKpi &sour
 
 
 //---------------------------------------------------------------------------
-void AliRDHFCutsD0toKpi::GetCutVarsForOpt(AliAODRecoDecayHF *d,Float_t *vars,Int_t nvars,Int_t *pdgdaughters) {
+void AliRDHFCutsD0toKpi::GetCutVarsForOpt(AliAODRecoDecayHF *d,Float_t *vars,Int_t nvars,Int_t *pdgdaughters,AliAODEvent *aod) {
   // 
   // Fills in vars the values of the variables 
   //
@@ -132,6 +132,18 @@ void AliRDHFCutsD0toKpi::GetCutVarsForOpt(AliAODRecoDecayHF *d,Float_t *vars,Int
 
   AliAODRecoDecayHF2Prong *dd = (AliAODRecoDecayHF2Prong*)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]){
     iter++;
@@ -207,7 +219,9 @@ void AliRDHFCutsD0toKpi::GetCutVarsForOpt(AliAODRecoDecayHF *d,Float_t *vars,Int
                iter++;
           vars[iter]=(dd->NormalizedDecayLengthXY()*(dd->P()/dd->Pt()));
        }
-       
+
+   if(cleanvtx)CleanOwnPrimaryVtx(dd,aod,origownvtx);
+
   return;
 }
 //---------------------------------------------------------------------------
index 273313e13b8673444cb1721d62bd628a65582427..ad3cb34d99328bad233071d5bcb9d376bb7c1b57 100644 (file)
@@ -27,8 +27,12 @@ class AliRDHFCutsD0toKpi : public AliRDHFCuts
 
   AliRDHFCutsD0toKpi(const AliRDHFCutsD0toKpi& source);
   AliRDHFCutsD0toKpi& operator=(const AliRDHFCutsD0toKpi& source); 
-  virtual void GetCutVarsForOpt(AliAODRecoDecayHF *d,Float_t *vars,Int_t nvars,Int_t *pdgdaughters);
+
+  using AliRDHFCuts::GetCutVarsForOpt;
+  virtual void GetCutVarsForOpt(AliAODRecoDecayHF *d,Float_t *vars,Int_t nvars,Int_t *pdgdaughters){
+    return GetCutVarsForOpt(d,vars,nvars,pdgdaughters,0x0);
+  }
+  virtual void GetCutVarsForOpt(AliAODRecoDecayHF *d,Float_t *vars,Int_t nvars,Int_t *pdgdaughters,AliAODEvent *aod);
 
   using AliRDHFCuts::IsSelected;
   virtual Int_t IsSelected(TObject* obj,Int_t selectionLevel) 
index 7109e5b618daf8d92784ccfe96779dc292543767..078a335ab845a235227539a955d6333e474946a6 100644 (file)
@@ -97,7 +97,7 @@ AliRDHFCutsD0toKpipipi &AliRDHFCutsD0toKpipipi::operator=(const AliRDHFCutsD0toK
 \r
 \r
 //---------------------------------------------------------------------------\r
-void AliRDHFCutsD0toKpipipi::GetCutVarsForOpt(AliAODRecoDecayHF *d,Float_t *vars,Int_t nvars,Int_t *pdgdaughters) {\r
+void AliRDHFCutsD0toKpipipi::GetCutVarsForOpt(AliAODRecoDecayHF *d,Float_t *vars,Int_t nvars,Int_t *pdgdaughters,AliAODEvent* aod) {\r
   // \r
   // Fills in vars the values of the variables \r
   //\r
@@ -109,6 +109,18 @@ void AliRDHFCutsD0toKpipipi::GetCutVarsForOpt(AliAODRecoDecayHF *d,Float_t *vars
 \r
   AliAODRecoDecayHF4Prong *dd = (AliAODRecoDecayHF4Prong*)d;\r
 \r
+  //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;\r
 \r
   if(fVarsForOpt[0]) {\r
@@ -167,6 +179,7 @@ void AliRDHFCutsD0toKpipipi::GetCutVarsForOpt(AliAODRecoDecayHF *d,Float_t *vars
     printf("ERROR: optmization for PID cut not implemented\n");\r
   }\r
   \r
+    if(cleanvtx)CleanOwnPrimaryVtx(dd,aod,origownvtx);
   return;\r
 }\r
 //---------------------------------------------------------------------------\r
index 21229135717ca639c9ca98e7e5d7e74bd1480c6c..c8122b9bcc89075e6a1bc67ab349c6c2a875d15c 100644 (file)
@@ -24,8 +24,12 @@ class AliRDHFCutsD0toKpipipi : public AliRDHFCuts
   AliRDHFCutsD0toKpipipi(const AliRDHFCutsD0toKpipipi& source);\r
   AliRDHFCutsD0toKpipipi& operator=(const AliRDHFCutsD0toKpipipi& source); \r
  \r
-  virtual void GetCutVarsForOpt(AliAODRecoDecayHF *d,Float_t *vars,Int_t nvars,Int_t *pdgdaughters);\r
-\r
+    using AliRDHFCuts::GetCutVarsForOpt;
+    virtual void GetCutVarsForOpt(AliAODRecoDecayHF *d,Float_t *vars,Int_t nvars,Int_t *pdgdaughters){
+      return GetCutVarsForOpt(d,vars,nvars,pdgdaughters,0x0);
+    }
+    virtual void GetCutVarsForOpt(AliAODRecoDecayHF *d,Float_t *vars,Int_t nvars,Int_t *pdgdaughters,AliAODEvent* aod);\r
+      \r
   using AliRDHFCuts::IsSelected;\r
   virtual Int_t IsSelected(TObject* obj,Int_t selectionLevel);
   virtual Int_t IsSelectedFromPID(AliAODRecoDecayHF4Prong *d, Int_t *hyp1, Int_t *hyp2, Int_t *hyp3, Int_t *hyp4);
index 430d45061ae3e8871272b697cfc811b15d106f23..2edd76b5c5323cb17912d223d62b7521ab51620c 100644 (file)
@@ -27,7 +27,9 @@ class AliRDHFCutsDStartoKpipi : public AliRDHFCuts
   AliRDHFCutsDStartoKpipi(const AliRDHFCutsDStartoKpipi& source);
   AliRDHFCutsDStartoKpipi& operator=(const AliRDHFCutsDStartoKpipi& source); 
  
-  virtual void GetCutVarsForOpt(AliAODRecoDecayHF *d,Float_t *vars,Int_t nvars,Int_t *pdgD0daughters);
+  using AliRDHFCuts::GetCutVarsForOpt;
+  virtual void GetCutVarsForOpt(AliAODRecoDecayHF *d,Float_t *vars,Int_t nvars,Int_t *pdgdaughters);
+  virtual void GetCutVarsForOpt(AliAODRecoDecayHF *d,Float_t *vars,Int_t nvars,Int_t *pdgdaughters,AliAODEvent *aod);
 
   using AliRDHFCuts::IsSelected;
   virtual Int_t IsSelected(TObject* obj,Int_t selectionLevel);
index 04102d536fd88d02370e492886490574685b38ff..a098c2495bbc2d4576e281baa318919cfa5e067a 100644 (file)
@@ -37,7 +37,8 @@ ClassImp(AliRDHFCutsDplustoKpipi)
 //--------------------------------------------------------------------------
 AliRDHFCutsDplustoKpipi::AliRDHFCutsDplustoKpipi(const char* name) : 
 AliRDHFCuts(name),
-  fUseStrongPid(kFALSE),
+  fUseStrongPid(0),
+  fMaxPtStrongPid(0.),
   fUseImpParProdCorrCut(kFALSE)
 {
   //
@@ -120,6 +121,7 @@ AliRDHFCuts(name),
 AliRDHFCutsDplustoKpipi::AliRDHFCutsDplustoKpipi(const AliRDHFCutsDplustoKpipi &source) :
   AliRDHFCuts(source),
   fUseStrongPid(source.fUseStrongPid),
+  fMaxPtStrongPid(source.fMaxPtStrongPid),
   fUseImpParProdCorrCut(source.fUseImpParProdCorrCut)
 {
   //
@@ -143,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 
   //
@@ -155,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]){
@@ -250,6 +264,9 @@ void AliRDHFCutsDplustoKpipi::GetCutVarsForOpt(AliAODRecoDecayHF *d,Float_t *var
     iter++;
     vars[iter]=dd->CosPointingAngleXY();
   }
+
+  if(cleanvtx)CleanOwnPrimaryVtx(dd,aod,origownvtx);
+
   return;
 }
 //---------------------------------------------------------------------------
@@ -297,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;
index 1822378e2f936d670e16cb5dc12a899a3d67213d..939119776ca27fad21adc560e56b2d4b4175a67f 100644 (file)
@@ -26,8 +26,12 @@ class AliRDHFCutsDplustoKpipi : public AliRDHFCuts
   virtual ~AliRDHFCutsDplustoKpipi(){};
   AliRDHFCutsDplustoKpipi(const AliRDHFCutsDplustoKpipi& source);
   AliRDHFCutsDplustoKpipi& operator=(const AliRDHFCutsDplustoKpipi& source); 
-  virtual void GetCutVarsForOpt(AliAODRecoDecayHF *d,Float_t *vars,Int_t nvars,Int_t *pdgdaughters);
+
+  using AliRDHFCuts::GetCutVarsForOpt;
+  virtual void GetCutVarsForOpt(AliAODRecoDecayHF *d,Float_t *vars,Int_t nvars,Int_t *pdgdaughters){
+    return GetCutVarsForOpt(d,vars,nvars,pdgdaughters,0x0);
+  }
+  virtual void GetCutVarsForOpt(AliAODRecoDecayHF *d,Float_t *vars,Int_t nvars,Int_t *pdgdaughters,AliAODEvent *aod);
 
   using AliRDHFCuts::IsSelected;
   virtual Int_t IsSelected(TObject* obj,Int_t selectionLevel){
@@ -42,8 +46,10 @@ class AliRDHFCutsDplustoKpipi : public AliRDHFCuts
 
   Float_t GetMassCut(Int_t iPtBin=0) const { return (GetCuts() ? fCutsRD[GetGlobalIndex(0,iPtBin)] : 1.e6);}
   Float_t GetDCACut(Int_t iPtBin=0) const { return (GetCuts() ? fCutsRD[GetGlobalIndex(1,iPtBin)] : 1.e6);}
-  void SetUseStrongPid(Bool_t spid){fUseStrongPid=spid;}
-  Bool_t GetStrongPid() const {return fUseStrongPid;}
+  void SetUseStrongPid(Int_t spid){fUseStrongPid=spid;}
+  void SetMaxPtStrongPid(Float_t spid){fMaxPtStrongPid=spid;}
+  Int_t GetStrongPid() const {return fUseStrongPid;}
+  Float_t GetMaxPtStrongPid(){return fMaxPtStrongPid;}
   void SetUseImpParProdCorrCut(Bool_t use){
     fUseImpParProdCorrCut=use;
   }
@@ -54,10 +60,11 @@ class AliRDHFCutsDplustoKpipi : public AliRDHFCuts
  protected:
 
  private:
-  Bool_t fUseStrongPid;         //use strong pid
+  Int_t fUseStrongPid; //use strong pid 0 no,1 only for K,2 both pi and K
+  Float_t fMaxPtStrongPid;//Maximum pt to apply strong Pid
   Bool_t fUseImpParProdCorrCut; //switch for d0K*d0pi1 vs. d0K*d0pi2 cut
 
-  ClassDef(AliRDHFCutsDplustoKpipi,3);  // class for cuts on AOD reconstructed 
+  ClassDef(AliRDHFCutsDplustoKpipi,4);  // class for cuts on AOD reconstructed 
                                    // D+->Kpipi
 };
 
index 177d85bdca947372186d20596a9f2702cdfbada8..f7c09f549302d9b83ac85e54ba06d9d53fc861d4 100644 (file)
@@ -134,7 +134,7 @@ AliRDHFCutsDstoKKpi &AliRDHFCutsDstoKKpi::operator=(const AliRDHFCutsDstoKKpi &s
 
 
 //---------------------------------------------------------------------------
-void AliRDHFCutsDstoKKpi::GetCutVarsForOpt(AliAODRecoDecayHF *d,Float_t *vars,Int_t nvars,Int_t *pdgdaughters) {
+void AliRDHFCutsDstoKKpi::GetCutVarsForOpt(AliAODRecoDecayHF *d,Float_t *vars,Int_t nvars,Int_t *pdgdaughters,AliAODEvent *aod) {
   // 
   // Fills in vars the values of the variables 
   //
@@ -145,7 +145,19 @@ void AliRDHFCutsDstoKKpi::GetCutVarsForOpt(AliAODRecoDecayHF *d,Float_t *vars,In
   }
 
   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]){
     iter++;
@@ -270,7 +282,8 @@ void AliRDHFCutsDstoKKpi::GetCutVarsForOpt(AliAODRecoDecayHF *d,Float_t *vars,In
       vars[iter]=dd->CosPiDsLabFramepiKK();
     }
   }
-  
+
+  if(cleanvtx)CleanOwnPrimaryVtx(dd,aod,origownvtx); 
   return;
 }
 //---------------------------------------------------------------------------
index 3d0ef29c4ecd165371d1604a039c016a5696dd05..67527e7bc265eb0c43141efd5be844a046628f15 100644 (file)
@@ -24,7 +24,11 @@ class AliRDHFCutsDstoKKpi : public AliRDHFCuts
   AliRDHFCutsDstoKKpi(const AliRDHFCutsDstoKKpi& source);
   AliRDHFCutsDstoKKpi& operator=(const AliRDHFCutsDstoKKpi& source); 
  
-  virtual void GetCutVarsForOpt(AliAODRecoDecayHF *d,Float_t *vars,Int_t nvars,Int_t *pdgdaughters);
+  using AliRDHFCuts::GetCutVarsForOpt;
+  virtual void GetCutVarsForOpt(AliAODRecoDecayHF *d,Float_t *vars,Int_t nvars,Int_t *pdgdaughters){
+    return GetCutVarsForOpt(d,vars,nvars,pdgdaughters,0x0);
+  }
+  virtual void GetCutVarsForOpt(AliAODRecoDecayHF *d,Float_t *vars,Int_t nvars,Int_t *pdgdaughters,AliAODEvent *aod);
 
   using AliRDHFCuts::IsSelected;
   virtual Int_t IsSelected(TObject* obj,Int_t selectionLevel){
index 18f05399725c04fe4f3a45dec959ab3a1f92ca85..a8ae0f3a2eb85fc06f8ebe379204cf328e5a0317 100644 (file)
@@ -25,6 +25,7 @@ class AliRDHFCutsJpsitoee : public AliRDHFCuts
   AliRDHFCutsJpsitoee& operator=(const AliRDHFCutsJpsitoee& source); 
  
   virtual void GetCutVarsForOpt(AliAODRecoDecayHF *d,Float_t *vars,Int_t nvars,Int_t *pdgdaughters);
+  virtual void GetCutVarsForOpt(AliAODRecoDecayHF *d,Float_t *vars,Int_t nvars,Int_t *pdgdaughters,AliAODEvent *aod);
 
   using AliRDHFCuts::IsSelected;
   virtual Int_t IsSelected(TObject* obj,Int_t selectionLevel);
index 80e55e3e5bff175822b6e31fb822135b9bd3c30c..5369fefb12f6a0affa337f511f597aa40e1b3e83 100644 (file)
@@ -24,6 +24,7 @@ class AliRDHFCutsLctoV0 : public AliRDHFCuts
   AliRDHFCutsLctoV0& operator=(const AliRDHFCutsLctoV0& source); 
  
   virtual void GetCutVarsForOpt(AliAODRecoDecayHF *d,Float_t *vars,Int_t nvars,Int_t *pdgdaughters);
+  virtual void GetCutVarsForOpt(AliAODRecoDecayHF *d,Float_t *vars,Int_t nvars,Int_t *pdgdaughters,AliAODEvent *aod);
 
   using AliRDHFCuts::IsSelected;
   virtual Int_t IsSelected(TObject* obj,Int_t selectionLevel);
index e6b041e1489fb891e17f326b0e9b8d1e81d99097..a29a97e46bbd9139306fc4942f37fe176257c755 100644 (file)
@@ -27,6 +27,8 @@ class AliRDHFCutsLctopKpi : public AliRDHFCuts
   AliRDHFCutsLctopKpi& operator=(const AliRDHFCutsLctopKpi& source); 
  
   virtual void GetCutVarsForOpt(AliAODRecoDecayHF *d,Float_t *vars,Int_t nvars,Int_t *pdgdaughters);
+  virtual void GetCutVarsForOpt(AliAODRecoDecayHF *d,Float_t *vars,Int_t nvars,Int_t *pdgdaughters,AliAODEvent *aod);
+
   void SetPidpion(AliAODPidHF* pidPion) { 
       if(fPidObjpion) delete fPidObjpion;
       fPidObjpion=new AliAODPidHF(*pidPion);