41 TString iTStr = TString(str);
42 Int_t startPos = iTStr.Index(startStr);
44 Int_t endPos = iTStr.Index(endStr, startPos);
45 std::vector<TString>
res;
47 while (startPos != -1) {
48 pos = startPos+TString(startStr).Length();
49 res.push_back(iTStr(pos, endPos - pos));
50 startPos = iTStr.Index(startStr, endPos);
51 endPos = iTStr.Index(endStr, startPos+1);
55 TString infoString =
"";
56 for (std::vector<TString>::iterator it = res.begin(); it != res.end(); ++it)
57 infoString += *it +
"|";
58 ::Info(
"AliParser::ParseString",
"Input string \"%s\" was parsed to %s", iTStr.Data(), infoString.Data());
81 std::vector<TString>
AliParser::Split(
const char *inputExpr,
const char del, Int_t verbose) {
82 std::vector<TString>
res;
83 TString inputTStr(inputExpr);
85 std::map<char, char> ignoredBrackets;
86 ignoredBrackets.insert(std::make_pair(
'(',
')'));
87 ignoredBrackets.insert(std::make_pair(
'[',
']'));
88 ignoredBrackets.insert(std::make_pair(
'{',
'}'));
89 ignoredBrackets.insert(std::make_pair(
'<',
'>'));
91 for (UShort_t i = 0; i <= inputTStr.Length(); ++i) {
92 if (inputTStr(i) == TString(del) || i == inputTStr.Length()) {
93 res.push_back(TString(inputTStr(startIndex, i - startIndex)));
95 }
else if (ignoredBrackets.find(inputTStr(i)) != ignoredBrackets.end()) {
96 i = inputTStr.Index(ignoredBrackets[inputTStr(i)], i);
102 TString infoString =
"";
103 for (std::vector<TString>::iterator it = res.begin(); it != res.end(); ++it)
104 infoString += *it +
"|";
105 ::Info(
"AliPainter::ParseString",
"Input string \"%s\" was parsed to %s", inputExpr, infoString.Data());
133 std::vector<TString> parsedArr;
134 TString exprsn(inpString);
135 if (exprsn.CountChar(begin) != exprsn.CountChar(end)) {
136 ::Error(
"AliPainter::DrawHistogram",
"check brackets in %s", exprsn.Data());
140 if (exprsn.Index(begin) != 0)
141 parsedArr.push_back(TString(exprsn(0, exprsn.Index(begin))));
143 parsedArr.push_back(TString());
145 TString verbStr =
"";
146 Int_t match = 0, startIndex = 0, finishIndex = 0;
147 Bool_t isChange = kFALSE;
149 for (Int_t i = 0; i < exprsn.Length(); ++i) {
150 if (exprsn(i) == begin && match == 0) {
154 }
else if (exprsn(i) == begin && match > 0) match++;
155 else if (exprsn(i) == end && match == 1) {
158 }
else if (exprsn(i) == end && match > 1) match--;
160 if (match == 0 && isChange) {
161 parsedArr.push_back(TString(exprsn(startIndex + 1, finishIndex - startIndex - 1)));
167 TString infoString =
"";
168 for (std::vector<TString>::iterator it = parsedArr.begin(); it != parsedArr.end(); ++it)
169 infoString += *it +
"|";
170 ::Info(
"AliPainter::ParseString",
"Input string \"%s\" was parsed to %s", inpString, infoString.Data());
190 std::map<TString, TString>
AliParser::Parse(
const char *iStr, Int_t verbose, std::vector<TString> defKeys) {
191 std::map<TString, TString> optMap;
194 for (UShort_t i = 0; i < options.size(); i++) {
195 TString optionStr = options[i];
198 key = TString(optionStr(0, optionStr.Index(
"="))).ReplaceAll(
" ",
"");
199 value = TString(optionStr(optionStr.Index(
"=") + 1, optionStr.Length())).ReplaceAll(
" ",
"");
229 Int_t initArr[4] = {0, 0, 1, 1};
230 std::vector<TString> initValues =
AliParser::Split(TString(inputString),
':');
231 for (Int_t i=0; i < 4 && i < (Int_t) initValues.size(); ++i)
232 initArr[i] = initValues[i].Atoi();
233 std::vector<Int_t> vRanges;
234 for (Int_t j = initArr[0]; j <= initArr[1] - initArr[3]; j += initArr[2]) {
235 vRanges.push_back(j);
236 vRanges.push_back(j + initArr[3]);
301 TString inputString(iStr);
302 if (inputString == TString())
return TMatrixD();
304 std::map<Int_t, std::vector<Double_t> > iRanges;
305 std::vector<Double_t> tempVector;
306 std::vector<Int_t> sliceVec;
307 std::vector<Double_t> floatFlagArray;
310 std::vector<TString>::iterator it = initRanges.begin();
312 while (it < initRanges.end()) {
315 if (it->Contains(
':')) {
317 tempVector.insert(tempVector.end(), sliceVec.begin(), sliceVec.end());
322 tempVector.push_back(it->Atof());
323 tempVector.push_back((it + 1)->Atof());
328 iRanges[axisNum] = tempVector;
332 catch (std::exception &e) {
333 std::cerr <<
"Exception catched : " << e.what() << std::endl;
334 std::cout <<
"Most probably you have wrong number of range values. It should be even number." << std::endl;
337 Int_t *ind =
new Int_t[iRanges.size()]();
338 std::vector<Double_t> darr;
341 darr.insert(darr.end(), floatFlagArray.begin(), floatFlagArray.end());
343 for (Int_t r = 0; r < (Int_t) iRanges.size(); ++r)
344 rowCnt *= iRanges[r].size() / 2;
345 TMatrixD matrix(rowCnt + 1, iRanges.size() * 2, &darr[0]);
355 std::vector<Double_t> tempArray;
357 for (d = 0; d < (Int_t) iRanges.size(); ++d) {
358 tempArray.push_back(iRanges[d][indexes[d]]);
359 tempArray.push_back(iRanges[d][indexes[d] + 1]);
361 array.insert(array.end(), tempArray.begin(), tempArray.end());
362 for (Int_t i = d - 1; i >= 0; --i) {
363 if (indexes[i] + 2 >= (Int_t) iRanges[i].size())
366 indexes[i] = indexes[i] + 2;
371 for (Int_t r = 0; r < (Int_t) iRanges.size(); ++r)
372 rowCnt *= iRanges[r].size()/2;
373 if (cnt == rowCnt)
return;
382 if (str.Contains(
'.')) {
383 floatFlagArray.push_back(1.);
386 floatFlagArray.push_back(0.);
static void FillFloatFlagArray(std::vector< Double_t > &, TString)
static std::vector< TString > ExtractBetween(const char *inputString, const char *startStr, const char *endStr, Int_t verbose=0)
Extracts content between specified patterns (startStr, endStr).
static std::vector< TString > Split(const char *inputString, const char delimiter=',', Int_t verbose=0)
Splits input string to array according to specified char delimiter.
static std::vector< TString > ExtractSurroundingBy(const char *inputString, const char begin='(', const char end= ')', Int_t verbose=0)
Extracts content from specified parentheses.
static std::map< TString, TString > Parse(const char *inputString, Int_t verbose=0, std::vector< TString > defKeys=std::vector< TString >{})
Parses string with named arguments.
static void Map2Array(std::vector< Double_t > &array, std::map< Int_t, std::vector< Double_t > > iRanges, Int_t *indexes, Int_t cnt)
static TMatrixD Slice2Matrix(const char *inputString, Int_t verbose=0)
Returns TMatrixD from input string.
static std::vector< Int_t > Slice2IArray(const char *inputString)
Returns array according with python-like interface.