//this file looks like plain C, but it's actually -*- c++ -*-
#ifndef __TQNFTOP1JETESTIMATOR__
#define __TQNFTOP1JETESTIMATOR__

#include "QFramework/TQNFBase.h"

#include "QFramework/TQCounter.h"

class TQNFTop1jetEstimator : public TQNFBase {
protected:
  TString fPath;
  TString fPathData;
  TString fCut10;
  TString fCut11;
  TString fCut21;
  TString fCut22;
  double fResult;
  double fResultExtrapolation; //full extrapolation factor (1-epsilon)/epsilon
  double fResultEpsilon1Jet; //b-tag eff. measured in data and extrapolated to 1jet region using MC
  double fResultEpsilon2JetData; //b-tag eff. measured in data (2jets, 1 or 2 btags)
  double fResultGammaMC; //MC based extrapol. factor for b-tag eff. 2jet->1jet
  bool fSuccess = false;

  TQCounter* cnt_mc_10 = 0;
  TQCounter* cnt_mc_11 = 0;
  TQCounter* cnt_mc_21 = 0;
  TQCounter* cnt_mc_22 = 0;
  TQCounter* cnt_data_11 = 0;
  TQCounter* cnt_data_21 = 0;
  TQCounter* cnt_data_22 = 0;
  
  std::vector<TString> vBkgPaths;
  std::vector<TQCounter*> vBkgCounters11;
  std::vector<TQCounter*> vBkgCounters21;
  std::vector<TQCounter*> vBkgCounters22;
  
  int deployResultInternal(const std::vector<TString>& startCutNames, const std::vector<TString>& stopAtCut, int overwrite, bool applyToStopCut, int mode = 0);
  
  TString getPostfix(int mode=0);
  
  virtual bool initializeSelf() override; 
  virtual bool finalizeSelf() override; 

public:
  TQNFTop1jetEstimator();
  TQNFTop1jetEstimator(TQSampleDataReader* rd);
  TQNFTop1jetEstimator(TQSampleFolder* sf);
  virtual ~TQNFTop1jetEstimator();

  TString getPathMC();
  TString getPathData();
  void setPathMC(const TString& path);
  void setPathData(const TString& path);

  TString getRegion1j0b();
  TString getRegion1j1b();
  TString getRegion2j1b();
  TString getRegion2j2b();
  void setRegion1j0b(const TString& region);
  void setRegion1j1b(const TString& region);
  void setRegion2j1b(const TString& region);
  void setRegion2j2b(const TString& region);
  
  bool readConfiguration(TQFolder* f ) override;

  bool calculate();
  void printResult(int mode = 0);
 
  double getResult(int mode = 0);

  int execute(int itrNumber = -1) override;
  bool success() override;

  int deployResult(const std::vector<TString>& startCutNames, const std::vector<TString>& stopAtCut, int overwrite, bool applyToStopCut) override;

  ClassDefOverride(TQNFTop1jetEstimator,1) // implements the HWW top1jet estimate
};

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