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