#include "QFramework/TQSignificanceEvaluator.h"
#include "QFramework/TQHistogramUtils.h"
#include <iostream>
#include <functional>
#include <math.h>
#include "QFramework/TQGridScanner.h"
#include "QFramework/TQSampleFolder.h"
#include "QFramework/TQSampleDataReader.h"
#include "QFramework/TQLibrary.h"
#include "QFramework/TQHistogramUtils.h"
#include "QFramework/TQTHnBaseUtils.h"

#include "THnBase.h"

////////////////////////////////////////////////////////////////////////////////////////////////
//
// TQSignificanceEvaluator
//
// The TQSignificaneEvaluator is an abstract class that provides an interface
// for significance evaluators, that is, classes which provide functionality
// to calculate a significance for the purpose of optimization studies
// currently (Apr/May 2013) these are primarily aimed at supporting the mechanism
// provided by the TQGridScanner -- but there is really nothing that should stop you from
// changing these classes to support other optimization techniques
//
// the interface is kept as general as possible to provide maximum flexibility
// thus, please read the documentation to the class members carefully before
// deciding on how to proceed implementing compatibility for different
// optimization techniques
//
////////////////////////////////////////////////////////////////////////////////////////////////

#include "QFramework/TQGridScanObservable.h"
using BinExtrema = TQGridScanBound::BinExtrema;

using std::vector;
using std::pair;

namespace {

  auto simpleSignif = [](double b, double s){ return s/sqrt(b); };
  auto simpleSignif2 = [](double b, double s){ return s*s/b; };
  auto simple2Signif = [](double b, double s){ return s/sqrt(s+b); };
  auto simple2Signif2 = [](double b, double s){ return s*s/(s+b); };
  auto simple3Signif = [](double b, double s){ return s/b; };
  auto simple3Signif2 = [](double b, double s){ return s*s/(b*b); };

  std::unique_ptr<TH1F> projection(THnBase* hist) {
    // This is probably the most time consuming step for the simple significance evaluators
    // since here the specified ranges are applied and then one dimension is projected out!
    return std::unique_ptr<TH1F>(reinterpret_cast<TH1F*>(hist->Projection(0)));
  }

  // Ranges set by the user have already been accounted for in the projection
  double count(THnBase* hist) {
    auto proj = projection(hist);
    return proj->Integral(BinExtrema::min, BinExtrema::max);
  }

  pair<double, double> countAndError(THnBase* hist) {
    auto proj = projection(hist);
    double error = 0.0;
    auto count = proj->IntegralAndError(BinExtrema::min, BinExtrema::max, error);
    return std::make_pair(count, error);
  }

}

ClassImp(TQSignificanceEvaluator)

TQSignificanceEvaluator::TQSignificanceEvaluator(const TString& name) :
  TNamed(name,name),
  initialization(NULL),
  reader(NULL),
  luminosity(0),
  luminosityScale(1),
  fileIdentifier(name),
  verbose(false)
{}

void TQSignificanceEvaluator::setFileIdentifier(TString s){
  // set a file identifider
  this->fileIdentifier = s;
}

TQSampleDataReader* TQSignificanceEvaluator::getReader(){
  // retrieve TQSampleDataReader object
  return this->reader;
}

bool TQSignificanceEvaluator::setRangeAxis(int /*axis*/, double /*low*/, double /*up*/) {
  return true;
}

bool TQSignificanceEvaluator::updateHists(vector<int> /*axesToScan*/, TQGridScanner* /*scanner*/, int /*axisToEvaluate*/) {
  return true;
}

void TQSignificanceEvaluator::setVerbose(bool v){
  // toggle verbosity
  this->verbose = v;
}

void TQSignificanceEvaluator::bookNF(const TString& path){
  // book an NF
  this->autoNFs.push_back(path);
}

void TQSignificanceEvaluator::addRegion(const TString& cutname){
  // add a region (cut)
  m_regions.push_back(cutname);
}

bool TQSignificanceEvaluator::hasNativeRegionSetHandling(){
  // returns true if this evaluator type supports region set handling
  return false;
}
bool TQSignificanceEvaluator::prepareNextRegionSet(const TString& /*suffix*/){
  // prepare the next region set
  WARNclass("prepareRegion was called - this evaluator type does not support native region handling. Something went wrong!");
  return false;
}
bool TQSignificanceEvaluator::isPrepared(){
  // returns true if the evaluator is prepared, false otherwise
  return false;
}

TQSignificanceEvaluator::TQSignificanceEvaluator(const TString& name, TQSampleFolder* sf) :
  TNamed(name,name),
  initialization(NULL),
  reader(sf ? new TQSampleDataReader(sf) : NULL),
  luminosity(0),
  luminosityScale(1),
  fileIdentifier(name)
{
  // In this constructor variant, the significance evaluator is created
  // with a pointer to a TQSampleFolder which can be used
  // to retrieve the data necessary for significance evaluatioin
  // the mechanisms of retrievial and calculation are entirely up to the derived class
  this->getLuminosity();
}

double TQSignificanceEvaluator::getLuminosity(TString folderName, TString tagName){
  // retrieve the luminosity value from the given location (default info/luminosity)
  // within the sample folder structure (and save it internally)
  if(this->reader && this->reader->getSampleFolder() && this->reader->getSampleFolder()->getFolder(folderName))
    this->reader->getSampleFolder()->getFolder(folderName)->getTagDouble(tagName,this->luminosity);
  return this->luminosity;
}

bool TQSignificanceEvaluator::scaleLuminosity(double lumi){
  // set the luminosity scale to an arbitrary value -- this will affect the significnce!
  // this will only have an effect if TQSignificanceEvaluator::getLuminosity was called previously!
  if(this->luminosity <= 0)
    this->getLuminosity();
  if(this->luminosity > 0){
    this->luminosityScale = lumi/(this->luminosity);
    return true;
  }
  return false;
}

std::vector<double> TQSignificanceEvaluator::getFOMs(size_t iregion) {
  // This function will calculate the FOMs based on the configured formulas in m_functionsFOM and m_functionsFOMWithBkgUnc
  // If vector is empty an empty vector is returned
  if(this->initialization == TQGridScanner::Class()){
    std::vector<double> fom_vector;
    if (m_functionsFOM.size() == 0 && m_functionsFOMWithUnc.size() == 0 && m_functionsFOMWithBkgUnc.size() == 0) {
      WARNclass("Figure of merits cannot be returned because no functions are specified!");
      return {};
    }
     // if only FOMs are specified where no stat. uncertainties are used simply
    // get the yields with signal() and bkg() function.
    // (This will probably be the most often usecase with estimates like s/sqrt(b)
    // or the poisson significance.)
    // If at least one FOM where stat. uncertainties are regarded is
    // configured, jump to other if clause and directly calculate signal and bkg yield
    // with errors (signalAndError() and bkgAndError() functions).
    // This avoids having to project out the multidimensional histogram multiple times
    // which is the most time consuming bit in the gridscanner feature
    double s, b, serr=0., berr=0.;
    if (m_functionsFOMWithUnc.size() == 0 and m_functionsFOMWithBkgUnc.size() == 0) {
      s = signal(iregion); // signal yield
      b = bkg(iregion); // background yiel
    } else { // if also FOMs are specified where stat. uncertainties are used
      auto sAndErr = signalAndError(iregion); //  pair of signal yield and uncertainty
      auto bAndErr = bkgAndError(iregion); //  pair of bkg yield and uncertainty
      s = sAndErr.first;
      serr = sAndErr.second;
      b = bAndErr.first;
      berr = bAndErr.second;
    }

    // Check if we are in a low stat region
    if(b < getTagDoubleDefault("cutoff",0)) {
      this->info += m_regions[iregion] + " skipped: low stats ; ";
      return {};
    }
    
    // evaluate all FOMs
    for (auto f : m_functionsFOM) {
      auto fom = f(b, s);
      fom_vector.push_back(fom);
    }
    for (auto f : m_functionsFOMWithUnc) {
      auto fom = f(b, s, berr, serr);
      fom_vector.push_back(fom);
    }
    for (auto f : m_functionsFOMWithBkgUnc) {
      auto fom = f(b, berr, s);
      fom_vector.push_back(fom);
    }

    if (not this->scanner->hasSplitObs) {// if Gridscanner has split obs don't write out yields and write out significance later
      this->info += TString::Format("%s: s=%g, b=%g, FOM(%s)=%g, ", m_regions[iregion].Data(), s, b, m_FOMDefinitions[0].Data(), fom_vector[0]);
      for (unsigned int i = 1; i < fom_vector.size(); i++) {
        this->info += TString::Format("FOM(%s)=%g", m_FOMDefinitions[i].Data(), fom_vector[i]);
        if (i == fom_vector.size()-1) {this->info += "; ";}
        else {this->info += ", ";}
      }
    }
    return fom_vector;
  }
  return {};
}

bool TQSignificanceEvaluator::addFunctionsFOM(std::vector<TString> fomDefinitions, std::vector<double>* parameter) {

  TString definitionString = "";
  for (auto d : fomDefinitions) definitionString += d+", ";
  definitionString.Chop(); definitionString.Chop();
  INFO("Add figure of merits from expression: '%s'", definitionString.Data());
  // ... can add any function here

  // std::vector<TString> definitions = TQStringUtils::split(fomDefinitions,",");
  unsigned i = 0;
  for (auto def : fomDefinitions) {
    TQStringUtils::removeLeading(def," ");
    TQStringUtils::removeTrailing(def," ");
    def.ToLower(); // to lower cases
    if (def.EqualTo("poisson")) {
      m_functionsFOM.push_back(TQHistogramUtils::getPoisson);
      m_FOMDefinitions.push_back("poisson");
    }
    else if (def.EqualTo("s/sqrt(b)")) {
      m_functionsFOM.push_back(simpleSignif);
      m_FOMDefinitions.push_back("s/sqrt(b)");
    }
    else if (def.EqualTo("s*s/b")) {
      m_functionsFOM.push_back(simpleSignif2);
      m_FOMDefinitions.push_back("s*s/b");
    }
    else if (def.EqualTo("s/sqrt(s+b)")) {
      m_functionsFOM.push_back(simple2Signif);
      m_FOMDefinitions.push_back("s/sqrt(s+b)");
    }
    else if (def.EqualTo("s*s/(s+b)")) {
      m_functionsFOM.push_back( simple2Signif2);
      m_FOMDefinitions.push_back("s*s/(s+b)");
    }
    else if (def.EqualTo("s/b")) {
      m_functionsFOM.push_back(simple3Signif);
      m_FOMDefinitions.push_back("s/b");
    }
    else if (def.EqualTo("s*s/(b*b)")) {
      m_functionsFOM.push_back(simple3Signif2);
      m_FOMDefinitions.push_back("s*s/(b*b)");
    }
    else if (def.EqualTo("s/const")) {
      double par = 0;
      if (!parameter || parameter->size()-1 < i ) {
        WARNclass("The following definition of a figure of merit is used but no parameter is specified: '%s'! Using a value of '0' for 'const'!", def.Data());
      } else {
        par = parameter->at(i);
      }
      auto signif = [par](double /*b*/, double s){ return s/par; };
      m_functionsFOM.push_back(signif);
      m_FOMDefinitions.push_back("s/const");
    }
    else if (def.EqualTo("s/sqrt(s+b+const)")) {
      double par = 0;
      if (!parameter || parameter->size()-1 < i ) {
        WARNclass("The following definition of a figure of merit is used but no parameter is specified: '%s'! Using a value of '0' for 'const'!", def.Data());
      } else {
        par = parameter->at(i);
      }
      auto signif = [par](double b, double s){ return s/sqrt(s+b+par); };
      m_functionsFOM.push_back(signif);
      m_FOMDefinitions.push_back("s/sqrt(s+b+const)");
    }
    else if (def.EqualTo("s/sqrt(b+berr2)")) {
      auto signif = [](double b, double s, double berr, double /*serr*/){ return s/sqrt(b+berr*berr); };
      m_functionsFOMWithUnc.push_back(signif);
      m_FOMDefinitions.push_back("s/sqrt(b+berr2)");
    }
    else if (def.EqualTo("s/sqrt(b+berr2+serr2)")) {
      auto signif = [](double b, double s, double berr, double serr){ return s/sqrt(b+berr*berr+serr*serr); };
      m_functionsFOMWithUnc.push_back(signif);
      m_FOMDefinitions.push_back("s/sqrt(b+berr2+serr2)");
    }
    else if (def.EqualTo("s/sqrt(s+b+berr2)")) {
      auto signif = [](double b, double s, double berr, double /*serr = 0*/){ return s/sqrt(s+b+berr*berr); };
      m_functionsFOMWithUnc.push_back(signif);
      m_FOMDefinitions.push_back("s/sqrt(s+b+berr2)");
    }
    else if (def.EqualTo("s/sqrt(s+b+serr2+berr2)")) {
      auto signif = [](double b, double s, double berr, double serr){ return s/sqrt(s+b+berr*berr+serr*serr); };
      m_functionsFOMWithUnc.push_back(signif);
      m_FOMDefinitions.push_back("s/sqrt(s+b+serr2+berr2)");
    }
    else if (def.EqualTo("poissonwerr")) {
      m_functionsFOMWithBkgUnc.push_back(TQHistogramUtils::getPoissonWithError);
      m_FOMDefinitions.push_back("poissonwerr");
    }
    else if (def.EqualTo("poissonwerrandrelerr")) {
      double par = 0;
      if (!parameter || parameter->size()-1 < i ) {
        WARNclass("The following definition of a figure of merit is used but no parameter is specified: '%s'! Using a value of '0' for 'relative bkg syst err'!", def.Data());
      } else {
        par = parameter->at(i);
      }
      auto signif = [par](double b, double berr, double s){ 
        double bSystErr = par * b;
        double bTotErr = TMath::Sqrt( TMath::Power(bSystErr, 2) + TMath::Power(berr, 2) );
        return TQHistogramUtils::getPoissonWithError(b, bTotErr, s);
      };
      m_FOMDefinitions.push_back("poissonwerrandrelerr");
      m_functionsFOMWithBkgUnc.push_back(signif);
    }
    else {
      WARNclass("The following definition of a figure of merit is not known: '%s'! Feel free to implement it in TQSignificanceEvaluator::addFunctionsFOM()! For now, this is just ignored and not used...", def.Data());
    }
    i++;
  }
  if  (m_functionsFOM.size() == 0 && m_functionsFOMWithUnc.size() == 0 && m_functionsFOMWithBkgUnc.size() == 0) {
    ERRORclass("No FOM function could be added, please check your configurations!");
    throw std::runtime_error("No FOM function could be added, exiting!");
  }
  m_multipleFOMsCompatible = true;
  return true;
}

double TQSignificanceEvaluator::signal(size_t iregion) {
  return count(m_signalHists[iregion]);
}
pair<double, double> TQSignificanceEvaluator::signalAndError(size_t iregion) {
  return countAndError(m_signalHists[iregion]);
}
double TQSignificanceEvaluator::bkg(size_t iregion) {
  return count(m_bkgHists[iregion]);
}
pair<double, double> TQSignificanceEvaluator::bkgAndError(size_t iregion) {
  return countAndError(m_bkgHists[iregion]);
}


ClassImp(TQSignificanceEvaluatorBase)

TQSignificanceEvaluatorBase::TQSignificanceEvaluatorBase(
    TQSampleFolder* sf,
    TString signal,
    TString background,
    TString name
) :
  TQSignificanceEvaluator(name, sf),
  signalPath(signal),
  backgroundPath(background)
{
  isSimpleEvaluator = true;
}

double TQSignificanceEvaluatorBase::evaluate(){
  // in the evaluation method, we will ask for different types of initialzation
  // and perform the corresponding steps needed to return a value
  if(this->initialization == TQGridScanner::Class()){
    // if the initialization was done with a GridScanner
    // we have pointers to grids containing the information we need
    double significance = 0;
    // TMatrix<double>* m_NF = this->calculateNFs();
    this->info = "";
    for(size_t i=0; i<m_regions.size(); i++){
      significance += getSignificance2(i);
    }
    if (m_regions.size() > 1) {
      this->info += TString::Format("FOM(combined)=%g ; ", sqrt(significance));
    }
    return sqrt(significance);
  }
  // if we didn't find a valid initialization method
  // we return zero and issue an error message
  ERRORclass("cannot evaluate without valid initialization!");
  return 0;
}

// Dummy function that shouldn't be used
double TQSignificanceEvaluatorBase::getSignificance(size_t iregion) {
  return significance(iregion, simpleSignif);
}

double TQSignificanceEvaluatorBase::getSignificance2(size_t iregion) {
  auto signif = getSignificance(iregion);
  return signif*signif;
}

vector<double> TQSignificanceEvaluatorBase::evaluateMultiple(){
  // in the evaluation method where multiple FOMs are evaluated;
  // we will ask for different types of initialzation
  // and perform the corresponding steps needed to return a value
  if(this->initialization == TQGridScanner::Class()){
    // if the initialization was done with a GridScanner
    // we have pointers to grids containing the information we need
    if (m_functionsFOM.size() == 0 && m_functionsFOMWithUnc.size() == 0 && m_functionsFOMWithBkgUnc.size() == 0) {
      WARNclass("Figure of merits cannot be returned because no functions are specified!");
      return {};
    }

    this->info = "";
    int length = m_functionsFOM.size();
    length +=  m_functionsFOMWithUnc.size();
    length +=  m_functionsFOMWithBkgUnc.size();
    std::vector<double> fom2(length, 0.0);
    for (size_t i=0; i<m_regions.size(); i++) {
      auto foms =  getFOMs(i);
      if (!foms.empty()) {
        for (int j = 0; j < length; j++ ) {
          fom2[j] += foms[j]*foms[j];
        }
      }
    }
    std::vector<double> fom;
    for (int j = 0; j < length; j++ ) {
      double final_fom = sqrt(fom2[j]);
      fom.push_back(final_fom);
      if (not this->scanner->hasSplitObs) {// if Gridscanner has split obs don't write out yields and write out significance later
        if (m_regions.size() > 1) {
          this->info += TString::Format("FOM(%s, comb.)=%g ; ", m_FOMDefinitions[j].Data(), final_fom);
        }
      }
    }
    return fom;
  }

  // if we didn't find a valid initialization method
  // we return zero and issue an error message
  ERRORclass("cannot evaluate without valid initialization!");
  return {};
}


void TQSignificanceEvaluatorBase::printHistogramAxes() {
  int nHists = m_signalHists.size();
  if (nHists > 0) {
    INFO(TString::Format("Provided %d signal/backgroud hists with %d dimensions:", m_signalHists[0]->GetNdimensions(), nHists));
    TString info;
    for (int i=0; i<nHists; i++) {
      info += TString::Format("Name of axes of histogram %d: ", i);
      for (int j=0; j<m_signalHists[i]->GetNdimensions(); j++) {
        info += TString::Format("%s ", m_signalHists[i]->GetAxis(j)->GetName());
      }
    }
    INFO(info);
  }
}



bool TQSignificanceEvaluatorBase::initialize(TQGridScanner* scanner){
  // if the initialization was done with a TQGridScanner
  // we remember this and retrieve the grids from the reader now
  // to be able to use them later on
  if(!scanner){
    ERRORclass("no TQGridScanner appointed to initialization!");
    return false;
  }
  if(!reader){
    ERRORclass("no TQSampleDataReader available!");
    return false;
  }
  this->initialization = scanner->Class();
  this->scanner = scanner;
  if(m_regions.size() < 1){
    ERRORclass("no regions set!");
    return false;
  }
  if(this->verbose) VERBOSEclass("Initializing with %i regions",m_regions.size());
  for(size_t i=0; i<m_regions.size(); i++) {
    THnBase* orig_s = this->reader->getTHnBase(this->signalPath, TQFolder::concatPaths(m_regions[i], scanner->nDimHistName().Data()));
    THnBase* orig_b = this->reader->getTHnBase(this->backgroundPath, TQFolder::concatPaths(m_regions[i],scanner->nDimHistName().Data()));
    if(!orig_s || !orig_b) {
      ERRORclass("Unable to retrieve THnBase '%s/%s' from '%s' and/or '%s' in folder '%s'",m_regions[i].Data(),scanner->nDimHistName().Data(),this->signalPath.Data(),this->backgroundPath.Data(),this->reader->getSampleFolder()->GetName());
      return false;
    }

    // First process multidimensional histograms to only regard dimensions that are actually used in gridscan
    THnBase* s;
    THnBase* b;
    s = TQTHnBaseUtils::projectionND(orig_s, scanner->obsNamesToScan());
    b = TQTHnBaseUtils::projectionND(orig_b, scanner->obsNamesToScan());
    delete orig_s;
    delete orig_b;
    if(!s || !b) {
      ERRORclass("Unable to project THnBase '%s/%s' from '%s' and/or '%s' in folder '%s' to relevant dimentions!",m_regions[i].Data(),scanner->nDimHistName().Data(),this->signalPath.Data(),this->backgroundPath.Data(),this->reader->getSampleFolder()->GetName());
      return false;
    }

    m_signalHists.push_back(s);
    m_bkgHists.push_back(b);
    bool addSig = scanner->addSignalHist(s);
    bool addBkg = scanner->addBkgHist(b);
    if (!addSig || !addBkg) {
      ERRORclass("Unable to add THnBase '%s/%s' from '%s' and/or '%s' in folder '%s' because it is not consistent with the previously added THnBase from another region!",m_regions[i].Data(),scanner->nDimHistName().Data(),this->signalPath.Data(),this->backgroundPath.Data(),this->reader->getSampleFolder()->GetName());
      throw std::runtime_error("Defined multidimensional histograms not consistent! Exiting");
    }
    // pass FOM definitions directly to TQGridscanResults! Kind of convoluted relationships
    scanner->addFOMDefinitions(m_FOMDefinitions);
  }
  if(this->verbose) printHistogramAxes();
  return true;
}

bool TQSignificanceEvaluatorBase::setRangeAxis(int axis, double low, double up) {
  // restrict the range for the specified axis in
  for (unsigned int i=0; i<m_signalHists.size(); i++) {
    if (!m_signalHists[i] || !m_bkgHists[i]) {
      WARNclass(TString::Format("cannot set range for axis %d for histograms", axis));
      return false;
    }
    m_signalHists[i]->GetAxis(axis)->SetRangeUser(low, up);
    m_bkgHists[i]->GetAxis(axis)->SetRangeUser(low, up);
  }
  return true;
}

bool TQSignificanceEvaluatorBase::updateHists(
    vector<int> axesToScan,
    TQGridScanner* scanner,
    int axisToEvaluate
) {
  // Project out the axis which are actually scanned for optimization.
  // This will improve the performance during the actual scan

  // always calculate the significance on the same axis to not risk any discrepancies when
  // calculating the significance in different distributions
  vector<int> axis;
  axis.push_back(axisToEvaluate);  // must be set in first position of vector!
  for (int i : axesToScan) {
    if (i != axisToEvaluate) axis.push_back(i);
  }
  axesToScan = axis;
  for (unsigned int i=0; i<m_signalHists.size(); i++) {
    if (!m_signalHists[i] || !m_bkgHists[i]) {
      WARNclass("cannot update hist");
      return false;
    }
    m_signalHists[i] = m_signalHists[i]->ProjectionND(axesToScan.size(), axesToScan.data(), "E");
    m_bkgHists[i] = m_bkgHists[i]->ProjectionND(axesToScan.size(), axesToScan.data(), "E");
    // WARNING: TQGridScanner only holds a single signal and single background hist
    scanner->addSignalHist(m_signalHists[i]);
    scanner->addBkgHist(m_bkgHists[i]);
  }
  return true;
}

double TQSignificanceEvaluatorBase::significance(size_t iregion, const std::function<double (double, double)>& signifFunc) {
  auto b = bkg(iregion);
  if(b < getTagDoubleDefault("cutoff",0)) {
    info += m_regions[iregion] + " skipped: low stats ; ";
    return 0;
  }
  auto s = signal(iregion);
  auto signif = signifFunc(b, s);
  if (not this->scanner->hasSplitObs) {// if Gridscanner has split obs don't write out yields and write out significance later
    info += TString::Format("%s: s=%g, b=%g, FOM(%s)=%g ; ", m_regions[iregion].Data(), s, b, GetName(), signif);
  }
  return signif;
}

// dummy function
int TQSignificanceEvaluatorBase::exportWorkspace(const TString& /*outFileName*/) {
  WARNclass("Cannot export statistics model from simple evaluator! Please, use cl evaluator instead!");
  return 1;
}

////////////////////////////////////////////////////////////////////////////////////////////////
//
// TQSimpleSignificanceEvaluator
//
// The TQSimpleSignificanceCalculator is a very basic implementation of a
// TQSignificanceEvaluator that simply calculates the signal/sqrt(background) ratio
//
////////////////////////////////////////////////////////////////////////////////////////////////

ClassImp(TQSimpleSignificanceEvaluator)

TQSimpleSignificanceEvaluator::TQSimpleSignificanceEvaluator(
    TQSampleFolder* sf,
    TString signal,
    TString background,
    TString name
) :
  TQSignificanceEvaluatorBase(sf,signal,background,name)
{}

double TQSimpleSignificanceEvaluator::getSignificance(size_t iregion){
  return significance(iregion, simpleSignif);
}

////////////////////////////////////////////////////////////////////////////////////////////////
//
// TQPoissonSignificanceEvaluator
//
// The TQPoissonSignificanceCalculator is a rather basic implementation of a
// TQSignificanceEvaluator that calculates the Poisson significance
// Since the initialization is identical to the TQSimpleSignificanceEvaluator
// we inherit from that as a base class and only replace the name
// and the evaluation method.
//
////////////////////////////////////////////////////////////////////////////////////////////////

ClassImp(TQPoissonSignificanceEvaluator)

TQPoissonSignificanceEvaluator::TQPoissonSignificanceEvaluator(
    TQSampleFolder* sf,
    TString signal,
    TString background,
    TString name
) :
  TQSignificanceEvaluatorBase(sf,signal,background,name)
{}

double TQPoissonSignificanceEvaluator::getSignificance(size_t iregion){
  return significance(iregion, TQHistogramUtils::getPoisson);
}

ClassImp(TQSimpleSignificanceEvaluator2)

TQSimpleSignificanceEvaluator2::TQSimpleSignificanceEvaluator2(
    TQSampleFolder* sf,
    TString signal,
    TString background,
    TString name
) :
  TQSignificanceEvaluatorBase(sf,signal,background,name)
{}

double TQSimpleSignificanceEvaluator2::getSignificance(size_t iregion){
  return significance(iregion, simple2Signif);
}


ClassImp(TQSimpleSignificanceEvaluator3)

TQSimpleSignificanceEvaluator3::TQSimpleSignificanceEvaluator3(
    TQSampleFolder* sf,
    TString signal,
    TString background,
    TString name
) :
  TQSignificanceEvaluatorBase(sf,signal,background,name)
{}

double TQSimpleSignificanceEvaluator3::getSignificance(size_t iregion){
  return significance(iregion, simple3Signif);
}

 TQSignificanceEvaluator.cxx:1
 TQSignificanceEvaluator.cxx:2
 TQSignificanceEvaluator.cxx:3
 TQSignificanceEvaluator.cxx:4
 TQSignificanceEvaluator.cxx:5
 TQSignificanceEvaluator.cxx:6
 TQSignificanceEvaluator.cxx:7
 TQSignificanceEvaluator.cxx:8
 TQSignificanceEvaluator.cxx:9
 TQSignificanceEvaluator.cxx:10
 TQSignificanceEvaluator.cxx:11
 TQSignificanceEvaluator.cxx:12
 TQSignificanceEvaluator.cxx:13
 TQSignificanceEvaluator.cxx:14
 TQSignificanceEvaluator.cxx:15
 TQSignificanceEvaluator.cxx:16
 TQSignificanceEvaluator.cxx:17
 TQSignificanceEvaluator.cxx:18
 TQSignificanceEvaluator.cxx:19
 TQSignificanceEvaluator.cxx:20
 TQSignificanceEvaluator.cxx:21
 TQSignificanceEvaluator.cxx:22
 TQSignificanceEvaluator.cxx:23
 TQSignificanceEvaluator.cxx:24
 TQSignificanceEvaluator.cxx:25
 TQSignificanceEvaluator.cxx:26
 TQSignificanceEvaluator.cxx:27
 TQSignificanceEvaluator.cxx:28
 TQSignificanceEvaluator.cxx:29
 TQSignificanceEvaluator.cxx:30
 TQSignificanceEvaluator.cxx:31
 TQSignificanceEvaluator.cxx:32
 TQSignificanceEvaluator.cxx:33
 TQSignificanceEvaluator.cxx:34
 TQSignificanceEvaluator.cxx:35
 TQSignificanceEvaluator.cxx:36
 TQSignificanceEvaluator.cxx:37
 TQSignificanceEvaluator.cxx:38
 TQSignificanceEvaluator.cxx:39
 TQSignificanceEvaluator.cxx:40
 TQSignificanceEvaluator.cxx:41
 TQSignificanceEvaluator.cxx:42
 TQSignificanceEvaluator.cxx:43
 TQSignificanceEvaluator.cxx:44
 TQSignificanceEvaluator.cxx:45
 TQSignificanceEvaluator.cxx:46
 TQSignificanceEvaluator.cxx:47
 TQSignificanceEvaluator.cxx:48
 TQSignificanceEvaluator.cxx:49
 TQSignificanceEvaluator.cxx:50
 TQSignificanceEvaluator.cxx:51
 TQSignificanceEvaluator.cxx:52
 TQSignificanceEvaluator.cxx:53
 TQSignificanceEvaluator.cxx:54
 TQSignificanceEvaluator.cxx:55
 TQSignificanceEvaluator.cxx:56
 TQSignificanceEvaluator.cxx:57
 TQSignificanceEvaluator.cxx:58
 TQSignificanceEvaluator.cxx:59
 TQSignificanceEvaluator.cxx:60
 TQSignificanceEvaluator.cxx:61
 TQSignificanceEvaluator.cxx:62
 TQSignificanceEvaluator.cxx:63
 TQSignificanceEvaluator.cxx:64
 TQSignificanceEvaluator.cxx:65
 TQSignificanceEvaluator.cxx:66
 TQSignificanceEvaluator.cxx:67
 TQSignificanceEvaluator.cxx:68
 TQSignificanceEvaluator.cxx:69
 TQSignificanceEvaluator.cxx:70
 TQSignificanceEvaluator.cxx:71
 TQSignificanceEvaluator.cxx:72
 TQSignificanceEvaluator.cxx:73
 TQSignificanceEvaluator.cxx:74
 TQSignificanceEvaluator.cxx:75
 TQSignificanceEvaluator.cxx:76
 TQSignificanceEvaluator.cxx:77
 TQSignificanceEvaluator.cxx:78
 TQSignificanceEvaluator.cxx:79
 TQSignificanceEvaluator.cxx:80
 TQSignificanceEvaluator.cxx:81
 TQSignificanceEvaluator.cxx:82
 TQSignificanceEvaluator.cxx:83
 TQSignificanceEvaluator.cxx:84
 TQSignificanceEvaluator.cxx:85
 TQSignificanceEvaluator.cxx:86
 TQSignificanceEvaluator.cxx:87
 TQSignificanceEvaluator.cxx:88
 TQSignificanceEvaluator.cxx:89
 TQSignificanceEvaluator.cxx:90
 TQSignificanceEvaluator.cxx:91
 TQSignificanceEvaluator.cxx:92
 TQSignificanceEvaluator.cxx:93
 TQSignificanceEvaluator.cxx:94
 TQSignificanceEvaluator.cxx:95
 TQSignificanceEvaluator.cxx:96
 TQSignificanceEvaluator.cxx:97
 TQSignificanceEvaluator.cxx:98
 TQSignificanceEvaluator.cxx:99
 TQSignificanceEvaluator.cxx:100
 TQSignificanceEvaluator.cxx:101
 TQSignificanceEvaluator.cxx:102
 TQSignificanceEvaluator.cxx:103
 TQSignificanceEvaluator.cxx:104
 TQSignificanceEvaluator.cxx:105
 TQSignificanceEvaluator.cxx:106
 TQSignificanceEvaluator.cxx:107
 TQSignificanceEvaluator.cxx:108
 TQSignificanceEvaluator.cxx:109
 TQSignificanceEvaluator.cxx:110
 TQSignificanceEvaluator.cxx:111
 TQSignificanceEvaluator.cxx:112
 TQSignificanceEvaluator.cxx:113
 TQSignificanceEvaluator.cxx:114
 TQSignificanceEvaluator.cxx:115
 TQSignificanceEvaluator.cxx:116
 TQSignificanceEvaluator.cxx:117
 TQSignificanceEvaluator.cxx:118
 TQSignificanceEvaluator.cxx:119
 TQSignificanceEvaluator.cxx:120
 TQSignificanceEvaluator.cxx:121
 TQSignificanceEvaluator.cxx:122
 TQSignificanceEvaluator.cxx:123
 TQSignificanceEvaluator.cxx:124
 TQSignificanceEvaluator.cxx:125
 TQSignificanceEvaluator.cxx:126
 TQSignificanceEvaluator.cxx:127
 TQSignificanceEvaluator.cxx:128
 TQSignificanceEvaluator.cxx:129
 TQSignificanceEvaluator.cxx:130
 TQSignificanceEvaluator.cxx:131
 TQSignificanceEvaluator.cxx:132
 TQSignificanceEvaluator.cxx:133
 TQSignificanceEvaluator.cxx:134
 TQSignificanceEvaluator.cxx:135
 TQSignificanceEvaluator.cxx:136
 TQSignificanceEvaluator.cxx:137
 TQSignificanceEvaluator.cxx:138
 TQSignificanceEvaluator.cxx:139
 TQSignificanceEvaluator.cxx:140
 TQSignificanceEvaluator.cxx:141
 TQSignificanceEvaluator.cxx:142
 TQSignificanceEvaluator.cxx:143
 TQSignificanceEvaluator.cxx:144
 TQSignificanceEvaluator.cxx:145
 TQSignificanceEvaluator.cxx:146
 TQSignificanceEvaluator.cxx:147
 TQSignificanceEvaluator.cxx:148
 TQSignificanceEvaluator.cxx:149
 TQSignificanceEvaluator.cxx:150
 TQSignificanceEvaluator.cxx:151
 TQSignificanceEvaluator.cxx:152
 TQSignificanceEvaluator.cxx:153
 TQSignificanceEvaluator.cxx:154
 TQSignificanceEvaluator.cxx:155
 TQSignificanceEvaluator.cxx:156
 TQSignificanceEvaluator.cxx:157
 TQSignificanceEvaluator.cxx:158
 TQSignificanceEvaluator.cxx:159
 TQSignificanceEvaluator.cxx:160
 TQSignificanceEvaluator.cxx:161
 TQSignificanceEvaluator.cxx:162
 TQSignificanceEvaluator.cxx:163
 TQSignificanceEvaluator.cxx:164
 TQSignificanceEvaluator.cxx:165
 TQSignificanceEvaluator.cxx:166
 TQSignificanceEvaluator.cxx:167
 TQSignificanceEvaluator.cxx:168
 TQSignificanceEvaluator.cxx:169
 TQSignificanceEvaluator.cxx:170
 TQSignificanceEvaluator.cxx:171
 TQSignificanceEvaluator.cxx:172
 TQSignificanceEvaluator.cxx:173
 TQSignificanceEvaluator.cxx:174
 TQSignificanceEvaluator.cxx:175
 TQSignificanceEvaluator.cxx:176
 TQSignificanceEvaluator.cxx:177
 TQSignificanceEvaluator.cxx:178
 TQSignificanceEvaluator.cxx:179
 TQSignificanceEvaluator.cxx:180
 TQSignificanceEvaluator.cxx:181
 TQSignificanceEvaluator.cxx:182
 TQSignificanceEvaluator.cxx:183
 TQSignificanceEvaluator.cxx:184
 TQSignificanceEvaluator.cxx:185
 TQSignificanceEvaluator.cxx:186
 TQSignificanceEvaluator.cxx:187
 TQSignificanceEvaluator.cxx:188
 TQSignificanceEvaluator.cxx:189
 TQSignificanceEvaluator.cxx:190
 TQSignificanceEvaluator.cxx:191
 TQSignificanceEvaluator.cxx:192
 TQSignificanceEvaluator.cxx:193
 TQSignificanceEvaluator.cxx:194
 TQSignificanceEvaluator.cxx:195
 TQSignificanceEvaluator.cxx:196
 TQSignificanceEvaluator.cxx:197
 TQSignificanceEvaluator.cxx:198
 TQSignificanceEvaluator.cxx:199
 TQSignificanceEvaluator.cxx:200
 TQSignificanceEvaluator.cxx:201
 TQSignificanceEvaluator.cxx:202
 TQSignificanceEvaluator.cxx:203
 TQSignificanceEvaluator.cxx:204
 TQSignificanceEvaluator.cxx:205
 TQSignificanceEvaluator.cxx:206
 TQSignificanceEvaluator.cxx:207
 TQSignificanceEvaluator.cxx:208
 TQSignificanceEvaluator.cxx:209
 TQSignificanceEvaluator.cxx:210
 TQSignificanceEvaluator.cxx:211
 TQSignificanceEvaluator.cxx:212
 TQSignificanceEvaluator.cxx:213
 TQSignificanceEvaluator.cxx:214
 TQSignificanceEvaluator.cxx:215
 TQSignificanceEvaluator.cxx:216
 TQSignificanceEvaluator.cxx:217
 TQSignificanceEvaluator.cxx:218
 TQSignificanceEvaluator.cxx:219
 TQSignificanceEvaluator.cxx:220
 TQSignificanceEvaluator.cxx:221
 TQSignificanceEvaluator.cxx:222
 TQSignificanceEvaluator.cxx:223
 TQSignificanceEvaluator.cxx:224
 TQSignificanceEvaluator.cxx:225
 TQSignificanceEvaluator.cxx:226
 TQSignificanceEvaluator.cxx:227
 TQSignificanceEvaluator.cxx:228
 TQSignificanceEvaluator.cxx:229
 TQSignificanceEvaluator.cxx:230
 TQSignificanceEvaluator.cxx:231
 TQSignificanceEvaluator.cxx:232
 TQSignificanceEvaluator.cxx:233
 TQSignificanceEvaluator.cxx:234
 TQSignificanceEvaluator.cxx:235
 TQSignificanceEvaluator.cxx:236
 TQSignificanceEvaluator.cxx:237
 TQSignificanceEvaluator.cxx:238
 TQSignificanceEvaluator.cxx:239
 TQSignificanceEvaluator.cxx:240
 TQSignificanceEvaluator.cxx:241
 TQSignificanceEvaluator.cxx:242
 TQSignificanceEvaluator.cxx:243
 TQSignificanceEvaluator.cxx:244
 TQSignificanceEvaluator.cxx:245
 TQSignificanceEvaluator.cxx:246
 TQSignificanceEvaluator.cxx:247
 TQSignificanceEvaluator.cxx:248
 TQSignificanceEvaluator.cxx:249
 TQSignificanceEvaluator.cxx:250
 TQSignificanceEvaluator.cxx:251
 TQSignificanceEvaluator.cxx:252
 TQSignificanceEvaluator.cxx:253
 TQSignificanceEvaluator.cxx:254
 TQSignificanceEvaluator.cxx:255
 TQSignificanceEvaluator.cxx:256
 TQSignificanceEvaluator.cxx:257
 TQSignificanceEvaluator.cxx:258
 TQSignificanceEvaluator.cxx:259
 TQSignificanceEvaluator.cxx:260
 TQSignificanceEvaluator.cxx:261
 TQSignificanceEvaluator.cxx:262
 TQSignificanceEvaluator.cxx:263
 TQSignificanceEvaluator.cxx:264
 TQSignificanceEvaluator.cxx:265
 TQSignificanceEvaluator.cxx:266
 TQSignificanceEvaluator.cxx:267
 TQSignificanceEvaluator.cxx:268
 TQSignificanceEvaluator.cxx:269
 TQSignificanceEvaluator.cxx:270
 TQSignificanceEvaluator.cxx:271
 TQSignificanceEvaluator.cxx:272
 TQSignificanceEvaluator.cxx:273
 TQSignificanceEvaluator.cxx:274
 TQSignificanceEvaluator.cxx:275
 TQSignificanceEvaluator.cxx:276
 TQSignificanceEvaluator.cxx:277
 TQSignificanceEvaluator.cxx:278
 TQSignificanceEvaluator.cxx:279
 TQSignificanceEvaluator.cxx:280
 TQSignificanceEvaluator.cxx:281
 TQSignificanceEvaluator.cxx:282
 TQSignificanceEvaluator.cxx:283
 TQSignificanceEvaluator.cxx:284
 TQSignificanceEvaluator.cxx:285
 TQSignificanceEvaluator.cxx:286
 TQSignificanceEvaluator.cxx:287
 TQSignificanceEvaluator.cxx:288
 TQSignificanceEvaluator.cxx:289
 TQSignificanceEvaluator.cxx:290
 TQSignificanceEvaluator.cxx:291
 TQSignificanceEvaluator.cxx:292
 TQSignificanceEvaluator.cxx:293
 TQSignificanceEvaluator.cxx:294
 TQSignificanceEvaluator.cxx:295
 TQSignificanceEvaluator.cxx:296
 TQSignificanceEvaluator.cxx:297
 TQSignificanceEvaluator.cxx:298
 TQSignificanceEvaluator.cxx:299
 TQSignificanceEvaluator.cxx:300
 TQSignificanceEvaluator.cxx:301
 TQSignificanceEvaluator.cxx:302
 TQSignificanceEvaluator.cxx:303
 TQSignificanceEvaluator.cxx:304
 TQSignificanceEvaluator.cxx:305
 TQSignificanceEvaluator.cxx:306
 TQSignificanceEvaluator.cxx:307
 TQSignificanceEvaluator.cxx:308
 TQSignificanceEvaluator.cxx:309
 TQSignificanceEvaluator.cxx:310
 TQSignificanceEvaluator.cxx:311
 TQSignificanceEvaluator.cxx:312
 TQSignificanceEvaluator.cxx:313
 TQSignificanceEvaluator.cxx:314
 TQSignificanceEvaluator.cxx:315
 TQSignificanceEvaluator.cxx:316
 TQSignificanceEvaluator.cxx:317
 TQSignificanceEvaluator.cxx:318
 TQSignificanceEvaluator.cxx:319
 TQSignificanceEvaluator.cxx:320
 TQSignificanceEvaluator.cxx:321
 TQSignificanceEvaluator.cxx:322
 TQSignificanceEvaluator.cxx:323
 TQSignificanceEvaluator.cxx:324
 TQSignificanceEvaluator.cxx:325
 TQSignificanceEvaluator.cxx:326
 TQSignificanceEvaluator.cxx:327
 TQSignificanceEvaluator.cxx:328
 TQSignificanceEvaluator.cxx:329
 TQSignificanceEvaluator.cxx:330
 TQSignificanceEvaluator.cxx:331
 TQSignificanceEvaluator.cxx:332
 TQSignificanceEvaluator.cxx:333
 TQSignificanceEvaluator.cxx:334
 TQSignificanceEvaluator.cxx:335
 TQSignificanceEvaluator.cxx:336
 TQSignificanceEvaluator.cxx:337
 TQSignificanceEvaluator.cxx:338
 TQSignificanceEvaluator.cxx:339
 TQSignificanceEvaluator.cxx:340
 TQSignificanceEvaluator.cxx:341
 TQSignificanceEvaluator.cxx:342
 TQSignificanceEvaluator.cxx:343
 TQSignificanceEvaluator.cxx:344
 TQSignificanceEvaluator.cxx:345
 TQSignificanceEvaluator.cxx:346
 TQSignificanceEvaluator.cxx:347
 TQSignificanceEvaluator.cxx:348
 TQSignificanceEvaluator.cxx:349
 TQSignificanceEvaluator.cxx:350
 TQSignificanceEvaluator.cxx:351
 TQSignificanceEvaluator.cxx:352
 TQSignificanceEvaluator.cxx:353
 TQSignificanceEvaluator.cxx:354
 TQSignificanceEvaluator.cxx:355
 TQSignificanceEvaluator.cxx:356
 TQSignificanceEvaluator.cxx:357
 TQSignificanceEvaluator.cxx:358
 TQSignificanceEvaluator.cxx:359
 TQSignificanceEvaluator.cxx:360
 TQSignificanceEvaluator.cxx:361
 TQSignificanceEvaluator.cxx:362
 TQSignificanceEvaluator.cxx:363
 TQSignificanceEvaluator.cxx:364
 TQSignificanceEvaluator.cxx:365
 TQSignificanceEvaluator.cxx:366
 TQSignificanceEvaluator.cxx:367
 TQSignificanceEvaluator.cxx:368
 TQSignificanceEvaluator.cxx:369
 TQSignificanceEvaluator.cxx:370
 TQSignificanceEvaluator.cxx:371
 TQSignificanceEvaluator.cxx:372
 TQSignificanceEvaluator.cxx:373
 TQSignificanceEvaluator.cxx:374
 TQSignificanceEvaluator.cxx:375
 TQSignificanceEvaluator.cxx:376
 TQSignificanceEvaluator.cxx:377
 TQSignificanceEvaluator.cxx:378
 TQSignificanceEvaluator.cxx:379
 TQSignificanceEvaluator.cxx:380
 TQSignificanceEvaluator.cxx:381
 TQSignificanceEvaluator.cxx:382
 TQSignificanceEvaluator.cxx:383
 TQSignificanceEvaluator.cxx:384
 TQSignificanceEvaluator.cxx:385
 TQSignificanceEvaluator.cxx:386
 TQSignificanceEvaluator.cxx:387
 TQSignificanceEvaluator.cxx:388
 TQSignificanceEvaluator.cxx:389
 TQSignificanceEvaluator.cxx:390
 TQSignificanceEvaluator.cxx:391
 TQSignificanceEvaluator.cxx:392
 TQSignificanceEvaluator.cxx:393
 TQSignificanceEvaluator.cxx:394
 TQSignificanceEvaluator.cxx:395
 TQSignificanceEvaluator.cxx:396
 TQSignificanceEvaluator.cxx:397
 TQSignificanceEvaluator.cxx:398
 TQSignificanceEvaluator.cxx:399
 TQSignificanceEvaluator.cxx:400
 TQSignificanceEvaluator.cxx:401
 TQSignificanceEvaluator.cxx:402
 TQSignificanceEvaluator.cxx:403
 TQSignificanceEvaluator.cxx:404
 TQSignificanceEvaluator.cxx:405
 TQSignificanceEvaluator.cxx:406
 TQSignificanceEvaluator.cxx:407
 TQSignificanceEvaluator.cxx:408
 TQSignificanceEvaluator.cxx:409
 TQSignificanceEvaluator.cxx:410
 TQSignificanceEvaluator.cxx:411
 TQSignificanceEvaluator.cxx:412
 TQSignificanceEvaluator.cxx:413
 TQSignificanceEvaluator.cxx:414
 TQSignificanceEvaluator.cxx:415
 TQSignificanceEvaluator.cxx:416
 TQSignificanceEvaluator.cxx:417
 TQSignificanceEvaluator.cxx:418
 TQSignificanceEvaluator.cxx:419
 TQSignificanceEvaluator.cxx:420
 TQSignificanceEvaluator.cxx:421
 TQSignificanceEvaluator.cxx:422
 TQSignificanceEvaluator.cxx:423
 TQSignificanceEvaluator.cxx:424
 TQSignificanceEvaluator.cxx:425
 TQSignificanceEvaluator.cxx:426
 TQSignificanceEvaluator.cxx:427
 TQSignificanceEvaluator.cxx:428
 TQSignificanceEvaluator.cxx:429
 TQSignificanceEvaluator.cxx:430
 TQSignificanceEvaluator.cxx:431
 TQSignificanceEvaluator.cxx:432
 TQSignificanceEvaluator.cxx:433
 TQSignificanceEvaluator.cxx:434
 TQSignificanceEvaluator.cxx:435
 TQSignificanceEvaluator.cxx:436
 TQSignificanceEvaluator.cxx:437
 TQSignificanceEvaluator.cxx:438
 TQSignificanceEvaluator.cxx:439
 TQSignificanceEvaluator.cxx:440
 TQSignificanceEvaluator.cxx:441
 TQSignificanceEvaluator.cxx:442
 TQSignificanceEvaluator.cxx:443
 TQSignificanceEvaluator.cxx:444
 TQSignificanceEvaluator.cxx:445
 TQSignificanceEvaluator.cxx:446
 TQSignificanceEvaluator.cxx:447
 TQSignificanceEvaluator.cxx:448
 TQSignificanceEvaluator.cxx:449
 TQSignificanceEvaluator.cxx:450
 TQSignificanceEvaluator.cxx:451
 TQSignificanceEvaluator.cxx:452
 TQSignificanceEvaluator.cxx:453
 TQSignificanceEvaluator.cxx:454
 TQSignificanceEvaluator.cxx:455
 TQSignificanceEvaluator.cxx:456
 TQSignificanceEvaluator.cxx:457
 TQSignificanceEvaluator.cxx:458
 TQSignificanceEvaluator.cxx:459
 TQSignificanceEvaluator.cxx:460
 TQSignificanceEvaluator.cxx:461
 TQSignificanceEvaluator.cxx:462
 TQSignificanceEvaluator.cxx:463
 TQSignificanceEvaluator.cxx:464
 TQSignificanceEvaluator.cxx:465
 TQSignificanceEvaluator.cxx:466
 TQSignificanceEvaluator.cxx:467
 TQSignificanceEvaluator.cxx:468
 TQSignificanceEvaluator.cxx:469
 TQSignificanceEvaluator.cxx:470
 TQSignificanceEvaluator.cxx:471
 TQSignificanceEvaluator.cxx:472
 TQSignificanceEvaluator.cxx:473
 TQSignificanceEvaluator.cxx:474
 TQSignificanceEvaluator.cxx:475
 TQSignificanceEvaluator.cxx:476
 TQSignificanceEvaluator.cxx:477
 TQSignificanceEvaluator.cxx:478
 TQSignificanceEvaluator.cxx:479
 TQSignificanceEvaluator.cxx:480
 TQSignificanceEvaluator.cxx:481
 TQSignificanceEvaluator.cxx:482
 TQSignificanceEvaluator.cxx:483
 TQSignificanceEvaluator.cxx:484
 TQSignificanceEvaluator.cxx:485
 TQSignificanceEvaluator.cxx:486
 TQSignificanceEvaluator.cxx:487
 TQSignificanceEvaluator.cxx:488
 TQSignificanceEvaluator.cxx:489
 TQSignificanceEvaluator.cxx:490
 TQSignificanceEvaluator.cxx:491
 TQSignificanceEvaluator.cxx:492
 TQSignificanceEvaluator.cxx:493
 TQSignificanceEvaluator.cxx:494
 TQSignificanceEvaluator.cxx:495
 TQSignificanceEvaluator.cxx:496
 TQSignificanceEvaluator.cxx:497
 TQSignificanceEvaluator.cxx:498
 TQSignificanceEvaluator.cxx:499
 TQSignificanceEvaluator.cxx:500
 TQSignificanceEvaluator.cxx:501
 TQSignificanceEvaluator.cxx:502
 TQSignificanceEvaluator.cxx:503
 TQSignificanceEvaluator.cxx:504
 TQSignificanceEvaluator.cxx:505
 TQSignificanceEvaluator.cxx:506
 TQSignificanceEvaluator.cxx:507
 TQSignificanceEvaluator.cxx:508
 TQSignificanceEvaluator.cxx:509
 TQSignificanceEvaluator.cxx:510
 TQSignificanceEvaluator.cxx:511
 TQSignificanceEvaluator.cxx:512
 TQSignificanceEvaluator.cxx:513
 TQSignificanceEvaluator.cxx:514
 TQSignificanceEvaluator.cxx:515
 TQSignificanceEvaluator.cxx:516
 TQSignificanceEvaluator.cxx:517
 TQSignificanceEvaluator.cxx:518
 TQSignificanceEvaluator.cxx:519
 TQSignificanceEvaluator.cxx:520
 TQSignificanceEvaluator.cxx:521
 TQSignificanceEvaluator.cxx:522
 TQSignificanceEvaluator.cxx:523
 TQSignificanceEvaluator.cxx:524
 TQSignificanceEvaluator.cxx:525
 TQSignificanceEvaluator.cxx:526
 TQSignificanceEvaluator.cxx:527
 TQSignificanceEvaluator.cxx:528
 TQSignificanceEvaluator.cxx:529
 TQSignificanceEvaluator.cxx:530
 TQSignificanceEvaluator.cxx:531
 TQSignificanceEvaluator.cxx:532
 TQSignificanceEvaluator.cxx:533
 TQSignificanceEvaluator.cxx:534
 TQSignificanceEvaluator.cxx:535
 TQSignificanceEvaluator.cxx:536
 TQSignificanceEvaluator.cxx:537
 TQSignificanceEvaluator.cxx:538
 TQSignificanceEvaluator.cxx:539
 TQSignificanceEvaluator.cxx:540
 TQSignificanceEvaluator.cxx:541
 TQSignificanceEvaluator.cxx:542
 TQSignificanceEvaluator.cxx:543
 TQSignificanceEvaluator.cxx:544
 TQSignificanceEvaluator.cxx:545
 TQSignificanceEvaluator.cxx:546
 TQSignificanceEvaluator.cxx:547
 TQSignificanceEvaluator.cxx:548
 TQSignificanceEvaluator.cxx:549
 TQSignificanceEvaluator.cxx:550
 TQSignificanceEvaluator.cxx:551
 TQSignificanceEvaluator.cxx:552
 TQSignificanceEvaluator.cxx:553
 TQSignificanceEvaluator.cxx:554
 TQSignificanceEvaluator.cxx:555
 TQSignificanceEvaluator.cxx:556
 TQSignificanceEvaluator.cxx:557
 TQSignificanceEvaluator.cxx:558
 TQSignificanceEvaluator.cxx:559
 TQSignificanceEvaluator.cxx:560
 TQSignificanceEvaluator.cxx:561
 TQSignificanceEvaluator.cxx:562
 TQSignificanceEvaluator.cxx:563
 TQSignificanceEvaluator.cxx:564
 TQSignificanceEvaluator.cxx:565
 TQSignificanceEvaluator.cxx:566
 TQSignificanceEvaluator.cxx:567
 TQSignificanceEvaluator.cxx:568
 TQSignificanceEvaluator.cxx:569
 TQSignificanceEvaluator.cxx:570
 TQSignificanceEvaluator.cxx:571
 TQSignificanceEvaluator.cxx:572
 TQSignificanceEvaluator.cxx:573
 TQSignificanceEvaluator.cxx:574
 TQSignificanceEvaluator.cxx:575
 TQSignificanceEvaluator.cxx:576
 TQSignificanceEvaluator.cxx:577
 TQSignificanceEvaluator.cxx:578
 TQSignificanceEvaluator.cxx:579
 TQSignificanceEvaluator.cxx:580
 TQSignificanceEvaluator.cxx:581
 TQSignificanceEvaluator.cxx:582
 TQSignificanceEvaluator.cxx:583
 TQSignificanceEvaluator.cxx:584
 TQSignificanceEvaluator.cxx:585
 TQSignificanceEvaluator.cxx:586
 TQSignificanceEvaluator.cxx:587
 TQSignificanceEvaluator.cxx:588
 TQSignificanceEvaluator.cxx:589
 TQSignificanceEvaluator.cxx:590
 TQSignificanceEvaluator.cxx:591
 TQSignificanceEvaluator.cxx:592
 TQSignificanceEvaluator.cxx:593
 TQSignificanceEvaluator.cxx:594
 TQSignificanceEvaluator.cxx:595
 TQSignificanceEvaluator.cxx:596
 TQSignificanceEvaluator.cxx:597
 TQSignificanceEvaluator.cxx:598
 TQSignificanceEvaluator.cxx:599
 TQSignificanceEvaluator.cxx:600
 TQSignificanceEvaluator.cxx:601
 TQSignificanceEvaluator.cxx:602
 TQSignificanceEvaluator.cxx:603
 TQSignificanceEvaluator.cxx:604
 TQSignificanceEvaluator.cxx:605
 TQSignificanceEvaluator.cxx:606
 TQSignificanceEvaluator.cxx:607
 TQSignificanceEvaluator.cxx:608
 TQSignificanceEvaluator.cxx:609
 TQSignificanceEvaluator.cxx:610
 TQSignificanceEvaluator.cxx:611
 TQSignificanceEvaluator.cxx:612
 TQSignificanceEvaluator.cxx:613
 TQSignificanceEvaluator.cxx:614
 TQSignificanceEvaluator.cxx:615
 TQSignificanceEvaluator.cxx:616
 TQSignificanceEvaluator.cxx:617
 TQSignificanceEvaluator.cxx:618
 TQSignificanceEvaluator.cxx:619
 TQSignificanceEvaluator.cxx:620
 TQSignificanceEvaluator.cxx:621
 TQSignificanceEvaluator.cxx:622
 TQSignificanceEvaluator.cxx:623
 TQSignificanceEvaluator.cxx:624
 TQSignificanceEvaluator.cxx:625
 TQSignificanceEvaluator.cxx:626
 TQSignificanceEvaluator.cxx:627
 TQSignificanceEvaluator.cxx:628
 TQSignificanceEvaluator.cxx:629
 TQSignificanceEvaluator.cxx:630
 TQSignificanceEvaluator.cxx:631
 TQSignificanceEvaluator.cxx:632
 TQSignificanceEvaluator.cxx:633
 TQSignificanceEvaluator.cxx:634
 TQSignificanceEvaluator.cxx:635
 TQSignificanceEvaluator.cxx:636
 TQSignificanceEvaluator.cxx:637
 TQSignificanceEvaluator.cxx:638
 TQSignificanceEvaluator.cxx:639
 TQSignificanceEvaluator.cxx:640
 TQSignificanceEvaluator.cxx:641
 TQSignificanceEvaluator.cxx:642
 TQSignificanceEvaluator.cxx:643
 TQSignificanceEvaluator.cxx:644
 TQSignificanceEvaluator.cxx:645
 TQSignificanceEvaluator.cxx:646
 TQSignificanceEvaluator.cxx:647
 TQSignificanceEvaluator.cxx:648
 TQSignificanceEvaluator.cxx:649
 TQSignificanceEvaluator.cxx:650
 TQSignificanceEvaluator.cxx:651
 TQSignificanceEvaluator.cxx:652
 TQSignificanceEvaluator.cxx:653
 TQSignificanceEvaluator.cxx:654
 TQSignificanceEvaluator.cxx:655
 TQSignificanceEvaluator.cxx:656
 TQSignificanceEvaluator.cxx:657
 TQSignificanceEvaluator.cxx:658
 TQSignificanceEvaluator.cxx:659
 TQSignificanceEvaluator.cxx:660
 TQSignificanceEvaluator.cxx:661
 TQSignificanceEvaluator.cxx:662
 TQSignificanceEvaluator.cxx:663
 TQSignificanceEvaluator.cxx:664
 TQSignificanceEvaluator.cxx:665