ROOT logo
#ifndef ALISIGNIFICANCECALCULATOR_H
#define ALISIGNIFICANCECALCULATOR_H

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

/* $Id$ */

///////////////////////////////////////////////////////////////////
//                                                               //
// Class to calculate the statistical significance from          //
// AliMultiVeector objects for signal and background             //
// Origin: Francesco Prino (prino@to.infn.it)                    //
//                                                               //
///////////////////////////////////////////////////////////////////

#include "TObject.h"

class AliMultiDimVector;

class AliSignificanceCalculator : public TObject{
 public:
  AliSignificanceCalculator();
  AliSignificanceCalculator(AliMultiDimVector* sig, AliMultiDimVector* bkg, Float_t normsig=1., Float_t normbkg=1.);
  AliSignificanceCalculator(AliMultiDimVector* sig, AliMultiDimVector* bkg, AliMultiDimVector* err2sig, AliMultiDimVector* err2bkg, Float_t normsig=1., Float_t normbkg=1.);

  ~AliSignificanceCalculator();

  void SetSignal(AliMultiDimVector* sig, Float_t norm=1.){
    if(fSignal) delete fSignal;
    fSignal=sig;
    fNormSig=norm;
    if(fSignal && fBackground) CalculateSignificance();
  }
  void SetBackground(AliMultiDimVector* bac, Float_t norm=1.){
    if(fBackground) delete fBackground;
    fBackground=bac;
    fNormBkg=norm;
    if(fSignal && fBackground) CalculateSignificance();
  }
  void SetErrSquareSignal(AliMultiDimVector* err2sig, Float_t norm=1.){
    if(fErrSquareSignal) delete fErrSquareSignal;
    fErrSquareSignal=err2sig;
    fNormSig=norm;
    if(fSignal && fBackground) CalculateSignificance();
  }
  void SetErrSquareBackground(AliMultiDimVector* err2bkg, Float_t norm=1.){
    if(fErrSquareBackground) delete fErrSquareBackground;
    fErrSquareBackground=err2bkg;
    fNormBkg=norm;
    if(fSignal && fBackground) CalculateSignificance();
  }
  
  void SetNormalizations(Float_t normSig, Float_t normBkg){
    fNormSig=normSig;
    fNormBkg=normBkg;
    if(fSignal && fBackground) CalculateSignificance();
  }

  AliMultiDimVector* GetSignal() const {return fSignal;}
  AliMultiDimVector* GetBackground() const {return fBackground;}
  AliMultiDimVector* GetSignificance() const {return fSignificance;}
  AliMultiDimVector* GetSignificanceError() const {return fErrSignificance;}

  void CalculateSignificance();
  Float_t GetMaxSignificance(Int_t* cutIndices, Int_t ptbin) const{
    Float_t sigMax=0;
    if(fSignificance) fSignificance->FindMaximum(sigMax,cutIndices,ptbin);
    return sigMax;
  }
  AliMultiDimVector* CalculatePurity() const;
  AliMultiDimVector* CalculatePurityError() const;
  AliMultiDimVector* CalculateSOverB() const;
  AliMultiDimVector* CalculateSOverBError() const;

 private:
  Bool_t Check() const;
  AliSignificanceCalculator(const AliSignificanceCalculator& c);
  AliSignificanceCalculator& operator=(const AliSignificanceCalculator& c);

  AliMultiDimVector* fSignal;              // signal matrix
  AliMultiDimVector* fErrSquareSignal;     // matrix with err^2 for signal
  AliMultiDimVector* fBackground;          // background matrix
  AliMultiDimVector* fErrSquareBackground; // matrix with err^2 for background
  AliMultiDimVector* fSignificance;        // significance matrix
  AliMultiDimVector* fErrSignificance;     // matrix with error on significance
  Float_t fNormSig;                        // signal normalization
  Float_t fNormBkg;                        // background normalization

  ClassDef(AliSignificanceCalculator,0); // class to compute and maximise significance

};

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