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 ;
35 AliAnalysisTaskDimuonCFContainerBuilder *AddTaskDimuonCFContainerBuilder(Bool_t readAOD=kTRUE, Bool_t readMC=kTRUE,
36 Bool_t isaccept = kTRUE, Double_t beamEn=3500)
39 // Check and Info printings
40 //==============================================================================
41 if(!readMC && isaccept) {
42 printf("ERROR: incompatible choice readMC-isaccept. If isaccept you must readMC!\n");
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");
49 // Get the pointer to the existing analysis manager via the static access method.
50 //==============================================================================
51 AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();
53 ::Error("AddDataTaskMuonPolarCF", "No analysis manager to connect to.");
58 // MC handler if needed
59 //==============================================================================
60 if(!readAOD && readMC){
61 AliMCEventHandler *mcH = (AliMCEventHandler*)mgr->GetMCtruthEventHandler();
63 ::Error("AddDataTaskMuonPolarCF", "No MC handler connected");
70 //==============================================================================
72 UInt_t y = 0; // Association of variables with int numbers
88 UInt_t nstep = 8; // Number of layers (always 8 - not always filled). 4 with CINT and 4 with CMU
90 const Int_t nvar = 15 ; // Number of variables of the grid
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 ;
108 Int_t iBin[nvar]; // Array containing the number of bins for each variable
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 ;
156 AliCFContainer* container = new AliCFContainer("container","Container for Dimuons",nstep,nvar,iBin);
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);
176 //==============================================================================
177 AliCFManager* man = new AliCFManager() ;
178 man->SetParticleContainer(container);
181 // Outputs: list of histograms + CFContainer
182 //==============================================================================
183 TString outputfile = AliAnalysisManager::GetCommonFileName();
184 outputfile += ":PWG3Muon_DimuonCFContainer";
186 AliAnalysisDataContainer *coutput1 = mgr->CreateContainer("Histos",TList::Class(),AliAnalysisManager::kOutputContainer,outputfile);
187 AliAnalysisDataContainer *coutput2 = mgr->CreateContainer("DimuonCFContainer",AliCFContainer::Class(),AliAnalysisManager::kOutputContainer,outputfile);
189 // The task with the associtated CF manager
190 //==============================================================================
191 AliAnalysisTaskDimuonCFContainerBuilder *task = new AliAnalysisTaskDimuonCFContainerBuilder("AliAnalysisTaskDimuonCFContainerBuilder",readAOD,readMC,isaccept,beamEn);
192 task->SetCFManager(man);
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);
206 // Adding the task to the analysis manager and connecting inputs and outputs
207 //==============================================================================
209 mgr->ConnectInput(task, 0, mgr->GetCommonInputContainer());
210 mgr->ConnectOutput(task,1,coutput1);
211 mgr->ConnectOutput(task,2,coutput2);