GDCM 2.2.0

- Main Page
- Related Pages
- Namespaces
- Classes
- Files
- Directories
- Examples

ELSCINT1WaveToText.cxx

    /*=========================================================================

      Program: GDCM (Grassroots DICOM). A DICOM library

      Copyright (c) 2006-2011 Mathieu Malaterre
      All rights reserved.
      See Copyright.txt or http://gdcm.sourceforge.net/Copyright.html for details.

         This software is distributed WITHOUT ANY WARRANTY; without even
         the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
         PURPOSE.  See the above copyright notice for more information.

    =========================================================================*/
    #include "gdcmReader.h"
    #include "gdcmPrivateTag.h"

    /*
     * This example shows how to read a Wave Information tag from ELSCINT1
     * The wave information is stored in Tag (01e1,18,ELSCINT1) hidden in a
     * Secondary Capture Image Storage (usually a 'N' Symbol is shown)
     *
     * Everything done in this code is for the sole purpose of writing interoperable
     * software under Sect. 1201 (f) Reverse Engineering exception of the DMCA.
     * If you believe anything in this code violates any law or any of your rights,
     * please contact us (gdcm-developers@lists.sourceforge.net) so that we can
     * find a solution.
     *
     * Everything you do with this code is at your own risk, since decompression
     * algorithm was not written from specification documents.
     *
     * Special thanks to:
     * Gauthier Bouilhol
     */

    template <typename T>
    bool dumpargs(std::ostream & os, T c1, T c2, T c3, T c4, T c5, T c6, T c7, T c8)
    {
      static const char sep = '\t';
      os << c1 << sep << c2 << sep << c3 << sep << c4 << sep << c5 << sep << c6 << sep << c7 << sep << c8;
      os << std::endl;
      return true;
    }

    bool wave2stream( std::ostream &text_file, const char *in, size_t len )
    {
      short * buffer = (short*)in;
      int length = len / sizeof( short );
      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;i<length-76;i+=2)
        {
        if ( i < 74 )
          {
          if (buffer[i+75] == 0)
            text_file << buffer[i+74]    << '\t' << buffer[i+75] << '\t' << 0                   << '\t' << "  "         << '\t' << "  "         << '\t' << "  "              << '\t' << buffer[i]         << '\t' << buffer[i+1] << std::endl;
          if (buffer[i+75] == 16384)
            text_file << buffer[i+74]    << '\t' << buffer[i+75] << '\t' << 0                   << '\t' << buffer[i+74] << '\t' << "  "         << '\t' << "  "              << '\t' << buffer[i]         << '\t' << buffer[i+1] << std::endl;
          if (buffer[i+75] == 256)
            text_file << buffer[i+74]    << '\t' << buffer[i+75] << '\t' << 0                   << '\t' << "  "         << '\t' << buffer[i+74] << '\t' << "  "              << '\t' << buffer[i]         << '\t' << buffer[i+1] << std::endl;
          if (buffer[i+75] == -32768)
            text_file << buffer[i+74]    << '\t' << buffer[i+75] << '\t' << 1                   << '\t' << "  "         << '\t' << "  "         << '\t' << buffer[i+74]      << '\t' << buffer[i]         << '\t' << buffer[i+1] << std::endl;
          if (buffer[i+75] == -16384)
            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] << std::endl;
          if (buffer[i+75] == -32512)
            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] << std::endl;
          }
        else
          {
          if (buffer[i+75] == 0)
            text_file << buffer[i+74]    << '\t' << buffer[i+75] << '\t' << 0                   << '\t' << "  "         << '\t' << "  "         << '\t' << "  "              << '\t' << "  "              << '\t' << "  "        << std::endl;
          if (buffer[i+75] == 16384)
            text_file << buffer[i+74]    << '\t' << buffer[i+75] << '\t' << 0                   << '\t' << buffer[i+74] << '\t' << "  "         << '\t' << "  "              << '\t' << "  "              << '\t' << "  "        << std::endl;
          if (buffer[i+75] == 256)
            text_file << buffer[i+74]    << '\t' << buffer[i+75] << '\t' << 0                   << '\t' << "  "         << '\t' << buffer[i+74] << '\t' << "  "              << '\t' << "  "              << '\t' << "  "        << std::endl;
          if (buffer[i+75] == -32768)
            text_file << buffer[i+74]    << '\t' << buffer[i+75] << '\t' << 1                   << '\t' << "  "         << '\t' << "  "         << '\t' << buffer[i+74]      << '\t' << "  "              << '\t' << "  "        << std::endl;
          if (buffer[i+75] == -16384)
            text_file << buffer[i+74]    << '\t' << buffer[i+75] << '\t' << 1                   << '\t' << buffer[i+74] << '\t' << "  "         << '\t' << buffer[i+74]      << '\t' << "  "              << '\t' << "  "        << std::endl;
          if (buffer[i+75] == -32512)
            text_file << buffer[i+74]    << '\t' << buffer[i+75] << '\t' << 1                   << '\t' << "  "         << '\t' << buffer[i+74] << '\t' << buffer[i+74]      << '\t' << "  "              << '\t' << "  "        << std::endl;
          }
        }

      return true;
    }

    int main(int argc, char *argv [])
    {
      if( argc < 3 ) return 1;
      const char *filename = argv[1];
      const char *outfilename = argv[2];
      gdcm::Reader reader;
      reader.SetFileName( filename );
      if( !reader.Read() )
        {
        std::cerr << "Failed to read: " << filename << 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();
      assert( bv );

      std::ofstream os( outfilename );
      // Dump that to a CSV file:
      wave2stream( os, bv->GetPointer(), bv->GetLength() );
      os.close();

      return 0;
    }