ROOT logo
#ifndef ALIDIELECTRONSPECTRUM_H
#define ALIDIELECTRONSPECTRUM_H

/* Copyright(c) 1998-2009, ALICE Experiment at CERN, All rights reserved. *
 * See cxx source for full Copyright notice                               */

//#############################################################
//#                                                           # 
//#         Class AliDielectronSpectrum                       #
//#         Manage Cuts on the legs of the pair               #
//#                                                           #
//#  Authors:                                                 #
//#   Anton     Andronic, GSI / A.Andronic@gsi.de             #
//#   Ionut C.  Arsene,   GSI / I.C.Arsene@gsi.de             #
//#   Julian    Book,     Uni Ffm / Julian.Book@cern.ch       #
//#   Frederick Kramer,   Uni Ffm, / Frederick.Kramer@cern.ch #
//#   Magnus    Mager,    CERN / Magnus.Mager@cern.ch         #
//#   WooJin J. Park,     GSI / W.J.Park@gsi.de               #
//#   Jens      Wiechula, Uni HD / Jens.Wiechula@cern.ch      #
//#                                                           #
//#############################################################

#include <TObjArray.h>
#include <TString.h>

#include <TNamed.h>

class AliCFGridSparse;
class AliDielectronSignalBase;
class AliCFGridSparse;
class AliCFContainer;

class AliDielectronSpectrum : public TNamed {
public:
  AliDielectronSpectrum();
  AliDielectronSpectrum(const char*name, const char* title);

  virtual ~AliDielectronSpectrum();
  
  void AddMethod(AliDielectronSignalBase * const method) {fSignalMethods.Add(method);}

  void SetCorrectionContainer(AliCFContainer * const container, Int_t nominator, Int_t denominator);
  void SetSignalContainer(AliCFContainer * const container, Int_t step);
  
  void SetVariables(const char* vars)   { fVariables=vars; }

  void SetStepForSignal(Bool_t step=kTRUE)       { fStepSignal=step;       }
  void SetStepForSignificance(Bool_t step=kTRUE) { fStepSignificance=step; }
  void SetStepForSignalOverBackground(Bool_t step=kTRUE) { fStepSOB=step;  }
  void SetStepForMass(Bool_t step=kTRUE)         { fStepMass=step;         }
  void SetStepForMassWidth(Bool_t step=kTRUE)    { fStepMassWidth=step;    }
  
  void SetNoOwnerSpectrum(Bool_t noOwner=kTRUE) { fOwnerSpectrum=!noOwner; }

  void SetVisualDebug(Bool_t vis=kTRUE) { fVisualDebug=vis; }
  
  AliCFContainer* GetSpectrumContainer() const { return fCFSpectrum;   }
  AliCFGridSparse* GetCorrectionMatrix() const { return fCFCorrMatrix; }
  
  void Process();


private:
  AliCFContainer  *fCFSignal;               // CF container with from which to extract the Signal
  AliCFContainer  *fCFCorrection;           // CF container from which to extract the correction matrix
  AliCFContainer  *fCFSpectrum;             // CF container with extracted signal
  AliCFGridSparse *fCFCorrMatrix;           // correction matrix

  Bool_t fStepSignal;                       // if to create a step for the signal
  Bool_t fStepSignificance;                 // if to create a step for the significance
  Bool_t fStepSOB;                          // if to create a step for signal over background
  Bool_t fStepMass;                         // if to create a setp for the mass
  Bool_t fStepMassWidth;                    // if to create a setp for the mass width
  
  Int_t fSignalStep;                        // step to use from the signal container
  
  Int_t fCorrNom;                           // Nominator to use from corr matrix container
  Int_t fCorrDenom;                         // Deominator to use from corr matrix container
  
  TObjArray    fSignalMethods;              // array with signal extraction methods
  TString      fVariables;                  // variable names as a function of which to extract the signal

  Bool_t fOwnerSpectrum;                    // if we own the creted spectrum

  Bool_t fVisualDebug;                      // if we want to show the fit and print it
  
  Int_t        fNvars;                      //! number of variables
  Int_t        *fVars;                      //! variable numbers translated from fVariables
  Int_t        *fNbins;                     //! number of bins for each variable
  Int_t        *fCurrentBins;               //! bin currently selected for each variable
  Double_t     *fCurrentPositions;          //! variables values currently selected
  
  void Fill(Int_t *bin, Int_t step, Double_t value, Double_t error);
  Bool_t SetupVariables();
  void CreateCorrectionMatrix();
  void CreateCFSpectrum();
  void ExtractSignalInBins(Int_t variable=0);
  
  AliDielectronSpectrum(const AliDielectronSpectrum &c);
  AliDielectronSpectrum &operator=(const AliDielectronSpectrum &c);
  
  ClassDef(AliDielectronSpectrum,1)         //Cut class providing cuts for both legs of a pair
    
};

//
// inline functions
//
inline void AliDielectronSpectrum::SetCorrectionContainer(AliCFContainer * const container, Int_t nominator, Int_t denominator)
{
  fCFCorrection=container;
  fCorrNom=nominator;
  fCorrDenom=denominator;
}

inline void AliDielectronSpectrum::SetSignalContainer(AliCFContainer * const container, Int_t step)
{
  fCFSignal=container;
  fSignalStep=step;
}

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