Split: HLT/JET -> HLTANALYSIS/JET
[u/mrichter/AliRoot.git] / HLTANALYSIS / JET / analysis / AliHLTJETAnalysisMerge.cxx
1 //-*- Mode: C++ -*-
2 // $Id: AliHLTJETAnalysisMerge.cxx  $
3 //**************************************************************************
4 //* This file is property of and copyright by the ALICE HLT Project        * 
5 //* ALICE Experiment at CERN, All rights reserved.                         *
6 //*                                                                        *
7 //* Primary Authors: Jochen Thaeder <jochen@thaeder.de>                    *
8 //*                  for The ALICE HLT Project.                            *
9 //*                                                                        *
10 //* Permission to use, copy, modify and distribute this software and its   *
11 //* documentation strictly for non-commercial purposes is hereby granted   *
12 //* without fee, provided that the above copyright notice appears in all   *
13 //* copies and that both the copyright notice and this permission notice   *
14 //* appear in the supporting documentation. The authors make no claims     *
15 //* about the suitability of this software for any purpose. It is          *
16 //* provided "as is" without express or implied warranty.                  *
17 //**************************************************************************
18
19 /** @file   AliHLTJETAnalysisMerge.cxx
20     @author Jochen Thaeder <jochen@thaeder.de>
21     @brief  Container merging analysis objects
22 */
23
24 // see header file for class documentation
25 // or
26 // refer to README to build package
27 // or
28 // visit http://web.ift.uib.no/~kjeks/doc/alice-hlt
29
30 #include "TCanvas.h"
31 #include "TH2F.h"
32
33 #include "AliHLTJETAnalysisMerge.h"
34 #include "AliHLTJETAnalysisJets.h"
35
36 using namespace std;
37
38 /** ROOT macro for the implementation of ROOT specific class methods */
39 ClassImp(AliHLTJETAnalysisMerge)
40
41 /*
42  * ---------------------------------------------------------------------------------
43  *                            Constructor / Destructor
44  * ---------------------------------------------------------------------------------
45  */
46
47 //##################################################################################
48 AliHLTJETAnalysisMerge::AliHLTJETAnalysisMerge() :
49   fCanvasArray(NULL),
50   fAnalysisJetsArray(NULL) {
51   // see header file for class documentation
52   // or
53   // refer to README to build package
54   // or
55   // visit http://web.ift.uib.no/~kjeks/doc/alice-hlt
56   
57 }
58
59 //##################################################################################
60 AliHLTJETAnalysisMerge::~AliHLTJETAnalysisMerge() {
61   // see header file for class documentation
62
63   if ( fCanvasArray ) {
64     fCanvasArray->Clear();
65     delete fCanvasArray;
66   }
67   fCanvasArray = NULL;
68
69   if ( fAnalysisJetsArray ) {
70     fAnalysisJetsArray->Clear();
71     delete fAnalysisJetsArray;
72   }
73   fAnalysisJetsArray = NULL;
74 }
75
76 /*
77  * ---------------------------------------------------------------------------------
78  *                                   Initialize / Reset
79  * ---------------------------------------------------------------------------------
80  */
81
82 //##################################################################################
83 Int_t AliHLTJETAnalysisMerge::Initialize() {
84   // see header file for class documentation  
85
86   Int_t iResult = 0;
87
88   fCanvasArray = new TObjArray();
89   fCanvasArray->SetOwner();
90
91   fAnalysisJetsArray = new TObjArray();
92
93   return iResult;
94 }
95
96 /*
97  * ---------------------------------------------------------------------------------
98  *                                Setter - public
99  * ---------------------------------------------------------------------------------
100  */
101
102 //##################################################################################
103 void AliHLTJETAnalysisMerge::AddJets( AliHLTJETAnalysisJets* jets ) {
104   // see header file for class documentation  
105
106   fAnalysisJetsArray->Add( jets );
107
108   return;
109 }
110
111 /*
112  * ---------------------------------------------------------------------------------
113  *                             Output - private
114  * ---------------------------------------------------------------------------------
115  */
116
117 //##################################################################################
118 void AliHLTJETAnalysisMerge::CreateCanvas() {
119   // see header file for class documentation  
120
121   CreateCanvasSpectra();
122
123   CreateCanvasDelta();
124   
125   CreateCanvasMatched();
126
127   return;
128 }
129
130 ////////////////////////////////////////////////////////////////////////////////////
131 ////////////////////////////////////////////////////////////////////////////////////
132 ///                                                                              ///
133 //////                             PRIVATE                                    //////
134 ///                                                                              ///
135 ////////////////////////////////////////////////////////////////////////////////////
136 ////////////////////////////////////////////////////////////////////////////////////
137
138 /*
139  * ---------------------------------------------------------------------------------
140  *                             Output - private
141  * ---------------------------------------------------------------------------------
142  */
143
144 //##################################################################################
145 void AliHLTJETAnalysisMerge::CreateCanvasSpectra() {
146   // see header file for class documentation  
147
148   TString canvasName = "JetSpectra";
149   
150   AliHLTJETAnalysisJets* jets = 
151     reinterpret_cast<AliHLTJETAnalysisJets*>((*fAnalysisJetsArray)[fAnalysisJetsArray->GetLast()]);     
152   
153   // -- Spectra E_t
154   // ----------------
155   TCanvas* canvas = AddCanvas( Form("E_{t} ")+canvasName, 3, 4 );
156   Int_t type = AliHLTJETAnalysisBase::kHistSpectraEt;
157
158   for ( Int_t idx = 0; idx < AliHLTJETAnalysisBase::kSpectraMax ; ++idx )
159     DrawHistogram(canvas, idx+1, jets->GetHistogram( type, idx ), kTRUE, kFALSE);
160         
161   // -- Spectra eta
162   // ----------------
163   canvas = AddCanvas( Form("#eta ")+canvasName, 3, 4 );
164   type = AliHLTJETAnalysisBase::kHistSpectraEta;
165
166   for ( Int_t idx = 0; idx < AliHLTJETAnalysisBase::kSpectraMax ; ++idx )
167     DrawHistogram(canvas, idx+1, jets->GetHistogram( type, idx ), kTRUE, kFALSE);
168
169   // -- Spectra phi
170   // ----------------
171   canvas = AddCanvas( Form("#phi ")+canvasName, 3, 4 );
172   type = AliHLTJETAnalysisBase::kHistSpectraPhi;  
173
174   for ( Int_t idx = 0; idx < AliHLTJETAnalysisBase::kSpectraMax ; ++idx )
175     DrawHistogram(canvas, idx+1, jets->GetHistogram( type, idx ), kTRUE, kFALSE);
176
177   return;
178   }
179
180 //##################################################################################
181 void AliHLTJETAnalysisMerge::CreateCanvasDelta() {
182   // see header file for class documentation  
183
184   TString canvasName = "JetDelta";
185   
186   AliHLTJETAnalysisJets* jets = 
187     reinterpret_cast<AliHLTJETAnalysisJets*>((*fAnalysisJetsArray)[fAnalysisJetsArray->GetLast()]);     
188   
189   // -- Delta E_t
190   // --------------
191   TCanvas* canvas = AddCanvas( Form("#DeltaE_{t} ")+canvasName, 2, 2 );
192   Int_t type = AliHLTJETAnalysisBase::kHistDeltaEt;
193
194   for ( Int_t idx = 0; idx < AliHLTJETAnalysisBase::kDeltaMax ; ++idx )
195     DrawHistogram(canvas, idx+1, jets->GetHistogram( type, idx ), kTRUE, kFALSE);
196     
197   // -- Delta Eta
198   // --------------
199   canvas = AddCanvas( Form("#Delta#eta} ")+canvasName, 2, 2 );
200   type = AliHLTJETAnalysisBase::kHistDeltaEta;
201
202   for ( Int_t idx = 0; idx < AliHLTJETAnalysisBase::kDeltaMax ; ++idx )
203     DrawHistogram(canvas, idx+1, jets->GetHistogram( type, idx ), kTRUE, kFALSE);
204     
205   // -- Delta Phi
206   // --------------
207   canvas = AddCanvas( Form("#Delta#phi ")+canvasName, 2, 2 );
208   type = AliHLTJETAnalysisBase::kHistDeltaPhi;
209
210   for ( Int_t idx = 0; idx < AliHLTJETAnalysisBase::kDeltaMax ; ++idx )
211     DrawHistogram(canvas, idx+1, jets->GetHistogram( type, idx ), kTRUE, kFALSE);
212
213   // -- Delta Eta Delta Phi
214   // ------------------------
215   canvas = AddCanvas( Form("#Delta#eta#Delta#phi ")+canvasName, 2, 2 );
216   type = AliHLTJETAnalysisBase::kHistDeltaEtaDeltaPhi;
217
218   for ( Int_t idx = 0; idx < AliHLTJETAnalysisBase::kDeltaMax ; ++idx )
219     DrawHistogram(canvas, idx+1, jets->GetHistogram( type, idx ), kTRUE, kFALSE);
220
221   return;
222 }
223
224 //##################################################################################
225 void AliHLTJETAnalysisMerge::CreateCanvasMatched() {
226   // see header file for class documentation  
227
228   TString canvasName = "JetMatched";
229   
230   AliHLTJETAnalysisJets* jets = 
231     reinterpret_cast<AliHLTJETAnalysisJets*>((*fAnalysisJetsArray)[fAnalysisJetsArray->GetLast()]);     
232   
233   // -- Resolutions
234   // ----------------
235   TCanvas* canvas = AddCanvas( Form("Correlations + Resolutions")+canvasName, 2, 3 );
236
237   DrawHistogram(canvas, 1, jets->GetHistogram(AliHLTJETAnalysisBase::kHistCorrelationsJetEt, 
238                                               AliHLTJETAnalysisBase::kPlotAll),kTRUE, kFALSE);
239   DrawHistogram(canvas, 2, jets->GetHistogram(AliHLTJETAnalysisBase::kHistCorrelationsJetEt, 
240                                               AliHLTJETAnalysisBase::kPlotLead),kTRUE, kFALSE);
241
242   DrawHistogram(canvas, 3, jets->GetHistogram(AliHLTJETAnalysisBase::kHistResolutionsJetEt,
243                                               AliHLTJETAnalysisBase::kPlotAll),kTRUE, kFALSE);
244   DrawHistogram(canvas, 4, jets->GetHistogram(AliHLTJETAnalysisBase::kHistResolutionsJetEt, 
245                                               AliHLTJETAnalysisBase::kPlotLead),kTRUE, kFALSE);
246
247   DrawHistogram(canvas, 5, jets->GetHistogram(AliHLTJETAnalysisBase::kHistResolutionsDiJetEt, 
248                                               AliHLTJETAnalysisBase::kPlotAll),kTRUE, kFALSE);
249   DrawHistogram(canvas, 6, jets->GetHistogram(AliHLTJETAnalysisBase::kHistResolutionsDiJetEt, 
250                                               AliHLTJETAnalysisBase::kPlotLead),kTRUE, kFALSE);
251
252   return;
253 }
254
255 /*
256  * ---------------------------------------------------------------------------------
257  *                               Helper - private
258  * ---------------------------------------------------------------------------------
259  */
260
261 //##################################################################################
262 TCanvas* AliHLTJETAnalysisMerge::AddCanvas( TString name, Int_t divideX=1, Int_t divideY=1 ) {
263   // see header file for class documentation
264
265   fCanvasArray->Add (new TCanvas(name, name, 10, 10, 1400, 800));
266   reinterpret_cast<TCanvas*>((*fCanvasArray)[fCanvasArray->GetLast()])->Divide(divideX,divideY);
267   
268   return reinterpret_cast<TCanvas*>((*fCanvasArray)[fCanvasArray->GetLast()]);
269 }
270
271 //##################################################################################
272 void AliHLTJETAnalysisMerge::DrawHistogram( TCanvas* canvas, Int_t idx, TH1* hist, 
273                                             Bool_t bScale=kFALSE, Bool_t bLogY=kFALSE) {
274   // see header file for class documentation
275
276   if ( hist == NULL )
277     return;
278
279   TVirtualPad* pad = canvas->cd(idx);
280   
281   if ( bScale ) 
282     hist->Scale( 1./hist->GetBinWidth(0) );
283   
284   if ( bLogY && hist->GetEntries() != 0 )
285     pad->SetLogy();
286   
287   pad->SetGridy();
288   pad->SetGridx();
289   
290   if ( !strcmp(hist->ClassName(),"TH2F") )
291     hist->Draw("COLZ");
292   else 
293     hist->Draw("");
294   
295   return;
296 }