BrukerDataSet::~BrukerDataSet(){}
-bool BrukerDataSet::LoadFile(std::string& fileToRead)
+bool BrukerDataSet::LoadFile(std::string fileToRead)
{
//std::cout <<
{
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<char, char> 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<char, char> 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)
{
{
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<std::string::const_iterator> 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<std::string::const_iterator> whatFloat;
+ if (!regex_search(start,end, whatFloat, isNotFloatSerie,flags))
+ return "float";
+
+ // if not a float serie neither, it's a string !!!
+ return "string";
}
data.DataType=GetContentType(Substring);
if (DEBUG) std::cout<<"data.DataType="<< data.DataType <<std::endl;
data.NumberOfElements=GetKeywordNumberOfElements(Substring);
- if(data.DataType=="string")
+ if(data.DataType=="string")
data.DimensionNumber=0;
if(data.DataType=="string")
data.NumberOfElements=1;
data.DoubleValue.push_back(GetDoubleValueN(Substring,i));
if (DEBUG) std::cout<< data.DoubleValue[i-1]<<" ";
}
-
}
if (data.DataType=="string")
std::cout << std::endl << "-----------------[" <<(*it).first << "]" << std::endl;
std::string a = (*it).first;
PrintKey(a);
- }
+ }
}
std::vector< int > BrukerDataSet::GetLoopStructure() const
{
- return LoopStructure;
+ return LoopStructure;
}
/**
*/
bool BrukerDataSet::SetLoopStructure ( const std::vector<int> & theValue )
{
- LoopStructure = theValue;
- return true;
+ 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)
*/
/**
- @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 ()
{
//std::map<std::string, BrukerFieldData> 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)
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]);
}
}
ImageLoopStructure = TempIntVect4;
return true;
}
+