]> git.uio.no Git - u/mrichter/AliRoot.git/blame - PWGLF/RESONANCES/macros/mini/ConfigTOFanalysisKStar.C
Merge branch 'master' of https://git.cern.ch/reps/AliRoot
[u/mrichter/AliRoot.git] / PWGLF / RESONANCES / macros / mini / ConfigTOFanalysisKStar.C
CommitLineData
72439a68 1/***************************************************************************
078cd956 2 fbellini@cern.ch - last modified on 28/11/2013
72439a68 3
4// *** Configuration script for K*, anti-K* analysis with 2010 PbPb runs ***
078cd956 5// *** Configuration script for K*, anti-K* analysis with 2013 pPb runs ***
72439a68 6//
7// A configuration script for RSN package needs to define the followings:
8//
9// (1) decay tree of each resonance to be studied, which is needed to select
10// true pairs and to assign the right mass to all candidate daughters
11// (2) cuts at all levels: single daughters, tracks, events
12// (3) output objects: histograms or trees
13****************************************************************************/
72439a68 14Bool_t ConfigTOFanalysisKStar
15(
16 AliRsnMiniAnalysisTask *task,
17 Bool_t isMC,
18 Bool_t isPP,
19 const char *suffix,
20 AliRsnCutSet *cutsPair,
21 Int_t aodFilterBit = 5,
078cd956 22 Int_t customQualityCutsID = AliRsnCutSetDaughterParticle::kDisableCustom,
72439a68 23 AliRsnCutSetDaughterParticle::ERsnDaughterCutSet cutPiCandidate = AliRsnCutSetDaughterParticle::kTOFpidKstarPbPb2010,
24 AliRsnCutSetDaughterParticle::ERsnDaughterCutSet cutKaCandidate = AliRsnCutSetDaughterParticle::kTOFpidKstarPbPb2010,
25 Float_t nsigmaPi = 2.0,
26 Float_t nsigmaKa = 2.0,
27 Bool_t enableMonitor = kTRUE,
28 Bool_t IsMcTrueOnly = kFALSE,
eec5d1ed 29 Bool_t useMixLS = 0,
8ddd6d70 30 Int_t signedPdg = 313,
397c0062 31 TString monitorOpt = "",
078cd956 32 AliRsnMiniValue::EType yaxisVar = AliRsnMiniValue::kPt
72439a68 33)
34{
35 // manage suffix
36 if (strlen(suffix) > 0) suffix = Form("_%s", suffix);
37
38 // set daughter cuts
39 AliRsnCutSetDaughterParticle * cutSetQ;
40 AliRsnCutSetDaughterParticle * cutSetPi;
41 AliRsnCutSetDaughterParticle * cutSetK;
078cd956 42
43 AliRsnCutTrackQuality * trkQualityCut = new AliRsnCutTrackQuality("myQualityCut");
44 if (SetCustomQualityCut(trkQualityCut, customQualityCutsID, aodFilterBit)) {
45 //Set custom quality cuts for systematic checks
46 cutSetQ = new AliRsnCutSetDaughterParticle(Form("cutQ_bit%i",aodFilterBit), trkQualityCut, AliRsnCutSetDaughterParticle::kQualityStd2011, AliPID::kPion, -1.0);
47 cutSetPi = new AliRsnCutSetDaughterParticle(Form("cutPi%i_%2.1fsigma",cutPiCandidate, nsigmaPi), trkQualityCut, cutPiCandidate, AliPID::kPion, nsigmaPi);
48 cutSetK = new AliRsnCutSetDaughterParticle(Form("cutK%i_%2.1fsigma",cutPiCandidate, nsigmaKa), trkQualityCut, cutKaCandidate, AliPID::kKaon, nsigmaKa);
49 } else {
50 //use defult quality cuts (std 2010 or 2011)
51 cutSetQ = new AliRsnCutSetDaughterParticle(Form("cutQ_bit%i",aodFilterBit), AliRsnCutSetDaughterParticle::kQualityStd2011, AliPID::kPion, -1.0, aodFilterBit);
953fadb4 52 cutSetQ->SetUse2011StdQualityCuts(kTRUE);
078cd956 53 cutSetPi = new AliRsnCutSetDaughterParticle(Form("cutPi%i_%2.1fsigma",cutPiCandidate, nsigmaPi), cutPiCandidate, AliPID::kPion, nsigmaPi, aodFilterBit);
953fadb4 54 cutSetPi->SetUse2011StdQualityCuts(kTRUE);
078cd956 55 cutSetK = new AliRsnCutSetDaughterParticle(Form("cutK%i_%2.1fsigma",cutPiCandidate, nsigmaKa), cutKaCandidate, AliPID::kKaon, nsigmaKa, aodFilterBit);
953fadb4
FB
56 cutSetK->SetUse2011StdQualityCuts(kTRUE);
57 }
078cd956 58
72439a68 59 Int_t iCutQ = task->AddTrackCuts(cutSetQ);
60 Int_t iCutPi = task->AddTrackCuts(cutSetPi);
61 Int_t iCutK = task->AddTrackCuts(cutSetK);
62
9664d398 63 if (enableMonitor){
8ddd6d70 64 Printf("======== Cut monitoring enabled");
da3e2cdb 65 gROOT->LoadMacro("$ALICE_ROOT/PWGLF/RESONANCES/macros/mini/AddMonitorOutput.C");
8ddd6d70 66 AddMonitorOutput(isMC, cutSetQ->GetMonitorOutput(), monitorOpt.Data());
67 AddMonitorOutput(isMC, cutSetPi->GetMonitorOutput(), monitorOpt.Data());
68 AddMonitorOutput(isMC, cutSetK->GetMonitorOutput()), monitorOpt.Data();
72439a68 69 }
70
71 // -- Values ------------------------------------------------------------------------------------
72 /* invariant mass */ Int_t imID = task->CreateValue(AliRsnMiniValue::kInvMass, kFALSE);
73 /* IM resolution */ Int_t resID = task->CreateValue(AliRsnMiniValue::kInvMassRes, kTRUE);
74 /* transv. momentum */ Int_t ptID = task->CreateValue(AliRsnMiniValue::kPt, kFALSE);
75 /* centrality */ Int_t centID = task->CreateValue(AliRsnMiniValue::kMult, kFALSE);
76 /* pseudorapidity */ Int_t etaID = task->CreateValue(AliRsnMiniValue::kEta, kFALSE);
77 /* rapidity */ Int_t yID = task->CreateValue(AliRsnMiniValue::kY, kFALSE);
397c0062 78 /* 1st daughter pt */ Int_t fdpt = task->CreateValue(AliRsnMiniValue::kFirstDaughterPt, kFALSE);
79 /* 2nd daughter pt */ Int_t sdpt = task->CreateValue(AliRsnMiniValue::kSecondDaughterPt, kFALSE);
80 /* 1st daughter p */ Int_t fdp = task->CreateValue(AliRsnMiniValue::kFirstDaughterP, kFALSE);
81 /* 2nd daughter p */ Int_t sdp = task->CreateValue(AliRsnMiniValue::kSecondDaughterP, kFALSE);
078cd956 82
72439a68 83 // -- Create all needed outputs -----------------------------------------------------------------
84 // use an array for more compact writing, which are different on mixing and charges
85 // [0] = unlike
86 // [1] = mixing
87 // [2] = like ++
88 // [3] = like --
397c0062 89
e042cc89 90 Bool_t use [12] = { !IsMcTrueOnly, !IsMcTrueOnly, !IsMcTrueOnly, !IsMcTrueOnly , !IsMcTrueOnly, !IsMcTrueOnly, isMC , isMC , isMC , isMC , useMixLS, useMixLS };
91 Bool_t useIM [12] = { 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 0 , 0 , 1 , 1 };
92 TString name [12] = {"UnlikePM", "UnlikeMP", "MixingPM", "MixingMP", "LikePP", "LikeMM", "TruesPM", "TruesMP", "ResPM" , "ResMP", "MixingPP", "MixingMM" };
93 TString comp [12] = {"PAIR" , "PAIR" , "MIX" , "MIX" , "PAIR" , "PAIR" , "TRUE" , "TRUE" , "TRUE" , "TRUE", "MIX","MIX"};
72439a68 94 //TString output [10] = {"HIST" , "HIST" , "HIST" , "HIST" , "HIST" , "HIST" , "HIST" , "HIST" , "HIST" , "HIST" };
e042cc89 95 TString output [12] = {"SPARSE" , "SPARSE" , "SPARSE" , "SPARSE" , "SPARSE" , "SPARSE" , "SPARSE" , "SPARSE" , "SPARSE" , "SPARSE", "SPARSE" , "SPARSE"};
96 Char_t charge1 [12] = {'+' , '-' , '+' , '-' , '+' , '-' , '+' , '-' , '+' , '-' , '+' , '-'};
97 Char_t charge2 [12] = {'-' , '+' , '-' , '+' , '+' , '-' , '-' , '+' , '-' , '+' ,'+' , '-' };
98 Int_t cutID1 [12] = { iCutK , iCutK , iCutK , iCutK , iCutK , iCutK , iCutK , iCutK , iCutK , iCutK , iCutK, iCutK };
99 Int_t cutID2 [12] = { iCutPi , iCutPi , iCutPi , iCutPi , iCutPi , iCutPi , iCutPi , iCutPi , iCutPi , iCutPi, iCutPi, iCutPi };
72439a68 100
e042cc89 101 for (Int_t i = 0; i < 12; i++) {
72439a68 102 if (!use[i]) continue;
103 AliRsnMiniOutput *out = task->CreateOutput(Form("kstar_%s%s", name[i].Data(), suffix), output[i].Data(), comp[i].Data());
104 out->SetCutID(0, cutID1[i]);
105 out->SetCutID(1, cutID2[i]);
106 out->SetDaughter(0, AliRsnDaughter::kKaon);
107 out->SetDaughter(1, AliRsnDaughter::kPion);
108 out->SetCharge(0, charge1[i]);
109 out->SetCharge(1, charge2[i]);
eec5d1ed 110 out->SetMotherPDG(signedPdg);
72439a68 111 out->SetMotherMass(0.89594);
112 out->SetPairCuts(cutsPair);
113
114 // axis X: invmass (or resolution)
115 if (useIM[i])
116 out->AddAxis(imID, 90, 0.6, 1.5);
117 else
118 out->AddAxis(resID, 200, -0.02, 0.02);
119
397c0062 120 // axis Y: transverse momentum of pair as default - else chosen value
121 if (yaxisVar==AliRsnMiniValue::kFirstDaughterPt)
122 out->AddAxis(fdpt, 100, 0.0, 10.0);
123 else
124 if (yaxisVar==AliRsnMiniValue::kSecondDaughterPt)
125 out->AddAxis(sdpt, 100, 0.0, 10.0);
126 else
127 if (yaxisVar==AliRsnMiniValue::kFirstDaughterP)
128 out->AddAxis(fdp, 100, 0.0, 10.0);
129 else
130 if (yaxisVar==AliRsnMiniValue::kSecondDaughterP)
131 out->AddAxis(sdp, 100, 0.0, 10.0);
132 else
133 out->AddAxis(ptID, 100, 0.0, 10.0); //default use mother pt
134
72439a68 135 // axis Z: centrality-multiplicity
136 if (!isPP)
137 out->AddAxis(centID, 100, 0.0, 100.0);
138 else
139 out->AddAxis(centID, 400, 0.0, 400.0);
397c0062 140
72439a68 141 // axis W: pseudorapidity
397c0062 142 // out->AddAxis(etaID, 20, -1.0, 1.0);
72439a68 143 // axis J: rapidity
144 // out->AddAxis(yID, 10, -0.5, 0.5);
145
146 }
58a1c9a4 147
148 if (isMC){
397c0062 149 // create output
58a1c9a4 150 AliRsnMiniOutput *outm = task->CreateOutput(Form("kstar_Mother%s", suffix), "SPARSE", "MOTHER");
397c0062 151 outm->SetDaughter(0, AliRsnDaughter::kKaon);
152 outm->SetDaughter(1, AliRsnDaughter::kPion);
153 outm->SetMotherPDG(signedPdg);
154 outm->SetMotherMass(0.89594);
155 // pair cuts
156 outm->SetPairCuts(cutsPair);
157 // binnings
158 outm->AddAxis(imID, 90, 0.6, 1.5);
159 outm->AddAxis(ptID, 100, 0.0, 10.0);
160 if (!isPP){
161 outm->AddAxis(centID, 100, 0.0, 100.0);
162 } else {
163 outm->AddAxis(centID, 400, 0.0, 400.0);
164 }
58a1c9a4 165 }
72439a68 166 return kTRUE;
167}
078cd956 168
169//-------------------------------------------------------
170Bool_t SetCustomQualityCut(AliRsnCutTrackQuality * trkQualityCut, Int_t customQualityCutsID = 0, Int_t customFilterBit = 0)
171{
172 //Sets configuration for track quality object different from std quality cuts.
173 //Returns kTRUE if track quality cut object is successfully defined,
174 //returns kFALSE if an invalid set of cuts (customQualityCutsID) is chosen or if the
175 //object to be configured does not exist.
176
177 /* NOTES FROM PRODUCTION LHC13b pass3 - AOD filtered with v5-03-Rev-20
178 //(http://svnweb.cern.ch/world/wsvn/AliRoot/tags/v5-03-Rev-20/ANALYSIS/macros/AddTaskESDFilter.C)
179
180 //filter bit 0: Cuts on primary tracks
181 // AliESDtrackCuts* esdTrackCutsL = AliESDtrackCuts::GetStandardTPCOnlyTrackCuts();
182
183 //filter bit 4: std but looser dca cut
184 // AliESDtrackCuts* esdTrackCutsH = AliESDtrackCuts::GetStandardITSTPCTrackCuts2011(kFALSE);
185 // esdTrackCutsH->SetMaxDCAToVertexXY(2.4);
186 // esdTrackCutsH->SetMaxDCAToVertexZ(3.2);
187 // esdTrackCutsH->SetDCAToVertex2D(kTRUE);
188
189 //filter bit 5: AliESDtrackCuts::GetStandardITSTPCTrackCuts2011();
190
191 //filter bit 10: standard cuts with tight DCA cut, using cluster cut instead of crossed rows (a la 2010 default)
192 //AliESDtrackCuts* esdTrackCutsH2Cluster = AliESDtrackCuts::GetStandardITSTPCTrackCuts2011(kTRUE, 0);
193 */
194
195 if ((!trkQualityCut) || (customQualityCutsID<=0) || (customQualityCutsID>=AliRsnCutSetDaughterParticle::kNcustomQualityCuts)){
196 Printf("::::: SetCustomQualityCut:: use default quality cuts specified in task configuration.");
197 return kFALSE;
198 }
199 //for pA 2013
200 //trkQualityCut->SetDefaults2011();//with filter bit=10
201 //reset filter bit to very loose cuts
202 trkQualityCut->SetAODTestFilterBit(customFilterBit);
203 //apply all other cuts "by hand"
204 trkQualityCut->SetCheckOnlyFilterBit(kFALSE);
205 trkQualityCut->SetMinNCrossedRowsTPC(70);
206 trkQualityCut->SetMinNCrossedRowsOverFindableClsTPC(0.8);
207 trkQualityCut->SetMaxChi2TPCConstrainedGlobal(36);//used for ESD only - for AOD does not correspond to any cut
208 trkQualityCut->SetTPCmaxChi2(4.0); //already in filter bit 0
209 trkQualityCut->SetRejectKinkDaughters(kTRUE); //already in filter bit 0
210 trkQualityCut->SetSPDminNClusters(AliESDtrackCuts::kAny);
211 trkQualityCut->SetITSmaxChi2(36);
212 trkQualityCut->AddStatusFlag(AliESDtrack::kTPCin , kTRUE);//already in defaults 2011
213 trkQualityCut->AddStatusFlag(AliESDtrack::kTPCrefit, kTRUE);//already in defaults 2011
214 trkQualityCut->AddStatusFlag(AliESDtrack::kITSrefit, kTRUE);//already in defaults 2011
215
216 if (customQualityCutsID==AliRsnCutSetDaughterParticle::kFilterBitCustom) {
217 trkQualityCut->SetCheckOnlyFilterBit(kTRUE);
218 }
219
220 if (customQualityCutsID==AliRsnCutSetDaughterParticle::kStdLooserDCAXY){
221 trkQualityCut->SetDCARmax(2.4);
222 } else {
223 trkQualityCut->SetDCARPtFormula("0.0105+0.0350/pt^1.1");
224 }
225
226 if (customQualityCutsID==AliRsnCutSetDaughterParticle::kStdLooserDCAZ){
227 trkQualityCut->SetDCAZmax(3.2);
228 } else {
229 trkQualityCut->SetDCAZmax(2.0);
230 }
231
232 if (customQualityCutsID==AliRsnCutSetDaughterParticle::kStdCrossedRows60){
233 trkQualityCut->SetMinNCrossedRowsTPC(60);
234 }
235
236 if (customQualityCutsID==AliRsnCutSetDaughterParticle::kStdCrossedRows80){
237 trkQualityCut->SetMinNCrossedRowsTPC(80);
238 }
239
240 if (customQualityCutsID==AliRsnCutSetDaughterParticle::kStdRowsToCls075){
241 trkQualityCut->SetMinNCrossedRowsOverFindableClsTPC(0.75);
242 }
243
244 if (customQualityCutsID==AliRsnCutSetDaughterParticle::kStdRowsToCls085){
245 trkQualityCut->SetMinNCrossedRowsOverFindableClsTPC(0.85);
246 }
247
248 if (customQualityCutsID==AliRsnCutSetDaughterParticle::kStdCls70){
249 trkQualityCut->SetAODTestFilterBit(10);
250 trkQualityCut->SetTPCminNClusters(70);
251 }
252
253 if (customQualityCutsID==AliRsnCutSetDaughterParticle::kStdChi2TPCCls35){
254 trkQualityCut->SetTPCmaxChi2(3.5);
255 }
256
257 trkQualityCut->SetPtRange(0.15, 20.0);
258 trkQualityCut->SetEtaRange(-0.8, 0.8);
259
260 Printf(Form("::::: SetCustomQualityCut:: using custom track quality cuts #%i",customQualityCutsID));
261 trkQualityCut->Print();
262 return kTRUE;
263}