11 #include <alignment/modules/AlignmentGenerator/AlignmentGeneratorModule.h>
13 #include <alignment/dbobjects/VXDAlignment.h>
14 #include <framework/database/Database.h>
15 #include <vxd/dataobjects/VxdID.h>
16 #include <vxd/geometry/GeoCache.h>
20 #include <boost/algorithm/string.hpp>
35 std::vector<std::string> emptyData;
36 std::vector<int> infiniteIov{0, 0, -1, -1};
38 setPropertyFlags(c_ParallelProcessingCertified);
40 setDescription(
"Generates VXD alignment."
41 "Generated alignment overrides any existing one in reconstruction if done with this module. "
42 "The generated object can also be stored as payload in the (local) DB, to keep track of it."
46 addParam(
"payloadIov", m_payloadIov,
"IoV of the payload to be created. List "
47 "of four numbers: first experiment, first run, last experiment, "
48 "last run", infiniteIov);
49 addParam(
"createPayload", m_createPayload,
"Store the generated alignment as payload in DB?",
bool(
false));
50 addParam(
"data", m_data,
51 "Data for alignment in format ['layer.ladder.sensor, parameter_no, distribution=fix|gaus|uniform, value', ...]",
53 addParam(
"payloadName", m_payloadName,
"Name of generated alignment payload in database. If empty, default is used",
63 for (
auto paramData :
m_data) {
64 std::vector<std::string> paramDataParts;
65 boost::algorithm::split(paramDataParts, paramData, boost::is_any_of(
","));
66 if (paramDataParts.size() != 4)
67 B2FATAL(
"Error parsing alignment data.");
69 boost::trim(paramDataParts[0]);
70 boost::trim(paramDataParts[1]);
71 boost::trim(paramDataParts[2]);
72 boost::trim(paramDataParts[3]);
74 VxdID idMask(paramDataParts[0]);
75 int paramID = std::stoi(paramDataParts[1]);
76 std::string distro = paramDataParts[2];
77 double value = std::stod(paramDataParts[3]);
79 double generatedValue = 0.;
80 if (distro ==
"fix") generatedValue = value;
81 else if (distro ==
"gaus") generatedValue = gRandom->Gaus(0., value);
82 else if (distro ==
"uniform") generatedValue = gRandom->Uniform(-value, value);
83 else B2FATAL(
"Unknown distribution for parameter generation: " << distro <<
" Valid options are fix|gaus|uniform");
89 data->set(
id, paramID, generatedValue);
95 B2WARNING(
"Overriding VXDAlignment in DBStore with new object. This will affect reconstruction if done in this job.");
100 B2FATAL(
"Payload IoV incorrect. Should be list of four numbers.");
102 B2INFO(
"Storing VXDAlignment payload in DB.");