X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;f=lib%2Fsrc1%2Fbrukerdataset.cpp;h=affe61c6eb68f0a7e9bf6912921b50fc5a878897;hb=8c9faa21443792c8fbc6ffcc723ba300d733871e;hp=3a6056b22f939078b224288ffa0772d3d5f411be;hpb=0194cf3ca5e4249a389cc809d3de6fae07249fa4;p=creaBruker.git diff --git a/lib/src1/brukerdataset.cpp b/lib/src1/brukerdataset.cpp index 3a6056b..affe61c 100644 --- a/lib/src1/brukerdataset.cpp +++ b/lib/src1/brukerdataset.cpp @@ -67,11 +67,42 @@ bool BrukerDataSet::BoolMatchBufferForText(std::string& file, const boost::regex { boost::cmatch what; if (regex_match(file.c_str(), what, RegExp)) - return true; + return true; return false; } +std::string BrukerDataSet::RemoveNewlines(std::string file) +{ + boost::regex regexNewline; + const char* pre_expression = "[[:cntrl:]]"; + regexNewline.assign(pre_expression); + + const char* pre_format = ""; + std::ostringstream t(std::ios::out | std::ios::binary); + std::ostream_iterator oi(t); + boost::regex_replace(oi, file.begin(), file.end(), + regexNewline, pre_format, boost::match_default | boost::format_all); + std::string s(t.str()); + return s; + } + +std::string BrukerDataSet::RemoveSpaces(std::string file) +{ + boost::regex regexSpace; + const char* pre_expression = "[[:space:]]"; + regexSpace.assign(pre_expression); + const char* pre_format = ""; + std::ostringstream t(std::ios::out | std::ios::binary); + std::ostream_iterator oi(t); + boost::regex_replace(oi, file.begin(), file.end(), + regexSpace, pre_format, boost::match_default | boost::format_all); + std::string s(t.str()); + return s; + } + + + std::string BrukerDataSet::MatchBufferForText(std::string& file,const boost::regex& RegExp) { @@ -144,21 +175,37 @@ std::string BrukerDataSet::GetValuesPart(std::string& file) { std::string Result; Result=MatchBufferForText(file,BufferNValues); - if (Result !="") - return Result; + if (Result !="") + return RemoveNewlines(Result); return MatchBufferForText(file,Buffer1Value); } std::string BrukerDataSet::GetContentType(std::string& file) { - std::string ValuesPart, Result; + std::string ValuesPart; + boost::match_flag_type flags = boost::match_default; + std::string::const_iterator start, end; ValuesPart=GetValuesPart(file); - if (BoolMatchBufferForText(ValuesPart,IntSeries)) - return "int"; - if (BoolMatchBufferForText(ValuesPart,FloatSeries)) - return "float"; - return "string"; + start=ValuesPart.begin(); + end=ValuesPart.end(); + // boost regexp_match can not handle well what we want + // so instead of looking for a match we will seek proof of a non int serie + // i.e. check if we can find something else than than -0-9 + boost::regex isNotIntSerie("[^ \\-0-9]"); + boost::match_results whatInt; + if (!regex_search(start,end, whatInt, isNotIntSerie,flags)) + return "int"; + + // if not int serie check if it's not a floats serie !!! + + boost::regex isNotFloatSerie("[^ \\-\\+\\.eE0-9]"); + boost::match_results whatFloat; + if (!regex_search(start,end, whatFloat, isNotFloatSerie,flags)) + return "float"; + + // if not a float serie neither, it's a string !!! + return "string"; } @@ -310,7 +357,6 @@ bool BrukerDataSet::FillMap() data.DoubleValue.push_back(GetDoubleValueN(Substring,i)); if (DEBUG) std::cout<< data.DoubleValue[i-1]<<" "; } - } if (data.DataType=="string") @@ -361,7 +407,7 @@ void BrukerDataSet::PrintSelf() std::cout << std::endl << "-----------------[" <<(*it).first << "]" << std::endl; std::string a = (*it).first; PrintKey(a); - } + } } @@ -430,7 +476,7 @@ bool BrukerDataSet::Getkspace(std::string &FileToRead) std::vector< int > BrukerDataSet::GetLoopStructure() const { - return LoopStructure; + return LoopStructure; } /** @@ -441,32 +487,33 @@ std::vector< int > BrukerDataSet::GetLoopStructure() const */ bool BrukerDataSet::SetLoopStructure ( const std::vector & theValue ) { - LoopStructure = theValue; + LoopStructure = theValue; + return true; } /** - @fn bool BrukerDataSet::SetLoopStructureOld ( ) + @fn bool BrukerDataSet::SetLoopStructureOld ( ) * @brief method to set the default Bruker loopstructure (not yet able to deal with EPI, SPIRAL or spectroscopic experiments * @return bool - @todo implement multicoil version + * @todo implement multicoil version */ bool BrukerDataSet::SetLoopStructureOld () { - LoopStructure.clear(); + LoopStructure.clear(); /* \file brukerdataset.cpp \fn bool BrukerDataSet::setGenericLoopStructure ( ) \brief sets the loop structure of a standard Bruker experiment -NR (Nbre de repetitions) - NILoop (Boucle eventuelle extra (Diffusion par exemple) si NI<>(NSLICES x NECHOES) cette boucle est a� NI/(NSLICES x NECHOES) - (Attention NILoop peut masquer plusieurs boucles imbriquees !!!!!) - ACQ_size[1..M] (Codage suivant les autres dimensions) - NSLICES (Nombre de tranches) - ACQ_phase_factor (Facteur turbo de la sequence) - ACQ_ns_list_size (Nombre d'echos) - ACQ_size[0] (Ligne acq reelle) +NR (Nbre de repetitions) + NILoop (Boucle eventuelle extra (Diffusion par exemple) si NI<>(NSLICES x NECHOES) cette boucle est a� NI/(NSLICES x NECHOES) + (Attention NILoop peut masquer plusieurs boucles imbriquees !!!!!) + ACQ_size[1..M] (Codage suivant les autres dimensions) + NSLICES (Nombre de tranches) + ACQ_phase_factor (Facteur turbo de la sequence) + ACQ_ns_list_size (Nombre d'echos) + ACQ_size[0] (Ligne acq reelle) */ @@ -519,10 +566,10 @@ NR (Nbre de repetitions) /** - @fn bool BrukerDataSet::SetLoopStructure ( ) + @fn bool BrukerDataSet::SetLoopStructure ( ) * @brief method to set the default Bruker loopstructure (not yet able to deal with EPI, SPIRAL or spectroscopic experiments * @return bool - @todo implement multicoil version + @todo implement multicoil version */ bool BrukerDataSet::SetLoopStructure () { @@ -630,14 +677,16 @@ std::map BrukerDataSet::GetBrukerHeaderMap() const //std::map BrukerDataSet::GetBrukerHeaderMap() const //{ -// return BrukerHeaderMap; +// return BrukerHeaderMap; //} bool BrukerDataSet::SetInnerObjectLoopStructure() -{ +{ /* - ACQ_size[1..M] (Codage suivant les autres dimensions) + * + * + * ACQ_size[1..M] (Codage suivant les autres dimensions) NSLICES (Nombre de tranches) ACQ_phase_factor (Facteur turbo de la sequence) ACQ_ns_list_size (Nombre d'echos) @@ -673,7 +722,7 @@ bool BrukerDataSet::SetInnerObjectLoopStructure() if (2<=BrukerDataSet::BrukerHeaderMap[ (std::string) "ACQ_size" ].DimensionNumber ) { for(i=2;i<=BrukerDataSet::BrukerHeaderMap[ (std::string) "ACQ_size" ].DimensionNumber;i++) - { + { TempIntVect.push_back(BrukerDataSet::BrukerHeaderMap[ (std::string) "ACQ_size" ].IntValue[i]); } } @@ -740,3 +789,4 @@ bool BrukerDataSet::SetImageLoopStructure ( ) ImageLoopStructure = TempIntVect4; return true; } +