ROOT logo
/**************************************************************************
 * Copyright(c) 1998-2014, ALICE Experiment at CERN, All rights reserved. *
 *                                                                        *
 * Author: The ALICE Off-line Project.                                    *
 * Contributors are mentioned in the code where appropriate.              *
 *                                                                        *
 * Permission to use, copy, modify and distribute this software and its   *
 * documentation strictly for non-commercial purposes is hereby granted   *
 * without fee, provided that the above copyright notice appears in all   *
 * copies and that both the copyright notice and this permission notice   *
 * appear in the supporting documentation. The authors make no claims     *
 * about the suitability of this software for any purpose. It is          *
 * provided "as is" without express or implied warranty.                  *
 **************************************************************************/
/*
 * Global binning definition for the charged particle pt analysis
 *
 *   Author: Markus Fasel
 */
#include <iostream>

#include <TObjArray.h>
#include "AliEMCalTriggerBinningComponent.h"

ClassImp(EMCalTriggerPtAnalysis::AliEMCalTriggerBinningDimension)
ClassImp(EMCalTriggerPtAnalysis::AliEMCalTriggerBinningComponent)

namespace EMCalTriggerPtAnalysis {

//______________________________________________________________________________
AliEMCalTriggerBinningComponent::AliEMCalTriggerBinningComponent() :
  TObject(),
  fDimensions(NULL)
{
  /*
   * Main constructor
   */
  fDimensions = new TObjArray;
  fDimensions->SetOwner();
}

//______________________________________________________________________________
AliEMCalTriggerBinningComponent::AliEMCalTriggerBinningComponent(const AliEMCalTriggerBinningComponent& ref) :
  TObject(ref),
  fDimensions(NULL)
{
  /*
   * Copy constructor, creating a deep copy
   */
  fDimensions = new TObjArray;
  fDimensions->SetOwner();
  TIter dimIter(ref.fDimensions);
  AliEMCalTriggerBinningDimension *dim(NULL);
  while((dim = dynamic_cast<AliEMCalTriggerBinningDimension *>(dimIter())))
    fDimensions->Add(new AliEMCalTriggerBinningDimension(*dim));
}

//______________________________________________________________________________
AliEMCalTriggerBinningComponent& AliEMCalTriggerBinningComponent::operator=(const AliEMCalTriggerBinningComponent& ref) {
  /*
   * Assignment operator, doing a deep copy
   */
  TObject::operator=(ref);
  if(&ref != this){
    this->~AliEMCalTriggerBinningComponent();

    fDimensions = new TObjArray;
    fDimensions->SetOwner();
    TIter dimIter(ref.fDimensions);
    AliEMCalTriggerBinningDimension *dim(NULL);
    while((dim = dynamic_cast<AliEMCalTriggerBinningDimension *>(dimIter())))
      fDimensions->Add(new AliEMCalTriggerBinningDimension(*dim));
  }
  return *this;
}

//______________________________________________________________________________
AliEMCalTriggerBinningComponent::~AliEMCalTriggerBinningComponent() {
  /*
   * Destructor
   */
  delete fDimensions;
}

//______________________________________________________________________________
AliEMCalTriggerBinningDimension* AliEMCalTriggerBinningComponent::GetBinning(const char* name) const {
  /*
   * Get binning information for a given axis. Return nullpointer if axis is not yet defined
   *
   * @param name: axis name
   * @return: the axis information
   */
  return dynamic_cast<AliEMCalTriggerBinningDimension *>(fDimensions->FindObject(name));
}

//______________________________________________________________________________
void AliEMCalTriggerBinningComponent::SetBinning(const char* dimname, int nbins, double* binning) {
  /*
   * Set binning for dimension. If not yet existing, create it
   *
   * @param dimname: axis name
   * @param nbins: Number of bins
   * @param binning: array of bin limits (size nbins+1)
   */
  AliEMCalTriggerBinningDimension *dim = GetBinning(dimname);
  if(dim) dim->Set(nbins, binning);
  else {
    dim = new AliEMCalTriggerBinningDimension(dimname, nbins, binning);
    fDimensions->Add(dim);
  }
}

//______________________________________________________________________________
void AliEMCalTriggerBinningComponent::SetBinning(const char* dimname, const TArrayD& binning) {
  /*
   * Set binning for dimension. If not yet existing, create it
   *
   * @param dimname: axis name
   * @param nbins: Number of bins
   * @param binning: array of bin limits (size nbins+1)
   */
  AliEMCalTriggerBinningDimension *dim = GetBinning(dimname);
  if(dim) dim->Set(binning);
  else {
    dim = new AliEMCalTriggerBinningDimension(dimname, binning);
    fDimensions->Add(dim);
  }
}

//______________________________________________________________________________
void AliEMCalTriggerBinningDimension::Print(Option_t * /*option*/) const {
  /*
   * Print the bin limits for a given dimension
   */
  std::cout << "Binning for variable " << GetName() << ":" << std::endl;
  std::cout << "================================================" << std::endl;
  for(int ilim = 0; ilim < fBinning.GetSize(); ilim++){
    std::cout << fBinning[ilim];
    if(ilim < fBinning.GetSize() -1) std::cout << ", ";
  }
  std::cout << std::endl;
}


} /* namespace EMCalTriggerPtAnalysis */

 AliEMCalTriggerBinningComponent.cxx:1
 AliEMCalTriggerBinningComponent.cxx:2
 AliEMCalTriggerBinningComponent.cxx:3
 AliEMCalTriggerBinningComponent.cxx:4
 AliEMCalTriggerBinningComponent.cxx:5
 AliEMCalTriggerBinningComponent.cxx:6
 AliEMCalTriggerBinningComponent.cxx:7
 AliEMCalTriggerBinningComponent.cxx:8
 AliEMCalTriggerBinningComponent.cxx:9
 AliEMCalTriggerBinningComponent.cxx:10
 AliEMCalTriggerBinningComponent.cxx:11
 AliEMCalTriggerBinningComponent.cxx:12
 AliEMCalTriggerBinningComponent.cxx:13
 AliEMCalTriggerBinningComponent.cxx:14
 AliEMCalTriggerBinningComponent.cxx:15
 AliEMCalTriggerBinningComponent.cxx:16
 AliEMCalTriggerBinningComponent.cxx:17
 AliEMCalTriggerBinningComponent.cxx:18
 AliEMCalTriggerBinningComponent.cxx:19
 AliEMCalTriggerBinningComponent.cxx:20
 AliEMCalTriggerBinningComponent.cxx:21
 AliEMCalTriggerBinningComponent.cxx:22
 AliEMCalTriggerBinningComponent.cxx:23
 AliEMCalTriggerBinningComponent.cxx:24
 AliEMCalTriggerBinningComponent.cxx:25
 AliEMCalTriggerBinningComponent.cxx:26
 AliEMCalTriggerBinningComponent.cxx:27
 AliEMCalTriggerBinningComponent.cxx:28
 AliEMCalTriggerBinningComponent.cxx:29
 AliEMCalTriggerBinningComponent.cxx:30
 AliEMCalTriggerBinningComponent.cxx:31
 AliEMCalTriggerBinningComponent.cxx:32
 AliEMCalTriggerBinningComponent.cxx:33
 AliEMCalTriggerBinningComponent.cxx:34
 AliEMCalTriggerBinningComponent.cxx:35
 AliEMCalTriggerBinningComponent.cxx:36
 AliEMCalTriggerBinningComponent.cxx:37
 AliEMCalTriggerBinningComponent.cxx:38
 AliEMCalTriggerBinningComponent.cxx:39
 AliEMCalTriggerBinningComponent.cxx:40
 AliEMCalTriggerBinningComponent.cxx:41
 AliEMCalTriggerBinningComponent.cxx:42
 AliEMCalTriggerBinningComponent.cxx:43
 AliEMCalTriggerBinningComponent.cxx:44
 AliEMCalTriggerBinningComponent.cxx:45
 AliEMCalTriggerBinningComponent.cxx:46
 AliEMCalTriggerBinningComponent.cxx:47
 AliEMCalTriggerBinningComponent.cxx:48
 AliEMCalTriggerBinningComponent.cxx:49
 AliEMCalTriggerBinningComponent.cxx:50
 AliEMCalTriggerBinningComponent.cxx:51
 AliEMCalTriggerBinningComponent.cxx:52
 AliEMCalTriggerBinningComponent.cxx:53
 AliEMCalTriggerBinningComponent.cxx:54
 AliEMCalTriggerBinningComponent.cxx:55
 AliEMCalTriggerBinningComponent.cxx:56
 AliEMCalTriggerBinningComponent.cxx:57
 AliEMCalTriggerBinningComponent.cxx:58
 AliEMCalTriggerBinningComponent.cxx:59
 AliEMCalTriggerBinningComponent.cxx:60
 AliEMCalTriggerBinningComponent.cxx:61
 AliEMCalTriggerBinningComponent.cxx:62
 AliEMCalTriggerBinningComponent.cxx:63
 AliEMCalTriggerBinningComponent.cxx:64
 AliEMCalTriggerBinningComponent.cxx:65
 AliEMCalTriggerBinningComponent.cxx:66
 AliEMCalTriggerBinningComponent.cxx:67
 AliEMCalTriggerBinningComponent.cxx:68
 AliEMCalTriggerBinningComponent.cxx:69
 AliEMCalTriggerBinningComponent.cxx:70
 AliEMCalTriggerBinningComponent.cxx:71
 AliEMCalTriggerBinningComponent.cxx:72
 AliEMCalTriggerBinningComponent.cxx:73
 AliEMCalTriggerBinningComponent.cxx:74
 AliEMCalTriggerBinningComponent.cxx:75
 AliEMCalTriggerBinningComponent.cxx:76
 AliEMCalTriggerBinningComponent.cxx:77
 AliEMCalTriggerBinningComponent.cxx:78
 AliEMCalTriggerBinningComponent.cxx:79
 AliEMCalTriggerBinningComponent.cxx:80
 AliEMCalTriggerBinningComponent.cxx:81
 AliEMCalTriggerBinningComponent.cxx:82
 AliEMCalTriggerBinningComponent.cxx:83
 AliEMCalTriggerBinningComponent.cxx:84
 AliEMCalTriggerBinningComponent.cxx:85
 AliEMCalTriggerBinningComponent.cxx:86
 AliEMCalTriggerBinningComponent.cxx:87
 AliEMCalTriggerBinningComponent.cxx:88
 AliEMCalTriggerBinningComponent.cxx:89
 AliEMCalTriggerBinningComponent.cxx:90
 AliEMCalTriggerBinningComponent.cxx:91
 AliEMCalTriggerBinningComponent.cxx:92
 AliEMCalTriggerBinningComponent.cxx:93
 AliEMCalTriggerBinningComponent.cxx:94
 AliEMCalTriggerBinningComponent.cxx:95
 AliEMCalTriggerBinningComponent.cxx:96
 AliEMCalTriggerBinningComponent.cxx:97
 AliEMCalTriggerBinningComponent.cxx:98
 AliEMCalTriggerBinningComponent.cxx:99
 AliEMCalTriggerBinningComponent.cxx:100
 AliEMCalTriggerBinningComponent.cxx:101
 AliEMCalTriggerBinningComponent.cxx:102
 AliEMCalTriggerBinningComponent.cxx:103
 AliEMCalTriggerBinningComponent.cxx:104
 AliEMCalTriggerBinningComponent.cxx:105
 AliEMCalTriggerBinningComponent.cxx:106
 AliEMCalTriggerBinningComponent.cxx:107
 AliEMCalTriggerBinningComponent.cxx:108
 AliEMCalTriggerBinningComponent.cxx:109
 AliEMCalTriggerBinningComponent.cxx:110
 AliEMCalTriggerBinningComponent.cxx:111
 AliEMCalTriggerBinningComponent.cxx:112
 AliEMCalTriggerBinningComponent.cxx:113
 AliEMCalTriggerBinningComponent.cxx:114
 AliEMCalTriggerBinningComponent.cxx:115
 AliEMCalTriggerBinningComponent.cxx:116
 AliEMCalTriggerBinningComponent.cxx:117
 AliEMCalTriggerBinningComponent.cxx:118
 AliEMCalTriggerBinningComponent.cxx:119
 AliEMCalTriggerBinningComponent.cxx:120
 AliEMCalTriggerBinningComponent.cxx:121
 AliEMCalTriggerBinningComponent.cxx:122
 AliEMCalTriggerBinningComponent.cxx:123
 AliEMCalTriggerBinningComponent.cxx:124
 AliEMCalTriggerBinningComponent.cxx:125
 AliEMCalTriggerBinningComponent.cxx:126
 AliEMCalTriggerBinningComponent.cxx:127
 AliEMCalTriggerBinningComponent.cxx:128
 AliEMCalTriggerBinningComponent.cxx:129
 AliEMCalTriggerBinningComponent.cxx:130
 AliEMCalTriggerBinningComponent.cxx:131
 AliEMCalTriggerBinningComponent.cxx:132
 AliEMCalTriggerBinningComponent.cxx:133
 AliEMCalTriggerBinningComponent.cxx:134
 AliEMCalTriggerBinningComponent.cxx:135
 AliEMCalTriggerBinningComponent.cxx:136
 AliEMCalTriggerBinningComponent.cxx:137
 AliEMCalTriggerBinningComponent.cxx:138
 AliEMCalTriggerBinningComponent.cxx:139
 AliEMCalTriggerBinningComponent.cxx:140
 AliEMCalTriggerBinningComponent.cxx:141
 AliEMCalTriggerBinningComponent.cxx:142
 AliEMCalTriggerBinningComponent.cxx:143
 AliEMCalTriggerBinningComponent.cxx:144
 AliEMCalTriggerBinningComponent.cxx:145
 AliEMCalTriggerBinningComponent.cxx:146