r329: *** empty log message ***
authorKevin M. Rosenberg <kevin@rosenberg.net>
Tue, 2 Jan 2001 06:29:23 +0000 (06:29 +0000)
committerKevin M. Rosenberg <kevin@rosenberg.net>
Tue, 2 Jan 2001 06:29:23 +0000 (06:29 +0000)
ChangeLog
include/array2dfile.h
libctsim/array2dfile.cpp
libctsim/projections.cpp
msvc/ctsim/ctsim.plg
src/ctsim.h
src/views.cpp

index 3a553b135cbb87b9f7bfbb8cdb858726e779f5f4..aaf76fd5bf4bff716e728037763943308c9aa24a 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,9 +1,6 @@
-TODO
-       Be consistant with creation of new images
-
-       copy labels from original image to new images
+3.0alpha2 - Released 1/01/01
        
        
-3.0alpha2 - Released 1/02/01
+       * ctsim: All functions of command-line tools are now in graphical ctsim
        
        * ctsim: added generation of filter images
 
        
        * ctsim: added generation of filter images
 
index e9d4ab257885e3b9d0395a9b9ed25d81c2855abb..5aa522db89080e67d93ba93850d465c74adfd15b 100644 (file)
@@ -9,7 +9,7 @@
 **  This is part of the CTSim program
 **  Copyright (C) 1983-2000 Kevin Rosenberg
 **
 **  This is part of the CTSim program
 **  Copyright (C) 1983-2000 Kevin Rosenberg
 **
-**  $Id: array2dfile.h,v 1.15 2001/01/02 05:34:57 kevin Exp $
+**  $Id: array2dfile.h,v 1.16 2001/01/02 06:29:23 kevin Exp $
 **
 **  This program is free software; you can redistribute it and/or modify
 **  it under the terms of the GNU General Public License (version 2) as
 **
 **  This program is free software; you can redistribute it and/or modify
 **  it under the terms of the GNU General Public License (version 2) as
@@ -152,7 +152,7 @@ public:
 
   void labelAdd (int type, const char* const m_strLabel, double calc_time=0.);
 
 
   void labelAdd (int type, const char* const m_strLabel, double calc_time=0.);
 
-  void labelsCopy (Array2dFile& file, const char* const idStr = NULL);
+  void labelsCopy (const Array2dFile& file, const char* const idStr = NULL);
 
   void setPixelFormat (int type)
       { m_pixelFormat = type; }
 
   void setPixelFormat (int type)
       { m_pixelFormat = type; }
index c450a0ec8389751a44187e32dd8b1c625181718c..e0ab0a4e55d60bec0a5f3e4147ad27e2a0196798 100644 (file)
@@ -9,7 +9,7 @@
 **  This is part of the CTSim program
 **  Copyright (C) 1983-2000 Kevin Rosenberg
 **
 **  This is part of the CTSim program
 **  Copyright (C) 1983-2000 Kevin Rosenberg
 **
-**  $Id: array2dfile.cpp,v 1.24 2001/01/02 05:34:57 kevin Exp $
+**  $Id: array2dfile.cpp,v 1.25 2001/01/02 06:29:23 kevin Exp $
 **
 **  This program is free software; you can redistribute it and/or modify
 **  it under the terms of the GNU General Public License (version 2) as
 **
 **  This program is free software; you can redistribute it and/or modify
 **  it under the terms of the GNU General Public License (version 2) as
@@ -646,7 +646,7 @@ Array2dFile::labelAdd (const Array2dFileLabel& label)
 }
 
 void
 }
 
 void
-Array2dFile::labelsCopy (Array2dFile& copyFile, const char* const pszId)
+Array2dFile::labelsCopy (const Array2dFile& copyFile, const char* const pszId)
 {
   std::string id;
   if (pszId)
 {
   std::string id;
   if (pszId)
index d2ab2b69e189409ce08fb007b8116c0e6da7c3c9..4c31b3808748681a62e7ae33ad1c25a69ad17307 100644 (file)
@@ -8,7 +8,7 @@
 **  This is part of the CTSim program
 **  Copyright (C) 1983-2000 Kevin Rosenberg
 **
 **  This is part of the CTSim program
 **  Copyright (C) 1983-2000 Kevin Rosenberg
 **
-**  $Id: projections.cpp,v 1.33 2000/12/17 22:30:09 kevin Exp $
+**  $Id: projections.cpp,v 1.34 2001/01/02 06:29:23 kevin Exp $
 **
 **  This program is free software; you can redistribute it and/or modify
 **  it under the terms of the GNU General Public License (version 2) as
 **
 **  This program is free software; you can redistribute it and/or modify
 **  it under the terms of the GNU General Public License (version 2) as
@@ -71,6 +71,15 @@ Projections::init (const int nView, const int nDet)
   m_nView = nView;
   m_nDet = nDet;
   newProjData ();
   m_nView = nView;
   m_nDet = nDet;
   newProjData ();
+\r
+  time_t t = time (NULL);\r
+  tm* lt = localtime (&t);\r
+  m_year = lt->tm_year;\r
+  m_month = lt->tm_mon;\r
+  m_day = lt->tm_mday;\r
+  m_hour = lt->tm_hour;\r
+  m_minute = lt->tm_min;\r
+  m_second = lt->tm_sec;\r
 }
 
 void
 }
 
 void
@@ -442,17 +451,6 @@ Projections::write (const char* filename)
     return false;
   }
 
     return false;
   }
 
-#ifdef HAVE_TIME
-  time_t t = time(NULL);
-  tm* lt = localtime(&t);
-  m_year = lt->tm_year;
-  m_month = lt->tm_mon;
-  m_day = lt->tm_mday;
-  m_hour = lt->tm_hour;
-  m_minute = lt->tm_min;
-  m_second = lt->tm_sec;
-#endif
-
   if (! headerWrite (fs))
       return false;
 
   if (! headerWrite (fs))
       return false;
 
index 8035dcdbbdd3c3ba268077676d87ea9051e459ad..004d342b6aa83514ea21f480b7d4d9d1a2178145 100644 (file)
@@ -3,45 +3,99 @@
 <pre>\r
 <h1>Build Log</h1>\r
 <h3>\r
 <pre>\r
 <h1>Build Log</h1>\r
 <h3>\r
---------------------Configuration: ctsim - Win32 Release--------------------\r
+--------------------Configuration: libctsim - Win32 Debug--------------------\r
 </h3>\r
 <h3>Command Lines</h3>\r
 </h3>\r
 <h3>Command Lines</h3>\r
-Creating temporary file "C:\DOCUME~1\kevin\LOCALS~1\Temp\RSP22A.tmp" with contents\r
+Creating temporary file "C:\DOCUME~1\kevin\LOCALS~1\Temp\RSP39.tmp" with contents\r
 [\r
 [\r
-/nologo /G6 /MT /W3 /GR /GX /O2 /I "." /I "..\..\include" /I "..\..\getopt" /I "..\..\..\lpng108" /I "..\..\..\zlib" /I "..\..\..\fftw-2.1.3\fftw" /I "..\..\..\fftw-2.1.3\rfftw" /I "..\..\..\wx2\include" /D CTSIMVERSION=\"2.5.0\" /D "NDEBUG" /D "__WXWIN__" /D "__WXMSW__" /D "HAVE_SGP" /D "HAVE_PNG" /D "HAVE_WXWINDOWS" /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "HAVE_STRING_H" /D "HAVE_FFTW" /D "HAVE_RFFTW" /D "HAVE_GETOPT_H" /D "MSVC" /D "__WIN95__" /D "__WIN32__" /D WINVER=0x0400 /D "STRICT" /FR"Release/" /Fp"Release/ctsim.pch" /YX /Fo"Release/" /Fd"Release/" /FD /c \r
-"C:\ctsim-2.0.6\src\views.cpp"\r
+/nologo /G6 /MTd /W3 /Gm /GR /GX /ZI /Od /I "..\..\..\zlib" /I "..\..\INCLUDE" /I "..\..\getopt" /I "..\..\..\lpng108" /I "..\..\..\fftw-2.1.3\fftw" /I "..\..\..\fftw-2.1.3\rfftw" /I "..\..\..\wx2\include" /D "_DEBUG" /D "HAVE_WXWIN" /D "HAVE_STRING_H" /D "HAVE_GETOPT_H" /D "WIN32" /D "_MBCS" /D "_LIB" /D "MSVC" /D "HAVE_FFTW" /D "HAVE_PNG" /D "HAVE_SGP" /D "HAVE_WXWINDOWS" /D "__WXMSW__" /FR"Debug/" /Fp"Debug/libctsim.pch" /YX /Fo"Debug/" /Fd"Debug/" /FD /GZ /c \r
+"C:\ctsim-2.0.6\libctsim\projections.cpp"\r
 ]\r
 ]\r
-Creating command line "cl.exe @C:\DOCUME~1\kevin\LOCALS~1\Temp\RSP22A.tmp" \r
-Creating temporary file "C:\DOCUME~1\kevin\LOCALS~1\Temp\RSP22B.tmp" with contents\r
+Creating command line "cl.exe @C:\DOCUME~1\kevin\LOCALS~1\Temp\RSP39.tmp" \r
+Creating temporary file "C:\DOCUME~1\kevin\LOCALS~1\Temp\RSP3A.tmp" with contents\r
 [\r
 [\r
-kernel32.lib user32.lib wsock32.lib comctl32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib libpng.lib zlib.lib /nologo /subsystem:windows /incremental:no /pdb:"Release/ctsim.pdb" /machine:I386 /out:"Release/ctsim.exe" /libpath:"..\..\..\lpng108\msvc\win32\libpng\lib" /libpath:"..\..\..\lpng108\msvc\win32\zlib\lib" \r
-".\Release\ctsim.obj"\r
-".\Release\dialogs.obj"\r
-".\Release\dlgprojections.obj"\r
-".\Release\dlgreconstruct.obj"\r
-".\Release\docs.obj"\r
-".\Release\views.obj"\r
-".\Release\wx.res"\r
-"\ctsim-2.0.6\msvc\libctsim\Release\libctsim.lib"\r
-"\fftw-2.1.3\Win32\FFTW2st\Release\FFTW2st.lib"\r
-"\fftw-2.1.3\Win32\RFFTW2st\Release\RFFTW2st.lib"\r
-"\wx2\lib\wx.lib"\r
+/nologo /out:"Debug\libctsim.lib" \r
+".\Debug\array2dfile.obj"\r
+".\Debug\backprojectors.obj"\r
+".\Debug\clip.obj"\r
+".\Debug\consoleio.obj"\r
+".\Debug\ezplot.obj"\r
+".\Debug\ezset.obj"\r
+".\Debug\ezsupport.obj"\r
+".\Debug\filter.obj"\r
+".\Debug\fnetorderstream.obj"\r
+".\Debug\fourier.obj"\r
+".\Debug\getopt.obj"\r
+".\Debug\getopt1.obj"\r
+".\Debug\hashtable.obj"\r
+".\Debug\imagefile.obj"\r
+".\Debug\mathfuncs.obj"\r
+".\Debug\phantom.obj"\r
+".\Debug\plotfile.obj"\r
+".\Debug\pol.obj"\r
+".\Debug\procsignal.obj"\r
+".\Debug\projections.obj"\r
+".\Debug\reconstruct.obj"\r
+".\Debug\scanner.obj"\r
+".\Debug\sgp.obj"\r
+".\Debug\strfuncs.obj"\r
+".\Debug\syserror.obj"\r
+".\Debug\trace.obj"\r
+".\Debug\transformmatrix.obj"\r
+".\Debug\xform.obj"\r
 ]\r
 ]\r
-Creating command line "link.exe @C:\DOCUME~1\kevin\LOCALS~1\Temp\RSP22B.tmp"\r
+Creating command line "link.exe -lib @C:\DOCUME~1\kevin\LOCALS~1\Temp\RSP3A.tmp"\r
 <h3>Output Window</h3>\r
 Compiling...\r
 <h3>Output Window</h3>\r
 Compiling...\r
-views.cpp\r
-Linking...\r
-LINK : warning LNK4089: all references to "ADVAPI32.dll" discarded by /OPT:REF\r
-LINK : warning LNK4089: all references to "WSOCK32.dll" discarded by /OPT:REF\r
-Creating command line "bscmake.exe /nologo /o"Release/ctsim.bsc"  ".\Release\ctsim.sbr" ".\Release\dialogs.sbr" ".\Release\dlgprojections.sbr" ".\Release\dlgreconstruct.sbr" ".\Release\docs.sbr" ".\Release\views.sbr""\r
-Creating browse info file...\r
+projections.cpp\r
+Creating library...\r
+<h3>\r
+--------------------Configuration: FFTW2st - Win32 Debug--------------------\r
+</h3>\r
+<h3>Command Lines</h3>\r
+<h3>\r
+--------------------Configuration: zlib - Win32 DLL--------------------\r
+</h3>\r
+<h3>Command Lines</h3>\r
+<h3>\r
+--------------------Configuration: libpng - Win32 DLL--------------------\r
+</h3>\r
+<h3>Command Lines</h3>\r
+<h3>\r
+--------------------Configuration: RFFTW2st - Win32 Debug--------------------\r
+</h3>\r
+<h3>Command Lines</h3>\r
+<h3>\r
+--------------------Configuration: wxvc - Win32 Debug--------------------\r
+</h3>\r
+<h3>Command Lines</h3>\r
+<h3>\r
+--------------------Configuration: ctsim - Win32 Debug--------------------\r
+</h3>\r
+<h3>Command Lines</h3>\r
+Creating temporary file "C:\DOCUME~1\kevin\LOCALS~1\Temp\RSP3B.tmp" with contents\r
+[\r
+comctl32.lib winmm.lib rpcrt4.lib ws2_32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib ../libctsim/Debug/libctsim.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib ..\..\..\lpng108\msvc\win32\libpng\lib_dbg\libpng.lib ..\..\..\lpng108\msvc\win32\zlib\lib_dbg\zlib.lib libcmtd.lib ..\..\..\fftw-2.1.3\Win32\FFTW2st\Debug\FFTW2st.lib ..\..\..\fftw-2.1.3\Win32\RFFTW2st\Debug\RFFTW2st.lib ../../../wx2/lib/wxd.lib /nologo /subsystem:windows /incremental:yes /pdb:"Debug/ctsim.pdb" /debug /machine:I386 /nodefaultlib:"libcd.lib" /nodefaultlib:"libcid.lib" /nodefaultlib:"msvcrtd.lib" /out:"Debug/ctsim.exe" /pdbtype:sept /libpath:"..\..\..\lpng108\msvc\win32\libpng\lib" /libpath:"..\..\..\lpng108\msvc\win32\zlib\lib" \r
+".\Debug\ctsim.obj"\r
+".\Debug\dialogs.obj"\r
+".\Debug\dlgprojections.obj"\r
+".\Debug\dlgreconstruct.obj"\r
+".\Debug\docs.obj"\r
+".\Debug\views.obj"\r
+".\Debug\wx.res"\r
+"\ctsim-2.0.6\msvc\libctsim\Debug\libctsim.lib"\r
+"\fftw-2.1.3\Win32\FFTW2st\Debug\FFTW2st.lib"\r
+"\fftw-2.1.3\Win32\RFFTW2st\Debug\RFFTW2st.lib"\r
+"\wx2\lib\wxd.lib"\r
+]\r
+Creating command line "link.exe @C:\DOCUME~1\kevin\LOCALS~1\Temp\RSP3B.tmp"\r
 <h3>Output Window</h3>\r
 <h3>Output Window</h3>\r
+Linking...\r
 \r
 \r
 \r
 <h3>Results</h3>\r
 \r
 \r
 \r
 <h3>Results</h3>\r
-ctsim.exe - 0 error(s), 2 warning(s)\r
+ctsim.exe - 0 error(s), 0 warning(s)\r
 </pre>\r
 </body>\r
 </html>\r
 </pre>\r
 </body>\r
 </html>\r
index aa349c1154b5da187eb0ec5492a4297d41b2e156..9a26c00f34cdb4cd60728ba211b6fdf5317e66a0 100644 (file)
@@ -9,7 +9,7 @@
 **  This is part of the CTSim program
 **  Copyright (C) 1983-2000 Kevin Rosenberg
 **
 **  This is part of the CTSim program
 **  Copyright (C) 1983-2000 Kevin Rosenberg
 **
-**  $Id: ctsim.h,v 1.17 2001/01/02 05:34:57 kevin Exp $
+**  $Id: ctsim.h,v 1.18 2001/01/02 06:29:23 kevin Exp $
 **
 **  This program is free software; you can redistribute it and/or modify
 **  it under the terms of the GNU General Public License (version 2) as
 **
 **  This program is free software; you can redistribute it and/or modify
 **  it under the terms of the GNU General Public License (version 2) as
@@ -124,7 +124,7 @@ public:
     void getCompatibleImages (const ImageFileDocument* pIFDoc, std::vector<ImageFileDocument*>& vecIF);\r
 \r
     bool getSetModifyNewDocs() const\r
     void getCompatibleImages (const ImageFileDocument* pIFDoc, std::vector<ImageFileDocument*>& vecIF);\r
 \r
     bool getSetModifyNewDocs() const\r
-    { return false; }\r
+    { return true; }\r
 
 private:
     wxDocManager* m_docManager;
 
 private:
     wxDocManager* m_docManager;
@@ -160,24 +160,24 @@ enum {
        IFMENU_COMPARE_IMAGES,\r
        IFMENU_COMPARE_ROW,\r
        IFMENU_COMPARE_COL,\r
        IFMENU_COMPARE_IMAGES,\r
        IFMENU_COMPARE_ROW,\r
        IFMENU_COMPARE_COL,\r
-  IFMENU_PROCESS_INVERTVALUES,\r
-  IFMENU_PROCESS_SQRT,\r
-  IFMENU_PROCESS_SQUARE,\r
-  IFMENU_PROCESS_LOG,\r
-  IFMENU_PROCESS_EXP,\r
-  IFMENU_PROCESS_MULTIPLY,\r
-  IFMENU_PROCESS_SUBTRACT,\r
-  IFMENU_PROCESS_SCALESIZE,\r
-  IFMENU_PROCESS_DIVIDE,\r
-  IFMENU_PROCESS_ADD,\r
-  IFMENU_PROCESS_FOURIER,\r
-  IFMENU_PROCESS_INVERSE_FOURIER,\r
-  IFMENU_PROCESS_FFT,\r
-  IFMENU_PROCESS_IFFT,\r
-  IFMENU_PROCESS_MAGNITUDE,\r
-  IFMENU_PROCESS_PHASE,\r
-  IFMENU_PROCESS_SHUFFLENATURALTOFOURIERORDER,\r
-  IFMENU_PROCESS_SHUFFLEFOURIERTONATURALORDER,\r
+  IFMENU_IMAGE_SCALESIZE,\r
+  IFMENU_IMAGE_ADD,\r
+  IFMENU_IMAGE_SUBTRACT,\r
+  IFMENU_IMAGE_MULTIPLY,\r
+  IFMENU_IMAGE_DIVIDE,\r
+  IFMENU_FILTER_INVERTVALUES,\r
+  IFMENU_FILTER_SQRT,\r
+  IFMENU_FILTER_SQUARE,\r
+  IFMENU_FILTER_LOG,\r
+  IFMENU_FILTER_EXP,\r
+  IFMENU_FILTER_FOURIER,\r
+  IFMENU_FILTER_INVERSE_FOURIER,\r
+  IFMENU_FILTER_FFT,\r
+  IFMENU_FILTER_IFFT,\r
+  IFMENU_FILTER_MAGNITUDE,\r
+  IFMENU_FILTER_PHASE,\r
+  IFMENU_FILTER_SHUFFLENATURALTOFOURIERORDER,\r
+  IFMENU_FILTER_SHUFFLEFOURIERTONATURALORDER,\r
     PHMMENU_PROCESS_RASTERIZE,
     PHMMENU_PROCESS_PROJECTIONS,\r
        PLOTMENU_VIEW_SCALE_MINMAX,\r
     PHMMENU_PROCESS_RASTERIZE,
     PHMMENU_PROCESS_PROJECTIONS,\r
        PLOTMENU_VIEW_SCALE_MINMAX,\r
index 3ec3b6bdae002955050f22087c48926cf07dcf42..0a8f4c8b7472f9c4c9850ea9c01bf130d39efcb4 100644 (file)
@@ -9,7 +9,7 @@
 **  This is part of the CTSim program
 **  Copyright (C) 1983-2000 Kevin Rosenberg
 **
 **  This is part of the CTSim program
 **  Copyright (C) 1983-2000 Kevin Rosenberg
 **
-**  $Id: views.cpp,v 1.44 2001/01/02 05:34:57 kevin Exp $
+**  $Id: views.cpp,v 1.45 2001/01/02 06:29:23 kevin Exp $
 **
 **  This program is free software; you can redistribute it and/or modify
 **  it under the terms of the GNU General Public License (version 2) as
 **
 **  This program is free software; you can redistribute it and/or modify
 **  it under the terms of the GNU General Public License (version 2) as
@@ -173,26 +173,26 @@ EVT_MENU(IFMENU_VIEW_SCALE_AUTO, ImageFileView::OnScaleAuto)
 EVT_MENU(IFMENU_COMPARE_IMAGES, ImageFileView::OnCompare)\r
 EVT_MENU(IFMENU_COMPARE_ROW, ImageFileView::OnCompareRow)\r
 EVT_MENU(IFMENU_COMPARE_COL, ImageFileView::OnCompareCol)\r
 EVT_MENU(IFMENU_COMPARE_IMAGES, ImageFileView::OnCompare)\r
 EVT_MENU(IFMENU_COMPARE_ROW, ImageFileView::OnCompareRow)\r
 EVT_MENU(IFMENU_COMPARE_COL, ImageFileView::OnCompareCol)\r
-EVT_MENU(IFMENU_PROCESS_INVERTVALUES, ImageFileView::OnInvertValues)\r
-EVT_MENU(IFMENU_PROCESS_SQUARE, ImageFileView::OnSquare)\r
-EVT_MENU(IFMENU_PROCESS_SQRT, ImageFileView::OnSquareRoot)\r
-EVT_MENU(IFMENU_PROCESS_LOG, ImageFileView::OnLog)\r
-EVT_MENU(IFMENU_PROCESS_EXP, ImageFileView::OnExp)\r
-EVT_MENU(IFMENU_PROCESS_ADD, ImageFileView::OnAdd)\r
-EVT_MENU(IFMENU_PROCESS_SUBTRACT, ImageFileView::OnSubtract)\r
-EVT_MENU(IFMENU_PROCESS_MULTIPLY, ImageFileView::OnMultiply)\r
-EVT_MENU(IFMENU_PROCESS_DIVIDE, ImageFileView::OnDivide)\r
-EVT_MENU(IFMENU_PROCESS_FOURIER, ImageFileView::OnFourier)\r
-EVT_MENU(IFMENU_PROCESS_SCALESIZE, ImageFileView::OnScaleSize)\r
-EVT_MENU(IFMENU_PROCESS_INVERSE_FOURIER, ImageFileView::OnInverseFourier)\r
-EVT_MENU(IFMENU_PROCESS_SHUFFLEFOURIERTONATURALORDER, ImageFileView::OnShuffleFourierToNaturalOrder)\r
-EVT_MENU(IFMENU_PROCESS_SHUFFLENATURALTOFOURIERORDER, ImageFileView::OnShuffleNaturalToFourierOrder)\r
+EVT_MENU(IFMENU_FILTER_INVERTVALUES, ImageFileView::OnInvertValues)\r
+EVT_MENU(IFMENU_FILTER_SQUARE, ImageFileView::OnSquare)\r
+EVT_MENU(IFMENU_FILTER_SQRT, ImageFileView::OnSquareRoot)\r
+EVT_MENU(IFMENU_FILTER_LOG, ImageFileView::OnLog)\r
+EVT_MENU(IFMENU_FILTER_EXP, ImageFileView::OnExp)\r
+EVT_MENU(IFMENU_FILTER_FOURIER, ImageFileView::OnFourier)\r
+EVT_MENU(IFMENU_FILTER_INVERSE_FOURIER, ImageFileView::OnInverseFourier)\r
+EVT_MENU(IFMENU_FILTER_SHUFFLEFOURIERTONATURALORDER, ImageFileView::OnShuffleFourierToNaturalOrder)\r
+EVT_MENU(IFMENU_FILTER_SHUFFLENATURALTOFOURIERORDER, ImageFileView::OnShuffleNaturalToFourierOrder)\r
+EVT_MENU(IFMENU_IMAGE_ADD, ImageFileView::OnAdd)\r
+EVT_MENU(IFMENU_IMAGE_SUBTRACT, ImageFileView::OnSubtract)\r
+EVT_MENU(IFMENU_IMAGE_MULTIPLY, ImageFileView::OnMultiply)\r
+EVT_MENU(IFMENU_IMAGE_DIVIDE, ImageFileView::OnDivide)\r
+EVT_MENU(IFMENU_IMAGE_SCALESIZE, ImageFileView::OnScaleSize)\r
 #ifdef HAVE_FFTW\r
 #ifdef HAVE_FFTW\r
-EVT_MENU(IFMENU_PROCESS_FFT, ImageFileView::OnFFT)\r
-EVT_MENU(IFMENU_PROCESS_IFFT, ImageFileView::OnIFFT)\r
+EVT_MENU(IFMENU_FILTER_FFT, ImageFileView::OnFFT)\r
+EVT_MENU(IFMENU_FILTER_IFFT, ImageFileView::OnIFFT)\r
 #endif\r
 #endif\r
-EVT_MENU(IFMENU_PROCESS_MAGNITUDE, ImageFileView::OnMagnitude)\r
-EVT_MENU(IFMENU_PROCESS_PHASE, ImageFileView::OnPhase)\r
+EVT_MENU(IFMENU_FILTER_MAGNITUDE, ImageFileView::OnMagnitude)\r
+EVT_MENU(IFMENU_FILTER_PHASE, ImageFileView::OnPhase)\r
 EVT_MENU(IFMENU_PLOT_ROW, ImageFileView::OnPlotRow)\r
 EVT_MENU(IFMENU_PLOT_COL, ImageFileView::OnPlotCol)\r
 END_EVENT_TABLE()
 EVT_MENU(IFMENU_PLOT_ROW, ImageFileView::OnPlotRow)\r
 EVT_MENU(IFMENU_PLOT_COL, ImageFileView::OnPlotCol)\r
 END_EVENT_TABLE()
@@ -325,6 +325,15 @@ ImageFileView::OnCompare (wxCommandEvent& event)
           return;\r
         }\r
         \r
           return;\r
         }\r
         \r
+        wxString s = GetDocument()->GetFirstView()->GetFrame()->GetTitle() + ": ";\r
+        differenceImage.labelsCopy (rIF, s.c_str());\r
+        s = pCompareDoc->GetFirstView()->GetFrame()->GetTitle() + ": ";\r
+        differenceImage.labelsCopy (rCompareIF, s.c_str());\r
+        std::ostringstream osLabel;\r
+        osLabel << "Compare image " << GetDocument()->GetFirstView()->GetFrame()->GetTitle().c_str() \r
+          << " and " << pCompareDoc->GetFirstView()->GetFrame()->GetTitle().c_str() << ": "\r
+          << os.str().c_str();\r
+        differenceImage.labelAdd (os.str().c_str());\r
         if (theApp->getSetModifyNewDocs())\r
           pDifferenceDoc->Modify(true);\r
         pDifferenceDoc->UpdateAllViews(this);\r
         if (theApp->getSetModifyNewDocs())\r
           pDifferenceDoc->Modify(true);\r
         pDifferenceDoc->UpdateAllViews(this);\r
@@ -405,15 +414,27 @@ ImageFileView::OnAdd (wxCommandEvent& event)
       ImageFile& rIF = GetDocument()->getImageFile();\r
       ImageFileDocument* pRHSDoc = dialogGetCompare.getImageFileDocument();\r
       const ImageFile& rRHSIF = pRHSDoc->getImageFile();\r
       ImageFile& rIF = GetDocument()->getImageFile();\r
       ImageFileDocument* pRHSDoc = dialogGetCompare.getImageFileDocument();\r
       const ImageFile& rRHSIF = pRHSDoc->getImageFile();\r
-      rIF.addImages (rRHSIF, rIF);\r
+      ImageFileDocument* pNewDoc = dynamic_cast<ImageFileDocument*>(theApp->getDocManager()->CreateDocument("untitled.if", wxDOC_SILENT));\r
+        if (! pNewDoc) {\r
+          sys_error (ERR_SEVERE, "Unable to create image file");\r
+          return;\r
+        }\r
+      ImageFile& newImage = pNewDoc->getImageFile();  \r
+      newImage.setArraySize (rIF.nx(), rIF.ny());\r
+      rIF.addImages (rRHSIF, newImage);\r
       std::ostringstream os;\r
       os << "Add image " << GetDocument()->GetFirstView()->GetFrame()->GetTitle().c_str() << " and " \r
         << pRHSDoc->GetFirstView()->GetFrame()->GetTitle().c_str();\r
       std::ostringstream os;\r
       os << "Add image " << GetDocument()->GetFirstView()->GetFrame()->GetTitle().c_str() << " and " \r
         << pRHSDoc->GetFirstView()->GetFrame()->GetTitle().c_str();\r
-      rIF.labelAdd (os.str().c_str());\r
+      wxString s = GetDocument()->GetFirstView()->GetFrame()->GetTitle() + ": ";\r
+      newImage.labelsCopy (rIF, s.c_str());\r
+      s = pRHSDoc->GetFirstView()->GetFrame()->GetTitle() + ": ";\r
+      newImage.labelsCopy (rRHSIF, s.c_str());\r
+      newImage.labelAdd (os.str().c_str());\r
       *theApp->getLog() << os.str().c_str() << "\n";\r
       if (theApp->getSetModifyNewDocs())\r
       *theApp->getLog() << os.str().c_str() << "\n";\r
       if (theApp->getSetModifyNewDocs())\r
-        GetDocument()->Modify(TRUE);\r
-      GetDocument()->UpdateAllViews(this);\r
+        pNewDoc->Modify(TRUE);\r
+      pNewDoc->UpdateAllViews(this);\r
+      pNewDoc->GetFirstView()->OnUpdate (this, NULL);\r
     }\r
   }\r
 }\r
     }\r
   }\r
 }\r
@@ -433,15 +454,27 @@ ImageFileView::OnSubtract (wxCommandEvent& event)
       ImageFile& rIF = GetDocument()->getImageFile();\r
       ImageFileDocument* pRHSDoc = dialogGetCompare.getImageFileDocument();\r
       const ImageFile& rRHSIF = pRHSDoc->getImageFile();\r
       ImageFile& rIF = GetDocument()->getImageFile();\r
       ImageFileDocument* pRHSDoc = dialogGetCompare.getImageFileDocument();\r
       const ImageFile& rRHSIF = pRHSDoc->getImageFile();\r
-      rIF.subtractImages (rRHSIF, rIF);\r
+      ImageFileDocument* pNewDoc = dynamic_cast<ImageFileDocument*>(theApp->getDocManager()->CreateDocument("untitled.if", wxDOC_SILENT));\r
+        if (! pNewDoc) {\r
+          sys_error (ERR_SEVERE, "Unable to create image file");\r
+          return;\r
+        }\r
+      ImageFile& newImage = pNewDoc->getImageFile();  \r
+      newImage.setArraySize (rIF.nx(), rIF.ny());\r
+      rIF.subtractImages (rRHSIF, newImage);\r
       std::ostringstream os;\r
       std::ostringstream os;\r
-      os << "Subtract image " << GetDocument()->GetFirstView()->GetFrame()->GetTitle().c_str() \r
-        << " and " << pRHSDoc->GetFirstView()->GetFrame()->GetTitle().c_str();\r
-      rIF.labelAdd (os.str().c_str());\r
+      os << "Subtract image " << GetDocument()->GetFirstView()->GetFrame()->GetTitle().c_str() << " and " \r
+        << pRHSDoc->GetFirstView()->GetFrame()->GetTitle().c_str();\r
+      wxString s = GetDocument()->GetFirstView()->GetFrame()->GetTitle() + ": ";\r
+      newImage.labelsCopy (rIF, s.c_str());\r
+      s = pRHSDoc->GetFirstView()->GetFrame()->GetTitle() + ": ";\r
+      newImage.labelsCopy (rRHSIF, s.c_str());\r
+      newImage.labelAdd (os.str().c_str());\r
       *theApp->getLog() << os.str().c_str() << "\n";\r
       if (theApp->getSetModifyNewDocs())\r
       *theApp->getLog() << os.str().c_str() << "\n";\r
       if (theApp->getSetModifyNewDocs())\r
-        GetDocument()->Modify(TRUE);\r
-      GetDocument()->UpdateAllViews(this);\r
+        pNewDoc->Modify(TRUE);\r
+      pNewDoc->UpdateAllViews(this);\r
+      pNewDoc->GetFirstView()->OnUpdate (this, NULL);\r
     }\r
   }\r
 }\r
     }\r
   }\r
 }\r
@@ -461,15 +494,27 @@ ImageFileView::OnMultiply (wxCommandEvent& event)
       ImageFile& rIF = GetDocument()->getImageFile();\r
       ImageFileDocument* pRHSDoc = dialogGetCompare.getImageFileDocument();\r
       const ImageFile& rRHSIF = pRHSDoc->getImageFile();\r
       ImageFile& rIF = GetDocument()->getImageFile();\r
       ImageFileDocument* pRHSDoc = dialogGetCompare.getImageFileDocument();\r
       const ImageFile& rRHSIF = pRHSDoc->getImageFile();\r
-      rIF.multiplyImages (rRHSIF, rIF);\r
+      ImageFileDocument* pNewDoc = dynamic_cast<ImageFileDocument*>(theApp->getDocManager()->CreateDocument("untitled.if", wxDOC_SILENT));\r
+        if (! pNewDoc) {\r
+          sys_error (ERR_SEVERE, "Unable to create image file");\r
+          return;\r
+        }\r
+      ImageFile& newImage = pNewDoc->getImageFile();  \r
+      newImage.setArraySize (rIF.nx(), rIF.ny());\r
+      rIF.multiplyImages (rRHSIF, newImage);\r
       std::ostringstream os;\r
       std::ostringstream os;\r
-      os << "Multiply image " << GetDocument()->GetFirstView()->GetFrame()->GetTitle().c_str() \r
-        << " and " << pRHSDoc->GetFirstView()->GetFrame()->GetTitle().c_str();\r
-      rIF.labelAdd (os.str().c_str());\r
+      os << "Multiply image " << GetDocument()->GetFirstView()->GetFrame()->GetTitle().c_str() << " and " \r
+        << pRHSDoc->GetFirstView()->GetFrame()->GetTitle().c_str();\r
+      wxString s = GetDocument()->GetFirstView()->GetFrame()->GetTitle() + ": ";\r
+      newImage.labelsCopy (rIF, s.c_str());\r
+      s = pRHSDoc->GetFirstView()->GetFrame()->GetTitle() + ": ";\r
+      newImage.labelsCopy (rRHSIF, s.c_str());\r
+      newImage.labelAdd (os.str().c_str());\r
       *theApp->getLog() << os.str().c_str() << "\n";\r
       if (theApp->getSetModifyNewDocs())\r
       *theApp->getLog() << os.str().c_str() << "\n";\r
       if (theApp->getSetModifyNewDocs())\r
-        GetDocument()->Modify(TRUE);\r
-      GetDocument()->UpdateAllViews(this);\r
+        pNewDoc->Modify(TRUE);\r
+      pNewDoc->UpdateAllViews(this);\r
+      pNewDoc->GetFirstView()->OnUpdate (this, NULL);\r
     }\r
   }\r
 }\r
     }\r
   }\r
 }\r
@@ -489,15 +534,27 @@ ImageFileView::OnDivide (wxCommandEvent& event)
       ImageFile& rIF = GetDocument()->getImageFile();\r
       ImageFileDocument* pRHSDoc = dialogGetCompare.getImageFileDocument();\r
       const ImageFile& rRHSIF = pRHSDoc->getImageFile();\r
       ImageFile& rIF = GetDocument()->getImageFile();\r
       ImageFileDocument* pRHSDoc = dialogGetCompare.getImageFileDocument();\r
       const ImageFile& rRHSIF = pRHSDoc->getImageFile();\r
-      rIF.divideImages (rRHSIF, rIF);\r
+      ImageFileDocument* pNewDoc = dynamic_cast<ImageFileDocument*>(theApp->getDocManager()->CreateDocument("untitled.if", wxDOC_SILENT));\r
+        if (! pNewDoc) {\r
+          sys_error (ERR_SEVERE, "Unable to create image file");\r
+          return;\r
+        }\r
+      ImageFile& newImage = pNewDoc->getImageFile();  \r
+      newImage.setArraySize (rIF.nx(), rIF.ny());\r
+      rIF.divideImages (rRHSIF, newImage);\r
       std::ostringstream os;\r
       std::ostringstream os;\r
-      os << "Divide image " << GetDocument()->GetFirstView()->GetFrame()->GetTitle().c_str() \r
-        << " by " << pRHSDoc->GetFirstView()->GetFrame()->GetTitle().c_str();\r
-      rIF.labelAdd (os.str().c_str());\r
+      os << "Divide image " << GetDocument()->GetFirstView()->GetFrame()->GetTitle().c_str() << " by " \r
+        << pRHSDoc->GetFirstView()->GetFrame()->GetTitle().c_str();\r
+      wxString s = GetDocument()->GetFirstView()->GetFrame()->GetTitle() + ": ";\r
+      newImage.labelsCopy (rIF, s.c_str());\r
+      s = pRHSDoc->GetFirstView()->GetFrame()->GetTitle() + ": ";\r
+      newImage.labelsCopy (rRHSIF, s.c_str());\r
+      newImage.labelAdd (os.str().c_str());\r
       *theApp->getLog() << os.str().c_str() << "\n";\r
       if (theApp->getSetModifyNewDocs())\r
       *theApp->getLog() << os.str().c_str() << "\n";\r
       if (theApp->getSetModifyNewDocs())\r
-        GetDocument()->Modify(TRUE);\r
-      GetDocument()->UpdateAllViews(this);\r
+        pNewDoc->Modify(TRUE);\r
+      pNewDoc->UpdateAllViews(this);\r
+      pNewDoc->GetFirstView()->OnUpdate (this, NULL);\r
     }\r
   }\r
 }\r
     }\r
   }\r
 }\r
@@ -660,33 +717,35 @@ ImageFileView::CreateChildFrame(wxDocument *doc, wxView *view)
   view_menu->Append(IFMENU_VIEW_SCALE_MINMAX, "Display Scale &Set...");
   view_menu->Append(IFMENU_VIEW_SCALE_AUTO, "Display Scale &Auto...");
   \r
   view_menu->Append(IFMENU_VIEW_SCALE_MINMAX, "Display Scale &Set...");
   view_menu->Append(IFMENU_VIEW_SCALE_AUTO, "Display Scale &Auto...");
   \r
-  wxMenu* process_menu = new wxMenu;\r
-  process_menu->Append (IFMENU_PROCESS_INVERTVALUES, "&Invert Values");\r
-  process_menu->Append (IFMENU_PROCESS_SQUARE, "&Square");\r
-  process_menu->Append (IFMENU_PROCESS_SQRT, "Square &Root");\r
-  process_menu->Append (IFMENU_PROCESS_LOG, "&Log");\r
-  process_menu->Append (IFMENU_PROCESS_EXP, "&Exp");\r
-  process_menu->AppendSeparator();\r
-  process_menu->Append (IFMENU_PROCESS_ADD, "&Add");\r
-  process_menu->Append (IFMENU_PROCESS_SUBTRACT, "Su&btract");\r
-  process_menu->Append (IFMENU_PROCESS_MULTIPLY, "&Multiply");\r
-  process_menu->Append (IFMENU_PROCESS_DIVIDE, "&Divide");\r
-  process_menu->AppendSeparator();\r
-  process_menu->Append (IFMENU_PROCESS_SCALESIZE, "S&cale Size...");\r
-  process_menu->AppendSeparator();\r
+  wxMenu* filter_menu = new wxMenu;\r
+  filter_menu->Append (IFMENU_FILTER_INVERTVALUES, "&Invert Values");\r
+  filter_menu->Append (IFMENU_FILTER_SQUARE, "&Square");\r
+  filter_menu->Append (IFMENU_FILTER_SQRT, "Square &Root");\r
+  filter_menu->Append (IFMENU_FILTER_LOG, "&Log");\r
+  filter_menu->Append (IFMENU_FILTER_EXP, "&Exp");\r
+  filter_menu->AppendSeparator();\r
 #ifdef HAVE_FFTW\r
 #ifdef HAVE_FFTW\r
-  process_menu->Append (IFMENU_PROCESS_FFT, "&FFT");\r
-  process_menu->Append (IFMENU_PROCESS_IFFT, "&IFFT");\r
-  process_menu->Append (IFMENU_PROCESS_FOURIER, "F&ourier");\r
-  process_menu->Append (IFMENU_PROCESS_INVERSE_FOURIER, "Inverse Fo&urier");\r
+  filter_menu->Append (IFMENU_FILTER_FFT, "&FFT");\r
+  filter_menu->Append (IFMENU_FILTER_IFFT, "&IFFT");\r
+  filter_menu->Append (IFMENU_FILTER_FOURIER, "F&ourier");\r
+  filter_menu->Append (IFMENU_FILTER_INVERSE_FOURIER, "Inverse Fo&urier");\r
 #else\r
 #else\r
-  process_menu->Append (IFMENU_PROCESS_FOURIER, "&Fourier");\r
-  process_menu->Append (IFMENU_PROCESS_INVERSE_FOURIER, "&Inverse Fourier");\r
+  filter_menu->Append (IFMENU_FILTER_FOURIER, "&Fourier");\r
+  filter_menu->Append (IFMENU_FILTER_INVERSE_FOURIER, "&Inverse Fourier");\r
 #endif\r
 #endif\r
-  process_menu->Append (IFMENU_PROCESS_SHUFFLEFOURIERTONATURALORDER, "S&huffle Fourier to Natural Order");\r
-  process_menu->Append (IFMENU_PROCESS_SHUFFLENATURALTOFOURIERORDER, "Shu&ffle Natural to Fourier Order");\r
-  process_menu->Append (IFMENU_PROCESS_MAGNITUDE, "&Magnitude");\r
-  process_menu->Append (IFMENU_PROCESS_PHASE, "&Phase");\r
+  filter_menu->Append (IFMENU_FILTER_SHUFFLEFOURIERTONATURALORDER, "S&huffle Fourier to Natural Order");\r
+  filter_menu->Append (IFMENU_FILTER_SHUFFLENATURALTOFOURIERORDER, "Shu&ffle Natural to Fourier Order");\r
+  filter_menu->Append (IFMENU_FILTER_MAGNITUDE, "&Magnitude");\r
+  filter_menu->Append (IFMENU_FILTER_PHASE, "&Phase");\r
+  \r
+  wxMenu* image_menu = new wxMenu;\r
+  filter_menu->AppendSeparator();\r
+  image_menu->Append (IFMENU_IMAGE_ADD, "&Add...");\r
+  image_menu->Append (IFMENU_IMAGE_SUBTRACT, "&Subtract...");\r
+  image_menu->Append (IFMENU_IMAGE_MULTIPLY, "&Multiply...");\r
+  image_menu->Append (IFMENU_IMAGE_DIVIDE, "&Divide...");\r
+  image_menu->AppendSeparator();\r
+  image_menu->Append (IFMENU_IMAGE_SCALESIZE, "S&cale Size...");\r
 \r
   wxMenu *plot_menu = new wxMenu;\r
   plot_menu->Append (IFMENU_PLOT_ROW, "Plot &Row");\r
 \r
   wxMenu *plot_menu = new wxMenu;\r
   plot_menu->Append (IFMENU_PLOT_ROW, "Plot &Row");\r
@@ -704,7 +763,8 @@ ImageFileView::CreateChildFrame(wxDocument *doc, wxView *view)
   
   menu_bar->Append(file_menu, "&File");
   menu_bar->Append(view_menu, "&View");\r
   
   menu_bar->Append(file_menu, "&File");
   menu_bar->Append(view_menu, "&View");\r
-  menu_bar->Append(process_menu, "&Process");\r
+  menu_bar->Append(image_menu, "&Image");\r
+  menu_bar->Append(filter_menu, "Fi&lter");\r
   menu_bar->Append(plot_menu, "P&lot");\r
   menu_bar->Append(compare_menu, "&Compare");
   menu_bar->Append(help_menu, "&Help");
   menu_bar->Append(plot_menu, "P&lot");\r
   menu_bar->Append(compare_menu, "&Compare");
   menu_bar->Append(help_menu, "&Help");
@@ -1292,7 +1352,7 @@ PhantomView::OnRasterize (wxCommandEvent& event)
   if (retVal == wxID_OK) {
     int xSize = dialogRaster.getXSize();
     int ySize = dialogRaster.getYSize();
   if (retVal == wxID_OK) {
     int xSize = dialogRaster.getXSize();
     int ySize = dialogRaster.getYSize();
-    int nSamples = dialogRaster.getNSamples();
+    int nSamples = dialogRaster.getNSamples();\r
     if (nSamples < 1)
       nSamples = 1;
     if (xSize > 0 && ySize > 0) {
     if (nSamples < 1)
       nSamples = 1;
     if (xSize > 0 && ySize > 0) {
@@ -1305,7 +1365,8 @@ PhantomView::OnRasterize (wxCommandEvent& event)
       ImageFile& imageFile = pRasterDoc->getImageFile();
       
       imageFile.setArraySize (xSize, ySize);
       ImageFile& imageFile = pRasterDoc->getImageFile();
       
       imageFile.setArraySize (xSize, ySize);
-      wxProgressDialog dlgProgress (wxString("Rasterize"), wxString("Rasterization Progress"), imageFile.nx() + 1, m_frame, wxPD_CAN_ABORT);
+      wxProgressDialog dlgProgress (wxString("Rasterize"), wxString("Rasterization Progress"), imageFile.nx() + 1, m_frame, wxPD_CAN_ABORT);\r
+      Timer timer;
       for (unsigned int i = 0; i < imageFile.nx(); i++) {
         rPhantom.convertToImagefile (imageFile, nSamples, Trace::TRACE_NONE, i, 1, true);
         if (! dlgProgress.Update(i+1)) {
       for (unsigned int i = 0; i < imageFile.nx(); i++) {
         rPhantom.convertToImagefile (imageFile, nSamples, Trace::TRACE_NONE, i, 1, true);
         if (! dlgProgress.Update(i+1)) {
@@ -1315,16 +1376,17 @@ PhantomView::OnRasterize (wxCommandEvent& event)
       }
       if (theApp->getSetModifyNewDocs())\r
         pRasterDoc->Modify(true);
       }
       if (theApp->getSetModifyNewDocs())\r
         pRasterDoc->Modify(true);
-      pRasterDoc->UpdateAllViews(this);
+      pRasterDoc->UpdateAllViews(this);\r
+      std::ostringstream os;\r
+      os << "Rasterize Phantom " << rPhantom.name() << ": XSize=" << xSize << ", YSize=" << ySize << ", nSamples=" << nSamples;\r
+      *theApp->getLog() << os.str().c_str() << "\n";\r
+      imageFile.labelAdd (os.str().c_str(), timer.timerEnd());
       ImageFileView* rasterView = dynamic_cast<ImageFileView*>(pRasterDoc->GetFirstView());\r
       if (rasterView) {\r
         rasterView->getFrame()->SetFocus();\r
         rasterView->OnUpdate (rasterView, NULL);\r
       }\r
       
       ImageFileView* rasterView = dynamic_cast<ImageFileView*>(pRasterDoc->GetFirstView());\r
       if (rasterView) {\r
         rasterView->getFrame()->SetFocus();\r
         rasterView->OnUpdate (rasterView, NULL);\r
       }\r
       
-      std::ostringstream os;
-      os << "Rasterize Phantom " << rPhantom.name() << ": XSize=" << xSize << ", YSize=" << ySize << ", nSamples=" << nSamples << "\n";
-      *theApp->getLog() << os.str().c_str();
     }\r
   }
 }
     }\r
   }
 }
@@ -1552,24 +1614,9 @@ ProjectionFileView::OnReconstruct (wxCommandEvent& event)
         wxMessageBox ("Sorry!\nCurrently, frequency-based filtering with direct filter generation is not support for geometries other than parallel.\nAborting command.", "Not Supported", wxOK | wxICON_WARNING, m_frame);
         return;
       }
         wxMessageBox ("Sorry!\nCurrently, frequency-based filtering with direct filter generation is not support for geometries other than parallel.\nAborting command.", "Not Supported", wxOK | wxICON_WARNING, m_frame);
         return;
       }
-#if 0
-      SGPDriver* pSGPDriver = NULL;
-      SGP* pSGP = NULL;
-      wxMemoryDC* pDCPlot = NULL;
-      wxBitmap bitmap;
-      if (m_iDefaultTrace >= Trace::TRACE_PLOT) {
-        bitmap.Create (500, 500);
-        pDCPlot = new wxMemoryDC;
-        pDCPlot->SelectObject (bitmap);
-        pSGPDriver = new SGPDriver (dynamic_cast<wxDC*>pDCPlot, 500, 500);
-        pSGP = new SGP (*pSGPDriver);
-      }
-      Reconstructor* pReconstruct = new Reconstructor (rProj, imageFile, optFilterName.c_str(), m_dDefaultFilterParam, optFilterMethodName.c_str(), m_iDefaultZeropad, optFilterGenerationName.c_str(), optInterpName.c_str(), m_iDefaultInterpParam, optBackprojectName.c_str(), m_iDefaultTrace, pSGP);
-      delete pSGP;
-#else
+\r
       Reconstructor* pReconstruct = new Reconstructor (rProj, imageFile, optFilterName.c_str(), m_dDefaultFilterParam, optFilterMethodName.c_str(), m_iDefaultZeropad, optFilterGenerationName.c_str(), optInterpName.c_str(), m_iDefaultInterpParam, optBackprojectName.c_str(), m_iDefaultTrace);
       Reconstructor* pReconstruct = new Reconstructor (rProj, imageFile, optFilterName.c_str(), m_dDefaultFilterParam, optFilterMethodName.c_str(), m_iDefaultZeropad, optFilterGenerationName.c_str(), optInterpName.c_str(), m_iDefaultInterpParam, optBackprojectName.c_str(), m_iDefaultTrace);
-#endif
-      \r
+\r
       Timer timerRecon;
       if (m_iDefaultTrace > Trace::TRACE_CONSOLE) {
         ReconstructDialog* pDlgReconstruct = new ReconstructDialog (*pReconstruct, rProj, imageFile, m_iDefaultTrace, m_frame);
       Timer timerRecon;
       if (m_iDefaultTrace > Trace::TRACE_CONSOLE) {
         ReconstructDialog* pDlgReconstruct = new ReconstructDialog (*pReconstruct, rProj, imageFile, m_iDefaultTrace, m_frame);
@@ -1614,7 +1661,7 @@ ProjectionFileView::OnReconstruct (wxCommandEvent& event)
       os << "Reconstruct " << rProj.getFilename() << ": xSize=" << m_iDefaultNX << ", ySize=" << m_iDefaultNY << ", Filter=" << optFilterName.c_str() << ", FilterParam=" << m_dDefaultFilterParam << ", FilterMethod=" << optFilterMethodName.c_str() << ", FilterGeneration=" << optFilterGenerationName.c_str() << ", Zeropad=" << m_iDefaultZeropad << ", Interpolation=" << optInterpName.c_str() << ", InterpolationParam=" << m_iDefaultInterpParam << ", Backprojection=" << optBackprojectName.c_str();
       *theApp->getLog() << os.str().c_str() << "\n";
       imageFile.labelAdd (rProj.getLabel());
       os << "Reconstruct " << rProj.getFilename() << ": xSize=" << m_iDefaultNX << ", ySize=" << m_iDefaultNY << ", Filter=" << optFilterName.c_str() << ", FilterParam=" << m_dDefaultFilterParam << ", FilterMethod=" << optFilterMethodName.c_str() << ", FilterGeneration=" << optFilterGenerationName.c_str() << ", Zeropad=" << m_iDefaultZeropad << ", Interpolation=" << optInterpName.c_str() << ", InterpolationParam=" << m_iDefaultInterpParam << ", Backprojection=" << optBackprojectName.c_str();
       *theApp->getLog() << os.str().c_str() << "\n";
       imageFile.labelAdd (rProj.getLabel());
-      imageFile.labelAdd (Array2dFileLabel::L_HISTORY, os.str().c_str(), timerRecon.timerEnd());
+      imageFile.labelAdd (os.str().c_str(), timerRecon.timerEnd());
     }
   }
 }
     }
   }
 }