simple-tof-analysis
 All Classes Namespaces Functions Variables Groups Pages
StringUtils.h
1 #ifndef STRINGUTIL_H_
2 #define STRINGUTIL_H_
3 
4 
5 #include <iostream>
6 #include <sstream>
7 #include <stdio.h>
8 #include <string>
9 
10 #include <TObjArray.h>
11 #include <TObjString.h>
12 #include <TString.h>
13 
14 
15 using std::vector;
16 using std::string;
17 
25 namespace STR_UTILS
26 {
27 
28 
29 
30 static struct IsLonger{
31  //longer TString must appear before in a std::sort ordering
32  bool operator()(TString s1, TString s2){ return ( s1.Length() > s2.Length() ); }
33 } CompLengthDecr;
34 
35 static struct IsShorter{
36  //longer TString must appear before in a std::sort ordering
37  bool operator()(TString s1, TString s2){ return ( s1.Length() < s2.Length() ); }
38 } CompLengthIncr;
39 
40 
41 inline vector<TString> Tokenize(TString line,TString delim){
42 
43  vector<TString> list;
44  if(line.IsNull() || line.IsWhitespace()) return list;
45 
46  const char *delimiters = delim.Data();//":";
47 
48  TObjArray* Strings = line.Tokenize(delimiters);
49 
50  if(Strings->GetEntriesFast()) {
51  TIter iString(Strings);
52  TObjString* os=0;
53  Int_t j=0;
54  while ((os=(TObjString*)iString())) {
55  j++;
56 
57  //cout<<os->GetString().Data()<<endl;
58 
59  list.push_back(os->GetString());
60  }
61  delete os;
62  }
63 
64  delete Strings;
65 
66  return list;
67 
68 }
69 
70 
71 
72 inline vector<TString> GetPath2(TString path_full){
73 
74  std::vector<TString> list;
75 
76 
77  int slash_pos = path_full.Last('/');
78 
79  TString path_to = path_full(0,slash_pos);
80 
81  TString name = path_full(slash_pos+1,path_full.Length()-slash_pos-1);
82 
83  list.push_back(path_to);
84  list.push_back(name);
85 
86  return list;
87  }
88 
89 inline TString GetPath(TString path_full, TString* path_to, TString *name) {
90 
91  int slash_pos = path_full.Last('/');
92 
93  *path_to = path_full(0,slash_pos);
94 
95  *name = path_full(slash_pos+1,path_full.Length()-slash_pos-1);
96 
97 }
98 
99 
100 inline vector<string> TokenizeStr(string line,string delim){
101 
102 
103  std::vector<TString> TS = Tokenize(TString(line),TString(delim));
104 
105  std::vector<string> list;
106 
107  for(int i=0; i< TS.size(); ++i){
108  //list.push_back( string(TS[i].Data()) );
109  list.push_back( string(TS[i]) );
110  }
111 
112  return list;
113 }
114 
115 
116 
117 inline int Duplicates( std::vector<TString> list){
118 
119  int N=0;
120 
121  for(int i1=0; i1< list.size()-1; ++i1){
122  for(int i2=i1+1; i2< list.size();++i2){
123  if(list.at(i1)==list.at(i2)) N++;
124  }
125  }
126 
127  return N;
128 }
129 
130 
131 inline bool StringIsPresent(std::vector<TString> &list, TString &s){
132 
133  for(int i=0;i<list.size();++i){
134  if( list.at(i)==s ) return 1;
135  }
136 
137  return 0;
138 }
139 
140 
141 template <typename T>
142  string ToString ( T Number )
143  {
144  std::ostringstream ss;
145  ss << Number;
146  return ss.str();
147  }
148 
149 
150 
151 template <typename N>
152  N ToNumber ( const string &Text )
153  {
154  std::istringstream ss(Text);
155  N result;
156  return ss >> result ? result : 0;
157  }
158 
159 
160 
161 
162 inline TString Name(TString str1,TString sep,TString str2="") {
163 
164  TString name=str1;
165 
166  name+=sep; name+=str2;
167 
168  return name;
169 
170 }
171 
172 inline TString Name(TString str1,TString sep1,TString str2,TString sep2, TString str3) {
173 
174  TString name=Name(str1,sep1,str2);
175 
176  name+=sep2; name+=str3;
177 
178  return name;
179 
180 }
181 
182 inline TString Name(TString str1,TString sep1,TString str2,TString sep2, TString str3, TString sep3, TString str4) {
183 
184  TString name=Name(str1,sep1,str2,sep2,str3);
185 
186  name+=sep3; name+=str4;
187 
188 
189  return name;
190 
191 }
192 
193 inline TString SplitLineLabel(TString top, TString bottom){
194 
195  TString label = "";
196 
197  if(bottom.IsWhitespace()) return top;
198 
199  label = Name("#splitline{",top,"}{",bottom,"}");
200 
201  return label;
202 }
203 
204 inline TString Title(TString tit1,TString sep,TString tit2) {
205 
206  TString title=tit1;
207 
208  title+=sep; title+=tit2;
209 
210  return title;
211 
212 }
213 
214 inline TString TitleXYZ(TString tit,TString titx,TString tity="",TString titz="") {
215 
216 
217  TString title=tit;
218 
219  title+=";"; title+=titx;
220 
221  if(!tity.IsWhitespace() ){
222  title+=";"; title+=tity;
223  }
224 
225  if(!titz.IsWhitespace() ){
226  title+=";"; title+=titz;
227  }
228 
229 
230  return title;
231 }
232 
233 
234 inline TString AppendToTitleXYZ(TString tit,TString sep, TString tit2) {
235 
248  TString str="";
249 
250  std::vector<TString> vec=STR_UTILS::Tokenize(tit,";");
251 
252  int n=vec.size();
253 
254  if(n==0) return tit2;
255 
256  if(n>=1){
257  str=STR_UTILS::Name(vec.at(0),sep,tit2);
258  }
259 
260 
261  if(n>=2){
262  str=STR_UTILS::TitleXYZ(str,vec.at(1));
263  }
264 
265  if(n>=3){
266  str=STR_UTILS::TitleXYZ(str,vec.at(2));
267  }
268 
269  if(n>=4){
270  str=STR_UTILS::TitleXYZ(str,vec.at(3));
271  }
272 
273  return str;
274 }
275 
276 inline TString PrependToTitleXYZ(TString tit,TString sep, TString tit2) {
277 
291  TString str="";
292 
293  std::vector<TString> vec=STR_UTILS::Tokenize(tit,";");
294 
295  int n=vec.size();
296 
297  if(n==0) return tit2;
298 
299  if(n>=1){
300  str=STR_UTILS::Name(tit2,sep,vec.at(0));
301  }
302 
303 
304  if(n>=2){
305  str=STR_UTILS::TitleXYZ(str,vec.at(1));
306  }
307 
308  if(n>=3){
309  str=STR_UTILS::TitleXYZ(str,vec.at(2));
310  }
311 
312  if(n>=4){
313  str=STR_UTILS::TitleXYZ(str,vec.at(3));
314  }
315 
316  return str;
317 }
318 
319 
320 
321 }
322 
323 
324 namespace StringUtils = STR_UTILS;
325 
326 #endif
TString PrependToTitleXYZ(TString tit, TString sep, TString tit2)
Definition: StringUtils.h:247
TString AppendToTitleXYZ(TString tit, TString sep, TString tit2)
Definition: StringUtils.h:205