Back to home page

sPhenix code displayed by LXR

 
 

    


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 // relying on our standard filenames ...-<runnumber>-<segment>.<ext>
0011 // extract run number and segment number from filename
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   // tokenizer does not have reverse iterator, so fill it in vector
0020   // and reverse iterate on vector
0021   std::vector<std::string> tokens;
0022   for (const auto& t : tok)
0023   {
0024     tokens.push_back(t);
0025   }
0026   tokens.pop_back();  // remove the file extension
0027   // try to extract segment number
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();  // remove the segment number
0044   // try to extract run number
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 }