]>
Commit | Line | Data |
---|---|---|
764cabcb | 1 | /// |
5376e016 | 2 | /// Configuration example of a task to get invariant mass spectrum of dimuons |
764cabcb | 3 | /// |
5376e016 | 4 | /// \author: L. Aphecetche (Subatech) (laurent.aphecetche - at - subatech.in2p3.fr) |
764cabcb | 5 | /// |
6 | ||
7b303c5a | 7 | AliAnalysisTask* AddTaskMuMu(const char* outputname, |
5376e016 CP |
8 | TList* triggerClassesToConsider, |
9 | const char* beamYear, | |
10 | Bool_t simulations) | |
764cabcb | 11 | { |
12 | AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager(); | |
13 | if (!mgr) { | |
14 | ::Error("AddTaskMuMu", "No analysis manager to connect to."); | |
15 | return NULL; | |
16 | } | |
17 | ||
18 | // Check the analysis type using the event handlers connected to the analysis manager. | |
19 | //============================================================================== | |
20 | if (!mgr->GetInputEventHandler()) { | |
21 | ::Error("AddTaskMuMu", "This task requires an input event handler"); | |
22 | return NULL; | |
23 | } | |
24 | TString inputDataType = mgr->GetInputEventHandler()->GetDataType(); // can be "ESD" or "AOD" | |
7b303c5a | 25 | cout << "inputDataType=" << inputDataType.Data() << endl; |
764cabcb | 26 | |
27 | // Configure analysis | |
28 | //=========================================================================== | |
5376e016 | 29 | |
7b303c5a | 30 | if (simulations && triggerClassesToConsider ) |
31 | { | |
5376e016 CP |
32 | // triggerClassesToConsider->Add(new TObjString("CMULLO-B-NOPF-MUON")); |
33 | // triggerClassesToConsider->Add(new TObjString("CMSNGL-B-NOPF-MUON")); | |
34 | triggerClassesToConsider->Add(new TObjString("ANY")); | |
35 | ||
36 | // triggerClassesToConsider->Add(new TObjString("MB1")); | |
37 | // triggerClassesToConsider->Add(new TObjString("C0T0A")); | |
38 | ||
39 | // triggerClassesToConsider->Add(new TObjString("MULow")); | |
40 | // triggerClassesToConsider->Add(new TObjString("V0L")); | |
41 | // triggerClassesToConsider->Add(new TObjString("V0R")); | |
42 | // | |
43 | // for dpmjet simulations (at least) we have the following "triggers" : | |
44 | // C0T0A,C0T0C,MB1,MBBG1,V0L,V0R,MULow,EMPTY,MBBG3,MULL,MULU,MUHigh | |
7b303c5a | 45 | } |
5376e016 CP |
46 | |
47 | AliAnalysisTaskMuMu* task = new AliAnalysisTaskMuMu; | |
7b303c5a | 48 | |
5376e016 | 49 | AliAnalysisMuMuEventCutter* eventCutter = new AliAnalysisMuMuEventCutter(triggerClassesToConsider); |
764cabcb | 50 | |
5376e016 CP |
51 | AliAnalysisMuMuCutRegistry* cr = task->CutRegistry(); |
52 | ||
53 | AliAnalysisMuMuCutElement* eventTrue = cr->AddEventCut(*eventCutter,"IsTrue","const AliVEvent&",""); | |
7b303c5a | 54 | |
5376e016 CP |
55 | AliAnalysisMuMuCutElement* ps = eventTrue; |
56 | ||
57 | if (!simulations) | |
7b303c5a | 58 | { |
5376e016 | 59 | ps = cr->AddEventCut(*eventCutter,"IsPhysicsSelected","const AliInputEventHandler&",""); |
7b303c5a | 60 | } |
61 | ||
5376e016 | 62 | AliAnalysisMuMuCutElement* triggerSelection = cr->AddTriggerClassCut(*eventCutter,"SelectTriggerClass","const TString&,TString&,UInt_t,UInt_t,UInt_t",""); |
2f331ac9 | 63 | |
5376e016 CP |
64 | cr->AddCutCombination(triggerSelection); |
65 | ||
66 | // AliAnalysisMuMuCutElement* cutVDM = cr->AddEventCut(*eventCutter,"IsPhysicsSelectedVDM","const AliVEvent&",""); | |
67 | // | |
68 | // AliAnalysisMuMuCutElement* cutTZEROPileUp = cr->AddEventCut(*eventCutter,"IsTZEROPileUp","const AliVEvent&",""); | |
69 | // | |
70 | // AliAnalysisMuMuCutElement* notTZEROPileUp = cr->Not(*cutTZEROPileUp); | |
71 | ||
72 | cr->AddCutCombination(ps); | |
73 | ||
74 | task->SetBeamYear(beamYear); | |
75 | ||
76 | AliAnalysisMuMuGlobal* globalAnalysis = 0x0;//new AliAnalysisMuMuGlobal; | |
77 | ||
78 | AliAnalysisMuMuSingle* singleAnalysis = new AliAnalysisMuMuSingle; | |
79 | ||
80 | AliAnalysisMuMuMinv* minvAnalysis = new AliAnalysisMuMuMinv; | |
81 | ||
82 | // TFile f("$HOME/Downloads/ResponseMatrix_QASPDZPSALL_ANY.root"); | |
83 | // TH2* h = static_cast<TH2*>(f.Get("ResponseMatrix")); | |
84 | ||
85 | AliAnalysisMuMuNch* nchAnalysis = new AliAnalysisMuMuNch; // (0x0,-2,2,-40,40); | |
86 | ||
87 | // AliAnalysisMuMuNch(TH2* spdCorrection=0x0, | |
88 | // Int_t nbinsEta=10, Double_t etaMin=-0.5, Double_t etaMax=0.5, | |
89 | // Int_t nbinsZ=320, Double_t zmin=-40, Double_t zmax=40); | |
90 | ||
91 | ||
92 | if ( globalAnalysis ) | |
7b303c5a | 93 | { |
5376e016 CP |
94 | AliAnalysisMuMuCutElement* triggerAll = cr->AddTriggerClassCut(*globalAnalysis,"SelectAnyTriggerClass","const TString&,TString&",""); |
95 | ||
96 | cr->AddCutCombination(triggerAll); | |
7b303c5a | 97 | |
5376e016 | 98 | task->AdoptSubAnalysis(globalAnalysis); |
7b303c5a | 99 | } |
7b303c5a | 100 | |
5376e016 | 101 | if ( nchAnalysis ) |
7b303c5a | 102 | { |
5376e016 CP |
103 | // AliAnalysisMuMuCutElement* trketa2 = cr->AddEventCut(*nchAnalysis,"HasAtLeastNTrackletsInEtaRange","const AliVEvent&,Int_t, Double_t& , Double_t& ","1,-2.0,2.0"); |
104 | // AliAnalysisMuMuCutElement* trketa1 = cr->AddEventCut(*nchAnalysis,"HasAtLeastNTrackletsInEtaRange","const AliVEvent&,Int_t, Double_t& , Double_t& ","1,-1.0,1.0"); | |
105 | // AliAnalysisMuMuCutElement* trk5eta1 = cr->AddEventCut(*nchAnalysis,"HasAtLeastNTrackletsInEtaRange","const AliVEvent&,Int_t, Double_t& , Double_t& ","5,-1.0,1.0"); | |
106 | // | |
107 | // cr->AddCutCombination(ps,trketa1); | |
108 | // cr->AddCutCombination(ps,trk5eta1); | |
109 | // cr->AddCutCombination(ps,trketa2); | |
110 | ||
111 | AliAnalysisMuMuCutElement* cutZ18= cr->AddEventCut(*eventCutter,"IsAbsZBelowValue","const AliVEvent&,Double_t","18"); | |
112 | ||
113 | AliAnalysisMuMuCutElement* cutZ10 = cr->AddEventCut(*eventCutter,"IsAbsZBelowValue","const AliVEvent&,Double_t","10"); | |
7b303c5a | 114 | |
5376e016 CP |
115 | cr->AddCutCombination(ps,cutZ18); |
116 | cr->AddCutCombination(ps,cutZ10); | |
117 | ||
118 | task->AdoptSubAnalysis(nchAnalysis); | |
7b303c5a | 119 | } |
120 | ||
5376e016 CP |
121 | if ( singleAnalysis ) |
122 | { | |
123 | AliAnalysisMuMuCutElement* trackTrue = cr->AddTrackCut(*cr,"AlwaysTrue","const AliVParticle&",""); | |
124 | AliAnalysisMuMuCutElement* rabs = cr->AddTrackCut(*singleAnalysis,"IsRabsOK","const AliVParticle&",""); | |
125 | AliAnalysisMuMuCutElement* eta = cr->AddTrackCut(*singleAnalysis,"IsEtaInRange","const AliVParticle&,Double_t&,Double_t&","-4.0,-2.5"); | |
126 | ||
127 | cr->AddCutCombination(trackTrue); | |
2f331ac9 | 128 | |
5376e016 CP |
129 | cr->AddCutCombination(rabs); |
130 | ||
131 | cr->AddCutCombination(eta); | |
132 | ||
133 | cr->AddCutCombination(rabs,eta); | |
2f331ac9 | 134 | |
5376e016 CP |
135 | task->AdoptSubAnalysis(singleAnalysis); |
136 | ||
137 | if ( minvAnalysis ) | |
138 | { | |
139 | AliAnalysisMuMuCutElement* pairTrue = cr->AddTrackPairCut(*cr,"AlwaysTrue","const AliVParticle&, const AliVParticle&",""); | |
140 | ||
141 | AliAnalysisMuMuCutElement* pairy = cr->AddTrackPairCut(*minvAnalysis,"IsRapidityInRange","const AliVParticle&,const AliVParticle&,Double_t&,Double_t&","-4,-2.5"); | |
2f331ac9 | 142 | |
5376e016 | 143 | cr->AddCutCombination(rabs,eta,pairy); |
764cabcb | 144 | |
5376e016 | 145 | cr->AddCutCombination(rabs,pairy); |
764cabcb | 146 | |
5376e016 CP |
147 | cr->AddCutCombination(pairy); |
148 | ||
149 | cr->AddCutCombination(pairTrue); | |
150 | ||
151 | task->AdoptSubAnalysis(minvAnalysis); | |
152 | } | |
7b303c5a | 153 | } |
5376e016 CP |
154 | |
155 | /// below are the kind of configurations that can be performed : | |
156 | /// - adding cuts (at event, track or pair level) | |
157 | /// - adding bins (in pt, y, centrality, etc...) for minv (and meanpt) | |
7b303c5a | 158 | |
5376e016 CP |
159 | AliAnalysisMuMuBinning* binning = task->Binning(); |
160 | ||
161 | if (minvAnalysis) | |
7b303c5a | 162 | { |
5376e016 CP |
163 | binning->AddBin("psi","pt"); |
164 | ||
165 | // pt binning | |
166 | ||
167 | binning->AddBin("psi","pt", 0.0, 1.0,"IGOR"); | |
168 | binning->AddBin("psi","pt", 1.0, 2.0,"IGOR"); | |
169 | binning->AddBin("psi","pt", 2.0, 3.0,"IGOR"); | |
170 | binning->AddBin("psi","pt", 3.0, 4.0,"IGOR"); | |
171 | binning->AddBin("psi","pt", 4.0, 5.0,"IGOR"); | |
172 | binning->AddBin("psi","pt", 5.0, 6.0,"IGOR"); | |
173 | binning->AddBin("psi","pt", 6.0, 7.0,"IGOR"); | |
174 | binning->AddBin("psi","pt", 7.0, 9.0,"IGOR"); | |
175 | binning->AddBin("psi","pt", 9.0,11.0,"IGOR"); | |
176 | binning->AddBin("psi","pt",11.0,15.0,"IGOR"); | |
177 | binning->AddBin("psi","pt",15.0,25.0,"IGOR"); | |
178 | ||
179 | // y binning | |
7b303c5a | 180 | |
5376e016 CP |
181 | binning->AddBin("psi","y",-4,-2.5,"ILAB"); |
182 | ||
183 | for ( Int_t i = 0; i < 6; ++i ) | |
184 | { | |
185 | Double_t y = -4+i*0.25; | |
186 | ||
187 | binning->AddBin("psi","y",y,y+0.25,"6PACK"); | |
188 | } | |
189 | ||
190 | // nch binning | |
191 | if (nchAnalysis) | |
192 | { | |
193 | binning->AddBin("psi","nch",0.0,30.0,"JAVI"); // 0 - 29 | |
194 | binning->AddBin("psi","nch",29.0,42.0,"JAVI"); // 30 - 41 | |
195 | binning->AddBin("psi","nch",41.0,56.0,"JAVI"); // 42 - 55 | |
196 | binning->AddBin("psi","nch",55.0,72.0,"JAVI"); // 56 - 72 | |
197 | binning->AddBin("psi","nch",72.0,301.0,"JAVI"); // 73 - 300 | |
198 | } | |
7b303c5a | 199 | } |
5376e016 CP |
200 | |
201 | // v0 centrality binning | |
202 | ||
203 | binning->AddBin("centrality","v0a"); | |
204 | // binning->AddBin("centrality","v0a",0,5); | |
205 | // binning->AddBin("centrality","v0a",5,10); | |
206 | // binning->AddBin("centrality","v0a",10,20); | |
207 | // binning->AddBin("centrality","v0a",20,40); | |
208 | // binning->AddBin("centrality","v0a",40,60); | |
209 | // binning->AddBin("centrality","v0a",60,80); | |
210 | // binning->AddBin("centrality","v0a",80,100); | |
7b303c5a | 211 | |
5376e016 | 212 | // disable some histograms if we don't want them |
7b303c5a | 213 | task->DisableHistograms("^V02D"); |
214 | task->DisableHistograms("^dca"); | |
215 | task->DisableHistograms("^Chi12"); | |
216 | task->DisableHistograms("^Rabs12"); | |
5376e016 CP |
217 | |
218 | // add the configured task to the analysis manager | |
764cabcb | 219 | mgr->AddTask(task); |
220 | ||
764cabcb | 221 | // Create containers for input/output |
222 | AliAnalysisDataContainer *cinput = mgr->GetCommonInputContainer(); | |
7b303c5a | 223 | |
224 | AliAnalysisDataContainer *coutputHC = | |
5376e016 | 225 | mgr->CreateContainer("OC",AliMergeableCollection::Class(),AliAnalysisManager::kOutputContainer,outputname); |
7b303c5a | 226 | |
227 | AliAnalysisDataContainer *coutputCC = | |
228 | mgr->CreateContainer("CC",AliCounterCollection::Class(),AliAnalysisManager::kOutputContainer,outputname); | |
229 | ||
230 | AliAnalysisDataContainer* cparam = | |
231 | mgr->CreateContainer("BIN", AliAnalysisMuMuBinning::Class(),AliAnalysisManager::kParamContainer,outputname); | |
764cabcb | 232 | |
233 | // Connect input/output | |
234 | mgr->ConnectInput(task, 0, cinput); | |
7b303c5a | 235 | mgr->ConnectOutput(task, 1, coutputHC); |
236 | mgr->ConnectOutput(task, 2, coutputCC); | |
237 | mgr->ConnectOutput(task, 3, cparam); | |
764cabcb | 238 | |
239 | return task; | |
240 | } | |
241 |