]> Creatis software - clitk.git/blob - tools/clitkDicomWave2Text.cxx
Merge branch 'master' of /home/dsarrut/clitk3.server
[clitk.git] / tools / clitkDicomWave2Text.cxx
1 #include "clitkDicomWave2Text.h"
2 #include "clitkDicomWave2Text_ggo.h"
3
4 #include "clitkCommon.h"
5 //gdcm include
6 #include "gdcmFile.h"
7
8 #if GDCM_MAJOR_VERSION < 2
9   #include "gdcmUtil.h"
10   #include "gdcmBinEntry.h"
11   #include "gdcmValEntry.h"
12   #include "gdcmSeqEntry.h"
13   #include "gdcmSQItem.h"
14 #endif
15
16 #include "gdcmSerieHelper.h"
17
18 #include <iostream>
19 #include <fstream>
20
21 //==========================================================================================================================
22
23 int main(int argc, char * argv[]) {
24
25 //-----------------------------------------------------------------------------
26 // init command line
27 GGO(clitkDicomWave2Text, args_info);
28 //-----------------------------------------------------------------------------
29
30 #if GDCM_MAJOR_VERSION < 2
31 //-----------------------------------------------------------------------
32 // opening dicom input file
33 gdcm::File * mDCMFile = new gdcm::File();
34 mDCMFile->SetFileName(args_info.InputFile_arg);
35 mDCMFile->AddForceLoadElement(0x01e1,0x1018); //Load wave data no matter its size
36
37 if (!mDCMFile->OpenFile ()) {
38         std::cerr << "Sorry, the file does not exist or does not appear to be a DICOM file. Abort." << std::endl;
39     exit(0);
40 }
41 mDCMFile->Load();
42 std::cout << "File:   "<< args_info.InputFile_arg << "   loaded !"<< std::endl;
43
44
45 //-----------------------------------------------------------------------
46 // read data
47 gdcm::DocEntrySet* item = mDCMFile;
48 #define T short
49
50 gdcm::BinEntry* entry = item->GetBinEntry(0x01e1,0x1018);
51 DD(entry);
52 T* buffer = reinterpret_cast<T*>(entry->GetBinArea());
53 int length=item->GetEntryLength(0x01e1,0x1018)/sizeof(T);
54 std::ofstream text_file(args_info.OutputFile_arg, std::ios::out | std::ios::trunc);
55 if(text_file)
56 {
57     std::string stat="";
58     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;
59     for (int i=0;i<length-76;i+=2)
60     {
61             if ( i < 74 )
62             {
63                     switch(i)
64                     {
65                       case 68 :
66                         stat="Total points";
67                         break;
68                       case 70 :
69                         stat="Sampling rate (Hz)";
70                         break;
71                       default :
72                         stat="";
73                         break;
74                     }
75                       
76                     if (buffer[i+75] == 0)
77                         text_file << buffer[i+74]    << '\t' << buffer[i+75] << '\t' << 0                   << '\t' << "  "         << '\t' << "  "         << '\t' << "  "              << '\t' << buffer[i]         << '\t' << buffer[i+1] << '\t' << stat << std::endl;
78                     if (buffer[i+75] == 16384)
79                         text_file << buffer[i+74]    << '\t' << buffer[i+75] << '\t' << 0                   << '\t' << buffer[i+74] << '\t' << "  "         << '\t' << "  "              << '\t' << buffer[i]         << '\t' << buffer[i+1] << '\t' << stat << std::endl;
80                     if (buffer[i+75] == 256)
81                         text_file << buffer[i+74]    << '\t' << buffer[i+75] << '\t' << 0                   << '\t' << "  "         << '\t' << buffer[i+74] << '\t' << "  "              << '\t' << buffer[i]         << '\t' << buffer[i+1] << '\t' << stat << std::endl;
82                     if (buffer[i+75] == -32768)
83                         text_file << buffer[i+74]    << '\t' << buffer[i+75] << '\t' << 1                   << '\t' << "  "         << '\t' << "  "         << '\t' << buffer[i+74]      << '\t' << buffer[i]         << '\t' << buffer[i+1] << '\t' << stat << std::endl;
84                     if (buffer[i+75] == -16384)
85                         text_file << buffer[i+74]    << '\t' << buffer[i+75] << '\t' << 1                   << '\t' << buffer[i+74] << '\t' << "  "         << '\t' << buffer[i+74]      << '\t' << buffer[i]         << '\t' << buffer[i+1] << '\t' << stat << std::endl;
86                     if (buffer[i+75] == -32512)
87                         text_file << buffer[i+74]    << '\t' << buffer[i+75] << '\t' << 1                   << '\t' << "  "         << '\t' << buffer[i+74] << '\t' << buffer[i+74]      << '\t' << buffer[i]         << '\t' << buffer[i+1] << '\t' << stat << std::endl;
88             }
89             else
90             {
91                     if (buffer[i+75] == 0)
92                         text_file << buffer[i+74]    << '\t' << buffer[i+75] << '\t' << 0                   << '\t' << "  "         << '\t' << "  "         << '\t' << "  "              << '\t' << "  "              << '\t' << "  "        << std::endl;
93                     if (buffer[i+75] == 16384)
94                         text_file << buffer[i+74]    << '\t' << buffer[i+75] << '\t' << 0                   << '\t' << buffer[i+74] << '\t' << "  "         << '\t' << "  "              << '\t' << "  "              << '\t' << "  "        << std::endl;
95                     if (buffer[i+75] == 256)
96                         text_file << buffer[i+74]    << '\t' << buffer[i+75] << '\t' << 0                   << '\t' << "  "         << '\t' << buffer[i+74] << '\t' << "  "              << '\t' << "  "              << '\t' << "  "        << std::endl;
97                     if (buffer[i+75] == -32768)
98                         text_file << buffer[i+74]    << '\t' << buffer[i+75] << '\t' << 1                   << '\t' << "  "         << '\t' << "  "         << '\t' << buffer[i+74]      << '\t' << "  "              << '\t' << "  "        << std::endl;
99                     if (buffer[i+75] == -16384)
100                         text_file << buffer[i+74]    << '\t' << buffer[i+75] << '\t' << 1                   << '\t' << buffer[i+74] << '\t' << "  "         << '\t' << buffer[i+74]      << '\t' << "  "              << '\t' << "  "        << std::endl;
101                     if (buffer[i+75] == -32512)
102                         text_file << buffer[i+74]    << '\t' << buffer[i+75] << '\t' << 1                   << '\t' << "  "         << '\t' << buffer[i+74] << '\t' << buffer[i+74]      << '\t' << "  "              << '\t' << "  "        << std::endl;
103             }
104     }
105     text_file.close();
106 }
107 else
108     std::cerr << "Error openning "<< args_info.OutputFile_arg << std::endl;
109 #else
110     std::cerr << argv[0] << " is not compatible with GDCM 2.x you should use GDCM 1.x" << std::endl;
111     return 1;
112 #endif
113 }