Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
103 changes: 55 additions & 48 deletions code_generation/analysis_template.cxx
Original file line number Diff line number Diff line change
Expand Up @@ -156,73 +156,80 @@ int main(int argc, char *argv[]) {
const std::string analysis = {ANALYSISTAG};
const std::string config = {CONFIGTAG};
const std::string era = {ERATAG};
const std::string sample = {SAMPLETAG};
const std::string sample_type = {SAMPLETAG};
const std::string commit_hash = {COMMITHASH};
bool setup_clean = {CROWN_IS_CLEAN};
const std::string analysis_commit_hash = {ANALYSIS_COMMITHASH};
bool analysis_setup_clean = {ANALYSIS_IS_CLEAN};
int scope_counter = 0;
for (auto const &output : output_quantities) {
// output.first is the output file name
// output.second is the list of quantities

TFile outputfile(output.first.c_str(), "UPDATE");
TTree quantities_meta = TTree("quantities", "quantities");
for (auto const &quantity : output.second) {
quantities_meta.Branch(quantity.c_str(), &setup_clean);
}
quantities_meta.Write();
TTree variations_meta = TTree("variations", "variations");
for (auto const &variation : variations.at(output.first)) {
variations_meta.Branch(variation.c_str(), &setup_clean);
}
variations_meta.Write();
TTree conditions_meta = TTree("conditions", "conditions");
conditions_meta.Branch(analysis.c_str(), &setup_clean);
conditions_meta.Branch(config.c_str(), &setup_clean);
conditions_meta.Branch(era.c_str(), &setup_clean);
conditions_meta.Branch(sample.c_str(), &setup_clean);
conditions_meta.Write();
TTree commit_meta = TTree("commit", "commit");
commit_meta.Branch(commit_hash.c_str(), &setup_clean);
commit_meta.Fill();
commit_meta.Write();
TTree analysis_commit_meta =
TTree("analysis_commit", "analysis_commit");
analysis_commit_meta.Branch(analysis_commit_hash.c_str(),
&analysis_setup_clean);
analysis_commit_meta.Fill();
analysis_commit_meta.Write();

// -----------------------------
// Unified metadata object
// -----------------------------
nlohmann::json j;

j["metadata"] = {
{"analysis", analysis},
{"config", config},
{"era", era},
{"sample_type", sample_type},
{"commit", commit_hash},
{"analysis_commit", analysis_commit_hash},
{"is_clean", setup_clean},
{"analysis_is_clean", analysis_setup_clean}
};

j["content"] = {
{"quantities", output.second},
{"variations", variations.at(output.first)}
};

TObjString json(j.dump().c_str());
outputfile.WriteObject(&json, "metadata");

// -----------------------------
// Cutflow histogram
// -----------------------------
if (nevents != 0) {

TH1D cutflow;
cutflow.SetName("cutflow");
cutflow.SetTitle("cutflow");
// iterate through the cutflow vector and fill the histogram with
// the .GetPass() values
if (scope_counter >= cutReports.size()) {

if (cutReports.size() < scope_counter || cutReports.empty()) {
Logger::get("main")->critical(
"Cutflow vector is too small, this should not happen");
"cutReports vector is too small, this should not happen");
return 1;
}

for (auto cut = cutReports[scope_counter].begin();
cut != cutReports[scope_counter].end(); cut++) {
cutflow.SetBinContent(
std::distance(cutReports[scope_counter].begin(), cut) + 1,
cut->GetPass());
cutflow.GetXaxis()->SetBinLabel(
std::distance(cutReports[scope_counter].begin(), cut) + 1,
cut->GetName().c_str());
cut != cutReports[scope_counter].end(); cut++) {

int bin = std::distance(cutReports[scope_counter].begin(), cut) + 1;

cutflow.SetBinContent(bin, cut->GetPass());
cutflow.GetXaxis()->SetBinLabel(bin, cut->GetName().c_str());
}
// store it in the output file

cutflow.Write();
}
outputfile.Close();
TFile *fout = TFile::Open(output.first.c_str(), "UPDATE");

// -----------------------------
// Additional shift maps
// -----------------------------
Logger::get("main")->info("Writing quantities map to {}", output.first);
fout->WriteObject(&shift_quantities_map.at(output.first),
"shift_quantities_map");
fout->WriteObject(&quantities_shift_map.at(output.first),
"quantities_shift_map");
fout->Close();

outputfile.WriteObject(&shift_quantities_map.at(output.first),
"shift_quantities_map");

outputfile.WriteObject(&quantities_shift_map.at(output.first),
"quantities_shift_map");

outputfile.Close();

scope_counter++;
}

Expand Down
99 changes: 53 additions & 46 deletions code_generation/analysis_template_friends.cxx
Original file line number Diff line number Diff line change
Expand Up @@ -211,73 +211,80 @@ int main(int argc, char *argv[]) {
const std::string analysis = {ANALYSISTAG};
const std::string config = {CONFIGTAG};
const std::string era = {ERATAG};
const std::string sample = {SAMPLETAG};
const std::string sample_type = {SAMPLETAG};
const std::string commit_hash = {COMMITHASH};
bool setup_clean = {CROWN_IS_CLEAN};
const std::string analysis_commit_hash = {ANALYSIS_COMMITHASH};
bool analysis_setup_clean = {ANALYSIS_IS_CLEAN};
int scope_counter = 0;
for (auto const &output : output_quantities) {
// output.first is the output file name
// output.second is the list of quantities

TFile outputfile(output.first.c_str(), "UPDATE");
TTree quantities_meta = TTree("quantities", "quantities");
for (auto const &quantity : output.second) {
quantities_meta.Branch(quantity.c_str(), &setup_clean);
}
quantities_meta.Write();
TTree variations_meta = TTree("variations", "variations");
for (auto const &variation : variations.at(output.first)) {
variations_meta.Branch(variation.c_str(), &setup_clean);
}
variations_meta.Write();
TTree conditions_meta = TTree("conditions", "conditions");
conditions_meta.Branch(analysis.c_str(), &setup_clean);
conditions_meta.Branch(config.c_str(), &setup_clean);
conditions_meta.Branch(era.c_str(), &setup_clean);
conditions_meta.Branch(sample.c_str(), &setup_clean);
conditions_meta.Write();
TTree commit_meta = TTree("commit", "commit");
commit_meta.Branch(commit_hash.c_str(), &setup_clean);
commit_meta.Fill();
commit_meta.Write();
TTree analysis_commit_meta =
TTree("analysis_commit", "analysis_commit");
analysis_commit_meta.Branch(analysis_commit_hash.c_str(),
&analysis_setup_clean);
analysis_commit_meta.Fill();
analysis_commit_meta.Write();

// -----------------------------
// Unified metadata container
// -----------------------------
nlohmann::json j;

j["metadata"] = {
{"analysis", analysis},
{"config", config},
{"era", era},
{"sample_type", sample_type},
{"commit", commit_hash},
{"analysis_commit", analysis_commit_hash},
{"is_clean", setup_clean},
{"analysis_is_clean", analysis_setup_clean}
};

j["content"] = {
{"quantities", output.second},
{"variations", variations.at(output.first)}
};

TObjString json(j.dump().c_str());
outputfile.WriteObject(&json, "metadata");

// -----------------------------
// Cutflow
// -----------------------------
if (nevents != 0) {

TH1D cutflow;
cutflow.SetName("cutflow");
cutflow.SetTitle("cutflow");
// iterate through the cutflow vector and fill the histogram with
// the .GetPass() values

if (cutReports.size() < scope_counter || cutReports.empty()) {
Logger::get("main")->critical(
"cutReports vector is too small, this should not happen");
return 1;
}

for (auto cut = cutReports[scope_counter].begin();
cut != cutReports[scope_counter].end(); cut++) {
cutflow.SetBinContent(
std::distance(cutReports[scope_counter].begin(), cut) + 1,
cut->GetPass());
cutflow.GetXaxis()->SetBinLabel(
std::distance(cutReports[scope_counter].begin(), cut) + 1,
cut->GetName().c_str());
cut != cutReports[scope_counter].end(); cut++) {

int bin = std::distance(cutReports[scope_counter].begin(), cut) + 1;

cutflow.SetBinContent(bin, cut->GetPass());
cutflow.GetXaxis()->SetBinLabel(bin, cut->GetName().c_str());
}
// store it in the output file

cutflow.Write();
}
outputfile.Close();
TFile *fout = TFile::Open(output.first.c_str(), "UPDATE");

// -----------------------------
// Shift maps
// -----------------------------
Logger::get("main")->info("Writing quantities map to {}", output.first);
fout->WriteObject(&shift_quantities_map.at(output.first),
"shift_quantities_map");
fout->WriteObject(&quantities_shift_map.at(output.first),
"quantities_shift_map");
fout->Close();

outputfile.WriteObject(&shift_quantities_map.at(output.first),
"shift_quantities_map");

outputfile.WriteObject(&quantities_shift_map.at(output.first),
"quantities_shift_map");

outputfile.Close();

scope_counter++;
}

Expand Down
8 changes: 4 additions & 4 deletions code_generation/code_generation.py
Original file line number Diff line number Diff line change
Expand Up @@ -390,12 +390,12 @@ def write_code(self, calls: str, includes: str, run_commands: str) -> None:
.replace(" // {RUN_COMMANDS}", run_commands)
.replace("// {MULTITHREADING}", threadcall)
.replace("// {DEBUGLEVEL}", self.set_debug_flag())
.replace("{ERATAG}", '"Era={}"'.format(self.configuration.era))
.replace("{ERATAG}", '"{}"'.format(self.configuration.era))
.replace(
"{SAMPLETAG}", '"Samplegroup={}"'.format(self.configuration.sample)
"{SAMPLETAG}", '"{}"'.format(self.configuration.sample)
)
.replace("{ANALYSISTAG}", '"Analysis={}"'.format(self.analysis_name))
.replace("{CONFIGTAG}", '"Config={}"'.format(self.config_name))
.replace("{ANALYSISTAG}", '"{}"'.format(self.analysis_name))
.replace("{CONFIGTAG}", '"{}"'.format(self.config_name))
.replace("{OUTPUT_QUANTITIES}", self.set_output_quantities())
.replace("{SHIFT_QUANTITIES_MAP}", self.set_shift_quantities_map())
.replace("{QUANTITIES_SHIFT_MAP}", self.set_quantities_shift_map())
Expand Down
Loading
Loading