1 /**************************************************************************
\r
2 * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
\r
4 * Author: Ana Marin, Kathrin Koch, Kenneth Aamodt *
\r
7 * Permission to use, copy, modify and distribute this software and its *
\r
8 * documentation strictly for non-commercial purposes is hereby granted *
\r
9 * without fee, provided that the above copyright notice appears in all *
\r
10 * copies and that both the copyright notice and this permission notice *
\r
11 * appear in the supporting documentation. The authors make no claims *
\r
12 * about the suitability of this software for any purpose. It is *
\r
13 * provided "as is" without express or implied warranty. *
\r
14 **************************************************************************/
\r
16 ////////////////////////////////////////////////
\r
17 //---------------------------------------------
\r
18 // Class used to do analysis on conversion pairs
\r
19 //---------------------------------------------
\r
20 ////////////////////////////////////////////////
\r
22 #include "AliGammaConversionHistograms.h"
\r
24 #include "TObjString.h"
\r
31 using namespace std;
\r
33 ClassImp(AliGammaConversionHistograms)
\r
36 AliGammaConversionHistograms::AliGammaConversionHistograms() :
\r
37 fHistogramMap(new TMap()),
\r
46 fMappingContainer(NULL),
\r
47 fBackgroundContainer(NULL),
\r
48 fDebugContainer(NULL),
\r
49 fResolutionContainer(NULL),
\r
50 fMatchContainer(NULL),
\r
51 fESDContainer(NULL),
\r
53 fTableContainer(NULL),
\r
54 fOtherContainer(NULL)
\r
56 // see header file for documenation
\r
60 AliGammaConversionHistograms::AliGammaConversionHistograms(const AliGammaConversionHistograms & original) :
\r
61 fHistogramMap(original.fHistogramMap),
\r
62 fNPhiIndex(original.fNPhiIndex),
\r
63 fNRIndex(original.fNRIndex),
\r
64 fMinRadius(original.fMinRadius),
\r
65 fMaxRadius(original.fMaxRadius),
\r
66 fDeltaR(original.fDeltaR),
\r
67 fMinPhi(original.fMinPhi),
\r
68 fMaxPhi(original.fMaxPhi),
\r
69 fDeltaPhi(original.fDeltaPhi),
\r
70 fMappingContainer(original.fMappingContainer),
\r
71 fBackgroundContainer(original.fBackgroundContainer),
\r
72 fDebugContainer(original.fDebugContainer),
\r
73 fResolutionContainer(original.fResolutionContainer),
\r
74 fMatchContainer(original.fMatchContainer),
\r
75 fESDContainer(original.fESDContainer),
\r
76 fMCContainer(original.fMCContainer),
\r
77 fTableContainer(original.fTableContainer),
\r
78 fOtherContainer(original.fOtherContainer)
\r
80 //see header file for documentation
\r
84 AliGammaConversionHistograms & AliGammaConversionHistograms::operator = (const AliGammaConversionHistograms & /*original*/)
\r
86 // assignment operator
\r
91 AliGammaConversionHistograms::~AliGammaConversionHistograms() {
\r
97 void AliGammaConversionHistograms::AddHistogram(TString histogramName, TString histogramTitle, Int_t nXBins, Double_t firstX,Double_t lastX,TString xAxisTitle, TString yAxisTitle){
\r
98 // see header file for documentation
\r
99 TH1F *tmp = new TH1F(histogramName, histogramTitle,nXBins,firstX,lastX);
\r
100 tmp->GetXaxis()->SetTitle(xAxisTitle);
\r
101 tmp->GetYaxis()->SetTitle(yAxisTitle);
\r
102 TObjString* tobjstring = new TObjString(histogramName.Data());
\r
103 fHistogramMap->Add((TObject*)tobjstring,(TObject*)tmp);
\r
106 void AliGammaConversionHistograms::AddHistogram(TString histogramName, TString histogramTitle, Int_t nXBins, Double_t firstX, Double_t lastX, Int_t nYBins, Double_t firstY, Double_t lastY, TString xAxisTitle, TString yAxisTitle){
\r
107 // see header file for documentation
\r
108 TH2F *tmp = new TH2F(histogramName, histogramTitle,nXBins,firstX,lastX,nYBins,firstY,lastY);
\r
109 tmp->GetXaxis()->SetTitle(xAxisTitle);
\r
110 tmp->GetYaxis()->SetTitle(yAxisTitle);
\r
111 TObjString *tobjstring = new TObjString(histogramName.Data());
\r
112 fHistogramMap->Add((TObject*)tobjstring,(TObject*)tmp);
\r
115 void AliGammaConversionHistograms::AddTable(TString tableName,TString tableTitle,Int_t nXBins,const char * axesLabel[]){
\r
118 TH1F *tmp = new TH1F(tableName,tableTitle,nXBins,0,nXBins);
\r
119 for(Int_t xbin=1; xbin<=nXBins; xbin++){
\r
120 tmp->GetXaxis()->SetBinLabel(xbin,axesLabel[xbin-1]);
\r
124 TObjString *tobjstring = new TObjString(tableName.Data());
\r
125 fHistogramMap->Add((TObject*)tobjstring,(TObject*)tmp);
\r
128 void AliGammaConversionHistograms::FillTable(TString tableName,Double_t xValue) const {
\r
129 TH1 *tmp = (TH1*)fHistogramMap->GetValue(tableName.Data());
\r
135 void AliGammaConversionHistograms::FillHistogram(TString histogramName, Double_t xValue) const{
\r
136 //see header file for documentation
\r
137 TH1 *tmp = (TH1*)fHistogramMap->GetValue(histogramName.Data());
\r
143 void AliGammaConversionHistograms::FillHistogram(TString histogramName, Double_t xValue, Double_t yValue) const{
\r
144 //see header file for documentation
\r
145 TH1 *tmp = (TH1*)fHistogramMap->GetValue(histogramName.Data());
\r
147 tmp->Fill(xValue, yValue);
\r
151 void AliGammaConversionHistograms::GetOutputContainer(TList *fOutputContainer){
\r
152 //checking if the container is alrerady created
\r
154 if(fOutputContainer == NULL){
\r
159 if(fHistogramMap != NULL){
\r
160 TIter iter(fHistogramMap);
\r
161 TObjString *histogramName;
\r
162 while ((histogramName = (TObjString*) iter.Next())) {
\r
163 TString histogramString = histogramName->GetString();
\r
164 if(histogramString.Contains("Mapping")){// means it should be put in the mapping folder
\r
165 if(fMappingContainer == NULL){
\r
166 fMappingContainer = new TList();
\r
167 fMappingContainer->SetName("Mapping histograms");
\r
169 if(fMappingContainer != NULL){
\r
170 fMappingContainer->Add((TH1*)fHistogramMap->GetValue(histogramString.Data()));
\r
173 else if(histogramString.Contains("Background")){// means it should be put in the background folder
\r
174 if(fBackgroundContainer == NULL){
\r
175 fBackgroundContainer = new TList();
\r
176 fBackgroundContainer->SetName("Background histograms");
\r
178 if(fBackgroundContainer != NULL){
\r
179 fBackgroundContainer->Add((TH1*)fHistogramMap->GetValue(histogramString.Data()));
\r
182 else if(histogramString.Contains("Debug")){// means it should be put in the debug folder
\r
183 if(fDebugContainer == NULL){
\r
184 fDebugContainer = new TList();
\r
185 fDebugContainer->SetName("Debug histograms");
\r
187 if(fDebugContainer != NULL){
\r
188 fDebugContainer->Add((TH1*)fHistogramMap->GetValue(histogramString.Data()));
\r
191 else if(histogramString.Contains("Resolution")){// means it should be put in the resolution folder
\r
192 if(fResolutionContainer == NULL){
\r
193 fResolutionContainer = new TList();
\r
194 fResolutionContainer->SetName("Resolution histograms");
\r
196 if(fResolutionContainer != NULL){
\r
197 fResolutionContainer->Add((TH1*)fHistogramMap->GetValue(histogramString.Data()));
\r
200 else if(histogramString.Contains("Match")){// means it should be put in the mapping folder
\r
201 if(fMatchContainer == NULL){
\r
202 fMatchContainer = new TList();
\r
203 fMatchContainer->SetName("Match histograms");
\r
205 if(fMatchContainer != NULL){
\r
206 fMatchContainer->Add((TH1*)fHistogramMap->GetValue(histogramString.Data()));
\r
209 else if(histogramString.Contains("ESD")){// means it should be put in the ESD folder
\r
210 if(fESDContainer == NULL){
\r
211 fESDContainer = new TList();
\r
212 fESDContainer->SetName("ESD histograms");
\r
214 if(fESDContainer != NULL){
\r
215 fESDContainer->Add((TH1*)fHistogramMap->GetValue(histogramString.Data()));
\r
218 else if(histogramString.Contains("MC")){// means it should be put in the MC folder
\r
219 if(fMCContainer == NULL){
\r
220 fMCContainer = new TList();
\r
221 fMCContainer->SetName("MC histograms");
\r
223 if(fMCContainer != NULL){
\r
224 fMCContainer->Add((TH1*)fHistogramMap->GetValue(histogramString.Data()));
\r
227 else if(histogramString.Contains("Table")){// means it should be put in the Table Folder
\r
228 if(fTableContainer == NULL){
\r
229 fTableContainer = new TList();
\r
230 fTableContainer->SetName("Tables");
\r
232 if(fTableContainer != NULL){
\r
233 fTableContainer->Add((TH1*)fHistogramMap->GetValue(histogramString.Data()));
\r
237 if(fOtherContainer == NULL){
\r
238 fOtherContainer = new TList();
\r
239 fOtherContainer->SetName("Other histograms");
\r
241 if(fOtherContainer != NULL){
\r
242 fOtherContainer->Add((TH1*)fHistogramMap->GetValue(histogramString.Data()));
\r
245 histogramName = NULL;
\r
247 if(fMappingContainer != NULL){
\r
248 fOutputContainer->Add(fMappingContainer);
\r
250 if(fBackgroundContainer != NULL){
\r
251 fOutputContainer->Add(fBackgroundContainer);
\r
253 if(fDebugContainer != NULL){
\r
254 fOutputContainer->Add(fDebugContainer);
\r
256 if(fResolutionContainer != NULL){
\r
257 fOutputContainer->Add(fResolutionContainer);
\r
259 if(fMatchContainer != NULL){
\r
260 fOutputContainer->Add(fMatchContainer);
\r
262 if(fESDContainer != NULL){
\r
263 fOutputContainer->Add(fESDContainer);
\r
265 if(fMCContainer != NULL){
\r
266 fOutputContainer->Add(fMCContainer);
\r
268 if(fTableContainer != NULL){
\r
269 fOutputContainer->Add(fTableContainer);
\r
271 if(fOtherContainer != NULL){
\r
272 fOutputContainer->Add(fMCContainer);
\r
277 Int_t AliGammaConversionHistograms::GetRBin(Double_t radius) const{
\r
278 // see header file for documentation
\r
281 iResult = (Int_t)((radius - fMinRadius)/fDeltaR);
\r
286 Int_t AliGammaConversionHistograms::GetPhiBin(Double_t phi) const{
\r
287 // see header file for documentation
\r
290 if(phi>TMath::Pi()){
\r
291 phi-=2*TMath::Pi();
\r
293 iResult = (Int_t)((phi - fMinPhi)/fDeltaPhi);
\r
300 void AliGammaConversionHistograms::InitializeMappingValues(Int_t nPhiIndex, Int_t nRIndex, Int_t nBinsR, Double_t minRadius, Double_t maxRadius,Int_t nBinsPhi, Double_t minPhi, Double_t maxPhi){
\r
301 // Initializing the valuse for the mapping
\r
303 fNPhiIndex = nPhiIndex;
\r
304 fNRIndex = nRIndex;
\r
305 fMinRadius = minRadius;
\r
306 fMaxRadius = maxRadius;
\r
307 if(nBinsR>0 && nRIndex!=0){
\r
308 fDeltaR = (fMaxRadius - fMinRadius)/nRIndex;
\r
312 if(nBinsPhi>0 && nPhiIndex!=0){
\r
313 fDeltaPhi = (fMaxPhi-fMinPhi)/nPhiIndex;
\r
319 void AliGammaConversionHistograms::AddMappingHistograms(Int_t nPhiIndex, Int_t nRIndex,Int_t nXBins, Double_t firstX, Double_t lastX, Int_t nYBins, Double_t firstY, Double_t lastY, TString xAxisTitle, TString yAxisTitle){
\r
320 // see header file for documentation
\r
322 for(Int_t phi =0; phi<=fNPhiIndex;phi++){
\r
324 for(Int_t r =0; r<fNRIndex;r++){
\r
326 // setting axis to "" changes below
\r
329 //Creating the axis titles
\r
330 if(xAxisTitle.Length() == 0){
\r
331 xAxisTitle.Form("Phi %02d",phi);
\r
334 if(yAxisTitle.Length() == 0){
\r
335 yAxisTitle.Form("R %02d",phi);
\r
340 nameMC.Form("MC_Conversion_Mapping-Phi%02d-R%02d",phi,r);
\r
341 TString titleMC="";
\r
342 titleMC.Form("Electron-Positron MC Mapping-Phi%02d-R%02d",phi,r);
\r
344 AddHistogram(nameMC, titleMC, nXBins, firstX, lastX, nYBins, firstY, lastY, xAxisTitle, yAxisTitle);
\r
347 TString nameESD="";
\r
348 nameESD.Form("ESD_Conversion_Mapping-Phi%02d-R%02d",phi,r);
\r
349 TString titleESD="";
\r
350 titleESD.Form("Electron-Positron ESD Mapping-Phi%02d-R%02d",phi,r);
\r
352 AddHistogram(nameESD, titleESD, nXBins, firstX, lastX, nYBins, firstY, lastY, xAxisTitle, yAxisTitle);
\r
357 for(Int_t phi =0; phi<=nPhiIndex;phi++){
\r
359 // setting axis to "" changes below
\r
362 //Creating the axis titles
\r
363 if(xAxisTitle.Length() == 0){
\r
364 xAxisTitle.Form("Phi %02d",phi);
\r
366 if(yAxisTitle.Length() == 0){
\r
367 yAxisTitle = "Counts";
\r
372 nameMC.Form("MC_Conversion_Mapping-Phi%02d",phi);
\r
373 TString titleMC="";
\r
374 titleMC.Form("Electron-Positron MC Mapping-Phi%02d",phi);
\r
376 AddHistogram(nameMC, titleMC, nXBins, firstX, lastX, xAxisTitle, yAxisTitle);
\r
379 TString nameESD="";
\r
380 nameESD.Form("ESD_Conversion_Mapping-Phi%02d",phi);
\r
381 TString titleESD="";
\r
382 titleESD.Form("Electron-Positron ESD Mapping-Phi%02d",phi);
\r
384 AddHistogram(nameESD, titleESD, nXBins, firstX, lastX, xAxisTitle, yAxisTitle);
\r
388 for(Int_t r =0; r<=nRIndex;r++){
\r
390 // setting axis to "" changes below
\r
393 //Creating the axis titles
\r
394 if(xAxisTitle.Length() == 0){
\r
395 xAxisTitle.Form("R %02d",r);
\r
397 if(yAxisTitle.Length() == 0){
\r
398 yAxisTitle = "Counts";
\r
403 nameMC.Form("MC_Conversion_Mapping-R%02d",r);
\r
404 TString titleMC="";
\r
405 titleMC.Form("Electron-Positron MC Mapping-R%02d",r);
\r
407 AddHistogram(nameMC, titleMC, nXBins, firstX, lastX, xAxisTitle, yAxisTitle);
\r
410 TString nameESD="";
\r
411 nameESD.Form("ESD_Conversion_Mapping-R%02d",r);
\r
412 TString titleESD="";
\r
413 titleESD.Form("Electron-Positron ESD Mapping-R%02d",r);
\r
415 AddHistogram(nameESD, titleESD, nXBins, firstX, lastX, xAxisTitle, yAxisTitle);
\r
418 TString nameMCPhiInR="";
\r
419 nameMCPhiInR.Form("MC_Conversion_Mapping_Phi_R-%02d",r);
\r
420 TString titleMCPhiInR="";
\r
421 titleMCPhiInR.Form("MC Mapping of Phi in R%02d",r);
\r
422 AddHistogram(nameMCPhiInR, titleMCPhiInR, nXBins, firstX, lastX, xAxisTitle, yAxisTitle);
\r
425 TString nameESDPhiInR="";
\r
426 nameESDPhiInR.Form("ESD_Conversion_Mapping_Phi_R-%02d",r);
\r
427 TString titleESDPhiInR="";
\r
428 titleESDPhiInR.Form("ESD Mapping of Phi in R%02d",r);
\r
429 AddHistogram(nameESDPhiInR, titleESDPhiInR, nXBins, firstX, lastX, xAxisTitle, yAxisTitle);
\r