#include <iostream>
#include <fstream>
#include <sstream>
#include <cstdlib>
#include <vector>
#include <iterator>
#include <iomanip>


#include "RooFitResult.h"
#include "RooMinimizer.h"
#include "RooDataSet.h"
#include "RooFitResult.h"
#include "RooAbsArg.h"
#include "RooRealVar.h"
#include "RooCategory.h"
#include "RooSimultaneous.h"
#include "RooProfileLL.h"
#include "RooPlot.h"
#include "TFile.h"
#include "TMath.h"
#include "Math/MinimizerOptions.h"

//#define _DEBUG_
#include "QFramework/TQLibrary.h"

#include "QFramework/TQStringUtils.h"
#include "QFramework/TQIterator.h"
#include "QFramework/TQUtils.h"
#include "QFramework/TQHistogramUtils.h"
#include "QFramework/TQPathManager.h"

#include "SFramework/TSStatisticsCalculator.h"
#include "SFramework/TSUtils.h"

#include "SFramework/RooFitUtils.h"
#ifdef HAS_RooFitUtils
#pragma message "using RooFitUtils ExtendedMinimizer"
#include <RooFitUtils/ExtendedMinimizer.h>
#define ROOFITUTILS true
#else
#pragma message "using standard RooMinimizer"
#define ROOFITUTILS false
#endif

ClassImp(TSStatisticsCalculator)


namespace {
  void statinfo(TString message) {
    std::cout << "SFramework/TSStatisticsCalculator: " << message.Data() << std::endl;
  }


  //__________________________________________________________________________________|___________

  void staterror(TString message) {
    statinfo(TQStringUtils::makeBoldRed(TString("ERROR: ") + message));
  }


  //__________________________________________________________________________________|___________

  void statwarn(TString message) {
    statinfo(TQStringUtils::makeBoldYellow(TString("WARNING: ") + message));
  }

}

//__________________________________________________________________________________|___________

TSStatisticsCalculator::TSStatisticsCalculator(const char* className) :
#ifdef HAS_RooFitUtils
  RooFitUtils::ExtendedMinimizer(className,NULL,NULL),
#endif
  fModelConfig(NULL)
{
	// default constructor
	(void)className; //silence compiler warning (unused parameter)
}


//__________________________________________________________________________________|___________

TSStatisticsCalculator::TSStatisticsCalculator(const char* className, RooWorkspace * ws) :
  TSStatisticsCalculator(className)
{
	// constructor taking workspace as an argument
  setWorkspace(ws);
}

//__________________________________________________________________________________|___________

TSStatisticsCalculator::TSStatisticsCalculator(const char* className, RooWorkspace * ws, TQFolder* snapshots) :
  TSStatisticsCalculator(className)
{
	// constructor taking workspace as an argument
	this->fSnapshots = snapshots;
  setWorkspace(ws);
}


//__________________________________________________________________________________|___________

TSStatisticsCalculator::~TSStatisticsCalculator() {
	// default destructor
}


//__________________________________________________________________________________|___________

void TSStatisticsCalculator::info(TString message) {
	// print an info message
	statinfo(message);
}


//__________________________________________________________________________________|___________

void TSStatisticsCalculator::error(TString message) {
	// print an error message
  info(TQStringUtils::makeBoldRed(TString("ERROR: ") + message));
}


//__________________________________________________________________________________|___________

void TSStatisticsCalculator::warn(TString message) {
	// print a warning message
  info(TQStringUtils::makeBoldYellow(TString("WARNING: ") + message));
}


//__________________________________________________________________________________|___________

Bool_t TSStatisticsCalculator::setWorkspace(RooWorkspace * ws) {
	// set the workspace
	if (!ws) {
		return false;
	}

	TObject * obj = ws->obj("ModelConfig");
	if (!obj) {
		return false;
	}

	fModelConfig = (RooStats::ModelConfig*)obj;
	fWorkspace = ws;
	return true;
}


//__________________________________________________________________________________|___________

RooWorkspace * TSStatisticsCalculator::getWorkspace() {
	// obtain the workspace
	return fWorkspace;
}

//__________________________________________________________________________________|___________

TQFolder * TSStatisticsCalculator::fitPdfToData(const TString& datasetName, TQTaggable * options) {
	// run a fit to the dataset with the given name using the given options
	DEBUGclass("entering function with name,options signature");
	// check for valid workspace and model config
	if (!fWorkspace){
		error("no workspace!");
		return NULL;
	}
	if (!fModelConfig){
		error("no model config!");
		return NULL;
	}

	// get data set to construct NLL from
	RooDataSet * data = (RooDataSet*)fWorkspace->data(datasetName.Data());
	if (!data) {
		error(TString::Format("no dataset '%s' available in workspace '%s'!",datasetName.Data(),fWorkspace->GetName()));
		return NULL;
	}

	// use standards for PDF and nuisance parameters
	RooAbsPdf * pdf		= fModelConfig->GetPdf();
	if (!pdf) {
		error("no Pdf associated to ModelConfig!");
		return NULL;
	}
	

	// nuisAndPOIs.add(*(fModelConfig->GetParametersOfInterest()));
	
	// finally create NLL
	return fitPdfToData(pdf, data, this->getNuisanceParameters(options), options);
}

//__________________________________________________________________________________|___________

void TSStatisticsCalculator::setup(const TString& datasetName, TQTaggable * options) {
  // setup a fit to the dataset with the given name using the given options
  DEBUGclass("entering function with name,options signature");
  // check for valid workspace and model config
  if (!fWorkspace){
    throw std::runtime_error("no workspace!");
  }
  if (!fModelConfig){
    throw std::runtime_error("no model config!");
  }

  // get data set to construct NLL from
  RooDataSet * data = (RooDataSet*)fWorkspace->data(datasetName.Data());
  if (!data) {
    throw std::runtime_error(TString::Format("no dataset '%s' available in workspace '%s'!",datasetName.Data(),fWorkspace->GetName()).Data());
  }

  // use standards for PDF and nuisance parameters
  RooAbsPdf * pdf		= fModelConfig->GetPdf();
  if (!pdf) {
    throw std::runtime_error("no Pdf associated to ModelConfig!");
  }

  // finally create NLL
  setup(pdf, data, this->getNuisanceParameters(options), options);
}

//__________________________________________________________________________________|___________

namespace {
  void buildArgs(TQTaggable* options, std::vector<RooCmdArg>& args, RooLinkedList& l, RooStats::ModelConfig* mc, bool onlyNllArgs){
    TString	minType		= ROOT::Math::MinimizerOptions::DefaultMinimizerType();
    TString	minAlgo		= ROOT::Math::MinimizerOptions::DefaultMinimizerAlgo();
    if (options) {
      options->getTagString("minimizerType", minType);
      options->getTagString("minimizerAlgo", minAlgo);
    }

    if(!onlyNllArgs){    
      args.push_back(RooFit::Minimizer(minType.Data(), minAlgo.Data()));
      args.push_back(RooFit::Save(true));
    }

    RooArgSet * runMinosArgs = NULL;
    if (options) {
      // set the starting strategy to 1 regardless
      if(!onlyNllArgs){
	Int_t defaultStrategy = 1;
	options->getTagInteger("startingStrategy", defaultStrategy);
	args.push_back(RooFit::Strategy(defaultStrategy));

	int  printLevel;
	if(options->getTagInteger("printLevel", printLevel)){
	  args.push_back(RooFit::PrintLevel(printLevel));
	}
	
	bool runMinos = options->getTagBoolDefault("runMinos",options->hasTag("runMinosVars.0"));
	bool useFindSigma = options->getTagBoolDefault("useFindSigma",false);
	if(runMinos){
	  std::vector<TString> runMinosVars = options->getTagVString("runMinosVars");
	  if(runMinosVars.size() > 0){
	    runMinosArgs = TSStatisticsCalculator::makeMinosArgSet(mc->GetWS(),runMinosVars);
	  } else {
	    runMinosArgs = const_cast<RooArgSet*>(mc->GetParametersOfInterest());
	  }
#ifdef HAS_RooFitUtils
	  if(useFindSigma){
	    args.push_back(RooFitUtils::ExtendedMinimizer::FindSigma(*runMinosArgs));
	  } else
#endif
	    {
	      args.push_back(RooFit::Minos(*runMinosArgs));
	    }
	} else {
	  args.push_back(RooFit::Minos(false));
	}

	Bool_t	runHesse;
	if(options->getTagBool("runHesse", runHesse)){
	  if(runHesse){
	    args.push_back(RooFit::Hesse(runHesse));
	  }
	}
	
      }
      Int_t numCPU;
      if(options->getTagInteger("numCPU", numCPU)){
        args.push_back(RooFit::NumCPU(numCPU, 1));
      }
      Double_t precision;
      if(options->getTagDouble("precision", precision)){
        args.push_back(RooFit::Precision(precision));
      }
#ifdef HAS_RooFitUtils      
      double eps;
      if(options->getTagDouble("eps", eps) || options->getTagDouble("tolerance", eps)){
        args.push_back(RooFitUtils::ExtendedMinimizer::Eps(eps));
      }
      if(options->getTagBoolDefault("reuseNll", false)){
        args.push_back(RooFitUtils::ExtendedMinimizer::ReuseNLL(1));
      }
      if(options->getTagBoolDefault("useChi2", false)){
        args.push_back(RooFitUtils::ExtendedMinimizer::UseChi2(1));
      }      
      bool reuse = false;
      if(options->getTagBool("reuseMinimizer", reuse)){
        args.push_back(RooFitUtils::ExtendedMinimizer::ReuseMinimizer(reuse));
      }
      int maxcalls = 10000;
      if(options->getTagInteger("maxCalls", maxcalls)){
        args.push_back(RooFitUtils::ExtendedMinimizer::MaxCalls(maxcalls));
      }
      int maxiterations = 10000;
      if(options->getTagInteger("maxIterations", maxiterations)){
        args.push_back(RooFitUtils::ExtendedMinimizer::MaxIterations(maxiterations));
      }      
      Int_t numRetry = options->getTagIntegerDefault("numRetry", 1);
      if(numRetry > 0){
        args.push_back(RooFitUtils::ExtendedMinimizer::NumRetryFit(numRetry));
      }
      bool minimize = true;
      if(options->getTagBool("minimize", minimize)){
        args.push_back(RooFitUtils::ExtendedMinimizer::Minimize(minimize));
      }
#endif      
      Int_t  constOpt;
      if(options->getTagInteger("constOptimize", constOpt)){
        args.push_back(RooFit::Optimize(constOpt));
      }
      bool offset;
      if(options->getTagBool("offset", offset)){
        args.push_back(RooFit::Offset(offset));
      }
    }
    RooArgSet nuis = TSStatisticsCalculator::getNuisanceParameters(mc,mc->GetWS(),options);
    args.push_back(RooFit::Constrain(nuis));
    const RooArgSet* globs = mc->GetGlobalObservables();
    args.push_back(RooFit::GlobalObservables(*globs));
    //    std::cout << "#NPs: " << nuis->getSize() << std::endl;
    //    std::cout << "#Globs: " << globs->getSize() << std::endl;
    //    std::cout << "#Obs: " << mc->GetObservables()->getSize() << std::endl;
    //    std::cout << "#POIs: " << mc->GetParametersOfInterest()->getSize() << std::endl;

    for(auto& arg:args){
      DEBUG("%s %s: %d %d %f %f %s %s %d",arg.GetName(),arg.opcode(),arg.getInt(0),arg.getInt(1),arg.getDouble(0),arg.getDouble(1),arg.getString(0),arg.getString(1),arg.getSet(0) ? (int)arg.getSet(0)->size() : 0);
      l.Add((TObject*)(&arg));
    }

  }
}

RooArgSet TSStatisticsCalculator::getPOIs(TQTaggable* options){
  // get the parameters of interest in a RooArgSet
  RooArgSet pois;  
  const RooArgSet* poisPtr = fModelConfig->GetParametersOfInterest();
  if(!poisPtr){
    staterror("unable to retrieve list of POIs from ModelConfig!");
    return pois;
  }

  Bool_t doRightSided			= false;
  options->getTagBool("~doRightSided", doRightSided);


  bool adjustPOI = options->getTagBoolDefault("fit.adjustPOI",false);
  std::vector<TString> poiNames = options->getTagVString("POI");
  std::vector<TString> constNames = options->getTagVString("const");
  if(poiNames.empty()) poiNames.push_back("*");

  std::vector<RooRealVar*> params;

  // collect things from the list of POIs
  ROOFIT_ITERATE(*poisPtr,RooAbsArg,obj){
    RooRealVar* poi = dynamic_cast<RooRealVar*>(obj);
    bool use = false;
    for(auto poiname:poiNames){
      if(TQStringUtils::matches(poi->GetName(),poiname)){
        use = true;
      }
    }
    for(auto poiname:constNames){
      if(TQStringUtils::matches(poi->GetName(),poiname)){
        use = false;
      }
    }

    if(use){
      params.push_back(poi);
    } else {
      poi->setConstant(true);
    }
  }

  // for explicitly listed parameters, also collect from the workspace
  for(const auto& pname:poiNames){
    if(pname.Contains("*")) continue;
    RooRealVar* v = fWorkspace->var(pname);
    if(v) params.push_back(v);
  }

  for(auto poi:params){
    pois.add(*poi);
    if(adjustPOI){
      if (!doRightSided) {
        poi->setRange(0, 40);
      } else {
        poi->setRange(-40, 40);
      }
    }
  }
  
  return pois;
}

//__________________________________________________________________________________|___________

TQFolder * TSStatisticsCalculator::minimizeNll(const TString& options) {
  // run the minimizer
  TQTaggable tags(options);
  return minimizeNll(&tags);
}

#ifdef HAS_RooFitUtils
namespace {
  template<class T> void setLabels(TH2* hist, const T& names){
    if(hist->GetXaxis()->GetNbins() != static_cast<int>(names.size())) throw std::runtime_error("binning mismatch in X");
    if(hist->GetYaxis()->GetNbins() != static_cast<int>(names.size())) throw std::runtime_error("binning mismatch in Y");
    int i = 1;
    for(const auto& name:names){
      hist          ->GetXaxis()->SetBinLabel(i,name);
      hist          ->GetYaxis()->SetBinLabel(i,name);
      i++;
    }
  }
  
  TQFolder * convertFitResults(const RooFitUtils::ExtendedMinimizer::Result* extresult, TQTaggable* options){
    // convert a RooFitResult into a TQFolder
    TQFolder * result = TQFolder::newFolder("fitResult");

    // minimized -log(L) value
    result->setTagDouble("minNll", extresult->min.nll);
    // status
    result->setTagInteger("status", extresult->min.status);

    std::vector<TString> paramNames;
    for(auto p:extresult->min.config.ParamsSettings()){
      paramNames.push_back(p.Name());
    }

    TString exportResult;
    TFile* f = NULL;
    if(options->getTagString("writeResult",exportResult)){
      f = TFile::Open(exportResult,"RECREATE");
    }
    if(extresult->min.ok()){
      RooFitResult* fitResult = extresult->min.fit;
      if(fitResult){
        // estimated distance to minimum
        result->setTagDouble("edm", fitResult->edm());
        
        if(f) f->Add(fitResult->Clone());
        
        for (UInt_t i = 0; i < fitResult->numStatusHistory(); i++) {
          result->setTagInteger(TString::Format("status.%s", fitResult->statusLabelHistory(i)),
                                fitResult->statusCodeHistory(i));
        }
        // number of NLL evaluations with problems
        result->setTagInteger("numInvalidNLL", fitResult->numInvalidNLL());
        
        // parameters
        TQFolder* constPars      = TSUtils::convertParameterList(&fitResult->constPars());
        TQFolder* floatParsInit  = TSUtils::convertParameterList(&fitResult->floatParsInit());
        TQFolder* floatParsFinal = TSUtils::convertParameterList(&fitResult->floatParsFinal());

        result->addObject(constPars,"::constPars");
        result->addObject(floatParsInit,"::floatParsInit");
        result->addObject(floatParsFinal,"::floatParsFinal");
      } else {
        TQFolder* floatParsInit = result->getFolder("floatParsInit+");
        TQFolder* floatParsFinal = result->getFolder("floatParsFinal+");        
        for(const auto& par:extresult->min.parameters){
          TQFolder* p = floatParsInit->getFolder(par.name+"+");
          p->setTagDouble("val",par.value);
          p->setTagDouble("errHi",par.errHi);
          p->setTagDouble("errLo",par.errLo);
          floatParsFinal->getFolder(par.name+"+")->importTags(p);
        }
      }
        
      // MINUIT quality code of covariance matrix
      result->setTagInteger("covQual", extresult->min.covqual);
      if(extresult->min.hesse){
        TH2* hHesse = TQHistogramUtils::convertMatrixToHistogram(extresult->min.hesse,"hesse");
        setLabels(hHesse,paramNames);
        if(f) f->Add(hHesse->Clone());
        result->addObject(hHesse);            
        Double_t determ = 0;
        result->setTagDouble("hesse.determinant",determ);
        TMatrixDSym cov = extresult->min.hesse->Invert(&determ);
        if(determ != 0){
          TMatrixDSym corr = TSUtils::getCorrelationMatrix(cov);
          TH2* hCov   = TQHistogramUtils::convertMatrixToHistogram(&cov, "covariance");
          TH2* hCorr  = TQHistogramUtils::convertMatrixToHistogram(&corr,"correlation");
          setLabels(hCov,paramNames);
          setLabels(hCorr,paramNames);
          if(f) f->Add(hCov->Clone());          
          if(f) f->Add(hCorr->Clone());                    
          result->addObject(hCov);      
          result->addObject(hCorr);
        }
      }
    }
    if(f){
      f->Write();
      f->Close();
      delete f;
    }
    return result;
  }
}
#endif


//__________________________________________________________________________________|___________

TQFolder * TSStatisticsCalculator::minimizeNll(TQTaggable* options) {
  // run the minimizer
  if(!options){
    this->error("invalid options passed to minimization function!");
    return NULL;
  }
  bool useRooFitUtils = options->getTagBoolDefault("useRooFitUtils",ROOFITUTILS);  

  RooFitResult * fitResult = NULL;
  int status = -1;
  int ndim = 0;

  this->setParameterValues(options,"initParam");
  this->setParameterErrors(options,"initParamError");

  // make sure that the parameters are the same as in the workspace
  if(fNll){
    RooArgSet* args = fNll->getVariables();
    TSUtils::setParameterValues(args,fWorkspace->allVars());
    TSUtils::setParametersConstFloat(args,fWorkspace->allVars());
    delete args;
  }

  TString outfile;
  bool redirect=options->getTag("logToFile",outfile);
  if(redirect){
    TString fname = options->replaceInText(outfile);
    fname = TQPathManager::getPathManager()->getTargetPath(fname);
    TQUtils::ensureDirectoryForFile(fname);
    statinfo(TString::Format("writing log of minimization to '%s'",fname.Data()));
    TQLibrary::redirect(fname,true);
  }

  // run the minimizer

#ifdef HAS_RooFitUtils
  RooFitUtils::ExtendedMinimizer::Result* extResult = NULL;
#endif
  Double_t tMini	= 0.;
  Double_t tHesse	= 0.;
  Double_t tMinos	= 0.;
  int strat = options->getTagIntegerDefault("startingStrategy", 1);
  if(useRooFitUtils){
#ifdef HAS_RooFitUtils
    DEBUG("starting extended minimizer");
    TString reproducer;
    if(options->getTagString("writeReproducer",reproducer)){
      statinfo(TString::Format("writing reproducer to '%s'",reproducer.Data()));
      this->writeReproducer(reproducer.Data());
    }
    extResult = RooFitUtils::ExtendedMinimizer::run();
    DEBUG("fit completed");
    fitResult = extResult->min.fit;
    status = extResult->min.status;
    ndim = extResult->min.ndim;
    strat = extResult->min.strategy;
#else
    throw std::runtime_error("RooFitUtils not available!");
#endif
  } else {
    // default settings used if not overwritten by options
    //	Bool_t	saveNLL		= false;
    Bool_t	verbose		= false;
    Bool_t	runMinos	= false;
    Bool_t	runHesse	= false;
    Int_t	printLevel	= -1;
    TString	minType		= ROOT::Math::MinimizerOptions::DefaultMinimizerType();
    TString	minAlgo		= ROOT::Math::MinimizerOptions::DefaultMinimizerAlgo();
    Double_t tolerance = 1.;
  
    if (options) {
      //		options->getTagBool("saveNLL", saveNLL);
      options->getTagBool("verbose", verbose);
      options->getTagBool("runMinos", runMinos);
      options->getTagBool("runHesse", runHesse);
      options->getTagInteger("printLevel", printLevel);
      options->getTagString("minimizerType", minType);
      options->getTagString("minimizerAlgo", minAlgo);
      options->getTagDouble("tolerance", tolerance);
      options->getTagDouble("eps", tolerance);
    }
  
    // check for valid input
    if (!this->fNll) {
      return NULL;
    }
  
    bool minimize = options->getTagBoolDefault("minimize",true);
    int forceRetry = options->getTagIntegerDefault("forceRetry",0);    
    try {
      RooMinimizer minimizer(*(this->fNll));
      minimizer.setPrintLevel(printLevel);
      minimizer.setEps(tolerance);
  
      // measure time needed to run minimizer, HESSE, and MINOS
      TStopwatch sw;
  
      Bool_t done = false;
      Int_t maxStrat = 2;
      for (; strat <= maxStrat && !done; ++strat) {
  
        // set strategy for minimization
        minimizer.setStrategy(strat);
  
        // perform the fit
        sw.Start(true);
        DEBUG("starting native minimizer");
        ndim = TSUtils::nParameters(minimizer);
        if(minimize && ndim>0){
          status = minimizer.minimize(minType.Data(), minAlgo.Data());
        } else {
          status = 0;
        }
  
        sw.Stop();
        tMini += sw.RealTime();
  
        // check status of fit an repeat trying different strategy if it failed
        if (status < 0 || forceRetry>0) {
	  --forceRetry;
          TString msg = TString::Format("minimizeNll(...): "
                                        "Fit using strategy %d failed with status %d", strat, status);
          if (strat < maxStrat) {
            msg.Append(TString::Format(". Will retry with strategy %d ...", strat + 1));
            statwarn(msg);
          } else {
            msg.Append(". Stopping!");
            staterror(msg);
          }
          continue;
        } else {
          statinfo(TString::Format("minimizeNll(...): Fit using strategy %d converged with status %d", strat, status));
        }
        // run HESSE if requested
        if (runHesse) {
          sw.Start(true);
          statinfo("minimizeNll(...): running hesse after minimization (this might take a while) ...");
          int hesseStatus = minimizer.hesse();
          statinfo(TString::Format("minimizeNll(...): hesse finished with status %d",hesseStatus));          
          sw.Stop();
          tHesse = sw.RealTime();
        }
        
        // run MINOS if requested
        if (runMinos) {
          statinfo("minimizeNll(...): running minos after minimization (this might take a while) ...");  
          TString runMinosVars;
          RooArgSet * runMinosArgset = NULL;
  
          std::vector<TString> runMinos;
          if(options) runMinos = options->getTagVString("runMinosVars");
          runMinosArgset = this->makeMinosArgSet(this->fWorkspace,runMinos);
  
          if (runMinosArgset) {
            sw.Start(true);
            minimizer.minos(*runMinosArgset);
            sw.Stop();
            tMinos = sw.RealTime();
            delete runMinosArgset;
          } else {
            statwarn("minimizeNll(...): MINOS variables not "
                     "found or set constant. Skipping MINOS ...");
          }
        }
  
        done = true;
      }
  
      // fit results
      fitResult = minimizer.save();
    } catch (std::string& s){
      throw std::runtime_error(s);
    }
  }

  TQLibrary::restore();

  // read the fit result

  TQFolder* result = NULL;

  TString saveSnapshot;
  if (options && options->getTagString("saveSnapshot", saveSnapshot)) {
    info(TString::Format("saving fit snapshot as '%s'",saveSnapshot.Data()));
    fWorkspace->saveSnapshot(saveSnapshot.Data(), fWorkspace->allVars());
  }

  if(useRooFitUtils){
#ifdef HAS_RooFitUtils
    result = ::convertFitResults(extResult,options);
#else
    throw std::runtime_error("RooFitUtils not available!");
#endif
  } else {
    if(fitResult){
      TString exportResult;
      if(options->getTagString("writeResult",exportResult)){
        TFile* f = TFile::Open(exportResult,"RECREATE");
        f->Add(fitResult->Clone());
        f->Write();
        f->Close();
      }      
      result = TSUtils::convertFitResults(fitResult,options,NULL);
    }
  }
  
  TString resultname;
  if(options->getTagString("resultName",resultname)){
    result->SetName(resultname);
  }
  result->setTagInteger("status",status);

  
  // finalize the result
  if(result){
    result->setTagDouble("strategy",strat);
    result->setTagInteger("nDim", ndim);
    if(!useRooFitUtils){
      // time needed to perform the fit
      Double_t tTotal = tMini + tHesse + tMinos;
      if (tTotal > 0.) {
        result->setTagDouble("time.total", tTotal);
      }
      if (tMini > 0.) {
        result->setTagDouble("time.MINIMIZE", tMini);
      }
      if (tHesse > 0.) {
        result->setTagDouble("time.HESSE", tHesse);
      }
      if (tMinos > 0.) {
        result->setTagDouble("time.MINOS", tMinos);
      }
    } 
  } else {
    result = new TQFolder("error");
    result->setTagInteger("status",status);
    result->setTagString("error","no fit result!");
  }

#ifdef HAS_RooFitUtils
  if(extResult) delete extResult;
#endif
  
  if(fitResult) delete fitResult;
  return result;
}

//__________________________________________________________________________________|___________

RooArgSet* TSStatisticsCalculator::makeMinosArgSet(RooWorkspace* ws, const std::vector<TString>& filters){
  // collect all variables from a workspace and make them into a RooArgSet suitable to pass to Minos according to the filters given
  RooArgSet allVars(ws->allVars());
  RooArgSet* runMinosArgSet = NULL;
  ROOFIT_ITERATE(allVars,TObject,obj){
    if (!obj->InheritsFrom(RooAbsReal::Class())) {
      continue;
    }
    RooAbsReal * var = (RooAbsReal*)obj;

    bool ok = (filters.size()==0);
    for(auto filter:filters){
      if (TQStringUtils::matches(var->GetName(), filter)){
        ok=true;
      }
    }
    if(!ok) continue;
    if (var->isConstant()) {
      // statwarn because constant variable passed explicit filter
      //      statwarn(TString::Format("minimizeNll(...): Variable '%s' set constant. "
      //                           "Not considering for MINOS ...", var->GetName()));
      //
      continue;
    }

    // add variable to list of MINOS vars
    if (!runMinosArgSet) {
      runMinosArgSet = new RooArgSet();
    }
    runMinosArgSet->add(*var);
  }
  return runMinosArgSet;
}

//__________________________________________________________________________________|___________

void TSStatisticsCalculator::setParameterValues(TQTaggable* options, const TString& prefix){
  // the parameters in the workspace to the values given by the tags
  RooArgList allVars(fWorkspace->allVars());
  TSUtils::setParameterValues(&allVars,options,prefix,false);
}

//__________________________________________________________________________________|___________

void TSStatisticsCalculator::setParameterErrors(TQTaggable* options, const TString& prefix){
  // the parameters in the workspace to the values given by the tags
  RooArgList allVars(fWorkspace->allVars());
  TSUtils::setParameterErrors(&allVars,options,prefix,false);
}


//__________________________________________________________________________________|___________

TQFolder * TSStatisticsCalculator::fitPdfToData(RooAbsPdf * pdf, RooDataSet * data, const RooArgSet& constrain, const TString& options) {
  // fit a PDF to a dataset, given constraints and options
  DEBUGclass("entering function with pdf,data,constrain,options signature");

  TQTaggable tags(options);
  return fitPdfToData(pdf, data, constrain, &tags);
}

//__________________________________________________________________________________|___________

void TSStatisticsCalculator::setParametersConstFloat(const RooArgSet& params, TQTaggable * options) {
  // set parameters to constant or floating depending on the options given
  setParametersConstFloat(&params,options);
}

//__________________________________________________________________________________|___________

void TSStatisticsCalculator::setParametersConstFloat(const RooArgSet * params, TQTaggable * options) {
  // set parameters to constant or floating depending on the options given
  if(!params || params->getSize() < 1){
    error("empty parameter list given!");
    return;
  }
  if(!options){
    error("empty options given!");
    return;
  }
  int verbose = options->getTagIntegerDefault("verbose",0);
  bool setmode = options->getTagIntegerDefault("setMode",false);
  std::vector<TString> constPars   = options->getTagVString("constPars");
  std::vector<TString> constExcept = options->getTagVString("constPars.except");
  std::vector<TString> floatPars   = options->getTagVString("floatPars");
  std::vector<TString> floatExcept = options->getTagVString("floatPars.except");
  ROOFIT_ITERATE(*params,RooAbsArg,arg){
    RooRealVar * var = dynamic_cast<RooRealVar*>(arg);
    if(!var) continue;
    bool setConst = false;
    for(const auto& p:constPars){
      if(TQStringUtils::matches(var->GetName(), p)){
        setConst = true;
        for(const auto& p2:constExcept){
          if(TQStringUtils::matches(var->GetName(), p2)) setConst = false;
        }
      }
    }
    bool setFloat = false;
    for(const auto& p:floatPars){
      if(TQStringUtils::matches(var->GetName(), p)){
        setFloat = true;
          for(const auto& p2:floatExcept){
            if(TQStringUtils::matches(var->GetName(), p2)) setFloat = false;
          }
      }
    }
    if(setConst && !setFloat){
      if (verbose>1) info(TString::Format("setting parameter '%s' to constant",var->GetName()));
      var->setConstant(true);
    }
    if(setFloat && !setConst){
      if (verbose>1) info(TString::Format("setting parameter '%s' to floating",var->GetName()));
      var->setConstant(false);
      if(setmode) var->setOperMode(RooAbsArg::ADirty,true);
    }
    if(setFloat && setConst){
      warn(TString::Format("refusing to change const property of parameter '%s' matching both constPars='%s' and floatPars='%s'",var->GetName(),TQStringUtils::concat(constPars,",").Data(),TQStringUtils::concat(floatPars,",").Data()));
    }
  }
}

//__________________________________________________________________________________|___________

TQFolder * TSStatisticsCalculator::fitPdfToData(RooAbsPdf * pdf, RooDataSet * data, const RooArgSet& constrain, TQTaggable * options) {
  // fit a PDF to a dataset, given constraints and options
  DEBUGclass("entering function with pdf,data,constrain,options signature");
  if(!options){
    staterror("invalid options passed to fitting function!");
    return NULL;
  }

  bool useFitTo = options->getTagBoolDefault("useFitTo",false);

  TQFolder* result = NULL;
  
  if(useFitTo){
    bool loadsnapshot = options->getTagBoolDefault("loadSnapshot",true);
    TString snapshot = options->getTagStringDefault("snapshot","SnSh_AllVars_Nominal");
    if(loadsnapshot){
      fWorkspace->loadSnapshot(snapshot);
    }
    RooFitResult* rfr = pdf->fitTo(*data,RooFit::Save(true));
    result = TSUtils::convertFitResults(rfr);
    delete rfr;
  } else {
    DEBUGclass("performing setup");
    this->setup(pdf,data,constrain,options);
    DEBUGclass("starting minimize");
    result = this->minimizeNll(options);
  }
  
  // return fit results
  return result;
}

//__________________________________________________________________________________|___________

void TSStatisticsCalculator::clear(){
  // delete all cached and temporary objects
  if(this->fNll){
    delete this->fNll;
    this->fNll = NULL;
  }
}

//__________________________________________________________________________________|___________

void TSStatisticsCalculator::setup(RooAbsPdf * pdf, RooDataSet * data, const RooArgSet& constrain, TQTaggable * options) {
  // setup function to initialize the minimizer
  DEBUGclass("entering function");

  // load nominal snapshot
  bool loadsnapshot = options->getTagBoolDefault("loadSnapshot",true);
  TString snapshot = options->getTagStringDefault("snapshot","SnSh_AllVars_Nominal");
  if(loadsnapshot){
    if(!fWorkspace->loadSnapshot(snapshot)){
      throw std::runtime_error(TString::Format("unable to load snapshot '%s'",snapshot.Data()).Data());
    } else {
      info(TString::Format("starting from snapshot '%s'",snapshot.Data()));
    }
  }

  bool useRooFitUtils = options->getTagBoolDefault("useRooFitUtils",ROOFITUTILS);
  
  DEBUGclass("preparing for nll creation");
  this->setParameterValues(options,"presetParam");
  this->setParameterErrors(options,"presetParamError");
  this->setParametersConstFloat(fWorkspace->allVars(),options);

  TString outfile;
  bool redirect=options->getTag("logToFile",outfile);
  if(redirect){
    TString fname = options->replaceInText(outfile);
    fname = TQPathManager::getPathManager()->getTargetPath(fname);
    TList* l = TQUtils::execute("rm -f "+outfile);
    delete l;
    statinfo(TString::Format("writing log of Nll creation to '%s'",fname.Data()));
    TQUtils::ensureDirectoryForFile(fname);
    TQLibrary::redirect(fname,false);
  }
  int nfloat = TSUtils::countFloatParameters(fWorkspace->allVars());
  if(loadsnapshot){
    info(TString::Format("loaded snapshot '%s' for Nll construction, %d parameters floating",snapshot.Data(),nfloat));
  } else {
    info(TString::Format("using current workspace configruation for Nll construction, %d parameters floating",nfloat));
  }
  
  bool reuse = options->getTagBoolDefault("reuseNll",false);
  if(this->fNll && !reuse){
    this->clear();
  }

  TString writePreWS;
  if(options->getTagString("writeWorkspacePreNll",writePreWS)){
    this->fWorkspace->writeToFile(TQPathManager::getPathManager()->getTargetPath(writePreWS).c_str(),true);
  }

  if(!useRooFitUtils){  
    // this part uses the local implementation of the minimization
    RooLinkedList l;
    std::vector<RooCmdArg> owner;
    buildArgs(options,owner,l,fModelConfig,true);    
    this->fNll = pdf->createNLL(*data, l);
  } else {
#ifndef HAS_RooFitUtils
    throw std::runtime_error("RooFitUtils not available!");
#else
    // this part uses the ExtendedMinimizer from RooFitUtils
    this->SetPdf(pdf);
    this->SetData(data);
    RooLinkedList l;
    std::vector<RooCmdArg> owner;
    buildArgs(options,owner,l,fModelConfig,false);
    //    for(auto it:owner){
    //      std::cout << it.GetName() << " " << (it.getString(0)?it.getString(0):"") << " " << it.getInt(0) << std::endl;
    //    }
    
    if(!this->fNll || !reuse) RooFitUtils::ExtendedMinimizer::parseNllConfig(l);
    RooFitUtils::ExtendedMinimizer::parseFitConfig(l);
    RooFitUtils::ExtendedMinimizer::setup();
    RooFitUtils::ExtendedMinimizer::initialize();
    
#endif
  }

  if(!fNll){
    if(redirect) TQLibrary::restore();
    throw std::runtime_error("construction of Nll failed!");
  }
  
  RooArgSet* allVars = fNll->getVariables();
  if(loadsnapshot){
    fWorkspace->loadSnapshot(snapshot);
  }

  DEBUGclass("preparing nll");
  #ifdef _DEBUG_
  options->printTags();
  #endif
  this->setParameterValues(options,"presetParam");
  this->setParameterErrors(options,"presetParamError");
  this->setParametersConstFloat(fWorkspace->allVars(),options);

  TSUtils::setParameterValues(allVars,fWorkspace->allVars());
  TSUtils::setParametersConstFloat(allVars,fWorkspace->allVars());
  int npars = TSUtils::countFloatParameters(allVars);
  if(npars != nfloat){
    std::stringstream ss;
    ss << "parameters are: " << fModelConfig->GetObservables()->getSize() << " observables\n";
    for(const auto& p:fWorkspace->allVars()){
      RooRealVar* v = static_cast<RooRealVar*>(allVars->find(p->GetName()));
      if(fModelConfig && fModelConfig->GetObservables()->find(p->GetName())) continue;
      if(!v){ ss << "  " << p->GetName() << " (missing)\n"; continue; }
      if(v->isConstant() && !p->isConstant()) ss << "  " << p->GetName() << " (const)\n";
      if(p->isConstant() && !v->isConstant()) ss << "  " << p->GetName() << " (float)\n";
    }
    info(ss.str());
  }
  delete allVars;

//  RooMsgService::instance().saveState();
//  RooMsgService::instance().setGlobalKillBelow(RooFit::DEBUG);
//  RooMsgService::instance().addStream(RooFit::DEBUG,RooFit::Topic(RooFit::Eval));
  double val = fNll->getVal();
//  RooMsgService::instance().restoreState();
  this->resetOffset();

  if(!TQUtils::isNum(val)){
    if(redirect) TQLibrary::restore();
    throw std::runtime_error(TString::Format("construction of Nll failed, initial value is %g",val).Data());
  }

  info(TString::Format("constructed Nll with %d floating parameters and starting value %g",npars,val));

  if(redirect) TQLibrary::restore();

  TString writePostWS;
  if(options->getTagString("writeWorkspacePostNll",writePostWS)){
    this->fWorkspace->writeToFile(TQPathManager::getPathManager()->getTargetPath(writePostWS).c_str(),true);
  }

}

//__________________________________________________________________________________|___________

bool TSStatisticsCalculator::loadSnapshot(TQTaggable * options) {
  // load a snapshot according to the options - if it doesn't exist, create it
  TString datasetName = options->getTagStringDefault("dataset",options->getTagStringDefault("datasetName", "obsData"));
  TString snapshot = options->getTagStringDefault("snapshot",TString::Format("SnSh_AllVars_Unconditional_%s", datasetName.Data()));
  TQFolder* retval = NULL;
  if(fSnapshots){
    retval = fSnapshots->getFolder(snapshot);
  }
  bool ok = fWorkspace->loadSnapshot(snapshot.Data());
  if(!ok){
    TString snapshotName = options->getTagStringDefault("snapshot.nominal","SnSh_AllVars_Nominal");
    info(TString::Format("no snapshot named '%s' found, generating based on '%s' ...",snapshot.Data(),snapshotName.Data()));

    TQTaggable fitOptions(options);
    fitOptions.setTagString("snapshot",snapshotName);
    retval = fitPdfToData(datasetName, &fitOptions);

    if(retval){
      int status = retval->getTagIntegerDefault("status",-1);
      if(status == 0 || status == 1){
        fWorkspace->saveSnapshot(snapshot.Data(), fWorkspace->allVars());
        info(TString::Format("saved snapshot '%s', %d parameters floating",snapshot.Data(),TSUtils::countFloatParameters(fWorkspace->allVars())));
        ok = true;
        retval->SetName(snapshot.Data());
        if(fSnapshots){
          fSnapshots->addFolder(retval);
        }
        return true;
      } else {
        error(TString::Format("fit for creation of snapshot '%s' failed with status %d",snapshot.Data(),status));
        return false;
      }
    } else {
      error(TString::Format("fit for creation of snapshot '%s' failed",snapshot.Data()));
      return false;
    }
  }

  return ok;
}

//__________________________________________________________________________________|___________

void TSStatisticsCalculator::unfoldConstraints(RooArgSet &initial, RooArgSet &final,
                                               RooArgSet &obs, RooArgSet &nuis, Int_t &counter) {

  if (counter > 100) {
    throw std::runtime_error("unfoldConstraints(...): Failed to unfold constraints");
  }

  ROOFIT_ITERATE(initial,RooAbsArg,arg){
    RooAbsPdf* pdf = dynamic_cast<RooAbsPdf*>(arg);
    RooArgSet nuis_tmp = nuis;
    RooArgSet constraint_set(*pdf->getAllConstraints(obs, nuis_tmp, false));
    std::string className(pdf->ClassName());
    if (className != "RooGaussian" && className != "RooLognormal" && className != "RooGamma" && className != "RooPoisson" && className != "RooBifurGauss") {
      counter++;
      unfoldConstraints(constraint_set, final, obs, nuis, counter);
    } else {
      final.add(*pdf);
    }
  }
}

//__________________________________________________________________________________|___________

RooStats::ModelConfig* TSStatisticsCalculator::getModelConfig(){
  // obtain the modelconfig
  return this->fModelConfig;
}

//__________________________________________________________________________________|___________

RooArgSet TSStatisticsCalculator::getNuisanceParameters(TQTaggable* options){
  // obtain the list of nuisance parameters
  return getNuisanceParameters(this->fModelConfig,this->fWorkspace,options);
}

//__________________________________________________________________________________|___________

RooArgSet TSStatisticsCalculator::getNuisanceParameters(RooStats::ModelConfig* mc, RooWorkspace* ws, TQTaggable* options){
  // obtain the list of nuisance parameters  

  RooArgSet nuis;
  if(mc->GetNuisanceParameters()){
    nuis.add(*mc->GetNuisanceParameters());
  }
  for(const auto& np:options->getTagVString("addNPs")){
    for(const auto& p:ws->allVars()){
      if(TQStringUtils::matches(p->GetName(),np))
	nuis.add(*p);
    }
  }
  return nuis;
}

//__________________________________________________________________________________|___________

const RooArgSet* TSStatisticsCalculator::getPOIs(){
	// obtain the list of parameters of interest
	return this->fModelConfig ? this->fModelConfig->GetParametersOfInterest() : NULL;
}

//__________________________________________________________________________________|___________

void TSStatisticsCalculator::resetOffset(){
  // reset the likelihood offset to the current coordinates
  if(!this->fNll){
    throw std::runtime_error("unable to reset offset without Nll!");
  }
  if(this->fNll->isOffsetting()){
    this->fNll->enableOffsetting(false);
    this->fNll->enableOffsetting(true);
    this->fNll->getVal();
  }
}

//__________________________________________________________________________________|___________

RooAbsPdf* TSStatisticsCalculator::getPdf(){
  // return the internal Pdf
  if(!this->fModelConfig) return NULL;
  return this->fModelConfig->GetPdf();
}

//__________________________________________________________________________________|___________

RooSimultaneous* TSStatisticsCalculator::getSimPdf(){
  // retrieve the internal Pdf as a RooSimultaneous, returns NULL for any other Pdf type
  return dynamic_cast<RooSimultaneous*>(this->getPdf());
}

//__________________________________________________________________________________|___________

RooCategory* TSStatisticsCalculator::getIndexCategory(){
  // retrieve the index category of the simPdf, returns NULL for any other Pdf type
  RooSimultaneous* simPdf = this->getSimPdf();
  if(!simPdf) return NULL;
  return const_cast<RooCategory*>(static_cast<const RooCategory*>(&(simPdf->indexCat())));
}

//__________________________________________________________________________________|___________

const RooArgSet* TSStatisticsCalculator::getNuisanceParameters(){
  if(!this->fModelConfig) return NULL;
  return this->fModelConfig->GetNuisanceParameters();  
}
 TSStatisticsCalculator.cxx:1
 TSStatisticsCalculator.cxx:2
 TSStatisticsCalculator.cxx:3
 TSStatisticsCalculator.cxx:4
 TSStatisticsCalculator.cxx:5
 TSStatisticsCalculator.cxx:6
 TSStatisticsCalculator.cxx:7
 TSStatisticsCalculator.cxx:8
 TSStatisticsCalculator.cxx:9
 TSStatisticsCalculator.cxx:10
 TSStatisticsCalculator.cxx:11
 TSStatisticsCalculator.cxx:12
 TSStatisticsCalculator.cxx:13
 TSStatisticsCalculator.cxx:14
 TSStatisticsCalculator.cxx:15
 TSStatisticsCalculator.cxx:16
 TSStatisticsCalculator.cxx:17
 TSStatisticsCalculator.cxx:18
 TSStatisticsCalculator.cxx:19
 TSStatisticsCalculator.cxx:20
 TSStatisticsCalculator.cxx:21
 TSStatisticsCalculator.cxx:22
 TSStatisticsCalculator.cxx:23
 TSStatisticsCalculator.cxx:24
 TSStatisticsCalculator.cxx:25
 TSStatisticsCalculator.cxx:26
 TSStatisticsCalculator.cxx:27
 TSStatisticsCalculator.cxx:28
 TSStatisticsCalculator.cxx:29
 TSStatisticsCalculator.cxx:30
 TSStatisticsCalculator.cxx:31
 TSStatisticsCalculator.cxx:32
 TSStatisticsCalculator.cxx:33
 TSStatisticsCalculator.cxx:34
 TSStatisticsCalculator.cxx:35
 TSStatisticsCalculator.cxx:36
 TSStatisticsCalculator.cxx:37
 TSStatisticsCalculator.cxx:38
 TSStatisticsCalculator.cxx:39
 TSStatisticsCalculator.cxx:40
 TSStatisticsCalculator.cxx:41
 TSStatisticsCalculator.cxx:42
 TSStatisticsCalculator.cxx:43
 TSStatisticsCalculator.cxx:44
 TSStatisticsCalculator.cxx:45
 TSStatisticsCalculator.cxx:46
 TSStatisticsCalculator.cxx:47
 TSStatisticsCalculator.cxx:48
 TSStatisticsCalculator.cxx:49
 TSStatisticsCalculator.cxx:50
 TSStatisticsCalculator.cxx:51
 TSStatisticsCalculator.cxx:52
 TSStatisticsCalculator.cxx:53
 TSStatisticsCalculator.cxx:54
 TSStatisticsCalculator.cxx:55
 TSStatisticsCalculator.cxx:56
 TSStatisticsCalculator.cxx:57
 TSStatisticsCalculator.cxx:58
 TSStatisticsCalculator.cxx:59
 TSStatisticsCalculator.cxx:60
 TSStatisticsCalculator.cxx:61
 TSStatisticsCalculator.cxx:62
 TSStatisticsCalculator.cxx:63
 TSStatisticsCalculator.cxx:64
 TSStatisticsCalculator.cxx:65
 TSStatisticsCalculator.cxx:66
 TSStatisticsCalculator.cxx:67
 TSStatisticsCalculator.cxx:68
 TSStatisticsCalculator.cxx:69
 TSStatisticsCalculator.cxx:70
 TSStatisticsCalculator.cxx:71
 TSStatisticsCalculator.cxx:72
 TSStatisticsCalculator.cxx:73
 TSStatisticsCalculator.cxx:74
 TSStatisticsCalculator.cxx:75
 TSStatisticsCalculator.cxx:76
 TSStatisticsCalculator.cxx:77
 TSStatisticsCalculator.cxx:78
 TSStatisticsCalculator.cxx:79
 TSStatisticsCalculator.cxx:80
 TSStatisticsCalculator.cxx:81
 TSStatisticsCalculator.cxx:82
 TSStatisticsCalculator.cxx:83
 TSStatisticsCalculator.cxx:84
 TSStatisticsCalculator.cxx:85
 TSStatisticsCalculator.cxx:86
 TSStatisticsCalculator.cxx:87
 TSStatisticsCalculator.cxx:88
 TSStatisticsCalculator.cxx:89
 TSStatisticsCalculator.cxx:90
 TSStatisticsCalculator.cxx:91
 TSStatisticsCalculator.cxx:92
 TSStatisticsCalculator.cxx:93
 TSStatisticsCalculator.cxx:94
 TSStatisticsCalculator.cxx:95
 TSStatisticsCalculator.cxx:96
 TSStatisticsCalculator.cxx:97
 TSStatisticsCalculator.cxx:98
 TSStatisticsCalculator.cxx:99
 TSStatisticsCalculator.cxx:100
 TSStatisticsCalculator.cxx:101
 TSStatisticsCalculator.cxx:102
 TSStatisticsCalculator.cxx:103
 TSStatisticsCalculator.cxx:104
 TSStatisticsCalculator.cxx:105
 TSStatisticsCalculator.cxx:106
 TSStatisticsCalculator.cxx:107
 TSStatisticsCalculator.cxx:108
 TSStatisticsCalculator.cxx:109
 TSStatisticsCalculator.cxx:110
 TSStatisticsCalculator.cxx:111
 TSStatisticsCalculator.cxx:112
 TSStatisticsCalculator.cxx:113
 TSStatisticsCalculator.cxx:114
 TSStatisticsCalculator.cxx:115
 TSStatisticsCalculator.cxx:116
 TSStatisticsCalculator.cxx:117
 TSStatisticsCalculator.cxx:118
 TSStatisticsCalculator.cxx:119
 TSStatisticsCalculator.cxx:120
 TSStatisticsCalculator.cxx:121
 TSStatisticsCalculator.cxx:122
 TSStatisticsCalculator.cxx:123
 TSStatisticsCalculator.cxx:124
 TSStatisticsCalculator.cxx:125
 TSStatisticsCalculator.cxx:126
 TSStatisticsCalculator.cxx:127
 TSStatisticsCalculator.cxx:128
 TSStatisticsCalculator.cxx:129
 TSStatisticsCalculator.cxx:130
 TSStatisticsCalculator.cxx:131
 TSStatisticsCalculator.cxx:132
 TSStatisticsCalculator.cxx:133
 TSStatisticsCalculator.cxx:134
 TSStatisticsCalculator.cxx:135
 TSStatisticsCalculator.cxx:136
 TSStatisticsCalculator.cxx:137
 TSStatisticsCalculator.cxx:138
 TSStatisticsCalculator.cxx:139
 TSStatisticsCalculator.cxx:140
 TSStatisticsCalculator.cxx:141
 TSStatisticsCalculator.cxx:142
 TSStatisticsCalculator.cxx:143
 TSStatisticsCalculator.cxx:144
 TSStatisticsCalculator.cxx:145
 TSStatisticsCalculator.cxx:146
 TSStatisticsCalculator.cxx:147
 TSStatisticsCalculator.cxx:148
 TSStatisticsCalculator.cxx:149
 TSStatisticsCalculator.cxx:150
 TSStatisticsCalculator.cxx:151
 TSStatisticsCalculator.cxx:152
 TSStatisticsCalculator.cxx:153
 TSStatisticsCalculator.cxx:154
 TSStatisticsCalculator.cxx:155
 TSStatisticsCalculator.cxx:156
 TSStatisticsCalculator.cxx:157
 TSStatisticsCalculator.cxx:158
 TSStatisticsCalculator.cxx:159
 TSStatisticsCalculator.cxx:160
 TSStatisticsCalculator.cxx:161
 TSStatisticsCalculator.cxx:162
 TSStatisticsCalculator.cxx:163
 TSStatisticsCalculator.cxx:164
 TSStatisticsCalculator.cxx:165
 TSStatisticsCalculator.cxx:166
 TSStatisticsCalculator.cxx:167
 TSStatisticsCalculator.cxx:168
 TSStatisticsCalculator.cxx:169
 TSStatisticsCalculator.cxx:170
 TSStatisticsCalculator.cxx:171
 TSStatisticsCalculator.cxx:172
 TSStatisticsCalculator.cxx:173
 TSStatisticsCalculator.cxx:174
 TSStatisticsCalculator.cxx:175
 TSStatisticsCalculator.cxx:176
 TSStatisticsCalculator.cxx:177
 TSStatisticsCalculator.cxx:178
 TSStatisticsCalculator.cxx:179
 TSStatisticsCalculator.cxx:180
 TSStatisticsCalculator.cxx:181
 TSStatisticsCalculator.cxx:182
 TSStatisticsCalculator.cxx:183
 TSStatisticsCalculator.cxx:184
 TSStatisticsCalculator.cxx:185
 TSStatisticsCalculator.cxx:186
 TSStatisticsCalculator.cxx:187
 TSStatisticsCalculator.cxx:188
 TSStatisticsCalculator.cxx:189
 TSStatisticsCalculator.cxx:190
 TSStatisticsCalculator.cxx:191
 TSStatisticsCalculator.cxx:192
 TSStatisticsCalculator.cxx:193
 TSStatisticsCalculator.cxx:194
 TSStatisticsCalculator.cxx:195
 TSStatisticsCalculator.cxx:196
 TSStatisticsCalculator.cxx:197
 TSStatisticsCalculator.cxx:198
 TSStatisticsCalculator.cxx:199
 TSStatisticsCalculator.cxx:200
 TSStatisticsCalculator.cxx:201
 TSStatisticsCalculator.cxx:202
 TSStatisticsCalculator.cxx:203
 TSStatisticsCalculator.cxx:204
 TSStatisticsCalculator.cxx:205
 TSStatisticsCalculator.cxx:206
 TSStatisticsCalculator.cxx:207
 TSStatisticsCalculator.cxx:208
 TSStatisticsCalculator.cxx:209
 TSStatisticsCalculator.cxx:210
 TSStatisticsCalculator.cxx:211
 TSStatisticsCalculator.cxx:212
 TSStatisticsCalculator.cxx:213
 TSStatisticsCalculator.cxx:214
 TSStatisticsCalculator.cxx:215
 TSStatisticsCalculator.cxx:216
 TSStatisticsCalculator.cxx:217
 TSStatisticsCalculator.cxx:218
 TSStatisticsCalculator.cxx:219
 TSStatisticsCalculator.cxx:220
 TSStatisticsCalculator.cxx:221
 TSStatisticsCalculator.cxx:222
 TSStatisticsCalculator.cxx:223
 TSStatisticsCalculator.cxx:224
 TSStatisticsCalculator.cxx:225
 TSStatisticsCalculator.cxx:226
 TSStatisticsCalculator.cxx:227
 TSStatisticsCalculator.cxx:228
 TSStatisticsCalculator.cxx:229
 TSStatisticsCalculator.cxx:230
 TSStatisticsCalculator.cxx:231
 TSStatisticsCalculator.cxx:232
 TSStatisticsCalculator.cxx:233
 TSStatisticsCalculator.cxx:234
 TSStatisticsCalculator.cxx:235
 TSStatisticsCalculator.cxx:236
 TSStatisticsCalculator.cxx:237
 TSStatisticsCalculator.cxx:238
 TSStatisticsCalculator.cxx:239
 TSStatisticsCalculator.cxx:240
 TSStatisticsCalculator.cxx:241
 TSStatisticsCalculator.cxx:242
 TSStatisticsCalculator.cxx:243
 TSStatisticsCalculator.cxx:244
 TSStatisticsCalculator.cxx:245
 TSStatisticsCalculator.cxx:246
 TSStatisticsCalculator.cxx:247
 TSStatisticsCalculator.cxx:248
 TSStatisticsCalculator.cxx:249
 TSStatisticsCalculator.cxx:250
 TSStatisticsCalculator.cxx:251
 TSStatisticsCalculator.cxx:252
 TSStatisticsCalculator.cxx:253
 TSStatisticsCalculator.cxx:254
 TSStatisticsCalculator.cxx:255
 TSStatisticsCalculator.cxx:256
 TSStatisticsCalculator.cxx:257
 TSStatisticsCalculator.cxx:258
 TSStatisticsCalculator.cxx:259
 TSStatisticsCalculator.cxx:260
 TSStatisticsCalculator.cxx:261
 TSStatisticsCalculator.cxx:262
 TSStatisticsCalculator.cxx:263
 TSStatisticsCalculator.cxx:264
 TSStatisticsCalculator.cxx:265
 TSStatisticsCalculator.cxx:266
 TSStatisticsCalculator.cxx:267
 TSStatisticsCalculator.cxx:268
 TSStatisticsCalculator.cxx:269
 TSStatisticsCalculator.cxx:270
 TSStatisticsCalculator.cxx:271
 TSStatisticsCalculator.cxx:272
 TSStatisticsCalculator.cxx:273
 TSStatisticsCalculator.cxx:274
 TSStatisticsCalculator.cxx:275
 TSStatisticsCalculator.cxx:276
 TSStatisticsCalculator.cxx:277
 TSStatisticsCalculator.cxx:278
 TSStatisticsCalculator.cxx:279
 TSStatisticsCalculator.cxx:280
 TSStatisticsCalculator.cxx:281
 TSStatisticsCalculator.cxx:282
 TSStatisticsCalculator.cxx:283
 TSStatisticsCalculator.cxx:284
 TSStatisticsCalculator.cxx:285
 TSStatisticsCalculator.cxx:286
 TSStatisticsCalculator.cxx:287
 TSStatisticsCalculator.cxx:288
 TSStatisticsCalculator.cxx:289
 TSStatisticsCalculator.cxx:290
 TSStatisticsCalculator.cxx:291
 TSStatisticsCalculator.cxx:292
 TSStatisticsCalculator.cxx:293
 TSStatisticsCalculator.cxx:294
 TSStatisticsCalculator.cxx:295
 TSStatisticsCalculator.cxx:296
 TSStatisticsCalculator.cxx:297
 TSStatisticsCalculator.cxx:298
 TSStatisticsCalculator.cxx:299
 TSStatisticsCalculator.cxx:300
 TSStatisticsCalculator.cxx:301
 TSStatisticsCalculator.cxx:302
 TSStatisticsCalculator.cxx:303
 TSStatisticsCalculator.cxx:304
 TSStatisticsCalculator.cxx:305
 TSStatisticsCalculator.cxx:306
 TSStatisticsCalculator.cxx:307
 TSStatisticsCalculator.cxx:308
 TSStatisticsCalculator.cxx:309
 TSStatisticsCalculator.cxx:310
 TSStatisticsCalculator.cxx:311
 TSStatisticsCalculator.cxx:312
 TSStatisticsCalculator.cxx:313
 TSStatisticsCalculator.cxx:314
 TSStatisticsCalculator.cxx:315
 TSStatisticsCalculator.cxx:316
 TSStatisticsCalculator.cxx:317
 TSStatisticsCalculator.cxx:318
 TSStatisticsCalculator.cxx:319
 TSStatisticsCalculator.cxx:320
 TSStatisticsCalculator.cxx:321
 TSStatisticsCalculator.cxx:322
 TSStatisticsCalculator.cxx:323
 TSStatisticsCalculator.cxx:324
 TSStatisticsCalculator.cxx:325
 TSStatisticsCalculator.cxx:326
 TSStatisticsCalculator.cxx:327
 TSStatisticsCalculator.cxx:328
 TSStatisticsCalculator.cxx:329
 TSStatisticsCalculator.cxx:330
 TSStatisticsCalculator.cxx:331
 TSStatisticsCalculator.cxx:332
 TSStatisticsCalculator.cxx:333
 TSStatisticsCalculator.cxx:334
 TSStatisticsCalculator.cxx:335
 TSStatisticsCalculator.cxx:336
 TSStatisticsCalculator.cxx:337
 TSStatisticsCalculator.cxx:338
 TSStatisticsCalculator.cxx:339
 TSStatisticsCalculator.cxx:340
 TSStatisticsCalculator.cxx:341
 TSStatisticsCalculator.cxx:342
 TSStatisticsCalculator.cxx:343
 TSStatisticsCalculator.cxx:344
 TSStatisticsCalculator.cxx:345
 TSStatisticsCalculator.cxx:346
 TSStatisticsCalculator.cxx:347
 TSStatisticsCalculator.cxx:348
 TSStatisticsCalculator.cxx:349
 TSStatisticsCalculator.cxx:350
 TSStatisticsCalculator.cxx:351
 TSStatisticsCalculator.cxx:352
 TSStatisticsCalculator.cxx:353
 TSStatisticsCalculator.cxx:354
 TSStatisticsCalculator.cxx:355
 TSStatisticsCalculator.cxx:356
 TSStatisticsCalculator.cxx:357
 TSStatisticsCalculator.cxx:358
 TSStatisticsCalculator.cxx:359
 TSStatisticsCalculator.cxx:360
 TSStatisticsCalculator.cxx:361
 TSStatisticsCalculator.cxx:362
 TSStatisticsCalculator.cxx:363
 TSStatisticsCalculator.cxx:364
 TSStatisticsCalculator.cxx:365
 TSStatisticsCalculator.cxx:366
 TSStatisticsCalculator.cxx:367
 TSStatisticsCalculator.cxx:368
 TSStatisticsCalculator.cxx:369
 TSStatisticsCalculator.cxx:370
 TSStatisticsCalculator.cxx:371
 TSStatisticsCalculator.cxx:372
 TSStatisticsCalculator.cxx:373
 TSStatisticsCalculator.cxx:374
 TSStatisticsCalculator.cxx:375
 TSStatisticsCalculator.cxx:376
 TSStatisticsCalculator.cxx:377
 TSStatisticsCalculator.cxx:378
 TSStatisticsCalculator.cxx:379
 TSStatisticsCalculator.cxx:380
 TSStatisticsCalculator.cxx:381
 TSStatisticsCalculator.cxx:382
 TSStatisticsCalculator.cxx:383
 TSStatisticsCalculator.cxx:384
 TSStatisticsCalculator.cxx:385
 TSStatisticsCalculator.cxx:386
 TSStatisticsCalculator.cxx:387
 TSStatisticsCalculator.cxx:388
 TSStatisticsCalculator.cxx:389
 TSStatisticsCalculator.cxx:390
 TSStatisticsCalculator.cxx:391
 TSStatisticsCalculator.cxx:392
 TSStatisticsCalculator.cxx:393
 TSStatisticsCalculator.cxx:394
 TSStatisticsCalculator.cxx:395
 TSStatisticsCalculator.cxx:396
 TSStatisticsCalculator.cxx:397
 TSStatisticsCalculator.cxx:398
 TSStatisticsCalculator.cxx:399
 TSStatisticsCalculator.cxx:400
 TSStatisticsCalculator.cxx:401
 TSStatisticsCalculator.cxx:402
 TSStatisticsCalculator.cxx:403
 TSStatisticsCalculator.cxx:404
 TSStatisticsCalculator.cxx:405
 TSStatisticsCalculator.cxx:406
 TSStatisticsCalculator.cxx:407
 TSStatisticsCalculator.cxx:408
 TSStatisticsCalculator.cxx:409
 TSStatisticsCalculator.cxx:410
 TSStatisticsCalculator.cxx:411
 TSStatisticsCalculator.cxx:412
 TSStatisticsCalculator.cxx:413
 TSStatisticsCalculator.cxx:414
 TSStatisticsCalculator.cxx:415
 TSStatisticsCalculator.cxx:416
 TSStatisticsCalculator.cxx:417
 TSStatisticsCalculator.cxx:418
 TSStatisticsCalculator.cxx:419
 TSStatisticsCalculator.cxx:420
 TSStatisticsCalculator.cxx:421
 TSStatisticsCalculator.cxx:422
 TSStatisticsCalculator.cxx:423
 TSStatisticsCalculator.cxx:424
 TSStatisticsCalculator.cxx:425
 TSStatisticsCalculator.cxx:426
 TSStatisticsCalculator.cxx:427
 TSStatisticsCalculator.cxx:428
 TSStatisticsCalculator.cxx:429
 TSStatisticsCalculator.cxx:430
 TSStatisticsCalculator.cxx:431
 TSStatisticsCalculator.cxx:432
 TSStatisticsCalculator.cxx:433
 TSStatisticsCalculator.cxx:434
 TSStatisticsCalculator.cxx:435
 TSStatisticsCalculator.cxx:436
 TSStatisticsCalculator.cxx:437
 TSStatisticsCalculator.cxx:438
 TSStatisticsCalculator.cxx:439
 TSStatisticsCalculator.cxx:440
 TSStatisticsCalculator.cxx:441
 TSStatisticsCalculator.cxx:442
 TSStatisticsCalculator.cxx:443
 TSStatisticsCalculator.cxx:444
 TSStatisticsCalculator.cxx:445
 TSStatisticsCalculator.cxx:446
 TSStatisticsCalculator.cxx:447
 TSStatisticsCalculator.cxx:448
 TSStatisticsCalculator.cxx:449
 TSStatisticsCalculator.cxx:450
 TSStatisticsCalculator.cxx:451
 TSStatisticsCalculator.cxx:452
 TSStatisticsCalculator.cxx:453
 TSStatisticsCalculator.cxx:454
 TSStatisticsCalculator.cxx:455
 TSStatisticsCalculator.cxx:456
 TSStatisticsCalculator.cxx:457
 TSStatisticsCalculator.cxx:458
 TSStatisticsCalculator.cxx:459
 TSStatisticsCalculator.cxx:460
 TSStatisticsCalculator.cxx:461
 TSStatisticsCalculator.cxx:462
 TSStatisticsCalculator.cxx:463
 TSStatisticsCalculator.cxx:464
 TSStatisticsCalculator.cxx:465
 TSStatisticsCalculator.cxx:466
 TSStatisticsCalculator.cxx:467
 TSStatisticsCalculator.cxx:468
 TSStatisticsCalculator.cxx:469
 TSStatisticsCalculator.cxx:470
 TSStatisticsCalculator.cxx:471
 TSStatisticsCalculator.cxx:472
 TSStatisticsCalculator.cxx:473
 TSStatisticsCalculator.cxx:474
 TSStatisticsCalculator.cxx:475
 TSStatisticsCalculator.cxx:476
 TSStatisticsCalculator.cxx:477
 TSStatisticsCalculator.cxx:478
 TSStatisticsCalculator.cxx:479
 TSStatisticsCalculator.cxx:480
 TSStatisticsCalculator.cxx:481
 TSStatisticsCalculator.cxx:482
 TSStatisticsCalculator.cxx:483
 TSStatisticsCalculator.cxx:484
 TSStatisticsCalculator.cxx:485
 TSStatisticsCalculator.cxx:486
 TSStatisticsCalculator.cxx:487
 TSStatisticsCalculator.cxx:488
 TSStatisticsCalculator.cxx:489
 TSStatisticsCalculator.cxx:490
 TSStatisticsCalculator.cxx:491
 TSStatisticsCalculator.cxx:492
 TSStatisticsCalculator.cxx:493
 TSStatisticsCalculator.cxx:494
 TSStatisticsCalculator.cxx:495
 TSStatisticsCalculator.cxx:496
 TSStatisticsCalculator.cxx:497
 TSStatisticsCalculator.cxx:498
 TSStatisticsCalculator.cxx:499
 TSStatisticsCalculator.cxx:500
 TSStatisticsCalculator.cxx:501
 TSStatisticsCalculator.cxx:502
 TSStatisticsCalculator.cxx:503
 TSStatisticsCalculator.cxx:504
 TSStatisticsCalculator.cxx:505
 TSStatisticsCalculator.cxx:506
 TSStatisticsCalculator.cxx:507
 TSStatisticsCalculator.cxx:508
 TSStatisticsCalculator.cxx:509
 TSStatisticsCalculator.cxx:510
 TSStatisticsCalculator.cxx:511
 TSStatisticsCalculator.cxx:512
 TSStatisticsCalculator.cxx:513
 TSStatisticsCalculator.cxx:514
 TSStatisticsCalculator.cxx:515
 TSStatisticsCalculator.cxx:516
 TSStatisticsCalculator.cxx:517
 TSStatisticsCalculator.cxx:518
 TSStatisticsCalculator.cxx:519
 TSStatisticsCalculator.cxx:520
 TSStatisticsCalculator.cxx:521
 TSStatisticsCalculator.cxx:522
 TSStatisticsCalculator.cxx:523
 TSStatisticsCalculator.cxx:524
 TSStatisticsCalculator.cxx:525
 TSStatisticsCalculator.cxx:526
 TSStatisticsCalculator.cxx:527
 TSStatisticsCalculator.cxx:528
 TSStatisticsCalculator.cxx:529
 TSStatisticsCalculator.cxx:530
 TSStatisticsCalculator.cxx:531
 TSStatisticsCalculator.cxx:532
 TSStatisticsCalculator.cxx:533
 TSStatisticsCalculator.cxx:534
 TSStatisticsCalculator.cxx:535
 TSStatisticsCalculator.cxx:536
 TSStatisticsCalculator.cxx:537
 TSStatisticsCalculator.cxx:538
 TSStatisticsCalculator.cxx:539
 TSStatisticsCalculator.cxx:540
 TSStatisticsCalculator.cxx:541
 TSStatisticsCalculator.cxx:542
 TSStatisticsCalculator.cxx:543
 TSStatisticsCalculator.cxx:544
 TSStatisticsCalculator.cxx:545
 TSStatisticsCalculator.cxx:546
 TSStatisticsCalculator.cxx:547
 TSStatisticsCalculator.cxx:548
 TSStatisticsCalculator.cxx:549
 TSStatisticsCalculator.cxx:550
 TSStatisticsCalculator.cxx:551
 TSStatisticsCalculator.cxx:552
 TSStatisticsCalculator.cxx:553
 TSStatisticsCalculator.cxx:554
 TSStatisticsCalculator.cxx:555
 TSStatisticsCalculator.cxx:556
 TSStatisticsCalculator.cxx:557
 TSStatisticsCalculator.cxx:558
 TSStatisticsCalculator.cxx:559
 TSStatisticsCalculator.cxx:560
 TSStatisticsCalculator.cxx:561
 TSStatisticsCalculator.cxx:562
 TSStatisticsCalculator.cxx:563
 TSStatisticsCalculator.cxx:564
 TSStatisticsCalculator.cxx:565
 TSStatisticsCalculator.cxx:566
 TSStatisticsCalculator.cxx:567
 TSStatisticsCalculator.cxx:568
 TSStatisticsCalculator.cxx:569
 TSStatisticsCalculator.cxx:570
 TSStatisticsCalculator.cxx:571
 TSStatisticsCalculator.cxx:572
 TSStatisticsCalculator.cxx:573
 TSStatisticsCalculator.cxx:574
 TSStatisticsCalculator.cxx:575
 TSStatisticsCalculator.cxx:576
 TSStatisticsCalculator.cxx:577
 TSStatisticsCalculator.cxx:578
 TSStatisticsCalculator.cxx:579
 TSStatisticsCalculator.cxx:580
 TSStatisticsCalculator.cxx:581
 TSStatisticsCalculator.cxx:582
 TSStatisticsCalculator.cxx:583
 TSStatisticsCalculator.cxx:584
 TSStatisticsCalculator.cxx:585
 TSStatisticsCalculator.cxx:586
 TSStatisticsCalculator.cxx:587
 TSStatisticsCalculator.cxx:588
 TSStatisticsCalculator.cxx:589
 TSStatisticsCalculator.cxx:590
 TSStatisticsCalculator.cxx:591
 TSStatisticsCalculator.cxx:592
 TSStatisticsCalculator.cxx:593
 TSStatisticsCalculator.cxx:594
 TSStatisticsCalculator.cxx:595
 TSStatisticsCalculator.cxx:596
 TSStatisticsCalculator.cxx:597
 TSStatisticsCalculator.cxx:598
 TSStatisticsCalculator.cxx:599
 TSStatisticsCalculator.cxx:600
 TSStatisticsCalculator.cxx:601
 TSStatisticsCalculator.cxx:602
 TSStatisticsCalculator.cxx:603
 TSStatisticsCalculator.cxx:604
 TSStatisticsCalculator.cxx:605
 TSStatisticsCalculator.cxx:606
 TSStatisticsCalculator.cxx:607
 TSStatisticsCalculator.cxx:608
 TSStatisticsCalculator.cxx:609
 TSStatisticsCalculator.cxx:610
 TSStatisticsCalculator.cxx:611
 TSStatisticsCalculator.cxx:612
 TSStatisticsCalculator.cxx:613
 TSStatisticsCalculator.cxx:614
 TSStatisticsCalculator.cxx:615
 TSStatisticsCalculator.cxx:616
 TSStatisticsCalculator.cxx:617
 TSStatisticsCalculator.cxx:618
 TSStatisticsCalculator.cxx:619
 TSStatisticsCalculator.cxx:620
 TSStatisticsCalculator.cxx:621
 TSStatisticsCalculator.cxx:622
 TSStatisticsCalculator.cxx:623
 TSStatisticsCalculator.cxx:624
 TSStatisticsCalculator.cxx:625
 TSStatisticsCalculator.cxx:626
 TSStatisticsCalculator.cxx:627
 TSStatisticsCalculator.cxx:628
 TSStatisticsCalculator.cxx:629
 TSStatisticsCalculator.cxx:630
 TSStatisticsCalculator.cxx:631
 TSStatisticsCalculator.cxx:632
 TSStatisticsCalculator.cxx:633
 TSStatisticsCalculator.cxx:634
 TSStatisticsCalculator.cxx:635
 TSStatisticsCalculator.cxx:636
 TSStatisticsCalculator.cxx:637
 TSStatisticsCalculator.cxx:638
 TSStatisticsCalculator.cxx:639
 TSStatisticsCalculator.cxx:640
 TSStatisticsCalculator.cxx:641
 TSStatisticsCalculator.cxx:642
 TSStatisticsCalculator.cxx:643
 TSStatisticsCalculator.cxx:644
 TSStatisticsCalculator.cxx:645
 TSStatisticsCalculator.cxx:646
 TSStatisticsCalculator.cxx:647
 TSStatisticsCalculator.cxx:648
 TSStatisticsCalculator.cxx:649
 TSStatisticsCalculator.cxx:650
 TSStatisticsCalculator.cxx:651
 TSStatisticsCalculator.cxx:652
 TSStatisticsCalculator.cxx:653
 TSStatisticsCalculator.cxx:654
 TSStatisticsCalculator.cxx:655
 TSStatisticsCalculator.cxx:656
 TSStatisticsCalculator.cxx:657
 TSStatisticsCalculator.cxx:658
 TSStatisticsCalculator.cxx:659
 TSStatisticsCalculator.cxx:660
 TSStatisticsCalculator.cxx:661
 TSStatisticsCalculator.cxx:662
 TSStatisticsCalculator.cxx:663
 TSStatisticsCalculator.cxx:664
 TSStatisticsCalculator.cxx:665
 TSStatisticsCalculator.cxx:666
 TSStatisticsCalculator.cxx:667
 TSStatisticsCalculator.cxx:668
 TSStatisticsCalculator.cxx:669
 TSStatisticsCalculator.cxx:670
 TSStatisticsCalculator.cxx:671
 TSStatisticsCalculator.cxx:672
 TSStatisticsCalculator.cxx:673
 TSStatisticsCalculator.cxx:674
 TSStatisticsCalculator.cxx:675
 TSStatisticsCalculator.cxx:676
 TSStatisticsCalculator.cxx:677
 TSStatisticsCalculator.cxx:678
 TSStatisticsCalculator.cxx:679
 TSStatisticsCalculator.cxx:680
 TSStatisticsCalculator.cxx:681
 TSStatisticsCalculator.cxx:682
 TSStatisticsCalculator.cxx:683
 TSStatisticsCalculator.cxx:684
 TSStatisticsCalculator.cxx:685
 TSStatisticsCalculator.cxx:686
 TSStatisticsCalculator.cxx:687
 TSStatisticsCalculator.cxx:688
 TSStatisticsCalculator.cxx:689
 TSStatisticsCalculator.cxx:690
 TSStatisticsCalculator.cxx:691
 TSStatisticsCalculator.cxx:692
 TSStatisticsCalculator.cxx:693
 TSStatisticsCalculator.cxx:694
 TSStatisticsCalculator.cxx:695
 TSStatisticsCalculator.cxx:696
 TSStatisticsCalculator.cxx:697
 TSStatisticsCalculator.cxx:698
 TSStatisticsCalculator.cxx:699
 TSStatisticsCalculator.cxx:700
 TSStatisticsCalculator.cxx:701
 TSStatisticsCalculator.cxx:702
 TSStatisticsCalculator.cxx:703
 TSStatisticsCalculator.cxx:704
 TSStatisticsCalculator.cxx:705
 TSStatisticsCalculator.cxx:706
 TSStatisticsCalculator.cxx:707
 TSStatisticsCalculator.cxx:708
 TSStatisticsCalculator.cxx:709
 TSStatisticsCalculator.cxx:710
 TSStatisticsCalculator.cxx:711
 TSStatisticsCalculator.cxx:712
 TSStatisticsCalculator.cxx:713
 TSStatisticsCalculator.cxx:714
 TSStatisticsCalculator.cxx:715
 TSStatisticsCalculator.cxx:716
 TSStatisticsCalculator.cxx:717
 TSStatisticsCalculator.cxx:718
 TSStatisticsCalculator.cxx:719
 TSStatisticsCalculator.cxx:720
 TSStatisticsCalculator.cxx:721
 TSStatisticsCalculator.cxx:722
 TSStatisticsCalculator.cxx:723
 TSStatisticsCalculator.cxx:724
 TSStatisticsCalculator.cxx:725
 TSStatisticsCalculator.cxx:726
 TSStatisticsCalculator.cxx:727
 TSStatisticsCalculator.cxx:728
 TSStatisticsCalculator.cxx:729
 TSStatisticsCalculator.cxx:730
 TSStatisticsCalculator.cxx:731
 TSStatisticsCalculator.cxx:732
 TSStatisticsCalculator.cxx:733
 TSStatisticsCalculator.cxx:734
 TSStatisticsCalculator.cxx:735
 TSStatisticsCalculator.cxx:736
 TSStatisticsCalculator.cxx:737
 TSStatisticsCalculator.cxx:738
 TSStatisticsCalculator.cxx:739
 TSStatisticsCalculator.cxx:740
 TSStatisticsCalculator.cxx:741
 TSStatisticsCalculator.cxx:742
 TSStatisticsCalculator.cxx:743
 TSStatisticsCalculator.cxx:744
 TSStatisticsCalculator.cxx:745
 TSStatisticsCalculator.cxx:746
 TSStatisticsCalculator.cxx:747
 TSStatisticsCalculator.cxx:748
 TSStatisticsCalculator.cxx:749
 TSStatisticsCalculator.cxx:750
 TSStatisticsCalculator.cxx:751
 TSStatisticsCalculator.cxx:752
 TSStatisticsCalculator.cxx:753
 TSStatisticsCalculator.cxx:754
 TSStatisticsCalculator.cxx:755
 TSStatisticsCalculator.cxx:756
 TSStatisticsCalculator.cxx:757
 TSStatisticsCalculator.cxx:758
 TSStatisticsCalculator.cxx:759
 TSStatisticsCalculator.cxx:760
 TSStatisticsCalculator.cxx:761
 TSStatisticsCalculator.cxx:762
 TSStatisticsCalculator.cxx:763
 TSStatisticsCalculator.cxx:764
 TSStatisticsCalculator.cxx:765
 TSStatisticsCalculator.cxx:766
 TSStatisticsCalculator.cxx:767
 TSStatisticsCalculator.cxx:768
 TSStatisticsCalculator.cxx:769
 TSStatisticsCalculator.cxx:770
 TSStatisticsCalculator.cxx:771
 TSStatisticsCalculator.cxx:772
 TSStatisticsCalculator.cxx:773
 TSStatisticsCalculator.cxx:774
 TSStatisticsCalculator.cxx:775
 TSStatisticsCalculator.cxx:776
 TSStatisticsCalculator.cxx:777
 TSStatisticsCalculator.cxx:778
 TSStatisticsCalculator.cxx:779
 TSStatisticsCalculator.cxx:780
 TSStatisticsCalculator.cxx:781
 TSStatisticsCalculator.cxx:782
 TSStatisticsCalculator.cxx:783
 TSStatisticsCalculator.cxx:784
 TSStatisticsCalculator.cxx:785
 TSStatisticsCalculator.cxx:786
 TSStatisticsCalculator.cxx:787
 TSStatisticsCalculator.cxx:788
 TSStatisticsCalculator.cxx:789
 TSStatisticsCalculator.cxx:790
 TSStatisticsCalculator.cxx:791
 TSStatisticsCalculator.cxx:792
 TSStatisticsCalculator.cxx:793
 TSStatisticsCalculator.cxx:794
 TSStatisticsCalculator.cxx:795
 TSStatisticsCalculator.cxx:796
 TSStatisticsCalculator.cxx:797
 TSStatisticsCalculator.cxx:798
 TSStatisticsCalculator.cxx:799
 TSStatisticsCalculator.cxx:800
 TSStatisticsCalculator.cxx:801
 TSStatisticsCalculator.cxx:802
 TSStatisticsCalculator.cxx:803
 TSStatisticsCalculator.cxx:804
 TSStatisticsCalculator.cxx:805
 TSStatisticsCalculator.cxx:806
 TSStatisticsCalculator.cxx:807
 TSStatisticsCalculator.cxx:808
 TSStatisticsCalculator.cxx:809
 TSStatisticsCalculator.cxx:810
 TSStatisticsCalculator.cxx:811
 TSStatisticsCalculator.cxx:812
 TSStatisticsCalculator.cxx:813
 TSStatisticsCalculator.cxx:814
 TSStatisticsCalculator.cxx:815
 TSStatisticsCalculator.cxx:816
 TSStatisticsCalculator.cxx:817
 TSStatisticsCalculator.cxx:818
 TSStatisticsCalculator.cxx:819
 TSStatisticsCalculator.cxx:820
 TSStatisticsCalculator.cxx:821
 TSStatisticsCalculator.cxx:822
 TSStatisticsCalculator.cxx:823
 TSStatisticsCalculator.cxx:824
 TSStatisticsCalculator.cxx:825
 TSStatisticsCalculator.cxx:826
 TSStatisticsCalculator.cxx:827
 TSStatisticsCalculator.cxx:828
 TSStatisticsCalculator.cxx:829
 TSStatisticsCalculator.cxx:830
 TSStatisticsCalculator.cxx:831
 TSStatisticsCalculator.cxx:832
 TSStatisticsCalculator.cxx:833
 TSStatisticsCalculator.cxx:834
 TSStatisticsCalculator.cxx:835
 TSStatisticsCalculator.cxx:836
 TSStatisticsCalculator.cxx:837
 TSStatisticsCalculator.cxx:838
 TSStatisticsCalculator.cxx:839
 TSStatisticsCalculator.cxx:840
 TSStatisticsCalculator.cxx:841
 TSStatisticsCalculator.cxx:842
 TSStatisticsCalculator.cxx:843
 TSStatisticsCalculator.cxx:844
 TSStatisticsCalculator.cxx:845
 TSStatisticsCalculator.cxx:846
 TSStatisticsCalculator.cxx:847
 TSStatisticsCalculator.cxx:848
 TSStatisticsCalculator.cxx:849
 TSStatisticsCalculator.cxx:850
 TSStatisticsCalculator.cxx:851
 TSStatisticsCalculator.cxx:852
 TSStatisticsCalculator.cxx:853
 TSStatisticsCalculator.cxx:854
 TSStatisticsCalculator.cxx:855
 TSStatisticsCalculator.cxx:856
 TSStatisticsCalculator.cxx:857
 TSStatisticsCalculator.cxx:858
 TSStatisticsCalculator.cxx:859
 TSStatisticsCalculator.cxx:860
 TSStatisticsCalculator.cxx:861
 TSStatisticsCalculator.cxx:862
 TSStatisticsCalculator.cxx:863
 TSStatisticsCalculator.cxx:864
 TSStatisticsCalculator.cxx:865
 TSStatisticsCalculator.cxx:866
 TSStatisticsCalculator.cxx:867
 TSStatisticsCalculator.cxx:868
 TSStatisticsCalculator.cxx:869
 TSStatisticsCalculator.cxx:870
 TSStatisticsCalculator.cxx:871
 TSStatisticsCalculator.cxx:872
 TSStatisticsCalculator.cxx:873
 TSStatisticsCalculator.cxx:874
 TSStatisticsCalculator.cxx:875
 TSStatisticsCalculator.cxx:876
 TSStatisticsCalculator.cxx:877
 TSStatisticsCalculator.cxx:878
 TSStatisticsCalculator.cxx:879
 TSStatisticsCalculator.cxx:880
 TSStatisticsCalculator.cxx:881
 TSStatisticsCalculator.cxx:882
 TSStatisticsCalculator.cxx:883
 TSStatisticsCalculator.cxx:884
 TSStatisticsCalculator.cxx:885
 TSStatisticsCalculator.cxx:886
 TSStatisticsCalculator.cxx:887
 TSStatisticsCalculator.cxx:888
 TSStatisticsCalculator.cxx:889
 TSStatisticsCalculator.cxx:890
 TSStatisticsCalculator.cxx:891
 TSStatisticsCalculator.cxx:892
 TSStatisticsCalculator.cxx:893
 TSStatisticsCalculator.cxx:894
 TSStatisticsCalculator.cxx:895
 TSStatisticsCalculator.cxx:896
 TSStatisticsCalculator.cxx:897
 TSStatisticsCalculator.cxx:898
 TSStatisticsCalculator.cxx:899
 TSStatisticsCalculator.cxx:900
 TSStatisticsCalculator.cxx:901
 TSStatisticsCalculator.cxx:902
 TSStatisticsCalculator.cxx:903
 TSStatisticsCalculator.cxx:904
 TSStatisticsCalculator.cxx:905
 TSStatisticsCalculator.cxx:906
 TSStatisticsCalculator.cxx:907
 TSStatisticsCalculator.cxx:908
 TSStatisticsCalculator.cxx:909
 TSStatisticsCalculator.cxx:910
 TSStatisticsCalculator.cxx:911
 TSStatisticsCalculator.cxx:912
 TSStatisticsCalculator.cxx:913
 TSStatisticsCalculator.cxx:914
 TSStatisticsCalculator.cxx:915
 TSStatisticsCalculator.cxx:916
 TSStatisticsCalculator.cxx:917
 TSStatisticsCalculator.cxx:918
 TSStatisticsCalculator.cxx:919
 TSStatisticsCalculator.cxx:920
 TSStatisticsCalculator.cxx:921
 TSStatisticsCalculator.cxx:922
 TSStatisticsCalculator.cxx:923
 TSStatisticsCalculator.cxx:924
 TSStatisticsCalculator.cxx:925
 TSStatisticsCalculator.cxx:926
 TSStatisticsCalculator.cxx:927
 TSStatisticsCalculator.cxx:928
 TSStatisticsCalculator.cxx:929
 TSStatisticsCalculator.cxx:930
 TSStatisticsCalculator.cxx:931
 TSStatisticsCalculator.cxx:932
 TSStatisticsCalculator.cxx:933
 TSStatisticsCalculator.cxx:934
 TSStatisticsCalculator.cxx:935
 TSStatisticsCalculator.cxx:936
 TSStatisticsCalculator.cxx:937
 TSStatisticsCalculator.cxx:938
 TSStatisticsCalculator.cxx:939
 TSStatisticsCalculator.cxx:940
 TSStatisticsCalculator.cxx:941
 TSStatisticsCalculator.cxx:942
 TSStatisticsCalculator.cxx:943
 TSStatisticsCalculator.cxx:944
 TSStatisticsCalculator.cxx:945
 TSStatisticsCalculator.cxx:946
 TSStatisticsCalculator.cxx:947
 TSStatisticsCalculator.cxx:948
 TSStatisticsCalculator.cxx:949
 TSStatisticsCalculator.cxx:950
 TSStatisticsCalculator.cxx:951
 TSStatisticsCalculator.cxx:952
 TSStatisticsCalculator.cxx:953
 TSStatisticsCalculator.cxx:954
 TSStatisticsCalculator.cxx:955
 TSStatisticsCalculator.cxx:956
 TSStatisticsCalculator.cxx:957
 TSStatisticsCalculator.cxx:958
 TSStatisticsCalculator.cxx:959
 TSStatisticsCalculator.cxx:960
 TSStatisticsCalculator.cxx:961
 TSStatisticsCalculator.cxx:962
 TSStatisticsCalculator.cxx:963
 TSStatisticsCalculator.cxx:964
 TSStatisticsCalculator.cxx:965
 TSStatisticsCalculator.cxx:966
 TSStatisticsCalculator.cxx:967
 TSStatisticsCalculator.cxx:968
 TSStatisticsCalculator.cxx:969
 TSStatisticsCalculator.cxx:970
 TSStatisticsCalculator.cxx:971
 TSStatisticsCalculator.cxx:972
 TSStatisticsCalculator.cxx:973
 TSStatisticsCalculator.cxx:974
 TSStatisticsCalculator.cxx:975
 TSStatisticsCalculator.cxx:976
 TSStatisticsCalculator.cxx:977
 TSStatisticsCalculator.cxx:978
 TSStatisticsCalculator.cxx:979
 TSStatisticsCalculator.cxx:980
 TSStatisticsCalculator.cxx:981
 TSStatisticsCalculator.cxx:982
 TSStatisticsCalculator.cxx:983
 TSStatisticsCalculator.cxx:984
 TSStatisticsCalculator.cxx:985
 TSStatisticsCalculator.cxx:986
 TSStatisticsCalculator.cxx:987
 TSStatisticsCalculator.cxx:988
 TSStatisticsCalculator.cxx:989
 TSStatisticsCalculator.cxx:990
 TSStatisticsCalculator.cxx:991
 TSStatisticsCalculator.cxx:992
 TSStatisticsCalculator.cxx:993
 TSStatisticsCalculator.cxx:994
 TSStatisticsCalculator.cxx:995
 TSStatisticsCalculator.cxx:996
 TSStatisticsCalculator.cxx:997
 TSStatisticsCalculator.cxx:998
 TSStatisticsCalculator.cxx:999
 TSStatisticsCalculator.cxx:1000
 TSStatisticsCalculator.cxx:1001
 TSStatisticsCalculator.cxx:1002
 TSStatisticsCalculator.cxx:1003
 TSStatisticsCalculator.cxx:1004
 TSStatisticsCalculator.cxx:1005
 TSStatisticsCalculator.cxx:1006
 TSStatisticsCalculator.cxx:1007
 TSStatisticsCalculator.cxx:1008
 TSStatisticsCalculator.cxx:1009
 TSStatisticsCalculator.cxx:1010
 TSStatisticsCalculator.cxx:1011
 TSStatisticsCalculator.cxx:1012
 TSStatisticsCalculator.cxx:1013
 TSStatisticsCalculator.cxx:1014
 TSStatisticsCalculator.cxx:1015
 TSStatisticsCalculator.cxx:1016
 TSStatisticsCalculator.cxx:1017
 TSStatisticsCalculator.cxx:1018
 TSStatisticsCalculator.cxx:1019
 TSStatisticsCalculator.cxx:1020
 TSStatisticsCalculator.cxx:1021
 TSStatisticsCalculator.cxx:1022
 TSStatisticsCalculator.cxx:1023
 TSStatisticsCalculator.cxx:1024
 TSStatisticsCalculator.cxx:1025
 TSStatisticsCalculator.cxx:1026
 TSStatisticsCalculator.cxx:1027
 TSStatisticsCalculator.cxx:1028
 TSStatisticsCalculator.cxx:1029
 TSStatisticsCalculator.cxx:1030
 TSStatisticsCalculator.cxx:1031
 TSStatisticsCalculator.cxx:1032
 TSStatisticsCalculator.cxx:1033
 TSStatisticsCalculator.cxx:1034
 TSStatisticsCalculator.cxx:1035
 TSStatisticsCalculator.cxx:1036
 TSStatisticsCalculator.cxx:1037
 TSStatisticsCalculator.cxx:1038
 TSStatisticsCalculator.cxx:1039
 TSStatisticsCalculator.cxx:1040
 TSStatisticsCalculator.cxx:1041
 TSStatisticsCalculator.cxx:1042
 TSStatisticsCalculator.cxx:1043
 TSStatisticsCalculator.cxx:1044
 TSStatisticsCalculator.cxx:1045
 TSStatisticsCalculator.cxx:1046
 TSStatisticsCalculator.cxx:1047
 TSStatisticsCalculator.cxx:1048
 TSStatisticsCalculator.cxx:1049
 TSStatisticsCalculator.cxx:1050
 TSStatisticsCalculator.cxx:1051
 TSStatisticsCalculator.cxx:1052
 TSStatisticsCalculator.cxx:1053
 TSStatisticsCalculator.cxx:1054
 TSStatisticsCalculator.cxx:1055
 TSStatisticsCalculator.cxx:1056
 TSStatisticsCalculator.cxx:1057
 TSStatisticsCalculator.cxx:1058
 TSStatisticsCalculator.cxx:1059
 TSStatisticsCalculator.cxx:1060
 TSStatisticsCalculator.cxx:1061
 TSStatisticsCalculator.cxx:1062
 TSStatisticsCalculator.cxx:1063
 TSStatisticsCalculator.cxx:1064
 TSStatisticsCalculator.cxx:1065
 TSStatisticsCalculator.cxx:1066
 TSStatisticsCalculator.cxx:1067
 TSStatisticsCalculator.cxx:1068
 TSStatisticsCalculator.cxx:1069
 TSStatisticsCalculator.cxx:1070
 TSStatisticsCalculator.cxx:1071
 TSStatisticsCalculator.cxx:1072
 TSStatisticsCalculator.cxx:1073
 TSStatisticsCalculator.cxx:1074
 TSStatisticsCalculator.cxx:1075
 TSStatisticsCalculator.cxx:1076
 TSStatisticsCalculator.cxx:1077
 TSStatisticsCalculator.cxx:1078
 TSStatisticsCalculator.cxx:1079
 TSStatisticsCalculator.cxx:1080
 TSStatisticsCalculator.cxx:1081
 TSStatisticsCalculator.cxx:1082
 TSStatisticsCalculator.cxx:1083
 TSStatisticsCalculator.cxx:1084
 TSStatisticsCalculator.cxx:1085
 TSStatisticsCalculator.cxx:1086
 TSStatisticsCalculator.cxx:1087
 TSStatisticsCalculator.cxx:1088
 TSStatisticsCalculator.cxx:1089
 TSStatisticsCalculator.cxx:1090
 TSStatisticsCalculator.cxx:1091
 TSStatisticsCalculator.cxx:1092
 TSStatisticsCalculator.cxx:1093
 TSStatisticsCalculator.cxx:1094
 TSStatisticsCalculator.cxx:1095
 TSStatisticsCalculator.cxx:1096
 TSStatisticsCalculator.cxx:1097
 TSStatisticsCalculator.cxx:1098
 TSStatisticsCalculator.cxx:1099
 TSStatisticsCalculator.cxx:1100
 TSStatisticsCalculator.cxx:1101
 TSStatisticsCalculator.cxx:1102
 TSStatisticsCalculator.cxx:1103
 TSStatisticsCalculator.cxx:1104
 TSStatisticsCalculator.cxx:1105
 TSStatisticsCalculator.cxx:1106
 TSStatisticsCalculator.cxx:1107
 TSStatisticsCalculator.cxx:1108
 TSStatisticsCalculator.cxx:1109
 TSStatisticsCalculator.cxx:1110
 TSStatisticsCalculator.cxx:1111
 TSStatisticsCalculator.cxx:1112
 TSStatisticsCalculator.cxx:1113
 TSStatisticsCalculator.cxx:1114
 TSStatisticsCalculator.cxx:1115
 TSStatisticsCalculator.cxx:1116
 TSStatisticsCalculator.cxx:1117
 TSStatisticsCalculator.cxx:1118
 TSStatisticsCalculator.cxx:1119
 TSStatisticsCalculator.cxx:1120
 TSStatisticsCalculator.cxx:1121
 TSStatisticsCalculator.cxx:1122
 TSStatisticsCalculator.cxx:1123
 TSStatisticsCalculator.cxx:1124
 TSStatisticsCalculator.cxx:1125
 TSStatisticsCalculator.cxx:1126
 TSStatisticsCalculator.cxx:1127
 TSStatisticsCalculator.cxx:1128
 TSStatisticsCalculator.cxx:1129
 TSStatisticsCalculator.cxx:1130
 TSStatisticsCalculator.cxx:1131
 TSStatisticsCalculator.cxx:1132
 TSStatisticsCalculator.cxx:1133
 TSStatisticsCalculator.cxx:1134
 TSStatisticsCalculator.cxx:1135
 TSStatisticsCalculator.cxx:1136
 TSStatisticsCalculator.cxx:1137
 TSStatisticsCalculator.cxx:1138
 TSStatisticsCalculator.cxx:1139
 TSStatisticsCalculator.cxx:1140
 TSStatisticsCalculator.cxx:1141
 TSStatisticsCalculator.cxx:1142
 TSStatisticsCalculator.cxx:1143
 TSStatisticsCalculator.cxx:1144
 TSStatisticsCalculator.cxx:1145
 TSStatisticsCalculator.cxx:1146
 TSStatisticsCalculator.cxx:1147
 TSStatisticsCalculator.cxx:1148
 TSStatisticsCalculator.cxx:1149
 TSStatisticsCalculator.cxx:1150
 TSStatisticsCalculator.cxx:1151
 TSStatisticsCalculator.cxx:1152
 TSStatisticsCalculator.cxx:1153
 TSStatisticsCalculator.cxx:1154
 TSStatisticsCalculator.cxx:1155
 TSStatisticsCalculator.cxx:1156
 TSStatisticsCalculator.cxx:1157
 TSStatisticsCalculator.cxx:1158
 TSStatisticsCalculator.cxx:1159
 TSStatisticsCalculator.cxx:1160
 TSStatisticsCalculator.cxx:1161
 TSStatisticsCalculator.cxx:1162
 TSStatisticsCalculator.cxx:1163
 TSStatisticsCalculator.cxx:1164
 TSStatisticsCalculator.cxx:1165
 TSStatisticsCalculator.cxx:1166
 TSStatisticsCalculator.cxx:1167
 TSStatisticsCalculator.cxx:1168
 TSStatisticsCalculator.cxx:1169
 TSStatisticsCalculator.cxx:1170
 TSStatisticsCalculator.cxx:1171
 TSStatisticsCalculator.cxx:1172
 TSStatisticsCalculator.cxx:1173
 TSStatisticsCalculator.cxx:1174
 TSStatisticsCalculator.cxx:1175
 TSStatisticsCalculator.cxx:1176
 TSStatisticsCalculator.cxx:1177
 TSStatisticsCalculator.cxx:1178
 TSStatisticsCalculator.cxx:1179
 TSStatisticsCalculator.cxx:1180
 TSStatisticsCalculator.cxx:1181
 TSStatisticsCalculator.cxx:1182
 TSStatisticsCalculator.cxx:1183
 TSStatisticsCalculator.cxx:1184
 TSStatisticsCalculator.cxx:1185
 TSStatisticsCalculator.cxx:1186
 TSStatisticsCalculator.cxx:1187
 TSStatisticsCalculator.cxx:1188
 TSStatisticsCalculator.cxx:1189
 TSStatisticsCalculator.cxx:1190
 TSStatisticsCalculator.cxx:1191
 TSStatisticsCalculator.cxx:1192
 TSStatisticsCalculator.cxx:1193
 TSStatisticsCalculator.cxx:1194
 TSStatisticsCalculator.cxx:1195
 TSStatisticsCalculator.cxx:1196
 TSStatisticsCalculator.cxx:1197
 TSStatisticsCalculator.cxx:1198
 TSStatisticsCalculator.cxx:1199
 TSStatisticsCalculator.cxx:1200
 TSStatisticsCalculator.cxx:1201
 TSStatisticsCalculator.cxx:1202
 TSStatisticsCalculator.cxx:1203
 TSStatisticsCalculator.cxx:1204
 TSStatisticsCalculator.cxx:1205
 TSStatisticsCalculator.cxx:1206
 TSStatisticsCalculator.cxx:1207
 TSStatisticsCalculator.cxx:1208
 TSStatisticsCalculator.cxx:1209
 TSStatisticsCalculator.cxx:1210
 TSStatisticsCalculator.cxx:1211
 TSStatisticsCalculator.cxx:1212
 TSStatisticsCalculator.cxx:1213
 TSStatisticsCalculator.cxx:1214
 TSStatisticsCalculator.cxx:1215
 TSStatisticsCalculator.cxx:1216
 TSStatisticsCalculator.cxx:1217
 TSStatisticsCalculator.cxx:1218
 TSStatisticsCalculator.cxx:1219
 TSStatisticsCalculator.cxx:1220
 TSStatisticsCalculator.cxx:1221
 TSStatisticsCalculator.cxx:1222
 TSStatisticsCalculator.cxx:1223
 TSStatisticsCalculator.cxx:1224