X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;f=tools%2FclitkDicomWave2Text.cxx;h=694a98b83f744c14b72006ecf2e8e6c50a0fa59d;hb=1512c37902327dde2650268e1fbd7fbc085b7a89;hp=2ceef2d68d0a68c1e9aceb8c0f0255adb46a5722;hpb=4b9841d895ea450bc2d07c38e40277725717b93a;p=clitk.git diff --git a/tools/clitkDicomWave2Text.cxx b/tools/clitkDicomWave2Text.cxx index 2ceef2d..694a98b 100644 --- a/tools/clitkDicomWave2Text.cxx +++ b/tools/clitkDicomWave2Text.cxx @@ -1,104 +1,136 @@ -#include "clitkDicomWave2Text.h" -#include "clitkDicomWave2Text_ggo.h" +/*========================================================================= + Program: vv http://www.creatis.insa-lyon.fr/rio/vv -//gdcm include -#include "gdcmUtil.h" -#include "gdcmFile.h" -#include "gdcmBinEntry.h" -#include "gdcmValEntry.h" -#include "gdcmSeqEntry.h" -#include "gdcmSQItem.h" -#include "gdcmSerieHelper.h" + Authors belong to: + - University of LYON http://www.universite-lyon.fr/ + - Léon Bérard cancer center http://www.centreleonberard.fr + - CREATIS CNRS laboratory http://www.creatis.insa-lyon.fr -#include -#include + This software is distributed WITHOUT ANY WARRANTY; without even + the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR + PURPOSE. See the copyright notices for more information. -//========================================================================================================================== + It is distributed under dual licence -int main(int argc, char * argv[]) { + - BSD See included LICENSE.txt file + - CeCILL-B http://www.cecill.info/licences/Licence_CeCILL-B_V1-en.html +===========================================================================**/ -//----------------------------------------------------------------------------- -// init command line -GGO(clitkDicomWave2Text, args_info); -//----------------------------------------------------------------------------- +#include "clitkDicomWave2Text.h" +#include "clitkDicomWave2Text_ggo.h" -//----------------------------------------------------------------------- -// opening dicom input file -gdcm::File * mDCMFile = new gdcm::File(); -mDCMFile->SetFileName(args_info.InputFile_arg); -mDCMFile->AddForceLoadElement(0x01e1,0x1018); //Load wave data no matter its size +#include "clitkCommon.h" -if (!mDCMFile->OpenFile ()) { - std::cerr << "Sorry, the file does not exist or does not appear to be a DICOM file. Abort." << std::endl; - exit(0); -} -mDCMFile->Load(); -std::cout << "File: "<< args_info.InputFile_arg << " loaded !"<< std::endl; +#include "gdcmFile.h" +#if GDCM_MAJOR_VERSION < 2 + #include "gdcmBinEntry.h" +#else + #include "gdcmReader.h" + #include "gdcmPrivateTag.h" +#endif +#include +#include -//----------------------------------------------------------------------- -// read data -gdcm::DocEntrySet* item = mDCMFile; -#define T short -gdcm::BinEntry* entry = item->GetBinEntry(0x01e1,0x1018); -DD(entry); -T* buffer = reinterpret_cast(entry->GetBinArea()); -int length=item->GetEntryLength(0x01e1,0x1018)/sizeof(T); -std::ofstream text_file(args_info.OutputFile_arg, std::ios::out | std::ios::trunc); -if(text_file) +bool wave2stream( std::ostream &text_file, const short *buffer, int length ) { - std::string stat=""; - text_file << "COMPLETE_WAVE" << '\t' << "MASK" << '\t' << "AQUISITION_PROFIL" << '\t' << "END-INHALE" << '\t' << "END-EXHALE" << '\t' << "AQUISITION_WAVE" << '\t' << "WAVE_STATISTICS" << '\t' << "MASK" << std::endl; - for (int i=0;iSetFileName(args_info.InputFile_arg); + mDCMFile->AddForceLoadElement(0x01e1,0x1018); //Load wave data no matter its size + if ( !mDCMFile->OpenFile() ) + { + std::cerr << "Failed to read: " << args_info.InputFile_arg << std::endl; + return 1; + } + mDCMFile->Load(); + gdcm::DocEntrySet* item = mDCMFile; + #define T short + gdcm::BinEntry * entry = item->GetBinEntry(0x01e1,0x1018); + T* buffer = reinterpret_cast(entry->GetBinArea()); + int length=item->GetEntryLength(0x01e1,0x1018)/sizeof(T); + + #else + + gdcm::Reader reader; + reader.SetFileName(args_info.InputFile_arg); + if( !reader.Read() ) + { + std::cerr << "Failed to read: " << args_info.InputFile_arg << std::endl; + return 1; + } + const gdcm::DataSet& ds = reader.GetFile().GetDataSet(); + const gdcm::PrivateTag twave(0x01e1,0x18,"ELSCINT1"); + if( !ds.FindDataElement( twave ) ) return 1; + const gdcm::DataElement& wave = ds.GetDataElement( twave ); + if ( wave.IsEmpty() ) return 1; + const gdcm::ByteValue * bv = wave.GetByteValue(); + short * buffer = (short*)bv->GetPointer(); + int length = bv->GetLength() / sizeof( short ); + + #endif + + // Dump that to a CSV file: + wave2stream( os, buffer, length ); + os.close(); + return 0; }