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

#include "QFramework/TQNFBase.h"
#include "QFramework/TQCounter.h"

class TQABCDCalculator : public TQNFBase {
protected:
  TString fPathMC;
  TString fPathData;
  TString fCutTarget;
  TString fCutSource;
  TString fCutNumerator;
  TString fCutDenominator;
  
  std::vector<TString> vBkgPaths;
  std::vector<TQCounter*> vBkgCountersB;
  std::vector<TQCounter*> vBkgCountersC;
  std::vector<TQCounter*> vBkgCountersD;

  double fResult;
  double fResultErr2;
  bool fSuccess = false;
  bool doNonClosureCorrection = false;

  TQCounter* cnt_mc_a = NULL;
  TQCounter* cnt_mc_b = NULL;
  TQCounter* cnt_mc_c = NULL;
  TQCounter* cnt_mc_d = NULL;
  TQCounter* cnt_data_b = NULL;
  TQCounter* cnt_data_c = NULL;
  TQCounter* cnt_data_d = NULL;

  virtual bool initializeSelf() override; 
  virtual bool finalizeSelf() override; 

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

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

  TString getA();
  TString getB();
  TString getC();
  TString getD();
  void setA(const TString& region);
  void setB(const TString& region);
  void setC(const TString& region);
  void setD(const TString& region);
  TString getTarget();
  TString getSource();
  TString getNumerator();
  TString getDenominator();
  void setTarget(const TString& region);
  void setSource(const TString& region);
  void setNumerator(const TString& region);
  void setDenominator(const TString& region);
 
  bool readConfiguration(TQFolder* f ) override;

  bool calculate();
  void printResult();
 
  double getResult();
  double getResultUncertainty();
  double getResultVariance();

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

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

  ClassDefOverride(TQABCDCalculator,1) // helper class to facilitate an ABCD-estimate
};

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