]> git.uio.no Git - u/mrichter/AliRoot.git/blob - PWG3/muon/AddTaskDimuonCFContainerBuilder.C
Updates to run with deltas (L. Cunqueiro)
[u/mrichter/AliRoot.git] / PWG3 / muon / AddTaskDimuonCFContainerBuilder.C
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 }