]>
Commit | Line | Data |
---|---|---|
85f605cb | 1 | /*************************************************************************** |
78e14f48 | 2 | rama.chandra.baral@cern.ch & sarita.sahoo@cern.ch - last modified on 20/08/2014 |
85f605cb | 3 | |
4 | // *** Configuration script for L*, anti-L*, syst. analysis for pp and 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 ConfigLStar | |
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 cutPrCandidate = AliRsnCutSetDaughterParticle::kFastTOFpidNsigma, | |
23 | AliRsnCutSetDaughterParticle::ERsnDaughterCutSet cutKaCandidate = AliRsnCutSetDaughterParticle::kFastTOFpidNsigma, | |
24 | Float_t nsigmaPr = 2.0, | |
25 | Float_t nsigmaKa = 2.0, | |
26 | Bool_t enableTrkSyst = 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 = 4.0, | |
31 | Double_t minCrossedRows = 50.0, | |
32 | Double_t maxClsCrossedRows = 0.8, | |
33 | ||
34 | Bool_t enableMonitor = kTRUE, | |
35 | Bool_t IsMcTrueOnly = kFALSE, | |
36 | Int_t signedPdg = 3124, | |
37 | ||
38 | TString monitorOpt = "", //Flag for AddMonitorOutput.C e.g."NoSIGN" | |
39 | Bool_t useCrossedRows = kFALSE, | |
40 | AliRsnMiniValue::EType yaxisVar = AliRsnMiniValue::kPt, | |
41 | Bool_t useMixLS = 0 | |
42 | ) | |
43 | { | |
44 | // manage suffix | |
45 | if (strlen(suffix) > 0) suffix = Form("_%s", suffix); | |
46 | ||
47 | // set daughter cuts | |
48 | AliRsnCutSetDaughterParticle * cutSetQ; | |
49 | AliRsnCutSetDaughterParticle * cutSetP; | |
50 | AliRsnCutSetDaughterParticle * cutSetK; | |
51 | ||
52 | ||
53 | //vary track quality cuts for systematic checks | |
78e14f48 | 54 | if(enableTrkSyst) { |
85f605cb | 55 | AliRsnCutTrackQuality * trkQualityCut = new AliRsnCutTrackQuality("QualityCut"); |
56 | ||
78e14f48 | 57 | //trkQualityCut->DisableAll();//disable all cuts, filter bit, pT, eta, and DCAxy cuts will be reset later |
85f605cb | 58 | trkQualityCut->SetAODTestFilterBit(aodFilterBit);//reset the filter bit cut |
59 | trkQualityCut->SetCheckOnlyFilterBit(kFALSE);//tells the cut object to check all other cuts individually, | |
60 | trkQualityCut->SetDCARPtFormula(DCAxyFormula); | |
61 | trkQualityCut->SetDCAZmax(dcazmax); | |
62 | ||
78e14f48 | 63 | if(useCrossedRows) { |
85f605cb | 64 | trkQualityCut->SetMinNCrossedRowsTPC(minCrossedRows, kTRUE); |
65 | trkQualityCut->SetMinNCrossedRowsOverFindableClsTPC(maxClsCrossedRows, kTRUE); } | |
66 | else trkQualityCut->SetTPCminNClusters(minNcls); | |
67 | ||
68 | trkQualityCut->SetTPCmaxChi2(maxX2cls); | |
69 | trkQualityCut->SetRejectKinkDaughters(kTRUE); | |
78e14f48 | 70 | //trkQualityCut->SetSPDminNClusters(AliESDtrackCuts::kAny); |
71 | trkQualityCut->SetSPDminNClusters(1); | |
72 | trkQualityCut->SetITSminNClusters(0); | |
73 | trkQualityCut->SetITSmaxChi2(36); | |
74 | trkQualityCut->SetMaxChi2TPCConstrainedGlobal(36); | |
85f605cb | 75 | trkQualityCut->AddStatusFlag(AliESDtrack::kTPCin , kTRUE);//already in defaults 2011 |
76 | trkQualityCut->AddStatusFlag(AliESDtrack::kTPCrefit, kTRUE);//already in defaults 2011 | |
77 | trkQualityCut->AddStatusFlag(AliESDtrack::kITSrefit, kTRUE);//already in defaults 2011 | |
85f605cb | 78 | trkQualityCut->SetPtRange(0.15, 20.0); |
79 | trkQualityCut->SetEtaRange(-0.8, 0.8); | |
80 | ||
81 | trkQualityCut->Print(); | |
82 | ||
83 | if(isPP) cutSetQ = new AliRsnCutSetDaughterParticle(Form("cutQ_bit%i",aodFilterBit), trkQualityCut, AliRsnCutSetDaughterParticle::kQualityStd2010, AliPID::kPion, -1.0); | |
84 | else cutSetQ = new AliRsnCutSetDaughterParticle(Form("cutQ_bit%i",aodFilterBit), trkQualityCut, AliRsnCutSetDaughterParticle::kQualityStd2011, AliPID::kPion, -1.0); | |
85 | cutSetP = new AliRsnCutSetDaughterParticle(Form("cutP%i_%2.1fsigma",cutPrCandidate, nsigmaPr), trkQualityCut, cutPrCandidate, AliPID::kProton, nsigmaPr); | |
86 | cutSetK = new AliRsnCutSetDaughterParticle(Form("cutK%i_%2.1fsigma",cutKaCandidate, nsigmaKa), trkQualityCut, cutKaCandidate, AliPID::kKaon, nsigmaKa); | |
87 | ||
88 | } | |
89 | ||
90 | else | |
91 | { | |
92 | //default cuts 2010 for pp and 2011 for p-Pb | |
93 | if(isPP) { | |
94 | cutSetQ = new AliRsnCutSetDaughterParticle("cutQuality", AliRsnCutSetDaughterParticle::kQualityStd2010, AliPID::kPion, -1.0, aodFilterBit); | |
95 | cutSetP = new AliRsnCutSetDaughterParticle(Form("cutProton_%2.1fsigma",nsigmaPr), cutPrCandidate, AliPID::kProton, nsigmaPr, aodFilterBit); | |
96 | cutSetK = new AliRsnCutSetDaughterParticle(Form("cutKaon_%2.1f2sigma",nsigmaKa), cutKaCandidate, AliPID::kKaon, nsigmaKa, aodFilterBit); | |
97 | } | |
98 | else { | |
99 | cutSetQ = new AliRsnCutSetDaughterParticle("cutQuality", AliRsnCutSetDaughterParticle::kQualityStd2011, AliPID::kPion, -1.0, aodFilterBit); | |
100 | cutSetQ->SetUse2011StdQualityCuts(kTRUE); | |
101 | cutSetP = new AliRsnCutSetDaughterParticle(Form("cutProton2011_%2.1fsigma",nsigmaPr), cutPrCandidate, AliPID::kProton, nsigmaPr, aodFilterBit); | |
102 | cutSetP->SetUse2011StdQualityCuts(kTRUE); | |
103 | cutSetK = new AliRsnCutSetDaughterParticle(Form("cutKaon2011_%2.1f2sigma",nsigmaKa), cutKaCandidate, AliPID::kKaon, nsigmaKa, aodFilterBit); | |
104 | cutSetK->SetUse2011StdQualityCuts(kTRUE); | |
105 | } | |
106 | } | |
107 | ||
108 | Int_t iCutQ = task->AddTrackCuts(cutSetQ); | |
109 | Int_t iCutP = task->AddTrackCuts(cutSetP); | |
110 | Int_t iCutK = task->AddTrackCuts(cutSetK); | |
111 | ||
112 | if (enableMonitor){ | |
113 | Printf("======== Cut monitoring enabled"); | |
114 | gROOT->LoadMacro("$ALICE_ROOT/PWGLF/RESONANCES/macros/mini/AddMonitorOutput.C"); | |
115 | AddMonitorOutput(isMC, cutSetQ->GetMonitorOutput(), monitorOpt.Data()); | |
116 | AddMonitorOutput(isMC, cutSetP->GetMonitorOutput(), monitorOpt.Data()); | |
117 | AddMonitorOutput(isMC, cutSetK->GetMonitorOutput(), monitorOpt.Data()); | |
118 | } | |
119 | ||
120 | // -- Values ------------------------------------------------------------------------------------ | |
121 | /* invariant mass */ Int_t imID = task->CreateValue(AliRsnMiniValue::kInvMass, kFALSE); | |
122 | /* IM resolution */ Int_t resID = task->CreateValue(AliRsnMiniValue::kInvMassRes, kTRUE); | |
123 | /* transv. momentum */ Int_t ptID = task->CreateValue(AliRsnMiniValue::kPt, kFALSE); | |
124 | /* centrality */ Int_t centID = task->CreateValue(AliRsnMiniValue::kMult, kFALSE); | |
125 | /* pseudorapidity */ Int_t etaID = task->CreateValue(AliRsnMiniValue::kEta, kFALSE); | |
126 | /* rapidity */ Int_t yID = task->CreateValue(AliRsnMiniValue::kY, kFALSE); | |
127 | /* 1st daughter pt */ Int_t fdpt = task->CreateValue(AliRsnMiniValue::kFirstDaughterPt, kFALSE); | |
128 | /* 2nd daughter pt */ Int_t sdpt = task->CreateValue(AliRsnMiniValue::kSecondDaughterPt, kFALSE); | |
129 | /* 1st daughter p */ Int_t fdp = task->CreateValue(AliRsnMiniValue::kFirstDaughterP, kFALSE); | |
130 | /* 2nd daughter p */ Int_t sdp = task->CreateValue(AliRsnMiniValue::kSecondDaughterP, kFALSE); | |
131 | ||
132 | // -- Create all needed outputs ----------------------------------------------------------------- | |
133 | // use an array for more compact writing, which are different on mixing and charges | |
134 | // [0] = unlike | |
135 | // [1] = mixing | |
136 | // [2] = like ++ | |
137 | // [3] = like -- | |
138 | ||
139 | Bool_t use [12] = { !IsMcTrueOnly, !IsMcTrueOnly, !IsMcTrueOnly,!IsMcTrueOnly,!IsMcTrueOnly,!IsMcTrueOnly, isMC , isMC , isMC , isMC , useMixLS , useMixLS}; | |
140 | Bool_t useIM [12] = { 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 0 , 0 , 1 , 1 }; | |
141 | TString name [12] = {"UnlikePM" , "UnlikeMP" , "MixingPM" , "MixingMP" , "LikePP" , "LikeMM" ,"TruesPM","TruesMP","ResPM" ,"ResMP" ,"MixingPP","MixingMM"}; | |
142 | TString comp [12] = {"PAIR" , "PAIR" , "MIX" , "MIX" , "PAIR" , "PAIR" , "TRUE" , "TRUE" , "TRUE" , "TRUE" , "MIX" ,"MIX" }; | |
143 | TString output [12] = {"SPARSE" , "SPARSE" , "SPARSE" , "SPARSE" , "SPARSE" , "SPARSE" , "SPARSE","SPARSE" ,"SPARSE","SPARSE","SPARSE" ,"SPARSE"}; | |
144 | Char_t charge1 [12] = {'+' , '-' , '+' , '-' , '+' , '-' , '+' , '-' , '+' , '-' , '+' , '-' }; | |
145 | Char_t charge2 [12] = {'-' , '+' , '-' , '+' , '+' , '-' , '-' , '+' , '-' , '+' ,'+' , '-' }; | |
146 | Int_t cutID1 [12] = { iCutP , iCutP , iCutP , iCutP , iCutP , iCutP , iCutP , iCutP , iCutP , iCutP , iCutP , iCutP }; | |
147 | Int_t cutID2 [12] = { iCutK , iCutK , iCutK , iCutK , iCutK , iCutK , iCutK , iCutK , iCutK , iCutK , iCutK , iCutK }; | |
148 | ||
149 | //TString output [10] = {"HIST" , "HIST" , "HIST" , "HIST" , "HIST" , "HIST" , "HIST" , "HIST" , "HIST" , "HIST" }; | |
150 | ||
151 | for (Int_t i = 0; i < 12; i++) { | |
152 | if (!use[i]) continue; | |
153 | AliRsnMiniOutput *out = task->CreateOutput(Form("Lstar_%s%s", name[i].Data(), suffix), output[i].Data(), comp[i].Data()); | |
154 | out->SetCutID(0, cutID1[i]); | |
155 | out->SetCutID(1, cutID2[i]); | |
156 | out->SetDaughter(0, AliRsnDaughter::kProton); | |
157 | out->SetDaughter(1, AliRsnDaughter::kKaon); | |
158 | out->SetCharge(0, charge1[i]); | |
159 | out->SetCharge(1, charge2[i]); | |
160 | out->SetMotherPDG(signedPdg); | |
78e14f48 | 161 | out->SetMotherMass(1.51953); |
85f605cb | 162 | out->SetPairCuts(cutsPair); |
163 | ||
164 | // axis X: invmass (or resolution) | |
165 | if (useIM[i]) | |
166 | out->AddAxis(imID, 800, 1.4, 2.2); | |
167 | else | |
168 | out->AddAxis(resID, 200, -0.02, 0.02); | |
169 | ||
170 | // axis Y: transverse momentum of pair as default - else chosen value | |
171 | if (yaxisVar==AliRsnMiniValue::kFirstDaughterPt) { | |
172 | out->AddAxis(fdpt, 100, 0.0, 10.0); | |
173 | out->AddAxis(sdpt, 100, 0.0, 10.0); } | |
174 | else | |
175 | if (yaxisVar==AliRsnMiniValue::kFirstDaughterP) { | |
176 | out->AddAxis(fdp, 100, 0.0, 10.0); | |
177 | out->AddAxis(sdp, 100, 0.0, 10.0); } | |
178 | else | |
179 | out->AddAxis(ptID, 100, 0.0, 10.0); //default use mother pt | |
180 | ||
181 | // axis Z: centrality-multiplicity | |
182 | if (!isPP) | |
183 | out->AddAxis(centID, 100, 0.0, 100.0); | |
184 | else | |
185 | out->AddAxis(centID, 400, 0.0, 400.0); | |
186 | ||
187 | // axis W: pseudorapidity | |
188 | // out->AddAxis(etaID, 20, -1.0, 1.0); | |
189 | // axis J: rapidity | |
190 | // out->AddAxis(yID, 10, -0.5, 0.5); | |
191 | ||
192 | } | |
193 | ||
194 | if (isMC){ | |
195 | // create output | |
196 | AliRsnMiniOutput *outm = task->CreateOutput(Form("Lstar_Mother%s", suffix), "SPARSE", "MOTHER"); | |
197 | outm->SetDaughter(0, AliRsnDaughter::kProton); | |
198 | outm->SetDaughter(1, AliRsnDaughter::kKaon); | |
199 | outm->SetMotherPDG(signedPdg); | |
78e14f48 | 200 | outm->SetMotherMass(1.51953); |
85f605cb | 201 | // pair cuts |
202 | outm->SetPairCuts(cutsPair); | |
203 | // binnings | |
204 | outm->AddAxis(imID, 800, 1.4, 2.2); | |
205 | ||
206 | // axis Y: transverse momentum of pair as default - else chosen value | |
207 | if (yaxisVar==AliRsnMiniValue::kFirstDaughterPt) { | |
208 | outm->AddAxis(fdpt, 100, 0.0, 10.0); | |
209 | outm->AddAxis(sdpt, 100, 0.0, 10.0); } | |
210 | else | |
211 | if (yaxisVar==AliRsnMiniValue::kFirstDaughterP) { | |
212 | outm->AddAxis(fdp, 100, 0.0, 10.0); | |
213 | outm->AddAxis(sdp, 100, 0.0, 10.0); } | |
214 | else | |
215 | outm->AddAxis(ptID, 100, 0.0, 10.0); //default use mother pt | |
216 | ||
217 | ||
218 | if (!isPP){ | |
219 | outm->AddAxis(centID, 100, 0.0, 100.0); | |
220 | } else { | |
221 | outm->AddAxis(centID, 400, 0.0, 400.0); | |
222 | } | |
223 | } | |
224 | return kTRUE; | |
225 | } |