]>
Commit | Line | Data |
---|---|---|
ab1beea4 | 1 | /*************************************************************************** |
5ce0629b | 2 | subhash.singha@cern.ch - last modified on 20/01/2014 |
ab1beea4 FB |
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 -- | |
5ce0629b | 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 }; | |
ab1beea4 | 125 | |
5ce0629b | 126 | for (Int_t i = 0; i < 12; i++) { |
ab1beea4 FB |
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 |