#ifndef Analysis_Library_h #define Analysis_Library_h #include #include #include #include #include #include #include #include std::vector SplitStr(std::string tempLine, std::string splitter, int shift = 0){ std::vector output; size_t pos; do{ pos = tempLine.find(splitter); // fine splitter if( pos == 0 ){ //check if it is splitter again tempLine = tempLine.substr(pos+1); continue; } std::string secStr; if( pos == std::string::npos ){ secStr = tempLine; }else{ secStr = tempLine.substr(0, pos+shift); tempLine = tempLine.substr(pos+shift); } //check if secStr is begin with space while( secStr.substr(0, 1) == " "){ secStr = secStr.substr(1); }; //check if secStr is end with space while( secStr.back() == ' '){ secStr = secStr.substr(0, secStr.size()-1); } output.push_back(secStr); //printf(" |%s---\n", secStr.c_str()); }while(pos != std::string::npos ); return output; } std::vector> LoadCorrectionParameters(TString corrFile, bool show=false){ printf(" load correction parameters : %s", corrFile.Data()); std::ifstream file; file.open(corrFile.Data()); std::vector> corr; corr.clear(); std::vector detCorr; detCorr.clear(); if( file.is_open() ){ while( file.good() ){ std::string line; getline(file, line); if( line.substr(0,1) == "#" ) continue; if( line.substr(0,2) == "//" ) continue; if( line.size() == 0 ) continue; //printf("%s\n", line.c_str()); std::vector temp = SplitStr(line, " "); detCorr.clear(); for( int i = 0; i < (int) temp.size() ; i++){ detCorr.push_back(std::stod(temp[i])); } corr.push_back(detCorr); } file.close(); printf(".... done\n"); if( show ){ printf("===== correction parameters \n"); for( int i = 0; i < (int) corr.size(); i++){ printf("det : %2d | ", i ); int len = (int) corr[i].size(); for( int j = 0; j < len - 1 ; j++){ printf("%14.6f, ", corr[i][j]); } printf("%14.6f\n", corr[i][len-1]); } } }else{ printf(".... fail\n"); std::vector temp = {0, 1}; for( int i = 0; i < 36; i++){ corr.push_back(temp); } } return corr; } #endif