]> git.uio.no Git - u/mrichter/AliRoot.git/blob - PWGCF/Correlations/macros/dptdptcorrelations/AddTaskDptDptCorr_dca1.C
Merge branch 'master' of https://git.cern.ch/reps/AliRoot
[u/mrichter/AliRoot.git] / PWGCF / Correlations / macros / dptdptcorrelations / AddTaskDptDptCorr_dca1.C
1 //
2 // Macro designed for use with the AliAnalysisTaskDptDptCorrelations task.
3 //
4 // Author: Prabhat Pujahari & Claude Pruneau, Wayne State
5 // 
6 //           system:  0: PbPb                 1: pPb
7 //      singlesOnly:  0: full correlations    1: singles only
8 //       useWeights:  0: no                   1: yes
9 // centralityMethod:  3: track count  4: V0 centrality  7: V0A centrality for pPb
10 //        chargeSet:  0: ++    1: +-    2: -+    3: --
11 /////////////////////////////////////////////////////////////////////////////////
12 AliAnalysisTaskDptDptCorrelations *AddTaskDptDptCorr_dca1
13 (int    system                 = 0,
14  int    singlesOnly            = 0,
15  int    useWeights             = 1, 
16  int    centralityMethod       = 4,
17  int    chargeSet              = 1,
18  int    trackFilterBit         = 128,
19  int    nClusterMin            = 80, 
20  double etaMin                 = -0.9,
21  double etaMax                 = 0.9,
22  double dcaZMin                = -2.0,
23  double dcaZMax                =  2.0,
24  double dcaXYMin               = -2.4,
25  double dcaXYMax               =  2.4,
26  int nCentrality               =  4,
27  Bool_t trigger                = kFALSE,
28  const char* taskname          = "dcaz2",
29  char *inputHistogramFileName  = "alien:///alice/cern.ch/user/p/prabhat/CalibFiles/PbPbCalib_dca1.root")
30   
31 {
32   // Set Default Configuration of this analysis
33   // ==========================================
34   int    debugLevel             = 0;
35   int    rejectPileup           = 1;
36   int    rejectPairConversion   = 1;
37   int    sameFilter             = 1;
38
39   
40   //int    nCentrality;
41   double minCentrality[10];
42   double maxCentrality[10];
43
44   if (system==0) // PbPb
45     {
46     if (centralityMethod == 4)
47       {
48
49         minCentrality[0] = 0.0; maxCentrality[0] = 5.0;
50         minCentrality[1] = 5.0; maxCentrality[1] = 10.;
51         minCentrality[2] = 30.; maxCentrality[2] = 40.; 
52         minCentrality[3] = 60.; maxCentrality[3] = 70.; 
53         
54         //nCentrality = 10;
55         /*minCentrality[0] = 0.0; maxCentrality[0] = 5.0;
56         minCentrality[1] = 5.0; maxCentrality[1] = 10.;
57         minCentrality[2] = 10.; maxCentrality[2] = 20.;
58         minCentrality[3] = 20.; maxCentrality[3] = 30.;
59         minCentrality[4] = 30.; maxCentrality[4] = 40.;
60         minCentrality[5] = 40.; maxCentrality[5] = 50.;
61         minCentrality[6] = 50.; maxCentrality[6] = 60.;
62         minCentrality[7] = 60.; maxCentrality[7] = 70.;
63         minCentrality[8] = 70.; maxCentrality[8] = 80.;
64         minCentrality[9] = 80.; maxCentrality[9] = 90.;
65         */
66       }
67     else
68       {
69         //cout << "-F- AddTaskDptDptCorrelations() system:" << system << ". centralityMethod:" << centralityMethod << " Option NOT AVAILABLE. ABORT."
70       return 0;
71       }
72     }
73   else if (system==1) // pPb
74     {
75     if (centralityMethod == 7)
76       {
77         minCentrality[0] = 0;   maxCentrality[0] = 20.0;
78         minCentrality[1] = 20.; maxCentrality[1] = 40.;
79         minCentrality[2] = 40.; maxCentrality[2] = 60.;
80         minCentrality[3] = 60.; maxCentrality[3] = 80.;
81       }
82     else
83       {
84         //cout << "-F- AddTaskDptDptCorrelations() system:" << system << ". centralityMethod:" << centralityMethod << " Option NOT AVAILABLE. ABORT."
85       return 0;
86       }
87     }
88   else
89     {
90       //cout << "-F- AddTaskDptDptCorrelations() system:" << system << ". Option NOT CURRENTLY AVAILABLE. ABORT."
91     return 0;
92     }
93
94   double zMin                   = -10.;
95   double zMax                   =  10.;
96   double ptMin                  =  0.2;
97   double ptMax                  =  2.0;
98   double dedxMin                =  0.0;
99   double dedxMax                =  20000.0;
100   int    requestedCharge1       =  1; //default
101   int    requestedCharge2       = -1; //default
102   
103   
104   // Get the pointer to the existing analysis manager via the static access method.
105   // ==============================================================================
106   AliAnalysisManager *analysisManager = AliAnalysisManager::GetAnalysisManager();
107   
108   if (!analysisManager) 
109     {
110     ::Error("AddTaskDptDptCorrelations", "No analysis manager to connect to.");
111     return NULL;
112     }  
113   
114   TString part1Name;
115   TString part2Name;
116   TString eventName;
117   TString prefixName        = "Corr_";
118   TString pileupRejecSuffix = "_PileupRejec";
119   TString pairRejecSuffix   = "_PairRejec";
120   TString calibSuffix       = "_calib";
121   TString singlesOnlySuffix = "_SO";
122   TString suffix;
123   
124   TString inputPath         = ".";
125   TString outputPath        = ".";
126   TString baseName;
127   TString listName;
128   TString taskName;
129   //TString inputHistogramFileName;
130   TString outputHistogramFileName;
131   
132   // Create the task and add subtask.
133   // ===========================================================================
134   int iTask = 0; // task counter
135   AliAnalysisDataContainer *taskInputContainer;
136   AliAnalysisDataContainer *taskOutputContainer;
137   AliAnalysisTaskDptDptCorrelations* task;
138   
139   for (int iCentrality=0; iCentrality < nCentrality; ++iCentrality)
140     {
141       switch (chargeSet)
142         {
143           case 0: part1Name = "P_"; part2Name = "P_"; requestedCharge1 =  1; requestedCharge2 =  1; sameFilter = 1; break;
144           case 1: part1Name = "P_"; part2Name = "M_"; requestedCharge1 =  1; requestedCharge2 = -1; sameFilter = 0;   break;
145           case 2: part1Name = "M_"; part2Name = "P_"; requestedCharge1 = -1; requestedCharge2 =  1; sameFilter = 0;   break;
146           case 3: part1Name = "M_"; part2Name = "M_"; requestedCharge1 = -1; requestedCharge2 = -1; sameFilter = 1;   break;
147         }
148
149       part1Name += "eta";
150       part1Name += int(1000*etaMax);
151       part1Name += "_";
152       part1Name += int(1000*ptMin);
153       part1Name += "pt";
154       part1Name += int(1000*ptMax);
155       part1Name += "_";
156       part1Name += int(1000*dcaZMin);
157       part1Name += "DCA";
158       part1Name += int(1000*dcaZMax);
159       part1Name += "_";
160
161       part2Name += "eta";
162       part2Name += int(1000*etaMax);
163       part2Name += "_";
164       part2Name += int(1000*ptMin);
165       part2Name += "pt";
166       part2Name += int(1000*ptMax);
167       part2Name += "_";
168       part2Name += int(1000*dcaZMin);
169       part2Name += "DCA";
170       part2Name += int(1000*dcaZMax);
171       part2Name += "_";
172
173       eventName =  "";
174       eventName += int(10.*minCentrality[iCentrality] );
175       eventName += "Vo";
176       eventName += int(10.*maxCentrality[iCentrality] );
177
178       baseName     =   prefixName;
179       baseName     +=  part1Name;
180       baseName     +=  part2Name;
181       baseName     +=  eventName;
182       listName     =   baseName;
183       taskName     =   baseName;
184
185
186       outputHistogramFileName = baseName;
187       if (singlesOnly) outputHistogramFileName += singlesOnlySuffix;
188       outputHistogramFileName += ".root";
189       
190      
191       TFile  * inputFile  = 0;
192       TList  * histoList  = 0;
193       TH3F   * weight_1   = 0;
194       TH3F   * weight_2   = 0;
195       if (useWeights)
196         {
197         TGrid::Connect("alien:");
198         inputFile = TFile::Open(inputHistogramFileName,"OLD");
199         if (!inputFile)
200           {
201             //cout << "Requested file:" << inputHistogramFileName << " was not opened. ABORT." << endl;
202           return;
203           }
204         TString nameHistoBase = "correction_";
205         TString nameHisto;
206         nameHistoBase += eventName;
207         if (requestedCharge1 == 1)
208           {
209           nameHisto = nameHistoBase + "_p";
210           //cout << "Input Histogram named: " << nameHisto << endl;
211           weight_1 = (TH3F *) inputFile->Get(nameHisto);
212           }
213         else
214           {
215           nameHisto = nameHistoBase + "_m";
216           //cout << "Input Histogram named: " << nameHisto << endl;
217           weight_1 = (TH3F *) inputFile->Get(nameHisto);
218           }
219         if (!weight_1) 
220           {
221             //cout << "Requested histogram 'correction_p/m' was not found. ABORT." << endl;
222           return 0;
223           }
224         
225         if (!sameFilter)
226           {
227           weight_2 = 0;
228           if (requestedCharge2 == 1)
229             {
230             nameHisto = nameHistoBase + "_p";
231             //cout << "Input Histogram named: " << nameHisto << endl;
232             weight_2 = (TH3F *) inputFile->Get(nameHisto);
233             }
234           else
235             {
236             nameHisto = nameHistoBase + "_m";
237             //cout << "Input Histogram named: " << nameHisto << endl;
238             weight_2 = (TH3F *) inputFile->Get(nameHisto);
239             }
240           if (!weight_2) 
241             {
242               //cout << "Requested histogram 'correction_p/m' was not found. ABORT." << endl;
243             return 0;
244             }
245           }  
246         }
247       task = new  AliAnalysisTaskDptDptCorrelations(taskName);
248       //configure my task
249       task->SetDebugLevel(          debugLevel      ); 
250       task->SetSameFilter(          sameFilter      );
251       task->SetSinglesOnly(         singlesOnly     ); 
252       task->SetUseWeights(          useWeights      ); 
253       task->SetRejectPileup(        rejectPileup    ); 
254       task->SetRejectPairConversion(rejectPairConversion); 
255       task->SetVertexZMin(          zMin            ); 
256       task->SetVertexZMax(          zMax            ); 
257       task->SetVertexXYMin(         -1.            ); 
258       task->SetVertexXYMax(          1.            ); 
259       task->SetCentralityMethod(    centralityMethod);
260       task->SetCentrality(          minCentrality[iCentrality], maxCentrality[iCentrality]);
261       task->SetPtMin1(              ptMin           ); 
262       task->SetPtMax1(              ptMax           ); 
263       task->SetEtaMin1(             etaMin          ); 
264       task->SetEtaMax1(             etaMax          ); 
265       task->SetPtMin2(              ptMin           ); 
266       task->SetPtMax2(              ptMax           ); 
267       task->SetEtaMin2(             etaMin          ); 
268       task->SetEtaMax2(             etaMax          ); 
269       task->SetDcaZMin(             dcaZMin         ); 
270       task->SetDcaZMax(             dcaZMax         ); 
271       task->SetDcaXYMin(            dcaXYMin        ); 
272       task->SetDcaXYMax(            dcaXYMax        ); //checking by prp
273       task->SetDedxMin(             dedxMin         ); 
274       task->SetDedxMax(             dedxMax         ); 
275       task->SetNClusterMin(         nClusterMin     ); 
276       task->SetTrackFilterBit(      trackFilterBit  );
277       task->SetRequestedCharge_1(   requestedCharge1); 
278       task->SetRequestedCharge_2(   requestedCharge2); 
279       task->SetWeigth_1(            weight_1        );
280       task->SetWeigth_2(            weight_2        );
281       
282
283       if(trigger) task->SelectCollisionCandidates(AliVEvent::kINT7);
284       else task->SelectCollisionCandidates(AliVEvent::kMB);
285
286       cout << "Creating task output container" << endl;
287
288       taskOutputContainer = analysisManager->CreateContainer(listName,
289                                                              TList::Class(),
290                                                              AliAnalysisManager::kOutputContainer,
291                                                              Form("%s:%s", AliAnalysisManager::GetCommonFileName(),taskname));
292       cout << "Add task to analysis manager and connect it to input and output containers" << endl;
293
294       analysisManager->AddTask(task);
295       analysisManager->ConnectInput( task,  0, analysisManager->GetCommonInputContainer());
296       analysisManager->ConnectOutput(task,  0, taskOutputContainer );
297       //cout << "Task added ...." << endl;
298       
299       iTask++;
300     
301     }
302   
303   
304   
305   return task;
306 }