]> git.uio.no Git - u/mrichter/AliRoot.git/blob - PWG0/multiplicity/run.C
updated multiplicity analysis for the INEL>0 case
[u/mrichter/AliRoot.git] / PWG0 / multiplicity / run.C
1 void run(Char_t* data, Long64_t nRuns = -1, Long64_t offset = 0, Bool_t aDebug = kFALSE, Int_t aProof = 0, Int_t requiredData = 1, const char* option = "")
2 {
3   // aProof option: 0 no proof
4   //                1 proof with chain
5   //                2 proof with dataset
6   //
7   // requiredData option: 0 = only ESD
8   //                      1 = ESD+MC
9   //                      2 = RAW (ESD+check on event type)
10   //
11
12   if (nRuns < 0)
13     nRuns = 1234567890;
14
15   if (aProof)
16   {
17     gEnv->SetValue("XSec.GSI.DelegProxy", "2");
18     TProof::Open("alicecaf");
19     
20     // Enable the needed package
21     if (1)
22     {
23       gProof->UploadPackage("$ALICE_ROOT/STEERBase");
24       gProof->EnablePackage("$ALICE_ROOT/STEERBase");
25       gProof->UploadPackage("$ALICE_ROOT/ESD");
26       gProof->EnablePackage("$ALICE_ROOT/ESD");
27       gProof->UploadPackage("$ALICE_ROOT/AOD");
28       gProof->EnablePackage("$ALICE_ROOT/AOD");
29       gProof->UploadPackage("$ALICE_ROOT/ANALYSIS");
30       gProof->EnablePackage("$ALICE_ROOT/ANALYSIS");
31       gProof->UploadPackage("$ALICE_ROOT/ANALYSISalice");
32       gProof->EnablePackage("$ALICE_ROOT/ANALYSISalice");
33     }
34     else
35     {
36       gProof->UploadPackage("$ALICE_ROOT/AF-v4-16");
37       gProof->EnablePackage("$ALICE_ROOT/AF-v4-16");
38     }
39
40     gProof->UploadPackage("$ALICE_ROOT/PWG0base");
41     gProof->EnablePackage("$ALICE_ROOT/PWG0base");
42   }
43   else
44   {
45     gSystem->Load("libVMC");
46     gSystem->Load("libTree");
47     gSystem->Load("libSTEERBase");
48     gSystem->Load("libESD");
49     gSystem->Load("libAOD");
50     gSystem->Load("libANALYSIS");
51     gSystem->Load("libANALYSISalice");
52     gSystem->Load("libPWG0base");
53   }
54
55   // Create the analysis manager
56   mgr = new AliAnalysisManager;
57
58   // Add ESD handler
59   AliESDInputHandler* esdH = new AliESDInputHandler;
60   esdH->SetInactiveBranches("AliESDACORDE FMD ALIESDTZERO ALIESDZDC AliRawDataErrorLogs CaloClusters Cascades EMCALCells EMCALTrigger ESDfriend Kinks AliESDTZERO ALIESDACORDE MuonTracks TrdTracks");
61   mgr->SetInputEventHandler(esdH);
62
63   // physics selection
64   gROOT->ProcessLine(".L $ALICE_ROOT/ANALYSIS/macros/AddTaskPhysicsSelection.C");
65   physicsSelectionTask = AddTaskPhysicsSelection((requiredData == 2) ? kFALSE : kTRUE);
66
67   // FO efficiency (for MC)
68   if (1 && requiredData != 2)
69   {
70     //const char* fastORFile = "../dNdEta/spdFOEff_run104824_52.root";
71     //const char* fastORFile = "../dNdEta/spdFOEff_run104867_92.root";
72     //const char* fastORFile = "../dNdEta/spdFOEff_run105054_7.root";
73     const char* fastORFile = "../dNdEta/spdFOEff_run114931.root";
74   
75     Printf("NOTE: Simulating FAST-OR efficiency on the analysis level using file %s", fastORFile);
76     TFile::Open(fastORFile);
77     
78     spdFOEff = (TH1F*) gFile->Get("spdFOEff");
79     physicsSelectionTask->GetPhysicsSelection()->Initialize(114931);
80     physicsSelectionTask->GetPhysicsSelection()->GetTriggerAnalysis()->SetSPDGFOEfficiency(spdFOEff);
81   }
82   
83   AliPWG0Helper::AnalysisMode analysisMode = AliPWG0Helper::kSPD | AliPWG0Helper::kFieldOn;
84   //AliPWG0Helper::AnalysisMode analysisMode = AliPWG0Helper::kTPCITS | AliPWG0Helper::kFieldOn;
85   
86   //AliTriggerAnalysis::Trigger trigger      = AliTriggerAnalysis::kAcceptAll | AliTriggerAnalysis::kOfflineFlag;
87   AliTriggerAnalysis::Trigger trigger      = AliTriggerAnalysis::kAcceptAll | AliTriggerAnalysis::kOfflineFlag | AliTriggerAnalysis::kOneParticle; 
88   
89   //AliTriggerAnalysis::Trigger trigger      = AliTriggerAnalysis::kMB1Prime | AliTriggerAnalysis::kOfflineFlag;
90   //AliTriggerAnalysis::Trigger trigger      = AliTriggerAnalysis::kSPDGFOBits | AliTriggerAnalysis::kOfflineFlag;
91   //AliTriggerAnalysis::Trigger trigger      = AliTriggerAnalysis::kV0AND | AliTriggerAnalysis::kOfflineFlag; 
92
93   AliPWG0Helper::DiffTreatment diffTreatment = AliPWG0Helper::kMCFlags;
94   //AliPWG0Helper::DiffTreatment diffTreatment = AliPWG0Helper::kE710Cuts;
95   
96   AliPWG0Helper::PrintConf(analysisMode, trigger, diffTreatment);
97
98   TString taskName("AliMultiplicityTask.cxx+");
99   if (aDebug)
100     taskName += "+g";
101
102   // Create, add task
103   if (aProof > 0) {
104     gProof->Load(taskName);
105   } else
106     gROOT->Macro(taskName);
107
108   // 0 bin calculation
109   if (0)
110   {
111   }
112   
113   // V0 syst. study
114   if (0)
115   {
116     Printf("NOTE: Systematic study for VZERO enabled!");
117     //physicsSelectionTask->GetPhysicsSelection()->Initialize(104867);
118     for (Int_t i=0; i<1; i++)
119     {
120       // for MC and data
121       physicsSelectionTask->GetPhysicsSelection()->GetTriggerAnalysis(i)->SetV0HwPars(15, 61.5, 86.5);
122       physicsSelectionTask->GetPhysicsSelection()->GetTriggerAnalysis(i)->SetV0AdcThr(15);
123       // only for MC
124       //physicsSelectionTask->GetPhysicsSelection()->GetTriggerAnalysis(i)->SetV0HwPars(0, 0, 125);
125       //physicsSelectionTask->GetPhysicsSelection()->GetTriggerAnalysis(i)->SetV0AdcThr(0);
126     }
127   }
128
129   TString optionStr(option);
130   
131   // remove SAVE option if set
132   Bool_t save = kFALSE;
133   TString optionStr(option);
134   if (optionStr.Contains("SAVE"))
135   {
136     optionStr = optionStr(0,optionStr.Index("SAVE")) + optionStr(optionStr.Index("SAVE")+4, optionStr.Length());
137     save = kTRUE;
138   }
139   
140   task = new AliMultiplicityTask(optionStr);
141
142   if (!(analysisMode & AliPWG0Helper::kSPD))
143   {
144     // selection of esd tracks
145     gROOT->ProcessLine(".L ../CreateStandardCuts.C");
146     AliESDtrackCuts* esdTrackCuts = CreateTrackCuts(analysisMode);
147     if (!esdTrackCuts)
148     {
149       printf("ERROR: esdTrackCuts could not be created\n");
150       return;
151     }
152
153     task->SetTrackCuts(esdTrackCuts);
154   }
155   //else
156   //  task->SetDeltaPhiCut(0.05);
157
158   task->SetAnalysisMode(analysisMode);
159   task->SetTrigger(trigger);
160   task->SetDiffTreatment(diffTreatment);
161
162   if (requiredData == 1)
163     task->SetReadMC();
164
165   //task->SetUseMCVertex();
166   
167   if (requiredData != 2)
168     task->SetSkipParticles();
169
170   mgr->AddTask(task);
171
172   if (requiredData == 1) {
173     // Enable MC event handler
174     AliMCEventHandler* handler = new AliMCEventHandler;
175     if (!optionStr.Contains("particle-efficiency"))
176       handler->SetReadTR(kFALSE);
177     mgr->SetMCtruthEventHandler(handler);
178   }
179
180   // pt study
181   if (optionStr.Contains("pt-spectrum-func"))
182   {
183     TF1* func = new TF1("func", "1", 0, 0.2);
184     //TF1* func = new TF1("func", "1.5 - x / 0.2 * 0.5", 0, 0.2);
185     //TF1* func = new TF1("func", "1.25 - x / 0.2 * 0.25", 0, 0.2);
186     //TF1* func = new TF1("func", "0.75 + x / 0.2 * 0.25", 0, 0.2);
187     hist = func->GetHistogram();
188     //new TCanvas; func->Draw();
189     //inputList.Add(func->GetHistogram()->Clone("pt-spectrum"));
190
191     new TCanvas; hist->Draw();
192     task->SetPtSpectrum((TH1D*) hist->Clone("pt-spectrum"));
193   }
194
195   // Attach input
196   cInput  = mgr->GetCommonInputContainer();
197   mgr->ConnectInput(task, 0, cInput);
198
199   // Attach output
200   cOutput = mgr->CreateContainer("cOutput", TList::Class(), AliAnalysisManager::kOutputContainer);
201   mgr->ConnectOutput(task, 0, cOutput);
202
203   // Enable debug printouts
204   if (aDebug)
205     mgr->SetDebugLevel(2);
206
207   // Run analysis
208   mgr->InitAnalysis();
209   mgr->PrintStatus();
210
211   if (aProof == 2)
212   {
213     // process dataset
214
215     mgr->StartAnalysis("proof", data, nRuns, offset);
216   
217     if (save)
218     {
219       TString path("maps/");
220       path += TString(data).Tokenize("/")->Last()->GetName();
221       
222       UInt_t triggerNoFlags = (UInt_t) trigger % (UInt_t) AliTriggerAnalysis::kStartOfFlags;
223       switch (triggerNoFlags)
224       {
225         case AliTriggerAnalysis::kAcceptAll: path += "/all"; break;
226         case AliTriggerAnalysis::kMB1: path += "/mb1"; break;
227         case AliTriggerAnalysis::kMB2: path += "/mb2"; break;
228         case AliTriggerAnalysis::kMB3: path += "/mb3"; break;
229         case AliTriggerAnalysis::kSPDGFO: path += "/spdgfo"; break;
230         case AliTriggerAnalysis::kSPDGFOBits: path += "/spdgfobits"; break;
231         case AliTriggerAnalysis::kV0AND: path += "/v0and"; break;
232         case AliTriggerAnalysis::kNSD1: path += "/nsd1"; break;
233         case AliTriggerAnalysis::kMB1Prime: path += "/mb1prime"; break;
234         default: Printf("ERROR: Trigger undefined for path to files"); return;
235       }
236       
237       if (trigger & AliTriggerAnalysis::kOneParticle)
238         path += "-onepart";
239       
240       if (analysisMode & AliPWG0Helper::kSPD)
241         path += "/spd";
242       
243       if (analysisMode & AliPWG0Helper::kTPC)
244         path += "/tpc";
245         
246       if (analysisMode & AliPWG0Helper::kTPCITS)
247         path += "/tpcits";
248
249       gSystem->mkdir(path, kTRUE);
250       
251       TString fileName("multiplicity");
252       if (optionStr.Contains("only-process-type-nd"))
253         fileName += "ND";
254       if (optionStr.Contains("only-process-type-sd"))
255         fileName += "SD";
256       if (optionStr.Contains("only-process-type-dd"))
257         fileName += "DD";
258       fileName += ".root";
259       
260       gSystem->Rename(fileName, path + "/" + fileName);
261       gSystem->Rename("event_stat.root", path + "/event_stat.root");
262       
263       Printf(">>>>> Moved files to %s", path.Data());
264     }  
265   }
266   else if (aProof == 3)
267   {
268     gROOT->ProcessLine(".L CreateChainFromDataSet.C");
269     ds = gProof->GetDataSet(data)->GetStagedSubset();
270     chain = CreateChainFromDataSet(ds, "esdTree", nRuns);
271     mgr->StartAnalysis("local", chain, nRuns, offset);
272   }
273   else
274   {
275     // Create chain of input files
276     gROOT->LoadMacro("../CreateESDChain.C");
277     chain = CreateESDChain(data, nRuns, offset);
278
279     mgr->StartAnalysis((aProof > 0) ? "proof" : "local", chain);
280   }
281 }