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