38 DetailedOutputAggregator::~DetailedOutputAggregator() {
40 if (fResult != NULL)
delete fResult;
41 if (fBuiltSet != NULL)
delete fBuiltSet;
50 RooArgSet * DetailedOutputAggregator::GetAsArgSet(RooFitResult *result, TString prefix,
bool withErrorsAndPulls) {
52 RooArgSet *detailedOutput =
new RooArgSet;
53 const RooArgList &detOut = result->floatParsFinal();
54 const RooArgList &truthSet = result->floatParsInit();
55 TIterator *it = detOut.createIterator();
56 while(RooAbsArg* v = dynamic_cast<RooAbsArg*>(it->Next())) {
57 RooAbsArg* clone = v->cloneTree(TString().Append(prefix).Append(v->GetName()));
58 clone->SetTitle( TString().Append(prefix).Append(v->GetTitle()) );
59 RooRealVar* var =
dynamic_cast<RooRealVar*
>(v);
60 if (var) clone->setAttribute(
"StoreError");
61 detailedOutput->add(*clone);
63 if( withErrorsAndPulls && var ) {
64 clone->setAttribute(
"StoreAsymError");
66 TString pullname = TString().Append(prefix).Append(TString::Format(
"%s_pull", var->GetName()));
68 RooRealVar* truth =
dynamic_cast<RooRealVar*
>(truthSet.find(var->GetName()));
69 RooPullVar pulltemp(
"temppull",
"temppull", *var, *truth);
70 RooRealVar* pull =
new RooRealVar(pullname, pullname, pulltemp.getVal());
71 detailedOutput->add(*pull);
77 detailedOutput->add( *
new RooRealVar(TString().Append(prefix).Append(
"minNLL"), TString().Append(prefix).Append(
"minNLL"), result->minNll() ) );
78 detailedOutput->add( *
new RooRealVar(TString().Append(prefix).Append(
"fitStatus"), TString().Append(prefix).Append(
"fitStatus"), result->status() ) );
79 detailedOutput->add( *
new RooRealVar(TString().Append(prefix).Append(
"covQual"), TString().Append(prefix).Append(
"covQual"), result->covQual() ) );
80 detailedOutput->add( *
new RooRealVar(TString().Append(prefix).Append(
"numInvalidNLLEval"), TString().Append(prefix).Append(
"numInvalidNLLEval"), result->numInvalidNLL() ) );
81 return detailedOutput;
89 void DetailedOutputAggregator::AppendArgSet(
const RooAbsCollection *aset, TString prefix) {
96 if (fBuiltSet == NULL) {
97 fBuiltSet =
new RooArgList();
99 TIterator* iter = aset->createIterator();
100 while(RooAbsArg* v = dynamic_cast<RooAbsArg*>( iter->Next() ) ) {
101 TString renamed(TString::Format(
"%s%s", prefix.Data(), v->GetName()));
102 if (fResult == NULL) {
104 RooAbsArg* var = v->createFundamental();
106 (RooArgSet(*var)) = RooArgSet(*v);
107 var->SetName(renamed);
108 if (RooRealVar* rvar= dynamic_cast<RooRealVar*>(var)) {
109 if (v->getAttribute(
"StoreError")) var->setAttribute(
"StoreError");
110 else rvar->removeError();
111 if (v->getAttribute(
"StoreAsymError")) var->setAttribute(
"StoreAsymError");
112 else rvar->removeAsymError();
114 if (fBuiltSet->addOwned(*var))
continue;
116 if (RooAbsArg* var = fBuiltSet->find(renamed)) {
118 var->SetName(v->GetName());
119 (RooArgSet(*var)) = RooArgSet(*v);
120 var->SetName(renamed);
129 void DetailedOutputAggregator::CommitSet(
double weight) {
130 if (fResult == NULL) {
132 RooRealVar wgt(
"weight",
"weight",1.0);
133 fResult =
new RooDataSet(
"",
"", RooArgSet(*fBuiltSet,wgt), RooFit::WeightVar(wgt));
135 fResult->add(RooArgSet(*fBuiltSet), weight);
136 TIterator* iter = fBuiltSet->createIterator();
137 while(RooAbsArg* v = dynamic_cast<RooAbsArg*>( iter->Next() ) ) {
138 if (RooRealVar* var= dynamic_cast<RooRealVar*>(v)) {
140 var->setVal(std::numeric_limits<Double_t>::quiet_NaN());
142 var->removeAsymError();
152 RooDataSet * DetailedOutputAggregator::GetAsDataSet(TString name, TString title) {
153 RooDataSet* temp = NULL;
157 temp->SetNameTitle( name.Data(), title.Data() );
159 RooRealVar wgt(
"weight",
"weight",1.0);
160 temp =
new RooDataSet(name.Data(), title.Data(), RooArgSet(wgt), RooFit::WeightVar(wgt));