37DataProcessorSpec generateData(
const std::string nameRootFile,
const std::string nameInputHist,
const std::string nameInputHistAdd,
const bool isTimeCalib,
const int nCellsPerEvent,
const int nEventsMax);
40void customize(std::vector<ConfigParamSpec>& workflowOptions)
42 std::vector<ConfigParamSpec> options{
43 {
"inputRootFile", VariantType::String,
"", {
"input root file from which data is taken, if empty, random data will be produced"}},
44 {
"nameInputHist", VariantType::String,
"", {
"name of the 2d histogram inside the root file used for the data generation"}},
45 {
"nameInputHistAdd", VariantType::String,
"", {
"Same as nameInputHist but can be added in addition if the time distribution is also needed for the bad channel calibration"}},
46 {
"isInputTimeCalib", VariantType::Bool,
false, {
"input is produced for time clibration or bad channel calibration. Information is needed if inputRootFiel is specified as it has ifferent content for bad channel calib and time calib"}},
47 {
"nEvents", VariantType::Int, 10000, {
"number of events that will be processed"}},
48 {
"nCellsPerEvent", VariantType::Int, 5, {
"number of cells per emcal triggered event"}}};
50 std::swap(workflowOptions, options);
58 const std::string nameRootFile = config.
options().
get<std::string>(
"inputRootFile");
59 const std::string nameInputHist = config.
options().
get<std::string>(
"nameInputHist");
60 const std::string nameInputHistAdd = config.
options().
get<std::string>(
"nameInputHistAdd");
61 const bool isTimeCalib = config.
options().
get<
bool>(
"isInputTimeCalib");
62 int nEventsMax = config.
options().
get<
int>(
"nEvents");
63 const int nCellsPerEvent = config.
options().
get<
int>(
"nCellsPerEvent");
66 workflow.emplace_back(
generateData(nameRootFile, nameInputHist, nameInputHistAdd, isTimeCalib, nCellsPerEvent, nEventsMax));
71DataProcessorSpec generateData(
const std::string nameRootFile,
const std::string nameInputHist,
const std::string nameInputHistAdd,
const bool isTimeCalib,
const int nCellsPerEvent,
const int nEventsMax)
73 std::vector<OutputSpec> outputSpecs;
78 bool useBadCellTimeInfo =
false;
81 std::default_random_engine generator;
82 std::uniform_real_distribution<> disCellID(0, 17663);
83 std::exponential_distribution<float> disEnergy(3.5);
84 std::normal_distribution<float> disTime(20, 10);
88 std::array<TH1F*, 17664> arrCellTimeHists;
89 if (nameRootFile.find(
".root") != std::string::npos) {
91 TFile*
f = TFile::Open(nameRootFile.c_str());
93 LOG(error) <<
"root file does not exist " << nameRootFile;
95 h2d = (TH2F*)
f->Get(nameInputHist.c_str());
97 LOG(error) <<
"histogram does not exist " << nameInputHist;
99 h2d->SetDirectory(
nullptr);
100 if (!nameInputHistAdd.empty()) {
101 TH2F* h2dAdd = (TH2F*)
f->Get(nameInputHistAdd.c_str());
103 LOG(error) <<
"histogram does not exist " << nameInputHistAdd;
105 h2dAdd->SetDirectory(
nullptr);
106 useBadCellTimeInfo =
true;
107 for (
int i = 0;
i < 17664; ++
i) {
108 arrCellTimeHists[
i] = (TH1F*)h2dAdd->ProjectionX(Form(
"proj_cell_time_%i",
i),
i + 1,
i + 1);
109 arrCellTimeHists[
i]->SetDirectory(
nullptr);
115 "emcal-cell-data-producer",
121 static int nEvent = 0;
122 if (nEvent >= nEventsMax) {
123 LOG(info) <<
"reached maximum amount of events requested " << nEvent <<
". returning now";
126 LOG(
debug) <<
"process event " << nEvent;
132 for (
int i = 0;
i < nCellsPerEvent; ++
i) {
139 h2d->GetRandom2(cellTime, cellID);
140 cellE = disEnergy(generator);
143 h2d->GetRandom2(cellE, cellID);
144 if (useBadCellTimeInfo) {
145 cellTime = arrCellTimeHists[cellID]->GetRandom();
147 cellTime = disTime(generator);
151 cellID = disCellID(generator);
152 cellE = disEnergy(generator);
153 cellTime = disTime(generator);
159 LOG(
debug) <<
"sending " << CellOutput.size() <<
"cells";
161 TriggerOutput.emplace_back(0, 0, 0, CellOutput.size());
ConfigParamRegistry & options() const
DataProcessorSpec generateData(const std::string nameRootFile, const std::string nameInputHist, const std::string nameInputHistAdd, const bool isTimeCalib, const int nCellsPerEvent, const int nEventsMax)