ROOT logo
#include "TROOT.h"
#include "TChain.h"
#include "TString.h"
#include "TCanvas.h"
#include "TH1F.h"
#include "TH2F.h"
#include "AliRawReaderChain.h"
#include "AliCaloRawStreamV3.h"
#include "AliCDBManager.h"

#include <fstream>
#include <iostream>

#include "AliTRUPedestalAnalysis.h"
#include "AliTRUPedestalOutput.h"
#include <TStyle.h>

void addFilesToChain(const TString rawFileList, TChain* chain);
void printHists(AliTRUPedestalOutput* output);
void saveResults(AliTRUPedestalOutput* output, TString saveToFile);



void truPedestalAnalysis(TString rawFileList = "files.txt", TString saveToFile = "truOutput.root")
{
  // Raw Chain Initialization
  TChain *chain = new TChain("RAW");
  addFilesToChain(rawFileList, chain );
  AliRawReaderChain* rawChain = new AliRawReaderChain(chain);
  rawChain->Reset();

  // PHOS Raw Stream Initialization
  AliCaloRawStreamV3* phosRawStream = new AliCaloRawStreamV3(rawChain,"PHOS");

  // Analysis object Initialization
  AliTRUPedestalAnalysis* anaObj = new AliTRUPedestalAnalysis();

  // Loop over events in Chain
  UInt_t runNumber = -1;
  Int_t event_count = 0;
  while (rawChain->NextEvent())
  { // Print out event number:
    std::cout << "\r" << "event: " << ++event_count
  	      << "/"<< rawChain->GetNumberOfEvents() << " " << std::flush;
    if( rawChain->GetRunNumber() != runNumber ){
      // if new event number, update OCDB
      runNumber = rawChain->GetRunNumber();
      AliCDBManager::Instance()->SetRun(runNumber);
      Printf("New run number, current run number is: %d", runNumber);
    }

    // Process Event using analysis Object
    anaObj->ProcessEvent(phosRawStream);
  }

  // Save output to file, in form of single entry in tree
  saveResults(anaObj->GetOutput(), saveToFile);

  printHists(anaObj->GetOutput());


  // plotting
  //anaObj->GetOutput()->SaveAs("test.root");
  // cleanup
  //delete anaObj;

  //delete phosRawStream;
  //delete rawChain;
  //delete chain;
}

void addFilesToChain(const TString rawFileList, TChain* chain)
{
  // Open rawFileList and add files contained to chain
  std::ifstream inList;
  inList.open( rawFileList.Data() );
  std::string line;
  while( std::getline(inList, line ) ) {
    printf("Add file %s to chain\n", line.c_str());
    chain->Add(line.c_str());
 }
  inList.close();
}

void printHists(AliTRUPedestalOutput* output){
  gROOT->SetStyle("Plain");
  gStyle->SetPadRightMargin(0.11);
  
  TCanvas* canvas =  new TCanvas;
  TH1F* pedhist = output->GetPedestals();
  pedhist->GetXaxis()->SetRangeUser(512-10, 512+10);
  canvas->SetLogy();
  pedhist->DrawCopy();

  canvas =  new TCanvas;
  TH1F* rmshist = output->GetPedestalRMS();
  rmshist->GetXaxis()->SetRangeUser(0, 5);
  canvas->SetLogy();
  rmshist->DrawCopy();

  canvas = new TCanvas;
  TH1F* pedId  = output->GetPedestalsId();
  pedId->DrawCopy();

  canvas = new TCanvas;
  TH1I* samples = output->GetPedestalSamples();
  samples->DrawCopy();
  
  canvas = new TCanvas;
  canvas->Divide(3, 2);
  canvas->cd(1);
  TH2F* ped2d_2 = output->GetPedestals2d(2);
  ped2d_2->GetZaxis()->SetRangeUser(512-10, 512+10);
  ped2d_2->DrawCopy("colz");

  canvas->cd(2);
  TH2F* ped2d_3 = output->GetPedestals2d(3);
  ped2d_3->GetZaxis()->SetRangeUser(512-10, 512+10);
  ped2d_3->DrawCopy("colz");

  canvas->cd(3);
  TH2F* ped2d_4 = output->GetPedestals2d(4);
  ped2d_4->GetZaxis()->SetRangeUser(512-10, 512+10);
  ped2d_4->DrawCopy("colz");

  canvas->cd(4);
  TH2F* rms2d_2 = output->GetPedestalRMS2d(2);
  //rms2d_2->GetZaxis()->SetRangeUser(0, 5);
  rms2d_2->DrawCopy("colz");

  canvas->cd(5);
  TH2F* rms2d_3 = output->GetPedestalRMS2d(3);
  //rms2d_3->GetZaxis()->SetRangeUser(0, 5);
  rms2d_3->DrawCopy("colz");

  canvas->cd(6);
  TH2F* rms2d_4 = output->GetPedestalRMS2d(4);
  //rms2d_4->GetZaxis()->SetRangeUser(0, 5);
  rms2d_4->DrawCopy("colz");
}

void saveResults(AliTRUPedestalOutput* output, TString saveToFile)
{
  if( ! output )
    gROOT->Error("truPedestalAnalysis.C::saveResults: no ouput", "no msgfmt");

  TTree* tree = new TTree("pedestalTree", "Pedestal Analysis Tree");
  TBranch* branch = tree->Branch("pedOutput", &output);

  Printf("Filling:");
  branch->Print();;
  tree->Fill();

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