#include <iostream>
#include <fstream>
#include <sstream>
#include <vector>
#include "RooAbsPdf.h"
#include "RooDataSet.h"
#include "RooSimultaneous.h"
#include "QFramework/TQLibrary.h"
#include "QFramework/TQStringUtils.h"
#include "QFramework/TQIterator.h"
#include "SFramework/TSFitter.h"
ClassImp(TSFitter)
TSFitter::TSFitter() : TSStatisticsCalculator("TSFitter") {
}
TSFitter::TSFitter(RooWorkspace * ws) : TSStatisticsCalculator("TSFitter",ws) {
DEBUGclass("creating fitter");
}
TSFitter::~TSFitter() {
}
TQFolder * TSFitter::runCalculation(TQFolder * options) {
DEBUGclass("starting calculation");
if (!fWorkspace || !fModelConfig || !options) {
return NULL;
}
TString datasetName(options->getTagStringDefault("dataset","asimovData"));
TQTaggable fitOptions;
options->exportTags(&fitOptions, "", "fit.*");
fitOptions.renameTags("fit.", "");
fitOptions.setTagString("id",options->GetName());
TString snapshotName = fitOptions.getTagStringDefault("initSnapshot","SnSh_AllVars_Nominal");
if(!fWorkspace->loadSnapshot(snapshotName)){
error(TString::Format("unable to load snapshot '%s'",snapshotName.Data()));
return NULL;
}
RooAbsPdf * pdf = fModelConfig->GetPdf();
RooDataSet * data = (RooDataSet*)fWorkspace->data(datasetName.Data());
RooArgSet nuis(this->getNuisanceParameters(options));
RooArgSet pois(this->getPOIs(options));
if (!data) {
error(TString::Format("runCalculation(): Could not find dataset '%s'. Stopping ...", datasetName.Data()));
return NULL;
}
TString category;
if (options->getTagString("category",category)){
if (!pdf->InheritsFrom(RooSimultaneous::Class())) {
error("runCalculation(): PDF is not a RooSimultaneous. Stopping ...");
return NULL;
}
RooAbsPdf * pdftmp = ((RooSimultaneous*)pdf)->getPdf(category.Data());
if (!pdftmp) {
error(TString::Format("runCalculation(): Could not find PDF of "
"category '%s'. Stopping ...", category.Data()));
return NULL;
}
RooAbsData * datatmp = data->reduce(TString::Format("channelCat==channelCat::%s", category.Data()).Data());
if (!datatmp) {
error(TString::Format("runCalculation(): Could not find data of "
"category '%s'. Stopping ...", category.Data()));
return NULL;
}
pdf = pdftmp;
data = (RooDataSet*)datatmp;
info(TString::Format("Running fit on category '%s' and dataset '%s' ...", category.Data(), datasetName.Data()));
} else {
info(TString::Format("Running fit on dataset '%s' ...", datasetName.Data()));
}
RooArgSet allVars;
allVars.add(nuis);
allVars.add(pois);
DEBUGclass("starting fit");
TQFolder * result = fitPdfToData(pdf, data, nuis, &fitOptions);
TString snapshot = options->getTagStringDefault("saveSnapshot",TString::Format("SnSh_AllVars_Unconditional_%s", datasetName.Data()));
fWorkspace->saveSnapshot(snapshot.Data(),allVars);
return result;
}