1 // Macro redoFinish.C is used after macro mergeOutput.C has been used for merging.
2 // Before using this macro first read the explanation at the beginning of macro mergeOutput.C.
4 enum libModes {mLocal,mLocalSource};
6 void redoFinish(TString type="ESD", Int_t mode=mLocal)
8 // type: type of analysis can be ESD, AOD, MC, ESDMC0, ESDMC1
9 // (if type="" output files are from MC simulation (default))
10 // mode: if mode = mLocal: analyze data on your computer using aliroot
11 // if mode = mLocalSource: analyze data on your computer using root + source files
13 // Name of merged, large statistics file obtained with macro mergeOutput.C:
14 TString mergedFileName = "mergedAnalysisResults.root";
15 // Final output file name holding final results for large statistics sample:
16 TString outputFileName = "AnalysisResults.root";
18 const Int_t nMethods = 10;
19 TString method[nMethods] = {"MCEP","SP","GFC","QC","FQD","LYZ1SUM","LYZ1PROD","LYZ2SUM","LYZ2PROD","LYZEP"};
21 // Load needed libraries:
22 LoadLibrariesRF(mode);
24 // Accessing the merged, large statistics file obtained with macro mergeOutput.C.
25 // On this file the flow analysis will be redone, its content modified to store
26 // the correct final results and eventually renamed into TString outputFileName.
27 TString pwd(gSystem->pwd());
29 pwd+=mergedFileName.Data();
30 TFile *mergedFile = NULL;
31 if(gSystem->AccessPathName(pwd.Data(),kFileExists))
33 cout<<"WARNING: You do not have a merged output file:"<<endl;
34 cout<<" "<<pwd.Data()<<endl;
36 cout<<"In order to get that file use macro mergeOutput.C first."<<endl;
41 // Create temporarily copy of "mergedAnalysisResults.root":
42 TSystemFile *fileTemp = new TSystemFile(mergedFileName.Data(),".");
43 fileTemp->Copy("mergedAnalysisResultsTemp.root");
45 // Access merged file:
46 mergedFile = TFile::Open(pwd.Data(),"UPDATE");
49 // Access from mergedFile the merged files for each method and from them the lists holding histograms:
50 TString fileName[nMethods];
51 TDirectoryFile *dirFile[nMethods] = {NULL};
52 TString listName[nMethods];
53 TList *list[nMethods] = {NULL};
54 for(Int_t i=0;i<nMethods;i++)
56 // Form a file name for each method:
57 fileName[i]+="output";
58 fileName[i]+=method[i].Data();
59 fileName[i]+="analysis";
60 fileName[i]+=type.Data();
62 dirFile[i] = (TDirectoryFile*)mergedFile->FindObjectAny(fileName[i].Data());
63 // Form a list name for each method:
65 listName[i]+=method[i].Data();
69 dirFile[i]->GetObject(listName[i].Data(),list[i]);
72 cout<<"WARNING: Couldn't find a file "<<fileName[i].Data()<<".root !!!!"<<endl;
74 } // End of for(Int_t i=0;i<nMethods;i++)
76 // Redo finish for each method (REMARK: this implementation can be dramatically improved!):
78 for(Int_t i=0;i<nMethods;i++)
80 if(list[i] && strcmp(list[i]->GetName(),"cobjMCEP")==0)
82 AliFlowAnalysisWithMCEventPlane* mcep = new AliFlowAnalysisWithMCEventPlane();
83 mcep->GetOutputHistograms(list[i]);
85 dirFile[i]->Add(list[i],kTRUE);
86 dirFile[i]->Write(dirFile[i]->GetName(),TObject::kSingleKey+TObject::kOverwrite);
89 else if(list[i] && strcmp(list[i]->GetName(),"cobjSP")==0)
91 AliFlowAnalysisWithScalarProduct* sp = new AliFlowAnalysisWithScalarProduct();
92 sp->GetOutputHistograms(list[i]);
94 dirFile[i]->Add(list[i],kTRUE);
95 dirFile[i]->Write(dirFile[i]->GetName(),TObject::kSingleKey+TObject::kOverwrite);
98 else if(list[i] && strcmp(list[i]->GetName(),"cobjGFC")==0)
100 AliFlowAnalysisWithCumulants* gfc = new AliFlowAnalysisWithCumulants();
101 gfc->GetOutputHistograms(list[i]);
103 dirFile[i]->Add(list[i],kTRUE);
104 dirFile[i]->Write(dirFile[i]->GetName(),TObject::kSingleKey+TObject::kOverwrite);
107 else if(list[i] && strcmp(list[i]->GetName(),"cobjQC")==0)
109 AliFlowAnalysisWithQCumulants* qc = new AliFlowAnalysisWithQCumulants();
110 qc->GetOutputHistograms(list[i]);
112 dirFile[i]->Add(list[i],kTRUE);
113 dirFile[i]->Write(dirFile[i]->GetName(),TObject::kSingleKey+TObject::kOverwrite);
116 else if(list[i] && strcmp(list[i]->GetName(),"cobjFQD")==0)
118 AliFlowAnalysisWithFittingQDistribution* fqd = new AliFlowAnalysisWithFittingQDistribution();
119 fqd->GetOutputHistograms(list[i]);
121 dirFile[i]->Add(list[i],kTRUE);
122 dirFile[i]->Write(dirFile[i]->GetName(),TObject::kSingleKey+TObject::kOverwrite);
125 else if(list[i] && strcmp(list[i]->GetName(),"cobjLYZ1SUM")==0)
127 AliFlowAnalysisWithLeeYangZeros* lyz1sum = new AliFlowAnalysisWithLeeYangZeros();
128 lyz1sum->SetFirstRun(kTRUE);
129 lyz1sum->SetUseSum(kTRUE);
130 lyz1sum->GetOutputHistograms(list[i]);
132 dirFile[i]->Add(list[i],kTRUE);
133 dirFile[i]->Write(dirFile[i]->GetName(),TObject::kSingleKey+TObject::kOverwrite);
136 else if(list[i] && strcmp(list[i]->GetName(),"cobjLYZ2SUM")==0)
138 AliFlowAnalysisWithLeeYangZeros* lyz2sum = new AliFlowAnalysisWithLeeYangZeros();
139 lyz2sum->SetFirstRun(kFALSE);
140 lyz2sum->SetUseSum(kTRUE);
141 lyz2sum->GetOutputHistograms(list[i]);
143 dirFile[i]->Add(list[i],kTRUE);
144 dirFile[i]->Write(dirFile[i]->GetName(),TObject::kSingleKey+TObject::kOverwrite);
147 else if(list[i] && strcmp(list[i]->GetName(),"cobjLYZ1PROD")==0)
149 AliFlowAnalysisWithLeeYangZeros* lyz1prod = new AliFlowAnalysisWithLeeYangZeros();
150 lyz1prod->SetFirstRun(kTRUE);
151 lyz1prod->SetUseSum(kFALSE);
152 lyz1prod->GetOutputHistograms(list[i]);
154 dirFile[i]->Add(list[i],kTRUE);
155 dirFile[i]->Write(dirFile[i]->GetName(),TObject::kSingleKey+TObject::kOverwrite);
158 else if(list[i] && strcmp(list[i]->GetName(),"cobjLYZ2PROD")==0)
160 AliFlowAnalysisWithLeeYangZeros* lyz2prod = new AliFlowAnalysisWithLeeYangZeros();
161 lyz2prod->SetFirstRun(kFALSE);
162 lyz2prod->SetUseSum(kFALSE);
163 lyz2prod->GetOutputHistograms(list[i]);
165 dirFile[i]->Add(list[i],kTRUE);
166 dirFile[i]->Write(dirFile[i]->GetName(),TObject::kSingleKey+TObject::kOverwrite);
169 else if(list[i] && strcmp(list[i]->GetName(),"cobjLYZEP")==0)
171 AliFlowAnalysisWithLYZEventPlane* lyzep = new AliFlowAnalysisWithLYZEventPlane();
172 lyzep->GetOutputHistograms(list[i]);
174 dirFile[i]->Add(list[i],kTRUE);
175 dirFile[i]->Write(dirFile[i]->GetName(),TObject::kSingleKey+TObject::kOverwrite);
177 } // End of for(Int_t i=0;i<nMethods;i++)
179 // Close the final output file:
183 // Giving the final names:
184 TSystemFile *outputFileFinal = new TSystemFile(mergedFileName.Data(),".");
185 outputFileFinal->Rename(outputFileName.Data());
186 delete outputFileFinal;
187 TSystemFile *mergedFileFinal = new TSystemFile("mergedAnalysisResultsTemp.root",".");
188 mergedFileFinal->Rename(mergedFileName.Data());
189 delete mergedFileFinal;
191 } // End of void redoFinish(Int_t mode=mLocal)
193 void LoadLibrariesRF(const libModes mode) {
195 //--------------------------------------
196 // Load the needed libraries most of them already loaded by aliroot
197 //--------------------------------------
198 //gSystem->Load("libTree");
199 gSystem->Load("libGeom");
200 gSystem->Load("libVMC");
201 gSystem->Load("libXMLIO");
202 gSystem->Load("libPhysics");
204 //----------------------------------------------------------
205 // >>>>>>>>>>> Local mode <<<<<<<<<<<<<<
206 //----------------------------------------------------------
208 //--------------------------------------------------------
209 // If you want to use already compiled libraries
210 // in the aliroot distribution
211 //--------------------------------------------------------
213 //==================================================================================
214 //load needed libraries:
215 gSystem->AddIncludePath("-I$ROOTSYS/include");
216 //gSystem->Load("libTree");
219 gSystem->AddIncludePath("-I$ALICE_ROOT/include");
220 gSystem->Load("libANALYSIS");
221 gSystem->Load("libPWG2flowCommon");
222 //cerr<<"libPWG2flowCommon loaded ..."<<endl;
226 else if (mode==mLocalSource) {
228 // In root inline compile
231 gROOT->LoadMacro("AliFlowCommon/AliFlowCommonConstants.cxx+");
232 gROOT->LoadMacro("AliFlowCommon/AliFlowLYZConstants.cxx+");
233 gROOT->LoadMacro("AliFlowCommon/AliFlowCumuConstants.cxx+");
236 gROOT->LoadMacro("AliFlowCommon/AliFlowVector.cxx+");
237 gROOT->LoadMacro("AliFlowCommon/AliFlowTrackSimple.cxx+");
238 gROOT->LoadMacro("AliFlowCommon/AliFlowEventSimple.cxx+");
241 gROOT->LoadMacro("AliFlowCommon/AliFlowTrackSimpleCuts.cxx+");
243 // Output histosgrams
244 gROOT->LoadMacro("AliFlowCommon/AliFlowCommonHist.cxx+");
245 gROOT->LoadMacro("AliFlowCommon/AliFlowCommonHistResults.cxx+");
246 gROOT->LoadMacro("AliFlowCommon/AliFlowLYZHist1.cxx+");
247 gROOT->LoadMacro("AliFlowCommon/AliFlowLYZHist2.cxx+");
249 cout << "finished loading macros!" << endl;
251 } // end of else if (mode==mLocalSource)
253 } // end of void LoadLibrariesRF(const libModes mode)