2 /// Configuration example of a task to get invariant mass spectrum of dimuons
4 /// \author: L. Aphecetche (Subatech) (laurent.aphecetche - at - subatech.in2p3.fr)
7 AliAnalysisTask* AddTaskMuMu(const char* outputname,
8 TList* triggerClassesToConsider,
12 AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();
14 ::Error("AddTaskMuMu", "No analysis manager to connect to.");
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");
24 TString inputDataType = mgr->GetInputEventHandler()->GetDataType(); // can be "ESD" or "AOD"
25 cout << "inputDataType=" << inputDataType.Data() << endl;
28 //===========================================================================
30 if (simulations && triggerClassesToConsider )
32 // triggerClassesToConsider->Add(new TObjString("CMULLO-B-NOPF-MUON"));
33 // triggerClassesToConsider->Add(new TObjString("CMSNGL-B-NOPF-MUON"));
34 triggerClassesToConsider->Add(new TObjString("ANY"));
36 // triggerClassesToConsider->Add(new TObjString("MB1"));
37 // triggerClassesToConsider->Add(new TObjString("C0T0A"));
39 // triggerClassesToConsider->Add(new TObjString("MULow"));
40 // triggerClassesToConsider->Add(new TObjString("V0L"));
41 // triggerClassesToConsider->Add(new TObjString("V0R"));
43 // for dpmjet simulations (at least) we have the following "triggers" :
44 // C0T0A,C0T0C,MB1,MBBG1,V0L,V0R,MULow,EMPTY,MBBG3,MULL,MULU,MUHigh
47 AliAnalysisTaskMuMu* task = new AliAnalysisTaskMuMu;
49 AliAnalysisMuMuEventCutter* eventCutter = new AliAnalysisMuMuEventCutter(triggerClassesToConsider);
51 AliAnalysisMuMuCutRegistry* cr = task->CutRegistry();
53 AliAnalysisMuMuCutElement* eventTrue = cr->AddEventCut(*eventCutter,"IsTrue","const AliVEvent&","");
55 AliAnalysisMuMuCutElement* ps = eventTrue;
59 ps = cr->AddEventCut(*eventCutter,"IsPhysicsSelected","const AliInputEventHandler&","");
62 AliAnalysisMuMuCutElement* triggerSelection = cr->AddTriggerClassCut(*eventCutter,"SelectTriggerClass","const TString&,TString&,UInt_t,UInt_t,UInt_t","");
64 cr->AddCutCombination(triggerSelection);
66 // AliAnalysisMuMuCutElement* cutVDM = cr->AddEventCut(*eventCutter,"IsPhysicsSelectedVDM","const AliVEvent&","");
68 // AliAnalysisMuMuCutElement* cutTZEROPileUp = cr->AddEventCut(*eventCutter,"IsTZEROPileUp","const AliVEvent&","");
70 // AliAnalysisMuMuCutElement* notTZEROPileUp = cr->Not(*cutTZEROPileUp);
72 cr->AddCutCombination(ps);
74 task->SetBeamYear(beamYear);
76 AliAnalysisMuMuGlobal* globalAnalysis = 0x0;//new AliAnalysisMuMuGlobal;
78 AliAnalysisMuMuSingle* singleAnalysis = new AliAnalysisMuMuSingle;
80 AliAnalysisMuMuMinv* minvAnalysis = new AliAnalysisMuMuMinv;
82 // TFile f("$HOME/Downloads/ResponseMatrix_QASPDZPSALL_ANY.root");
83 // TH2* h = static_cast<TH2*>(f.Get("ResponseMatrix"));
85 AliAnalysisMuMuNch* nchAnalysis = new AliAnalysisMuMuNch; // (0x0,-2,2,-40,40);
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);
94 AliAnalysisMuMuCutElement* triggerAll = cr->AddTriggerClassCut(*globalAnalysis,"SelectAnyTriggerClass","const TString&,TString&","");
96 cr->AddCutCombination(triggerAll);
98 task->AdoptSubAnalysis(globalAnalysis);
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");
107 // cr->AddCutCombination(ps,trketa1);
108 // cr->AddCutCombination(ps,trk5eta1);
109 // cr->AddCutCombination(ps,trketa2);
111 AliAnalysisMuMuCutElement* cutZ18= cr->AddEventCut(*eventCutter,"IsAbsZBelowValue","const AliVEvent&,Double_t","18");
113 AliAnalysisMuMuCutElement* cutZ10 = cr->AddEventCut(*eventCutter,"IsAbsZBelowValue","const AliVEvent&,Double_t","10");
115 cr->AddCutCombination(ps,cutZ18);
116 cr->AddCutCombination(ps,cutZ10);
118 task->AdoptSubAnalysis(nchAnalysis);
121 if ( singleAnalysis )
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");
127 cr->AddCutCombination(trackTrue);
129 cr->AddCutCombination(rabs);
131 cr->AddCutCombination(eta);
133 cr->AddCutCombination(rabs,eta);
135 task->AdoptSubAnalysis(singleAnalysis);
139 AliAnalysisMuMuCutElement* pairTrue = cr->AddTrackPairCut(*cr,"AlwaysTrue","const AliVParticle&, const AliVParticle&","");
141 AliAnalysisMuMuCutElement* pairy = cr->AddTrackPairCut(*minvAnalysis,"IsRapidityInRange","const AliVParticle&,const AliVParticle&,Double_t&,Double_t&","-4,-2.5");
143 cr->AddCutCombination(rabs,eta,pairy);
145 cr->AddCutCombination(rabs,pairy);
147 cr->AddCutCombination(pairy);
149 cr->AddCutCombination(pairTrue);
151 task->AdoptSubAnalysis(minvAnalysis);
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)
159 AliAnalysisMuMuBinning* binning = task->Binning();
163 binning->AddBin("psi","pt");
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");
181 binning->AddBin("psi","y",-4,-2.5,"ILAB");
183 for ( Int_t i = 0; i < 6; ++i )
185 Double_t y = -4+i*0.25;
187 binning->AddBin("psi","y",y,y+0.25,"6PACK");
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
201 // v0 centrality binning
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);
212 // disable some histograms if we don't want them
213 task->DisableHistograms("^V02D");
214 task->DisableHistograms("^dca");
215 task->DisableHistograms("^Chi12");
216 task->DisableHistograms("^Rabs12");
218 // add the configured task to the analysis manager
221 // Create containers for input/output
222 AliAnalysisDataContainer *cinput = mgr->GetCommonInputContainer();
224 AliAnalysisDataContainer *coutputHC =
225 mgr->CreateContainer("OC",AliMergeableCollection::Class(),AliAnalysisManager::kOutputContainer,outputname);
227 AliAnalysisDataContainer *coutputCC =
228 mgr->CreateContainer("CC",AliCounterCollection::Class(),AliAnalysisManager::kOutputContainer,outputname);
230 AliAnalysisDataContainer* cparam =
231 mgr->CreateContainer("BIN", AliAnalysisMuMuBinning::Class(),AliAnalysisManager::kParamContainer,outputname);
233 // Connect input/output
234 mgr->ConnectInput(task, 0, cinput);
235 mgr->ConnectOutput(task, 1, coutputHC);
236 mgr->ConnectOutput(task, 2, coutputCC);
237 mgr->ConnectOutput(task, 3, cparam);