ROOT logo
/**************************************************************************
 * Copyright(c) 1998-1999, 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.                  *
 **************************************************************************/

////////////////////////////////////////////////////////////////////////////////
//
//  This class contains all code which is used to compute any of the values
//  which can be of interest within a resonance analysis. Besides the obvious
//  invariant mass, it allows to compute other utility values on all possible
//  targets, in order to allow a wide spectrum of binning and checks.
//  When needed, this object can also define a binning in the variable which
//  it is required to compute, which is used for initializing axes of output
//  histograms (see AliRsnFunction).
//  The value computation requires this object to be passed the object whose
//  informations will be used. This object can be of any allowed input type
//  (track, pair, event), then this class must inherit from AliRsnTarget.
//  Then, when value computation is attempted, a check on target type is done
//  and computation is successful only if expected target matches that of the
//  passed object.
//  In some cases, the value computation can require a support external object,
//  which must then be passed to this class. It can be of any type inheriting
//  from TObject.
//
//  authors: A. Pulvirenti (alberto.pulvirenti@ct.infn.it)
//           M. Vala (martin.vala@cern.ch)
//
////////////////////////////////////////////////////////////////////////////////

#include "AliESDtrackCuts.h"
#include "AliESDpid.h"
#include "AliAODPid.h"
#include "AliCentrality.h"

#include "AliRsnEvent.h"
#include "AliRsnDaughter.h"
#include "AliRsnMother.h"
#include "AliRsnPairDef.h"
#include "AliRsnDaughterDef.h"

#include "AliRsnValue.h"

ClassImp(AliRsnValue)

//_____________________________________________________________________________
AliRsnValue::AliRsnValue(const char *name, AliRsnTarget::ETargetType type) :
   AliRsnTarget(name, type),
   fUseMCInfo(kFALSE),
   fComputedValue(0.0),
   fBinArray(0)
{
//
// Constructor.
// Initializes the binning to an empty array.
//
}

//_____________________________________________________________________________
AliRsnValue::AliRsnValue(const AliRsnValue &copy) :
   AliRsnTarget(copy),
   fUseMCInfo(copy.fUseMCInfo),
   fComputedValue(copy.fComputedValue),
   fBinArray(copy.fBinArray)
{
//
// Copy constructor.
// Duplicates the binning array and copies all settings.
//
}

//_____________________________________________________________________________
AliRsnValue &AliRsnValue::operator=(const AliRsnValue &copy)
{
//
// Assignment operator.
// Works like copy constructor.
//

   AliRsnTarget::operator=(copy);
   if (this == &copy)
      return *this;
   fUseMCInfo = copy.fUseMCInfo;
   fComputedValue = copy.fComputedValue;
   fBinArray = copy.fBinArray;

   return (*this);
}

//_____________________________________________________________________________
void AliRsnValue::SetBins(Int_t nbins, Double_t min, Double_t max)
{
//
// Set binning for the axis in equally spaced bins
// where the number of bins, minimum and maximum are given.
//

   if (!nbins) {
      fBinArray.Set(0);
      return;
   }

   fBinArray.Set(nbins + 1);

   Double_t mymax = TMath::Max(min, max);
   Double_t mymin = TMath::Min(min, max);

   Int_t    k = 0;
   Double_t binSize = (mymax - mymin) / ((Double_t)nbins);

   fBinArray[0] = mymin;
   for (k = 1; k <= nbins; k++) fBinArray[k] = fBinArray[k - 1] + binSize;
}

//_____________________________________________________________________________
void AliRsnValue::SetBins(Double_t min, Double_t max, Double_t step)
{
//
// Set binning for the axis in equally spaced bins
// where the bin size, minimum and maximum are given.
//

   Double_t dblNbins = TMath::Abs(max - min) / step;
   Int_t    intNbins = (Int_t) (dblNbins + 0.5);

   SetBins(intNbins, min, max);
}

//_____________________________________________________________________________
void AliRsnValue::SetBins(Int_t nbins, Double_t *array)
{
//
// Set binning for the axis in unequally spaced bins
// using the same way it is done in TAxis
//

   if (!nbins) {
      fBinArray.Set(0);
      return;
   }

   Int_t i;
   fBinArray.Set(nbins);
   for (i = 0; i < nbins; i++) fBinArray[i] = array[i];
}

//_____________________________________________________________________________
Bool_t AliRsnValue::Eval(TObject *)
{
//
// Evaluation of the required value.
// Checks that the passed object is of the right type
// and if this check is successful, computes the required value.
// The output of the function tells if computing was successful,
// and the values must be taken with GetValue().
//

   AliWarning("This method must be overridden by derived classes");
   return kTRUE;
}

//_____________________________________________________________________________
void AliRsnValue::Print(Option_t *option) const
{
//
// Print informations about this object.
// If one specifies option "BINS" all bin limits are also printed.
//

   AliInfo("=== VALUE INFO =================================================");
   AliInfo(Form(" Name                  : %s", GetName()));
   AliInfo(Form(" Current computed value: %f", fComputedValue));
   if (!strcmp(option, "BINS")) {
      Int_t i;
      for (i = 0; i < fBinArray.GetSize(); i++) {
         AliInfo(Form(" Bin limit #%03d        = %f", i, fBinArray[i]));
      }
   }
}
 AliRsnValue.cxx:1
 AliRsnValue.cxx:2
 AliRsnValue.cxx:3
 AliRsnValue.cxx:4
 AliRsnValue.cxx:5
 AliRsnValue.cxx:6
 AliRsnValue.cxx:7
 AliRsnValue.cxx:8
 AliRsnValue.cxx:9
 AliRsnValue.cxx:10
 AliRsnValue.cxx:11
 AliRsnValue.cxx:12
 AliRsnValue.cxx:13
 AliRsnValue.cxx:14
 AliRsnValue.cxx:15
 AliRsnValue.cxx:16
 AliRsnValue.cxx:17
 AliRsnValue.cxx:18
 AliRsnValue.cxx:19
 AliRsnValue.cxx:20
 AliRsnValue.cxx:21
 AliRsnValue.cxx:22
 AliRsnValue.cxx:23
 AliRsnValue.cxx:24
 AliRsnValue.cxx:25
 AliRsnValue.cxx:26
 AliRsnValue.cxx:27
 AliRsnValue.cxx:28
 AliRsnValue.cxx:29
 AliRsnValue.cxx:30
 AliRsnValue.cxx:31
 AliRsnValue.cxx:32
 AliRsnValue.cxx:33
 AliRsnValue.cxx:34
 AliRsnValue.cxx:35
 AliRsnValue.cxx:36
 AliRsnValue.cxx:37
 AliRsnValue.cxx:38
 AliRsnValue.cxx:39
 AliRsnValue.cxx:40
 AliRsnValue.cxx:41
 AliRsnValue.cxx:42
 AliRsnValue.cxx:43
 AliRsnValue.cxx:44
 AliRsnValue.cxx:45
 AliRsnValue.cxx:46
 AliRsnValue.cxx:47
 AliRsnValue.cxx:48
 AliRsnValue.cxx:49
 AliRsnValue.cxx:50
 AliRsnValue.cxx:51
 AliRsnValue.cxx:52
 AliRsnValue.cxx:53
 AliRsnValue.cxx:54
 AliRsnValue.cxx:55
 AliRsnValue.cxx:56
 AliRsnValue.cxx:57
 AliRsnValue.cxx:58
 AliRsnValue.cxx:59
 AliRsnValue.cxx:60
 AliRsnValue.cxx:61
 AliRsnValue.cxx:62
 AliRsnValue.cxx:63
 AliRsnValue.cxx:64
 AliRsnValue.cxx:65
 AliRsnValue.cxx:66
 AliRsnValue.cxx:67
 AliRsnValue.cxx:68
 AliRsnValue.cxx:69
 AliRsnValue.cxx:70
 AliRsnValue.cxx:71
 AliRsnValue.cxx:72
 AliRsnValue.cxx:73
 AliRsnValue.cxx:74
 AliRsnValue.cxx:75
 AliRsnValue.cxx:76
 AliRsnValue.cxx:77
 AliRsnValue.cxx:78
 AliRsnValue.cxx:79
 AliRsnValue.cxx:80
 AliRsnValue.cxx:81
 AliRsnValue.cxx:82
 AliRsnValue.cxx:83
 AliRsnValue.cxx:84
 AliRsnValue.cxx:85
 AliRsnValue.cxx:86
 AliRsnValue.cxx:87
 AliRsnValue.cxx:88
 AliRsnValue.cxx:89
 AliRsnValue.cxx:90
 AliRsnValue.cxx:91
 AliRsnValue.cxx:92
 AliRsnValue.cxx:93
 AliRsnValue.cxx:94
 AliRsnValue.cxx:95
 AliRsnValue.cxx:96
 AliRsnValue.cxx:97
 AliRsnValue.cxx:98
 AliRsnValue.cxx:99
 AliRsnValue.cxx:100
 AliRsnValue.cxx:101
 AliRsnValue.cxx:102
 AliRsnValue.cxx:103
 AliRsnValue.cxx:104
 AliRsnValue.cxx:105
 AliRsnValue.cxx:106
 AliRsnValue.cxx:107
 AliRsnValue.cxx:108
 AliRsnValue.cxx:109
 AliRsnValue.cxx:110
 AliRsnValue.cxx:111
 AliRsnValue.cxx:112
 AliRsnValue.cxx:113
 AliRsnValue.cxx:114
 AliRsnValue.cxx:115
 AliRsnValue.cxx:116
 AliRsnValue.cxx:117
 AliRsnValue.cxx:118
 AliRsnValue.cxx:119
 AliRsnValue.cxx:120
 AliRsnValue.cxx:121
 AliRsnValue.cxx:122
 AliRsnValue.cxx:123
 AliRsnValue.cxx:124
 AliRsnValue.cxx:125
 AliRsnValue.cxx:126
 AliRsnValue.cxx:127
 AliRsnValue.cxx:128
 AliRsnValue.cxx:129
 AliRsnValue.cxx:130
 AliRsnValue.cxx:131
 AliRsnValue.cxx:132
 AliRsnValue.cxx:133
 AliRsnValue.cxx:134
 AliRsnValue.cxx:135
 AliRsnValue.cxx:136
 AliRsnValue.cxx:137
 AliRsnValue.cxx:138
 AliRsnValue.cxx:139
 AliRsnValue.cxx:140
 AliRsnValue.cxx:141
 AliRsnValue.cxx:142
 AliRsnValue.cxx:143
 AliRsnValue.cxx:144
 AliRsnValue.cxx:145
 AliRsnValue.cxx:146
 AliRsnValue.cxx:147
 AliRsnValue.cxx:148
 AliRsnValue.cxx:149
 AliRsnValue.cxx:150
 AliRsnValue.cxx:151
 AliRsnValue.cxx:152
 AliRsnValue.cxx:153
 AliRsnValue.cxx:154
 AliRsnValue.cxx:155
 AliRsnValue.cxx:156
 AliRsnValue.cxx:157
 AliRsnValue.cxx:158
 AliRsnValue.cxx:159
 AliRsnValue.cxx:160
 AliRsnValue.cxx:161
 AliRsnValue.cxx:162
 AliRsnValue.cxx:163
 AliRsnValue.cxx:164
 AliRsnValue.cxx:165
 AliRsnValue.cxx:166
 AliRsnValue.cxx:167
 AliRsnValue.cxx:168
 AliRsnValue.cxx:169
 AliRsnValue.cxx:170
 AliRsnValue.cxx:171
 AliRsnValue.cxx:172
 AliRsnValue.cxx:173
 AliRsnValue.cxx:174
 AliRsnValue.cxx:175
 AliRsnValue.cxx:176
 AliRsnValue.cxx:177
 AliRsnValue.cxx:178
 AliRsnValue.cxx:179
 AliRsnValue.cxx:180
 AliRsnValue.cxx:181
 AliRsnValue.cxx:182
 AliRsnValue.cxx:183
 AliRsnValue.cxx:184
 AliRsnValue.cxx:185
 AliRsnValue.cxx:186
 AliRsnValue.cxx:187
 AliRsnValue.cxx:188