]> git.uio.no Git - u/mrichter/AliRoot.git/blob - PWGLF/RESONANCES/macros/mini/ConfigTPCanalysisKStarSyst.C
Merge branch 'master' of https://git.cern.ch/reps/AliRoot
[u/mrichter/AliRoot.git] / PWGLF / RESONANCES / macros / mini / ConfigTPCanalysisKStarSyst.C
1 /***************************************************************************
2               subhash.singha@cern.ch - last modified on 20/01/2014
3
4 // *** Configuration script for K*, anti-K* analysis with 2010 PbPb 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 ConfigTPCanalysisKStarSyst
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::kFastTPCpidNsigma,
23     AliRsnCutSetDaughterParticle::ERsnDaughterCutSet cutKaCandidate = AliRsnCutSetDaughterParticle::kFastTPCpidNsigma,
24     Float_t                nsigmaPi = 2.0,
25     Float_t                nsigmaKa = 2.0,
26     Bool_t                 enableSyst = kFALSE,
27     Char_t                 DCAxyFormula[100] = "0.0182+0.035/pt^1.01",
28     Double_t               dcazmax = 3.2,
29     Double_t               minNcls = 70,
30     Double_t               maxX2cls = 5.0,
31     Double_t               minCrossedRows = 50.0,
32     Double_t               maxClsCrossedRows = 0.8,
33     Bool_t                 enableMonitor = kTRUE,
34     Bool_t                 IsMcTrueOnly = kFALSE,
35     Int_t                  Pdg = 313,
36     Int_t                  aodN = 0
37 )
38 {
39   // manage suffix
40   if (strlen(suffix) > 0) suffix = Form("_%s", suffix);
41   
42   // set daughter cuts
43   AliRsnCutSetDaughterParticle * cutSetQ;
44   AliRsnCutSetDaughterParticle * cutSetPi;
45   AliRsnCutSetDaughterParticle * cutSetK;
46
47   //vary track quality cuts for systematic checks
48   if(enableSyst){
49     AliRsnCutTrackQuality * trkQualityCut =  new AliRsnCutTrackQuality("QualityCut");
50     
51     trkQualityCut->DisableAll();//disable all cuts, filter bit, pT, eta, and DCAxy cuts will be reset later
52     trkQualityCut->SetAODTestFilterBit(aodFilterBit);//reset the filter bit cut 
53     trkQualityCut->SetCheckOnlyFilterBit(kFALSE);//tells the cut object to check all other cuts individually,
54     trkQualityCut->SetDCARPtFormula(DCAxyFormula);
55     trkQualityCut->SetDCAZmax(dcazmax);
56     trkQualityCut->SetMinNCrossedRowsTPC(minCrossedRows, kTRUE);
57     trkQualityCut->SetMinNCrossedRowsOverFindableClsTPC(maxClsCrossedRows, kTRUE);
58     trkQualityCut->SetTPCmaxChi2(maxX2cls);
59     trkQualityCut->SetRejectKinkDaughters(kTRUE);
60     trkQualityCut->SetSPDminNClusters(AliESDtrackCuts::kAny);
61     trkQualityCut->SetITSmaxChi2(36);
62     trkQualityCut->AddStatusFlag(AliESDtrack::kTPCin   , kTRUE);//already in defaults 2011
63     trkQualityCut->AddStatusFlag(AliESDtrack::kTPCrefit, kTRUE);//already in defaults 2011
64     trkQualityCut->AddStatusFlag(AliESDtrack::kITSrefit, kTRUE);//already in defaults 2011
65     //trkQualityCut->SetTPCminNClusters(70);
66     trkQualityCut->SetPtRange(0.15, 20.0);
67     trkQualityCut->SetEtaRange(-0.8, 0.8);
68     
69     trkQualityCut->Print();
70
71     cutSetQ  = new AliRsnCutSetDaughterParticle(Form("cutQ_bit%i",aodFilterBit), trkQualityCut, AliRsnCutSetDaughterParticle::kQualityStd2011, AliPID::kPion, -1.0);
72     cutSetPi = new AliRsnCutSetDaughterParticle(Form("cutPi%i_%2.1fsigma",cutPiCandidate, nsigmaPi), trkQualityCut, cutPiCandidate, AliPID::kPion, nsigmaPi);
73     cutSetK  = new AliRsnCutSetDaughterParticle(Form("cutK%i_%2.1fsigma",cutPiCandidate, nsigmaKa), trkQualityCut, cutKaCandidate, AliPID::kKaon, nsigmaKa);
74
75     
76   }
77   else
78     {
79       //default cuts 2011
80       cutSetQ  = new AliRsnCutSetDaughterParticle("cutQuality", AliRsnCutSetDaughterParticle::kQualityStd2011, AliPID::kPion, -1.0, aodFilterBit);
81       cutSetQ->SetUse2011StdQualityCuts(kTRUE);
82       cutSetPi = new AliRsnCutSetDaughterParticle(Form("cutPionTPCPbPb2011_%2.1fsigma",nsigmaPi), cutPiCandidate, AliPID::kPion, nsigmaPi, aodFilterBit);
83       cutSetPi->SetUse2011StdQualityCuts(kTRUE);
84       cutSetK  = new AliRsnCutSetDaughterParticle(Form("cutKaonTPCPbPb2011_%2.1f2sigma",nsigmaKa), cutKaCandidate, AliPID::kKaon, nsigmaKa, aodFilterBit);
85       cutSetK->SetUse2011StdQualityCuts(kTRUE);
86     }
87   
88   
89   Int_t iCutQ = task->AddTrackCuts(cutSetQ);
90   Int_t iCutPi = task->AddTrackCuts(cutSetPi);
91   Int_t iCutK = task->AddTrackCuts(cutSetK);
92   
93   if(enableMonitor){
94     Printf("======== Monitoring cut AliRsnCutSetDaughterParticle enabled");
95     gROOT->LoadMacro("$ALICE_ROOT/PWGLF/RESONANCES/macros/mini/AddMonitorOutput.C");
96     AddMonitorOutput(isMC, cutSetQ->GetMonitorOutput());
97     AddMonitorOutput(isMC, cutSetPi->GetMonitorOutput());
98     AddMonitorOutput(isMC, cutSetK->GetMonitorOutput());
99   }  
100   
101   // -- Values ------------------------------------------------------------------------------------
102   /* invariant mass   */ Int_t imID   = task->CreateValue(AliRsnMiniValue::kInvMass, kFALSE);
103   /* IM resolution    */ Int_t resID  = task->CreateValue(AliRsnMiniValue::kInvMassRes, kTRUE);
104   /* transv. momentum */ Int_t ptID   = task->CreateValue(AliRsnMiniValue::kPt, kFALSE);
105   /* centrality       */ Int_t centID = task->CreateValue(AliRsnMiniValue::kMult, kFALSE);
106   /* pseudorapidity   */ Int_t etaID  = task->CreateValue(AliRsnMiniValue::kEta, kFALSE);
107   /* rapidity         */ Int_t yID    = task->CreateValue(AliRsnMiniValue::kY, kFALSE);
108
109   // -- Create all needed outputs -----------------------------------------------------------------
110   // use an array for more compact writing, which are different on mixing and charges
111   // [0] = unlike
112   // [1] = mixing
113   // [2] = like ++
114   // [3] = like --
115   Bool_t  use     [12] = { !IsMcTrueOnly,  !IsMcTrueOnly,  !IsMcTrueOnly,  !IsMcTrueOnly ,  !IsMcTrueOnly, !IsMcTrueOnly,  isMC   ,   isMC   ,  isMC   ,   isMC,  !IsMcTrueOnly,  !IsMcTrueOnly   };
116   Bool_t  useIM   [12] = { 1       ,  1       ,  1       ,  1       ,  1      ,  1      ,  1      ,   1      ,  0      ,   0,    1       ,  1       };
117   TString name    [12] = {"UnlikePM", "UnlikeMP", "MixingPM", "MixingMP", "LikePP", "LikeMM", "TruesPM",  "TruesMP", "ResPM"  ,  "ResMP",  "RotatePM",   "RotateMP"  };
118   TString comp    [12] = {"PAIR"   , "PAIR"   , "MIX"    , "MIX"    , "PAIR"  , "PAIR"  , "TRUE"  ,  "TRUE"  , "TRUE"  ,  "TRUE", "ROTATE2",   "ROTATE2"  };
119   //TString output  [12] = {"HIST"   , "HIST"   , "HIST"   , "HIST"   , "HIST"  , "HIST"  , "HIST"  ,  "HIST"  , "HIST"  ,  "HIST"  };
120   TString output  [12] = {"SPARSE"   , "SPARSE"   , "SPARSE"   , "SPARSE"   , "SPARSE"  , "SPARSE"  , "SPARSE"  ,  "SPARSE"  , "SPARSE"  ,  "SPARSE" , "SPARSE"   , "SPARSE" };
121   Char_t  charge1 [12] = {'+'      , '-'      , '+'      , '-'      , '+'     , '-'     , '+'     ,  '-'     , '+'     ,  '-' ,   '+'      , '-'    };
122   Char_t  charge2 [12] = {'-'      , '+'      , '-'      , '+'      , '+'     , '-'     , '-'     ,  '+'     , '-'     ,  '+' , '-'      , '+'      };
123   Int_t   cutID1  [12] = { iCutK   ,  iCutK   ,  iCutK   ,  iCutK   ,  iCutK  ,  iCutK  ,  iCutK  ,   iCutK  ,  iCutK  ,   iCutK, iCutK   ,  iCutK   };
124   Int_t   cutID2  [12] = { iCutPi  ,  iCutPi  ,  iCutPi  ,  iCutPi  ,  iCutPi ,  iCutPi ,  iCutPi ,   iCutPi ,  iCutPi ,   iCutPi, iCutPi  ,  iCutPi };
125   
126   for (Int_t i = 0; i < 12; i++) {
127     if (!use[i]) continue;
128     if(Pdg > 0) AliRsnMiniOutput *out = task->CreateOutput(Form("kstar1_%s%s", name[i].Data(), suffix), output[i].Data(), comp[i].Data());
129     if(Pdg < 0) AliRsnMiniOutput *out = task->CreateOutput(Form("kstar2_%s%s", name[i].Data(), suffix), output[i].Data(), comp[i].Data());
130     out->SetCutID(0, cutID1[i]);
131     out->SetCutID(1, cutID2[i]);
132     out->SetDaughter(0, AliRsnDaughter::kKaon);
133     out->SetDaughter(1, AliRsnDaughter::kPion);
134     out->SetCharge(0, charge1[i]);
135     out->SetCharge(1, charge2[i]);
136     out->SetMotherPDG(Pdg);//313
137     out->SetMotherMass(0.89594);
138     out->SetPairCuts(cutsPair);
139
140     // axis X: invmass (or resolution)
141     if (useIM[i]) 
142       out->AddAxis(imID, 90, 0.6, 1.5);
143     //else
144     //out->AddAxis(resID, 200, -0.02, 0.02);
145     
146     // axis Y: transverse momentum
147     out->AddAxis(ptID, 300, 0.0, 30.0);
148     
149     // axis Z: centrality-multiplicity
150     if (!isPP)
151       out->AddAxis(centID, 100, 0.0, 100.0);
152     else 
153       out->AddAxis(centID, 400, 0.0, 400.0);
154     
155     // axis W: pseudorapidity
156     //    out->AddAxis(etaID, 20, -1.0, 1.0);
157     // axis J: rapidity
158     //out->AddAxis(yID, 32, -0.8, 0.8);
159     
160   }
161   
162   if (isMC){
163     // create output
164     
165     if(Pdg > 0) {AliRsnMiniOutput *outm = task->CreateOutput(Form("kstar_Mother1%s", suffix), "SPARSE", "MOTHER");}
166     if(Pdg < 0) {AliRsnMiniOutput *outm = task->CreateOutput(Form("kstar_Mother2%s", suffix), "SPARSE", "MOTHER");}
167     outm->SetDaughter(0, AliRsnDaughter::kKaon);
168     outm->SetDaughter(1, AliRsnDaughter::kPion);
169     outm->SetMotherPDG(Pdg);//313
170     outm->SetMotherMass(0.89594);
171     // pair cuts
172     outm->SetPairCuts(cutsPair);
173     // binnings
174     outm->AddAxis(imID, 90, 0.6, 1.5);
175     outm->AddAxis(ptID, 300, 0.0, 30.0);
176     if (!isPP){
177     outm->AddAxis(centID, 100, 0.0, 100.0);
178     }   else { 
179      outm->AddAxis(centID, 400, 0.0, 400.0);
180     }
181     //outm->AddAxis(yID, 32, -0.8, 0.8);
182   }
183   return kTRUE;
184 }
185