diff --git a/src/THcDetectorMap.cxx b/src/THcDetectorMap.cxx index 2baba7daea328e11dc1fd81c84f79919fd3e4828..1de0391dc598a6e10a090fd972ac4dcb9f80fd0f 100644 --- a/src/THcDetectorMap.cxx +++ b/src/THcDetectorMap.cxx @@ -17,7 +17,62 @@ using namespace std; ClassImp(THcDetectorMap) +inline static bool IsComment( const string& s, string::size_type pos ) +{ + return ( pos != string::npos && pos < s.length() && + (s[pos] == '!') ); +} + + void THcDetectorMap::Load(const char *fname) { + static const char* const here = "THcDetectorMap::Load"; + static const char* const whtspc = " \t"; + + ifstream ifile; + + ifile.open(fname); + if(!ifile.is_open) { + Error(here, "error opening detector map file %s",fname); + return; // Need a success/failure argument? + } + string line; + + Int_t roc=0; + Int_t nsubadd=0; + Int_t mask=0; + Int_t bsub=0; + Int_t detector=0; + Int_t slot=0; + + while(getline(ifile,line)) { + // BLank line or comment + if(line.empty() + || (start = line.find_first_not_of( whtspc )) == string::npos + || IsComment(line, start) ) + continue; + } + // Get rid of trailing comments and leading and trailing whitespace + cout << "MAPA: " << line << endl; + while ((pos = line.find_first_of("!", pos+1)) != string::npos) { + if(IsComment(line, pos)) { + line.erase(pos); + break; + } + } + cout << "MAPB: " << line << endl; + + // Decide if line is ROC/NSUBADD/MASK/BSUB/DETECTOR/SLOT = something + // or chan, plane, counter[, signal] + + + if((pos=line.find_first_of("=")) != string::npos) { // Setting parameter + char varname[100]; + + + } else { // Assume channel definition + + } + }