]> Creatis software - creaBruker.git/blobdiff - lib/src1/brukerdataset.cpp
Use shorter names for 'Study description'
[creaBruker.git] / lib / src1 / brukerdataset.cpp
index 3a6056b22f939078b224288ffa0772d3d5f411be..affe61c6eb68f0a7e9bf6912921b50fc5a878897 100644 (file)
@@ -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<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)
 {
@@ -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<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"; 
 }
 
 
@@ -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<int> & 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<std::string, BrukerFieldData> BrukerDataSet::GetBrukerHeaderMap() const
 
 //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)
@@ -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;
 }
+