]> git.uio.no Git - u/mrichter/AliRoot.git/commitdiff
Dstar correlation task coverity fix, adding some data members
authorebruna <ebruna@f7af4fe6-9843-0410-8265-dc069ae4e863>
Tue, 3 Sep 2013 10:09:19 +0000 (10:09 +0000)
committerebruna <ebruna@f7af4fe6-9843-0410-8265-dc069ae4e863>
Tue, 3 Sep 2013 10:09:19 +0000 (10:09 +0000)
PWGHF/correlationHF/AliAnalysisTaskDStarCorrelations.cxx
PWGHF/correlationHF/AliAnalysisTaskDStarCorrelations.h
PWGHF/correlationHF/macros/AddTaskDStarCorrelations.C

index 0deb1d33caa58e1e613a17e69fdd89ad0e02d0c8..075fbe11eade74db4b48e52d7298c2335c1693e7 100644 (file)
@@ -72,16 +72,19 @@ fmontecarlo(kFALSE),
 fmixing(kFALSE),\r
 fFullmode(kFALSE),\r
 fSystem(pp),\r
+fEfficiencyVariable(kNone),\r
 fReco(kTRUE),\r
 fUseEfficiencyCorrection(kFALSE),\r
 fUseDmesonEfficiencyCorrection(kFALSE),\r
 fUseCentrality(kFALSE),\r
+fUseHadronicChannelAtKineLevel(kFALSE),\r
 fPhiBins(32),\r
 fEvents(0),\r
 fDebugLevel(0),\r
 fDisplacement(0),\r
 fDim(0),\r
 fNofPtBins(0),\r
+fMaxEtaDStar(0.9),\r
 fDMesonSigmas(0),\r
 \r
 fD0Window(0),\r
@@ -113,15 +116,19 @@ fmontecarlo(kFALSE),
 fmixing(kFALSE),\r
 fFullmode(mode),\r
 fSystem(syst),\r
+fEfficiencyVariable(kNone),\r
 fReco(kTRUE),\r
 fUseEfficiencyCorrection(kFALSE),\r
 fUseDmesonEfficiencyCorrection(kFALSE),\r
+fUseCentrality(kFALSE),\r
+fUseHadronicChannelAtKineLevel(kFALSE),\r
 fPhiBins(32),\r
 fEvents(0),\r
 fDebugLevel(0),\r
 fDisplacement(0),\r
 fDim(0),\r
 fNofPtBins(0),\r
+fMaxEtaDStar(0.9),\r
 fDMesonSigmas(0),\r
 fD0Window(0),\r
 \r
@@ -190,16 +197,13 @@ void AliAnalysisTaskDStarCorrelations::Init(){
        AliRDHFCutsDStartoKpipi* copyfCuts=new AliRDHFCutsDStartoKpipi(*fCuts);\r
        \r
        \r
-       \r
-       \r
+    \r
        // Post the D* cuts\r
        PostData(3,copyfCuts);\r
        \r
        // Post the hadron cuts\r
        PostData(4,fCuts2);\r
-       \r
-\r
-       \r
+    \r
        return;\r
 }\r
 \r
@@ -251,8 +255,6 @@ void AliAnalysisTaskDStarCorrelations::UserCreateOutputObjects(){
 void AliAnalysisTaskDStarCorrelations::UserExec(Option_t *){\r
   \r
   \r
-  \r
-  \r
   if(fDebugLevel){\r
     \r
     if(fReco) std::cout << "USING RECONSTRUCTION" << std::endl;\r
@@ -337,7 +339,6 @@ void AliAnalysisTaskDStarCorrelations::UserExec(Option_t *){
     // ******************************** END event selections **************************************************\r
     \r
     AliCentrality *centralityObj = 0;\r
-    //Int_t multiplicity = -1;\r
     Double_t MultipOrCent = -1;\r
     \r
     if(fUseCentrality){\r
@@ -346,27 +347,21 @@ void AliAnalysisTaskDStarCorrelations::UserExec(Option_t *){
       //AliInfo(Form("Centrality is %f", MultipOrCent));\r
     }\r
     \r
-    if(!fUseCentrality){\r
-      /* if(fSystem == pp || fSystem == pA){*/\r
-        //     MultipOrCent = fTracklets->GetNumberOfTracklets();\r
-      MultipOrCent = AliVertexingHFUtils::GetNumberOfTrackletsInEtaRange(aodEvent,-1.,1.);\r
-      //AliInfo(Form("multiplicity is %f", MultipOrCent));\r
-    }\r
-    \r
+    if(!fUseCentrality) MultipOrCent = AliVertexingHFUtils::GetNumberOfTrackletsInEtaRange(aodEvent,-1.,1.);\r
     \r
+        \r
     fCorrelator->SetAODEvent(aodEvent); // set the event to be processed\r
     \r
     ((TH1D*)fOutput->FindObject("NofEvents"))->Fill(1);\r
-    //\r
-    Bool_t correlatorON = fCorrelator->Initialize(); //define the pool for mixing\r
+    \r
+    Bool_t correlatorON = fCorrelator->Initialize(); //define the pool for mixing and check if event is in pool settings\r
        if(!correlatorON) {\r
          AliInfo("AliHFCorrelator didn't initialize the pool correctly or processed a bad event");\r
          return;\r
        }\r
        \r
        if(fmontecarlo) fCorrelator->SetMCArray(fmcArray);\r
-       \r
-       \r
+               \r
        // check the event type\r
        // load MC header\r
        if(fmontecarlo){\r
@@ -433,7 +428,6 @@ void AliAnalysisTaskDStarCorrelations::UserExec(Option_t *){
     Int_t poolbin = fCuts2->GetPoolBin(MultipOrCent, zVtxPosition);\r
   \r
     \r
-    \r
        // initialize variables you will need for the D*\r
        \r
        Double_t ptDStar;//\r
@@ -454,9 +448,12 @@ void AliAnalysisTaskDStarCorrelations::UserExec(Option_t *){
        Int_t pdgDgD0toKpi[2]={321,211};\r
        \r
        Bool_t isDStarCand = kFALSE;\r
-       Bool_t isFilled = kFALSE;\r
+    Bool_t isDfromB = kFALSE;\r
        Bool_t isEventMixingFilledPeak = kFALSE;\r
        Bool_t isEventMixingFilledSB = kFALSE;\r
+    Bool_t EventHasDStarCandidate = kFALSE;\r
+    Bool_t EventHasDZeroSideBandCandidate = kFALSE;\r
+    Bool_t EventHasDStarSideBandCandidate = kFALSE;\r
        //loop on D* candidates\r
        \r
        Int_t looponDCands = 0;\r
@@ -466,11 +463,10 @@ void AliAnalysisTaskDStarCorrelations::UserExec(Option_t *){
        Int_t nOfDStarCandidates = 0;\r
        Int_t nOfSBCandidates = 0;\r
        \r
-       \r
-       \r
        Double_t DmesonEfficiency = 1.;\r
        Double_t DmesonWeight = 1.;\r
-       Bool_t isDfromB = kFALSE;\r
+    Double_t efficiencyvariable = -999;\r
+    \r
        \r
        \r
        for (Int_t iDStartoD0pi = 0; iDStartoD0pi<looponDCands; iDStartoD0pi++) {\r
@@ -487,7 +483,7 @@ void AliAnalysisTaskDStarCorrelations::UserExec(Option_t *){
          AliAODRecoCascadeHF* dstarD0pi;\r
          AliAODRecoDecayHF2Prong* theD0particle;\r
          AliAODMCParticle* DStarMC;\r
-         Short_t daughtercharge;\r
+      Short_t daughtercharge = -2;\r
          Int_t trackiddaugh0 = -1; // track id if it is reconstruction - label if it is montecarlo info\r
          Int_t trackiddaugh1 = -1;\r
          Int_t trackidsoftPi = -1;\r
@@ -501,7 +497,6 @@ void AliAnalysisTaskDStarCorrelations::UserExec(Option_t *){
            if (!theD0particle) continue;\r
             \r
            \r
-            \r
            // track quality cuts\r
            Int_t isTkSelected = fCuts->IsSelected(dstarD0pi,AliRDHFCuts::kTracks); // quality cuts on tracks\r
            // region of interest + topological cuts + PID\r
@@ -511,45 +506,21 @@ void AliAnalysisTaskDStarCorrelations::UserExec(Option_t *){
            if(!isTkSelected) continue;\r
            if(!isSelected) continue;\r
         if(!fCuts->IsInFiducialAcceptance(dstarD0pi->Pt(),dstarD0pi->YDstar())) continue;\r
-            \r
-            // new piece of code\r
-            \r
-            \r
-           //            Double_t rapidity = dstarD0pi->YDstar();\r
-            \r
-            DmesonEfficiency = fCuts2->GetTrigWeight(dstarD0pi->Pt(),MultipOrCent);\r
-            \r
-           /* if(fDeffMapvsPt){\r
-              if(fDebugLevel)  std::cout << "Reading pT eff map from " << fDeffMapvsPt->GetName() <<  std::endl;\r
-                Int_t bin=fDeffMapvsPt->FindBin(dstarD0pi->Pt());\r
-                if(fDeffMapvsPt->IsBinUnderflow(bin)||fDeffMapvsPt->IsBinOverflow(bin)) DmesonEfficiency = 1.;\r
-                else DmesonEfficiency = fDeffMapvsPt->GetBinContent(bin);\r
-                \r
-                \r
-                \r
-                \r
-               }\r
-               if(fDeffMapvsPtvsMult)\r
-               {\r
-                Int_t bin=fDeffMapvsPtvsMult->FindBin(dstarD0pi->Pt(),MultipOrCent);\r
-                if(fDeffMapvsPtvsMult->IsBinUnderflow(bin)||fDeffMapvsPtvsMult->IsBinOverflow(bin)) DmesonEfficiency = 1.;\r
-                else DmesonEfficiency = fDeffMapvsPtvsMult->GetBinContent(bin);\r
-            }\r
-            if(fDeffMapvsPtvsEta){\r
-           Int_t bin=fDeffMapvsPtvsEta->FindBin(dstarD0pi->Pt(),rapidity);\r
-           if(fDeffMapvsPtvsEta->IsBinUnderflow(bin)||fDeffMapvsPtvsEta->IsBinOverflow(bin)) DmesonEfficiency = 1.;\r
-                else DmesonEfficiency = fDeffMapvsPtvsEta->GetBinContent(bin);\r
-               \r
-                \r
-                \r
-                \r
-               }\r
-            */\r
-            \r
-            \r
-           ptDStar = dstarD0pi->Pt();\r
-           phiDStar = dstarD0pi->Phi();\r
-           etaDStar = dstarD0pi->Eta();\r
+          \r
+          \r
+          ptDStar = dstarD0pi->Pt();\r
+          phiDStar = dstarD0pi->Phi();\r
+          etaDStar = dstarD0pi->Eta();\r
+          if(TMath::Abs(etaDStar) > fMaxEtaDStar) continue;\r
+          if(fEfficiencyVariable == kMult || fEfficiencyVariable == kCentr)  efficiencyvariable = MultipOrCent;\r
+          if(fEfficiencyVariable == kEta) efficiencyvariable = etaDStar;\r
+          if(fEfficiencyVariable == kRapidity) efficiencyvariable = dstarD0pi->YDstar();\r
+          if(fEfficiencyVariable == kNone) efficiencyvariable = 0;\r
+          \r
+        // get the D meson efficiency\r
+        DmesonEfficiency = fCuts2->GetTrigWeight(dstarD0pi->Pt(),efficiencyvariable);\r
+            \r
+         \r
 \r
            if(fUseDmesonEfficiencyCorrection){\r
              if(DmesonEfficiency>1.e-5) DmesonWeight = 1./DmesonEfficiency;\r
@@ -561,15 +532,22 @@ void AliAnalysisTaskDStarCorrelations::UserExec(Option_t *){
             else DmesonWeight = 1.; \r
             \r
             // continue;\r
-            \r
+          \r
            Int_t mcLabelDStar = -999;\r
-           if(fmontecarlo){\r
+          if(fmontecarlo){\r
              // find associated MC particle for D* ->D0toKpi\r
-             mcLabelDStar = dstarD0pi->MatchToMC(413,421,pdgDgDStartoD0pi,pdgDgD0toKpi,fmcArray,kFALSE);\r
+             mcLabelDStar = dstarD0pi->MatchToMC(413,421,pdgDgDStartoD0pi,pdgDgD0toKpi,fmcArray/*,kFALSE*/);\r
              if(mcLabelDStar>=0) isDStarMCtag = kTRUE;\r
+              if(!isDStarMCtag) continue;\r
+            AliAODMCParticle *MCDStar = (AliAODMCParticle*)fmcArray->At(mcLabelDStar);\r
+            //check if DStar from B\r
+            Int_t labelMother = MCDStar->GetMother();\r
+            AliAODMCParticle * mother = dynamic_cast<AliAODMCParticle*>(fmcArray->At(labelMother));\r
+            if(!mother) continue;\r
+            Int_t motherPDG =TMath::Abs(mother->PdgCode());\r
+            if((motherPDG>=500 && motherPDG <600) || (motherPDG>=5000 && motherPDG<6000 )) isDfromB = kTRUE;\r
            }\r
                         \r
-            \r
            \r
            phiDStar = fCorrelator->SetCorrectPhiRange(phiDStar);\r
             \r
@@ -594,54 +572,49 @@ void AliAnalysisTaskDStarCorrelations::UserExec(Option_t *){
            //good D0 candidates\r
            if (TMath::Abs(invMassDZero-mPDGD0)<fDMesonSigmas[1]*mD0Window){\r
              \r
-             if(!fmixing)      ((TH3F*)fOutput->FindObject("DeltaInvMass"))->Fill(ptDStar,deltainvMDStar,MultipOrCent,DmesonWeight);\r
-             \r
+             if(!fmixing)      ((TH2F*)fOutput->FindObject("DeltaInvMass"))->Fill(ptDStar,deltainvMDStar,DmesonWeight);\r
              // good D*?\r
              if(TMath::Abs(deltainvMDStar-(mPDGDstar-mPDGD0))<fDMesonSigmas[0]*dmDStarWindow){\r
                \r
                if(!fmixing)    ((TH1F*)fOutput->FindObject("RecoPtDStar"))->Fill(ptDStar,DmesonWeight);\r
                if(!fmixing)    ((TH2F*)fOutput->FindObject("PhiEtaTrigger"))->Fill(phiDStar,etaDStar);\r
                isInPeak = kTRUE;\r
+        EventHasDStarCandidate = kTRUE;\r
                nOfDStarCandidates++;\r
              } // end Good D*\r
               \r
                 //  D* sideband?\r
-             if((deltainvMDStar-(mPDGDstar-mPDGD0)>4*dmDStarWindow) && (deltainvMDStar-(mPDGDstar-mPDGD0)<8*dmDStarWindow)){\r
+             if((deltainvMDStar-(mPDGDstar-mPDGD0)>fDMesonSigmas[2]*dmDStarWindow) && (deltainvMDStar-(mPDGDstar-mPDGD0)<fDMesonSigmas[3]*dmDStarWindow)){\r
                isInDStarSideBand = kTRUE;\r
+              EventHasDStarSideBandCandidate = kTRUE;\r
              } // end D* sideband\r
               \r
             }// end good D0 candidates\r
             \r
             //D0 sidebands\r
            if (TMath::Abs(invMassDZero-mPDGD0)>fDMesonSigmas[2]*mD0Window && TMath::Abs(invMassDZero-mPDGD0)<fDMesonSigmas[3]*mD0Window ){\r
-             if(!fmixing)((TH3F*)fOutput->FindObject("bkgDeltaInvMass"))->Fill(ptDStar,deltainvMDStar,MultipOrCent,DmesonWeight);\r
+             if(!fmixing)((TH2F*)fOutput->FindObject("bkgDeltaInvMass"))->Fill(ptDStar,deltainvMDStar,DmesonWeight);\r
              if(!fmixing && fFullmode)((TH2F*)fOutput->FindObject("D0InvMassinSB"))->Fill(ptDStar,invMassDZero,DmesonWeight);\r
               \r
              if(TMath::Abs(deltainvMDStar-(mPDGDstar-mPDGD0))<fDMesonSigmas[0] *dmDStarWindow){ // is in DStar peak region?\r
                if(!fmixing)    ((TH1F*)fOutput->FindObject("RecoPtBkg"))->Fill(ptDStar,DmesonWeight);\r
                isInDZeroSideBand = kTRUE;\r
+        EventHasDZeroSideBandCandidate = kTRUE;\r
                nOfSBCandidates++;\r
                if(!fmixing)    ((TH2F*)fOutput->FindObject("PhiEtaSideBand"))->Fill(phiDStar,etaDStar);\r
              }\r
               \r
            }//end if sidebands\r
             \r
-           // getting the number of triggers in the MCtag D* case\r
-            if(fmontecarlo && isDStarMCtag) ((TH1F*)fOutput->FindObject("MCtagPtDStar"))->Fill(ptDStar);\r
+          \r
             \r
             \r
            if(!isInPeak && !isInDStarSideBand && !isInDZeroSideBand) continue; // skip if it is not side band or peak event - SAVE CPU TIME\r
            \r
            \r
             // check properties of the events containing the D*\r
-            \r
-            \r
-            \r
-            if(isInPeak &&!isFilled) {\r
-             \r
-             if(fFullmode)  ((TH2F*)fOutput->FindObject("EventPropsCheckifDStar"))->Fill(MultipOrCent,zVtxPosition);\r
-             isFilled = kTRUE;\r
-            }\r
+\r
+     \r
             \r
             isDStarCand = kTRUE;\r
             \r
@@ -661,127 +634,92 @@ void AliAnalysisTaskDStarCorrelations::UserExec(Option_t *){
          Int_t DStarLabel = -1;\r
          \r
          if(!fReco){ // use pure MC information\r
-           \r
-            \r
-            // check if DStar from B\r
-            \r
-            \r
-            \r
+          \r
+        // get the DStar Particle\r
            DStarMC = dynamic_cast<AliAODMCParticle*>(fmcArray->At(iDStartoD0pi));\r
            if (!DStarMC) {\r
              AliWarning("Careful: DStar MC Particle not found in tree, skipping");\r
              continue;\r
            }\r
            DStarLabel = DStarMC->GetLabel();\r
-            if(DStarLabel>0)isDStarMCtag = kTRUE;\r
+        if(DStarLabel>0)isDStarMCtag = kTRUE;\r
            \r
            Int_t PDG =TMath::Abs(DStarMC->PdgCode());\r
-           \r
            if(PDG !=413) continue; // skip if it is not a DStar\r
            // check fiducial acceptance\r
-            if(!fCuts->IsInFiducialAcceptance(DStarMC->Pt(),DStarMC->Y())) continue;\r
-            \r
-            //chech if DStar from B\r
-            \r
+        if(!fCuts->IsInFiducialAcceptance(DStarMC->Pt(),DStarMC->Y())) continue;\r
             \r
+            //check if DStar from B\r
             Int_t labelMother = DStarMC->GetMother();\r
-            \r
             AliAODMCParticle * mother = dynamic_cast<AliAODMCParticle*>(fmcArray->At(labelMother));\r
-           \r
-            if(!mother) continue;\r
+                if(!mother) continue;\r
             Int_t motherPDG =TMath::Abs(mother->PdgCode());\r
-            \r
-            \r
-            \r
-            if((motherPDG>=500 && motherPDG <600) || (motherPDG>=5000 && motherPDG<6000 ))\r
-             {isDfromB = kTRUE; }\r
-            \r
-            \r
-            //end check\r
-           \r
-           \r
-           \r
-           \r
-           Bool_t isDZero = kFALSE;\r
-           Bool_t isSoftPi = kFALSE;\r
-           \r
-            \r
-            \r
-            \r
-            \r
-            \r
-            \r
-           \r
-           //check decay channel on MC ************************************************\r
-           \r
-           Int_t NDaugh = DStarMC->GetNDaughters();\r
-           if(NDaugh != 2) continue; // skip decay channels w/0 2 prongs\r
-           for(Int_t i=0; i<NDaugh;i++){ // loop on daughters\r
-             \r
-             Int_t daugh_label = DStarMC->GetDaughter(i);\r
-             AliAODMCParticle* mcDaughter = dynamic_cast<AliAODMCParticle*>(fmcArray->At(daugh_label));\r
-             if(!mcDaughter) continue;\r
-             Int_t daugh_pdg = TMath::Abs(mcDaughter->GetPdgCode());\r
-             if(fDebugLevel) std::cout << "Daughter " << i << " pdg code is " << daugh_pdg << std::endl;\r
+            if((motherPDG>=500 && motherPDG <600) || (motherPDG>=5000 && motherPDG<6000 )) isDfromB = kTRUE;\r
+          \r
+          Bool_t isDZero = kFALSE;\r
+          Bool_t isSoftPi = kFALSE;\r
+          \r
+          if(fUseHadronicChannelAtKineLevel){\r
+          //check decay channel on MC ************************************************\r
+                Int_t NDaugh = DStarMC->GetNDaughters();\r
+                if(NDaugh != 2) continue; // skip decay channels w/0 2 prongs\r
+                \r
+                for(Int_t i=0; i<NDaugh;i++){ // loop on daughters\r
+                        Int_t daugh_label = DStarMC->GetDaughter(i);\r
+                        AliAODMCParticle* mcDaughter = dynamic_cast<AliAODMCParticle*>(fmcArray->At(daugh_label));\r
+                        if(!mcDaughter) continue;\r
+                        Int_t daugh_pdg = TMath::Abs(mcDaughter->GetPdgCode());\r
+                        if(fDebugLevel) std::cout << "Daughter " << i << " pdg code is " << daugh_pdg << std::endl;\r
              \r
-             if(daugh_pdg == 421) {isDZero = kTRUE;\r
-               Int_t NDaughD0 = mcDaughter->GetNDaughters();\r
-               if(NDaughD0 != 2) continue; // skip decay channels w/0 2 prongs\r
-               trackiddaugh0 = mcDaughter->GetDaughter(0);\r
-               trackiddaugh1 = mcDaughter->GetDaughter(1);\r
+                        if(daugh_pdg == 421) {isDZero = kTRUE;\r
+                            Int_t NDaughD0 = mcDaughter->GetNDaughters();\r
+                            if(NDaughD0 != 2) continue; // skip decay channels w/0 2 prongs\r
+                            trackiddaugh0 = mcDaughter->GetDaughter(0);\r
+                            trackiddaugh1 = mcDaughter->GetDaughter(1);\r
+                            Bool_t isKaon = kFALSE;\r
+                            Bool_t isPion = kFALSE;\r
                \r
-               Bool_t isKaon = kFALSE;\r
-               Bool_t isPion = kFALSE;\r
-               \r
-               for(Int_t k=0;k<NDaughD0;k++){\r
-                 \r
-                 Int_t labelD0daugh = mcDaughter->GetDaughter(k);\r
-                 AliAODMCParticle* mcGrandDaughter = dynamic_cast<AliAODMCParticle*>(fmcArray->At(labelD0daugh));\r
-                 if(!mcGrandDaughter) continue;\r
-                 Int_t granddaugh_pdg = TMath::Abs(mcGrandDaughter->GetPdgCode());\r
-                 if(granddaugh_pdg==321) isKaon = kTRUE;\r
-                 if(granddaugh_pdg==211) isPion = kTRUE;\r
-               }\r
-               if(!isKaon || !isKaon) continue; // skip if not correct decay channel of D0\r
-             }\r
+                            for(Int_t k=0;k<NDaughD0;k++){\r
+                                Int_t labelD0daugh = mcDaughter->GetDaughter(k);\r
+                                AliAODMCParticle* mcGrandDaughter = dynamic_cast<AliAODMCParticle*>(fmcArray->At(labelD0daugh));\r
+                                if(!mcGrandDaughter) continue;\r
+                                Int_t granddaugh_pdg = TMath::Abs(mcGrandDaughter->GetPdgCode());\r
+                                if(granddaugh_pdg==321) isKaon = kTRUE;\r
+                                if(granddaugh_pdg==211) isPion = kTRUE;\r
+                            }\r
+                            if(!isKaon || !isKaon) continue; // skip if not correct decay channel of D0\r
+                        }\r
              \r
-             if(daugh_pdg == 211) {\r
-               isSoftPi = kTRUE;\r
-               daughtercharge = mcDaughter->Charge();\r
-               trackidsoftPi = daugh_label;}\r
-           }\r
-           \r
-           \r
-           if(!isDZero || !isSoftPi) continue; // skip if not correct decay channel\r
-           \r
-           \r
-           // end check decay channel\r
+                        if(daugh_pdg == 211) {\r
+                            isSoftPi = kTRUE;\r
+                            daughtercharge = mcDaughter->Charge();\r
+                            trackidsoftPi = daugh_label;}\r
+                    }\r
+              if(!isDZero || !isSoftPi) continue; // skip if not correct decay channel\r
+          } // end check decay channel\r
            \r
            ptDStar = DStarMC->Pt();\r
            phiDStar = DStarMC->Phi();\r
            etaDStar = DStarMC->Eta();\r
+          \r
+          if(TMath::Abs(etaDStar) > fMaxEtaDStar) continue;\r
            \r
          } // end use pure MC information\r
          \r
-         \r
-         // check if it is a DStar from B\r
-         \r
-         \r
+    \r
+        // getting the number of triggers in the MCtag D* case\r
+        if(fmontecarlo && isDStarMCtag) ((TH1F*)fOutput->FindObject("MCtagPtDStar"))->Fill(ptDStar);\r
          if(fmontecarlo && isDStarMCtag && !isDfromB) ((TH1D*)fOutputMC->FindObject("MCtagPtDStarfromCharm"))->Fill(ptDStar);\r
          if(fmontecarlo && isDStarMCtag && isDfromB) ((TH1D*)fOutputMC->FindObject("MCtagPtDStarfromBeauty"))->Fill(ptDStar);\r
          \r
          \r
          fCorrelator->SetTriggerParticleProperties(ptDStar,phiDStar,etaDStar); // pass to the object the necessary trigger part parameters\r
-         \r
-         \r
          fCorrelator->SetTriggerParticleDaughterCharge(daughtercharge);\r
          \r
          \r
          // ************************************************ CORRELATION ANALYSIS STARTS HERE\r
          \r
          \r
-         \r
-         \r
          Bool_t execPool = fCorrelator->ProcessEventPool();\r
          \r
          \r
@@ -812,19 +750,15 @@ void AliAnalysisTaskDStarCorrelations::UserExec(Option_t *){
              ((TH1D*)fOutput->FindObject("CheckPoolReadiness"))->Fill(2);\r
              isEventMixingFilledSB=kTRUE;\r
             }\r
-            \r
-            \r
          }\r
          \r
          Int_t NofEventsinPool = 1;\r
          if(fmixing) NofEventsinPool = fCorrelator->GetNofEventsInPool();\r
          \r
-         //  if(fmixing) cout << "Nof events in pool = " << NofEventsinPool << endl;\r
          \r
          for (Int_t jMix =0; jMix < NofEventsinPool; jMix++){// loop on events in the pool; if it is SE analysis, stops at one\r
            \r
            Bool_t analyzetracks = fCorrelator->ProcessAssociatedTracks(jMix);\r
-           \r
            if(!analyzetracks) {\r
              AliInfo("AliHFCorrelator::Cannot process the track array");\r
              continue;\r
@@ -832,12 +766,8 @@ void AliAnalysisTaskDStarCorrelations::UserExec(Option_t *){
             \r
             //initialization of variables for correlations with leading particles\r
             Double_t DeltaPhiLeading = -999.;\r
-           Double_t DeltaEtaLeading = -999.;\r
-           //Double_t ptleading = -999.;\r
-            //     Int_t labelleading = -999;\r
-            \r
-            // Int_t crosscheck = (Int_t)((fCorrelator->GetTrackArray())->GetEntriesFast());\r
-           \r
+          Double_t DeltaEtaLeading = -999.;\r
+       \r
            \r
            Int_t NofTracks = fCorrelator->GetNofTracks();\r
             \r
@@ -853,89 +783,91 @@ void AliAnalysisTaskDStarCorrelations::UserExec(Option_t *){
             \r
             Double_t weight;\r
             \r
-           for(Int_t iTrack = 0; iTrack<NofTracks; iTrack++){ // looping on track candidates\r
-             Bool_t runcorrelation = fCorrelator->Correlate(iTrack);\r
-             if(!runcorrelation) continue;\r
+          for(Int_t iTrack = 0; iTrack<NofTracks; iTrack++){ // looping on track candidates\r
+              Bool_t runcorrelation = fCorrelator->Correlate(iTrack);\r
+              if(!runcorrelation) continue;\r
               \r
-             Double_t DeltaPhi = fCorrelator->GetDeltaPhi();\r
-             Double_t DeltaEta = fCorrelator->GetDeltaEta();\r
+              Double_t DeltaPhi = fCorrelator->GetDeltaPhi();\r
+              Double_t DeltaEta = fCorrelator->GetDeltaEta();\r
              \r
-             AliReducedParticle * hadron = fCorrelator->GetAssociatedParticle();\r
-             if(!hadron) {/*cout << "No Hadron" << endl;*/ continue;}\r
-              \r
-             Double_t ptHad = hadron->Pt();\r
-             Double_t phiHad = hadron->Phi();\r
-             Double_t etaHad = hadron->Eta();\r
-             Int_t label = hadron->GetLabel();\r
-             Int_t trackid = hadron->GetID();\r
-             Double_t efficiency = hadron->GetWeight();\r
-              \r
-             weight = 1;\r
-             if(fUseEfficiencyCorrection && efficiency){\r
-               //weight = 1./efficiency;\r
-               weight = DmesonWeight * (1./efficiency);\r
-             }\r
-             // weight = DmesonWeight * (1./efficiency);\r
-              \r
-             phiHad = fCorrelator->SetCorrectPhiRange(phiHad);\r
+              AliReducedParticle * hadron = fCorrelator->GetAssociatedParticle();\r
+              if(!hadron) {/*cout << "No Hadron" << endl;*/ continue;}\r
               \r
+              Double_t ptHad = hadron->Pt();\r
+              Double_t phiHad = hadron->Phi();\r
+              Double_t etaHad = hadron->Eta();\r
+              Int_t label = hadron->GetLabel();\r
+              Int_t trackid = hadron->GetID();\r
+              Double_t efficiency = hadron->GetWeight();\r
               \r
-             if(fFullmode) ((TH2F*)fOutput->FindObject("WeightChecks"))->Fill(ptHad,efficiency);\r
-              \r
-             arraytofill[0] = DeltaPhi;\r
-             arraytofill[1] = DeltaEta;\r
-             arraytofill[2] = ptDStar;\r
-             arraytofill[3] = ptHad;\r
-             arraytofill[4] = poolbin;\r
+              weight = 1;\r
+              if(fUseEfficiencyCorrection && efficiency){\r
+                  weight = DmesonWeight * (1./efficiency);\r
+              }\r
+        \r
+              phiHad = fCorrelator->SetCorrectPhiRange(phiHad);\r
               \r
               \r
+              if(fFullmode) ((TH2F*)fOutput->FindObject("WeightChecks"))->Fill(ptHad,efficiency);\r
               \r
+              arraytofill[0] = DeltaPhi;\r
+              arraytofill[1] = DeltaEta;\r
+              arraytofill[2] = ptDStar;\r
+              arraytofill[3] = ptHad;\r
+              arraytofill[4] = poolbin;\r
+                \r
               \r
-             MCarraytofill[0] = DeltaPhi;\r
-             MCarraytofill[1] = DeltaEta;\r
-             MCarraytofill[2] = ptDStar;\r
-             MCarraytofill[3] = etaDStar;\r
-             MCarraytofill[4] = ptHad;\r
+              MCarraytofill[0] = DeltaPhi;\r
+              MCarraytofill[1] = DeltaEta;\r
+              MCarraytofill[2] = ptDStar;\r
+              MCarraytofill[3] = ptHad;\r
+              MCarraytofill[4] = poolbin;\r
              \r
-             Bool_t isDdaughter = kFALSE;\r
+            \r
              if(fmontecarlo){\r
                if(label<0 && fFullmode) ((TH2D*)fOutputMC->FindObject("TrackLabels"))->Fill(0.,NofTracks);\r
                if(label>=0 && fFullmode) ((TH2D*)fOutputMC->FindObject("TrackLabels"))->Fill(1.,NofTracks);\r
                if(label<0) continue; // skip track with wrong label\r
              }\r
-             if(!fmixing && fReco){ // skip D* Daughetrs if it is reconstruced DStar\r
-               if(trackid == trackiddaugh0) continue;\r
-               if(trackid == trackiddaugh1) continue;\r
-               if(trackid == trackidsoftPi) continue;\r
-             }\r
-             if(!fmixing && !fReco && fmontecarlo){  // skip D* Daughetrs if it is Pure MCDStar\r
-               //      if(label == trackiddaugh0) continue;\r
-               //      if(label == trackiddaugh1) continue;\r
-                    // if(label == trackidsoftPi) continue;\r
-               Int_t hadronlabel = label;\r
-               for(Int_t k=0; k<4;k++){ // go back 4 generations and check the mothers\r
-                 if(DStarLabel<0){ break;}\r
-                 if(hadronlabel<0) { break;}\r
-                 AliAODMCParticle* mcParticle = dynamic_cast<AliAODMCParticle*>(fmcArray->At(hadronlabel));\r
-                 if(!mcParticle) {AliInfo("NO MC PARTICLE"); break;}\r
-                 \r
-                 hadronlabel = mcParticle->GetMother();\r
-                 if(hadronlabel == DStarLabel) isDdaughter = kTRUE;\r
-               }\r
-               \r
+              \r
+               Bool_t isDdaughter = kFALSE;\r
+            // skip the D daughters in the correlation\r
+              if(!fmixing && fReco){\r
+                  if(trackid == trackiddaugh0) continue;\r
+                  if(trackid == trackiddaugh1) continue;\r
+                  if(trackid == trackidsoftPi) continue;\r
+              }\r
+              \r
+              if(!fmixing && !fReco){\r
+                  AliAODMCParticle *part = (AliAODMCParticle*)fmcArray->At(label);\r
+                  if(!part) continue;\r
+                  if(IsDDaughter(DStarMC, part)) continue;\r
+                  cout << "Skipping DStar  daugheter " << endl;\r
+              }\r
+              if(!fmixing && !fReco && fmontecarlo){  // skip D* Daughetrs if it is Pure MCDStar\r
+                    Int_t hadronlabel = label;\r
+                    for(Int_t k=0; k<4;k++){ // go back 4 generations and check the mothers\r
+                        if(DStarLabel<0){ break;}\r
+                        if(hadronlabel<0) { break;}\r
+                        AliAODMCParticle* mcParticle = dynamic_cast<AliAODMCParticle*>(fmcArray->At(hadronlabel));\r
+                        if(!mcParticle) {AliInfo("NO MC PARTICLE"); break;}\r
+                        hadronlabel = mcParticle->GetMother();\r
+                        if(hadronlabel == DStarLabel) isDdaughter = kTRUE;\r
+                    }\r
                \r
-               if(isDdaughter && fDebugLevel){\r
-                 std::cout << "It is the D* daughter with label " << label << std::endl;\r
-                 std::cout << "Daughter 0 label = " << trackiddaugh0 << std::endl;\r
-                 std::cout << "Daughter 1 label = " << trackiddaugh1 << std::endl;\r
-                 std::cout << "Soft pi label = " << trackidsoftPi << std::endl;\r
-               }\r
+                  if(isDdaughter && fDebugLevel){\r
+                      std::cout << "It is the D* daughter with label " << label << std::endl;\r
+                      std::cout << "Daughter 0 label = " << trackiddaugh0 << std::endl;\r
+                      std::cout << "Daughter 1 label = " << trackiddaugh1 << std::endl;\r
+                      std::cout << "Soft pi label = " << trackidsoftPi << std::endl;\r
+                  }\r
                     \r
                                        if(isDdaughter) continue; // skip if track is from DStar\r
                                }\r
                 \r
-                               // from here on it is up to the user to decide what object to fill\r
+                               // ================ FILL CORRELATION HISTOGRAMS ===============================\r
                                \r
+                // monte carlo case (mc tagged D*)\r
                                if((fmontecarlo && isDStarMCtag) || (fmontecarlo && !fReco)){ // check correlations of MC tagged DStars in MonteCarlo\r
                     \r
                                        Bool_t* PartSource = fCuts2->IsMCpartFromHF(label,fmcArray); // check source of associated particle (hadron/kaon/K0)\r
@@ -952,48 +884,41 @@ void AliAnalysisTaskDStarCorrelations::UserExec(Option_t *){
                     ((THnSparseF*)fOutputMC->FindObject("MCDStarCorrelationsDStarHadron"))->Fill(MCarraytofill);\r
                     \r
                     delete[] PartSource;\r
-                    \r
                                }\r
+              \r
+                // Good DStar canidates\r
                                if(isInPeak)  {\r
                     \r
                                        if(!fReco && TMath::Abs(etaHad)>0.8) continue; // makes sure you study the correlation on MC  truth only if particles are in acceptance\r
-                    \r
-                                       if(fselect==1)  ((THnSparseF*)fOutput->FindObject("CorrelationsDStarHadron"))->Fill(arraytofill,weight);\r
+                    if(fselect==1)  ((THnSparseF*)fOutput->FindObject("CorrelationsDStarHadron"))->Fill(arraytofill,weight);\r
                     if(fselect==2)  ((THnSparseF*)fOutput->FindObject("CorrelationsDStarKaon"))->Fill(arraytofill,weight);\r
                     if(fselect==3)  ((THnSparseF*)fOutput->FindObject("CorrelationsDStarKZero"))->Fill(arraytofill,weight);\r
                                        \r
                                    ((TH3F*)fOutput->FindObject("PhiEtaPart"))->Fill(phiHad,etaHad,MultipOrCent);\r
                                        if(fFullmode)((TH1D*)fOutput->FindObject("TracksInPeakSpectra"))->Fill(ptHad);\r
-                    \r
-                                       //counterPeak++; // count tracks per peak per event\r
-                    \r
+                                    \r
                                }\r
+              \r
+                // Sidebands from D0 candidate\r
                                if(isInDZeroSideBand) {\r
                                        \r
                                        if(!fReco && TMath::Abs(etaHad)>0.8) continue; // makes sure you study the correlation on MC  truth only if particles are in acceptance\r
-                    \r
-                    \r
                     if(fselect==1)  ((THnSparseF*)fOutput->FindObject("DZeroBkgCorrelationsDStarHadron"))->Fill(arraytofill,weight);\r
                     if(fselect==2)  ((THnSparseF*)fOutput->FindObject("DZeroBkgCorrelationsDStarKaon"))->Fill(arraytofill,weight);\r
                     if(fselect==3)  ((THnSparseF*)fOutput->FindObject("DZeroBkgCorrelationsDStarKZero"))->Fill(arraytofill,weight);\r
                     \r
                                        if(fFullmode) ((TH1D*)fOutput->FindObject("TracksInSBSpectra"))->Fill(ptHad);\r
                     \r
-                    \r
-                                       //counterSB++;\r
-                               }\r
+                }\r
+              \r
+              // Sidebands from D* candidate\r
                 if(isInDStarSideBand) {\r
                                        \r
                                        if(!fReco && TMath::Abs(etaHad)>0.8) continue; // makes sure you study the correlation on MC  truth only if particles are in acceptance\r
-                    \r
-                    \r
                     if(fselect==1 && fFullmode)  ((THnSparseF*)fOutput->FindObject("DStarBkgCorrelationsDStarHadron"))->Fill(arraytofill,weight);\r
                     if(fselect==2 && fFullmode)  ((THnSparseF*)fOutput->FindObject("DStarBkgCorrelationsDStarKaon"))->Fill(arraytofill,weight);\r
                     if(fselect==3 && fFullmode)  ((THnSparseF*)fOutput->FindObject("DStarBkgCorrelationsDStarKZero"))->Fill(arraytofill,weight);\r
-                    \r
-                    \r
-                    \r
-                                       //counterSB++;\r
+\r
                                }\r
                 \r
                 \r
@@ -1006,27 +931,28 @@ void AliAnalysisTaskDStarCorrelations::UserExec(Option_t *){
             if(isInPeak && fFullmode) ((TH3D*)fOutput->FindObject("LeadingCand"))->Fill(DeltaPhiLeading,ptDStar,DeltaEtaLeading);\r
                        if(isInDZeroSideBand && fFullmode) ((TH3D*)fOutput->FindObject("LeadingSB"))->Fill(DeltaPhiLeading,ptDStar,DeltaEtaLeading);\r
             \r
-                       if(fmontecarlo && isDStarMCtag){\r
-                // Bool_t* LeadPartSource = fCuts2->IsMCpartFromHF(labelleading,fmcArray);\r
-                //   FillMCTagLeadingCorrelations(ptDStar,DeltaPhiLeading,DeltaEtaLeading,LeadPartSource);\r
-                \r
-            }\r
-            \r
                } // end loop on events in the pool\r
         \r
        }// end loop on D* candidates\r
        \r
     \r
\r
+        // check events with D* or SB canidates\r
+    if(fFullmode && EventHasDStarCandidate)  ((TH2F*)fOutput->FindObject("EventPropsCheckifDStar"))->Fill(MultipOrCent,zVtxPosition);\r
+     if(fFullmode && EventHasDZeroSideBandCandidate)  ((TH2F*)fOutput->FindObject("EventPropsCheckifDZeroSB"))->Fill(MultipOrCent,zVtxPosition);\r
+    \r
+    if(fFullmode && EventHasDStarCandidate)  ((TH2F*)fOutput->FindObject("EventPropsCheckifDStarSB"))->Fill(MultipOrCent,zVtxPosition);\r
+    \r
+    \r
        if(fFullmode) ((TH2F*)fOutput->FindObject("DStarCandidates"))->Fill(nOfDStarCandidates,MultipOrCent);\r
     if(fFullmode) ((TH2F*)fOutput->FindObject("SBCandidates"))->Fill(nOfSBCandidates,MultipOrCent);\r
        \r
+    // update event pool\r
     Bool_t updated = fCorrelator->PoolUpdate();\r
        \r
     // if(updated) EventMixingChecks(aodEvent);\r
        if(!updated) AliInfo("Pool was not updated");\r
        \r
-       \r
-       \r
     \r
 } //end the exec\r
 \r
@@ -1047,7 +973,29 @@ void AliAnalysisTaskDStarCorrelations::Terminate(Option_t*)
 \r
        return;\r
 }\r
-\r
+//_____________________________________________________\r
+Bool_t AliAnalysisTaskDStarCorrelations::IsDDaughter(AliAODMCParticle* d, AliAODMCParticle* track) const {\r
+    \r
+    //Daughter removal in MCKine case\r
+    Bool_t isDaughter = kFALSE;\r
+    Int_t labelD0 = d->GetLabel();\r
+    \r
+    Int_t mother = track->GetMother();\r
+    \r
+    //Loop on the mothers to find the D0 label (it must be the trigger D0, not a generic D0!)\r
+    while (mother > 0){\r
+        AliAODMCParticle* mcMoth = dynamic_cast<AliAODMCParticle*>(fmcArray->At(mother)); //it's the mother of the track!\r
+        if (mcMoth){\r
+            if (mcMoth->GetLabel() == labelD0) isDaughter = kTRUE;\r
+            mother = mcMoth->GetMother(); //goes back by one\r
+        } else{\r
+            AliError("Failed casting the mother particle!");\r
+            break;\r
+        }\r
+    }\r
+    \r
+    return isDaughter;\r
+}\r
 \r
 //_____________________________________________________\r
 void AliAnalysisTaskDStarCorrelations::DefineThNSparseForAnalysis(){\r
@@ -1076,9 +1024,10 @@ void AliAnalysisTaskDStarCorrelations::DefineThNSparseForAnalysis(){
     Double_t binLowLimitSparse[5]={lowcorrbin,-1.6, 0,  0,-0.5};\r
     Double_t binUpLimitSparse[5]= {upcorrbin,  1.6,30,25,nbinsPool-0.5};\r
   \r
-    Int_t MCnbinsSparse[7]={nbinscorr,40,50,40,250,10,2};\r
-    Double_t MCbinLowLimitSparse[7]={lowcorrbin,-2,0.,-1,0,0.5,-0.5};\r
-    Double_t MCbinUpLimitSparse[7]={upcorrbin,2,50,1,25,9.5,1.5};\r
+    Int_t MCnbinsSparse[7]=         {nbinscorr,   32,30,250,nbinsPool,10,2};    \r
+    Double_t MCbinLowLimitSparse[7]={lowcorrbin,-1.6, 0,  0,-0.5,-0.5,-0.5};      //  \r
+    Double_t MCbinUpLimitSparse[7]= {upcorrbin,  1.6,30,25,nbinsPool-0.5,9.5,1.5};\r
+    \r
     TString sparsename = "CorrelationsDStar";\r
     if(fselect==1) sparsename += "Hadron";\r
        if(fselect==2) sparsename += "Kaon";\r
@@ -1163,10 +1112,10 @@ void AliAnalysisTaskDStarCorrelations::DefineHistoForAnalysis(){
        \r
        //TH2F *DeltaInvMass = new TH2F("DeltaInvMass","K#pi#pi - K#pi invariant mass distribution",300,0,30,750,0.1,0.2);\r
        //if(!fmixing) fOutput->Add(DeltaInvMass);\r
-    TH3F *DeltaInvMass = new TH3F("DeltaInvMass","K#pi#pi - K#pi invariant mass distribution",30,0,30,750,0.1,0.2,100,0,100);\r
+    TH2F *DeltaInvMass = new TH2F("DeltaInvMass","K#pi#pi - K#pi invariant mass distribution; D* p_{T}; #DeltaInvMass",30,0,30,750,0.1,0.2);\r
        if(!fmixing) fOutput->Add(DeltaInvMass);\r
        \r
-       TH3F *bkgDeltaInvMass = new TH3F("bkgDeltaInvMass","K#pi#pi - K#pi invariant mass distribution",30,0,30,750,0.1,0.2,100,0,100);\r
+       TH2F *bkgDeltaInvMass = new TH2F("bkgDeltaInvMass","K#pi#pi - K#pi invariant mass distribution; SB p_{T}; #DeltaInvMass",30,0,30,750,0.1,0.2);\r
        if(!fmixing) fOutput->Add(bkgDeltaInvMass);\r
     \r
     DeltaInvMass->Sumw2();\r
@@ -1216,6 +1165,12 @@ void AliAnalysisTaskDStarCorrelations::DefineHistoForAnalysis(){
     TH2F * EventPropsCheckifDStar = new TH2F("EventPropsCheckifDStar","Properties of the event with D* Cand; Multiplicity; ZVtx Position [cm]",1000,0,1000,40,-10,10);\r
        if(fFullmode)fOutput->Add(EventPropsCheckifDStar);\r
     \r
+    TH2F * EventPropsCheckifDZeroSB = new TH2F("EventPropsCheckifDZeroSB","Properties of the event with D* Cand; Multiplicity; ZVtx Position [cm]",1000,0,1000,40,-10,10);\r
+       if(fFullmode)fOutput->Add(EventPropsCheckifDZeroSB);\r
+    \r
+    TH2F * EventPropsCheckifDStarSB = new TH2F("EventPropsCheckifDStarSB","Properties of the event with D* Cand; Multiplicity; ZVtx Position [cm]",1000,0,1000,40,-10,10);\r
+       if(fFullmode)fOutput->Add(EventPropsCheckifDStarSB);\r
+    \r
        \r
     TH2F * WeightChecks = new TH2F("WeightChecks","Checks on efficiency correction",300,0,30,100,0.005,1.005);\r
        if(fFullmode)fOutput->Add(WeightChecks);\r
index ade088c547c83dc7569d294c08edd5e6be710095..bf0cb3fc8893484a8f96f245f487eec255d9eab9 100644 (file)
@@ -58,6 +58,8 @@ class AliAnalysisTaskDStarCorrelations : public AliAnalysisTaskSE
  public :\r
   \r
   enum CollSyst {pp,pA,AA};\r
+  enum DEffVariable{kNone,kMult,kCentr,kRapidity,kEta};\r
+  \r
   AliAnalysisTaskDStarCorrelations();\r
   AliAnalysisTaskDStarCorrelations(const Char_t* name,AliRDHFCutsDStartoKpipi* cuts, AliHFAssociatedTrackCuts *AsscCuts, AliAnalysisTaskDStarCorrelations::CollSyst syst,Bool_t mode);\r
   virtual ~AliAnalysisTaskDStarCorrelations();\r
@@ -74,7 +76,7 @@ class AliAnalysisTaskDStarCorrelations : public AliAnalysisTaskSE
   void DefineThNSparseForAnalysis();\r
   void DefineHistoForAnalysis();\r
   void EnlargeDZeroMassWindow();\r
-  \r
+    Bool_t IsDDaughter(AliAODMCParticle* d, AliAODMCParticle* track) const ;\r
   \r
   // checker for event mixing\r
   void EventMixingChecks(AliAODEvent * AOD); \r
@@ -84,6 +86,7 @@ class AliAnalysisTaskDStarCorrelations : public AliAnalysisTaskSE
   void SetCorrelator(Int_t l) {fselect = l;} // select 1 for hadrons, 2 for Kaons, 3 for Kzeros\r
   void SetUseDisplacement(Int_t m) {fDisplacement=m;} // select 0 for no displ, 1 for abs displ, 2 for d0/sigma_d0\r
   void SetCollSys(CollSyst system){fSystem=system;} // select between pp (kFALSE) or PbPb (kTRUE)\r
+  void SetEfficiencyVariable(DEffVariable var){fEfficiencyVariable = var;} // set the efficiency variable to use\r
   void SetLevelOfDebug(Int_t debug){fDebugLevel=debug;} // set debug level\r
   void SetUseReconstruction(Bool_t reco){fReco = reco;}\r
   void SetDMesonSigmas(Float_t DStarWin, Float_t D0Win, Float_t SBmin, Float_t SBmax){\r
@@ -96,12 +99,15 @@ class AliAnalysisTaskDStarCorrelations : public AliAnalysisTaskSE
 \r
   void SetUseEfficiencyCorrection(Bool_t correction){fUseEfficiencyCorrection = correction;} // setter for using the single track efficiency correction\r
   void SetUseDmesonEfficiencyCorrection(Bool_t correction){fUseDmesonEfficiencyCorrection = correction;} // setter for using the single track efficiency correction\r
+  void SetUseHadronicChannelAtKineLevel (Bool_t use){fUseHadronicChannelAtKineLevel = use;}\r
+    \r
   void SetDim(){fDim = 4;\r
     fDMesonSigmas = new Float_t[4];}\r
   void SetDeffMapvsPt(TH1D * map){fDeffMapvsPt = map;}\r
   void SetDeffMapvsPtvsMult(TH2D * map){fDeffMapvsPtvsMult = (TH2D*)map;}\r
   void SetDeffMapvsPtvsMultvsEta(TH2D * map){fDeffMapvsPtvsEta = map;}\r
   void SetNofPhiBins(Int_t nbins){fPhiBins = nbins;}\r
+    void SetMaxDStarEta(Double_t eta){fMaxEtaDStar = eta;}\r
   \r
   \r
 \r
@@ -122,18 +128,23 @@ private:
   Bool_t fmixing;// switch for event mixing\r
   Bool_t fFullmode;\r
   CollSyst fSystem; // pp, pPb or PbPb\r
+  DEffVariable  fEfficiencyVariable; // set second variable to study efficiency (mult, centr, y, eta)\r
   Bool_t fReco; // use reconstruction or MC truth\r
   Bool_t fUseEfficiencyCorrection; // boolean variable to use or not the efficiency correction\r
   Bool_t fUseDmesonEfficiencyCorrection; // boolean flag for the use of Dmeson efficiency correction\r
-    Bool_t fUseCentrality;// boolean to switch in between centrality or multiplicity\r
+  Bool_t fUseCentrality;// boolean to switch in between centrality or multiplicity\r
+  Bool_t fUseHadronicChannelAtKineLevel; //\r
\r
   Int_t fPhiBins;\r
   Int_t fEvents; //! number of event\r
   Int_t fDebugLevel; //! debug level\r
   Int_t fDisplacement; // set 0 for no displacement cut, 1 for absolute d0, 2 for d0/sigma_d0\r
   Int_t fDim;//\r
-    Int_t fNofPtBins;\r
+  Int_t fNofPtBins;\r
+     Double_t fMaxEtaDStar;\r
   Float_t *fDMesonSigmas;//[fDim]\r
- Float_t * fD0Window;  //[fNofPtBins]\r
+  Float_t * fD0Window;  //[fNofPtBins]\r
+   \r
   \r
   \r
   \r
@@ -148,7 +159,7 @@ private:
   TH2D * fDeffMapvsPtvsMult; // histo for Deff mappin\r
   TH2D * fDeffMapvsPtvsEta; // histo for Deff mappin\r
   \r
-  ClassDef(AliAnalysisTaskDStarCorrelations,5); // class for D meson correlations\r
+  ClassDef(AliAnalysisTaskDStarCorrelations,6); // class for D meson correlations\r
   \r
 };\r
 \r
index 394065736a3ac1492650e92baf492e149bd897c7..49a9cfeb19d8b616f795e16fac04f4ca8fd74006 100644 (file)
@@ -3,20 +3,15 @@
 \r
 /* $Id$ */\r
 \r
-AliAnalysisTaskDStarCorrelations *AddTaskDStarCorrelations(AliAnalysisTaskDStarCorrelations::CollSyst syst,\r
-                                                                     Bool_t theMCon, Bool_t mixing, Bool_t UseReco = kTRUE, Bool_t fullmode = kFALSE ,Bool_t UseEffic = kFALSE, Bool_t UseDEffic = kFALSE ,\r
-                                                                     Int_t trackselect =1, Int_t usedispl =0, Int_t nbins, Float_t DStarSigma, Float_t D0Sigma, Float_t D0SBSigmaLow, Float_t D0SBSigmaHigh, \r
+AliAnalysisTaskDStarCorrelations *AddTaskDStarCorrelations(AliAnalysisTaskDStarCorrelations::CollSyst syst, \r
+                                                            Bool_t theMCon, Bool_t mixing, Bool_t UseReco=kTRUE,Bool_t UseHadChannelinMC,Bool_t fullmode = kFALSE,Bool_t UseEffic=kFALSE,Bool_t UseDEffic = kFALSE,\r
+                                                        AliAnalysisTaskDStarCorrelations::DEffVariable var,\r
+                                                            Int_t trackselect =1, Int_t usedispl =0, Int_t nbins, Float_t DStarSigma, Float_t D0Sigma, Float_t D0SBSigmaLow, Float_t D0SBSigmaHigh, Float_t eta,\r
                                                                      TString DStarCutsFile, TString TrackCutsFile,\r
                                                                      Int_t tasknumber = 0)\r
 {\r
 \r
-    \r
-    //Float_t sigmasval[]={DStarSigma,D0Sigma,D0SBSigmaLow,D0SBSigmaHigh};\r
-    //Float_t * sigmas = sigmasval;//new Float_t[4];\r
-    //sigma[0] = DStarSigma;\r
-    //sigma[1] = D0Sigma;\r
-    //sigma[2] = D0SBSigmaLow;\r
-    //sigma[3] = D0SBSigmaHigh;\r
\r
     \r
   AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();\r
   if (!mgr) {\r
@@ -28,8 +23,8 @@ AliAnalysisTaskDStarCorrelations *AddTaskDStarCorrelations(AliAnalysisTaskDStarC
     cout << "Set Inputs : " << endl;\r
     cout << " " << endl;\r
     if(syst == AliAnalysisTaskDStarCorrelations::pp) cout << "Running on pp @ 7 TeV" << endl;\r
-    if(syst == AliAnalysisTaskDStarCorrelations::pA) cout << "Running on pA @ 5.02 TeV" << endl;\r
-    if(syst == AliAnalysisTaskDStarCorrelations::AA) cout << "Running on AA @ 2.76 TeV" << endl;\r
+    if(syst == AliAnalysisTaskDStarCorrelations::pA) cout << "Running on pPb @ 5.02 TeV" << endl;\r
+    if(syst == AliAnalysisTaskDStarCorrelations::AA) cout << "Running on PbPb @ 2.76 TeV" << endl;\r
     \r
     if(theMCon) cout << "Analysis on MonteCarlo" << endl;\r
     else cout << "Analysis on Data" << endl;\r
@@ -48,6 +43,13 @@ AliAnalysisTaskDStarCorrelations *AddTaskDStarCorrelations(AliAnalysisTaskDStarC
     \r
     if(UseDEffic) cout << "Using Dmeson efficiency map" << endl;\r
     else cout << "Not Using Dmeson efficiency map " << endl;\r
+    \r
\r
+    if(var == AliAnalysisTaskDStarCorrelations::kNone) cout << "Applying D Efficiency map vs pT " << endl;\r
+    if(var == AliAnalysisTaskDStarCorrelations::kMult) cout << "Applying D Efficiency map vs pT vs Multiplicity" << endl;\r
+    if(var == AliAnalysisTaskDStarCorrelations::kCentr) cout << "Applying D Efficiency map vs pT vs Centrality" << endl;\r
+    if(var == AliAnalysisTaskDStarCorrelations::kRapidity) cout << "Applying D Efficiency map vs pT vs Rapidity" << endl;\r
+    if(var == AliAnalysisTaskDStarCorrelations::kEta) cout << "Applying D Efficiency map vs pT vs Eta" << endl;\r
 \r
     if(trackselect == 1) cout << "Correlating with hadrons" << endl;\r
     if(trackselect == 2) cout << "Correlating with kaons" << endl;\r
@@ -142,12 +144,13 @@ AliAnalysisTaskDStarCorrelations *AddTaskDStarCorrelations(AliAnalysisTaskDStarC
        if(!theMCon) {\r
                printf("Analysis on Data - reconstruction only!");\r
                UseReco = kTRUE;\r
+        printf("Analysis on Data - hadronic channel only!");\r
+               UseHadChannelinMC = kFALSE;\r
        }\r
-       \r
     \r
-   // cout << "Adding efficiency map to Assoc track cut object \n" << endl;\r
-  //  if(effMap) task->SetDeffMapvsPt(effMap);\r
-  //  if(effMap2d) task->SetDeffMapvsPtvsMult(effMap2d);\r
+    \r
+\r
+       \r
     \r
     task->SetNofPhiBins(nbins);\r
        task->SetMonteCarlo(theMCon);\r
@@ -162,6 +165,10 @@ AliAnalysisTaskDStarCorrelations *AddTaskDStarCorrelations(AliAnalysisTaskDStarC
     //task->SetDMesonSigmas(sigmas);\r
     task->SetUseEfficiencyCorrection(UseEffic);\r
     task->SetUseDmesonEfficiencyCorrection(UseDEffic);\r
+    \r
+    task->SetEfficiencyVariable(var);\r
+    task->SetMaxDStarEta(eta);\r
+    task->SetUseHadronicChannelAtKineLevel(UseHadChannelinMC);\r
        \r
 \r
        if(trackselect == 1) Info(" AliAnalysisTaskDStarCorrelations","Correlating D* with charged hadrons \n");\r
@@ -240,13 +247,21 @@ AliAnalysisTaskDStarCorrelations *AddTaskDStarCorrelations(AliAnalysisTaskDStarC
     }\r
     \r
     if(UseDEffic){\r
-        outputfile += "DEffY_";\r
-               outputfileMC += "DEffY_";\r
-               contname += "DEffY_";\r
-               contname2 += "DEffY_";\r
-               cutname += "DEffY_";\r
-               cutname2 += "DEffY_";\r
-               counter+= "DEffY_";\r
+        TString string = "DEffY_";\r
+        \r
+        if(var == AliAnalysisTaskDStarCorrelations::kNone) string += "vsPt_";\r
+        if(var == AliAnalysisTaskDStarCorrelations::kMult) string += "vsPtMult_";\r
+        if(var == AliAnalysisTaskDStarCorrelations::kCentr) string += "vsPCentrt_";\r
+        if(var == AliAnalysisTaskDStarCorrelations::kRapidity) string += "vsPtY_";\r
+        if(var == AliAnalysisTaskDStarCorrelations::kEta) string += "vsPtEta_";\r
+        \r
+        outputfile += string;\r
+               outputfileMC += string;\r
+               contname += string;\r
+               contname2 += string;\r
+               cutname += string;\r
+               cutname2 += string;\r
+               counter+= string;\r
     }\r
     \r
     if(!UseDEffic){\r
@@ -296,8 +311,10 @@ AliAnalysisTaskDStarCorrelations *AddTaskDStarCorrelations(AliAnalysisTaskDStarC
        TString reco = "";\r
        \r
        if(UseReco) reco = "_reco";\r
-       if(!UseReco) reco = "_MCTruth";\r
-       \r
+       if(!UseReco) {\r
+        if(UseHadChannelinMC) reco = "_MCTruthHadChan";\r
+        if(!UseHadChannelinMC) reco = "_MCTruthAllChan";\r
+       }\r
        outputfile += reco;\r
        outputfileMC += reco;\r
        cutname += reco;\r