4 #include "TTreeIndex.h" 
    7 #include <unordered_map> 
   12   switch (m_accessMode) {
 
   13   case AccessMode::Read:
 
   14     m_data.chain = 
new TChain(
"NAIAChain");
 
   15     m_rti.chain = 
new TChain(
"RTI");
 
   16     m_file.chain = 
new TChain(
"FileInfo");
 
   18   case AccessMode::Write:
 
   19     m_data.tree = 
new TTree(
"NAIAChain", 
"AMS-Italy ntuple tree");
 
   20     m_rti.tree = 
new TTree(
"RTI", 
"RTIInfo tree");
 
   21     m_file.tree = 
new TTree(
"FileInfo", 
"FileInfo tree");
 
   24     throw std::runtime_error(
"NAIAChain::GetEntries - Unrecognized access mode");
 
   29   static int currentTree = -1;
 
   34     spdlog::trace(
"Event {} -> CHANGING TREE", iEv);
 
   49   static unsigned int lastSec = 0;
 
   52     throw(std::runtime_error(
"GetEventRTIInfo called on a MC chain"));
 
   58       throw std::runtime_error(
 
   59           fmt::format(
"Failed to read entry for UTC second {} from RTI tree. (ec: {})", 
m_event.
header->
UTCTime, rc));
 
   67   static unsigned int lastRun = 0;
 
   78   static unsigned int lastRun = 0;
 
   81     throw(std::runtime_error(
"GetEventMCFileInfo called on a non-MC chain"));
 
   92   static const std::string &fnName = 
"NAIAChain::GetRTITree";
 
   99     logger->error(
"Not supported in Write mode");
 
  102     throw std::runtime_error(
"NAIAChain::GetRTITree - Unrecognized access mode");
 
  107   static const std::string &fnName = 
"NAIAChain::GetFileInfoTree";
 
  114     logger->error(
"Not supported in Write mode");
 
  117     throw std::runtime_error(
"NAIAChain::GetFileInfoTree - Unrecognized access mode");
 
  141     throw std::runtime_error(
"NAIAChain::Add - Unrecognized access mode");
 
  152     throw std::runtime_error(
"NAIAChain::Fill - Unrecognized access mode");
 
  163     throw std::runtime_error(
"NAIAChain::FillRTI - Unrecognized access mode");
 
  174     throw std::runtime_error(
"NAIAChain::FillFileInfo - Unrecognized access mode");
 
  185     throw std::runtime_error(
"NAIAChain::GetEntries - Unrecognized access mode");
 
  200     throw std::runtime_error(
"NAIAChain::Print - Unrecognized access mode");
 
  215       spdlog::debug(
"Building RTIInfo index");
 
  216       m_rti.
tree->BuildIndex(
"RTIInfo.UTCTime");
 
  220     m_data.
tree->BuildIndex(
"HeaderData.Run", 
"HeaderData.EventNo");
 
  223     throw std::runtime_error(
"NAIAChain::Write - Unrecognized access mode");
 
  247     if (create_MC_branches)
 
  252     throw std::runtime_error(
"NAIAChain::SetupBranches - Unrecognized access mode");
 
  257     {
"EventSummary", [](
Event &event) { 
event.evSummary.DisableIO(); }},
 
  258     {
"DAQ", [](
Event &event) { 
event.daq.DisableIO(); }},
 
  259     {
"TofBase", [](
Event &event) { 
event.tofBase.DisableIO(); }},
 
  260     {
"TofPlus", [](
Event &event) { 
event.tofPlus.DisableIO(); }},
 
  261     {
"TofBaseStandalone", [](
Event &event) { 
event.tofBaseSt.DisableIO(); }},
 
  262     {
"TofPlusStandalone", [](
Event &event) { 
event.tofPlusSt.DisableIO(); }},
 
  263     {
"EcalBase", [](
Event &event) { 
event.ecalBase.DisableIO(); }},
 
  264     {
"EcalPlus", [](
Event &event) { 
event.ecalPlus.DisableIO(); }},
 
  265     {
"TrTrackBase", [](
Event &event) { 
event.trTrackBase.DisableIO(); }},
 
  266     {
"TrTrackPlus", [](
Event &event) { 
event.trTrackPlus.DisableIO(); }},
 
  267     {
"SecondTrTrackBase", [](
Event &event) { 
event.secondTrTrackBase.DisableIO(); }},
 
  268     {
"TrTrackBaseStandalone", [](
Event &event) { 
event.trTrackBaseSt.DisableIO(); }},
 
  269     {
"TrdKBase", [](
Event &event) { 
event.trdKBase.DisableIO(); }},
 
  270     {
"TrdKBaseStandalone", [](
Event &event) { 
event.trdKBaseSt.DisableIO(); }},
 
  271     {
"RichBase", [](
Event &event) { 
event.richBase.DisableIO(); }},
 
  272     {
"RichPlus", [](
Event &event) { 
event.richPlus.DisableIO(); }},
 
  273     {
"UnbExtHitBase", [](
Event &event) { 
event.extHitBase.DisableIO(); }},
 
  274     {
"MCTruthBase", [](
Event &event) { 
event.mcTruthBase.DisableIO(); }},
 
  275     {
"MCTruthPlus", [](
Event &event) { 
event.mcTruthPlus.DisableIO(); }},
 
  279   static const std::string &fnName = 
"NAIAChain::CreateSkimTree";
 
  282   auto outFile = std::make_unique<TFile>(filename.c_str(), 
"recreate");
 
  284   newChain->m_isMC = 
m_isMC;
 
  286   if (!exclBranches.empty()) {
 
  287     for (
const std::string &container : 
TokenizeString(exclBranches, 
';')) {
 
  289         logger->info(
"Disabling container {}", container);
 
  292         logger->error(
"Unknown container {}", container);
 
  298   newChain->m_event.MirrorBranches(newChain->m_data.tree, 
m_event);
 
  300   return {std::move(outFile), std::move(newChain), 
this};
 
  304   static const std::string &fnName = 
"NAIAChain::SetEntryList";
 
  309     logger->error(
"TEntryList not supported in Write mode");
 
  320   static const std::string &fnName = 
"NAIAChain::CheckVersion";
 
  323   NAIA::Version this_version{};
 
  325   auto file = std::unique_ptr<TFile>(TFile::Open(filePath.c_str()));
 
  326   NAIA::Version *file_version = file->Get<NAIA::Version>(
"VersionHeader");
 
  328     logger->error(
"NAIA version header not found in file {}. This file will be skipped.", filePath);
 
  332   if (file_version->major != this_version.major) {
 
  333     logger->error(
"Major version mismatch in file {} ({} on file vs {} in this library). This file will be skipped.",
 
  334                   filePath, file_version->major, this_version.major);
 
  338   if (file_version->minor != this_version.minor) {
 
  339     logger->warn(
"Minor version mismatch in file {} ({} on file vs {} in this library). This should be fine, however " 
  340                  "please report any issue to the NAIA development team.",
 
  341                  filePath, file_version->minor, this_version.minor);