//  
// Author: Felix Thomas <mailto: Felix.Thomas@mailbox.tu-dresden.de>
// Update: $$
// Copyright: 2010 (C) Felix Thomas
//
#ifndef HEP_HepTemplate
#define HEP_HepTemplate
#ifndef ROOT_TNamed
#include <TNamed.h>
#endif
#ifndef ROOT_TAttFill
#include <TAttFill.h>
#endif
#ifndef ROOT_TAttLine
#include <TAttLine.h>
#endif
#ifndef ROOT_TFile
#include <TFile.h>
#endif
#ifndef ROOT_TH1F
#include <TH1F.h>
#endif

class HepTemplate : public TNamed {

 private:

  TAttFill fAttFill;            // Fill attributes (used for stacked drawing)
  TAttLine fAttLine;            // Line attributes (used for overlay drawing)
  
  TH1F*     fInputHistogram;    // Corresponding histogram (used in HepDataMCPlot only)
  TH1F*     fFittedHistogram;   // Histogram that is fitted to reference
  Double_t  fFitFraction;       // Fitted fraction
  Double_t  fFitFractionError;  // Error on the fitted fraction
  Double_t  fLowerBound;        // lower bound of fit parameter
  Double_t  fUpperBound;        // upper bound of fit parameter
  Bool_t    fBoundsSet;         // TRUE if bounds are set, otherwise false
  Double_t  fStartValue;        // Starting value of fit parameter
  Double_t  fStartValueError;   // Starting value of error of fit parameter
  Bool_t    fStartValueSet;     // TRUE if start value is set, otherwise false
  Bool_t    fFixFraction;       // TRUE if fraction should be fixed, otherwise false
  Float_t   fCutEfficiency;     // Cut efficiency assigned to this template
      
    
 public:
  HepTemplate();
  virtual ~HepTemplate();
 
  inline Color_t   GetColor() { return fAttFill.GetFillColor(); }
  inline Style_t   GetLineStyle() { return fAttLine.GetLineStyle(); }
  inline Width_t   GetLineWidth() { return fAttLine.GetLineWidth(); }
  inline Style_t   GetFillStyle() { return fAttFill.GetFillStyle(); }
  inline TAttFill GetAttFill() const { return fAttFill; }
  inline TAttLine GetAttLine() const { return fAttLine; }

  inline TH1F*     GetInputHistogram() const { return fInputHistogram; }
  inline TH1F*     GetFittedHistogram() const { return fFittedHistogram; }
  inline Double_t  GetFitFraction() const { return fFitFraction; }
  inline Double_t  GetFitFractionError() const { return fFitFractionError; }

  inline void SetColor(Color_t color) { fAttFill.SetFillColor(color); }
  inline void SetLineStyle(Style_t lstyle) { fAttLine.SetLineStyle(lstyle); }
  inline void SetLineWidth(Width_t lwidth) { fAttLine.SetLineWidth(lwidth); }
  inline void SetFillStyle(Style_t fstyle) { fAttFill.SetFillStyle(fstyle); }

  
  inline void SetInputHistogram(TH1F *h) { fInputHistogram = h; }
  inline void SetFittedHistogram(TH1F *h) { fFittedHistogram = h; }
  inline void SetFitFraction(Double_t fraction) { fFitFraction = fraction; }
  inline void SetFitFractionError(Double_t error) { fFitFractionError = error; }

  inline void SetBounds(Double_t Lower, Double_t Upper) { 
                  fLowerBound = Lower; 
                  fUpperBound = Upper; 
                  fBoundsSet = kTRUE; 
              }
  inline void SetStartValue(Double_t frac, Double_t frac_err) {
      fStartValue = frac;
      fStartValueError = frac_err;
      fStartValueSet = kTRUE;
  }

  inline void FixFraction(Bool_t fix) { fFixFraction = fix; }
  inline void SetCutEfficiency(Float_t eff) { fCutEfficiency = eff; }
  
  inline void     UnsetBounds() { fBoundsSet = kFALSE; }
  inline Bool_t   IsBound() { return fBoundsSet; }
  inline Double_t GetUpperBound() { return fUpperBound; }
  inline Double_t GetLowerBound() { return fLowerBound; }
  inline Bool_t   HasStartValue() { return fStartValueSet; }
  inline Double_t GetStartValue() { return fStartValue; }
  inline Double_t GetStartValueError() { return fStartValueError; }
  inline Bool_t   HasFixFraction() { return fFixFraction; }
  inline Float_t  GetCutEfficiency() { return fCutEfficiency; }
  
  ClassDef(HepTemplate,2) // Template inside HepTemplateFitter
    };
#endif
 HepTemplate.h:1
 HepTemplate.h:2
 HepTemplate.h:3
 HepTemplate.h:4
 HepTemplate.h:5
 HepTemplate.h:6
 HepTemplate.h:7
 HepTemplate.h:8
 HepTemplate.h:9
 HepTemplate.h:10
 HepTemplate.h:11
 HepTemplate.h:12
 HepTemplate.h:13
 HepTemplate.h:14
 HepTemplate.h:15
 HepTemplate.h:16
 HepTemplate.h:17
 HepTemplate.h:18
 HepTemplate.h:19
 HepTemplate.h:20
 HepTemplate.h:21
 HepTemplate.h:22
 HepTemplate.h:23
 HepTemplate.h:24
 HepTemplate.h:25
 HepTemplate.h:26
 HepTemplate.h:27
 HepTemplate.h:28
 HepTemplate.h:29
 HepTemplate.h:30
 HepTemplate.h:31
 HepTemplate.h:32
 HepTemplate.h:33
 HepTemplate.h:34
 HepTemplate.h:35
 HepTemplate.h:36
 HepTemplate.h:37
 HepTemplate.h:38
 HepTemplate.h:39
 HepTemplate.h:40
 HepTemplate.h:41
 HepTemplate.h:42
 HepTemplate.h:43
 HepTemplate.h:44
 HepTemplate.h:45
 HepTemplate.h:46
 HepTemplate.h:47
 HepTemplate.h:48
 HepTemplate.h:49
 HepTemplate.h:50
 HepTemplate.h:51
 HepTemplate.h:52
 HepTemplate.h:53
 HepTemplate.h:54
 HepTemplate.h:55
 HepTemplate.h:56
 HepTemplate.h:57
 HepTemplate.h:58
 HepTemplate.h:59
 HepTemplate.h:60
 HepTemplate.h:61
 HepTemplate.h:62
 HepTemplate.h:63
 HepTemplate.h:64
 HepTemplate.h:65
 HepTemplate.h:66
 HepTemplate.h:67
 HepTemplate.h:68
 HepTemplate.h:69
 HepTemplate.h:70
 HepTemplate.h:71
 HepTemplate.h:72
 HepTemplate.h:73
 HepTemplate.h:74
 HepTemplate.h:75
 HepTemplate.h:76
 HepTemplate.h:77
 HepTemplate.h:78
 HepTemplate.h:79
 HepTemplate.h:80
 HepTemplate.h:81
 HepTemplate.h:82
 HepTemplate.h:83
 HepTemplate.h:84
 HepTemplate.h:85
 HepTemplate.h:86
 HepTemplate.h:87
 HepTemplate.h:88
 HepTemplate.h:89
 HepTemplate.h:90
 HepTemplate.h:91
 HepTemplate.h:92
 HepTemplate.h:93
 HepTemplate.h:94
 HepTemplate.h:95
 HepTemplate.h:96
 HepTemplate.h:97
 HepTemplate.h:98