Changing fabs into TMath::Abs
[u/mrichter/AliRoot.git] / EMCAL / AliEMCALSuperModule.cxx
1 /**************************************************************************
2  * Copyright(c) 1998-2007, ALICE Experiment at CERN, All rights reserved. *
3  *                                                                        *
4  * Author: The ALICE Off-line Project.                                    *
5  * Contributors are mentioned in the code where appropriate.              *
6  *                                                                        *
7  * Permission to use, copy, modify and distribute this software and its   *
8  * documentation strictly for non-commercial purposes is hereby granted   *
9  * without fee, provided that the above copyright notice appears in all   *
10  * copies and that both the copyright notice and this permission notice   *
11  * appear in the supporting documentation. The authors make no claims     *
12  * about the suitability of this software for any purpose. It is          *
13  * provided "as is" without express or implied warranty.                  *
14  **************************************************************************/
15
16 /* 
17 $Log$
18 Revision 1.3  2007/11/14 15:34:05  gustavo
19 Coding violations corrected
20
21 Revision 1.2  2007/09/11 19:38:15  pavlinov
22 added pi0 calibration, linearity, shower profile
23  
24 */
25
26 //_________________________________________________________________________
27 // Top EMCAL folder which will keep all information about EMCAL itself,
28 // super Modules (SM), modules, towers, set of hists and so on.
29 //  TObjectSet -> TFolder; Sep 6, 2007
30 //
31 //
32 //
33 //*-- Author: Aleksei Pavlinov (WSU, Detroit, USA) 
34
35 #include "AliEMCALSuperModule.h"
36 #include "AliEMCALFolder.h"
37 #include "AliEMCALCell.h"
38 #include "AliEMCALHistoUtilities.h"
39
40 #include <TROOT.h>
41 #include <TStyle.h>
42 #include <TList.h>
43 #include <TH1.h>
44 #include <TF1.h>
45 #include <TCanvas.h>
46 #include <TLegend.h>
47 #include <TLegendEntry.h>
48
49 typedef  AliEMCALHistoUtilities u;
50
51 ClassImp(AliEMCALSuperModule)
52
53 AliEMCALSuperModule::AliEMCALSuperModule() : TFolder()
54 , fParent(0),fLh(0),fSMNumber(0)
55 {
56   //default ctor
57 }
58
59 AliEMCALSuperModule::AliEMCALSuperModule(const Int_t m, const char* title) : 
60 TFolder(Form("SM%2.2i",m), title)
61 , fParent(0),fLh(0),fSMNumber(m)
62
63   //ctor
64
65
66 AliEMCALSuperModule::AliEMCALSuperModule(const AliEMCALSuperModule &sm) : 
67 TFolder(), fParent(sm.fParent),fLh(sm.fLh),fSMNumber(sm.fSMNumber)
68
69   //copy ctor
70
71
72 AliEMCALSuperModule & AliEMCALSuperModule::operator =(const AliEMCALSuperModule &sm)
73
74     // assignment operator
75 //   if(this == &sm)return *this;
76 //   ((TObject *)this)->operator=(sm);
77
78   fParent = sm.fParent; 
79   fLh = sm.fLh;
80   fSMNumber = sm.fSMNumber;
81   return *this;
82
83
84 AliEMCALSuperModule::~AliEMCALSuperModule()
85 {
86   // dtor
87 }
88
89 void AliEMCALSuperModule::Init()
90 {
91   //Initialization method
92
93   if(GetHists()==0) {
94     fLh = BookHists();
95     Add(fLh);
96   }
97 }
98
99 void  AliEMCALSuperModule::AddCellToEtaRow(AliEMCALCell *cell, const Int_t etaRow)
100 {
101   //Adds cells to corresponding Super module Eta Row
102   static TFolder *set;
103   set = dynamic_cast<TFolder*>(FindObject(Form("ETA%2.2i",etaRow))); 
104   if(set==0) {
105     set = new  TFolder(Form("ETA%2.2i",etaRow),"eta row");
106     Add(set);
107   }
108   set->Add(cell);
109 }
110
111 void AliEMCALSuperModule::FitForAllCells()
112 {
113   //Fit histograms of each cell
114
115   Int_t ncells=0;
116   for(int eta=0; eta<48; eta++) { // eta row
117     TFolder *setEta = dynamic_cast<TFolder*>(FindObject(Form("ETA%2.2i",eta)));
118     if(setEta) {
119       TList* l = (TList*)setEta->GetListOfFolders();
120       printf(" eta %i : %s : cells %i \n", eta, setEta->GetName(), l->GetSize());
121       for(int phi=0; phi<l->GetSize(); phi++) { // cycle on cells (phi directions)
122         AliEMCALCell* cell = dynamic_cast<AliEMCALCell*>(l->At(phi));
123         if(cell == 0) continue; 
124
125         cell->FitEffMassHist();
126
127         u::FillH1(GetHists(), 1, cell->GetCcIn()*1.e+3);
128         u::FillH1(GetHists(), 2, cell->GetCcOut()*1.e+3);
129
130         TF1 *f = cell->GetFunction();
131         u::FillH1(GetHists(), 3, f->GetParameter(1));
132         u::FillH1(GetHists(), 4, f->GetParameter(2));
133         u::FillH1(GetHists(), 5, f->GetChisquare()/f->GetNDF());
134         u::FillH1(GetHists(), 6, f->GetParameter(0));
135
136         ncells++;
137       }
138     }
139   }
140   printf(" <I> AliEMCALSuperModule::FitForAllCells() : ncells %i with fit \n", ncells);
141 }
142
143 void AliEMCALSuperModule::FitEffMassHist()
144 {
145   //Fit effective mass histogram
146   TH1* h = (TH1*)GetHists()->At(0);
147   AliEMCALCell::FitHist(h, GetName());
148 }
149
150
151 void AliEMCALSuperModule::PrintInfo()
152 {
153   //Print
154   printf(" Super Module :   %s    :   %i \n", GetName(), fSMNumber);
155   printf(" # of active cells                %i \n", GetNumberOfCells());
156   TH1* h = (TH1*)GetHists()->At(0);
157   printf(" # h->Integral() of eff.mass hist %i \n", int(h->Integral()));
158 }
159
160 void AliEMCALSuperModule::DrawCC(int iopt)
161 {
162   //Draw different cell histograms
163   TCanvas *c=0; 
164   if(iopt==1) c = new TCanvas("ccInOut","ccInOut");
165  
166   gStyle->SetOptStat(0);
167
168   TH1 *hCCIn  = (TH1*)GetHists()->At(1);
169   TH1 *hCCOut = (TH1*)GetHists()->At(2);
170
171   if(hCCIn == 0)              return;
172   if(hCCIn->GetEntries()<10.) return;
173
174   hCCIn->SetStats(kFALSE);
175   hCCOut->SetStats(kFALSE);
176   hCCOut->SetTitle("CC in and out; Iter 1; Jul 26; All Statistics");
177   hCCOut->SetXTitle("cc in MeV");
178   hCCOut->SetYTitle("  N  ");
179
180   u::DrawHist(hCCOut,2);
181   hCCOut->SetAxisRange(10., 24.);
182   u::DrawHist(hCCIn,2, kRed, "same");
183
184   TLegend *leg = new TLegend(0.5,0.36, 0.97,0.80);
185   TLegendEntry *leIn = leg->AddEntry(hCCIn, Form("input cc : %6.2f #pm %6.2f", hCCIn->GetMean(),hCCIn->GetRMS()), "L");
186   leIn->SetTextColor(hCCIn->GetLineColor());
187
188   if(hCCOut->GetEntries()>10.) 
189   leg->AddEntry(hCCOut, Form("output cc : %6.2f #pm %6.2f", hCCOut->GetMean(),hCCOut->GetRMS()), "L");
190
191   leg->Draw();
192
193   if(c) c->Update();
194 }
195
196 Int_t AliEMCALSuperModule::GetNumberOfCells()
197 {
198   //Returns number of cells in SM
199   Int_t ncells=0;
200   TList* l = (TList*)GetListOfFolders();
201   for(int eta=0; eta<l->GetSize(); eta++) { // cycle on eta row
202     TFolder *setEta = dynamic_cast<TFolder*>(l->At(eta));
203     if(setEta==0) continue;
204
205     TList* le = (TList*)setEta->GetListOfFolders();
206     ncells += le->GetSize();
207   }
208   return ncells;
209 }
210
211 TList* AliEMCALSuperModule::BookHists()
212 {
213   //Initializes histograms
214
215   gROOT->cd();
216   TH1::AddDirectory(1);
217
218   AliEMCALFolder* emcal = (AliEMCALFolder*)GetParent(); 
219   Int_t it = emcal->GetIterationNumber();
220
221   new TH1F("00_EffMass",  "effective mass of #gamma,#gamma(m_{#pi^{0}}=134.98 MeV) ", 250,0.0,0.5);
222   new TH1F("01_CCInput",  "input CC dist.(MEV) ", 200, 5., 25.);
223   new TH1F("02_CCOutput", "output CC dist.(MEV) ", 200, 5., 25.);
224   new TH1F("03_MPI0", "mass of #pi_{0} dist. ", 170, 0.05, 0.22);
225   new TH1F("04_RESPI0", "resolution at #pi_{0} dist. ", 50, 0.0, 0.05);
226   new TH1F("05_XI2/NDF", "#chi^{2} / ndf", 50, 0.0, 5.0);
227   new TH1F("06_NPI0", "number of #pi_{0}", 150, 0.0, 1500.);
228
229   TList *l = AliEMCALHistoUtilities::MoveHistsToList(Form("HistsOfSM_%2.2i",fSMNumber), kFALSE);
230   AliEMCALHistoUtilities::AddToNameAndTitleToList(l, Form("_%2.2i_It%i",fSMNumber, it), 
231                                                   Form(" SM %2.2i, Iter %i",fSMNumber, it));
232
233   TH1::AddDirectory(0);
234   return l;
235 }