X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;f=Example%2FPhilipsToBrucker2.cxx;h=0fded6d025489e81fc5a74f73822d9d516e9bc82;hb=59749ab30fd322a69f23067af73b10ccb4982c65;hp=0b9248150811b5ab367e6bf724ccf897f8afced1;hpb=467e7837d241f814ce46dc8205d105531b186ee8;p=gdcm.git diff --git a/Example/PhilipsToBrucker2.cxx b/Example/PhilipsToBrucker2.cxx index 0b924815..0fded6d0 100755 --- a/Example/PhilipsToBrucker2.cxx +++ b/Example/PhilipsToBrucker2.cxx @@ -3,8 +3,8 @@ Program: gdcm Module: $RCSfile: PhilipsToBrucker2.cxx,v $ Language: C++ - Date: $Date: 2006/01/31 14:09:26 $ - Version: $Revision: 1.12 $ + Date: $Date: 2006/03/17 14:36:37 $ + Version: $Revision: 1.20 $ Copyright (c) CREATIS (Centre de Recherche et d'Applications en Traitement de l'Image). All rights reserved. See Doc/License.txt or @@ -50,9 +50,9 @@ int main(int argc, char *argv[]) " - orders the gdcm-readable found Files according to their ", " (0x0010, 0x0010) Patient's Name ", " (0x0020, 0x000e) Series Instance UID ", - " (0x0020, 0x0032) Image Position (Patient) ", + " (0x0020, 0x0032)PhilipsToBrucker2. Image Position (Patient) ", " (0x0018, 0x1060) Trigger Time ", - " (0x0018, 0x1312) In-plane Phase Encoding Direction ", + " (0x0018, 0x1312) In-pl)ane Phase Encoding Direction ", " - fills a single level (*) Directory with *all* the files, ", " converted into a Brucker-like Dicom, InTags compliant ", " (*) actually : creates as many directories as Patients ", @@ -73,7 +73,7 @@ int main(int argc, char *argv[]) " dirout=outputDirectoryName ", " { [keep= list of seriesNumber to process] ", " | [drop= list of seriesNumber to ignore] } ", - " [taggrid] ", + " [taggrid] [skel] ", " [input = {ACR|DCM}] ", " [extent=image suffix (.IMA, .NEMA, .DCM, ...)] ", " [listonly] [split] ", @@ -88,6 +88,7 @@ int main(int argc, char *argv[]) " e.g : 1030,1035,1043 ", " taggrid : user knows all the images are 'grid' -ie : not 'col', not 'raw'", " extent : DO NOT forget the leading '.' ! ", + " skel: name skeleton eg : patName_1.nema -> skel=patName_ ", " split: creates a tree-like structure of directories as : ", " - Patient ", " -- Serie ", @@ -149,6 +150,11 @@ int main(int argc, char *argv[]) } int taggrid = am->ArgMgrDefined("taggrid"); + + int hasSkel = am->ArgMgrDefined("skel"); + const char *skel; + if (hasSkel) + skel = am->ArgMgrGetString("skel"); const char *extent = am->ArgMgrGetString("extent",".DCM"); @@ -225,12 +231,13 @@ int main(int argc, char *argv[]) gdcm::File *f; gdcm::FileHelper *fh; std::vector tokens; + std::vector tokensForFileName; /* std::cout << "---------------Print Unique Series identifiers---------" << std::endl; std::string uniqueSeriesIdentifier; - for (gdcm::DirListType::iterator it = fileNames.begin(); + for (gdcm::DirListType::iterator it) = fileNames.begin(); it != fileNames.end(); ++it) { @@ -314,22 +321,35 @@ int main(int argc, char *argv[]) } userFileIdentifier=s->CreateUserDefinedFileIdentifier(f); - // userFileIdentifier += token; - //userFileIdentifier += *it; - std::cout << "userFileIdentifier1: "<< userFileIdentifier << std::endl; tokens.clear(); gdcm::Util::Tokenize (userFileIdentifier, tokens, token); + int imageNum; // Within FileName + char newName[1024]; + if ( tokens[3] == "gdcmUnfound") // sometimes Trigger Time is not found. CreateUserDefinedFileIdentifier is not aware of the pb. { - tokens[3] = gdcm::Util::GetName( *it ); + ///this is a trick to build up a lexicographical compliant name : + /// eg : fich001.ima vs fich100.ima as opposed to fich1.ima vs fich100.ima + std::string name = gdcm::Util::GetName( *it ); + if (hasSkel) + { + gdcm::Util::Tokenize (name, tokensForFileName, skel); + imageNum = atoi ( tokensForFileName[0].c_str() ); + // probabely we could write something much more complicated using C++ ! + sprintf (newName, "%s%06d%s", skel, imageNum, extent); + tokens[3] = newName; + tokensForFileName.clear(); + } + else + tokens[3] = name; + + userFileIdentifier = tokens[0] + token + tokens[1] + token + tokens[2] + token + tokens[3] + token + tokens[4] + token; - std::cout << "userFileIdentifier2: "<< userFileIdentifier << std::endl; } - - std::cout << " [" << - userFileIdentifier << "]" << std::endl; + if (verbose) + std::cout << "[" << userFileIdentifier << "]" << std::endl; // storing in a map ensures automatic sorting ! sf[userFileIdentifier] = f; @@ -370,7 +390,7 @@ int main(int argc, char *argv[]) fullFilename = currentFile->GetFileName(); lastFilename = gdcm::Util::GetName( fullFilename ); - std::cout << "Try to write [" <first, tokens, token); @@ -530,20 +550,26 @@ int main(int argc, char *argv[]) if (currentFile->IsVRCoherent(0x0021) == 1 ) stringVR = " "; else - stringVR = "IS"; + stringVR = "IS"; + currentFile->InsertEntryString(strChSliceIndex, 0x0021, 0x1020, stringVR); currentFile->InsertEntryString(chFrameIndex, 0x0021, 0x1040, stringVR); - - if (flag == 0) - { - flag = 1; - } - else - { + + if (taggrid) frameIndex++; - flag = 0; - } - + else + { + if (flag == 0) + { + flag = 1; + } + else + { + frameIndex++; + flag = 0; + } + } + if (split) //fullWriteFilename = currentPhaseEncodingDirectionWriteDir + gdcm::GDCM_FILESEPARATOR @@ -565,6 +591,12 @@ int main(int argc, char *argv[]) fh = gdcm::FileHelper::New(currentFile); fh->GetImageDataRaw(); // Don't convert (Gray Pixels + LUT) into (RGB pixels) ?!? fh->SetWriteTypeToDcmExplVR(); + // We didn't modify pixels -> keep unchanged the following : + // 'Media Storage SOP Class UID' (0x0002,0x0002) + // 'SOP Class UID' (0x0008,0x0016) + // 'Image Type' (0x0008,0x0008) + // 'Conversion Type' (0x0008,0x0064) + fh->SetContentType(gdcm::UNMODIFIED_PIXELS_IMAGE); if (!fh->Write(fullWriteFilename)) { std::cout << "Fail to write :[" << fullWriteFilename << "]"