Skip to content

Commit

Permalink
Merge pull request #324 from cms-analysis/replace_iterators
Browse files Browse the repository at this point in the history
Replace soon to be deprecated iterators
  • Loading branch information
ajgilbert authored Jun 19, 2024
2 parents 2a99c70 + a70451a commit 1d33886
Show file tree
Hide file tree
Showing 2 changed files with 46 additions and 57 deletions.
52 changes: 25 additions & 27 deletions CombineTools/src/CombineHarvester.cc
Original file line number Diff line number Diff line change
Expand Up @@ -126,32 +126,31 @@ CombineHarvester CombineHarvester::deep() {
dat_map[*o_dat_it] = *n_dat_it;
}

auto o_pdf_it = o_pdf.createIterator();
auto n_pdf_it = n_pdf.createIterator();
do {
RooAbsPdf *o_pdf_ptr = static_cast<RooAbsPdf*>(**o_pdf_it);
RooAbsPdf *n_pdf_ptr = static_cast<RooAbsPdf*>(**n_pdf_it);
Int_t nPdf = o_pdf.getSize();

for (Int_t i=0; i<nPdf; ++i) {

RooAbsReal* o_pdf_ptr = dynamic_cast<RooAbsReal *>(o_pdf[i]);
RooAbsReal* n_pdf_ptr = dynamic_cast<RooAbsReal *>(n_pdf[i]);
if (o_pdf_ptr && n_pdf_ptr) pdf_map[o_pdf_ptr] = n_pdf_ptr;
n_pdf_it->Next();
} while (o_pdf_it->Next());

auto o_var_it = o_var.createIterator();
auto n_var_it = n_var.createIterator();
do {
RooRealVar *o_var_ptr = static_cast<RooRealVar*>(**o_var_it);
RooRealVar *n_var_ptr = static_cast<RooRealVar*>(**n_var_it);
}

Int_t nVar = o_var.getSize();

for (Int_t i=0; i<nVar; ++i) {
RooRealVar *o_var_ptr = dynamic_cast<RooRealVar*>(o_var[i]);
RooRealVar *n_var_ptr = dynamic_cast<RooRealVar*>(n_var[i]);
if (o_var_ptr && n_var_ptr) var_map[o_var_ptr] = n_var_ptr;
n_var_it->Next();
} while (o_var_it->Next());

auto o_fun_it = o_fun.createIterator();
auto n_fun_it = n_fun.createIterator();
do {
RooAbsReal *o_fun_ptr = static_cast<RooAbsReal*>(**o_fun_it);
RooAbsReal *n_fun_ptr = static_cast<RooAbsReal*>(**n_fun_it);
}

Int_t nFun = o_fun.getSize();

for (Int_t i=0; i<nFun; ++i) {
RooAbsReal* o_fun_ptr = dynamic_cast<RooAbsReal *>(o_fun[i]);
RooAbsReal* n_fun_ptr = dynamic_cast<RooAbsReal *>(n_fun[i]);
if (o_fun_ptr && n_fun_ptr) fun_map[o_fun_ptr] = n_fun_ptr;
n_fun_it->Next();
} while (o_fun_it->Next());
}

}


Expand Down Expand Up @@ -733,9 +732,8 @@ std::shared_ptr<RooWorkspace> CombineHarvester::SetupWorkspace(
}

void CombineHarvester::ImportParameters(RooArgSet *vars) {
auto x = vars->createIterator();
do {
RooRealVar *y = dynamic_cast<RooRealVar*>(**x);
for (RooAbsArg *x : *vars) {
RooRealVar *y = dynamic_cast<RooRealVar*>(x);
if (y) {
if (!params_.count(y->GetName())) {
if (verbosity_ >= 1) {
Expand Down Expand Up @@ -773,7 +771,7 @@ void CombineHarvester::ImportParameters(RooArgSet *vars) {
"RooRealVar object\n";
}
}
} while (x->Next());
}
}

RooAbsData const* CombineHarvester::FindMatchingData(Process const* proc) {
Expand Down
51 changes: 21 additions & 30 deletions CombineTools/src/CombineHarvester_Datacards.cc
Original file line number Diff line number Diff line change
Expand Up @@ -611,17 +611,16 @@ void CombineHarvester::FillHistMappings(std::vector<HistMapping> & mappings) {
data_ws_map[d] = iter.second.get();
}
RooArgSet vars = iter.second->allPdfs();
auto v = vars.createIterator();
do {
RooAbsReal *y = dynamic_cast<RooAbsReal*>(**v);
for (RooAbsArg *v : vars) {
RooAbsPdf *y = dynamic_cast<RooAbsPdf*>(v);

if (y) pdf_ws_map[iter.second->pdf(y->GetName())] = iter.second.get();
} while (v->Next());
}
RooArgSet fvars = iter.second->allFunctions();
auto fv = fvars.createIterator();
do {
RooAbsReal *y = dynamic_cast<RooAbsReal*>(**fv);
for (RooAbsArg *fv : fvars) {
RooAbsReal *y = dynamic_cast<RooAbsReal*>(fv);
if (y) pdf_ws_map[iter.second->function(y->GetName())] = iter.second.get();
} while (fv->Next());
}
}

// For writing TH1s we will hard code a set of patterns for each bin
Expand Down Expand Up @@ -874,9 +873,7 @@ void CombineHarvester::WriteDatacard(std::string const& name,
norm_par_list.add(ParametersByName(proc->norm(), &tmp_set));
}
}
RooFIter par_list_it = par_list.fwdIterator();
RooAbsArg *par_list_var = nullptr;
while ((par_list_var = par_list_it.next())) {
for (RooAbsArg *par_list_var : par_list) {
if (dynamic_cast<RooRealVar*>(par_list_var)) {
all_dependents_pars.insert(par_list_var->GetName());
}
Expand All @@ -889,11 +886,10 @@ void CombineHarvester::WriteDatacard(std::string const& name,
proc->pdf()->InheritsFrom("RooMultiPdf")) {
multipdf_cats.insert(par_list_var->GetName());
}
}

}
if (proc->norm()) {
RooFIter nm_list_it = norm_par_list.fwdIterator();
RooAbsArg *nm_list_var = nullptr;
while ((nm_list_var = nm_list_it.next())) {
for (RooAbsArg *nm_list_var: norm_par_list) {
if (dynamic_cast<RooRealVar*>(nm_list_var)) {
all_dependents_pars.insert(nm_list_var->GetName());
}
Expand Down Expand Up @@ -1275,9 +1271,8 @@ void CombineHarvester::WriteDatacard(std::string const& name,
if (wspaces_.count("_rateParams")) {
RooWorkspace *rp_ws = wspaces_.at("_rateParams").get();
RooArgSet vars = rp_ws->allVars();
auto v = vars.createIterator();
do {
RooRealVar *y = dynamic_cast<RooRealVar*>(**v);
for (RooAbsArg *v : vars) {
RooRealVar *y = dynamic_cast<RooRealVar*>(v);
if (y && y->getAttribute("extArg") && all_fn_param_args.count(std::string(y->GetName()))) {
if (!params_.count(y->GetName()) && y->getStringAttribute("wspSource")) {
std::vector<std::string> tokens;
Expand All @@ -1302,31 +1297,27 @@ void CombineHarvester::WriteDatacard(std::string const& name,

}

} while (v->Next());
}
RooArgSet funcs = rp_ws->allFunctions();
v = funcs.createIterator();
do {
RooAbsReal *y = dynamic_cast<RooAbsReal*>(**v);
for (RooAbsArg *v : funcs){
RooAbsReal *y = dynamic_cast<RooAbsReal*>(v);
if (y && y->getAttribute("extArg") && y->getStringAttribute("wspSource") && all_fn_param_args.count(std::string(y->GetName()))) {
txt_file << format("%-" + sys_str_short +
"s %-10s %-20s\n") %
y->GetName() % "extArg" % std::string(y->getStringAttribute("wspSource"));
continue;

}
} while (v->Next());
}
}

std::set<std::string> ws_vars;
for (auto iter : wspaces_) {
RooArgSet vars = iter.second->allVars();
auto v = vars.createIterator();
do {
RooRealVar *y = dynamic_cast<RooRealVar*>(**v);
if (y) {
ws_vars.insert(y->GetName());
}
} while (v->Next());
for (RooAbsArg *v : vars) {
RooRealVar *y = dynamic_cast<RooRealVar*>(v);
if (y) ws_vars.insert(y->GetName());
}
}

// How to check for params we need to write:
Expand Down

0 comments on commit 1d33886

Please sign in to comment.