ROOT logo
#ifndef ALIDIELECTRONSIGNALFUNC_H
#define ALIDIELECTRONSIGNALFUNC_H

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

//#############################################################
//#                                                           # 
//#         Class AliDielectronSignalFunc                     #
//#                                                           #
//#  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 <TVectorT.h>
#include <TString.h>
#include <TH1F.h>

#include "AliDielectronSignalExt.h"

class AliDielectronSignalFunc : public AliDielectronSignalExt {
public:
  AliDielectronSignalFunc();
  AliDielectronSignalFunc(const char*name, const char* title);
  AliDielectronSignalFunc(const AliDielectronSignalFunc &c);
  AliDielectronSignalFunc &operator=(const AliDielectronSignalFunc &c);

  virtual ~AliDielectronSignalFunc();

  virtual void Process(TObjArray * const arrhist);
  void ProcessFit(TObjArray * const arrhist);      // fit the SE +- distribution
  void ProcessFitLS(TObjArray * const arrhist);       // substract the fitted SE like-sign background
  void ProcessFitEM(TObjArray * const arrhist);       // substract the fitted SE+ME like-sign background

  //  void SetMCSignalShape(TH1F* hist) { fgHistSimPM=hist; }
  void SetUseIntegral(Bool_t flag=kTRUE) {fUseIntegral = flag;};
  void SetFunctions(TF1 * const combined, TF1 * const sig=0, TF1 * const back=0, Int_t parM=1, Int_t parMres=2);
  void CombineFunc(TF1 * const peak=0, TF1 * const bgnd=0);
  void SetFitOption(const char* opt) {
    fFitOpt=opt; 
    fFitOpt.ToLower(); 
    if(!fFitOpt.Contains("s")) fFitOpt += "s";
  }
  void SetDefaults(Int_t type);
    
  TF1*  GetSignalFunction()     const { return fFuncSignal;        }
  TF1*  GetBackgroundFunction() const { return fFuncBackground;    }
  TF1*  GetCombinedFunction()   const { return fFuncSigBack;       }
  
  //  Int_t GetPolDeg()             const { return fPolDeg;            }
  Int_t GetDof()                const { return fDof;            }
  Double_t GetChi2Dof()         const { return fChi2Dof;           }
  
  virtual void Draw(const Option_t* option = "");

  // peak functions
  static Double_t PeakFunMC(const Double_t *x, const Double_t *par); // peak function from a mc histo
  static Double_t PeakFunCB(const Double_t *x, const Double_t *par); // crystal ball function
  static Double_t PeakFunGaus(const Double_t *x, const Double_t *par); // gaussian

protected:

  static Double_t PeakBgndFun(const Double_t *x, const Double_t *par); // combine any bgrd and any peak function

  static TF1 *fFuncSignal;                // Function for the signal description
  static TF1 *fFuncBackground;            // Function for the background description
  TF1 *fFuncSigBack;               // Combined function signal plus background
  Int_t fParMass;                  // the index of the parameter corresponding to the resonance mass
  Int_t fParMassWidth;             // the index of the parameter corresponding to the resonance mass width
  
  TString fFitOpt;             // fit option used
  Bool_t fUseIntegral;         // use the integral of the fitted functions to extract signal and background

  //  Int_t    fPolDeg;                // polynomial degree of the background function
  Int_t    fDof;                   // degrees of freedom
  Double_t fChi2Dof;               // chi2/dof of the fitted inv mass spectra
  
  static Int_t    fNparPeak;              // number of parameters for peak function
  static Int_t    fNparBgnd;              // number of parameters for background function

  //  static TH1F* fgHistSimPM;         // simulated peak shape
  
  ClassDef(AliDielectronSignalFunc,3)         // class for signal extraction using a combined bgrd+signal fit
};

#endif
 AliDielectronSignalFunc.h:1
 AliDielectronSignalFunc.h:2
 AliDielectronSignalFunc.h:3
 AliDielectronSignalFunc.h:4
 AliDielectronSignalFunc.h:5
 AliDielectronSignalFunc.h:6
 AliDielectronSignalFunc.h:7
 AliDielectronSignalFunc.h:8
 AliDielectronSignalFunc.h:9
 AliDielectronSignalFunc.h:10
 AliDielectronSignalFunc.h:11
 AliDielectronSignalFunc.h:12
 AliDielectronSignalFunc.h:13
 AliDielectronSignalFunc.h:14
 AliDielectronSignalFunc.h:15
 AliDielectronSignalFunc.h:16
 AliDielectronSignalFunc.h:17
 AliDielectronSignalFunc.h:18
 AliDielectronSignalFunc.h:19
 AliDielectronSignalFunc.h:20
 AliDielectronSignalFunc.h:21
 AliDielectronSignalFunc.h:22
 AliDielectronSignalFunc.h:23
 AliDielectronSignalFunc.h:24
 AliDielectronSignalFunc.h:25
 AliDielectronSignalFunc.h:26
 AliDielectronSignalFunc.h:27
 AliDielectronSignalFunc.h:28
 AliDielectronSignalFunc.h:29
 AliDielectronSignalFunc.h:30
 AliDielectronSignalFunc.h:31
 AliDielectronSignalFunc.h:32
 AliDielectronSignalFunc.h:33
 AliDielectronSignalFunc.h:34
 AliDielectronSignalFunc.h:35
 AliDielectronSignalFunc.h:36
 AliDielectronSignalFunc.h:37
 AliDielectronSignalFunc.h:38
 AliDielectronSignalFunc.h:39
 AliDielectronSignalFunc.h:40
 AliDielectronSignalFunc.h:41
 AliDielectronSignalFunc.h:42
 AliDielectronSignalFunc.h:43
 AliDielectronSignalFunc.h:44
 AliDielectronSignalFunc.h:45
 AliDielectronSignalFunc.h:46
 AliDielectronSignalFunc.h:47
 AliDielectronSignalFunc.h:48
 AliDielectronSignalFunc.h:49
 AliDielectronSignalFunc.h:50
 AliDielectronSignalFunc.h:51
 AliDielectronSignalFunc.h:52
 AliDielectronSignalFunc.h:53
 AliDielectronSignalFunc.h:54
 AliDielectronSignalFunc.h:55
 AliDielectronSignalFunc.h:56
 AliDielectronSignalFunc.h:57
 AliDielectronSignalFunc.h:58
 AliDielectronSignalFunc.h:59
 AliDielectronSignalFunc.h:60
 AliDielectronSignalFunc.h:61
 AliDielectronSignalFunc.h:62
 AliDielectronSignalFunc.h:63
 AliDielectronSignalFunc.h:64
 AliDielectronSignalFunc.h:65
 AliDielectronSignalFunc.h:66
 AliDielectronSignalFunc.h:67
 AliDielectronSignalFunc.h:68
 AliDielectronSignalFunc.h:69
 AliDielectronSignalFunc.h:70
 AliDielectronSignalFunc.h:71
 AliDielectronSignalFunc.h:72
 AliDielectronSignalFunc.h:73
 AliDielectronSignalFunc.h:74
 AliDielectronSignalFunc.h:75
 AliDielectronSignalFunc.h:76
 AliDielectronSignalFunc.h:77
 AliDielectronSignalFunc.h:78
 AliDielectronSignalFunc.h:79
 AliDielectronSignalFunc.h:80
 AliDielectronSignalFunc.h:81
 AliDielectronSignalFunc.h:82
 AliDielectronSignalFunc.h:83
 AliDielectronSignalFunc.h:84
 AliDielectronSignalFunc.h:85
 AliDielectronSignalFunc.h:86
 AliDielectronSignalFunc.h:87
 AliDielectronSignalFunc.h:88
 AliDielectronSignalFunc.h:89
 AliDielectronSignalFunc.h:90
 AliDielectronSignalFunc.h:91
 AliDielectronSignalFunc.h:92
 AliDielectronSignalFunc.h:93