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