]> git.uio.no Git - u/mrichter/AliRoot.git/blob - PWGLF/RESONANCES/macros/mini/ConfigKStarTrkSyst.C
Merge branch 'master' into TPCdev
[u/mrichter/AliRoot.git] / PWGLF / RESONANCES / macros / mini / ConfigKStarTrkSyst.C
1 /***************************************************************************
2               fbellini@cern.ch - created on 19/09/2013
3
4 // *** Configuration script for K*, anti-K* syst. analysis with p-Pb runs ***
5 // 
6 // A configuration script for RSN package needs to define the followings:
7 //
8 // (1) decay tree of each resonance to be studied, which is needed to select
9 //     true pairs and to assign the right mass to all candidate daughters
10 // (2) cuts at all levels: single daughters, tracks, events
11 // (3) output objects: histograms or trees
12 ****************************************************************************/
13
14 Bool_t ConfigKStarTrkSyst
15 (  
16     AliRsnMiniAnalysisTask *task, 
17     Bool_t                 isMC, 
18     Bool_t                 isPP,
19     const char             *suffix,
20     AliRsnCutSet           *cutsPair,
21     Int_t                  aodFilterBit = 5,
22     AliRsnCutSetDaughterParticle::ERsnDaughterCutSet cutPiCandidate = AliRsnCutSetDaughterParticle::kTOFpidKstarPbPb2010,
23     AliRsnCutSetDaughterParticle::ERsnDaughterCutSet cutKaCandidate = AliRsnCutSetDaughterParticle::kTOFpidKstarPbPb2010,
24     Float_t                nsigmaPi = 2.0,
25     Float_t                nsigmaKa = 2.0,
26     Bool_t                 enableMonitor = kTRUE,
27     Bool_t                 IsMcTrueOnly = kFALSE,
28     Bool_t                 useMixLS = 0,
29     Int_t                  signedPdg = 313,
30     TString                monitorOpt = "",
31     AliRsnMiniValue::EType yaxisVar = AliRsnMiniValue::kPt,
32     Bool_t                 enableTrkSyst = kFALSE,
33     Double_t               dcaxymax = 2.4,
34     Double_t               dcazmax = 3.2,
35     Double_t               minNcls = 70,
36     Double_t               maxX2cls = 4.0
37     // Double_t               minCrossedRows = 50.0,
38     // Double_t               maxClsCrossedRows = 0.8
39 )
40 {
41   // manage suffix
42   if (strlen(suffix) > 0) suffix = Form("_%s", suffix);
43   
44   // set daughter cuts
45   AliRsnCutSetDaughterParticle * cutSetPi = new AliRsnCutSetDaughterParticle(Form("cutPi%i_%2.1fsigma",cutPiCandidate, nsigmaPi), cutPiCandidate, AliPID::kPion, nsigmaPi, aodFilterBit);
46   AliRsnCutSetDaughterParticle * cutSetK  = new AliRsnCutSetDaughterParticle(Form("cutK%i_%2.1fsigma",cutKaCandidate, nsigmaKa), cutKaCandidate, AliPID::kKaon, nsigmaKa, aodFilterBit);
47   AliRsnCutSetDaughterParticle * cutSetQ  = new AliRsnCutSetDaughterParticle(Form("cut_quality"), AliRsnCutSetDaughterParticle::kQualityStd2011, 1e20, 1e20, aodFilterBit);
48   
49   if (enableTrkSyst) {
50     ((AliRsnCutTrackQuality *)cutSetQ->GetQualityCut())->SetDCARmax(dcaxymax);
51     ((AliRsnCutTrackQuality *)cutSetQ->GetQualityCut())->SetDCAZmax(dcazmax);
52     ((AliRsnCutTrackQuality *)cutSetQ->GetQualityCut())->SetTPCminNClusters(minNcls);
53     ((AliRsnCutTrackQuality *)cutSetQ->GetQualityCut())->SetTPCmaxChi2(maxX2cls);
54     //cutSetQ->SetTPCminNcrossedRows(minCrossedRows); //TO BE IMPLEMENTED
55     //cutSetQ->SetTPCminNclsPerCrossedRow(maxClsCrossedRows); //TO BE IMPLEMENTED
56   }
57   
58   Int_t iCutQ = task->AddTrackCuts(cutSetQ);
59   Int_t iCutPi = task->AddTrackCuts(cutSetPi);
60   Int_t iCutK = task->AddTrackCuts(cutSetK);
61   
62   if (enableMonitor){
63     Printf("======== Cut monitoring enabled");
64     gROOT->LoadMacro("$ALICE_ROOT/PWGLF/RESONANCES/macros/mini/AddMonitorOutput.C");
65     AddMonitorOutput(isMC, cutSetQ->GetMonitorOutput(), monitorOpt.Data());
66     AddMonitorOutput(isMC, cutSetPi->GetMonitorOutput(), monitorOpt.Data());
67     AddMonitorOutput(isMC, cutSetK->GetMonitorOutput()), monitorOpt.Data();
68   }  
69   
70   // -- Values ------------------------------------------------------------------------------------
71   /* invariant mass   */ Int_t imID   = task->CreateValue(AliRsnMiniValue::kInvMass, kFALSE);
72   /* IM resolution    */ Int_t resID  = task->CreateValue(AliRsnMiniValue::kInvMassRes, kTRUE);
73   /* transv. momentum */ Int_t ptID   = task->CreateValue(AliRsnMiniValue::kPt, kFALSE);
74   /* centrality       */ Int_t centID = task->CreateValue(AliRsnMiniValue::kMult, kFALSE);
75   /* pseudorapidity   */ Int_t etaID  = task->CreateValue(AliRsnMiniValue::kEta, kFALSE);
76   /* rapidity         */ Int_t yID    = task->CreateValue(AliRsnMiniValue::kY, kFALSE);
77   /* 1st daughter pt  */ Int_t fdpt   = task->CreateValue(AliRsnMiniValue::kFirstDaughterPt, kFALSE);
78   /* 2nd daughter pt  */ Int_t sdpt   = task->CreateValue(AliRsnMiniValue::kSecondDaughterPt, kFALSE);
79   /* 1st daughter p   */ Int_t fdp    = task->CreateValue(AliRsnMiniValue::kFirstDaughterP, kFALSE);
80   /* 2nd daughter p   */ Int_t sdp    = task->CreateValue(AliRsnMiniValue::kSecondDaughterP, kFALSE);
81
82   // -- Create all needed outputs -----------------------------------------------------------------
83   // use an array for more compact writing, which are different on mixing and charges
84   // [0] = unlike
85   // [1] = mixing
86   // [2] = like ++
87   // [3] = like --
88
89   Bool_t  use     [12] = { !IsMcTrueOnly,  !IsMcTrueOnly,  !IsMcTrueOnly,  !IsMcTrueOnly ,  !IsMcTrueOnly, !IsMcTrueOnly,  isMC   ,   isMC   ,  isMC   ,   isMC , useMixLS, useMixLS  };
90   Bool_t  useIM   [12] = { 1       ,  1       ,  1       ,  1       ,  1      ,  1      ,  1      ,   1      ,  0      ,   0 , 1    , 1     };
91   TString name    [12] = {"UnlikePM", "UnlikeMP", "MixingPM", "MixingMP", "LikePP", "LikeMM", "TruesPM",  "TruesMP", "ResPM"  ,  "ResMP",  "MixingPP",  "MixingMM"  };
92   TString comp    [12] = {"PAIR"   , "PAIR"   , "MIX"    , "MIX"    , "PAIR"  , "PAIR"  , "TRUE"  ,  "TRUE"  , "TRUE"  ,  "TRUE", "MIX","MIX"};
93   //TString output  [10] = {"HIST"   , "HIST"   , "HIST"   , "HIST"   , "HIST"  , "HIST"  , "HIST"  ,  "HIST"  , "HIST"  ,  "HIST"  };
94   TString output  [12] = {"SPARSE"   , "SPARSE"   , "SPARSE"   , "SPARSE"   , "SPARSE"  , "SPARSE"  , "SPARSE"  ,  "SPARSE"  , "SPARSE"  ,  "SPARSE", "SPARSE"  ,  "SPARSE"};
95   Char_t  charge1 [12] = {'+'      , '-'      , '+'      , '-'      , '+'     , '-'     , '+'     ,  '-'     , '+'     ,  '-'  , '+' , '-'};
96   Char_t  charge2 [12] = {'-'      , '+'      , '-'      , '+'      , '+'     , '-'     , '-'     ,  '+'     , '-'     ,  '+'  ,'+' , '-'   };
97   Int_t   cutID1  [12] = { iCutK   ,  iCutK   ,  iCutK   ,  iCutK   ,  iCutK  ,  iCutK  ,  iCutK  ,   iCutK  ,  iCutK  ,   iCutK , iCutK, iCutK };
98   Int_t   cutID2  [12] = { iCutPi  ,  iCutPi  ,  iCutPi  ,  iCutPi  ,  iCutPi ,  iCutPi ,  iCutPi ,   iCutPi ,  iCutPi ,   iCutPi, iCutPi, iCutPi };
99   
100   for (Int_t i = 0; i < 12; i++) {
101     if (!use[i]) continue;
102     AliRsnMiniOutput *out = task->CreateOutput(Form("kstar_%s%s", name[i].Data(), suffix), output[i].Data(), comp[i].Data());
103     out->SetCutID(0, cutID1[i]);
104     out->SetCutID(1, cutID2[i]);
105     out->SetDaughter(0, AliRsnDaughter::kKaon);
106     out->SetDaughter(1, AliRsnDaughter::kPion);
107     out->SetCharge(0, charge1[i]);
108     out->SetCharge(1, charge2[i]);
109     out->SetMotherPDG(signedPdg);
110     out->SetMotherMass(0.89594);
111     out->SetPairCuts(cutsPair);
112
113     // axis X: invmass (or resolution)
114     if (useIM[i]) 
115       out->AddAxis(imID, 90, 0.6, 1.5);
116     else
117       out->AddAxis(resID, 200, -0.02, 0.02);
118     
119     // axis Y: transverse momentum of pair as default - else chosen value
120     if (yaxisVar==AliRsnMiniValue::kFirstDaughterPt)
121       out->AddAxis(fdpt, 100, 0.0, 10.0);
122     else
123       if (yaxisVar==AliRsnMiniValue::kSecondDaughterPt)
124         out->AddAxis(sdpt, 100, 0.0, 10.0);
125       else
126         if (yaxisVar==AliRsnMiniValue::kFirstDaughterP)
127           out->AddAxis(fdp, 100, 0.0, 10.0);
128         else
129           if (yaxisVar==AliRsnMiniValue::kSecondDaughterP)
130             out->AddAxis(sdp, 100, 0.0, 10.0);
131           else 
132             out->AddAxis(ptID, 100, 0.0, 10.0); //default use mother pt
133
134     // axis Z: centrality-multiplicity
135     if (!isPP)
136       out->AddAxis(centID, 100, 0.0, 100.0);
137     else 
138       out->AddAxis(centID, 400, 0.0, 400.0);
139     
140     // axis W: pseudorapidity
141     // out->AddAxis(etaID, 20, -1.0, 1.0);
142     // axis J: rapidity
143     // out->AddAxis(yID, 10, -0.5, 0.5);
144     
145   }   
146   
147   if (isMC){   
148     // create output
149     AliRsnMiniOutput *outm = task->CreateOutput(Form("kstar_Mother%s", suffix), "SPARSE", "MOTHER");
150     outm->SetDaughter(0, AliRsnDaughter::kKaon);
151     outm->SetDaughter(1, AliRsnDaughter::kPion);
152     outm->SetMotherPDG(signedPdg);
153     outm->SetMotherMass(0.89594);
154     // pair cuts
155     outm->SetPairCuts(cutsPair);
156     // binnings
157     outm->AddAxis(imID, 90, 0.6, 1.5);
158     outm->AddAxis(ptID, 100, 0.0, 10.0);
159     if (!isPP){
160       outm->AddAxis(centID, 100, 0.0, 100.0);
161     }   else    { 
162       outm->AddAxis(centID, 400, 0.0, 400.0);
163     }
164   }
165   return kTRUE;
166 }