ROOT logo
// "$MYDATA/gsi/gsi.root"

const char* fileName = "$MYDATA/gsi02/gsi02a.root";
const char* listName = "Cont_cloizide_DhcAna";

// const char* fileName = "dhctask_output_etamax1.root";
// const char* listName = "dhclist";

// From AliDhcTask.h...keep current!
const Int_t nPairAxes = 6;
const Int_t nEvtAxes  = 3;
const Int_t nTrkAxes  = 2;
//const Int_t nExtra    = 3;

TString sCorrAxes[] = {"#Delta#eta", "assoc. p_{T}", "trig. p_{T}", 
		       "Centrality", "#Delta#phi (rad)",
		       "z-vertex (cm)", "Charge Comb."};
TString sEvtAxes[] = {"z-vertex", "V0M Centrality (%)", "CL1 Centrality"};
TString sTrkAxes[] = {"phi", "eta"};

enum ePairHistAxes  {kDeta, kPtAssc, kPtTrig, kCent, kDphi,
		     kZvtx};
enum eEventHistAxes {kZvtxEvt, kCentV0M, kCentCL1};
enum eTrackHistAxes {kPhiTrk, kEtaTrk};

TObjArray* hists = new TObjArray();

//gROOT->LoadMacro("../../../common/ProjectionUtils.C+");
void CheckOutput()
{
  gStyle->SetOptTitle(0);

  TFile* inFile = new TFile(fileName, "read");
  TList* dhcList = inFile->Get(listName);
  if (!dhcList) {
    Error("","No List %s in %s", fileName, listName);
    return;
  }

  THnSparse* hs = dhcList->FindObject("fHS");
  THnSparse* hm = dhcList->FindObject("fHM");

  if (!hs) {
    Error("","No hs in list %s", listName);
    return;
  }

  TH2F* hEvt = dhcList->FindObject("fHEvt");
  TH2F* hTrk = dhcList->FindObject("fHTrk");
  hists->Add(hEvt);
  hists->Add(hTrk);
  TH1D* heta = hTrk->ProjectionY();
  hists->Add(heta);

  TH1D* hzvtx = hEvt->ProjectionX("hzvtx", 1, 90);
  hists->Add(hzvtx);
  TH1D* hcent = hEvt->ProjectionY("hcent");
  hists->Add(hcent);
  // Correlation projections

  // hs->GetAxis(kZvtx)->SetRangeUser(-1.9, 1.9);
  // hm->GetAxis(kZvtx)->SetRangeUser(-1.9, 1.9);

  // hs->GetAxis(kCent)->SetRangeUser(0, 4.99);
  // hm->GetAxis(kCent)->SetRangeUser(0, 4.99);

  TH2D* sig = hs->Projection(kDeta,kDphi); sig->SetName("sig");
  TH2D* bkg = hm->Projection(kDeta,kDphi); sig->SetName("bkg");
  sig->Sumw2(); bkg->Sumw2();
  sig->Scale(1./sig->Integral()); 
  bkg->Scale(1./bkg->Integral()); 
  sig->Divide(bkg);
  sig->GetYaxis()->SetRangeUser(-1.999, 1.999); 
  TH2D* hcz = hs->Projection(kZvtx, kCent);
  hcz->SetName("zvtx_vs_cent");

  // 1D
  TH1D* hzr = 0;

  TH1D *hsVar[nPairAxes], *hmVar[nPairAxes], *evtVar[nEvtAxes], 
    *trkVar[nTrkAxes];

  for (int i=0; i<nPairAxes; i++) {

    hsVar[i] = hs->Projection(i);
    hsVar[i]->SetFillColor(kRed-7);
    hsVar[i]->Sumw2();
    hsVar[i]->SetTitle(Form("title;%s;same-evt. pairs", sCorrAxes[i].Data()));
    hmVar[i] = hm->Projection(i);
    hmVar[i]->SetFillColor(kAzure-9);
    hmVar[i]->Sumw2();
    hmVar[i]->SetTitle(Form("title;%s;mixed-evt. pairs", sCorrAxes[i].Data()));
    hists->Add(hsVar[i]);
    hists->Add(hmVar[i]);
    if(i==kZvtx) {
      hzr = (TH1D*) hsVar[i]->Clone();
      hzr->SetFillColor(kYellow);
      hzr->Divide(hmVar[i]);
      hzr->SetTitle("track count ratio;z-vertex (cm);same/mixed evt track multiplicity");
      hists->Add(hzr);
    }
  }
  hists->Add(sig);

  /*
  for (int i=0; i<nEvtAxes; i++) {
    evtVar[i] = hEvt->Projection(i);
    evtVar[i]->SetFillColor(kGray);
    evtVar[i]->SetTitle(Form("title;%s;events", sEvtAxes[i].Data()));
    hists->Add(evtVar[i]);
    if (i==1) cout << evtVar[i]->Integral(1, 89) << endl;
  }
  for (int i=0; i<nTrkAxes; i++) {
    trkVar[i] = hTrk->Projection(i);
    trkVar[i]->SetTitle(Form("title;%s;tracks", sTrkAxes[i].Data()));
    hists->Add(trkVar[i]);
  }

  //hists->Add(hcz);
  */

  for (int n=0; n<hists->GetEntries(); n++) {
    TCanvas* c = new TCanvas(Form("c%d",n), Form("c%d",n), 
		       10*n, 10*n, 700, 500);
    TObject* obj = hists->At(n);
    if (obj->InheritsFrom("TH2")) {
      TH2* h2 = (TH2*) obj;
      h2->Draw("surf1");
    }
    else if (obj->InheritsFrom("TH1")) {
      TH1* h = (TH1*) obj;
      h->SetLineWidth(2);
      h->SetFillStyle(1001); // solid
      if(h->GetFillColor()==kNone) {
	h->SetFillColor(kGreen-9);
      }
      h->Draw("histf");
      h->Draw("histepsame");
    }
  }

  return;
}
 CheckOutput.C:1
 CheckOutput.C:2
 CheckOutput.C:3
 CheckOutput.C:4
 CheckOutput.C:5
 CheckOutput.C:6
 CheckOutput.C:7
 CheckOutput.C:8
 CheckOutput.C:9
 CheckOutput.C:10
 CheckOutput.C:11
 CheckOutput.C:12
 CheckOutput.C:13
 CheckOutput.C:14
 CheckOutput.C:15
 CheckOutput.C:16
 CheckOutput.C:17
 CheckOutput.C:18
 CheckOutput.C:19
 CheckOutput.C:20
 CheckOutput.C:21
 CheckOutput.C:22
 CheckOutput.C:23
 CheckOutput.C:24
 CheckOutput.C:25
 CheckOutput.C:26
 CheckOutput.C:27
 CheckOutput.C:28
 CheckOutput.C:29
 CheckOutput.C:30
 CheckOutput.C:31
 CheckOutput.C:32
 CheckOutput.C:33
 CheckOutput.C:34
 CheckOutput.C:35
 CheckOutput.C:36
 CheckOutput.C:37
 CheckOutput.C:38
 CheckOutput.C:39
 CheckOutput.C:40
 CheckOutput.C:41
 CheckOutput.C:42
 CheckOutput.C:43
 CheckOutput.C:44
 CheckOutput.C:45
 CheckOutput.C:46
 CheckOutput.C:47
 CheckOutput.C:48
 CheckOutput.C:49
 CheckOutput.C:50
 CheckOutput.C:51
 CheckOutput.C:52
 CheckOutput.C:53
 CheckOutput.C:54
 CheckOutput.C:55
 CheckOutput.C:56
 CheckOutput.C:57
 CheckOutput.C:58
 CheckOutput.C:59
 CheckOutput.C:60
 CheckOutput.C:61
 CheckOutput.C:62
 CheckOutput.C:63
 CheckOutput.C:64
 CheckOutput.C:65
 CheckOutput.C:66
 CheckOutput.C:67
 CheckOutput.C:68
 CheckOutput.C:69
 CheckOutput.C:70
 CheckOutput.C:71
 CheckOutput.C:72
 CheckOutput.C:73
 CheckOutput.C:74
 CheckOutput.C:75
 CheckOutput.C:76
 CheckOutput.C:77
 CheckOutput.C:78
 CheckOutput.C:79
 CheckOutput.C:80
 CheckOutput.C:81
 CheckOutput.C:82
 CheckOutput.C:83
 CheckOutput.C:84
 CheckOutput.C:85
 CheckOutput.C:86
 CheckOutput.C:87
 CheckOutput.C:88
 CheckOutput.C:89
 CheckOutput.C:90
 CheckOutput.C:91
 CheckOutput.C:92
 CheckOutput.C:93
 CheckOutput.C:94
 CheckOutput.C:95
 CheckOutput.C:96
 CheckOutput.C:97
 CheckOutput.C:98
 CheckOutput.C:99
 CheckOutput.C:100
 CheckOutput.C:101
 CheckOutput.C:102
 CheckOutput.C:103
 CheckOutput.C:104
 CheckOutput.C:105
 CheckOutput.C:106
 CheckOutput.C:107
 CheckOutput.C:108
 CheckOutput.C:109
 CheckOutput.C:110
 CheckOutput.C:111
 CheckOutput.C:112
 CheckOutput.C:113
 CheckOutput.C:114
 CheckOutput.C:115
 CheckOutput.C:116
 CheckOutput.C:117
 CheckOutput.C:118
 CheckOutput.C:119
 CheckOutput.C:120
 CheckOutput.C:121
 CheckOutput.C:122
 CheckOutput.C:123
 CheckOutput.C:124
 CheckOutput.C:125
 CheckOutput.C:126
 CheckOutput.C:127
 CheckOutput.C:128
 CheckOutput.C:129
 CheckOutput.C:130
 CheckOutput.C:131
 CheckOutput.C:132
 CheckOutput.C:133
 CheckOutput.C:134
 CheckOutput.C:135
 CheckOutput.C:136
 CheckOutput.C:137
 CheckOutput.C:138
 CheckOutput.C:139
 CheckOutput.C:140
 CheckOutput.C:141
 CheckOutput.C:142
 CheckOutput.C:143
 CheckOutput.C:144