Added PHOS/macros/Trigger/raw and contained code.
[u/mrichter/AliRoot.git] / PHOS / macros / Trigger / raw / truPedestalAnalysis.C
1 #include "TROOT.h"
2 #include "TChain.h"
3 #include "TString.h"
4 #include "TCanvas.h"
5 #include "TH1F.h"
6 #include "TH2F.h"
7 #include "AliRawReaderChain.h"
8 #include "AliCaloRawStreamV3.h"
9 #include "AliCDBManager.h"
10
11 #include <fstream>
12 #include <iostream>
13
14 #include "AliTRUPedestalAnalysis.h"
15 #include "AliTRUPedestalOutput.h"
16 #include <TStyle.h>
17
18 void addFilesToChain(const TString rawFileList, TChain* chain);
19 void printHists(AliTRUPedestalOutput* output);
20 void saveResults(AliTRUPedestalOutput* output, TString saveToFile);
21
22
23
24 void truPedestalAnalysis(TString rawFileList = "files.txt", TString saveToFile = "truOutput.root")
25 {
26   // Raw Chain Initialization
27   TChain *chain = new TChain("RAW");
28   addFilesToChain(rawFileList, chain );
29   AliRawReaderChain* rawChain = new AliRawReaderChain(chain);
30   rawChain->Reset();
31
32   // PHOS Raw Stream Initialization
33   AliCaloRawStreamV3* phosRawStream = new AliCaloRawStreamV3(rawChain,"PHOS");
34
35   // Analysis object Initialization
36   AliTRUPedestalAnalysis* anaObj = new AliTRUPedestalAnalysis();
37
38   // Loop over events in Chain
39   UInt_t runNumber = -1;
40   Int_t event_count = 0;
41   while (rawChain->NextEvent())
42   { // Print out event number:
43     std::cout << "\r" << "event: " << ++event_count
44               << "/"<< rawChain->GetNumberOfEvents() << " " << std::flush;
45     if( rawChain->GetRunNumber() != runNumber ){
46       // if new event number, update OCDB
47       runNumber = rawChain->GetRunNumber();
48       AliCDBManager::Instance()->SetRun(runNumber);
49       Printf("New run number, current run number is: %d", runNumber);
50     }
51
52     // Process Event using analysis Object
53     anaObj->ProcessEvent(phosRawStream);
54   }
55
56   // Save output to file, in form of single entry in tree
57   saveResults(anaObj->GetOutput(), saveToFile);
58
59   printHists(anaObj->GetOutput());
60
61
62   // plotting
63   //anaObj->GetOutput()->SaveAs("test.root");
64   // cleanup
65   //delete anaObj;
66
67   //delete phosRawStream;
68   //delete rawChain;
69   //delete chain;
70 }
71
72 void addFilesToChain(const TString rawFileList, TChain* chain)
73 {
74   // Open rawFileList and add files contained to chain
75   std::ifstream inList;
76   inList.open( rawFileList.Data() );
77   std::string line;
78   while( std::getline(inList, line ) ) {
79     printf("Add file %s to chain\n", line.c_str());
80     chain->Add(line.c_str());
81  }
82   inList.close();
83 }
84
85 void printHists(AliTRUPedestalOutput* output){
86   gROOT->SetStyle("Plain");
87   gStyle->SetPadRightMargin(0.11);
88   
89   TCanvas* canvas =  new TCanvas;
90   TH1F* pedhist = output->GetPedestals();
91   pedhist->GetXaxis()->SetRangeUser(512-10, 512+10);
92   canvas->SetLogy();
93   pedhist->DrawCopy();
94
95   canvas =  new TCanvas;
96   TH1F* rmshist = output->GetPedestalRMS();
97   rmshist->GetXaxis()->SetRangeUser(0, 5);
98   canvas->SetLogy();
99   rmshist->DrawCopy();
100
101   canvas = new TCanvas;
102   TH1F* pedId  = output->GetPedestalsId();
103   pedId->DrawCopy();
104
105   canvas = new TCanvas;
106   TH1I* samples = output->GetPedestalSamples();
107   samples->DrawCopy();
108   
109   canvas = new TCanvas;
110   canvas->Divide(3, 2);
111   canvas->cd(1);
112   TH2F* ped2d_2 = output->GetPedestals2d(2);
113   ped2d_2->GetZaxis()->SetRangeUser(512-10, 512+10);
114   ped2d_2->DrawCopy("colz");
115
116   canvas->cd(2);
117   TH2F* ped2d_3 = output->GetPedestals2d(3);
118   ped2d_3->GetZaxis()->SetRangeUser(512-10, 512+10);
119   ped2d_3->DrawCopy("colz");
120
121   canvas->cd(3);
122   TH2F* ped2d_4 = output->GetPedestals2d(4);
123   ped2d_4->GetZaxis()->SetRangeUser(512-10, 512+10);
124   ped2d_4->DrawCopy("colz");
125
126   canvas->cd(4);
127   TH2F* rms2d_2 = output->GetPedestalRMS2d(2);
128   //rms2d_2->GetZaxis()->SetRangeUser(0, 5);
129   rms2d_2->DrawCopy("colz");
130
131   canvas->cd(5);
132   TH2F* rms2d_3 = output->GetPedestalRMS2d(3);
133   //rms2d_3->GetZaxis()->SetRangeUser(0, 5);
134   rms2d_3->DrawCopy("colz");
135
136   canvas->cd(6);
137   TH2F* rms2d_4 = output->GetPedestalRMS2d(4);
138   //rms2d_4->GetZaxis()->SetRangeUser(0, 5);
139   rms2d_4->DrawCopy("colz");
140 }
141
142 void saveResults(AliTRUPedestalOutput* output, TString saveToFile)
143 {
144   if( ! output )
145     gROOT->Error("truPedestalAnalysis.C::saveResults: no ouput", "no msgfmt");
146
147   TTree* tree = new TTree("pedestalTree", "Pedestal Analysis Tree");
148   TBranch* branch = tree->Branch("pedOutput", &output);
149
150   Printf("Filling:");
151   branch->Print();;
152   tree->Fill();
153
154   tree->SaveAs(saveToFile);
155 }