diff --git a/pub/src/rssm.cpp b/pub/src/rssm.cpp index 56555cbb877ddda0916d1dcd7170cb3093ca58c0..196bb748ee74f1105d28e4bd6766175df2e33090 100644 --- a/pub/src/rssm.cpp +++ b/pub/src/rssm.cpp @@ -54,6 +54,7 @@ void CRawfileSpheres::RdRawYam( ifstream& F_in ) YAML::Parser parser(F_in); YAML::Node doc; + const YAML::Node *arr; parser.GetNextDocument(doc); // read Meta: @@ -120,28 +121,36 @@ void CRawfileSpheres::RdRawYam( ifstream& F_in ) for ( uint iEne = 0; iEne<nEne; iEne++ ) { if ( doc["EnergyHistograms"][iEne].Type() != YAML::NodeType::Sequence ) - throw "DATA BUG: EnergyHistogram " + strg(iEne) + - " is not a SEQUENCE"; + throw "DATA BUG: EnergyHistogram[" + strg(iEne) + + "] is not a SEQUENCE"; doc["EnergyHistograms"][iEne][0] >> val; if( !mystd::any2dbl( val, &num ) ) throw "E-Hist: invalid x-value " + val; for( int i=0; i<4; ++i ) rawdata[i].push_back( num ); - for( int i=0; i<4; ++i ){ - doc["EnergyHistograms"][iEne][i+1] >> val;// cnts line - if( !mystd::str2vec( val, &numvec ) ) - throw "DATA BUG: cnts line extraction failed"; - if( numvec.size()!=ndet ) - throw "DATA BUG: hist: ndet incompatibility"; - for( int ii=0; ii<numvec.size(); ++ii ) - rawdata[i].push_back( numvec[ii] ); + for( int i=0; i<4; ++i ){ // counts + arr = &(doc["EnergyHistograms"][iEne][i+1]); + if( arr->Type() != YAML::NodeType::Sequence ) + throw "DATA BUG: EnergyHistogram[" + strg(iEne) + "][" + + strg(i+1) + "] is not a SEQUENCE"; + for( int j=0; j<ndet; ++j ) { + *arr >> val; + if( !mystd::any2dbl( val, &num ) ) + throw "E-Hist: invalid count " + val; + rawdata[i].push_back( num ); + } } - for( int i=0; i<4; ++i ){ - doc["EnergyHistograms"][iEne][i+1+4] >> val;// time line - if( !mystd::str2vec( val, &numvec ) ) - throw "DATA BUG: time line extraction failed"; - for( int ii=0; ii<numvec.size(); ++ii ) - rawdata[i].push_back( numvec[ii] ); + for( int i=0; i<4; ++i ){ // tsteps + arr = &(doc["EnergyHistograms"][iEne][i+1+4]); + if( arr->Type() != YAML::NodeType::Sequence ) + throw "DATA BUG: EnergyHistogram[" + strg(iEne) + "][" + + strg(i+1+4) + "] is not a SEQUENCE"; + for( int j=0; j<ndet; ++j ) { + *arr >> val; + if( !mystd::any2dbl( val, &num ) ) + throw "E-Hist: invalid tstep " + val; + rawdata[i].push_back( num ); + } } } } catch( exception& e) {