# MetaImageMD5Activiz.cs

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

      Program: GDCM (Grassroots DICOM). A DICOM library
      Module:  $URL$

      Copyright (c) 2006-2010 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.

    =========================================================================*/
    using Kitware.VTK;
    using vtkgdcm;
    using gdcm;

    /*
     * $ export MONO_PATH=/usr/lib/cli/activiz-cil/
     * $ export LD_LIBRARY_PATH=/usr/lib/cli/activiz-cil/
     * $ mono ./bin/MetaImageMD5Activiz.exe gdcmData/012345.002.050.dcm
     */
    public class MetaImageMD5Activiz
    {
      public static int ProcessOneMHDMD5(string filename)
        {
        vtkGDCMImageReader reader = vtkGDCMImageReader.New();
        reader.FileLowerLeftOn();
        reader.DebugOff();
        int canread = reader.CanReadFile( filename );
        if( canread == 0 )
          {
          string refms = gdcm.Testing.GetMediaStorageFromFile(filename);
          if( gdcm.MediaStorage.IsImage( gdcm.MediaStorage.GetMSType(refms) ) )
            {
            System.Console.Write( "Problem with file: " + filename + "\n" );
            return 1;
            }
          // not an image
          return 0;
          }

        reader.SetFileName( filename );
        reader.Update();

        // System.Console.Write(reader.GetOutput());

        vtkMetaImageWriter writer = vtkMetaImageWriter.New();
        writer.SetCompression( false );
        writer.SetInput( reader.GetOutput() );
        string subdir = "MetaImageMD5Activiz";
        string tmpdir = gdcm.Testing.GetTempDirectory( subdir );
        if( !gdcm.PosixEmulation.FileIsDirectory( tmpdir ) )
          {
          gdcm.PosixEmulation.MakeDirectory( tmpdir );
          }
        string mhdfile = gdcm.Testing.GetTempFilename( filename, subdir );

        string rawfile = mhdfile;
        mhdfile += ".mhd";
        rawfile += ".raw";
        writer.SetFileName( mhdfile );
        writer.Write();

        string digestmhd = gdcm.Testing.ComputeFileMD5( mhdfile );
        string digestraw = gdcm.Testing.ComputeFileMD5( rawfile );

        string mhdref = vtkGDCMTesting.GetMHDMD5FromFile(filename);
        string rawref = vtkGDCMTesting.GetRAWMD5FromFile(filename);

        if( mhdref != digestmhd )
          {
          System.Console.Write( "Problem with mhd file: " + filename + "\n" );
          System.Console.Write( digestmhd );
          System.Console.Write( "\n" );
          System.Console.Write( mhdref );
          System.Console.Write( "\n" );
          return 1;
          }
        if( rawref != digestraw )
          {
          System.Console.Write( "Problem with raw file: " + filename + "\n" );
          System.Console.Write( digestraw );
          System.Console.Write( "\n" );
          System.Console.Write( rawref );
          System.Console.Write( "\n" );
          return 1;
          }

        return 0;
        }
      public static int Main(string[] args)
        {
        if ( args.Length  == 1 )
          {
          string filename = args[0];
          return ProcessOneMHDMD5( filename );
          }
        // Loop over all gdcmData
        gdcm.Trace.DebugOff();
        gdcm.Trace.WarningOff();
        gdcm.Trace.ErrorOff();

        uint n = gdcm.Testing.GetNumberOfFileNames();
        int ret = 0;
        for( uint i = 0; i < n; ++i )
          {
          string filename = gdcm.Testing.GetFileName( i );
          ret += ProcessOneMHDMD5( filename );
          }
        return ret;
        }
    }