]> git.uio.no Git - u/mrichter/AliRoot.git/blob - PWG/muon/AddTaskMuMu.C
Remove dependence from mixing frame
[u/mrichter/AliRoot.git] / PWG / muon / AddTaskMuMu.C
1 ///
2 /// Configuration example of a task to get invariant mass spectrum of dimuons
3 ///
4 /// \author: L. Aphecetche (Subatech) (laurent.aphecetche - at - subatech.in2p3.fr)
5 ///
6
7 AliAnalysisTask* AddTaskMuMu(const char* outputname, 
8                              TList* triggerClassesToConsider,
9                              const char* beamYear,
10                              Bool_t simulations)
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"
25   cout << "inputDataType=" << inputDataType.Data() << endl;
26   
27   // Configure analysis
28   //===========================================================================  
29
30   if (simulations && triggerClassesToConsider )
31   {
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
45   }
46
47   AliAnalysisTaskMuMu* task = new AliAnalysisTaskMuMu;
48   
49   AliAnalysisMuMuEventCutter* eventCutter = new AliAnalysisMuMuEventCutter(triggerClassesToConsider);
50   
51   AliAnalysisMuMuCutRegistry* cr = task->CutRegistry();
52   
53   AliAnalysisMuMuCutElement* eventTrue = cr->AddEventCut(*eventCutter,"IsTrue","const AliVEvent&","");
54
55   AliAnalysisMuMuCutElement* ps = eventTrue;
56   
57   if (!simulations)
58   {
59     ps = cr->AddEventCut(*eventCutter,"IsPhysicsSelected","const AliInputEventHandler&","");
60   }
61
62   AliAnalysisMuMuCutElement* triggerSelection = cr->AddTriggerClassCut(*eventCutter,"SelectTriggerClass","const TString&,TString&,UInt_t,UInt_t,UInt_t","");
63
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 )
93   {
94     AliAnalysisMuMuCutElement* triggerAll = cr->AddTriggerClassCut(*globalAnalysis,"SelectAnyTriggerClass","const TString&,TString&","");
95     
96     cr->AddCutCombination(triggerAll);
97     
98     task->AdoptSubAnalysis(globalAnalysis);
99   }
100   
101   if ( nchAnalysis )
102   {
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");
114     
115     cr->AddCutCombination(ps,cutZ18);
116     cr->AddCutCombination(ps,cutZ10);
117     
118     task->AdoptSubAnalysis(nchAnalysis);
119   }
120   
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);
128
129     cr->AddCutCombination(rabs);
130     
131     cr->AddCutCombination(eta);
132
133     cr->AddCutCombination(rabs,eta);
134
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");
142   
143       cr->AddCutCombination(rabs,eta,pairy);
144
145       cr->AddCutCombination(rabs,pairy);
146
147       cr->AddCutCombination(pairy);
148
149       cr->AddCutCombination(pairTrue);
150
151       task->AdoptSubAnalysis(minvAnalysis);
152     }
153   }
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)
158
159   AliAnalysisMuMuBinning* binning = task->Binning();
160   
161   if (minvAnalysis)
162   {
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
180     
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     }
199   }
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);
211
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");
217
218   // add the configured task to the analysis manager
219   mgr->AddTask(task);  
220   
221   // Create containers for input/output
222   AliAnalysisDataContainer *cinput = mgr->GetCommonInputContainer();  
223
224   AliAnalysisDataContainer *coutputHC = 
225   mgr->CreateContainer("OC",AliMergeableCollection::Class(),AliAnalysisManager::kOutputContainer,outputname);
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);
232   
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);
238   
239   return task;
240 }
241