ATLAS Offline Software
PhysicsAnalysis/JetMissingEtID/JetSelectorTools/JetSelectorTools/Helpers.h
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2018 CERN for the benefit of the ATLAS collaboration
3 */
4 
5 #ifndef JETSELECTORTOOLS_HELPERS_H
6 #define JETSELECTORTOOLS_HELPERS_H
7 
8 #include <iostream>
9 #include <sstream>
10 #include <string>
11 #include <vector>
12 
13 #include "TString.h"
14 #include "TObjString.h"
15 #include "TObjArray.h"
16 #include "TFile.h"
17 
19 
20 
21 namespace JCT
22 {
23 
24 namespace utils
25 {
26  // Check variable types from strings
27  template<typename T>
28  bool isTypeObjFromString(const std::string& str);
29  template<typename T>
30  bool isTypeObjFromString(const TString& str);
31 
32  // Get variables from strings
33  template<typename T>
34  bool getTypeObjFromString(const std::string& str, T& obj);
35  template<typename T>
36  T getTypeObjFromString(const std::string& str);
37  template<typename T>
38  bool getTypeObjFromString(const TString& str, T& obj);
39  template<typename T>
40  T getTypeObjFromString(const TString& str);
41 
42  // Specializations of getting variables from strings
43  template <>
44  bool getTypeObjFromString<std::string>(const std::string& str, std::string& obj);
45  template <>
46  bool getTypeObjFromString<TString>(const std::string& str, TString& obj);
47  template <>
48  bool getTypeObjFromString<bool>(const std::string& str, bool& obj);
49  template <>
50  bool getTypeObjFromString<std::string>(const TString& str, std::string& obj);
51  template <>
52  bool getTypeObjFromString<TString>(const TString& str, TString& obj);
53  template <>
54  bool getTypeObjFromString<bool>(const TString& str, bool& obj);
55 
56  // Convert strings to vectors of objects
57  template <typename T>
58  bool vectorize(const TString& str, const TString& sep, std::vector<T>& result);
59  template <typename T>
60  std::vector<T> vectorize(const TString& str, const TString& sep);
61 
62  // Check if a file exists
63  bool fileExists(const TString& fileName);
64  bool fileExists(const std::string& fileName);
65 }
66 
67 template <typename T>
68 bool utils::isTypeObjFromString(const std::string& str)
69 {
70  std::istringstream iss(str);
71  T obj;
72  return !(iss >> obj).fail();
73 }
74 
75 template <typename T>
76 bool utils::isTypeObjFromString(const TString& str)
77 {
78  std::string stdstr = str.Data();
79  return isTypeObjFromString<T>(stdstr);
80 }
81 
82 template <typename T>
83 bool utils::getTypeObjFromString(const std::string& str, T& obj)
84 {
85  std::istringstream iss(str);
86  return !(iss >> obj).fail();
87 }
88 template <typename T>
89 T utils::getTypeObjFromString(const std::string& str)
90 {
91  T toReturn;
92  if (!getTypeObjFromString(str,toReturn))
93  printf("Failed to convert object: %s\n",str.c_str());
94 
95  return toReturn;
96 }
97 template <typename T>
98 bool utils::getTypeObjFromString(const TString& str, T& obj)
99 {
100  std::string stdstr = str.Data();
101  return getTypeObjFromString(stdstr,obj);
102 }
103 template <typename T>
105 {
106  T toReturn;
107  if (!getTypeObjFromString(str,toReturn))
108  printf("ERROR: Failed to convert object: %s\n",str.Data());
109 
110  return toReturn;
111 }
112 
113 template <typename T>
114 bool utils::vectorize(const TString& str, const TString& sep, std::vector<T>& result)
115 {
116  bool success = true;
117  result.clear();
118 
119  TObjArray* tokens = str.Tokenize(sep);
120  TIter istr(tokens);
121  while(TObjString* os=(TObjString*)istr())
122  {
123  T obj;
124  if (!getTypeObjFromString(os->GetString(),obj))
125  {
126  success = false;
127  break;
128  }
129  else
130  result.push_back(obj);
131  }
132  delete tokens;
133 
134  return success;
135 }
136 
137 template <typename T>
138 std::vector<T> utils::vectorize(const TString& str, const TString& sep)
139 {
140  std::vector<T> result;
141  TObjArray* tokens = str.Tokenize(sep);
142  TIter istr(tokens);
143 
144  while(TObjString* os=(TObjString*)istr())
145  {
146  T obj;
147  if (!getTypeObjFromString(os->GetString(),obj))
148  printf("ERROR: String \"%s\" is not the requested type\n",os->GetString().Data());
149  result.push_back(obj);
150  }
151  delete tokens;
152 
153  return result;
154 }
155 
156 } // end JCT namespace
157 
158 #endif
159 
160 
JCT::utils::getTypeObjFromString< bool >
bool getTypeObjFromString< bool >(const std::string &str, bool &obj)
Definition: PhysicsAnalysis/JetMissingEtID/JetSelectorTools/Root/Helpers.cxx:30
get_generator_info.result
result
Definition: get_generator_info.py:21
JCT::utils::getTypeObjFromString
T getTypeObjFromString(const TString &str)
Definition: PhysicsAnalysis/JetMissingEtID/JetSelectorTools/JetSelectorTools/Helpers.h:104
JCT::utils::fileExists
bool fileExists(const TString &fileName)
Definition: PhysicsAnalysis/JetMissingEtID/JetSelectorTools/Root/Helpers.cxx:91
beamspotman.tokens
tokens
Definition: beamspotman.py:1284
FortranAlgorithmOptions.fileName
fileName
Definition: FortranAlgorithmOptions.py:13
JCT::utils::isTypeObjFromString
bool isTypeObjFromString(const std::string &str)
Definition: PhysicsAnalysis/JetMissingEtID/JetSelectorTools/JetSelectorTools/Helpers.h:68
JCT
Definition: PhysicsAnalysis/JetMissingEtID/JetSelectorTools/JetSelectorTools/Helpers.h:22
JCT::utils::getTypeObjFromString
bool getTypeObjFromString(const std::string &str, T &obj)
Definition: PhysicsAnalysis/JetMissingEtID/JetSelectorTools/JetSelectorTools/Helpers.h:83
ReadFromCoolCompare.os
os
Definition: ReadFromCoolCompare.py:231
grepfile.sep
sep
Definition: grepfile.py:38
JCT::utils::getTypeObjFromString< TString >
bool getTypeObjFromString< TString >(const std::string &str, TString &obj)
Definition: PhysicsAnalysis/JetMissingEtID/JetSelectorTools/Root/Helpers.cxx:23
MsgStreamMacros.h
utils
Definition: Trigger/TrigMonitoring/TrigMinBiasMonitoring/python/utils.py:1
str
Definition: BTagTrackIpAccessor.cxx:11
python.PyAthena.obj
obj
Definition: PyAthena.py:135
beamspotman.fail
def fail(message)
Definition: beamspotman.py:201
JCT::utils::vectorize
bool vectorize(const TString &str, const TString &sep, std::vector< T > &result)
Definition: PhysicsAnalysis/JetMissingEtID/JetSelectorTools/JetSelectorTools/Helpers.h:114