ROOT logo
//------------------------------------------------------------------------
// PWGPP QA train produces QA histograms QAresults.root, where PHOS
// histograms for two events types are stored in
// TObjArray *PHOSCellsQA_AnyInt and TObjArray *PHOSCellsQA_PHI7
// As each a root file for eah run contains, by design, unique histograms
// per run, the root files from different runs cannot be merged 
// via TFileMerger.
// This drawback of the QA design is solved by extracting the PHOS
// histograms from TObjArray's of QAresults.root to separate files per run
// and per event type.
//
// Usage:
// 1) Create a list of files QAresults.root produced by the PWGPP QA train,
//    to a text file, let say QAresults.txt
// 2) Compile this macro:
//    .L ExtractPHOSCellQA.C++
// 3) Run conversion of QAresults to new root files with PHOS histograms:
//    ExtractPHOSCellQA("QAresult.txt")
// 4) On the output, the new root files will be created per run
//    with the names AnyInt_<run>.root and PHI7_<run>.root
//
// Author: Yuri Kharlov. 3-Oct-2011
//------------------------------------------------------------------------

#if !defined(__CINT__) || defined(__MAKECINT__)
#include <TObjArray.h>
#include <TString.h>
#include <TFile.h>
#include <TGrid.h>
#include <Riostream.h>
#include <stdio.h>
using namespace std;
#endif

void ExtractPHOSCellQA(const TString QAfilelist="QAresult.list")
{

  ifstream in;
  in.open(QAfilelist.Data());
  char rootFileName[256];
  TString oldRootFileName, newRootFileName;
  TFile *oldRootFile, *newRootFile;
  TObjArray *histAnyInt, *histPHI7;
  Bool_t firstFile = kTRUE;

  while (1) {
    in >> rootFileName;
    if (!in.good()) break;
    printf("root file is %s",rootFileName);
    oldRootFileName = rootFileName;
    if (oldRootFileName.BeginsWith("alien://")) {
      TGrid::Connect("alien://");
      firstFile = kFALSE;
    }
    oldRootFile = TFile::Open(rootFileName,"read");
    histAnyInt = (TObjArray*)oldRootFile->Get("PHOSCellsQA_AnyInt");
    histPHI7   = (TObjArray*)oldRootFile->Get("PHOSCellsQA_PHI7");
    if (histAnyInt == 0 || histPHI7 == 0) {
      printf(" does not contain PHOSCellQA histograms\n");
      continue;
    }
    else {
      printf(" contains PHOSCellQA histograms\n");
    }

    char *runNum = strtok(rootFileName+35,"/");

    newRootFileName = Form("AnyInt_%s.root",runNum);
    newRootFile = TFile::Open(newRootFileName,"recreate");
    histAnyInt->Write(0,0);
    newRootFile->Close();

    newRootFileName = Form("PHI7_%s.root",runNum);
    newRootFile = TFile::Open(newRootFileName,"recreate");
    histPHI7  ->Write(0,0);
    newRootFile->Close();

    histAnyInt->Clear();
    histPHI7  ->Clear();
    oldRootFile  ->Close();
   }
}
 ExtractPHOSCellQA.C:1
 ExtractPHOSCellQA.C:2
 ExtractPHOSCellQA.C:3
 ExtractPHOSCellQA.C:4
 ExtractPHOSCellQA.C:5
 ExtractPHOSCellQA.C:6
 ExtractPHOSCellQA.C:7
 ExtractPHOSCellQA.C:8
 ExtractPHOSCellQA.C:9
 ExtractPHOSCellQA.C:10
 ExtractPHOSCellQA.C:11
 ExtractPHOSCellQA.C:12
 ExtractPHOSCellQA.C:13
 ExtractPHOSCellQA.C:14
 ExtractPHOSCellQA.C:15
 ExtractPHOSCellQA.C:16
 ExtractPHOSCellQA.C:17
 ExtractPHOSCellQA.C:18
 ExtractPHOSCellQA.C:19
 ExtractPHOSCellQA.C:20
 ExtractPHOSCellQA.C:21
 ExtractPHOSCellQA.C:22
 ExtractPHOSCellQA.C:23
 ExtractPHOSCellQA.C:24
 ExtractPHOSCellQA.C:25
 ExtractPHOSCellQA.C:26
 ExtractPHOSCellQA.C:27
 ExtractPHOSCellQA.C:28
 ExtractPHOSCellQA.C:29
 ExtractPHOSCellQA.C:30
 ExtractPHOSCellQA.C:31
 ExtractPHOSCellQA.C:32
 ExtractPHOSCellQA.C:33
 ExtractPHOSCellQA.C:34
 ExtractPHOSCellQA.C:35
 ExtractPHOSCellQA.C:36
 ExtractPHOSCellQA.C:37
 ExtractPHOSCellQA.C:38
 ExtractPHOSCellQA.C:39
 ExtractPHOSCellQA.C:40
 ExtractPHOSCellQA.C:41
 ExtractPHOSCellQA.C:42
 ExtractPHOSCellQA.C:43
 ExtractPHOSCellQA.C:44
 ExtractPHOSCellQA.C:45
 ExtractPHOSCellQA.C:46
 ExtractPHOSCellQA.C:47
 ExtractPHOSCellQA.C:48
 ExtractPHOSCellQA.C:49
 ExtractPHOSCellQA.C:50
 ExtractPHOSCellQA.C:51
 ExtractPHOSCellQA.C:52
 ExtractPHOSCellQA.C:53
 ExtractPHOSCellQA.C:54
 ExtractPHOSCellQA.C:55
 ExtractPHOSCellQA.C:56
 ExtractPHOSCellQA.C:57
 ExtractPHOSCellQA.C:58
 ExtractPHOSCellQA.C:59
 ExtractPHOSCellQA.C:60
 ExtractPHOSCellQA.C:61
 ExtractPHOSCellQA.C:62
 ExtractPHOSCellQA.C:63
 ExtractPHOSCellQA.C:64
 ExtractPHOSCellQA.C:65
 ExtractPHOSCellQA.C:66
 ExtractPHOSCellQA.C:67
 ExtractPHOSCellQA.C:68
 ExtractPHOSCellQA.C:69
 ExtractPHOSCellQA.C:70
 ExtractPHOSCellQA.C:71
 ExtractPHOSCellQA.C:72
 ExtractPHOSCellQA.C:73
 ExtractPHOSCellQA.C:74
 ExtractPHOSCellQA.C:75
 ExtractPHOSCellQA.C:76
 ExtractPHOSCellQA.C:77
 ExtractPHOSCellQA.C:78
 ExtractPHOSCellQA.C:79
 ExtractPHOSCellQA.C:80
 ExtractPHOSCellQA.C:81
 ExtractPHOSCellQA.C:82
 ExtractPHOSCellQA.C:83