5#include <nlohmann/json.hpp>
11 , XStationPositions(nullptr)
12 , YStationPositions(nullptr)
13 , ZStationPositions(nullptr)
14 , BeamHoleRadiuses(nullptr)
15 , GemStations(nullptr)
16 , fStatShifts(nullptr)
21 , XStationPositions(nullptr)
22 , YStationPositions(nullptr)
23 , ZStationPositions(nullptr)
24 , BeamHoleRadiuses(nullptr)
25 , GemStations(nullptr)
28 Bool_t create_status = CreateConfigurationFromXMLFile(xml_config_file);
31 <<
"Error: There are problems with creation of the configuration from XML (in BmnGemStripStationSet)\n";
38 , XStationPositions(nullptr)
39 , YStationPositions(nullptr)
40 , ZStationPositions(nullptr)
41 , BeamHoleRadiuses(nullptr)
42 , GemStations(nullptr)
45 TString gPathConfig = getenv(
"VMCWORKDIR");
46 TString xml_config_file;
50 xml_config_file =
"GemRun8.xml";
52 xml_config_file =
"GemRunSRC2021.xml";
57 xml_config_file =
"GemRunSpring2018.xml";
59 xml_config_file =
"GemRunSRCSpring2018.xml";
63 xml_config_file =
"GemRunSpring2017.xml";
66 printf(
"Error! Unknown config!\n");
70 if (xml_config_file.Length()) {
71 xml_config_file = gPathConfig +
"/parameters/gem/XMLConfigs/" + xml_config_file;
72 Bool_t create_status = CreateConfigurationFromXMLFile(xml_config_file);
75 <<
"Error: There are problems with creation of the configuration from XML (in BmnGemStripStationSet)\n";
161 for (Int_t istation = 0; istation <
NStations; ++istation) {
179 if (
GemStations[station]->AddPointToStation(xcoord, ycoord, zcoord, px, py, pz, dEloss, refID) != -1)
189 Int_t points_sum = 0;
190 for (Int_t iStation = 0; iStation <
NStations; iStation++) {
198 for (Int_t iStation = 0; iStation <
NStations; iStation++) {
205 Int_t points_sum = 0;
206 for (Int_t iStation = 0; iStation <
NStations; iStation++) {
221 for (Int_t iStation = 0; iStation <
NStations; iStation++) {
223 for (Int_t iModule = 0; iModule < NModules; ++iModule) {
224 if (
GemStations[iStation]->GetModule(iModule)->IsPointInsideZThickness(zcoord)) {
235 for (Int_t iStation = 0; iStation <
NStations; iStation++) {
237 for (Int_t iModule = 0; iModule < NModules; ++iModule) {
239 if (
GemStations[iStation]->GetModule(iModule)->IsPointInsideModule(xcoord, ycoord, zcoord)) {
247Bool_t BmnGemStripStationSet::CreateConfigurationFromXMLFile(TString xml_config_file)
249 TDOMParser* parser =
new TDOMParser();
250 parser->SetValidate(
false);
252 Int_t parse_status = parser->ParseFile(xml_config_file);
253 if (parse_status != 0) {
254 std::cerr <<
"Error: An error occured when parsing the file! (in BmnGemStripStationSet)\n";
259 TXMLNode* node =
parser->GetXMLDocument()->GetRootNode();
261 if (strcmp(node->GetNodeName(),
"StationSet") != 0) {
262 std::cerr <<
"Error: Incorrect name of the root element! (in BmnGemStripStationSet)\n";
284 node = node->GetChildren();
285 Int_t currentStationNum = 0;
287 if (strcmp(node->GetNodeName(),
"Station") == 0) {
288 Bool_t b_parse_status = ParseStation(node, currentStationNum);
289 if (!b_parse_status) {
295 node = node->GetNextNode();
303Int_t BmnGemStripStationSet::CountNumberOfStations(TXMLNode* node)
305 Int_t station_cnt = 0;
306 node = node->GetChildren();
308 if (strcmp(node->GetNodeName(),
"Station") == 0) {
311 node = node->GetNextNode();
316Bool_t BmnGemStripStationSet::ParseStation(TXMLNode* node, Int_t iStation)
319 if (node->HasAttributes()) {
320 TList* attrList = node->GetAttributes();
322 TIter next(attrList);
324 while ((attr = (TXMLAttr*)next()) !=
nullptr) {
325 if (strcmp(attr->GetName(),
"xPosition") == 0) {
328 if (strcmp(attr->GetName(),
"yPosition") == 0) {
331 if (strcmp(attr->GetName(),
"zPosition") == 0) {
334 if (strcmp(attr->GetName(),
"beamHole") == 0) {
346 Int_t stat = it.first;
347 if (iStation == stat) {
364 TString gPathConfig = getenv(
"VMCWORKDIR");
365 std::ifstream
f(gPathConfig +
"/config/bmnconf.json");
367 json jss = data[
"Detectors"][
"gem"][
"StationSet"];
368 TString conf_subdir = jss.
value(
"Dir",
"");
369 json xmlConfFileNameJ = jss[to_string(stp).c_str()];
370 TString xmlConfFileName = jss[
"Setup"][to_string(stp).c_str()][
"Period"].
value(to_string(period).c_str(),
"");
371 TString gPathCscConfig = gPathConfig +
"/" + conf_subdir +
"/";
372 return std::make_unique<BmnGemStripStationSet>(gPathCscConfig + xmlConfFileName);
BmnGemStripStation ** GemStations
Int_t CountNAddedToDetectorPoints()
map< Int_t, TVector3 > * fStatShifts
Double_t GetXStationPosition(Int_t station_num)
virtual ~BmnGemStripStationSet()
Double_t * YStationPositions
BmnGemStripStation * GetGemStation(Int_t station_num)
static unique_ptr< BmnGemStripStationSet > Create(Int_t period, Int_t stp=0)
Double_t * BeamHoleRadiuses
void ProcessPointsInDetector()
Int_t CountNProcessedPointsInDetector()
Double_t GetZStationPosition(Int_t station_num)
Double_t GetYStationPosition(Int_t station_num)
Double_t GetBeamHoleRadius(Int_t station_num)
Double_t * XStationPositions
Double_t * ZStationPositions
Int_t GetPointStationOwnership(Double_t zcoord)
Bool_t AddPointToDetector(Double_t xcoord, Double_t ycoord, Double_t zcoord, Double_t px, Double_t py, Double_t pz, Double_t dEloss, Int_t refID)
Int_t CountNProcessedPointInStation()
void ProcessPointsInStation()
Int_t CountNAddedToStationPoints()
a class to store JSON values
ValueType value(const typename object_t::key_type &key, const ValueType &default_value) const
access specified object element with default value
static JSON_HEDLEY_WARN_UNUSED_RESULT basic_json parse(InputType &&i, const parser_callback_t cb=nullptr, const bool allow_exceptions=true, const bool ignore_comments=false)
deserialize from a compatible input
basic_json<> json
default specialization