]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - PWGLF/RESONANCES/macros/mini/ConfigD0.C
Some updates + 1 bug fix (thanks to Massimo):
[u/mrichter/AliRoot.git] / PWGLF / RESONANCES / macros / mini / ConfigD0.C
index f7862dcabedb36ba417a0131e1849b31b31c53a6..9a48f659306ac2d3fdf93d560173541061c597ee 100644 (file)
@@ -1,5 +1,5 @@
-/
-// *** Configuration script for phi->KK analysis with 2010 runs ***
+//
+// *** Configuration script for D0 analysis ***
 // 
 // A configuration script for RSN package needs to define the followings:
 //
@@ -12,7 +12,8 @@ Bool_t ConfigD0
 (  
    AliRsnMiniAnalysisTask *task, 
    Bool_t                  isPP,
-   Bool_t                  isMC,  
+   Bool_t                  isMC,
+   Bool_t                  monitor = kTRUE,  
    Float_t                nsigmaTPCPi = 3.0,
    Float_t                nsigmaTPCKa = 3.0,
    Float_t                nsigmaTOFPi = 2.0,
@@ -22,6 +23,7 @@ Bool_t ConfigD0
    Float_t                trackDCAcutMin = 0.0,
    Float_t                trackDCAZcutMax = 2.0,
    Int_t                  NTPCcluster = 70,
+   Double_t                NTPCcrratio = 0.8,
    Int_t                  minSPDclt = 0,
    Double_t                minpt = 0.15,
    Short_t                        maxSisters = 2,
@@ -31,6 +33,7 @@ Bool_t ConfigD0
    Bool_t                  ptdepPIDcut = kFALSE,
    Bool_t                         checkFeedDown = kTRUE,
    Bool_t                         checkQuark = kTRUE,
+   Bool_t                         doCalculationInMC = kTRUE,
    UShort_t                       originDselection = 0,
    Float_t                 mineta = -0.8,
    Float_t                 maxeta = 0.8,
@@ -60,6 +63,7 @@ Bool_t ConfigD0
    
    // integrated pion cut
    AliRsnCutDaughterD0 *cutPi = new AliRsnCutDaughterD0("cutPionForD0", AliPID::kPion);
+   //cutPi->SetNoPID(kTRUE);
    cutPi->SetTPCPionPIDCut(nsigmaTPCPi);
    cutPi->SetTOFPionPIDCut(nsigmaTOFPi);
    cutPi->SetPtDependentPIDCut(ptdepPIDcut);
@@ -69,15 +73,18 @@ Bool_t ConfigD0
    if(maxDCAcutFixed)cutQuality->SetDCARmax(trackDCAcutMax);            
    else cutQuality->SetDCARPtFormula(formula);
    if(minDCAcutFixed) cutQuality->SetDCARmin(trackDCAcutMin);
-   else cutQuality->SetDCARPtFormulaMin(formulaMin); 
-   cutQuality->SetTPCminNClusters(NTPCcluster);
+   else cutQuality->SetDCARPtFormulaMin(formulaMin);
+   cutQuality->SetTPCminNClusters(NTPCcluster); 
+   //if(!isPP)cutQuality->SetTPCminNClusters(NTPCcluster);
+   //if(isPP)cutQuality->SetMinNCrossedRowsTPC(NTPCcluster,kTRUE);
+   //if(isPP)cutQuality->SetMinNCrossedRowsOverFindableClsTPC(NTPCcrratio,kTRUE);
    cutQuality->SetPtRange(minpt,1E20);
    cutQuality->SetEtaRange(mineta, maxeta);
    cutQuality->SetDCAZmax(trackDCAZcutMax);
    cutQuality->SetSPDminNClusters(minSPDclt);
    cutQuality->SetITSminNClusters(0);
-   cutQuality->SetITSmaxChi2(1E+20);
-   cutQuality->SetTPCmaxChi2(4.0);
+   cutQuality->SetITSmaxChi2(1E20);
+   cutQuality->SetTPCmaxChi2(1E20);
    cutQuality->SetRejectKinkDaughters();
    cutQuality->Print();
                 
@@ -94,6 +101,7 @@ Bool_t ConfigD0
    
    // integrated kaon cut
    AliRsnCutDaughterD0 *cutK = new AliRsnCutDaughterD0("cutKaonForD0", AliPID::kKaon);
+   //cutK->SetNoPID(kTRUE);
    cutK->SetTPCKaonPIDCut(nsigmaTPCKa);
    cutK->SetTOFKaonPIDCut(nsigmaTOFKa);
    cutK->SetPtDependentPIDCut(ptdepPIDcut);    
@@ -105,13 +113,16 @@ Bool_t ConfigD0
    if(minDCAcutFixed) cutQuality->SetDCARmin(trackDCAcutMin);
    else cutQuality->SetDCARPtFormulaMin(formulaMin);
    cutQuality->SetTPCminNClusters(NTPCcluster);
+   //if(!isPP)cutQuality->SetTPCminNClusters(NTPCcluster);
+   //if(isPP)cutQuality->SetMinNCrossedRowsTPC(NTPCcluster,kTRUE);
+   //if(isPP)cutQuality->SetMinNCrossedRowsOverFindableClsTPC(NTPCcrratio,kTRUE);
    cutQuality->SetPtRange(minpt,1E20);
    cutQuality->SetEtaRange(mineta, maxeta);
    cutQuality->SetDCAZmax(trackDCAZcutMax);
    cutQuality->SetSPDminNClusters(minSPDclt);
    cutQuality->SetITSminNClusters(0);
-   cutQuality->SetITSmaxChi2(1E+20);
-   cutQuality->SetTPCmaxChi2(4.0);
+   cutQuality->SetITSmaxChi2(1E20);
+   cutQuality->SetTPCmaxChi2(1E20);
    cutQuality->SetRejectKinkDaughters();
    cutQuality->Print();
        
@@ -124,6 +135,84 @@ Bool_t ConfigD0
    // add to task
    Int_t iCutK = task->AddTrackCuts(cutSetK);
    
+   
+   
+   
+   
+   ////////////////////////////////////////////////////////////////////////////////////////////////
+   // Cut set for mothers -- To be used only for the efficiency evaluation when using the charm enriched sample
+   /*
+   AliRsnCutDaughterD0 *cutPi_mother = new AliRsnCutDaughterD0("cutPionForD0_MC", AliPID::kPion);
+   cutPi_mother->SetIsCheckOnMother(kTRUE);
+   cutPi_mother->SetNoPID(kTRUE);
+   cutPi_mother->SetTPCPionPIDCut(1E20);
+   cutPi_mother->SetTOFPionPIDCut(1E20);
+   cutPi_mother->SetPtDependentPIDCut(kFALSE);
+   AliRsnCutTrackQuality *cutQuality = (AliRsnCutTrackQuality*) cutPi_mother->CutQuality();
+   cutQuality->SetCheckOnlyFilterBit(kFALSE);
+   cutQuality->SetAODTestFilterBit(-1);
+   if(maxDCAcutFixed)cutQuality->SetDCARmax(1E20);              
+   else cutQuality->SetDCARPtFormula("");
+   if(minDCAcutFixed) cutQuality->SetDCARmin(0);
+   else cutQuality->SetDCARPtFormulaMin(""); 
+   if(!isPP)cutQuality->SetTPCminNClusters(0);
+   if(isPP)cutQuality->SetMinNCrossedRowsTPC(0,kTRUE);
+   if(isPP)cutQuality->SetMinNCrossedRowsOverFindableClsTPC(0,kTRUE);
+   cutQuality->SetPtRange(0,1E20);
+   cutQuality->SetEtaRange(-1E20, 1E20);
+   cutQuality->SetDCAZmax(1E20);
+   cutQuality->SetSPDminNClusters(0);
+   cutQuality->SetITSminNClusters(0);
+   cutQuality->SetITSmaxChi2(1E20);
+   cutQuality->SetTPCmaxChi2(1E20);
+   cutQuality->SetRejectKinkDaughters();
+   cutQuality->Print();
+   
+   
+   // cut set
+   AliRsnCutSet *cutSetPi_mother = new AliRsnCutSet("setPionD0_mother", AliRsnTarget::kDaughter);
+   cutSetPi_mother->AddCut(cutPi_mother);
+   cutSetPi_mother->SetCutScheme(cutPi_mother->GetName());
+   // add to task
+   Int_t iCutPi_mother = task->AddTrackCuts(cutSetPi_mother);
+   
+   
+   AliRsnCutDaughterD0 *cutK_mother = new AliRsnCutDaughterD0("cutKaonForD0_MC", AliPID::kKaon);
+   cutK_mother->SetIsCheckOnMother(kTRUE);
+   cutK_mother->SetNoPID(kTRUE);
+   cutK_mother->SetTPCKaonPIDCut(1E20);
+   cutK_mother->SetTOFKaonPIDCut(1E20);
+   cutK_mother->SetPtDependentPIDCut(kFALSE);  
+   AliRsnCutTrackQuality *cutQuality = (AliRsnCutTrackQuality*) cutK_mother->CutQuality();
+   cutQuality->SetCheckOnlyFilterBit(kFALSE);
+   cutQuality->SetAODTestFilterBit(-1);
+   if(maxDCAcutFixed)cutQuality->SetDCARmax(1E20);              
+   else cutQuality->SetDCARPtFormula("");
+   if(minDCAcutFixed) cutQuality->SetDCARmin(0);
+   else cutQuality->SetDCARPtFormulaMin("");
+   if(!isPP)cutQuality->SetTPCminNClusters(0);
+   if(isPP)cutQuality->SetMinNCrossedRowsTPC(0,kTRUE);
+   if(isPP)cutQuality->SetMinNCrossedRowsOverFindableClsTPC(0,kTRUE);
+   cutQuality->SetPtRange(0,1E20);
+   cutQuality->SetEtaRange(-1E20, 1E20);
+   cutQuality->SetDCAZmax(1E20);
+   cutQuality->SetSPDminNClusters(0);
+   cutQuality->SetITSminNClusters(0);
+   cutQuality->SetITSmaxChi2(1E20);
+   cutQuality->SetTPCmaxChi2(1E20);
+   cutQuality->SetRejectKinkDaughters();
+   cutQuality->Print();
+   
+   
+   // cut set
+   AliRsnCutSet *cutSetK_mother = new AliRsnCutSet("setKaonD0_mother", AliRsnTarget::kDaughter);
+   cutSetK_mother->AddCut(cutK_mother);
+   cutSetK_mother->SetCutScheme(cutK_mother->GetName());
+   // add to task
+   Int_t iCutK_mother = task->AddTrackCuts(cutSetK_mother);
+   */
+   
+   ////////////////////////////////////////////////////////////////////////////////////////////////
   
   // -- Values ------------------------------------------------------------------------------------
   /* invariant mass     */ Int_t imID       = task->CreateValue(AliRsnMiniValue::kInvMass, kFALSE);
@@ -148,17 +237,21 @@ Bool_t ConfigD0
    // [1] = mixing
    // [2] = like ++
    // [3] = like --
-   Bool_t   use     [8] = { 1      ,  1       ,  1      ,  1       ,  1        ,  1        ,  1       ,  1       };
-   Bool_t   useIM   [8] = { 1      ,  1       ,  1      ,  1       ,  1        ,  1        ,  1       ,  1       };
-   TString  name    [8] = {"Unlike1", "Unlike2", "Mixing1", "Mixing2", "RotateK1", "RotateK2", "LikePP" , "LikeMM" };
-   TString  comp    [8] = {"PAIR"   , "PAIR"   , "MIX"  , "MIX"    , "ROTATE1" , "ROTATE1" , "PAIR"   , "PAIR"   };
-   TString  output  [8] = {"SPARSE" , "SPARSE" , "SPARSE" , "SPARSE" , "SPARSE"  , "SPARSE"  , "SPARSE" , "SPARSE" };
-   Char_t   charge1 [8] = {'-'     , '+'      , '-'     , '+'      , '-'       , '+'       , '+'      , '-'      };
-   Char_t   charge2 [8] = {'+'     , '-'      , '+'     , '-'      , '+'       , '-'       , '+'      , '-'      };
-   Int_t    cutID1  [8] = { iCutK   ,  iCutK   ,  iCutK   ,  iCutK   ,  iCutK  ,  iCutK    ,  iCutK   ,  iCutK   };
-   Int_t    cutID2  [8] = { iCutPi  ,  iCutPi  ,  iCutPi  ,  iCutPi  ,  iCutPi ,  iCutPi   ,  iCutPi  ,  iCutPi  };
-   Int_t    ipdg    [8] = { 421     , -421     ,  421   , -421     ,  421      , -421      ,  421     , -421     };
-   Double_t mass    [8] = { 1.86486 ,  1.86486 ,  1.86486 ,  1.86486 ,  1.86486  ,  1.86486  ,  1.86486 ,  1.86486 };
+   
+   
+   if(!isMC || doCalculationInMC == kTRUE){
+   
+   Bool_t   use     [8] = { 1      ,  1       ,  1       ,  1       ,  1        ,  1        ,  1       ,  1      };
+   Bool_t   useIM   [8] = { 1      ,  1       ,  1       ,  1       ,  1        ,  1        ,  1       ,  1      };
+   TString  name    [8] = {"Unlike1", "Unlike2", "Mixing1", "Mixing2", "RotateK1", "RotateK2", "LikePP" , "LikeMM"};
+   TString  comp    [8] = {"PAIR"   , "PAIR"   , "MIX"   , "MIX"    , "ROTATE1" , "ROTATE1" , "PAIR"   , "PAIR"  };
+   TString  output  [8] = {"SPARSE" , "SPARSE" , "SPARSE" , "SPARSE" , "SPARSE"  , "SPARSE"  , "SPARSE" , "SPARSE"};
+   Char_t   charge1 [8] = {'-'     , '+'      , '-'      , '+'      , '-'       , '+'       , '+'      , '-'     };
+   Char_t   charge2 [8] = {'+'     , '-'      , '+'      , '-'      , '+'       , '-'       , '+'      , '-'     };
+   Int_t    cutID1  [8] = { iCutK   ,  iCutK   ,  iCutK   ,  iCutK   ,  iCutK   ,  iCutK    ,  iCutK   ,  iCutK  };
+   Int_t    cutID2  [8] = { iCutPi  ,  iCutPi  ,  iCutPi  ,  iCutPi  ,  iCutPi  ,  iCutPi   ,  iCutPi  ,  iCutPi };
+   Int_t    ipdg    [8] = { 421     , -421     ,  421    , -421     ,  421      , -421      ,  421     , -421    };
+   Double_t mass    [8] = { 1.86486 ,  1.86486 ,  1.86486 ,  1.86486 ,  1.86486  ,  1.86486  ,  1.86486 ,  1.86486};
    
    for (Int_t i = 0; i < 8; i++) {
       if (!use[i]) continue;
@@ -199,7 +292,9 @@ Bool_t ConfigD0
       else out->AddAxis(centID, 400, 0.0, 400.0);
    }
    
+   }
    
+   if(monitor == kTRUE){
    AddMonitorOutput_PionEta(cutSetPi->GetMonitorOutput());
    AddMonitorOutput_PionY(cutSetPi->GetMonitorOutput());
    AddMonitorOutput_PionMinPt(cutSetPi->GetMonitorOutput());
@@ -215,6 +310,8 @@ Bool_t ConfigD0
    AddMonitorOutput_KaonTPC_PIDCut(cutSetK->GetMonitorOutput());
    AddMonitorOutput_KaonTOF_PIDCut(cutSetK->GetMonitorOutput());
    AddMonitorOutput_KaonNTPC(cutSetK->GetMonitorOutput());
+   }
+   
    
    if (isMC) {
    
@@ -253,10 +350,12 @@ Bool_t ConfigD0
    // create output
    AliRsnMiniOutput *out = task->CreateOutput("D0_True2", mode.Data(), "TRUE");
    // selection settings
-   out->SetCharge(0, '+');
-   out->SetCharge(1, '-');
+   out->SetCutID(0, iCutK);
+   out->SetCutID(1, iCutPi);
    out->SetDaughter(0, AliRsnDaughter::kKaon);
    out->SetDaughter(1, AliRsnDaughter::kPion);
+   out->SetCharge(0, '+');
+   out->SetCharge(1, '-');
    out->SetMotherPDG(-421);
    out->SetMotherMass(1.86486);
    // pair cuts
@@ -277,76 +376,67 @@ Bool_t ConfigD0
    else out->AddAxis(centID, 400, 0.0, 400.0);
    
    
-   // INVARIANT RESOLUTION
+   // GENERATED MOTHERS
    
    TString mode = "SPARSE";
    
    // create output
-   AliRsnMiniOutput *out = task->CreateOutput("D0_Res1", mode.Data(), "TRUE");
+   AliRsnMiniOutput *out = task->CreateOutput("D0_TrueMC1", mode.Data(), "MOTHER");
    // selection settings
    out->SetDaughter(0, AliRsnDaughter::kKaon);
    out->SetDaughter(1, AliRsnDaughter::kPion);
-   out->SetCharge(0, '-');
-   out->SetCharge(1, '+');
    out->SetMotherPDG(421);
    out->SetMotherMass(1.86486);
    // pair cuts
-   out->SetPairCuts(cutsPair);
-   out->SetMaxNSisters(maxSisters);
-   out->SetCheckMomentumConservation(checkP);
-   out->SetCheckFeedDown(checkFeedDown);
-   out->SetRejectCandidateIfNotFromQuark(checkQuark);
-   out->SetDselection(originDselection);
+   out->SetPairCuts(cutsPairY);
    // binnings
-   out->AddAxis(resID, 200, -0.02, 0.02);
+   out->AddAxis(imID, bins, min_inv_mass, max_inv_mass);
    out->AddAxis(ptID, 200, 0.0, 20.0);
    //out->AddAxis(yID, 100, -1, 1);
-   //out->AddAxis(dcapID, 100, -0.001, 0.001);
-   //out->AddAxis(nsistID, 10, 0, 5);
 
    if (!isPP) out->AddAxis(centID, 100, 0.0, 100.0);
    else out->AddAxis(centID, 400, 0.0, 400.0);
    
    // create output
-   AliRsnMiniOutput *out = task->CreateOutput("D0_Res2", mode.Data(), "TRUE");
+   AliRsnMiniOutput *out = task->CreateOutput("D0_TrueMC2", mode.Data(), "MOTHER");
    // selection settings
    out->SetDaughter(0, AliRsnDaughter::kKaon);
    out->SetDaughter(1, AliRsnDaughter::kPion);
-   out->SetCharge(0, '+');
-   out->SetCharge(1, '-');
    out->SetMotherPDG(-421);
    out->SetMotherMass(1.86486);
    // pair cuts
-   out->SetPairCuts(cutsPair);
-   out->SetMaxNSisters(maxSisters);
-   out->SetCheckMomentumConservation(checkP);
-   out->SetCheckFeedDown(checkFeedDown);
-   out->SetRejectCandidateIfNotFromQuark(checkQuark);
-   out->SetDselection(originDselection);
+   out->SetPairCuts(cutsPairY);
    // binnings
-   out->AddAxis(resID, 200, -0.02, 0.02);
+   out->AddAxis(imID, bins, min_inv_mass, max_inv_mass);
    out->AddAxis(ptID, 200, 0.0, 20.0);
    //out->AddAxis(yID, 100, -1, 1);
-   //out->AddAxis(dcapID, 100, -0.001, 0.001);
-   //out->AddAxis(nsistID, 10, 0, 5);
 
    if (!isPP) out->AddAxis(centID, 100, 0.0, 100.0);
    else out->AddAxis(centID, 400, 0.0, 400.0);
    
    
-   // GENERATED MOTHERS
-   
+   // GENERATED MOTHERS IN THE ACCEPTANCE
+   /*
    TString mode = "SPARSE";
    
    // create output
-   AliRsnMiniOutput *out = task->CreateOutput("D0_TrueMC1", mode.Data(), "MOTHER");
+   AliRsnMiniOutput *out = task->CreateOutput("D0_TrueMC1_Acc", mode.Data(), "TRUE");
    // selection settings
+   out->SetCutID(0, iCutK_mother);
+   out->SetCutID(1, iCutPi_mother);
    out->SetDaughter(0, AliRsnDaughter::kKaon);
    out->SetDaughter(1, AliRsnDaughter::kPion);
+   out->SetCharge(0, '-');
+   out->SetCharge(1, '+');
    out->SetMotherPDG(421);
    out->SetMotherMass(1.86486);
    // pair cuts
    out->SetPairCuts(cutsPairY);
+   out->SetMaxNSisters(maxSisters);
+   out->SetCheckMomentumConservation(checkP);
+   out->SetCheckFeedDown(checkFeedDown);
+   out->SetRejectCandidateIfNotFromQuark(checkQuark);
+   out->SetDselection(originDselection);
    // binnings
    out->AddAxis(imID, bins, min_inv_mass, max_inv_mass);
    out->AddAxis(ptID, 200, 0.0, 20.0);
@@ -356,14 +446,23 @@ Bool_t ConfigD0
    else out->AddAxis(centID, 400, 0.0, 400.0);
    
    // create output
-   AliRsnMiniOutput *out = task->CreateOutput("D0_TrueMC2", mode.Data(), "MOTHER");
+   AliRsnMiniOutput *out = task->CreateOutput("D0_TrueMC2_Acc", mode.Data(), "TRUE");
    // selection settings
+   out->SetCutID(0, iCutK_mother);
+   out->SetCutID(1, iCutPi_mother);
    out->SetDaughter(0, AliRsnDaughter::kKaon);
    out->SetDaughter(1, AliRsnDaughter::kPion);
+   out->SetCharge(0, '+');
+   out->SetCharge(1, '-');
    out->SetMotherPDG(-421);
    out->SetMotherMass(1.86486);
    // pair cuts
    out->SetPairCuts(cutsPairY);
+   out->SetMaxNSisters(maxSisters);
+   out->SetCheckMomentumConservation(checkP);
+   out->SetCheckFeedDown(checkFeedDown);
+   out->SetRejectCandidateIfNotFromQuark(checkQuark);
+   out->SetDselection(originDselection);
    // binnings
    out->AddAxis(imID, bins, min_inv_mass, max_inv_mass);
    out->AddAxis(ptID, 200, 0.0, 20.0);
@@ -374,7 +473,7 @@ Bool_t ConfigD0
    
    
    }
-
+   */
 
    return kTRUE;
 }