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