]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - PWG3/vertexingHF/AliCFHeavyFlavourTaskMultiVarMultiStep.cxx
Add selection on track filter mask in D meson tasks
[u/mrichter/AliRoot.git] / PWG3 / vertexingHF / AliCFHeavyFlavourTaskMultiVarMultiStep.cxx
index 09faeb1c1511df46962a8f8681a556aa7ffcaa83..df07265b1295ca6bc9694e0d6a05c3472f7c81a4 100644 (file)
@@ -13,6 +13,8 @@
  * provided "as is" without express or implied warranty.                  *
  **************************************************************************/
 
+/* $Id$ */
+
 //-----------------------------------------------------------------------
 // Class for HF corrections as a function of many variables
 // 6 Steps introduced: MC, MC Acc, Reco, Reco Acc, Reco Acc + ITS Cl, 
@@ -81,7 +83,8 @@ AliCFHeavyFlavourTaskMultiVarMultiStep::AliCFHeavyFlavourTaskMultiVarMultiStep()
        fKeepD0fromBOnly(kFALSE),
        fCuts(0),
        fUseWeight(kFALSE),
-       fWeight(1.)
+       fWeight(1.),
+       fSign(2)
 {
        //
        //Default ctor
@@ -111,7 +114,8 @@ AliCFHeavyFlavourTaskMultiVarMultiStep::AliCFHeavyFlavourTaskMultiVarMultiStep(c
         fKeepD0fromBOnly(kFALSE),
        fCuts(cuts),
        fUseWeight(kFALSE),
-       fWeight(1.)
+       fWeight(1.),
+       fSign(2)
 {
        //
        // Constructor. Initialization of Inputs and Outputs
@@ -169,7 +173,8 @@ AliCFHeavyFlavourTaskMultiVarMultiStep::AliCFHeavyFlavourTaskMultiVarMultiStep(c
         fKeepD0fromBOnly(c.fKeepD0fromBOnly),
        fCuts(c.fCuts),
        fUseWeight(c.fUseWeight),
-       fWeight(c.fWeight)
+       fWeight(c.fWeight),
+       fSign(c.fSign)
 {
        //
        // Copy Constructor
@@ -196,6 +201,7 @@ void AliCFHeavyFlavourTaskMultiVarMultiStep::Init(){
 
        if(fDebug > 1) printf("AliCFHeavyFlavourTaskMultiVarMultiStep::Init() \n");
        
+       fMinITSClusters = fCuts->GetTrackCuts()->GetMinNClustersITS();
        AliRDHFCutsD0toKpi* copyfCuts=new AliRDHFCutsD0toKpi(*fCuts);
        const char* nameoutput=GetOutputSlot(4)->GetContainer()->GetName();
        copyfCuts->SetName(nameoutput);
@@ -262,7 +268,7 @@ void AliCFHeavyFlavourTaskMultiVarMultiStep::UserExec(Option_t *)
 
        // fix for temporary bug in ESDfilter 
        // the AODs with null vertex pointer didn't pass the PhysSel
-       if(!aodEvent->GetPrimaryVertex()) return;
+       if(!aodEvent->GetPrimaryVertex() || TMath::Abs(aodEvent->GetMagneticField())<0.001) return;
 
        fEvents++;
 
@@ -312,12 +318,12 @@ void AliCFHeavyFlavourTaskMultiVarMultiStep::UserExec(Option_t *)
 
        for (Int_t iPart=0; iPart<mcArray->GetEntriesFast(); iPart++) { 
                AliAODMCParticle* mcPart = dynamic_cast<AliAODMCParticle*>(mcArray->At(iPart));
-               if (mcPart->GetPdgCode() == 4) cquarks++; 
-               if (mcPart->GetPdgCode() == -4) cquarks++; 
                if (!mcPart) {
                        AliWarning("Particle not found in tree, skipping"); 
                        continue;
                } 
+               if (mcPart->GetPdgCode() == 4) cquarks++; 
+               if (mcPart->GetPdgCode() == -4) cquarks++; 
                
                // check the MC-level cuts
 
@@ -494,9 +500,27 @@ void AliCFHeavyFlavourTaskMultiVarMultiStep::UserExec(Option_t *)
                                AliWarning("Could not find associated MC in AOD MC tree");
                                continue;
                        }
-                       if(mcVtxHF->GetPdgCode()==421)isD0D0bar=1;
-                       else if(mcVtxHF->GetPdgCode()==-421)isD0D0bar=2;
+
+                       if (mcVtxHF->GetPdgCode() == 421){  // particle is D0
+                               if (fSign == 1){ // I ask for D0bar only
+                                       AliDebug(2,"particle is D0, I ask for D0bar only");
+                                       continue;
+                               }
+                               else{
+                                       isD0D0bar=1;
+                               }
+                       }
+                       else if (mcVtxHF->GetPdgCode()== -421){ // particle is D0bar
+                               if (fSign == 0){ // I ask for D0 only
+                                       AliDebug(2,"particle is D0bar, I ask for D0 only");
+                                       continue;
+                               }
+                               else{
+                                       isD0D0bar=2;
+                               }
+                       } 
                        else continue;
+
                        // check whether the daughters have kTPCrefit and kITSrefit set
                        AliAODTrack *track0 = (AliAODTrack*)d0tokpi->GetDaughter(0);
                        AliAODTrack *track1 = (AliAODTrack*)d0tokpi->GetDaughter(1);
@@ -1125,11 +1149,11 @@ void AliCFHeavyFlavourTaskMultiVarMultiStep::Terminate(Option_t*)
         corr2->Draw("text");
       
 
-       TString projection_filename="CFtaskHFprojection";
-       if(fKeepD0fromBOnly) projection_filename+="_KeepD0fromBOnly";
-       else if(fKeepD0fromB) projection_filename+="_KeepD0fromB";
-       projection_filename+=".root";
-       TFile* file_projection = new TFile(projection_filename.Data(),"RECREATE");
+       TString projectionFilename="CFtaskHFprojection";
+       if(fKeepD0fromBOnly) projectionFilename+="_KeepD0fromBOnly";
+       else if(fKeepD0fromB) projectionFilename+="_KeepD0fromB";
+       projectionFilename+=".root";
+       TFile* fileProjection = new TFile(projectionFilename.Data(),"RECREATE");
 
         corr1->Write();
         corr2->Write();
@@ -1172,7 +1196,7 @@ void AliCFHeavyFlavourTaskMultiVarMultiStep::Terminate(Option_t*)
        h104->Write("cosPointingAngle_step2");
        h114->Write("phi_step2");
 
-       file_projection->Close();
+       fileProjection->Close();
 
     
 
@@ -1202,7 +1226,7 @@ void AliCFHeavyFlavourTaskMultiVarMultiStep::UserCreateOutputObjects() {
 }
 
 //___________________________________________________________________________
-Double_t AliCFHeavyFlavourTaskMultiVarMultiStep::CosThetaStar(AliAODMCParticle* mcPart, AliAODMCParticle* mcPartDaughter0, AliAODMCParticle* mcPartDaughter1) const {
+Double_t AliCFHeavyFlavourTaskMultiVarMultiStep::CosThetaStar(const AliAODMCParticle* mcPart, const AliAODMCParticle* mcPartDaughter0, const AliAODMCParticle* mcPartDaughter1) const {
 
        //
        // to calculate cos(ThetaStar) for generated particle
@@ -1234,7 +1258,7 @@ Double_t AliCFHeavyFlavourTaskMultiVarMultiStep::CosThetaStar(AliAODMCParticle*
        }
        if (pdgprong0 == 211){
                AliDebug(2,Form("pdgprong0 = %d, pdgprong1 = %d, switching...",pdgprong0,pdgprong1));
-               AliAODMCParticle* mcPartdummy = mcPartDaughter0;
+               const AliAODMCParticle* mcPartdummy = mcPartDaughter0;
                mcPartDaughter0 = mcPartDaughter1;
                mcPartDaughter1 = mcPartdummy;
                pdgprong0 = TMath::Abs(mcPartDaughter0->GetPdgCode());
@@ -1267,7 +1291,7 @@ Double_t AliCFHeavyFlavourTaskMultiVarMultiStep::CosThetaStar(AliAODMCParticle*
        return cts;
 }
 //___________________________________________________________________________
-Double_t AliCFHeavyFlavourTaskMultiVarMultiStep::CT(AliAODMCParticle* mcPart, AliAODMCParticle* mcPartDaughter0, AliAODMCParticle* mcPartDaughter1) const {
+Double_t AliCFHeavyFlavourTaskMultiVarMultiStep::CT(const AliAODMCParticle* mcPart, const AliAODMCParticle* mcPartDaughter0, const AliAODMCParticle* mcPartDaughter1) const {
 
        //
        // to calculate cT for generated particle
@@ -1316,7 +1340,7 @@ Double_t AliCFHeavyFlavourTaskMultiVarMultiStep::CT(AliAODMCParticle* mcPart, Al
        return cT;
 }
 //________________________________________________________________________________
-Bool_t AliCFHeavyFlavourTaskMultiVarMultiStep::GetGeneratedValuesFromMCParticle(AliAODMCParticle* mcPart, TClonesArray* mcArray, Double_t* vectorMC) const {
+Bool_t AliCFHeavyFlavourTaskMultiVarMultiStep::GetGeneratedValuesFromMCParticle(AliAODMCParticle* mcPart, const TClonesArray* mcArray, Double_t* vectorMC) const {
 
        // 
        // collecting all the necessary info (pt, y, cosThetaStar, ptPi, ptKa, cT) from MC particle
@@ -1454,7 +1478,7 @@ Bool_t AliCFHeavyFlavourTaskMultiVarMultiStep::GetGeneratedValuesFromMCParticle(
        return isOk;
 }
 //_________________________________________________________________________________________________
-Int_t AliCFHeavyFlavourTaskMultiVarMultiStep::CheckOrigin(AliAODMCParticle* mcPart, TClonesArray* mcArray)const{
+Int_t AliCFHeavyFlavourTaskMultiVarMultiStep::CheckOrigin(const AliAODMCParticle* mcPart, const TClonesArray* mcArray)const{
 
        //
        // checking whether the very mother of the D0 is a charm or a bottom quark
@@ -1468,6 +1492,7 @@ Int_t AliCFHeavyFlavourTaskMultiVarMultiStep::CheckOrigin(AliAODMCParticle* mcPa
                istep++;
                AliDebug(2,Form("mother at step %d = %d", istep, mother));
                AliAODMCParticle* mcGranma = dynamic_cast<AliAODMCParticle*>(mcArray->At(mother));
+               if(!mcGranma) break;
                pdgGranma = mcGranma->GetPdgCode();
                AliDebug(2,Form("Pdg mother at step %d = %d", istep, pdgGranma));
                Int_t abspdgGranma = TMath::Abs(pdgGranma);
@@ -1500,14 +1525,14 @@ Double_t AliCFHeavyFlavourTaskMultiVarMultiStep::GetWeight(Float_t pt){
        Double_t func1[4] = {0.322643,2.96275,2.30301,2.5};
        Double_t func2[4] = {0.36609,1.94635,1.40463,2.5};
 
-       Double_t dndpt_func1 = dNdptFit(pt,func1);
-       Double_t dndpt_func2 = dNdptFit(pt,func2);
-       AliDebug(2,Form("pt = %f, FONLL = %f, Pythia = %f, ratio = %f",pt,dndpt_func1,dndpt_func2,dndpt_func1/dndpt_func2));
-       return dndpt_func1/dndpt_func2;
+       Double_t dndptFunc1 = DodNdptFit(pt,func1);
+       Double_t dndptFunc2 = DodNdptFit(pt,func2);
+       AliDebug(2,Form("pt = %f, FONLL = %f, Pythia = %f, ratio = %f",pt,dndptFunc1,dndptFunc2,dndptFunc1/dndptFunc2));
+       return dndptFunc1/dndptFunc2;
 }
 
 //__________________________________________________________________________________________________
-Double_t AliCFHeavyFlavourTaskMultiVarMultiStep::dNdptFit(Float_t pt, Double_t* par){
+Double_t AliCFHeavyFlavourTaskMultiVarMultiStep::DodNdptFit(Float_t pt, const Double_t* par)const{
 
        // 
        // calculating dNdpt