cmtkProtocolCallback.cxx

Go to the documentation of this file.
00001 /*
00002 //
00003 //  Copyright 1997-2009 Torsten Rohlfing
00004 //  Copyright 2004-2009 SRI International
00005 //
00006 //  This file is part of the Computational Morphometry Toolkit.
00007 //
00008 //  http://www.nitrc.org/projects/cmtk/
00009 //
00010 //  The Computational Morphometry Toolkit is free software: you can
00011 //  redistribute it and/or modify it under the terms of the GNU General Public
00012 //  License as published by the Free Software Foundation, either version 3 of
00013 //  the License, or (at your option) any later version.
00014 //
00015 //  The Computational Morphometry Toolkit is distributed in the hope that it
00016 //  will be useful, but WITHOUT ANY WARRANTY; without even the implied
00017 //  warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
00018 //  GNU General Public License for more details.
00019 //
00020 //  You should have received a copy of the GNU General Public License along
00021 //  with the Computational Morphometry Toolkit.  If not, see
00022 //  <http://www.gnu.org/licenses/>.
00023 //
00024 //  $Revision: 2398 $
00025 //
00026 //  $LastChangedDate: 2010-10-05 14:54:37 -0700 (Tue, 05 Oct 2010) $
00027 //
00028 //  $LastChangedBy: torstenrohlfing $
00029 //
00030 */
00031 
00032 #include <Registration/cmtkProtocolCallback.h>
00033 
00034 #include <Base/cmtkMathUtil.h>
00035 
00036 namespace
00037 cmtk
00038 {
00039 
00042 
00043 ProtocolCallback::ProtocolCallback
00044 ( const char *filename, const bool debug ) 
00045 { 
00046   if (filename) 
00047     {
00048     if ( (fp = fopen( filename, "w" )) ) 
00049       {
00050       fputs( "4\n1 3 3 3\n", fp );
00051       fflush( fp );
00052       }
00053     }
00054   else
00055     fp = NULL; 
00056   
00057   Debug = debug;
00058 }
00059 
00060 ProtocolCallback::~ProtocolCallback () 
00061 {
00062   if (fp) fclose(fp); 
00063 }
00064 
00065 CallbackResult
00066 ProtocolCallback::ExecuteWithData
00067 ( const CoordinateVector& v, const double metric ) 
00068 {
00069   size_t dim = std::min<unsigned int>( 20, v.Dim );
00070   if (fp) 
00071     {
00072     fprintf( fp, "%f", metric );    
00073     for ( size_t i = 0; i < dim; ++i )
00074       fprintf( fp, " %f", (float) v[i] );
00075     
00076     if ( v.Dim > 20 ) fputs( " ...", fp );
00077     fputs( "\n", fp );
00078     fflush( fp );
00079     }
00080   
00081   if ( Debug ) 
00082     {
00083     fprintf( stderr, "%f", metric );
00084     for ( size_t i = 0; i < dim; ++i )
00085       fprintf( stderr, " %f", (float) v[i] );
00086     fputs( "\n", stderr );
00087     }
00088   
00089   return this->Superclass::ExecuteWithData( v, metric );
00090 }
00091 
00092 void
00093 ProtocolCallback::Comment ( const char* comment )
00094 {
00095   if ( fp ) 
00096     {
00097     if ( comment ) 
00098       {
00099       fprintf( fp, "# %s\n", comment );
00100       fflush( fp );
00101       } 
00102     else
00103       {
00104       fputs( "#\n", fp );
00105       fflush( fp );
00106       }
00107     }
00108   
00109   if ( Debug )
00110     {
00111     if ( comment )
00112       fprintf( stderr, "# %s\n", comment );
00113     else
00114       fputs( "#\n", stderr );
00115     }
00116 }
00117 
00118 } // namespace cmtk
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines