#include "mpt_RutgersIterator.h" #include #include #include #include #include #include mpt_RutgersIterator::mpt_RutgersIterator( const char *filepath ) : ifstr( filepath ), lines( ifstr ) { } mpt_RutgersIterator::mpt_RutgersIterator( const std::string &filepath ) : ifstr( filepath.c_str() ), lines( ifstr ) { } mpt_RutgersIterator::mpt_RutgersIterator( std::istream &_is ) : lines( _is ) { } mpt_RutgersIterator::~mpt_RutgersIterator() { } unsigned int mpt_RutgersIterator::line() { return lines.line(); } bool mpt_RutgersIterator::eof() { return lines.eof(); } bool mpt_RutgersIterator::nextData( mpt_RutgersData &data ) { if( lines.eof() ) return false; std::string dataline = lines.nextLine(); while( !lines.eof() && ( (dataline.length() == 0) || ( (dataline.length() > 0) && ('#' == dataline.at(0)) ) ) ) { dataline = lines.nextLine(); } if( (dataline.length() > 0) && ('#' != dataline.at(0)) ) { //#AU Subject Not_Present High_Intensity Intensity //1 16 701-705 2104-2108 5 //1 16 701-705,1000-1010 2104-2108,3000-3010 5 char comma = ','; std::istringstream instr( dataline.c_str() ); data.clear(); unsigned int au; unsigned int subject; instr >> au; instr >> subject; data.setAU( au ); data.setSubject( subject ); // Read one or more frame ranges, e.g. "700-710" or "700-710,1000-1020" while( !instr.eof() && (',' == comma) ) { char dash; unsigned int notPresentStart=0; unsigned int notPresentEnd=0; instr >> notPresentStart; instr >> dash; instr >> notPresentEnd; data.setNotPresent( notPresentStart, notPresentEnd ); if( ',' == instr.peek() ) instr >> comma; // just to advance the stream pointer else comma = ' '; } // Read one or more frame ranges, e.g. "700-710" or "700-710,1000-1020" comma = ','; while( !instr.eof() && (',' == comma) ) { char dash; unsigned int presentStart=0; unsigned int presentEnd=0; instr >> presentStart; instr >> dash; instr >> presentEnd; data.setPresent( presentStart, presentEnd ); if( ',' == instr.peek() ) instr >> comma; // just to advance the stream pointer else comma = ' '; } unsigned int intensity; instr >> intensity; data.setIntensity( intensity ); return true; } else { return false; } } mpt_RutgersData::mpt_RutgersData( unsigned int _au, unsigned int _subject, unsigned int _intensity ) : au(_au), subject(_subject), intensity(_intensity) { } void mpt_RutgersData::clear() { au = 0; subject = 0; intensity = 5; framesPresent.clear(); framesNotPresent.clear(); } unsigned int mpt_RutgersData::getAU() { return au; } unsigned int mpt_RutgersData::getSubject() { return subject; } unsigned int mpt_RutgersData::getIntensity() { return intensity; } void mpt_RutgersData::setAU( unsigned int _au ) { au = _au; } void mpt_RutgersData::setSubject( unsigned int _subject ) { subject = _subject; } void mpt_RutgersData::setIntensity( unsigned int _intensity ) { intensity = _intensity; } void mpt_RutgersData::setNotPresent( unsigned int start, unsigned int end ) { if( (start > 0) && (end > 0) ) { if( start > end ) std::swap( start, end ); for( unsigned int frame = start; frame <= end; ++frame ) { framesNotPresent.insert( frame ); } } } void mpt_RutgersData::setPresent( unsigned int start, unsigned int end ) { if( (start > 0) && (end > 0) ) { if( start > end ) std::swap( start, end ); for( unsigned int frame = start; frame <= end; ++frame ) { framesPresent.insert( frame ); } } } std::string mpt_RutgersData::filenameForFrame( unsigned int frame ) { std::ostringstream filename; filename << "D006_S" << std::setfill( '0' ) << std::setw(3) << getSubject() << "_face"; filename << "/frame" << std::setw(5) << frame << ".rimage"; return filename.str(); }