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'
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("_");
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)
// Just for checking
/*
-
std::vector<std::vector <double> > imageOrientation;
std::vector <double> imagePosition;
for(int i=0;i<brukerImageList.size();i++)
GDCM_NAME_SPACE::File *file;
file = GDCM_NAME_SPACE::File::New();
-
+
// Set the image size
str.str("");
str << X;
// 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++) {
GDCM_NAME_SPACE::FileHelper *fileH;
fileH = GDCM_NAME_SPACE::FileHelper::New(file);
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!