switch (type)
{
- case 1: {
+ case 1: {
bool canOpen = br_subject.LoadFile(subject);
if (!canOpen)
{
subject_study_name = "defStudyName"; // Why not?
}
// subject_name is already in 'Patient Name'
- strStudyDescr = /*subject_name + "." + */ subject_study_name + "." + subject_entry + "." + subject_position + "." + subject_date;
+ if (0) // We don't realy need so much information for 'Study'
+ strStudyDescr = /*subject_name + "." + */ subject_study_name + "." + subject_entry + "." + subject_position + "." + subject_date;
+ else
+ strStudyDescr = /*subject_name + "." + */ subject_study_name /*+ "." + subject_entry + "." + subject_position + "." + subject_date*/;
// creation directory : 'nom de la Study'
++it)
{
if ( boost::filesystem::is_directory(*it) )
- {
-
+ {
+
if (verbose)
std::cout << "--- --- [" << *it << "] is a directory" << std::endl;
- // sprintf(outputDirName, "%s%c%s", currentOutputDirName.c_str(),
+ // sprintf(outputDirName, "%s%c%s", currentOutputDirName.c_str(),
// GDCM_NAME_SPACE::GDCM_FILESEPARATOR,
// GDCM_NAME_SPACE::Util::GetName(*it).c_str() );
// MUST be 'pdata'!
//
// (interest of previous method :
-// If unaware user changed the pdata name, it goes on working
+// If unaware user changed the pdata name, it goes on working
//
std::string str_isa;
str_isa = (*it) +
GDCM_NAME_SPACE::GDCM_FILESEPARATOR +
"isa";
- std::string str_isa_func_name;
+ std::string str_isa_func_name;
canOpen = br_isa.LoadFile(str_isa);
if (!canOpen)
{
sprintf(outputDirName, "%s%c%s", currentOutputDirName.c_str(),
GDCM_NAME_SPACE::GDCM_FILESEPARATOR,
- GDCM_NAME_SPACE::Util::GetName(*it).c_str() );
+ GDCM_NAME_SPACE::Util::GetName(*it).c_str() );
}
else
{
std::cout << "And Init Exception was thrown in DealWithNiveau3 (" << e.what() << "); "
<< " We skip [" << level2Directory << "]" << std::endl;
continue;
- }
+ }
}
}
}
if (verbose)
std::cout << "d3proc: --- => [" << char_d3proc << "]" << std::endl;
- std::string str_d3proc(char_d3proc);
+ std::string str_d3proc(char_d3proc);
canOpen = br_d3proc.LoadFile(str_d3proc);
if (!canOpen)
{
std::cout << "Hopeless! FillMap failed on 'd3proc'" << std::endl;
throw ( BrukerHopelessException ("Hopeless! FillMap failed on 'd3proc'"));
- //exit(0); /// \TODO throw an exception !
+ //exit(0); /// \TODO throw an exception !
}
//-------------- end try d3proc;
} else {
if (verbose)
std::cout << "[" << str_reco << "] successfully Mapped" << std::endl;
- }
+ }
//std::cout << "------------------------------------------------------------------------------------------------" << std::cout;
// br_reco.PrintSelf();
int Bruker2Dicom::CheckUserDirectory(std::string &userDirName)
{
GDCM_NAME_SPACE::DirList dirList(userDirName, false, true); // DON'T get recursively the list of files
-
+
GDCM_NAME_SPACE::DirListType fileNames;
fileNames = dirList.GetFilenames();
acqpFound= true; // user passes a 'serie', not a 'study'
else
acqpFound = false; // user passed a 'non study' directory; Hope it's a 'set of studies' directory!
-
+
int type;
if (subjectFound ) type = 1; // user passed a 'study
else if (acqpFound) type = 2; // user passed a 'serie'
l--;
s = s.substr(0, l);
}
-
+
if (s[0] == '<')
s= s.substr(1,l-2);
- std::string repChar("_");
+ std::string repChar("_");
GDCM_NAME_SPACE::Util::ReplaceSpecChar(s, repChar);
}
br_acqp.SetLoopStructure();
std::vector<int> tempVect = br_acqp.GetLoopStructure() ;
std::map<std::string, BrukerFieldData> map = br_acqp.GetBrukerHeaderMap();
-
+
bool result = br_acqp.ObjectVaryingProperties.init(map,tempVect);
if (result == false)
std::ostringstream str;
GDCM_NAME_SPACE::File *file;
- file = GDCM_NAME_SPACE::File::New();
-
+ file = GDCM_NAME_SPACE::File::New();
+
// Set the image size
str.str("");
str << X;
// Set the pixel type
// //8, 16, 32, 64 (for double ?)
str.str("");
- str << pixelSize*8;
+ str << pixelSize*8;
+
+ // Bits Allocated
file->InsertEntryString(str.str(),0x0028,0x0100,"US"); // Bits Allocated
file->InsertEntryString(str.str(),0x0028,0x0101,"US"); // Bits Stored
// Set the pixel representation // 0/1 , 0=unsigned
file->InsertEntryString("1",0x0028,0x0103, "US"); // Pixel Representation
-
+
// Set the samples per pixel // 1:Grey level, 3:RGB
file->InsertEntryString("1",0x0028,0x0002, "US"); // Samples per Pixel
str.str("");
str << spacingX << "\\" << spacingY;
file->InsertEntryString(str.str(),0x0028,0x0030, "DS"); // Pixel Spacing
-
+
// 0018 0050 DS 1 Slice Thickness
str.str("");
str << sliceDistance;
file->InsertEntryString(str.str(),0x0018,0x0050, "DS");
-
+
// 0020 0011 IS 1 Series Number
str.str("");
str << serieNumber;
file->InsertEntryString(str.str(),0x0020,0x0011, "IS");
-
+
// 0020|0013 [IS] [Instance Number]
instanceNumber++;
str.str("");
str << instanceNumber;
file->InsertEntryString(str.str(),0x0020,0x0013, "IS");
-
+
// 1.2.840.10008.5.1.4.1.1.4.1 : Enhanced MR Image Storage
- // file->InsertEntryString("1.2.840.10008.5.1.4.1.1.4.1" , 0x0002, 0x0002, "UI"); // [Media Storage SOP Class UID]
+ // file->InsertEntryString("1.2.840.10008.5.1.4.1.1.4.1" , 0x0002, 0x0002, "UI"); // [Media Storage SOP Class UID]
// file->InsertEntryString("1.2.840.10008.5.1.4.1.1.4.1" , 0x0008, 0x0016, "UI"); // [SOP Class UID]
// OK : MR is NOT multiframe, but I want just a quick an dirty solution
file->InsertEntryString(studyUID, 0x0020, 0x000d, "UI");
file->InsertEntryString(serieUID, 0x0020, 0x000e, "UI");
-
+
// 0008 0020 DA 1 Study Date
// 0008 0030 TM 1 Study Time
imageSet[imgNum].getRotationMatrixRPS2XYZ()[1][0],
imageSet[imgNum].getRotationMatrixRPS2XYZ()[1][1],
imageSet[imgNum].getRotationMatrixRPS2XYZ()[1][2] ) ;
-
+
file->InsertEntryString(charImageOrientation,0x0020,0x0037, "DS");
// 0020 0032 DS 3 Image Position (Patient)
imageSet[imgNum].getTranslationVectorRPS2XYZ()[0],
imageSet[imgNum].getTranslationVectorRPS2XYZ()[1],
imageSet[imgNum].getTranslationVectorRPS2XYZ()[2]);
-
+
file->InsertEntryString(charImagePosition,0x0020,0x0032, "DS"); //0020 0032 DS 3 Image Position (Patient)
-
-
+
// Private creator
/*
-
+
0029|0010 [LO] [Private Creator] [CREATIS HEADER ]
0029|0011 [LO] [Private Creator] [CREATIS for BRUKER to DICOM]
0029|1031 [LO] [] [4.0.7571167 ]
> 138 1600
>
*/
-
+
file->InsertEntryString("CREATIS HEADER", 0x0029,0x0010, "LO");
file->InsertEntryString("CREATIS FOR BRUKER-TO-DICOM", 0x0029,0x0011, "LO");
-
+
BrukerFieldData brf_method = br_method.GetFieldData("Method");
const std::vector<std::string> method = brf_method.GetStringValue();
// std::string method = br_method.GetFieldData("Method").GetStringValue();
file->InsertEntryString(method[0], 0x0029,0x0100, "LO");
-
+
std::cout << " method[" << method[0] << "]" << std::endl;
if (method[0] == "DtiEpi" || method[0] == "DtiStandard")
{
// const std::vector<int> NDiffDir = br_method.GetFieldData("PVM_DwNDiffDir").GetIntValue();
BrukerFieldData brf_NDiffDir = br_method.GetFieldData("PVM_DwNDiffDir");
const std::vector<int> NDiffDir = brf_NDiffDir.GetIntValue();
-
+
//const std::vector<int> NDiffExpEach = br_method.GetFieldData("PVM_DwNDiffExpEach").GetIntValue();
BrukerFieldData brf_NDiffExpEach = br_method.GetFieldData("PVM_DwNDiffExpEach");
const std::vector<int> NDiffExpEach =brf_NDiffExpEach.GetIntValue();
-
+
// const std::vector<int> AoImages = br_method.GetFieldData("PVM_DwAoImages").GetIntValue();
BrukerFieldData brf_AoImages = br_method.GetFieldData("PVM_DwAoImages");
const std::vector<int> AoImages = brf_AoImages.GetIntValue();
-
+
BrukerFieldData brf_DwBvalEach = br_method.GetFieldData("PVM_DwBvalEach");
const std::vector<double> DwBvalEach = brf_DwBvalEach.GetDoubleValue();
-
+
std::cout << "nb directions : " << NDiffDir[0] << " nb valeurs de b par direction : " << NDiffExpEach[0]
<< " nb images for b=0 : " << AoImages[0] << std::endl;
-
+
str.str("");
str << NDiffDir[0];
- file->InsertEntryString(str.str(),0x0029,0x0101,"US"); // directions
+ file->InsertEntryString(str.str(),0x0029,0x0101,"US"); // nb de directions
str.str("");
str << NDiffExpEach[0];
- file->InsertEntryString(str.str(),0x0029,0x0102,"US"); // valeurs de b par direction
+ file->InsertEntryString(str.str(),0x0029,0x0102,"US"); // nb valeurs de b par direction
str.str("");
str << AoImages[0];
- file->InsertEntryString(str.str(),0x0029,0x0103,"US"); // image pour b=0
+ file->InsertEntryString(str.str(),0x0029,0x0103,"US"); // nb images pour b=0
str.str("");
for (unsigned int i=0; i<NDiffExpEach[0]; i++) {
if (i!=AoImages[0])
str << "\\";
}
- file->InsertEntryString(str.str(),0x0029,0x0104,"DS"); // Valeurs de b
+ file->InsertEntryString(str.str(),0x0029,0x0104,"DS"); // Valeurs de b
}
// 0020 0x1041 DS 1 Slice Location
GDCM_NAME_SPACE::FileHelper *fileH;
fileH = GDCM_NAME_SPACE::FileHelper::New(file);
- fileH->SetContentType(contentType);
-
+ fileH->SetContentType(contentType);
+
// cast is just to avoid warnings (*no* conversion is performed)
//fileH->SetImageData((uint8_t *)img,int(maxX*maxY)*sizeof(uint16_t)); // troubles when maxX, mayY are *actually* float!