ROOT logo
//------------------------------------------------------------------------
// PWGPP QA train produces QA histograms QAresults.root, where PHOS
// histograms for two events types are stored in
// TObjArray *PHOSCellsQA_AnyInt,
// TObjArray *PHOSCellsQA_PHI7 and
// TList     *PHOSPbPbQAResults
// 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 ExtractPHOSQA.C++
// 3) Run conversion of QAresults to new root files with PHOS histograms:
//    ExtractPHOSQA("QAresult.txt")
// 4) On the output, the new root files will be created per run
//    with the names AnyInt_<run>.root, PHI7_<run>.root, PHOSPbPb_<run>.root
//
// Author: Yuri Kharlov. 19-Nov-2011
//------------------------------------------------------------------------
/* $Id$ */

#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 ExtractPHOSQA(const TString QAfilelist="QAresult.list")
{

  ifstream in;
  in.open(QAfilelist.Data());
  char rootFileName[256];
  TString oldRootFileName, newRootFileName;
  TFile *oldRootFile, *newRootFile;
  TObjArray *histAnyInt, *histPHI7;
  TList     *histPbPb;
  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");
    histPbPb   = (TList*)    oldRootFile->Get("PHOSPbPbQAResults");
    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();

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

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