File indexing completed on 2025-08-05 08:16:11
0001 #include "Fun4AllUtils.h"
0002
0003 #include <boost/lexical_cast.hpp>
0004 #include <boost/tokenizer.hpp>
0005
0006 #include <algorithm> // for max
0007 #include <iostream>
0008 #include <vector>
0009
0010
0011
0012 std::pair<int, int>
0013 Fun4AllUtils::GetRunSegment(const std::string& filename)
0014 {
0015 int runnumber = 0;
0016 int segment = -9999;
0017 boost::char_separator<char> sep("-.");
0018 boost::tokenizer<boost::char_separator<char> > tok(filename, sep);
0019
0020
0021 std::vector<std::string> tokens;
0022 for (const auto& t : tok)
0023 {
0024 tokens.push_back(t);
0025 }
0026 tokens.pop_back();
0027
0028 try
0029 {
0030 segment = boost::lexical_cast<int>((*(tokens.rbegin())));
0031 }
0032 catch (boost::bad_lexical_cast const&)
0033 {
0034 std::cout << "Cannot extract segment number from filename "
0035 << filename << std::endl;
0036 std::cout << "Segment string after parsing: input string "
0037 << *(tokens.rbegin())
0038 << " is not valid segment number" << std::endl;
0039 std::cout << "filename " << filename << " not standard -runnumber-segment.ext"
0040 << std::endl;
0041 std::cout << "using " << segment << " as segment number" << std::endl;
0042 }
0043 tokens.pop_back();
0044
0045 try
0046 {
0047 runnumber = boost::lexical_cast<int>((*(tokens.rbegin())));
0048 }
0049 catch (boost::bad_lexical_cast const&)
0050 {
0051 std::cout << "Cannot extract run number from filename "
0052 << filename << std::endl;
0053 std::cout << "Segment string after parsing: input string "
0054 << *(tokens.rbegin())
0055 << " is not valid run number" << std::endl;
0056 std::cout << "filename " << filename << " not standard -runnumber-segment.ext"
0057 << std::endl;
0058 std::cout << "returning " << runnumber << " as run number" << std::endl;
0059 }
0060 return std::make_pair(runnumber, segment);
0061 }