r329: *** empty log message ***
[ctsim.git] / src / views.cpp
index 3ec3b6bdae002955050f22087c48926cf07dcf42..0a8f4c8b7472f9c4c9850ea9c01bf130d39efcb4 100644 (file)
@@ -9,7 +9,7 @@
 **  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
@@ -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_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
-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
-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()
@@ -325,6 +325,15 @@ ImageFileView::OnCompare (wxCommandEvent& event)
           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
@@ -405,15 +414,27 @@ ImageFileView::OnAdd (wxCommandEvent& event)
       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
-      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
-        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
@@ -433,15 +454,27 @@ ImageFileView::OnSubtract (wxCommandEvent& event)
       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
-      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
-        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
@@ -461,15 +494,27 @@ ImageFileView::OnMultiply (wxCommandEvent& event)
       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
-      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
-        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
@@ -489,15 +534,27 @@ ImageFileView::OnDivide (wxCommandEvent& event)
       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
-      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
-        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
@@ -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
-  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
-  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
-  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
-  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
@@ -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(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");
@@ -1292,7 +1352,7 @@ PhantomView::OnRasterize (wxCommandEvent& event)
   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) {
@@ -1305,7 +1365,8 @@ PhantomView::OnRasterize (wxCommandEvent& event)
       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)) {
@@ -1315,16 +1376,17 @@ PhantomView::OnRasterize (wxCommandEvent& event)
       }
       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
       
-      std::ostringstream os;
-      os << "Rasterize Phantom " << rPhantom.name() << ": XSize=" << xSize << ", YSize=" << ySize << ", nSamples=" << nSamples << "\n";
-      *theApp->getLog() << os.str().c_str();
     }\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;
       }
-#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);
-#endif
-      \r
+\r
       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());
-      imageFile.labelAdd (Array2dFileLabel::L_HISTORY, os.str().c_str(), timerRecon.timerEnd());
+      imageFile.labelAdd (os.str().c_str(), timerRecon.timerEnd());
     }
   }
 }