]>
Commit | Line | Data |
---|---|---|
7dd391ec | 1 | // VARIABLES RANGES |
2 | const Double_t ymin = -4.0 ; | |
3 | const Double_t ymax = -2.5 ; | |
4 | const Double_t ptmin = 0.0 ; | |
5 | const Double_t ptmax = 20. ; | |
6 | const Double_t cCSmin = -1. ; | |
7 | const Double_t cCSmax = 1. ; | |
8 | const Double_t cHEmin = -1. ; | |
9 | const Double_t cHEmax = 1. ; | |
10 | const Double_t pCSmin = 0. ; | |
11 | const Double_t pCSmax = TMath::Pi(); | |
12 | const Double_t pHEmin = 0. ; | |
13 | const Double_t pHEmax = TMath::Pi(); | |
14 | const Double_t massmin = 0. ; | |
15 | const Double_t massmax = 12. ; | |
16 | const Double_t trigmin = 0. ; | |
17 | const Double_t trigmax = 4. ; | |
18 | const Double_t ptmuminMIN = 0. ; | |
19 | const Double_t ptmuminMAX = 100. ; | |
20 | const Double_t ptmumaxMIN = 0. ; | |
21 | const Double_t ptmumaxMAX = 100. ; | |
22 | const Double_t thetamuminMIN = 0. ; | |
23 | const Double_t thetamuminMAX = 180. ; | |
24 | const Double_t thetamumaxMIN = 0. ; | |
25 | const Double_t thetamumaxMAX = 180. ; | |
26 | const Double_t pmuminMIN = 0. ; | |
27 | const Double_t pmuminMAX = 100. ; | |
28 | const Double_t pmumaxMIN = 0. ; | |
29 | const Double_t pmumaxMAX = 100. ; | |
30 | const Double_t trigsideMIN = 0 ; | |
31 | const Double_t trigsideMAX = 4 ; | |
32 | ||
33 | ||
34 | ||
35 | AliAnalysisTaskDimuonCFContainerBuilder *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 | } |