#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"
#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)
{
(void)className;
}
TSStatisticsCalculator::TSStatisticsCalculator(const char* className, RooWorkspace * ws) :
TSStatisticsCalculator(className)
{
setWorkspace(ws);
}
TSStatisticsCalculator::TSStatisticsCalculator(const char* className, RooWorkspace * ws, TQFolder* snapshots) :
TSStatisticsCalculator(className)
{
this->fSnapshots = snapshots;
setWorkspace(ws);
}
TSStatisticsCalculator::~TSStatisticsCalculator() {
}
void TSStatisticsCalculator::info(TString message) {
statinfo(message);
}
void TSStatisticsCalculator::error(TString message) {
info(TQStringUtils::makeBoldRed(TString("ERROR: ") + message));
}
void TSStatisticsCalculator::warn(TString message) {
info(TQStringUtils::makeBoldYellow(TString("WARNING: ") + message));
}
Bool_t TSStatisticsCalculator::setWorkspace(RooWorkspace * ws) {
if (!ws) {
return false;
}
TObject * obj = ws->obj("ModelConfig");
if (!obj) {
return false;
}
fModelConfig = (RooStats::ModelConfig*)obj;
fWorkspace = ws;
return true;
}
RooWorkspace * TSStatisticsCalculator::getWorkspace() {
return fWorkspace;
}
TQFolder * TSStatisticsCalculator::fitPdfToData(const TString& datasetName, TQTaggable * options) {
DEBUGclass("entering function with name,options signature");
if (!fWorkspace){
error("no workspace!");
return NULL;
}
if (!fModelConfig){
error("no model config!");
return NULL;
}
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;
}
RooAbsPdf * pdf = fModelConfig->GetPdf();
if (!pdf) {
error("no Pdf associated to ModelConfig!");
return NULL;
}
return fitPdfToData(pdf, data, this->getNuisanceParameters(options), options);
}
void TSStatisticsCalculator::setup(const TString& datasetName, TQTaggable * options) {
DEBUGclass("entering function with name,options signature");
if (!fWorkspace){
throw std::runtime_error("no workspace!");
}
if (!fModelConfig){
throw std::runtime_error("no model config!");
}
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());
}
RooAbsPdf * pdf = fModelConfig->GetPdf();
if (!pdf) {
throw std::runtime_error("no Pdf associated to ModelConfig!");
}
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) {
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));
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){
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;
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(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) {
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){
TQFolder * result = TQFolder::newFolder("fitResult");
result->setTagDouble("minNll", extresult->min.nll);
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){
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));
}
result->setTagInteger("numInvalidNLL", fitResult->numInvalidNLL());
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);
}
}
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) {
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");
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);
}
#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 {
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("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);
}
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);
TStopwatch sw;
Bool_t done = false;
Int_t maxStrat = 2;
for (; strat <= maxStrat && !done; ++strat) {
minimizer.setStrategy(strat);
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();
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));
}
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();
}
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;
}
fitResult = minimizer.save();
} catch (std::string& s){
throw std::runtime_error(s);
}
}
TQLibrary::restore();
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);
if(result){
result->setTagDouble("strategy",strat);
result->setTagInteger("nDim", ndim);
if(!useRooFitUtils){
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){
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()) {
continue;
}
if (!runMinosArgSet) {
runMinosArgSet = new RooArgSet();
}
runMinosArgSet->add(*var);
}
return runMinosArgSet;
}
void TSStatisticsCalculator::setParameterValues(TQTaggable* options, const TString& prefix){
RooArgList allVars(fWorkspace->allVars());
TSUtils::setParameterValues(&allVars,options,prefix,false);
}
void TSStatisticsCalculator::setParameterErrors(TQTaggable* options, const TString& prefix){
RooArgList allVars(fWorkspace->allVars());
TSUtils::setParameterErrors(&allVars,options,prefix,false);
}
TQFolder * TSStatisticsCalculator::fitPdfToData(RooAbsPdf * pdf, RooDataSet * data, const RooArgSet& constrain, const TString& 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) {
setParametersConstFloat(¶ms,options);
}
void TSStatisticsCalculator::setParametersConstFloat(const RooArgSet * params, TQTaggable * options) {
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) {
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 result;
}
void TSStatisticsCalculator::clear(){
if(this->fNll){
delete this->fNll;
this->fNll = NULL;
}
}
void TSStatisticsCalculator::setup(RooAbsPdf * pdf, RooDataSet * data, const RooArgSet& constrain, TQTaggable * options) {
DEBUGclass("entering function");
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){
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->SetPdf(pdf);
this->SetData(data);
RooLinkedList l;
std::vector<RooCmdArg> owner;
buildArgs(options,owner,l,fModelConfig,false);
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;
double val = fNll->getVal();
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) {
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(){
return this->fModelConfig;
}
RooArgSet TSStatisticsCalculator::getNuisanceParameters(TQTaggable* options){
return getNuisanceParameters(this->fModelConfig,this->fWorkspace,options);
}
RooArgSet TSStatisticsCalculator::getNuisanceParameters(RooStats::ModelConfig* mc, RooWorkspace* ws, TQTaggable* options){
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(){
return this->fModelConfig ? this->fModelConfig->GetParametersOfInterest() : NULL;
}
void TSStatisticsCalculator::resetOffset(){
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(){
if(!this->fModelConfig) return NULL;
return this->fModelConfig->GetPdf();
}
RooSimultaneous* TSStatisticsCalculator::getSimPdf(){
return dynamic_cast<RooSimultaneous*>(this->getPdf());
}
RooCategory* TSStatisticsCalculator::getIndexCategory(){
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