Skip to content
Snippets Groups Projects
Select Git revision
  • mcbm_data_analysis
  • master default
  • 6-mrich_changes
  • 5-msts_mmuch_changes
  • 10-unpack_par_mq_macro_changes
  • 11-evt_builder_changes
  • 12-acc_timing_evts
  • 8-mq_changes
  • 9-general_changes
  • to_be_merged
  • 7-mtrd_changes
  • to_be_merged_reordered
  • mMQ
  • mmuch
  • mbmon
  • fix_geo_tag_history
  • analysis
  • mtof
  • mpsd
  • mrich
  • dev_2021_17
  • RC1_APR21
  • dev_2021_16
  • dev_2021_15
  • dev_2021_14
  • dev_2021_13
  • dev_2021_12
  • dev_2021_11
  • dev_2021_10
  • dev_2021_09
  • dev_2021_08
  • dev_2021_07
  • dev_2021_06
33 results

CODEOWNERS

Blame
  • Forked from mCBM / cbmroot
    Source project has a limited visibility.
    MainConfig.cxx 3.35 KiB
    /* Copyright (C) 2023 GSI Helmholtzzentrum fuer Schwerionenforschung, Darmstadt
       SPDX-License-Identifier: GPL-3.0-only
       Authors: Volker Friese [committer] */
    
    #include "MainConfig.h"
    
    #include <fstream>
    
    #include <yaml-cpp/yaml.h>
    
    namespace cbm::algo
    {
    
      // -----   Load configuration from YAML file   --------------------------------
      void MainConfig::LoadYaml(const std::string& filename)
      {
        YAML::Node config = YAML::LoadFile(filename);
    
        // --- Digi trigger
        fTriggerDet       = ToCbmModuleIdCaseInsensitive(config["trigger"]["detector"].as<std::string>());
        fTriggerWin       = config["trigger"]["window"].as<double>();
        fTriggerThreshold = config["trigger"]["threshold"].as<size_t>();
        fTriggerDeadTime  = config["trigger"]["deadtime"].as<double>();
    
        // --- Event builder: (detector -> (tMin, tMax))
        if (auto eventbuilder = config["eventbuilder"]) {
          if (auto windows = eventbuilder["windows"]) {
            for (YAML::const_iterator it = windows.begin(); it != windows.end(); ++it) {
              auto det              = ToCbmModuleIdCaseInsensitive(it->first.as<std::string>());
              auto lower            = it->second[0].as<double>();
              auto upper            = it->second[1].as<double>();
              fEvtbuildWindows[det] = std::make_pair(lower, upper);
            }
          }
        }
    
        // --- Event selector parameters
        fSelectMinStationsSts = config["selector"]["minStationsSts"].as<size_t>();
        fSelectMinStationsTof = config["selector"]["minStationsTof"].as<size_t>();
        fSelectMinDigisBmon   = config["selector"]["minDigisBmon"].as<size_t>();
    
        // --- Branch persistence in output file
        fStoreTimeslice = config["store"]["timeslice"].as<bool>();
        fStoreTrigger   = config["store"]["triggers"].as<bool>();
        fStoreEvents    = config["store"]["events"].as<bool>();
    
        // --- QA publishing
        fHttpServerRefreshRate = config["qa"]["refreshrate"].as<int32_t>(fHttpServerRefreshRate);
      }
      // ----------------------------------------------------------------------------
    
    
      // -----   Save configuration to YAML file   ----------------------------------
      void MainConfig::SaveYaml(const std::string& filename)
      {
        YAML::Node config;
    
        // --- Digi trigger
        config["trigger"]["detector"]  = ToString(fTriggerDet);
        config["trigger"]["window"]    = fTriggerWin;
        config["trigger"]["threshold"] = fTriggerThreshold;
        config["trigger"]["deadtime"]  = fTriggerDeadTime;
    
        // --- Event builder: (detector -> (tMin, tMax))
        for (const auto& [key, value] : fEvtbuildWindows) {
          auto det = ToString(key);
          config["eventbuilder"]["windows"][det].push_back(value.first);
          config["eventbuilder"]["windows"][det].push_back(value.second);
        };
    
        // --- Event selector
        config["selector"]["minStationsSts"] = fSelectMinStationsSts;
        config["selector"]["minStationsTof"] = fSelectMinStationsTof;
        config["selector"]["minDigisBmon"]   = fSelectMinDigisBmon;
    
    
        // --- Branch persistence in output file
        config["store"]["timeslice"] = fStoreTimeslice;
        config["store"]["triggers"]  = fStoreTrigger;
        config["store"]["events"]    = fStoreEvents;
        // --- QA publishing
        config["qa"]["refreshrate"] = fHttpServerRefreshRate;
        // ---
        std::ofstream fout(filename);
        fout << config;
      }
      // ----------------------------------------------------------------------------
    
    } /* namespace cbm::algo */