]> git.uio.no Git - u/mrichter/AliRoot.git/blame - PWG/muon/AddTaskDimuonCFContainerBuilder.C
Merge branch 'feature-movesplit'
[u/mrichter/AliRoot.git] / PWG / muon / AddTaskDimuonCFContainerBuilder.C
CommitLineData
7dd391ec 1// VARIABLES RANGES
2const Double_t ymin = -4.0 ;
3const Double_t ymax = -2.5 ;
4const Double_t ptmin = 0.0 ;
5const Double_t ptmax = 20. ;
6const Double_t cCSmin = -1. ;
7const Double_t cCSmax = 1. ;
8const Double_t cHEmin = -1. ;
9const Double_t cHEmax = 1. ;
10const Double_t pCSmin = 0. ;
11const Double_t pCSmax = TMath::Pi();
12const Double_t pHEmin = 0. ;
13const Double_t pHEmax = TMath::Pi();
14const Double_t massmin = 0. ;
15const Double_t massmax = 12. ;
16const Double_t trigmin = 0. ;
17const Double_t trigmax = 4. ;
18const Double_t ptmuminMIN = 0. ;
19const Double_t ptmuminMAX = 100. ;
20const Double_t ptmumaxMIN = 0. ;
21const Double_t ptmumaxMAX = 100. ;
22const Double_t thetamuminMIN = 0. ;
23const Double_t thetamuminMAX = 180. ;
24const Double_t thetamumaxMIN = 0. ;
25const Double_t thetamumaxMAX = 180. ;
26const Double_t pmuminMIN = 0. ;
27const Double_t pmuminMAX = 100. ;
28const Double_t pmumaxMIN = 0. ;
29const Double_t pmumaxMAX = 100. ;
30const Double_t trigsideMIN = 0 ;
31const Double_t trigsideMAX = 4 ;
32
33
34
35AliAnalysisTaskDimuonCFContainerBuilder *AddTaskDimuonCFContainerBuilder(Bool_t readAOD=kTRUE, Bool_t readMC=kTRUE,
36 Bool_t isaccept = kTRUE, Double_t beamEn=3500)
37{
38
39 // Check and Info printings
40 //==============================================================================
41 if(!readMC && isaccept) {
42 printf("ERROR: incompatible choice readMC-isaccept. If isaccept you must readMC!\n");
43 return NULL;
44 } else if (readMC && isaccept) printf("Creating task for filling a CFcontainer with acceptance data.\n");
45 else if (readMC && !isaccept) printf("Creating task for filling a CFcontainer with simulated data.\n");
46 else printf("Creating task for filling a CFcontainer with real data.\n");
47
48
49 // Get the pointer to the existing analysis manager via the static access method.
50 //==============================================================================
51 AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();
52 if (!mgr) {
53 ::Error("AddDataTaskMuonPolarCF", "No analysis manager to connect to.");
54 return NULL;
55 }
56
57
58 // MC handler if needed
59 //==============================================================================
60 if(!readAOD && readMC){
61 AliMCEventHandler *mcH = (AliMCEventHandler*)mgr->GetMCtruthEventHandler();
62 if (!mcH) {
63 ::Error("AddDataTaskMuonPolarCF", "No MC handler connected");
64 return NULL;
65 }
66 }
67
68
69 // DEFINING CONTAINER
70 //==============================================================================
71
72 UInt_t y = 0; // Association of variables with int numbers
73 UInt_t pt = 1;
74 UInt_t costHE = 2;
75 UInt_t phiHE = 3;
76 UInt_t costCS = 4;
77 UInt_t phiCS = 5;
78 UInt_t mass = 6;
79 UInt_t trig = 7;
80 UInt_t ptmumin = 8;
81 UInt_t ptmumax = 9;
82 UInt_t thetamumin=10;
83 UInt_t thetamumax=11;
84 UInt_t pmumin =12;
85 UInt_t pmumax =13;
86 UInt_t trigside =14;
87
88 UInt_t nstep = 8; // Number of layers (always 8 - not always filled). 4 with CINT and 4 with CMU
89
90 const Int_t nvar = 15 ; // Number of variables of the grid
91
92 const Int_t nbin1 = 10 ; // Number of bins for each variable
93 const Int_t nbin2 = 10 ;
94 const Int_t nbin3 = 20 ;
95 const Int_t nbin4 = 20 ;
96 const Int_t nbin5 = 20 ;
97 const Int_t nbin6 = 20 ;
98 const Int_t nbin7 = 240;
99 const Int_t nbin8 = 40 ;
100 const Int_t nbin9 = 100;
101 const Int_t nbin10 = 100;
102 const Int_t nbin11 = 180;
103 const Int_t nbin12 = 180;
104 const Int_t nbin13 = 100;
105 const Int_t nbin14 = 100;
106 const Int_t nbin15 = 4 ;
107
108 Int_t iBin[nvar]; // Array containing the number of bins for each variable
109 iBin[0] =nbin1;
110 iBin[1] =nbin2;
111 iBin[2] =nbin3;
112 iBin[3] =nbin4;
113 iBin[4] =nbin5;
114 iBin[5] =nbin6;
115 iBin[6] =nbin7;
116 iBin[7] =nbin8;
117 iBin[8] =nbin9;
118 iBin[9] =nbin10;
119 iBin[10]=nbin11;
120 iBin[11]=nbin12;
121 iBin[12]=nbin13;
122 iBin[13]=nbin14;
123 iBin[14]=nbin15;
124
125 Double_t *binLim1 = new Double_t[nbin1+1]; // Arrays for lower bounds
126 Double_t *binLim2 = new Double_t[nbin2+1];
127 Double_t *binLim3 = new Double_t[nbin3+1];
128 Double_t *binLim4 = new Double_t[nbin4+1];
129 Double_t *binLim5 = new Double_t[nbin5+1];
130 Double_t *binLim6 = new Double_t[nbin6+1];
131 Double_t *binLim7 = new Double_t[nbin7+1];
132 Double_t *binLim8 = new Double_t[nbin8+1];
133 Double_t *binLim9 = new Double_t[nbin9+1];
134 Double_t *binLim10= new Double_t[nbin10+1];
135 Double_t *binLim11= new Double_t[nbin11+1];
136 Double_t *binLim12= new Double_t[nbin12+1];
137 Double_t *binLim13= new Double_t[nbin13+1];
138 Double_t *binLim14= new Double_t[nbin14+1];
139 Double_t *binLim15= new Double_t[nbin15+1];
140 for(Int_t i=0; i<=nbin1; i++) binLim1[i] =(Double_t)ymin+(ymax-ymin)/nbin1*(Double_t)i;
141 for(Int_t i=0; i<=nbin2; i++) binLim2[i] =(Double_t)ptmin+(ptmax-ptmin)/nbin2*(Double_t)i;
142 for(Int_t i=0; i<=nbin3; i++) binLim3[i] =(Double_t)cHEmin+(cHEmax-cHEmin)/nbin3*(Double_t)i ;
143 for(Int_t i=0; i<=nbin4; i++) binLim4[i] =(Double_t)pHEmin+(pHEmax-pHEmin)/nbin4*(Double_t)i ;
144 for(Int_t i=0; i<=nbin5; i++) binLim5[i] =(Double_t)cCSmin+(cCSmax-cCSmin)/nbin5*(Double_t)i ;
145 for(Int_t i=0; i<=nbin6; i++) binLim6[i] =(Double_t)pCSmin+(pCSmax-pCSmin)/nbin6*(Double_t)i ;
146 for(Int_t i=0; i<=nbin7; i++) binLim7[i] =(Double_t)massmin+(massmax-massmin)/nbin7*(Double_t)i ;
147 for(Int_t i=0; i<=nbin8; i++) binLim8[i] =(Double_t)trigmin+(trigmax-trigmin)/nbin8*(Double_t)i ;
148 for(Int_t i=0; i<=nbin9; i++) binLim9[i] =(Double_t)ptmuminMIN+(ptmuminMAX-ptmuminMIN)/nbin9*(Double_t)i ;
149 for(Int_t i=0; i<=nbin10;i++) binLim10[i]=(Double_t)ptmumaxMIN+(ptmumaxMAX-ptmumaxMIN)/nbin10*(Double_t)i ;
150 for(Int_t i=0; i<=nbin11;i++) binLim11[i]=(Double_t)thetamuminMIN+(thetamuminMAX-thetamuminMIN)/nbin11*(Double_t)i ;
151 for(Int_t i=0; i<=nbin12;i++) binLim12[i]=(Double_t)thetamumaxMIN+(thetamumaxMAX-thetamumaxMIN)/nbin12*(Double_t)i ;
152 for(Int_t i=0; i<=nbin13;i++) binLim13[i]=(Double_t)pmuminMIN+(pmuminMAX-pmuminMIN)/nbin13*(Double_t)i ;
153 for(Int_t i=0; i<=nbin14;i++) binLim14[i]=(Double_t)pmumaxMIN+(pmumaxMAX-pmumaxMIN)/nbin14*(Double_t)i ;
154 for(Int_t i=0; i<=nbin15;i++) binLim15[i]=(Double_t)trigsideMIN+(trigsideMAX-trigsideMIN)/nbin15*(Double_t)i ;
155
156 AliCFContainer* container = new AliCFContainer("container","Container for Dimuons",nstep,nvar,iBin);
157
158 container -> SetBinLimits(y,binLim1); // setting the bin limits
159 container -> SetBinLimits(pt,binLim2);
160 container -> SetBinLimits(costHE,binLim3);
161 container -> SetBinLimits(phiHE,binLim4);
162 container -> SetBinLimits(costCS,binLim5);
163 container -> SetBinLimits(phiCS,binLim6);
164 container -> SetBinLimits(mass,binLim7);
165 container -> SetBinLimits(trig,binLim8);
166 container -> SetBinLimits(ptmumin,binLim9);
167 container -> SetBinLimits(ptmumax,binLim10);
168 container -> SetBinLimits(thetamumin,binLim11);
169 container -> SetBinLimits(thetamumax,binLim12);
170 container -> SetBinLimits(pmumin,binLim13);
171 container -> SetBinLimits(pmumax,binLim14);
172 container -> SetBinLimits(trigside,binLim15);
173
174
175 // CF Manager
176 //==============================================================================
177 AliCFManager* man = new AliCFManager() ;
178 man->SetParticleContainer(container);
179
180
181 // Outputs: list of histograms + CFContainer
182 //==============================================================================
183 TString outputfile = AliAnalysisManager::GetCommonFileName();
184 outputfile += ":PWG3Muon_DimuonCFContainer";
185
186 AliAnalysisDataContainer *coutput1 = mgr->CreateContainer("Histos",TList::Class(),AliAnalysisManager::kOutputContainer,outputfile);
187 AliAnalysisDataContainer *coutput2 = mgr->CreateContainer("DimuonCFContainer",AliCFContainer::Class(),AliAnalysisManager::kOutputContainer,outputfile);
188
189 // The task with the associtated CF manager
190 //==============================================================================
191 AliAnalysisTaskDimuonCFContainerBuilder *task = new AliAnalysisTaskDimuonCFContainerBuilder("AliAnalysisTaskDimuonCFContainerBuilder",readAOD,readMC,isaccept,beamEn);
192 task->SetCFManager(man);
193
194
195 // Additional settings for the task (including some cuts)
196 //==============================================================================
197 //task->SetDistinguishTrigClass(kTRUE);
198 //task->SetReadMCinfo(kTRUE);
199 //Double_t ptlimits[2]={1.,1000.};
200 //task->SetPtSingMuLimits(ptlimits);
201 //task->SetCutonZvtxSPD(kTRUE);
202 //Double_t vtxlimits[2]={-10.,10.};
203 //task->SetZprimVertLimits(vtxlimits);
204
205
206 // Adding the task to the analysis manager and connecting inputs and outputs
207 //==============================================================================
208 mgr->AddTask(task);
209 mgr->ConnectInput(task, 0, mgr->GetCommonInputContainer());
210 mgr->ConnectOutput(task,1,coutput1);
211 mgr->ConnectOutput(task,2,coutput2);
212
213 return task;
214}