22#include <fmt/format.h>
23#include "boost/program_options.hpp"
24#include <rapidjson/document.h>
25#include <rapidjson/stringbuffer.h>
26#include <rapidjson/writer.h>
33void stripsInfo2json(
const std::vector<o2::mid::ExtendedMappingInfo>& infos,
const char* outDir)
35 rapidjson::StringBuffer
buffer;
36 rapidjson::Writer<rapidjson::StringBuffer> writer(
buffer);
38 for (
size_t idx = 0; idx < infos.size(); ++idx) {
41 writer.Int(infos[idx].
id);
45 writer.String(infos[idx].rpc.c_str());
47 writer.Int(infos[idx].deId);
48 writer.Key(
"columnId");
49 writer.Int(infos[idx].columnId);
51 writer.Int(infos[idx].lineId);
52 writer.Key(
"stripId");
53 writer.Int(infos[idx].stripId);
54 writer.Key(
"cathode");
55 writer.Int(infos[idx].cathode);
57 writer.Int(infos[idx].locId);
58 writer.Key(
"locIdDcs");
59 writer.String(infos[idx].locIdDcs.c_str());
60 writer.Key(
"locIdHw");
61 writer.String(infos[idx].locIdHw.c_str());
66 std::ofstream outInfo(fmt::format(
"{}/stripInfo.json", outDir));
67 outInfo <<
buffer.GetString() << std::endl;
70void strips2json(
const std::vector<o2::mid::ExtendedMappingInfo>& infos,
const char* outDir)
72 rapidjson::StringBuffer
buffer;
73 rapidjson::Writer<rapidjson::StringBuffer> writer(
buffer);
79 writer.Key(
"vertices");
84 writer.Int(info.xpos);
86 writer.Int(info.ypos);
91 writer.Int(info.xpos + info.xwidth);
93 writer.Int(info.ypos);
98 writer.Int(info.xpos + info.xwidth);
100 writer.Int(info.ypos + info.ywidth);
103 writer.StartObject();
105 writer.Int(info.xpos);
107 writer.Int(info.ypos + info.ywidth);
110 writer.StartObject();
112 writer.Int(info.xpos);
114 writer.Int(info.ypos);
120 std::array<std::string, 2> planes{
"bending",
"non-bending"};
123 for (
int icath = 0; icath < 2; ++icath) {
124 std::string fname = fmt::format(
"{}/strips.{}.{}.json", outDir, ide, planes[icath]);
126 for (
auto& info : infos) {
127 if (info.deId == ide && info.cathode == icath) {
132 std::ofstream outFile(fname);
133 outFile <<
buffer.GetString() << std::endl;
139void de2json(
const std::map<
int, std::vector<std::pair<int, int>>>& deMap,
const char* outDir)
141 rapidjson::StringBuffer
buffer;
142 rapidjson::Writer<rapidjson::StringBuffer> writer(
buffer);
143 for (
auto& item : deMap) {
145 writer.StartObject();
147 writer.Int(item.first);
148 writer.Key(
"vertices");
150 for (
auto& vtx : item.second) {
151 writer.StartObject();
153 writer.Int(vtx.first);
155 writer.Int(vtx.second);
161 std::string fname = fmt::format(
"{}/de.{}.json", outDir, item.first);
162 std::ofstream outFile(fname);
163 outFile <<
buffer.GetString() << std::endl;
167void writeJson(
const std::vector<o2::mid::ExtendedMappingInfo>& infos,
const std::map<
int, std::vector<std::pair<int, int>>>& deMap,
const char* outDir)
170 if (!std::filesystem::exists(outDir)) {
171 std::filesystem::create_directory(outDir);
178int main(
int argc,
char* argv[])
180 po::variables_map vm;
181 po::options_description
generic(
"Generic options");
186 generic.add_options()
187 (
"help,h",
"produce help message")
188 (
"outdir,o", po::value<std::string>(&outDir)->default_value(
"midmapping"),
"Output directory")
192 po::options_description cmdline;
193 cmdline.add(generic);
195 po::store(po::command_line_parser(argc, argv).options(cmdline).run(), vm);
197 if (vm.count(
"help")) {
198 std::cout <<
generic <<
"\n";
204 }
catch (boost::program_options::error& e) {
205 std::cout <<
"Error: " << e.what() <<
"\n";
Useful detector parameters for MID.
void de2json(const std::map< int, std::vector< std::pair< int, int > > > &deMap, const char *outDir)
void stripsInfo2json(const std::vector< o2::mid::ExtendedMappingInfo > &infos, const char *outDir)
void writeJson(const std::vector< o2::mid::ExtendedMappingInfo > &infos, const std::map< int, std::vector< std::pair< int, int > > > &deMap, const char *outDir)
void strips2json(const std::vector< o2::mid::ExtendedMappingInfo > &infos, const char *outDir)
void setScaleFactor(int scaleFactor)
Sets the scale factor for geometrical positions and sizes.
std::map< int, std::vector< std::pair< int, int > > > buildDEGeom() const
Build the geometry for the Detection elements.
std::vector< ExtendedMappingInfo > buildStripsInfo() const
Build the strips info.
constexpr int NDetectionElements
Number of RPCs.