5#include <nlohmann/json.hpp>
11 , XStationPositions(NULL)
12 , YStationPositions(NULL)
13 , ZStationPositions(NULL)
19 , XStationPositions(NULL)
20 , YStationPositions(NULL)
21 , ZStationPositions(NULL)
26 Bool_t create_status = CreateConfigurationFromXMLFile(xml_config_file);
28 std::cerr <<
"Error: There are problems with creation of the configuration from XML (in BmnCSCStationSet)\n";
101 for (Int_t istation = 0; istation <
NStations; ++istation) {
119 if (
Stations[station]->AddPointToStation(xcoord, ycoord, zcoord, px, py, pz, dEloss, refID) != -1)
129 Int_t points_sum = 0;
130 for (Int_t iStation = 0; iStation <
NStations; iStation++) {
138 for (Int_t iStation = 0; iStation <
NStations; iStation++) {
145 Int_t points_sum = 0;
146 for (Int_t iStation = 0; iStation <
NStations; iStation++) {
155 for (Int_t iStation = 0; iStation <
NStations; iStation++) {
157 for (Int_t iModule = 0; iModule < NModules; ++iModule) {
158 if (
Stations[iStation]->GetModule(iModule)->IsPointInsideZThickness(zcoord)) {
169 for (Int_t iStation = 0; iStation <
NStations; iStation++) {
171 for (Int_t iModule = 0; iModule < NModules; ++iModule) {
173 if (
Stations[iStation]->GetModule(iModule)->IsPointInsideModule(xcoord, ycoord, zcoord)) {
181Bool_t BmnCSCStationSet::CreateConfigurationFromXMLFile(TString xml_config_file)
183 TDOMParser* parser =
new TDOMParser();
184 parser->SetValidate(
false);
186 Int_t parse_status = parser->ParseFile(xml_config_file);
187 if (parse_status != 0) {
188 std::cerr <<
"Error: An error occured when parsing the file! (in BmnCSCStationSet)\n";
192 TXMLNode* node =
parser->GetXMLDocument()->GetRootNode();
194 if (strcmp(node->GetNodeName(),
"StationSet") != 0) {
195 std::cerr <<
"Error: Incorrect name of the root element! (in BmnCSCStationSet)\n";
214 node = node->GetChildren();
215 Int_t currentStationNum = 0;
217 if (strcmp(node->GetNodeName(),
"Station") == 0) {
218 Bool_t b_parse_status = ParseStation(node, currentStationNum);
223 node = node->GetNextNode();
231Int_t BmnCSCStationSet::CountNumberOfStations(TXMLNode* node)
233 Int_t station_cnt = 0;
234 node = node->GetChildren();
236 if (strcmp(node->GetNodeName(),
"Station") == 0) {
239 node = node->GetNextNode();
244Bool_t BmnCSCStationSet::ParseStation(TXMLNode* node, Int_t iStation)
247 if (node->HasAttributes()) {
248 TList* attrList = node->GetAttributes();
250 TIter next(attrList);
252 while ((attr = (TXMLAttr*)next()) !=
nullptr) {
253 if (strcmp(attr->GetName(),
"xPosition") == 0) {
256 if (strcmp(attr->GetName(),
"yPosition") == 0) {
259 if (strcmp(attr->GetName(),
"zPosition") == 0) {
271 Int_t stat = it.first;
272 if (iStation == stat) {
288 TString gPathConfig = getenv(
"VMCWORKDIR");
289 std::ifstream
f(gPathConfig +
"/config/bmnconf.json");
291 json jss = data[
"Detectors"][
"csc"][
"StationSet"];
292 TString conf_subdir = jss.
value(
"Dir",
"");
293 json xmlConfFileNameJ = jss[to_string(stp).c_str()];
294 TString xmlConfFileName = jss[
"Setup"][to_string(stp).c_str()][
"Period"].
value(to_string(period).c_str(),
"");
295 TString gPathCscConfig = gPathConfig +
"/" + conf_subdir +
"/";
296 return std::make_unique<BmnCSCStationSet>(gPathCscConfig + xmlConfFileName);
BmnCSCStation ** Stations
Double_t GetZStationPosition(Int_t station_num)
virtual ~BmnCSCStationSet()
map< Int_t, TVector3 > * fStatShifts
void ProcessPointsInDetector()
static unique_ptr< BmnCSCStationSet > Create(Int_t period, Int_t stp=0)
BmnCSCStation * GetStation(Int_t station_num)
Double_t * ZStationPositions
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)
Double_t * XStationPositions
Double_t GetYStationPosition(Int_t station_num)
Double_t GetXStationPosition(Int_t station_num)
Double_t * YStationPositions
Int_t CountNAddedToDetectorPoints()
Int_t GetPointStationOwnership(Double_t zcoord)
Int_t CountNProcessedPointsInDetector()
Int_t CountNAddedToStationPoints()
Int_t CountNProcessedPointInStation()
void ProcessPointsInStation()
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