]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - PWG2/FLOW/macros/redoFinish.C
fix ownerschip of TLists
[u/mrichter/AliRoot.git] / PWG2 / FLOW / macros / redoFinish.C
index 8b7725cecd0d4374aaf6807d192a36a907819cfa..a7a16daa9c423eb431b9a2315b410e471b0937b6 100644 (file)
@@ -7,6 +7,8 @@ void redoFinish(TString type="", Int_t mode=mLocal)
  // mode:  if mode=mLocal analyze data on your computer using aliroot
  //        if mode=mLocalSource analyze data on your computer using root + source files
  
+ Bool_t redoFinishAlsoInSubsets = kFALSE;
  // load needed libraries:                       
  LoadLibrariesRDF(mode);  
  
@@ -14,6 +16,7 @@ void redoFinish(TString type="", Int_t mode=mLocal)
  TString pwd(gSystem->pwd());
  pwd+="/";
  
+ cout<<endl;
  // access the merged output files and redo the flow analysis on them:
  // MCEP:
  TString mergedFileNameMCEP("mergedMCEPanalysis");
@@ -48,6 +51,8 @@ void redoFinish(TString type="", Int_t mode=mLocal)
   mergedListMCEP->SetName("cobjMCEP");
   mergedListMCEP->Write(mergedListMCEP->GetName(),TObject::kSingleKey);
   finalOutputMCEP->Close();
+  delete mcep;
+  delete finalOutputMCEP;
  } else 
    {
     cout<<"WARNING: mergedListMCEP is NULL !!!!"<<endl;
@@ -86,6 +91,8 @@ void redoFinish(TString type="", Int_t mode=mLocal)
   mergedListSP->SetName("cobjSP");
   mergedListSP->Write(mergedListSP->GetName(),TObject::kSingleKey);
   finalOutputSP->Close();
+  delete sp;
+  delete finalOutputSP;
  } else 
    {
     cout<<"WARNING: mergedListSP is NULL !!!!"<<endl;
@@ -124,6 +131,8 @@ void redoFinish(TString type="", Int_t mode=mLocal)
   mergedListGFC->SetName("cobjGFC");
   mergedListGFC->Write(mergedListGFC->GetName(),TObject::kSingleKey);
   finalOutputGFC->Close();
+  delete gfc;
+  delete finalOutputGFC;
  } else 
    {
     cout<<"WARNING: mergedListGFC is NULL !!!!"<<endl;
@@ -162,6 +171,8 @@ void redoFinish(TString type="", Int_t mode=mLocal)
   mergedListQC->SetName("cobjQC");
   mergedListQC->Write(mergedListQC->GetName(),TObject::kSingleKey);
   finalOutputQC->Close();
+  delete qc;
+  delete finalOutputQC;
  } else 
    {
     cout<<"WARNING: mergedListQC is NULL !!!!"<<endl;
@@ -200,6 +211,8 @@ void redoFinish(TString type="", Int_t mode=mLocal)
   mergedListFQD->SetName("cobjFQD");
   mergedListFQD->Write(mergedListFQD->GetName(),TObject::kSingleKey);
   finalOutputFQD->Close();
+  delete fqd;
+  delete finalOutputFQD;
  } else 
    {
     cout<<"WARNING: mergedListFQD is NULL !!!!"<<endl;
@@ -240,6 +253,8 @@ void redoFinish(TString type="", Int_t mode=mLocal)
   mergedListLYZ1SUM->SetName("cobjLYZ1SUM");
   mergedListLYZ1SUM->Write(mergedListLYZ1SUM->GetName(),TObject::kSingleKey);
   finalOutputLYZ1SUM->Close();
+  delete lyz1sum;
+  delete finalOutputLYZ1SUM;
  } else 
    {
     cout<<"WARNING: mergedListLYZ1SUM is NULL !!!!"<<endl;
@@ -280,6 +295,8 @@ void redoFinish(TString type="", Int_t mode=mLocal)
   mergedListLYZ2SUM->SetName("cobjLYZ2SUM");
   mergedListLYZ2SUM->Write(mergedListLYZ2SUM->GetName(),TObject::kSingleKey);
   finalOutputLYZ2SUM->Close();
+  delete lyz2sum;
+  delete finalOutputLYZ2SUM ;
  } else 
    {
     cout<<"WARNING: mergedListLYZ2SUM is NULL !!!!"<<endl;
@@ -320,6 +337,8 @@ void redoFinish(TString type="", Int_t mode=mLocal)
   mergedListLYZ1PROD->SetName("cobjLYZ1PROD");
   mergedListLYZ1PROD->Write(mergedListLYZ1PROD->GetName(),TObject::kSingleKey);
   finalOutputLYZ1PROD->Close();
+  delete lyz1prod;
+  delete finalOutputLYZ1PROD;
  } else 
    {
     cout<<"WARNING: mergedListLYZ1PROD is NULL !!!!"<<endl;
@@ -360,6 +379,8 @@ void redoFinish(TString type="", Int_t mode=mLocal)
   mergedListLYZ2PROD->SetName("cobjLYZ2PROD");
   mergedListLYZ2PROD->Write(mergedListLYZ2PROD->GetName(),TObject::kSingleKey);
   finalOutputLYZ2PROD->Close();
+  delete lyz2prod;
+  delete finalOutputLYZ2PROD;
  } else 
    {
     cout<<"WARNING: mergedListLYZ2PROD is NULL !!!!"<<endl;
@@ -398,10 +419,563 @@ void redoFinish(TString type="", Int_t mode=mLocal)
   mergedListLYZEP->SetName("cobjLYZEP");
   mergedListLYZEP->Write(mergedListLYZEP->GetName(),TObject::kSingleKey);
   finalOutputLYZEP->Close();
+  delete lyzep;
+  delete finalOutputLYZEP;
  } else 
    {
     cout<<"WARNING: mergedListLYZEP is NULL !!!!"<<endl;
    }                                                                                            
+ // redoing Finish() also in subsets:
+ if(redoFinishAlsoInSubsets)
+ {
+  // standard magic:
+  TString *baseDirPath = new TString(gSystem->pwd());
+  TSystemDirectory* baseDir = new TSystemDirectory(".",baseDirPath->Data());          
+  TList* listOfFilesInBaseDir = baseDir->GetListOfFiles();
+  // listOfFilesInBaseDir->Print();
+  Int_t nFiles = listOfFilesInBaseDir->GetEntries();
+  Int_t nSubsets = 0;
+  gSystem->cd(baseDirPath->Data());
+  // count subsets:
+  for(Int_t iFile=0;iFile<nFiles;iFile++)
+  {
+   TSystemFile* presentFile = (TSystemFile*)listOfFilesInBaseDir->At(iFile);
+   TString presentFileName = baseDirPath->Data();
+   (presentFileName+="/")+=presentFile->GetName(); 
+   if(presentFileName.Contains("subset"))
+   {
+    nSubsets++;
+   } 
+  } // end of for(Int_t iFile=0;iFile<nFiles;iFile++)
+  
+  // redo finish in each subset:
+  gSystem->cd(baseDirPath->Data());
+  for(Int_t i=0;i<nSubsets;i++)
+  {
+   cout<<endl;
+   // access the merged output files and redo the flow analysis on them:
+   // MCEP:
+   TString *mergedFileNameInSubsetMCEP = new TString("subset"); 
+   (*mergedFileNameInSubsetMCEP)+=(i+1);
+   (*mergedFileNameInSubsetMCEP)+="/";
+   (*mergedFileNameInSubsetMCEP)+="mergedMCEPanalysis";
+   (*mergedFileNameInSubsetMCEP)+=type.Data();
+   (*mergedFileNameInSubsetMCEP)+=".root";
+   
+   TFile *mergedFileInSubsetMCEP = NULL;
+   TList *mergedListInSubsetMCEP = NULL;
+   if(gSystem->AccessPathName(mergedFileNameInSubsetMCEP->Data(),kFileExists))  
+   {
+    cout<<"WARNING: You do not have a merged output file "<<mergedFileNameInSubsetMCEP->Data()<<endl;
+    cout<<"         Couldn't redo Finish() on this file in subdirectory subset"<<i+1<<endl;        
+   } else 
+     {
+      mergedFileinSubsetMCEP = TFile::Open(mergedFileNameInSubsetMCEP->Data(),"READ");
+      delete mergedFileNameInSubsetMCEP;
+      if(mergedFileinSubsetMCEP) 
+      {
+       mergedFileinSubsetMCEP->GetObject("cobjMCEP",mergedListInSubsetMCEP);
+       mergedFileinSubsetMCEP->Close();
+      } 
+     }
+     if(mergedListInSubsetMCEP)
+     {
+      AliFlowAnalysisWithMCEventPlane* mcep = new AliFlowAnalysisWithMCEventPlane();
+      mcep->GetOutputHistograms(mergedListInSubsetMCEP);
+      mcep->Finish();
+      // save the final results for MCEP in final output file: 
+      TString *finalOutputFileNameinSubsetMCEP = new TString("subset");
+      (*finalOutputFileNameinSubsetMCEP)+=(i+1);  
+      (*finalOutputFileNameinSubsetMCEP)+="/";
+      (*finalOutputFileNameinSubsetMCEP)+="outputMCEPanalysis";
+      (*finalOutputFileNameinSubsetMCEP)+=type.Data();
+      (*finalOutputFileNameinSubsetMCEP)+=".root";
+      TFile *finalOutputInSubsetMCEP = new TFile(finalOutputFileNameinSubsetMCEP->Data(),"NEW");
+      mergedListInSubsetMCEP->SetName("cobjMCEP");
+      mergedListInSubsetMCEP->Write(mergedListInSubsetMCEP->GetName(),TObject::kSingleKey);
+      finalOutputInSubsetMCEP->Close();
+      delete finalOutputFileNameinSubsetMCEP;
+      delete finalOutputInSubsetMCEP;
+      delete mcep;
+     } else 
+       {
+        cout<<"WARNING: mergedListMCEP is NULL !!!!"<<endl;
+       }
+           
+   // SP:
+   TString *mergedFileNameInSubsetSP = new TString("subset"); 
+   (*mergedFileNameInSubsetSP)+=(i+1);
+   (*mergedFileNameInSubsetSP)+="/";
+   (*mergedFileNameInSubsetSP)+="mergedSPanalysis";
+   (*mergedFileNameInSubsetSP)+=type.Data();
+   (*mergedFileNameInSubsetSP)+=".root";
+   
+   TFile *mergedFileInSubsetSP = NULL;
+   TList *mergedListInSubsetSP = NULL;
+   if(gSystem->AccessPathName(mergedFileNameInSubsetSP->Data(),kFileExists))  
+   {
+    cout<<"WARNING: You do not have a merged output file "<<mergedFileNameInSubsetSP->Data()<<endl;
+    cout<<"         Couldn't redo Finish() on this file in subdirectory subset"<<i+1<<endl;        
+   } else 
+     {
+      mergedFileinSubsetSP = TFile::Open(mergedFileNameInSubsetSP->Data(),"READ");
+      delete mergedFileNameInSubsetSP;
+      if(mergedFileinSubsetSP) 
+      {
+       mergedFileinSubsetSP->GetObject("cobjSP",mergedListInSubsetSP);
+       mergedFileinSubsetSP->Close();
+      } 
+     }
+     if(mergedListInSubsetSP)
+     {
+      AliFlowAnalysisWithScalarProduct *sp = new AliFlowAnalysisWithScalarProduct();
+      sp->GetOutputHistograms(mergedListInSubsetSP);
+      sp->Finish();
+      // save the final results for SP in final output file: 
+      TString *finalOutputFileNameinSubsetSP = new TString("subset");
+      (*finalOutputFileNameinSubsetSP)+=(i+1);  
+      (*finalOutputFileNameinSubsetSP)+="/";
+      (*finalOutputFileNameinSubsetSP)+="outputSPanalysis";
+      (*finalOutputFileNameinSubsetSP)+=type.Data();
+      (*finalOutputFileNameinSubsetSP)+=".root";
+      TFile *finalOutputInSubsetSP = new TFile(finalOutputFileNameinSubsetSP->Data(),"NEW");
+      mergedListInSubsetSP->SetName("cobjSP");
+      mergedListInSubsetSP->Write(mergedListInSubsetSP->GetName(),TObject::kSingleKey);
+      finalOutputInSubsetSP->Close();
+      delete finalOutputFileNameinSubsetSP;
+      delete finalOutputInSubsetSP;
+      delete sp;
+     } else 
+       {
+        cout<<"WARNING: mergedListSP is NULL !!!!"<<endl;
+       }    
+      
+   // GFC:
+   TString *mergedFileNameInSubsetGFC = new TString("subset"); 
+   (*mergedFileNameInSubsetGFC)+=(i+1);
+   (*mergedFileNameInSubsetGFC)+="/";
+   (*mergedFileNameInSubsetGFC)+="mergedGFCanalysis";
+   (*mergedFileNameInSubsetGFC)+=type.Data();
+   (*mergedFileNameInSubsetGFC)+=".root";
+   
+   TFile *mergedFileInSubsetGFC = NULL;
+   TList *mergedListInSubsetGFC = NULL;
+   if(gSystem->AccessPathName(mergedFileNameInSubsetGFC->Data(),kFileExists))  
+   {
+    cout<<"WARNING: You do not have a merged output file "<<mergedFileNameInSubsetGFC->Data()<<endl;
+    cout<<"         Couldn't redo Finish() on this file in subdirectory subset"<<i+1<<endl;        
+   } else 
+     {
+      mergedFileinSubsetGFC = TFile::Open(mergedFileNameInSubsetGFC->Data(),"READ");
+      delete mergedFileNameInSubsetGFC;
+      if(mergedFileinSubsetGFC) 
+      {
+       mergedFileinSubsetGFC->GetObject("cobjGFC",mergedListInSubsetGFC);
+       mergedFileinSubsetGFC->Close();
+      } 
+     }
+     if(mergedListInSubsetGFC)
+     {
+      AliFlowAnalysisWithCumulants *gfc = new AliFlowAnalysisWithCumulants();
+      gfc->GetOutputHistograms(mergedListInSubsetGFC);
+      gfc->Finish();
+      // save the final results for GFC in final output file: 
+      TString *finalOutputFileNameinSubsetGFC = new TString("subset");
+      (*finalOutputFileNameinSubsetGFC)+=(i+1);  
+      (*finalOutputFileNameinSubsetGFC)+="/";
+      (*finalOutputFileNameinSubsetGFC)+="outputGFCanalysis";
+      (*finalOutputFileNameinSubsetGFC)+=type.Data();
+      (*finalOutputFileNameinSubsetGFC)+=".root";
+      TFile *finalOutputInSubsetGFC = new TFile(finalOutputFileNameinSubsetGFC->Data(),"NEW");
+      mergedListInSubsetGFC->SetName("cobjGFC");
+      mergedListInSubsetGFC->Write(mergedListInSubsetGFC->GetName(),TObject::kSingleKey);
+      finalOutputInSubsetGFC->Close();
+      delete finalOutputFileNameinSubsetGFC;
+      delete finalOutputInSubsetGFC;
+      delete gfc;
+     } else 
+       {
+        cout<<"WARNING: mergedListGFC is NULL !!!!"<<endl;
+       }        
+   
+   // QC:
+   TString *mergedFileNameInSubsetQC = new TString("subset"); 
+   (*mergedFileNameInSubsetQC)+=(i+1);
+   (*mergedFileNameInSubsetQC)+="/";
+   (*mergedFileNameInSubsetQC)+="mergedQCanalysis";
+   (*mergedFileNameInSubsetQC)+=type.Data();
+   (*mergedFileNameInSubsetQC)+=".root";
+   
+   TFile *mergedFileInSubsetQC = NULL;
+   TList *mergedListInSubsetQC = NULL;
+   if(gSystem->AccessPathName(mergedFileNameInSubsetQC->Data(),kFileExists))  
+   {
+    cout<<"WARNING: You do not have a merged output file "<<mergedFileNameInSubsetQC->Data()<<endl;
+    cout<<"         Couldn't redo Finish() on this file in subdirectory subset"<<i+1<<endl;        
+   } else 
+     {
+      mergedFileinSubsetQC = TFile::Open(mergedFileNameInSubsetQC->Data(),"READ");
+      delete mergedFileNameInSubsetQC;
+      if(mergedFileinSubsetQC) 
+      {
+       mergedFileinSubsetQC->GetObject("cobjQC",mergedListInSubsetQC);
+       mergedFileinSubsetQC->Close();
+      } 
+     }
+     if(mergedListInSubsetQC)
+     {
+      AliFlowAnalysisWithQCumulants *qc = new AliFlowAnalysisWithQCumulants();
+      qc->GetOutputHistograms(mergedListInSubsetQC);
+      qc->Finish();
+      // save the final results for QC in final output file: 
+      TString *finalOutputFileNameinSubsetQC = new TString("subset");
+      (*finalOutputFileNameinSubsetQC)+=(i+1);  
+      (*finalOutputFileNameinSubsetQC)+="/";
+      (*finalOutputFileNameinSubsetQC)+="outputQCanalysis";
+      (*finalOutputFileNameinSubsetQC)+=type.Data();
+      (*finalOutputFileNameinSubsetQC)+=".root";
+      TFile *finalOutputInSubsetQC = new TFile(finalOutputFileNameinSubsetQC->Data(),"NEW");
+      mergedListInSubsetQC->SetName("cobjQC");
+      mergedListInSubsetQC->Write(mergedListInSubsetQC->GetName(),TObject::kSingleKey);
+      finalOutputInSubsetQC->Close();
+      delete finalOutputFileNameinSubsetQC;
+      delete finalOutputInSubsetQC;
+      delete qc;
+     } else 
+       {
+        cout<<"WARNING: mergedListQC is NULL !!!!"<<endl;
+       }        
+       
+   // FQD:
+   TString *mergedFileNameInSubsetFQD = new TString("subset"); 
+   (*mergedFileNameInSubsetFQD)+=(i+1);
+   (*mergedFileNameInSubsetFQD)+="/";
+   (*mergedFileNameInSubsetFQD)+="mergedFQDanalysis";
+   (*mergedFileNameInSubsetFQD)+=type.Data();
+   (*mergedFileNameInSubsetFQD)+=".root";
+   
+   TFile *mergedFileInSubsetFQD = NULL;
+   TList *mergedListInSubsetFQD = NULL;
+   if(gSystem->AccessPathName(mergedFileNameInSubsetFQD->Data(),kFileExists))  
+   {
+    cout<<"WARNING: You do not have a merged output file "<<mergedFileNameInSubsetFQD->Data()<<endl;
+    cout<<"         Couldn't redo Finish() on this file in subdirectory subset"<<i+1<<endl;        
+   } else 
+     {
+      mergedFileinSubsetFQD = TFile::Open(mergedFileNameInSubsetFQD->Data(),"READ");
+      if(mergedFileinSubsetFQD) 
+      {
+       mergedFileinSubsetFQD->GetObject("cobjFQD",mergedListInSubsetFQD);
+       mergedFileinSubsetFQD->Close();
+      } 
+     }
+     if(mergedListInSubsetFQD)
+     {
+      AliFittingQDistribution *fqd = new AliFittingQDistribution();
+      fqd->GetOutputHistograms(mergedListInSubsetFQD);
+      cout<<endl;
+      cout<<"!!!! WARNING WARNING WARNING WARNING !!!!"<<endl;
+      cout<<endl;
+      cout<<"     If Minuit crashed here, remove the file "<<mergedFileNameInSubsetFQD->Data()<<endl;
+      cout<<"     and lunch redoFinish.C again. Good luck! "<<endl; 
+      cout<<endl;
+      cout<<"!!!! WARNING WARNING WARNING WARNING !!!!"<<endl;
+      cout<<endl;
+      delete mergedFileNameInSubsetFQD;
+      fqd->Finish(kTRUE);
+      // save the final results for FQD in final output file: 
+      TString *finalOutputFileNameinSubsetFQD = new TString("subset");
+      (*finalOutputFileNameinSubsetFQD)+=(i+1);  
+      (*finalOutputFileNameinSubsetFQD)+="/";
+      (*finalOutputFileNameinSubsetFQD)+="outputFQDanalysis";
+      (*finalOutputFileNameinSubsetFQD)+=type.Data();
+      (*finalOutputFileNameinSubsetFQD)+=".root";
+      TFile *finalOutputInSubsetFQD = new TFile(finalOutputFileNameinSubsetFQD->Data(),"NEW");
+      mergedListInSubsetFQD->SetName("cobjFQD");
+      mergedListInSubsetFQD->Write(mergedListInSubsetFQD->GetName(),TObject::kSingleKey);
+      finalOutputInSubsetFQD->Close();
+      delete finalOutputFileNameinSubsetFQD;
+      delete finalOutputInSubsetFQD;
+      delete fqd;
+     } else 
+       {
+        cout<<"WARNING: mergedListFQD is NULL !!!!"<<endl;
+       }            
+      
+   // LYZ1SUM:
+   TString *mergedFileNameInSubsetLYZ1SUM = new TString("subset"); 
+   (*mergedFileNameInSubsetLYZ1SUM)+=(i+1);
+   (*mergedFileNameInSubsetLYZ1SUM)+="/";
+   (*mergedFileNameInSubsetLYZ1SUM)+="mergedLYZ1SUManalysis";
+   (*mergedFileNameInSubsetLYZ1SUM)+=type.Data();
+   (*mergedFileNameInSubsetLYZ1SUM)+=".root";
+   
+   TFile *mergedFileInSubsetLYZ1SUM = NULL;
+   TList *mergedListInSubsetLYZ1SUM = NULL;
+   if(gSystem->AccessPathName(mergedFileNameInSubsetLYZ1SUM->Data(),kFileExists))  
+   {
+    cout<<"WARNING: You do not have a merged output file "<<mergedFileNameInSubsetLYZ1SUM->Data()<<endl;
+    cout<<"         Couldn't redo Finish() on this file in subdirectory subset"<<i+1<<endl;        
+   } else 
+     {
+      mergedFileinSubsetLYZ1SUM = TFile::Open(mergedFileNameInSubsetLYZ1SUM->Data(),"READ");
+      delete mergedFileNameInSubsetLYZ1SUM;
+      if(mergedFileinSubsetLYZ1SUM) 
+      {
+       mergedFileinSubsetLYZ1SUM->GetObject("cobjLYZ1SUM",mergedListInSubsetLYZ1SUM);
+       mergedFileinSubsetLYZ1SUM->Close();
+      } 
+     }
+     if(mergedListInSubsetLYZ1SUM)
+     {
+      AliFlowAnalysisWithLeeYangZeros *lyz1sum = new AliFlowAnalysisWithLeeYangZeros();
+      lyz1sum->SetFirstRun(kTRUE);   
+      lyz1sum->SetUseSum(kTRUE);     
+      lyz1sum->GetOutputHistograms(mergedListInSubsetLYZ1SUM);
+      lyz1sum->Finish();
+      // save the final results for LYZ1SUM in final output file: 
+      TString *finalOutputFileNameinSubsetLYZ1SUM = new TString("subset");
+      (*finalOutputFileNameinSubsetLYZ1SUM)+=(i+1);  
+      (*finalOutputFileNameinSubsetLYZ1SUM)+="/";
+      (*finalOutputFileNameinSubsetLYZ1SUM)+="outputLYZ1SUManalysis";
+      (*finalOutputFileNameinSubsetLYZ1SUM)+=type.Data();
+      (*finalOutputFileNameinSubsetLYZ1SUM)+=".root";
+      TFile *finalOutputInSubsetLYZ1SUM = new TFile(finalOutputFileNameinSubsetLYZ1SUM->Data(),"NEW");
+      mergedListInSubsetLYZ1SUM->SetName("cobjLYZ1SUM");
+      mergedListInSubsetLYZ1SUM->Write(mergedListInSubsetLYZ1SUM->GetName(),TObject::kSingleKey);
+      finalOutputInSubsetLYZ1SUM->Close();
+      delete finalOutputFileNameinSubsetLYZ1SUM;
+      delete finalOutputInSubsetLYZ1SUM;
+      delete lyz1sum;
+     } else 
+       {
+        cout<<"WARNING: mergedListLYZ1SUM is NULL !!!!"<<endl;
+       }                    
+                                                     
+   // LYZ1PROD:
+   TString *mergedFileNameInSubsetLYZ1PROD = new TString("subset"); 
+   (*mergedFileNameInSubsetLYZ1PROD)+=(i+1);
+   (*mergedFileNameInSubsetLYZ1PROD)+="/";
+   (*mergedFileNameInSubsetLYZ1PROD)+="mergedLYZ1PRODanalysis";
+   (*mergedFileNameInSubsetLYZ1PROD)+=type.Data();
+   (*mergedFileNameInSubsetLYZ1PROD)+=".root";
+   
+   TFile *mergedFileInSubsetLYZ1PROD = NULL;
+   TList *mergedListInSubsetLYZ1PROD = NULL;
+   if(gSystem->AccessPathName(mergedFileNameInSubsetLYZ1PROD->Data(),kFileExists))  
+   {
+    cout<<"WARNING: You do not have a merged output file "<<mergedFileNameInSubsetLYZ1PROD->Data()<<endl;
+    cout<<"         Couldn't redo Finish() on this file in subdirectory subset"<<i+1<<endl;        
+   } else 
+     {
+      mergedFileinSubsetLYZ1PROD = TFile::Open(mergedFileNameInSubsetLYZ1PROD->Data(),"READ");
+      delete mergedFileNameInSubsetLYZ1PROD;
+      if(mergedFileinSubsetLYZ1PROD) 
+      {
+       mergedFileinSubsetLYZ1PROD->GetObject("cobjLYZ1PROD",mergedListInSubsetLYZ1PROD);
+       mergedFileinSubsetLYZ1PROD->Close();
+      } 
+     }
+     if(mergedListInSubsetLYZ1PROD)
+     {
+      AliFlowAnalysisWithLeeYangZeros *lyz1prod = new AliFlowAnalysisWithLeeYangZeros();
+      lyz1prod->SetFirstRun(kTRUE);   
+      lyz1prod->SetUseSum(kFALSE);     
+      lyz1prod->GetOutputHistograms(mergedListInSubsetLYZ1PROD);
+      lyz1prod->Finish();
+      // save the final results for LYZ1PROD in final output file: 
+      TString *finalOutputFileNameinSubsetLYZ1PROD = new TString("subset");
+      (*finalOutputFileNameinSubsetLYZ1PROD)+=(i+1);  
+      (*finalOutputFileNameinSubsetLYZ1PROD)+="/";
+      (*finalOutputFileNameinSubsetLYZ1PROD)+="outputLYZ1PRODanalysis";
+      (*finalOutputFileNameinSubsetLYZ1PROD)+=type.Data();
+      (*finalOutputFileNameinSubsetLYZ1PROD)+=".root";
+      TFile *finalOutputInSubsetLYZ1PROD = new TFile(finalOutputFileNameinSubsetLYZ1PROD->Data(),"NEW");
+      mergedListInSubsetLYZ1PROD->SetName("cobjLYZ1PROD");
+      mergedListInSubsetLYZ1PROD->Write(mergedListInSubsetLYZ1PROD->GetName(),TObject::kSingleKey);
+      finalOutputInSubsetLYZ1PROD->Close();
+      delete finalOutputFileNameinSubsetLYZ1PROD;
+      delete finalOutputInSubsetLYZ1PROD;
+      delete lyz1prod;
+     } else 
+       {
+        cout<<"WARNING: mergedListLYZ1PROD is NULL !!!!"<<endl;
+       }                                                                                                                            
+                                                                                                                                                               
+   // LYZ2SUM:
+   TString *mergedFileNameInSubsetLYZ2SUM = new TString("subset"); 
+   (*mergedFileNameInSubsetLYZ2SUM)+=(i+1);
+   (*mergedFileNameInSubsetLYZ2SUM)+="/";
+   (*mergedFileNameInSubsetLYZ2SUM)+="mergedLYZ2SUManalysis";
+   (*mergedFileNameInSubsetLYZ2SUM)+=type.Data();
+   (*mergedFileNameInSubsetLYZ2SUM)+=".root";
+   
+   TFile *mergedFileInSubsetLYZ2SUM = NULL;
+   TList *mergedListInSubsetLYZ2SUM = NULL;
+   if(gSystem->AccessPathName(mergedFileNameInSubsetLYZ2SUM->Data(),kFileExists))  
+   {
+    cout<<"WARNING: You do not have a merged output file "<<mergedFileNameInSubsetLYZ2SUM->Data()<<endl;
+    cout<<"         Couldn't redo Finish() on this file in subdirectory subset"<<i+1<<endl;        
+   } else 
+     {
+      mergedFileinSubsetLYZ2SUM = TFile::Open(mergedFileNameInSubsetLYZ2SUM->Data(),"READ");
+      delete mergedFileNameInSubsetLYZ2SUM;
+      if(mergedFileinSubsetLYZ2SUM) 
+      {
+       mergedFileinSubsetLYZ2SUM->GetObject("cobjLYZ2SUM",mergedListInSubsetLYZ2SUM);
+       mergedFileinSubsetLYZ2SUM->Close();
+      } 
+     }
+     if(mergedListInSubsetLYZ2SUM)
+     {
+      AliFlowAnalysisWithLeeYangZeros *lyz2sum = new AliFlowAnalysisWithLeeYangZeros();
+      lyz2sum->SetFirstRun(kFALSE);   
+      lyz2sum->SetUseSum(kTRUE);     
+      lyz2sum->GetOutputHistograms(mergedListInSubsetLYZ2SUM);
+      lyz2sum->Finish();
+      // save the final results for LYZ2SUM in final output file: 
+      TString *finalOutputFileNameinSubsetLYZ2SUM = new TString("subset");
+      (*finalOutputFileNameinSubsetLYZ2SUM)+=(i+1);  
+      (*finalOutputFileNameinSubsetLYZ2SUM)+="/";
+      (*finalOutputFileNameinSubsetLYZ2SUM)+="outputLYZ2SUManalysis";
+      (*finalOutputFileNameinSubsetLYZ2SUM)+=type.Data();
+      (*finalOutputFileNameinSubsetLYZ2SUM)+=".root";
+      TFile *finalOutputInSubsetLYZ2SUM = new TFile(finalOutputFileNameinSubsetLYZ2SUM->Data(),"NEW");
+      mergedListInSubsetLYZ2SUM->SetName("cobjLYZ2SUM");
+      mergedListInSubsetLYZ2SUM->Write(mergedListInSubsetLYZ2SUM->GetName(),TObject::kSingleKey);
+      finalOutputInSubsetLYZ2SUM->Close();
+      delete finalOutputFileNameinSubsetLYZ2SUM;
+      delete finalOutputInSubsetLYZ2SUM;
+      delete lyz2sum;
+     } else 
+       {
+        cout<<"WARNING: mergedListLYZ2SUM is NULL !!!!"<<endl;
+       }                    
+                                                     
+   // LYZ2PROD:
+   TString *mergedFileNameInSubsetLYZ2PROD = new TString("subset"); 
+   (*mergedFileNameInSubsetLYZ2PROD)+=(i+1);
+   (*mergedFileNameInSubsetLYZ2PROD)+="/";
+   (*mergedFileNameInSubsetLYZ2PROD)+="mergedLYZ2PRODanalysis";
+   (*mergedFileNameInSubsetLYZ2PROD)+=type.Data();
+   (*mergedFileNameInSubsetLYZ2PROD)+=".root";
+   
+   TFile *mergedFileInSubsetLYZ2PROD = NULL;
+   TList *mergedListInSubsetLYZ2PROD = NULL;
+   if(gSystem->AccessPathName(mergedFileNameInSubsetLYZ2PROD->Data(),kFileExists))  
+   {
+    cout<<"WARNING: You do not have a merged output file "<<mergedFileNameInSubsetLYZ2PROD->Data()<<endl;
+    cout<<"         Couldn't redo Finish() on this file in subdirectory subset"<<i+1<<endl;        
+   } else 
+     {
+      mergedFileinSubsetLYZ2PROD = TFile::Open(mergedFileNameInSubsetLYZ2PROD->Data(),"READ");
+      delete mergedFileNameInSubsetLYZ2PROD;
+      if(mergedFileinSubsetLYZ2PROD) 
+      {
+       mergedFileinSubsetLYZ2PROD->GetObject("cobjLYZ2PROD",mergedListInSubsetLYZ2PROD);
+       mergedFileinSubsetLYZ2PROD->Close();
+      } 
+     }
+     if(mergedListInSubsetLYZ2PROD)
+     {
+      AliFlowAnalysisWithLeeYangZeros *lyz2prod = new AliFlowAnalysisWithLeeYangZeros();
+      lyz2prod->SetFirstRun(kFALSE);   
+      lyz2prod->SetUseSum(kFALSE);     
+      lyz2prod->GetOutputHistograms(mergedListInSubsetLYZ2PROD);
+      lyz2prod->Finish();
+      // save the final results for LYZ2PROD in final output file: 
+      TString *finalOutputFileNameinSubsetLYZ2PROD = new TString("subset");
+      (*finalOutputFileNameinSubsetLYZ2PROD)+=(i+1);  
+      (*finalOutputFileNameinSubsetLYZ2PROD)+="/";
+      (*finalOutputFileNameinSubsetLYZ2PROD)+="outputLYZ2PRODanalysis";
+      (*finalOutputFileNameinSubsetLYZ2PROD)+=type.Data();
+      (*finalOutputFileNameinSubsetLYZ2PROD)+=".root";
+      TFile *finalOutputInSubsetLYZ2PROD = new TFile(finalOutputFileNameinSubsetLYZ2PROD->Data(),"NEW");
+      mergedListInSubsetLYZ2PROD->SetName("cobjLYZ2PROD");
+      mergedListInSubsetLYZ2PROD->Write(mergedListInSubsetLYZ2PROD->GetName(),TObject::kSingleKey);
+      finalOutputInSubsetLYZ2PROD->Close();
+      delete finalOutputFileNameinSubsetLYZ2PROD;
+      delete finalOutputInSubsetLYZ2PROD;
+      delete lyz2prod;
+     } else 
+       {
+        cout<<"WARNING: mergedListLYZ2PROD is NULL !!!!"<<endl;
+       }                                                                                                                                                                                                                                                                                          
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      
+   // LYZEP:
+   TString *mergedFileNameInSubsetLYZEP = new TString("subset"); 
+   (*mergedFileNameInSubsetLYZEP)+=(i+1);
+   (*mergedFileNameInSubsetLYZEP)+="/";
+   (*mergedFileNameInSubsetLYZEP)+="mergedLYZEPanalysis";
+   (*mergedFileNameInSubsetLYZEP)+=type.Data();
+   (*mergedFileNameInSubsetLYZEP)+=".root";
+   
+   TFile *mergedFileInSubsetLYZEP = NULL;
+   TList *mergedListInSubsetLYZEP = NULL;
+   if(gSystem->AccessPathName(mergedFileNameInSubsetLYZEP->Data(),kFileExists))  
+   {
+    cout<<"WARNING: You do not have a merged output file "<<mergedFileNameInSubsetLYZEP->Data()<<endl;
+    cout<<"         Couldn't redo Finish() on this file in subdirectory subset"<<i+1<<endl;        
+   } else 
+     {
+      mergedFileinSubsetLYZEP = TFile::Open(mergedFileNameInSubsetLYZEP->Data(),"READ");
+      delete mergedFileNameInSubsetLYZEP;
+      if(mergedFileinSubsetLYZEP) 
+      {
+       mergedFileinSubsetLYZEP->GetObject("cobjLYZEP",mergedListInSubsetLYZEP);
+       mergedFileinSubsetLYZEP->Close();
+      } 
+     }
+     if(mergedListInSubsetLYZEP)
+     {
+      AliFlowAnalysisWithLYZEventPlane *lyzep = new AliFlowAnalysisWithLYZEventPlane();
+      lyzep->GetOutputHistograms(mergedListInSubsetLYZEP);
+      lyzep->Finish(kTRUE);
+      // save the final results for LYZEP in final output file: 
+      TString *finalOutputFileNameinSubsetLYZEP = new TString("subset");
+      (*finalOutputFileNameinSubsetLYZEP)+=(i+1);  
+      (*finalOutputFileNameinSubsetLYZEP)+="/";
+      (*finalOutputFileNameinSubsetLYZEP)+="outputLYZEPanalysis";
+      (*finalOutputFileNameinSubsetLYZEP)+=type.Data();
+      (*finalOutputFileNameinSubsetLYZEP)+=".root";
+      TFile *finalOutputInSubsetLYZEP = new TFile(finalOutputFileNameinSubsetLYZEP->Data(),"NEW");
+      mergedListInSubsetLYZEP->SetName("cobjLYZEP");
+      mergedListInSubsetLYZEP->Write(mergedListInSubsetLYZEP->GetName(),TObject::kSingleKey);
+      finalOutputInSubsetLYZEP->Close();
+      delete finalOutputFileNameinSubsetLYZEP;
+      delete finalOutputInSubsetLYZEP;
+      delete lyzep;
+     } else 
+       {
+        cout<<"WARNING: mergedListLYZEP is NULL !!!!"<<endl;
+       }                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            
+   } // end of for(Int_t i=0,i<nSubsets;i++)
+  
+  delete baseDirPath;
+  delete baseDir; 
+  
+ } // end of if(redoFinishAlsoInSubsets)
+
  
 } // end of void reCallFinish(TString type="", Int_t mode=mLocal)