r11859: Canonicalize whitespace
[ctsim.git] / src / views.cpp
index 1fe4bbfbbc2c71facb551f464b64bc7dec8a4b36..369b522326966d9ec0f97e9682cef29a354a7078 100644 (file)
@@ -77,20 +77,20 @@ ImageFileCanvas::ImageFileCanvas (ImageFileView* v, wxFrame *frame, const wxPoin
 ImageFileCanvas::~ImageFileCanvas()
 {}
 
-void 
+void
 ImageFileCanvas::OnDraw(wxDC& dc)
 {
   if (m_pView)
     m_pView->OnDraw(& dc);
 }
 
-void 
+void
 ImageFileCanvas::DrawRubberBandCursor (wxDC& dc, int x, int y)
 {
   const ImageFile& rIF = m_pView->GetDocument()->getImageFile();
   int nx = rIF.nx();
   int ny = rIF.ny();
-  
+
   int yPt = ny - y - 1;
   dc.SetLogicalFunction (wxINVERT);
   dc.SetPen (*wxGREEN_PEN);
@@ -104,25 +104,25 @@ ImageFileCanvas::GetCurrentCursor (int& x, int& y)
 {
   x = m_xCursor;
   y = m_yCursor;
-  
+
   if (m_xCursor >= 0 && m_yCursor >= 0)
     return true;
   else
     return false;
 }
 
-void 
+void
 ImageFileCanvas::OnMouseEvent(wxMouseEvent& event)
 {
   if (! m_pView)
     return;
-  
-  
+
+
   wxClientDC dc(this);
   PrepareDC(dc);
-  
+
   wxPoint pt(event.GetLogicalPosition(dc));
-  
+
   const ImageFileDocument* pIFDoc = m_pView->GetDocument();
   if (! pIFDoc)
     return;
@@ -203,12 +203,12 @@ ImageFileCanvas::GetBestSize() const
     bestSize.x = 800;
   if (bestSize.y > 800)
     bestSize.y = 800;
-  
+
   if (bestSize.y < iMinY)
     bestSize.y = iMinY;
   if (bestSize.x < iMinX)
     bestSize.x = iMinX;
-  
+
   return bestSize;
 }
 
@@ -267,7 +267,7 @@ EVT_MENU(IFMENU_PLOT_FFT_COL, ImageFileView::OnPlotFFTCol)
 EVT_MENU(IFMENU_PLOT_HISTOGRAM, ImageFileView::OnPlotHistogram)
 END_EVENT_TABLE()
 
-ImageFileView::ImageFileView() 
+ImageFileView::ImageFileView()
   :  wxView(), m_pBitmap(0), m_pFrame(0), m_pCanvas(0), m_pFileMenu(0),
      m_pFilterMenu(0), m_bMinSpecified(false), m_bMaxSpecified(false),
      m_iDefaultExportFormatID(ImageFile::EXPORT_FORMAT_PNG)
@@ -313,7 +313,7 @@ ImageFileView::OnProperties (wxCommandEvent& event)
   GetDocument()->Activate();
 }
 
-void 
+void
 ImageFileView::OnScaleAuto (wxCommandEvent& event)
 {
   const ImageFile& rIF = GetDocument()->getImageFile();
@@ -336,19 +336,19 @@ ImageFileView::OnScaleAuto (wxCommandEvent& event)
   GetDocument()->Activate();
 }
 
-void 
+void
 ImageFileView::OnScaleMinMax (wxCommandEvent& event)
 {
   const ImageFile& rIF = GetDocument()->getImageFile();
   double min, max;
   if (! m_bMinSpecified && ! m_bMaxSpecified)
     rIF.getMinMax (min, max);
-  
+
   if (m_bMinSpecified)
     min = m_dMinPixel;
   if (m_bMaxSpecified)
     max = m_dMaxPixel;
-  
+
   DialogGetMinMax dialogMinMax (getFrameForChild(), "Set Image Minimum & Maximum", min, max);
   int retVal = dialogMinMax.ShowModal();
   if (retVal == wxID_OK) {
@@ -362,7 +362,7 @@ ImageFileView::OnScaleMinMax (wxCommandEvent& event)
   GetDocument()->Activate();
 }
 
-void 
+void
 ImageFileView::OnScaleFull (wxCommandEvent& event)
 {
   if (m_bMinSpecified || m_bMaxSpecified) {
@@ -379,12 +379,12 @@ ImageFileView::OnCompare (wxCommandEvent& event)
 {
   std::vector<ImageFileDocument*> vecIF;
   theApp->getCompatibleImages (GetDocument(), vecIF);
-  
+
   if (vecIF.size() == 0) {
     wxMessageBox("There are no compatible image files open for comparision", "No comparison images");
   } else {
     DialogGetComparisonImage dialogGetCompare(getFrameForChild(), "Get Comparison Image", vecIF, true);
-    
+
     if (dialogGetCompare.ShowModal() == wxID_OK) {
       const ImageFile& rIF = GetDocument()->getImageFile();
       ImageFileDocument* pCompareDoc = dialogGetCompare.getImageFileDocument();
@@ -401,7 +401,7 @@ ImageFileView::OnCompare (wxCommandEvent& event)
       *theApp->getLog() << ">>>>\n" << os.str().c_str() << "<<<<\n";
       if (dialogGetCompare.getMakeDifferenceImage()) {
         ImageFile* pDifferenceImage = new ImageFile;
-        
+
         pDifferenceImage->setArraySize (rIF.nx(), rIF.ny());
         if (! rIF.subtractImages (rCompareIF, *pDifferenceImage)) {
           *theApp->getLog() << "Unable to subtract images\n";
@@ -414,21 +414,21 @@ ImageFileView::OnCompare (wxCommandEvent& event)
           return;
         }
         pDifferenceDoc->setImageFile (pDifferenceImage);
-        
+
         wxString s = GetFrame()->GetTitle() + ": ";
         pDifferenceImage->labelsCopy (rIF, s.c_str());
         s = pCompareDoc->GetFirstView()->GetFrame()->GetTitle() + ": ";
         pDifferenceImage->labelsCopy (rCompareIF, s.c_str());
         std::ostringstream osLabel;
-        osLabel << "Compare image " << GetDocument()->GetFirstView()->GetFrame()->GetTitle().c_str() 
+        osLabel << "Compare image " << GetDocument()->GetFirstView()->GetFrame()->GetTitle().c_str()
           << " and " << pCompareDoc->GetFirstView()->GetFrame()->GetTitle().c_str() << ": "
           << os.str().c_str();
         pDifferenceImage->labelAdd (os.str().c_str());
         if (theApp->getAskDeleteNewDocs())
           pDifferenceDoc->Modify (true);
-       OnUpdate(this, NULL);
+        OnUpdate(this, NULL);
         pDifferenceDoc->UpdateAllViews(this);
-       pDifferenceDoc->getView()->setInitialClientSize();
+        pDifferenceDoc->getView()->setInitialClientSize();
         pDifferenceDoc->Activate();
       }
       wxMessageBox(os.str().c_str(), "Image Comparison");
@@ -506,12 +506,12 @@ ImageFileView::OnAdd (wxCommandEvent& event)
 {
   std::vector<ImageFileDocument*> vecIF;
   theApp->getCompatibleImages (GetDocument(), vecIF);
-  
+
   if (vecIF.size() == 0) {
     wxMessageBox ("There are no compatible image files open for comparision", "No comparison images");
   } else {
     DialogGetComparisonImage dialogGetCompare (getFrameForChild(), "Get Image to Add", vecIF, false);
-    
+
     if (dialogGetCompare.ShowModal() == wxID_OK) {
       ImageFile& rIF = GetDocument()->getImageFile();
       ImageFileDocument* pRHSDoc = dialogGetCompare.getImageFileDocument();
@@ -521,11 +521,11 @@ ImageFileView::OnAdd (wxCommandEvent& event)
         sys_error (ERR_SEVERE, "Unable to create image file");
         return;
       }
-      ImageFile& newImage = pNewDoc->getImageFile();  
+      ImageFile& newImage = pNewDoc->getImageFile();
       newImage.setArraySize (rIF.nx(), rIF.ny());
       rIF.addImages (rRHSIF, newImage);
       std::ostringstream os;
-      os << "Add image " << GetDocument()->GetFirstView()->GetFrame()->GetTitle().c_str() << " and " 
+      os << "Add image " << GetDocument()->GetFirstView()->GetFrame()->GetTitle().c_str() << " and "
         << pRHSDoc->GetFirstView()->GetFrame()->GetTitle().c_str();
       wxString s = GetDocument()->GetFirstView()->GetFrame()->GetTitle() + ": ";
       newImage.labelsCopy (rIF, s.c_str());
@@ -548,12 +548,12 @@ ImageFileView::OnSubtract (wxCommandEvent& event)
 {
   std::vector<ImageFileDocument*> vecIF;
   theApp->getCompatibleImages (GetDocument(), vecIF);
-  
+
   if (vecIF.size() == 0) {
     wxMessageBox ("There are no compatible image files open for comparision", "No comparison images");
   } else {
     DialogGetComparisonImage dialogGetCompare (getFrameForChild(), "Get Image to Subtract", vecIF, false);
-    
+
     if (dialogGetCompare.ShowModal() == wxID_OK) {
       ImageFile& rIF = GetDocument()->getImageFile();
       ImageFileDocument* pRHSDoc = dialogGetCompare.getImageFileDocument();
@@ -563,11 +563,11 @@ ImageFileView::OnSubtract (wxCommandEvent& event)
         sys_error (ERR_SEVERE, "Unable to create image file");
         return;
       }
-      ImageFile& newImage = pNewDoc->getImageFile();  
+      ImageFile& newImage = pNewDoc->getImageFile();
       newImage.setArraySize (rIF.nx(), rIF.ny());
       rIF.subtractImages (rRHSIF, newImage);
       std::ostringstream os;
-      os << "Subtract image " << GetDocument()->GetFirstView()->GetFrame()->GetTitle().c_str() << " and " 
+      os << "Subtract image " << GetDocument()->GetFirstView()->GetFrame()->GetTitle().c_str() << " and "
         << pRHSDoc->GetFirstView()->GetFrame()->GetTitle().c_str();
       wxString s = GetDocument()->GetFirstView()->GetFrame()->GetTitle() + ": ";
       newImage.labelsCopy (rIF, s.c_str());
@@ -590,12 +590,12 @@ ImageFileView::OnMultiply (wxCommandEvent& event)
 {
   std::vector<ImageFileDocument*> vecIF;
   theApp->getCompatibleImages (GetDocument(), vecIF);
-  
+
   if (vecIF.size() == 0) {
     wxMessageBox ("There are no compatible image files open for comparision", "No comparison images");
   } else {
     DialogGetComparisonImage dialogGetCompare (getFrameForChild(), "Get Image to Multiply", vecIF, false);
-    
+
     if (dialogGetCompare.ShowModal() == wxID_OK) {
       ImageFile& rIF = GetDocument()->getImageFile();
       ImageFileDocument* pRHSDoc = dialogGetCompare.getImageFileDocument();
@@ -605,11 +605,11 @@ ImageFileView::OnMultiply (wxCommandEvent& event)
         sys_error (ERR_SEVERE, "Unable to create image file");
         return;
       }
-      ImageFile& newImage = pNewDoc->getImageFile();  
+      ImageFile& newImage = pNewDoc->getImageFile();
       newImage.setArraySize (rIF.nx(), rIF.ny());
       rIF.multiplyImages (rRHSIF, newImage);
       std::ostringstream os;
-      os << "Multiply image " << GetDocument()->GetFirstView()->GetFrame()->GetTitle().c_str() << " and " 
+      os << "Multiply image " << GetDocument()->GetFirstView()->GetFrame()->GetTitle().c_str() << " and "
         << pRHSDoc->GetFirstView()->GetFrame()->GetTitle().c_str();
       wxString s = GetDocument()->GetFirstView()->GetFrame()->GetTitle() + ": ";
       newImage.labelsCopy (rIF, s.c_str());
@@ -632,12 +632,12 @@ ImageFileView::OnDivide (wxCommandEvent& event)
 {
   std::vector<ImageFileDocument*> vecIF;
   theApp->getCompatibleImages (GetDocument(), vecIF);
-  
+
   if (vecIF.size() == 0) {
     wxMessageBox ("There are no compatible image files open for comparision", "No comparison images");
   } else {
     DialogGetComparisonImage dialogGetCompare (getFrameForChild(), "Get Image to Divide", vecIF, false);
-    
+
     if (dialogGetCompare.ShowModal() == wxID_OK) {
       ImageFile& rIF = GetDocument()->getImageFile();
       ImageFileDocument* pRHSDoc = dialogGetCompare.getImageFileDocument();
@@ -647,11 +647,11 @@ ImageFileView::OnDivide (wxCommandEvent& event)
         sys_error (ERR_SEVERE, "Unable to create image file");
         return;
       }
-      ImageFile& newImage = pNewDoc->getImageFile();  
+      ImageFile& newImage = pNewDoc->getImageFile();
       newImage.setArraySize (rIF.nx(), rIF.ny());
       rIF.divideImages (rRHSIF, newImage);
       std::ostringstream os;
-      os << "Divide image " << GetDocument()->GetFirstView()->GetFrame()->GetTitle().c_str() << " by " 
+      os << "Divide image " << GetDocument()->GetFirstView()->GetFrame()->GetTitle().c_str() << " by "
         << pRHSDoc->GetFirstView()->GetFrame()->GetTitle().c_str();
       wxString s = GetDocument()->GetFirstView()->GetFrame()->GetTitle() + ": ";
       newImage.labelsCopy (rIF, s.c_str());
@@ -891,14 +891,14 @@ ImageFileView::OnImaginary (wxCommandEvent& event)
 }
 
 
-ImageFileCanvas* 
+ImageFileCanvas*
 ImageFileView::CreateCanvas (wxFrame* parent)
 {
   ImageFileCanvas* pCanvas = new ImageFileCanvas (this, parent, wxPoint(-1,-1),
-                                                 wxSize(-1,-1), 0);
+                                                  wxSize(-1,-1), 0);
   pCanvas->SetBackgroundColour(*wxWHITE);
   pCanvas->Clear();
-  
+
   return pCanvas;
 }
 
@@ -924,11 +924,11 @@ ImageFileView::CreateChildFrame(wxDocument *doc, wxView *view)
   m_pFileMenu->Append(wxID_SAVEAS, "Save &As...");
   m_pFileMenu->Append(wxID_CLOSE, "&Close\tCtrl-W");
   m_pFileMenu->Append(wxID_REVERT, "Re&vert");
-  
+
   m_pFileMenu->AppendSeparator();
   m_pFileMenu->Append(IFMENU_FILE_PROPERTIES, "P&roperties\tCtrl-I");
   m_pFileMenu->Append(IFMENU_FILE_EXPORT, "Expor&t...");
-  
+
   m_pFileMenu->AppendSeparator();
   m_pFileMenu->Append(wxID_PRINT, "&Print...");
   m_pFileMenu->Append(wxID_PRINT_SETUP, "Print &Setup...");
@@ -940,17 +940,17 @@ ImageFileView::CreateChildFrame(wxDocument *doc, wxView *view)
   m_pFileMenu->Append(MAINMENU_FILE_EXIT, "E&xit");
   GetDocumentManager()->FileHistoryAddFilesToMenu(m_pFileMenu);
   GetDocumentManager()->FileHistoryUseMenu(m_pFileMenu);
-  
+
   wxMenu* edit_menu = new wxMenu;
   edit_menu->Append(IFMENU_EDIT_COPY, "Copy\tCtrl-C");
   edit_menu->Append(IFMENU_EDIT_CUT, "Cut\tCtrl-X");
   edit_menu->Append(IFMENU_EDIT_PASTE, "Paste\tCtrl-V");
-  
+
   wxMenu *view_menu = new wxMenu;
   view_menu->Append(IFMENU_VIEW_SCALE_MINMAX, "Display Scale S&et...\tCtrl-E");
   view_menu->Append(IFMENU_VIEW_SCALE_AUTO, "Display Scale &Auto...\tCtrl-A");
   view_menu->Append(IFMENU_VIEW_SCALE_FULL, "Display F&ull Scale\tCtrl-U");
-  
+
   m_pFilterMenu = new wxMenu;
   m_pFilterMenu->Append (IFMENU_FILTER_INVERTVALUES, "In&vert Values");
   m_pFilterMenu->Append (IFMENU_FILTER_SQUARE, "&Square");
@@ -978,7 +978,7 @@ ImageFileView::CreateChildFrame(wxDocument *doc, wxView *view)
   m_pFilterMenu->Append (IFMENU_FILTER_PHASE, "&Phase");
   m_pFilterMenu->Append (IFMENU_FILTER_REAL, "Re&al");
   m_pFilterMenu->Append (IFMENU_FILTER_IMAGINARY, "Ima&ginary");
-  
+
   wxMenu* image_menu = new wxMenu;
   image_menu->Append (IFMENU_IMAGE_ADD, "&Add...");
   image_menu->Append (IFMENU_IMAGE_SUBTRACT, "&Subtract...");
@@ -989,7 +989,7 @@ ImageFileView::CreateChildFrame(wxDocument *doc, wxView *view)
 #if wxUSE_GLCANVAS
   image_menu->Append (IFMENU_IMAGE_CONVERT3D, "Convert &3-D\tCtrl-3");
 #endif
-  
+
   m_pMenuAnalyze = new wxMenu;
   m_pMenuAnalyze->Append (IFMENU_PLOT_ROW, "Plot &Row");
   m_pMenuAnalyze->Append (IFMENU_PLOT_COL, "Plot &Column");
@@ -1007,15 +1007,15 @@ ImageFileView::CreateChildFrame(wxDocument *doc, wxView *view)
   m_pMenuAnalyze->Enable (IFMENU_COMPARE_COL, false);
   m_pMenuAnalyze->Enable (IFMENU_PLOT_FFT_ROW, false);
   m_pMenuAnalyze->Enable (IFMENU_PLOT_FFT_COL, false);
-  
+
   wxMenu *help_menu = new wxMenu;
   help_menu->Append(MAINMENU_HELP_CONTENTS, "&Contents\tF1");
   help_menu->Append (MAINMENU_HELP_TIPS, "&Tips");
   help_menu->Append (IDH_QUICKSTART, "&Quick Start");
   help_menu->Append(MAINMENU_HELP_ABOUT, "&About");
-  
+
   wxMenuBar *menu_bar = new wxMenuBar;
-  
+
   menu_bar->Append(m_pFileMenu, "&File");
   menu_bar->Append(edit_menu, "&Edit");
   menu_bar->Append(view_menu, "&View");
@@ -1023,11 +1023,11 @@ ImageFileView::CreateChildFrame(wxDocument *doc, wxView *view)
   menu_bar->Append(m_pFilterMenu, "Fi&lter");
   menu_bar->Append(m_pMenuAnalyze, "&Analyze");
   menu_bar->Append(help_menu, "&Help");
-  
+
   subframe->SetMenuBar(menu_bar);
-  
+
   subframe->Centre(wxBOTH);
-  
+
   wxAcceleratorEntry accelEntries[10];
   accelEntries[0].Set (wxACCEL_CTRL, static_cast<int>('A'), IFMENU_VIEW_SCALE_AUTO);
   accelEntries[1].Set (wxACCEL_CTRL, static_cast<int>('U'), IFMENU_VIEW_SCALE_FULL);
@@ -1047,18 +1047,18 @@ ImageFileView::CreateChildFrame(wxDocument *doc, wxView *view)
 
   wxAcceleratorTable accelTable (iEntry, accelEntries);
   subframe->SetAcceleratorTable (accelTable);
-  
+
   return subframe;
 }
 
 
-bool 
+bool
 ImageFileView::OnCreate (wxDocument *doc, long WXUNUSED(flags) )
 {
   m_bMinSpecified = false;
   m_bMaxSpecified = false;
   m_dAutoScaleFactor = 1.;
-  
+
   m_pFrame = CreateChildFrame(doc, this);
   SetFrame (m_pFrame);
   m_pCanvas = CreateCanvas (m_pFrame);
@@ -1068,39 +1068,39 @@ ImageFileView::OnCreate (wxDocument *doc, long WXUNUSED(flags) )
 
   m_pFrame->Show(true);
   Activate(true);
-  
+
   return true;
 }
 
-void 
+void
 ImageFileView::setInitialClientSize ()
 {
   if (m_pFrame && m_pCanvas) {
     wxSize bestSize = m_pCanvas->GetBestSize();
-    
+
     m_pFrame->SetClientSize (bestSize);
     m_pFrame->Show (true);
     m_pFrame->SetFocus();
   }
-}  
+}
 
-void 
+void
 ImageFileView::OnDraw (wxDC* dc)
 {
   if (m_pBitmap && m_pBitmap->Ok()) {
-#ifdef DEBUG    
+#ifdef DEBUG
     *theApp->getLog() << "Drawing bitmap\n";
 #endif
     dc->DrawBitmap(*m_pBitmap, 0, 0, false);
   }
-  
+
   int xCursor, yCursor;
   if (m_pCanvas->GetCurrentCursor (xCursor, yCursor))
     m_pCanvas->DrawRubberBandCursor (*dc, xCursor, yCursor);
 }
 
 
-void 
+void
 ImageFileView::OnUpdate (wxView *WXUNUSED(sender), wxObject *WXUNUSED(hint) )
 {
   const ImageFile& rIF = GetDocument()->getImageFile();
@@ -1126,7 +1126,7 @@ ImageFileView::OnUpdate (wxView *WXUNUSED(sender), wxObject *WXUNUSED(hint) )
         m_dMaxPixel = max;
     }
     double scaleWidth = m_dMaxPixel - m_dMinPixel;
-    
+
     unsigned char* imageData = new unsigned char [nx * ny * 3];
     if (! imageData) {
       sys_error (ERR_SEVERE, "Unable to allocate memory for Image display");
@@ -1153,18 +1153,18 @@ ImageFileView::OnUpdate (wxView *WXUNUSED(sender), wxObject *WXUNUSED(hint) )
     delete imageData;
     m_pCanvas->SetScrollbars(20, 20, nx/20, ny/20);
     m_pCanvas->SetBackgroundColour(*wxWHITE);
-  } 
-  
+  }
+
   if (m_pCanvas)
     m_pCanvas->Refresh();
 }
 
-bool 
+bool
 ImageFileView::OnClose (bool deleteWindow)
 {
   if (! GetDocument() || ! GetDocument()->Close())
     return false;
-  
+
   Activate (false);
   if (m_pCanvas) {
     m_pCanvas->setView(NULL);
@@ -1173,16 +1173,16 @@ ImageFileView::OnClose (bool deleteWindow)
   wxString s(theApp->GetAppName());
   if (m_pFrame)
     m_pFrame->SetTitle(s);
-  
+
   SetFrame(NULL);
-  
+
   if (deleteWindow) {
     delete m_pFrame;
     m_pFrame = NULL;
     if (GetDocument() && GetDocument()->getBadFileOpen())
       ::wxYield();  // wxWindows bug workaround
   }
-  
+
   return true;
 }
 
@@ -1193,7 +1193,7 @@ ImageFileView::OnEditCopy (wxCommandEvent& event)
 
   if (m_pBitmap)
     pBitmapObject->SetBitmap (*m_pBitmap);
-  
+
   if (wxTheClipboard->Open()) {
     wxTheClipboard->SetData (pBitmapObject);
     wxTheClipboard->Close();
@@ -1220,7 +1220,7 @@ void
 ImageFileView::OnEditPaste (wxCommandEvent& event)
 {
   ImageFile& rIF = GetDocument()->getImageFile();
-  
+
   if (wxTheClipboard->Open()) {
     wxBitmap bitmap;
     if (wxTheClipboard->IsSupported (wxDF_BITMAP)) {
@@ -1229,7 +1229,7 @@ ImageFileView::OnEditPaste (wxCommandEvent& event)
       bitmap = bitmapObject.GetBitmap ();
     }
     wxTheClipboard->Close();
-    
+
     int nx = rIF.nx();
     int ny = rIF.ny();
     bool bMonochrome = false;
@@ -1278,12 +1278,12 @@ ImageFileView::OnExport (wxCommandEvent& event)
       if (! m_bMaxSpecified)
         m_dMaxPixel = max;
     }
-    
+
     DialogExportParameters dialogExport (getFrameForChild(), m_iDefaultExportFormatID);
     if (dialogExport.ShowModal() == wxID_OK) {
       wxString strFormatName (dialogExport.getFormatName ());
       m_iDefaultExportFormatID = ImageFile::convertExportFormatNameToID (strFormatName.c_str());
-      
+
       wxString strExt;
       wxString strWildcard;
       if (m_iDefaultExportFormatID == ImageFile::EXPORT_FORMAT_PGM || m_iDefaultExportFormatID == ImageFile::EXPORT_FORMAT_PGMASCII) {
@@ -1310,8 +1310,8 @@ ImageFileView::OnExport (wxCommandEvent& event)
         strExt = "";
         strWildcard = "Miscellaneous (*.*)|*.*";
       }
-      
-      const wxString& strFilename = wxFileSelector (wxString("Export Filename"), wxString(""), 
+
+      const wxString& strFilename = wxFileSelector (wxString("Export Filename"), wxString(""),
         wxString(""), strExt, strWildcard, wxOVERWRITE_PROMPT | wxHIDE_READONLY | wxSAVE);
       if (strFilename) {
         rIF.exportImage (strFormatName.c_str(), strFilename.c_str(), 1, 1, m_dMinPixel, m_dMaxPixel);
@@ -1327,7 +1327,7 @@ ImageFileView::OnScaleSize (wxCommandEvent& event)
   ImageFile& rIF = GetDocument()->getImageFile();
   unsigned int iOldNX = rIF.nx();
   unsigned int iOldNY = rIF.ny();
-  
+
   DialogGetXYSize dialogGetXYSize (getFrameForChild(), "Set New X & Y Dimensions", iOldNX, iOldNY);
   if (dialogGetXYSize.ShowModal() == wxID_OK) {
     unsigned int iNewNX = dialogGetXYSize.getXSize();
@@ -1379,13 +1379,13 @@ ImageFileView::OnPlotRow (wxCommandEvent& event)
     wxMessageBox ("No row selected. Please use left mouse button on image to select column","Error");
     return;
   }
-  
+
   const ImageFile& rIF = GetDocument()->getImageFile();
   ImageFileArrayConst v = rIF.getArray();
   ImageFileArrayConst vImag = rIF.getImaginaryArray();
   int nx = rIF.nx();
   int ny = rIF.ny();
-  
+
   if (v != NULL && yCursor < ny) {
     double* pX = new double [nx];
     double* pYReal = new double [nx];
@@ -1432,7 +1432,7 @@ ImageFileView::OnPlotRow (wxCommandEvent& event)
       } else
         rPlotFile.setCurveSize (2, nx);
       rPlotFile.addColumn (0, pX);
-      rPlotFile.addColumn (1, pYReal); 
+      rPlotFile.addColumn (1, pYReal);
       if (rIF.isComplex()) {
         rPlotFile.addColumn (2, pYImag);
         rPlotFile.addColumn (3, pYMag);
@@ -1465,13 +1465,13 @@ ImageFileView::OnPlotCol (wxCommandEvent& event)
     wxMessageBox ("No column selected. Please use left mouse button on image to select column","Error");
     return;
   }
-  
+
   const ImageFile& rIF = GetDocument()->getImageFile();
   ImageFileArrayConst v = rIF.getArray();
   ImageFileArrayConst vImag = rIF.getImaginaryArray();
   int nx = rIF.nx();
   int ny = rIF.ny();
-  
+
   if (v != NULL && xCursor < nx) {
     double* pX = new double [ny];
     double* pYReal = new double [ny];
@@ -1518,7 +1518,7 @@ ImageFileView::OnPlotCol (wxCommandEvent& event)
       } else
         rPlotFile.setCurveSize (2, ny);
       rPlotFile.addColumn (0, pX);
-      rPlotFile.addColumn (1, pYReal); 
+      rPlotFile.addColumn (1, pYReal);
       if (rIF.isComplex()) {
         rPlotFile.addColumn (2, pYImag);
         rPlotFile.addColumn (3, pYMag);
@@ -1552,16 +1552,16 @@ ImageFileView::OnPlotFFTRow (wxCommandEvent& event)
     wxMessageBox ("No row selected. Please use left mouse button on image to select column","Error");
     return;
   }
-  
+
   const ImageFile& rIF = GetDocument()->getImageFile();
   ImageFileArrayConst v = rIF.getArray();
   ImageFileArrayConst vImag = rIF.getImaginaryArray();
   int nx = rIF.nx();
   int ny = rIF.ny();
-  
+
   if (v != NULL && yCursor < ny) {
     fftw_complex* pcIn = static_cast<fftw_complex*>(fftw_malloc (sizeof(fftw_complex) * nx));
-    
+
     int i;
     for (i = 0; i < nx; i++) {
       pcIn[i][0] = v[i][yCursor];
@@ -1570,11 +1570,11 @@ ImageFileView::OnPlotFFTRow (wxCommandEvent& event)
       else
         pcIn[i][1] = 0;
     }
-    
+
     fftw_plan plan = fftw_plan_dft_1d (nx, pcIn, pcIn, FFTW_FORWARD, FFTW_ESTIMATE);
     fftw_execute (plan);
     fftw_destroy_plan (plan);
-    
+
     double* pX = new double [nx];
     double* pYReal = new double [nx];
     double* pYImag = new double [nx];
@@ -1588,7 +1588,7 @@ ImageFileView::OnPlotFFTRow (wxCommandEvent& event)
     Fourier::shuffleFourierToNaturalOrder (pYReal, nx);
     Fourier::shuffleFourierToNaturalOrder (pYImag, nx);
     Fourier::shuffleFourierToNaturalOrder (pYMag, nx);
-    
+
     PlotFileDocument* pPlotDoc = theApp->newPlotDoc();
     if (! pPlotDoc) {
       sys_error (ERR_SEVERE, "Internal error: unable to create Plot file");
@@ -1629,7 +1629,7 @@ ImageFileView::OnPlotFFTRow (wxCommandEvent& event)
     delete pYImag;
     delete pYMag;
     fftw_free(pcIn);
-    
+
     if (theApp->getAskDeleteNewDocs())
       pPlotDoc->Modify (true);
     pPlotDoc->getView()->getFrame()->Show(true);
@@ -1646,24 +1646,24 @@ ImageFileView::OnPlotFFTCol (wxCommandEvent& event)
     wxMessageBox ("No column selected. Please use left mouse button on image to select column","Error");
     return;
   }
-  
+
   const ImageFile& rIF = GetDocument()->getImageFile();
   ImageFileArrayConst v = rIF.getArray();
   ImageFileArrayConst vImag = rIF.getImaginaryArray();
   int nx = rIF.nx();
   int ny = rIF.ny();
-  
+
   if (v != NULL && xCursor < nx) {
     fftw_complex* pcIn = new fftw_complex [ny];
     double *pdTemp = new double [ny];
-    
+
     int i;
     for (i = 0; i < ny; i++)
       pdTemp[i] = v[xCursor][i];
     Fourier::shuffleNaturalToFourierOrder (pdTemp, ny);
-    for (i = 0; i < ny; i++) 
+    for (i = 0; i < ny; i++)
       pcIn[i][0] = pdTemp[i];
-    
+
     for (i = 0; i < ny; i++) {
       if (rIF.isComplex())
         pdTemp[i] = vImag[xCursor][i];
@@ -1673,11 +1673,11 @@ ImageFileView::OnPlotFFTCol (wxCommandEvent& event)
     Fourier::shuffleNaturalToFourierOrder (pdTemp, ny);
     for (i = 0; i < ny; i++)
       pcIn[i][1] = pdTemp[i];
-    
+
     fftw_plan plan = fftw_plan_dft_1d (ny, pcIn, pcIn, FFTW_BACKWARD, FFTW_ESTIMATE);
     fftw_execute (plan);
     fftw_destroy_plan (plan);
-    
+
     double* pX = new double [ny];
     double* pYReal = new double [ny];
     double* pYImag = new double [ny];
@@ -1688,7 +1688,7 @@ ImageFileView::OnPlotFFTCol (wxCommandEvent& event)
       pYImag[i] = pcIn[i][1] / ny;
       pYMag[i] = ::sqrt (pcIn[i][0] * pcIn[i][0] + pcIn[i][1] * pcIn[i][1]);
     }
-    
+
     PlotFileDocument* pPlotDoc = theApp->newPlotDoc();
     if (! pPlotDoc) {
       sys_error (ERR_SEVERE, "Internal error: unable to create Plot file");
@@ -1730,7 +1730,7 @@ ImageFileView::OnPlotFFTCol (wxCommandEvent& event)
     delete pYMag;
     delete pdTemp;
     delete [] pcIn;
-    
+
     if (theApp->getAskDeleteNewDocs())
       pPlotDoc->Modify (true);
     pPlotDoc->getView()->getFrame()->Show(true);
@@ -1748,7 +1748,7 @@ ImageFileView::OnCompareCol (wxCommandEvent& event)
     wxMessageBox ("No column selected. Please use left mouse button on image to select column","Error");
     return;
   }
-  
+
   std::vector<ImageFileDocument*> vecIFDoc;
   theApp->getCompatibleImages (GetDocument(), vecIFDoc);
   if (vecIFDoc.size() == 0) {
@@ -1756,17 +1756,17 @@ ImageFileView::OnCompareCol (wxCommandEvent& event)
     return;
   }
   DialogGetComparisonImage dialogGetCompare (getFrameForChild(), "Get Comparison Image", vecIFDoc, false);
-  
+
   if (dialogGetCompare.ShowModal() == wxID_OK) {
     ImageFileDocument* pCompareDoc = dialogGetCompare.getImageFileDocument();
     const ImageFile& rIF = GetDocument()->getImageFile();
     const ImageFile& rCompareIF = pCompareDoc->getImageFile();
-    
+
     ImageFileArrayConst v1 = rIF.getArray();
     ImageFileArrayConst v2 = rCompareIF.getArray();
     int nx = rIF.nx();
     int ny = rIF.ny();
-    
+
     if (v1 != NULL && xCursor < nx) {
       double* pX = new double [ny];
       double* pY1 = new double [ny];
@@ -1800,7 +1800,7 @@ ImageFileView::OnCompareCol (wxCommandEvent& event)
         rPlotFile.addColumn (0, pX);
         rPlotFile.addColumn (1, pY1);
         rPlotFile.addColumn (2, pY2);
-        
+
         unsigned int iL;
         for (iL = 0; iL < rIF.nLabels(); iL++) {
           std::string s = GetDocument()->GetFirstView()->GetFrame()->GetTitle().c_str();
@@ -1839,27 +1839,27 @@ ImageFileView::OnCompareRow (wxCommandEvent& event)
     wxMessageBox ("No column selected. Please use left mouse button on image to select column","Error");
     return;
   }
-  
+
   std::vector<ImageFileDocument*> vecIFDoc;
   theApp->getCompatibleImages (GetDocument(), vecIFDoc);
-  
+
   if (vecIFDoc.size() == 0) {
     wxMessageBox ("No compatible images for Row Comparison", "Error");
     return;
   }
-  
+
   DialogGetComparisonImage dialogGetCompare (getFrameForChild(), "Get Comparison Image", vecIFDoc, false);
-  
+
   if (dialogGetCompare.ShowModal() == wxID_OK) {
     ImageFileDocument* pCompareDoc = dialogGetCompare.getImageFileDocument();
     const ImageFile& rIF = GetDocument()->getImageFile();
     const ImageFile& rCompareIF = pCompareDoc->getImageFile();
-    
+
     ImageFileArrayConst v1 = rIF.getArray();
     ImageFileArrayConst v2 = rCompareIF.getArray();
     int nx = rIF.nx();
     int ny = rIF.ny();
-    
+
     if (v1 != NULL && yCursor < ny) {
       double* pX = new double [nx];
       double* pY1 = new double [nx];
@@ -1927,25 +1927,25 @@ static int NUMBER_HISTOGRAM_BINS = 256;
 
 void
 ImageFileView::OnPlotHistogram (wxCommandEvent& event)
-{ 
+{
   const ImageFile& rIF = GetDocument()->getImageFile();
   ImageFileArrayConst v = rIF.getArray();
   int nx = rIF.nx();
   int ny = rIF.ny();
-  
+
   if (v != NULL && nx > 0 && ny > 0) {
     PlotFileDocument* pPlotDoc = theApp->newPlotDoc();
     if (! pPlotDoc) {
       sys_error (ERR_SEVERE, "Internal error: unable to create Plot file");
       return;
     }
-    
+
     double* pX = new double [NUMBER_HISTOGRAM_BINS];
     double* pY = new double [NUMBER_HISTOGRAM_BINS];
     double dMin, dMax;
     rIF.getMinMax (dMin, dMax);
     double dBinWidth = (dMax - dMin) / NUMBER_HISTOGRAM_BINS;
-    
+
     for (int i = 0; i < NUMBER_HISTOGRAM_BINS; i++) {
       pX[i] = dMin + (i + 0.5) * dBinWidth;
       pY[i] = 0;
@@ -1956,7 +1956,7 @@ ImageFileView::OnPlotHistogram (wxCommandEvent& event)
         if (iBin >= 0 && iBin < NUMBER_HISTOGRAM_BINS)
           pY[iBin] += 1;
       }
-      
+
       PlotFile& rPlotFile = pPlotDoc->getPlotFile();
       std::ostringstream os;
       os << "Histogram";
@@ -2002,7 +2002,7 @@ PhantomCanvas::~PhantomCanvas ()
   m_pView = NULL;
 }
 
-void 
+void
 PhantomCanvas::OnDraw (wxDC& dc)
 {
   if (m_pView)
@@ -2014,7 +2014,7 @@ PhantomCanvas::GetBestSize() const
 {
   if (! m_pView)
     return wxSize(0,0);
-  
+
   int xSize, ySize;
   theApp->getMainFrame()->GetClientSize (&xSize, &ySize);
   xSize = maxValue<int> (xSize, ySize);
@@ -2039,7 +2039,7 @@ EVT_MENU(PHMMENU_PROCESS_RASTERIZE, PhantomFileView::OnRasterize)
 EVT_MENU(PHMMENU_PROCESS_PROJECTIONS, PhantomFileView::OnProjections)
 END_EVENT_TABLE()
 
-PhantomFileView::PhantomFileView() 
+PhantomFileView::PhantomFileView()
 : wxView(), m_pFrame(NULL), m_pCanvas(NULL), m_pFileMenu(0)
 {
 #if defined(DEBUG) || defined(_DEBUG)
@@ -2059,8 +2059,8 @@ PhantomFileView::PhantomFileView()
   m_dDefaultScanRatio = 1;
   m_iDefaultGeometry = Scanner::GEOMETRY_PARALLEL;
   m_iDefaultTrace = Trace::TRACE_NONE;
-  
-#ifdef DEBUG 
+
+#ifdef DEBUG
   m_iDefaultRasterNX = 115;
   m_iDefaultRasterNY = 115;
   m_iDefaultRasterNSamples = 1;
@@ -2099,14 +2099,14 @@ PhantomFileView::OnProperties (wxCommandEvent& event)
 void
 PhantomFileView::OnProjections (wxCommandEvent& event)
 {
-  DialogGetProjectionParameters dialogProjection (getFrameForChild(), 
-    m_iDefaultNDet, m_iDefaultNView, m_iDefaultOffsetView, m_iDefaultNSample, m_dDefaultRotation, 
-    m_dDefaultFocalLength, m_dDefaultCenterDetectorLength, m_dDefaultViewRatio, m_dDefaultScanRatio, 
+  DialogGetProjectionParameters dialogProjection (getFrameForChild(),
+    m_iDefaultNDet, m_iDefaultNView, m_iDefaultOffsetView, m_iDefaultNSample, m_dDefaultRotation,
+    m_dDefaultFocalLength, m_dDefaultCenterDetectorLength, m_dDefaultViewRatio, m_dDefaultScanRatio,
     m_iDefaultGeometry, m_iDefaultTrace);
   int retVal = dialogProjection.ShowModal();
-  if (retVal != wxID_OK) 
+  if (retVal != wxID_OK)
     return;
-  
+
   m_iDefaultNDet = dialogProjection.getNDet();
   m_iDefaultNView = dialogProjection.getNView();
   m_iDefaultOffsetView = dialogProjection.getOffsetView();
@@ -2121,12 +2121,12 @@ PhantomFileView::OnProjections (wxCommandEvent& event)
   m_iDefaultGeometry = Scanner::convertGeometryNameToID (sGeometry.c_str());
   double dRotationRadians = m_dDefaultRotation;
   m_dDefaultRotation /= TWOPI;  // convert back to fraction of a circle
-  
+
   if (m_iDefaultNDet <= 0 || m_iDefaultNView <= 0 || sGeometry == "")
     return;
-  
+
   const Phantom& rPhantom = GetDocument()->getPhantom();
-  Scanner theScanner (rPhantom, sGeometry.c_str(), m_iDefaultNDet, m_iDefaultNView, m_iDefaultOffsetView, m_iDefaultNSample, 
+  Scanner theScanner (rPhantom, sGeometry.c_str(), m_iDefaultNDet, m_iDefaultNView, m_iDefaultOffsetView, m_iDefaultNSample,
     dRotationRadians, m_dDefaultFocalLength, m_dDefaultCenterDetectorLength, m_dDefaultViewRatio, m_dDefaultScanRatio);
   if (theScanner.fail()) {
     wxString msg = "Failed making scanner\n";
@@ -2135,27 +2135,27 @@ PhantomFileView::OnProjections (wxCommandEvent& event)
     wxMessageBox (msg, "Error");
     return;
   }
-  
+
   std::ostringstream os;
-  os << "Projections for " << rPhantom.name() 
-       << ": nDet=" << m_iDefaultNDet 
-    << ", nView=" << m_iDefaultNView 
-       << ", gantry offset=" << m_iDefaultOffsetView 
-       << ", nSamples=" << m_iDefaultNSample 
-    << ", RotAngle=" << m_dDefaultRotation 
-       << ", FocalLengthRatio=" << m_dDefaultFocalLength 
+  os << "Projections for " << rPhantom.name()
+        << ": nDet=" << m_iDefaultNDet
+    << ", nView=" << m_iDefaultNView
+        << ", gantry offset=" << m_iDefaultOffsetView
+        << ", nSamples=" << m_iDefaultNSample
+    << ", RotAngle=" << m_dDefaultRotation
+        << ", FocalLengthRatio=" << m_dDefaultFocalLength
     << ", CenterDetectorLengthRatio=" << m_dDefaultCenterDetectorLength
-    << ", ViewRatio=" << m_dDefaultViewRatio 
-       << ", ScanRatio=" << m_dDefaultScanRatio 
-    << ", Geometry=" << sGeometry.c_str() 
-       << ", FanBeamAngle=" << convertRadiansToDegrees (theScanner.fanBeamAngle());
-  
+    << ", ViewRatio=" << m_dDefaultViewRatio
+        << ", ScanRatio=" << m_dDefaultScanRatio
+    << ", Geometry=" << sGeometry.c_str()
+        << ", FanBeamAngle=" << convertRadiansToDegrees (theScanner.fanBeamAngle());
+
   Timer timer;
   Projections* pProj = NULL;
   if (m_iDefaultTrace > Trace::TRACE_CONSOLE) {
     pProj = new Projections;
     pProj->initFromScanner (theScanner);
-    
+
     ProjectionsDialog dialogProjections (theScanner, *pProj, rPhantom, m_iDefaultTrace, dynamic_cast<wxWindow*>(getFrameForChild()));
     for (int iView = 0; iView < pProj->nView(); iView++) {
       ::wxYield();
@@ -2183,7 +2183,7 @@ PhantomFileView::OnProjections (wxCommandEvent& event)
       pProjector->SetPriority(60);
       pProjector->Run();
       return;
-    } else     
+    } else
 #endif // HAVE_WXTHREADS
     {
       pProj = new Projections;
@@ -2192,19 +2192,19 @@ PhantomFileView::OnProjections (wxCommandEvent& event)
       for (int i = 0; i < pProj->nView(); i++) {
         //theScanner.collectProjections (*pProj, rPhantom, i, 1, true, m_iDefaultTrace);
         theScanner.collectProjections (*pProj, rPhantom, i, 1, theScanner.offsetView(), true, m_iDefaultTrace);
-       if ((i + 1) % ITER_PER_UPDATE == 0)
-         if (! dlgProgress.Update (i+1)) {
-           delete pProj;
-           return;
-         }
+        if ((i + 1) % ITER_PER_UPDATE == 0)
+          if (! dlgProgress.Update (i+1)) {
+            delete pProj;
+            return;
+          }
       }
     }
   }
-  
+
   *theApp->getLog() << os.str().c_str() << "\n";
   pProj->setRemark (os.str());
   pProj->setCalcTime (timer.timerEnd());
-  
+
   ProjectionFileDocument* pProjectionDoc = theApp->newProjectionDoc();
   if (! pProjectionDoc) {
     sys_error (ERR_SEVERE, "Unable to create projection document");
@@ -2223,12 +2223,12 @@ PhantomFileView::OnProjections (wxCommandEvent& event)
 void
 PhantomFileView::OnRasterize (wxCommandEvent& event)
 {
-  DialogGetRasterParameters dialogRaster (getFrameForChild(), m_iDefaultRasterNX, m_iDefaultRasterNY, 
+  DialogGetRasterParameters dialogRaster (getFrameForChild(), m_iDefaultRasterNX, m_iDefaultRasterNY,
     m_iDefaultRasterNSamples, m_dDefaultRasterViewRatio);
   int retVal = dialogRaster.ShowModal();
   if (retVal != wxID_OK)
     return;
-  
+
   m_iDefaultRasterNX = dialogRaster.getXSize();
   m_iDefaultRasterNY  = dialogRaster.getYSize();
   m_iDefaultRasterNSamples = dialogRaster.getNSamples();
@@ -2237,15 +2237,15 @@ PhantomFileView::OnRasterize (wxCommandEvent& event)
     m_iDefaultRasterNSamples = 1;
   if (m_dDefaultRasterViewRatio < 0)
     m_dDefaultRasterViewRatio = 0;
-  if (m_iDefaultRasterNX <= 0 || m_iDefaultRasterNY <= 0) 
+  if (m_iDefaultRasterNX <= 0 || m_iDefaultRasterNY <= 0)
     return;
-  
+
   const Phantom& rPhantom = GetDocument()->getPhantom();
   std::ostringstream os;
-  os << "Rasterize Phantom " << rPhantom.name() << ": XSize=" << m_iDefaultRasterNX << ", YSize=" 
-    << m_iDefaultRasterNY << ", ViewRatio=" << m_dDefaultRasterViewRatio << ", nSamples=" 
+  os << "Rasterize Phantom " << rPhantom.name() << ": XSize=" << m_iDefaultRasterNX << ", YSize="
+    << m_iDefaultRasterNY << ", ViewRatio=" << m_dDefaultRasterViewRatio << ", nSamples="
     << m_iDefaultRasterNSamples;;
-  
+
 #if HAVE_WXTHREADS
   if (theApp->getUseBackgroundTasks()) {
     RasterizerSupervisorThread* pThread = new RasterizerSupervisorThread (this, m_iDefaultRasterNX, m_iDefaultRasterNY,
@@ -2256,28 +2256,28 @@ PhantomFileView::OnRasterize (wxCommandEvent& event)
     }
     pThread->SetPriority (60);
     pThread->Run();
-  } else 
+  } else
 #endif
   {
     ImageFile* pImageFile = new ImageFile (m_iDefaultRasterNX, m_iDefaultRasterNY);
 
-    wxProgressDialog dlgProgress (wxString("Rasterize"), 
-                                 wxString("Rasterization Progress"), 
-                                 pImageFile->nx() + 1,
-                                 getFrameForChild(), 
-                                 wxPD_CAN_ABORT );
+    wxProgressDialog dlgProgress (wxString("Rasterize"),
+                                  wxString("Rasterization Progress"),
+                                  pImageFile->nx() + 1,
+                                  getFrameForChild(),
+                                  wxPD_CAN_ABORT );
     Timer timer;
     for (unsigned int i = 0; i < pImageFile->nx(); i++) {
-      rPhantom.convertToImagefile (*pImageFile, m_dDefaultRasterViewRatio, 
-                                  m_iDefaultRasterNSamples, Trace::TRACE_NONE,
-                                  i, 1, true);
-      if ((i + 1) % ITER_PER_UPDATE == 0) 
-       if (! dlgProgress.Update (i+1)) {
-         delete pImageFile;
-         return;
-       }
+      rPhantom.convertToImagefile (*pImageFile, m_dDefaultRasterViewRatio,
+                                   m_iDefaultRasterNSamples, Trace::TRACE_NONE,
+                                   i, 1, true);
+      if ((i + 1) % ITER_PER_UPDATE == 0)
+        if (! dlgProgress.Update (i+1)) {
+          delete pImageFile;
+          return;
+        }
     }
-    
+
     ImageFileDocument* pRasterDoc = theApp->newImageDoc();
     if (! pRasterDoc) {
       sys_error (ERR_SEVERE, "Unable to create image file");
@@ -2296,14 +2296,14 @@ PhantomFileView::OnRasterize (wxCommandEvent& event)
 }
 
 
-PhantomCanvas* 
+PhantomCanvas*
 PhantomFileView::CreateCanvas (wxFrame *parent)
 {
-  PhantomCanvas* pCanvas = new PhantomCanvas (this, parent, wxPoint(-1,-1), 
-                                             wxSize(-1,-1), 0);
+  PhantomCanvas* pCanvas = new PhantomCanvas (this, parent, wxPoint(-1,-1),
+                                              wxSize(-1,-1), 0);
   pCanvas->SetBackgroundColour(*wxWHITE);
   pCanvas->Clear();
-  
+
   return pCanvas;
 }
 
@@ -2320,18 +2320,18 @@ PhantomFileView::CreateChildFrame(wxDocument *doc, wxView *view)
   wxDocChildFrame *subframe = new wxDocChildFrame (doc, view, theApp->getMainFrame(), -1, "Phantom Frame", wxPoint(-1,-1), wxSize(-1,-1), wxDEFAULT_FRAME_STYLE);
 #endif
   theApp->setIconForFrame (subframe);
-  
+
   m_pFileMenu = new wxMenu;
-  
+
   m_pFileMenu->Append(MAINMENU_FILE_CREATE_PHANTOM, "Cr&eate Phantom...\tCtrl-P");
   m_pFileMenu->Append(MAINMENU_FILE_CREATE_FILTER, "Create &Filter...\tCtrl-F");
   m_pFileMenu->Append(wxID_OPEN, "&Open...\tCtrl-O");
   m_pFileMenu->Append(wxID_SAVEAS, "Save &As...");
   m_pFileMenu->Append(wxID_CLOSE, "&Close");
-  
+
   m_pFileMenu->AppendSeparator();
   m_pFileMenu->Append(PHMMENU_FILE_PROPERTIES, "P&roperties\tCtrl-I");
-  
+
   m_pFileMenu->AppendSeparator();
   m_pFileMenu->Append(wxID_PRINT, "&Print...");
   m_pFileMenu->Append(wxID_PRINT_SETUP, "Print &Setup...");
@@ -2343,38 +2343,38 @@ PhantomFileView::CreateChildFrame(wxDocument *doc, wxView *view)
   m_pFileMenu->Append(MAINMENU_FILE_EXIT, "E&xit");
   GetDocumentManager()->FileHistoryAddFilesToMenu(m_pFileMenu);
   GetDocumentManager()->FileHistoryUseMenu(m_pFileMenu);
-  
+
   wxMenu *process_menu = new wxMenu;
   process_menu->Append(PHMMENU_PROCESS_RASTERIZE, "&Rasterize...\tCtrl-R");
   process_menu->Append(PHMMENU_PROCESS_PROJECTIONS, "&Projections...\tCtrl-J");
-  
+
   wxMenu *help_menu = new wxMenu;
   help_menu->Append(MAINMENU_HELP_CONTENTS, "&Contents\tF1");
   help_menu->Append (MAINMENU_HELP_TIPS, "&Tips");
   help_menu->Append (IDH_QUICKSTART, "&Quick Start");
   help_menu->Append(MAINMENU_HELP_ABOUT, "&About");
-  
+
   wxMenuBar *menu_bar = new wxMenuBar;
-  
+
   menu_bar->Append(m_pFileMenu, "&File");
   menu_bar->Append(process_menu, "&Process");
   menu_bar->Append(help_menu, "&Help");
-  
+
   subframe->SetMenuBar(menu_bar);
   subframe->Centre(wxBOTH);
-  
+
   wxAcceleratorEntry accelEntries[3];
   accelEntries[0].Set (wxACCEL_CTRL, static_cast<int>('J'), PHMMENU_PROCESS_PROJECTIONS);
   accelEntries[1].Set (wxACCEL_CTRL, static_cast<int>('R'), PHMMENU_PROCESS_RASTERIZE);
   accelEntries[2].Set (wxACCEL_CTRL, static_cast<int>('I'), PHMMENU_FILE_PROPERTIES);
   wxAcceleratorTable accelTable (3, accelEntries);
   subframe->SetAcceleratorTable (accelTable);
-  
+
   return subframe;
 }
 
 
-bool 
+bool
 PhantomFileView::OnCreate(wxDocument *doc, long WXUNUSED(flags) )
 {
   m_pFrame = CreateChildFrame(doc, this);
@@ -2386,23 +2386,23 @@ PhantomFileView::OnCreate(wxDocument *doc, long WXUNUSED(flags) )
 
   m_pFrame->Show(true);
   Activate(true);
-  
+
   return true;
 }
 
-void 
+void
 PhantomFileView::OnUpdate (wxView *WXUNUSED(sender), wxObject *WXUNUSED(hint) )
 {
   if (m_pCanvas)
     m_pCanvas->Refresh();
 }
 
-bool 
+bool
 PhantomFileView::OnClose (bool deleteWindow)
 {
   if (! GetDocument() || ! GetDocument()->Close())
     return false;
-  
+
   Activate(false);
   if (m_pCanvas) {
     m_pCanvas->setView(NULL);
@@ -2411,16 +2411,16 @@ PhantomFileView::OnClose (bool deleteWindow)
   wxString s(wxTheApp->GetAppName());
   if (m_pFrame)
     m_pFrame->SetTitle(s);
-  
+
   SetFrame(NULL);
-  
+
   if (deleteWindow) {
     delete m_pFrame;
     m_pFrame = NULL;
     if (GetDocument() && GetDocument()->getBadFileOpen())
       ::wxYield();  // wxWindows bug workaround
   }
-  
+
   return true;
 }
 
@@ -2449,7 +2449,7 @@ ProjectionFileCanvas::~ProjectionFileCanvas ()
   m_pView = NULL;
 }
 
-void 
+void
 ProjectionFileCanvas::OnDraw(wxDC& dc)
 {
   if (m_pView)
@@ -2467,7 +2467,7 @@ ProjectionFileCanvas::GetBestSize () const
     Projections& rProj = m_pView->GetDocument()->getProjections();
     bestSize.Set (rProj.nDet(), rProj.nView());
   }
-  
+
   if (bestSize.x > 800)
     bestSize.x = 800;
   if (bestSize.y > 800)
@@ -2501,7 +2501,7 @@ EVT_MENU(PJMENU_PLOT_HISTOGRAM, ProjectionFileView::OnPlotHistogram)
 END_EVENT_TABLE()
 
 
-ProjectionFileView::ProjectionFileView() 
+ProjectionFileView::ProjectionFileView()
   : wxView(), m_pBitmap(0), m_pFrame(0), m_pCanvas(0), m_pFileMenu(0)
 {
 #ifdef DEBUG
@@ -2511,7 +2511,7 @@ ProjectionFileView::ProjectionFileView()
   m_iDefaultNX = 256;
   m_iDefaultNY = 256;
 #endif
-  
+
   m_iDefaultFilter = SignalFilter::FILTER_ABS_BANDLIMIT;
   m_dDefaultFilterParam = 1.;
 #if HAVE_FFTW
@@ -2526,7 +2526,7 @@ ProjectionFileView::ProjectionFileView()
   m_iDefaultInterpolation = Backprojector::INTERP_LINEAR;
   m_iDefaultInterpParam = 1;
   m_iDefaultTrace = Trace::TRACE_NONE;
-  
+
   m_iDefaultPolarNX = 256;
   m_iDefaultPolarNY = 256;
   m_iDefaultPolarInterpolation = Projections::POLAR_INTERP_BILINEAR;
@@ -2556,18 +2556,18 @@ void
 ProjectionFileView::OnConvertRectangular (wxCommandEvent& event)
 {
   Projections& rProj = GetDocument()->getProjections();
-  
+
   int nDet = rProj.nDet();
   int nView = rProj.nView();
   ImageFile* pIF = new ImageFile (nDet, nView);
   ImageFileArray v = pIF->getArray();
   for (int iv = 0; iv < nView; iv++) {
     DetectorValue* detval = rProj.getDetectorArray(iv).detValues();
-    
+
     for (int id = 0; id < nDet; id++)
       v[id][iv] = detval[id];
   }
-  
+
   ImageFileDocument* pRectDoc = theApp->newImageDoc ();
   if (! pRectDoc) {
     sys_error (ERR_SEVERE, "Unable to create image file");
@@ -2599,13 +2599,13 @@ ProjectionFileView::OnConvertPolar (wxCommandEvent& event)
     m_iDefaultPolarNY = dialogPolar.getYSize();
     ImageFile* pIF = new ImageFile (m_iDefaultPolarNX, m_iDefaultPolarNY);
     m_iDefaultPolarInterpolation = Projections::convertInterpNameToID (strInterpolation.c_str());
-    
+
     if (! rProj.convertPolar (*pIF, m_iDefaultPolarInterpolation)) {
       delete pIF;
       *theApp->getLog() << "Error converting to Polar\n";
       return;
     }
-    
+
     ImageFileDocument* pPolarDoc = theApp->newImageDoc();
     if (! pPolarDoc) {
       sys_error (ERR_SEVERE, "Unable to create image file");
@@ -2614,8 +2614,8 @@ ProjectionFileView::OnConvertPolar (wxCommandEvent& event)
     pPolarDoc->setImageFile (pIF);
     pIF->labelAdd (rProj.getLabel().getLabelString().c_str(), rProj.calcTime());
     std::ostringstream os;
-    os << "Convert projection file " << GetFrame()->GetTitle().c_str() << " to polar image: xSize=" 
-      << m_iDefaultPolarNX << ", ySize=" << m_iDefaultPolarNY << ", interpolation=" 
+    os << "Convert projection file " << GetFrame()->GetTitle().c_str() << " to polar image: xSize="
+      << m_iDefaultPolarNX << ", ySize=" << m_iDefaultPolarNY << ", interpolation="
       << strInterpolation.c_str();
     *theApp->getLog() << os.str().c_str() << "\n";
     pIF->labelAdd (os.str().c_str());
@@ -2640,7 +2640,7 @@ ProjectionFileView::OnConvertFFTPolar (wxCommandEvent& event)
     m_iDefaultPolarNY = dialogPolar.getYSize();
     m_iDefaultPolarZeropad = dialogPolar.getZeropad();
     ImageFile* pIF = new ImageFile (m_iDefaultPolarNX, m_iDefaultPolarNY);
-    
+
     m_iDefaultPolarInterpolation = Projections::convertInterpNameToID (strInterpolation.c_str());
     if (! rProj.convertFFTPolar (*pIF, m_iDefaultPolarInterpolation, m_iDefaultPolarZeropad)) {
       delete pIF;
@@ -2655,8 +2655,8 @@ ProjectionFileView::OnConvertFFTPolar (wxCommandEvent& event)
     pPolarDoc->setImageFile (pIF);
     pIF->labelAdd (rProj.getLabel().getLabelString().c_str(), rProj.calcTime());
     std::ostringstream os;
-    os << "Convert projection file " << GetFrame()->GetTitle().c_str() << " to FFT polar image: xSize=" 
-      << m_iDefaultPolarNX << ", ySize=" << m_iDefaultPolarNY << ", interpolation=" 
+    os << "Convert projection file " << GetFrame()->GetTitle().c_str() << " to FFT polar image: xSize="
+      << m_iDefaultPolarNX << ", ySize=" << m_iDefaultPolarNY << ", interpolation="
       << strInterpolation.c_str() << ", zeropad=" << m_iDefaultPolarZeropad;
     *theApp->getLog() << os.str().c_str() << "\n";
     pIF->labelAdd (os.str().c_str());
@@ -2674,9 +2674,9 @@ ProjectionFileView::OnPlotTThetaSampling (wxCommandEvent& event)
   DialogGetThetaRange dlgTheta (this->getFrame(), ParallelRaysums::THETA_RANGE_UNCONSTRAINED);
   if (dlgTheta.ShowModal() != wxID_OK)
     return;
-  
+
   int iThetaRange = dlgTheta.getThetaRange();
-  
+
   Projections& rProj = GetDocument()->getProjections();
   ParallelRaysums parallel (&rProj, iThetaRange);
   PlotFileDocument* pPlotDoc = theApp->newPlotDoc();
@@ -2684,7 +2684,7 @@ ProjectionFileView::OnPlotTThetaSampling (wxCommandEvent& event)
   ParallelRaysums::CoordinateContainer& coordContainer = parallel.getCoordinates();
   double* pdT = new double [parallel.getNumCoordinates()];
   double* pdTheta = new double [parallel.getNumCoordinates()];
-  
+
   for (int i = 0; i < parallel.getNumCoordinates(); i++) {
     pdT[i] = coordContainer[i]->m_dT;
     pdTheta[i] = coordContainer[i]->m_dTheta;
@@ -2713,11 +2713,11 @@ ProjectionFileView::OnPlotTThetaSampling (wxCommandEvent& event)
 
 void
 ProjectionFileView::OnPlotHistogram (wxCommandEvent& event)
-{ 
+{
   Projections& rProj = GetDocument()->getProjections();
   int nDet = rProj.nDet();
   int nView = rProj.nView();
-  
+
   if (nDet < 1 || nView < 1)
     return;
 
@@ -2726,7 +2726,7 @@ ProjectionFileView::OnPlotHistogram (wxCommandEvent& event)
     sys_error (ERR_SEVERE, "Internal error: unable to create Plot file");
     return;
   }
-    
+
   DetectorValue* pdDetval = rProj.getDetectorArray(0).detValues();
   double dMin = pdDetval[0], dMax = pdDetval[0];
 
@@ -2744,7 +2744,7 @@ ProjectionFileView::OnPlotHistogram (wxCommandEvent& event)
   double* pX = new double [NUMBER_HISTOGRAM_BINS];
   double* pY = new double [NUMBER_HISTOGRAM_BINS];
   double dBinWidth = (dMax - dMin) / NUMBER_HISTOGRAM_BINS;
-    
+
   for (int i = 0; i < NUMBER_HISTOGRAM_BINS; i++) {
     pX[i] = dMin + (i + 0.5) * dBinWidth;
     pY[i] = 0;
@@ -2756,7 +2756,7 @@ ProjectionFileView::OnPlotHistogram (wxCommandEvent& event)
       if (iBin >= 0 && iBin < NUMBER_HISTOGRAM_BINS)
         pY[iBin] += 1;
     }
-  }      
+  }
   PlotFile& rPlotFile = pPlotDoc->getPlotFile();
   std::ostringstream os;
   os << "Histogram";
@@ -2795,8 +2795,8 @@ ProjectionFileView::OnConvertParallel (wxCommandEvent& event)
   wxProgressDialog dlgProgress (wxString("Convert to Parallel"), wxString("Conversion Progress"), 1, getFrameForChild(), wxPD_APP_MODAL);
   Projections* pProjNew = rProj.interpolateToParallel();
   ProjectionFileDocument* pProjDocNew = theApp->newProjectionDoc();
-  pProjDocNew->setProjections (pProjNew);  
-  
+  pProjDocNew->setProjections (pProjNew);
+
   if (ProjectionFileView* projView = pProjDocNew->getView()) {
     projView->OnUpdate (projView, NULL);
     if (projView->getCanvas())
@@ -2828,7 +2828,7 @@ ProjectionFileView::OnReconstructFourier (wxCommandEvent& event)
     m_iDefaultPolarNY = dialogPolar.getYSize();
     m_iDefaultPolarZeropad = dialogPolar.getZeropad();
     ImageFile* pIF = new ImageFile (m_iDefaultPolarNX, m_iDefaultPolarNY);
-    
+
     m_iDefaultPolarInterpolation = Projections::convertInterpNameToID (strInterpolation.c_str());
     if (! rProj.convertFFTPolar (*pIF, m_iDefaultPolarInterpolation, m_iDefaultPolarZeropad)) {
       delete pIF;
@@ -2849,8 +2849,8 @@ ProjectionFileView::OnReconstructFourier (wxCommandEvent& event)
     pPolarDoc->setImageFile (pIF);
     pIF->labelAdd (rProj.getLabel().getLabelString().c_str(), rProj.calcTime());
     std::ostringstream os;
-    os << "Reconstruct Fourier " << GetFrame()->GetTitle().c_str() << ": xSize=" 
-      << m_iDefaultPolarNX << ", ySize=" << m_iDefaultPolarNY << ", interpolation=" 
+    os << "Reconstruct Fourier " << GetFrame()->GetTitle().c_str() << ": xSize="
+      << m_iDefaultPolarNX << ", ySize=" << m_iDefaultPolarNY << ", interpolation="
       << strInterpolation.c_str() << ", zeropad=" << m_iDefaultPolarZeropad;
     *theApp->getLog() << os.str().c_str() << "\n";
     pIF->labelAdd (os.str().c_str());
@@ -2884,16 +2884,16 @@ ProjectionFileView::doReconstructFBP (const Projections& rProj, bool bRebinToPar
   defaultROI.m_dXMax = defaultROI.m_dXMin + rProj.phmLen();
   defaultROI.m_dYMin = -rProj.phmLen() / 2;
   defaultROI.m_dYMax = defaultROI.m_dYMin + rProj.phmLen();
-  
-  DialogGetReconstructionParameters dialogReconstruction (getFrameForChild(), m_iDefaultNX, m_iDefaultNY, 
-    m_iDefaultFilter, m_dDefaultFilterParam, m_iDefaultFilterMethod, m_iDefaultFilterGeneration, 
-    m_iDefaultZeropad, m_iDefaultInterpolation, m_iDefaultInterpParam, m_iDefaultBackprojector, 
+
+  DialogGetReconstructionParameters dialogReconstruction (getFrameForChild(), m_iDefaultNX, m_iDefaultNY,
+    m_iDefaultFilter, m_dDefaultFilterParam, m_iDefaultFilterMethod, m_iDefaultFilterGeneration,
+    m_iDefaultZeropad, m_iDefaultInterpolation, m_iDefaultInterpParam, m_iDefaultBackprojector,
     m_iDefaultTrace,  &defaultROI);
-  
+
   int retVal = dialogReconstruction.ShowModal();
   if (retVal != wxID_OK)
     return;
-  
+
   m_iDefaultNX = dialogReconstruction.getXSize();
   m_iDefaultNY = dialogReconstruction.getYSize();
   wxString optFilterName = dialogReconstruction.getFilterName();
@@ -2911,24 +2911,24 @@ ProjectionFileView::doReconstructFBP (const Projections& rProj, bool bRebinToPar
   m_iDefaultBackprojector = Backprojector::convertBackprojectNameToID (optBackprojectName.c_str());
   m_iDefaultTrace = dialogReconstruction.getTrace();
   dialogReconstruction.getROI (&defaultROI);
-  
-  if (m_iDefaultNX <= 0 && m_iDefaultNY <= 0) 
+
+  if (m_iDefaultNX <= 0 && m_iDefaultNY <= 0)
     return;
-  
+
   std::ostringstream os;
   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();
   if (bRebinToParallel)
     os << "; Interpolate to Parallel";
-  
+
   Timer timerRecon;
   ImageFile* pImageFile = NULL;
   if (m_iDefaultTrace > Trace::TRACE_CONSOLE) {
     pImageFile = new ImageFile (m_iDefaultNX, m_iDefaultNY);
-    Reconstructor* pReconstructor = new Reconstructor (rProj, *pImageFile, optFilterName.c_str(), 
-      m_dDefaultFilterParam, optFilterMethodName.c_str(), m_iDefaultZeropad, optFilterGenerationName.c_str(), 
-      optInterpName.c_str(), m_iDefaultInterpParam, optBackprojectName.c_str(), m_iDefaultTrace, 
+    Reconstructor* pReconstructor = new Reconstructor (rProj, *pImageFile, optFilterName.c_str(),
+      m_dDefaultFilterParam, optFilterMethodName.c_str(), m_iDefaultZeropad, optFilterGenerationName.c_str(),
+      optInterpName.c_str(), m_iDefaultInterpParam, optBackprojectName.c_str(), m_iDefaultTrace,
       &defaultROI, bRebinToParallel);
-    
+
     ReconstructDialog* pDlgReconstruct = new ReconstructDialog (*pReconstructor, rProj, *pImageFile, m_iDefaultTrace, getFrameForChild());
     for (int iView = 0; iView < rProj.nView(); iView++) {
       ::wxYield();
@@ -2950,9 +2950,9 @@ ProjectionFileView::doReconstructFBP (const Projections& rProj, bool bRebinToPar
   } else {
 #if HAVE_WXTHREADS
     if (theApp->getUseBackgroundTasks()) {
-      ReconstructorSupervisorThread* pReconstructor = new ReconstructorSupervisorThread (this, m_iDefaultNX, 
-        m_iDefaultNY, optFilterName.c_str(), m_dDefaultFilterParam, optFilterMethodName.c_str(), 
-        m_iDefaultZeropad, optFilterGenerationName.c_str(), optInterpName.c_str(), m_iDefaultInterpParam, 
+      ReconstructorSupervisorThread* pReconstructor = new ReconstructorSupervisorThread (this, m_iDefaultNX,
+        m_iDefaultNY, optFilterName.c_str(), m_dDefaultFilterParam, optFilterMethodName.c_str(),
+        m_iDefaultZeropad, optFilterGenerationName.c_str(), optInterpName.c_str(), m_iDefaultInterpParam,
         optBackprojectName.c_str(), os.str().c_str(), &defaultROI, bRebinToParallel);
       if (pReconstructor->Create() != wxTHREAD_NO_ERROR) {
         sys_error (ERR_SEVERE, "Error creating reconstructor thread");
@@ -2962,23 +2962,23 @@ ProjectionFileView::doReconstructFBP (const Projections& rProj, bool bRebinToPar
       pReconstructor->SetPriority (60);
       pReconstructor->Run();
       return;
-    } else 
+    } else
 #endif
     {
       pImageFile = new ImageFile (m_iDefaultNX, m_iDefaultNY);
       wxProgressDialog dlgProgress (wxString("Reconstruction"), wxString("Reconstruction Progress"), rProj.nView() + 1, getFrameForChild(), wxPD_CAN_ABORT );
-      Reconstructor* pReconstructor = new Reconstructor (rProj, *pImageFile, optFilterName.c_str(), 
-        m_dDefaultFilterParam, optFilterMethodName.c_str(), m_iDefaultZeropad, optFilterGenerationName.c_str(), 
-        optInterpName.c_str(), m_iDefaultInterpParam, optBackprojectName.c_str(), m_iDefaultTrace, 
+      Reconstructor* pReconstructor = new Reconstructor (rProj, *pImageFile, optFilterName.c_str(),
+        m_dDefaultFilterParam, optFilterMethodName.c_str(), m_iDefaultZeropad, optFilterGenerationName.c_str(),
+        optInterpName.c_str(), m_iDefaultInterpParam, optBackprojectName.c_str(), m_iDefaultTrace,
         &defaultROI, bRebinToParallel);
-      
+
       for (int iView = 0; iView < rProj.nView(); iView++) {
         pReconstructor->reconstructView (iView, 1);
-       if ((iView + 1) % ITER_PER_UPDATE == 0) 
-         if (! dlgProgress.Update (iView + 1)) {
-           delete pReconstructor;
-           return; // don't make new window, thread will do this
-         }
+        if ((iView + 1) % ITER_PER_UPDATE == 0)
+          if (! dlgProgress.Update (iView + 1)) {
+            delete pReconstructor;
+            return; // don't make new window, thread will do this
+          }
       }
       pReconstructor->postProcessing();
       delete pReconstructor;
@@ -2991,7 +2991,7 @@ ProjectionFileView::doReconstructFBP (const Projections& rProj, bool bRebinToPar
   }
   *theApp->getLog() << os.str().c_str() << "\n";
   pImageFile->labelAdd (rProj.getLabel());
-  pImageFile->labelAdd (os.str().c_str(), timerRecon.timerEnd());    
+  pImageFile->labelAdd (os.str().c_str(), timerRecon.timerEnd());
 
   pReconDoc->setImageFile (pImageFile);
   if (theApp->getAskDeleteNewDocs())
@@ -3008,19 +3008,19 @@ ProjectionFileView::OnArtifactReduction (wxCommandEvent& event)
 }
 
 
-ProjectionFileCanvas* 
+ProjectionFileCanvas*
 ProjectionFileView::CreateCanvas (wxFrame *parent)
 {
   ProjectionFileCanvas* pCanvas;
   int width, height;
   parent->GetClientSize(&width, &height);
-  
+
   pCanvas = new ProjectionFileCanvas (this, parent, wxPoint(-1,-1), wxSize(width, height), 0);
-  
+
   pCanvas->SetScrollbars(20, 20, 50, 50);
   pCanvas->SetBackgroundColour(*wxWHITE);
   pCanvas->Clear();
-  
+
   return pCanvas;
 }
 
@@ -3037,19 +3037,19 @@ ProjectionFileView::CreateChildFrame(wxDocument *doc, wxView *view)
   wxDocChildFrame *subframe = new wxDocChildFrame (doc, view, theApp->getMainFrame(), -1, "Projection Frame", wxPoint(-1,-1), wxSize(-1,-1), wxDEFAULT_FRAME_STYLE);
 #endif
   theApp->setIconForFrame (subframe);
-  
+
   m_pFileMenu = new wxMenu;
-  
+
   m_pFileMenu->Append(MAINMENU_FILE_CREATE_PHANTOM, "Cr&eate Phantom...\tCtrl-P");
   m_pFileMenu->Append(MAINMENU_FILE_CREATE_FILTER, "Create &Filter...\tCtrl-F");
   m_pFileMenu->Append(wxID_OPEN, "&Open...\tCtrl-O");
   m_pFileMenu->Append(wxID_SAVE, "&Save\tCtrl-S");
   m_pFileMenu->Append(wxID_SAVEAS, "Save &As...");
   m_pFileMenu->Append(wxID_CLOSE, "&Close\tCtrl-W");
-  
+
   m_pFileMenu->AppendSeparator();
   m_pFileMenu->Append(PJMENU_FILE_PROPERTIES, "P&roperties\tCtrl-I");
-  
+
   m_pFileMenu->AppendSeparator();
   m_pFileMenu->Append(wxID_PRINT, "&Print...");
   m_pFileMenu->Append(wxID_PRINT_SETUP, "Print &Setup...");
@@ -3061,17 +3061,17 @@ ProjectionFileView::CreateChildFrame(wxDocument *doc, wxView *view)
   m_pFileMenu->Append(MAINMENU_FILE_EXIT, "E&xit");
   GetDocumentManager()->FileHistoryAddFilesToMenu(m_pFileMenu);
   GetDocumentManager()->FileHistoryUseMenu(m_pFileMenu);
-  
+
   m_pConvertMenu = new wxMenu;
   m_pConvertMenu->Append (PJMENU_CONVERT_RECTANGULAR, "&Rectangular Image");
   m_pConvertMenu->Append (PJMENU_CONVERT_POLAR, "&Polar Image...\tCtrl-L");
   m_pConvertMenu->Append (PJMENU_CONVERT_FFT_POLAR, "FF&T->Polar Image...\tCtrl-T");
   m_pConvertMenu->AppendSeparator();
   m_pConvertMenu->Append (PJMENU_CONVERT_PARALLEL, "&Interpolate to Parallel");
-  
+
   //  wxMenu* filter_menu = new wxMenu;
   //  filter_menu->Append (PJMENU_ARTIFACT_REDUCTION, "&Artifact Reduction");
-  
+
   wxMenu* analyze_menu = new wxMenu;
   analyze_menu->Append (PJMENU_PLOT_HISTOGRAM, "&Plot Histogram");
   analyze_menu->Append (PJMENU_PLOT_TTHETA_SAMPLING, "Plot T-T&heta Sampling...\tCtrl-H");
@@ -3080,25 +3080,25 @@ ProjectionFileView::CreateChildFrame(wxDocument *doc, wxView *view)
   m_pReconstructMenu->Append (PJMENU_RECONSTRUCT_FBP, "&Filtered Backprojection...\tCtrl-R", "Reconstruct image using filtered backprojection");
   m_pReconstructMenu->Append (PJMENU_RECONSTRUCT_FBP_REBIN, "Filtered &Backprojection (Rebin to Parallel)...\tCtrl-B", "Reconstruct image using filtered backprojection");
   m_pReconstructMenu->Append (PJMENU_RECONSTRUCT_FOURIER, "&Inverse Fourier...\tCtrl-E", "Direct inverse Fourier");
-  
+
   wxMenu *help_menu = new wxMenu;
   help_menu->Append(MAINMENU_HELP_CONTENTS, "&Contents\tF1");
   help_menu->Append (MAINMENU_HELP_TIPS, "&Tips");
   help_menu->Append (IDH_QUICKSTART, "&Quick Start");
   help_menu->Append(MAINMENU_HELP_ABOUT, "&About");
-  
+
   wxMenuBar *menu_bar = new wxMenuBar;
-  
+
   menu_bar->Append (m_pFileMenu, "&File");
   menu_bar->Append (m_pConvertMenu, "&Convert");
   //  menu_bar->Append (filter_menu, "Fi&lter");
   menu_bar->Append (analyze_menu, "&Analyze");
   menu_bar->Append (m_pReconstructMenu, "&Reconstruct");
   menu_bar->Append (help_menu, "&Help");
-  
-  subframe->SetMenuBar(menu_bar);  
+
+  subframe->SetMenuBar(menu_bar);
   subframe->Centre(wxBOTH);
-  
+
   wxAcceleratorEntry accelEntries[7];
   accelEntries[0].Set (wxACCEL_CTRL, static_cast<int>('L'), PJMENU_CONVERT_POLAR);
   accelEntries[1].Set (wxACCEL_CTRL, static_cast<int>('T'), PJMENU_CONVERT_FFT_POLAR);
@@ -3109,12 +3109,12 @@ ProjectionFileView::CreateChildFrame(wxDocument *doc, wxView *view)
   accelEntries[6].Set (wxACCEL_CTRL, static_cast<int>('H'), PJMENU_PLOT_TTHETA_SAMPLING);
   wxAcceleratorTable accelTable (7, accelEntries);
   subframe->SetAcceleratorTable (accelTable);
-  
+
   return subframe;
 }
 
 
-bool 
+bool
 ProjectionFileView::OnCreate(wxDocument *doc, long WXUNUSED(flags) )
 {
   m_pFrame = CreateChildFrame(doc, this);
@@ -3126,11 +3126,11 @@ ProjectionFileView::OnCreate(wxDocument *doc, long WXUNUSED(flags) )
 
   m_pFrame->Show(true);
   Activate(true);
-  
+
   return true;
 }
 
-void 
+void
 ProjectionFileView::OnDraw (wxDC* dc)
 {
   if (m_pBitmap && m_pBitmap->Ok())
@@ -3138,7 +3138,7 @@ ProjectionFileView::OnDraw (wxDC* dc)
 }
 
 
-void 
+void
 ProjectionFileView::setInitialClientSize ()
 {
   if (m_pFrame && m_pCanvas) {
@@ -3148,15 +3148,15 @@ ProjectionFileView::setInitialClientSize ()
     m_pFrame->Show (true);
     m_pFrame->SetFocus();
   }
-}  
+}
 
-void 
+void
 ProjectionFileView::OnUpdate (wxView *WXUNUSED(sender), wxObject *WXUNUSED(hint) )
 {
   const Projections& rProj = GetDocument()->getProjections();
   const int nDet = rProj.nDet();
   const int nView = rProj.nView();
-  if (rProj.geometry() == Scanner::GEOMETRY_PARALLEL) { 
+  if (rProj.geometry() == Scanner::GEOMETRY_PARALLEL) {
     m_pReconstructMenu->Enable (PJMENU_RECONSTRUCT_FBP_REBIN, false);
     m_pConvertMenu->Enable (PJMENU_CONVERT_PARALLEL, false);
   } else {
@@ -3179,7 +3179,7 @@ ProjectionFileView::OnUpdate (wxView *WXUNUSED(sender), wxObject *WXUNUSED(hint)
           max = detval[ix];
       }
     }
-    
+
     unsigned char* imageData = new unsigned char [nDet * nView * 3];
     if (! imageData) {
       sys_error (ERR_SEVERE, "Unable to allocate memory for image display");
@@ -3204,7 +3204,7 @@ ProjectionFileView::OnUpdate (wxView *WXUNUSED(sender), wxObject *WXUNUSED(hint)
     m_pBitmap = new wxBitmap (image);
     delete imageData;
   }
-  
+
     m_pCanvas->SetScrollbars(20, 20, nDet/20, nView/20);
     m_pCanvas->SetBackgroundColour(*wxWHITE);
 
@@ -3212,31 +3212,31 @@ ProjectionFileView::OnUpdate (wxView *WXUNUSED(sender), wxObject *WXUNUSED(hint)
       m_pCanvas->Refresh();
 }
 
-bool 
+bool
 ProjectionFileView::OnClose (bool deleteWindow)
 {
   //GetDocumentManager()->ActivateView (this, false, true);
   if (! GetDocument() || ! GetDocument()->Close())
     return false;
-  
+
   Activate(false);
   if (m_pCanvas) {
-       m_pCanvas->setView(NULL);
+        m_pCanvas->setView(NULL);
     m_pCanvas = NULL;
   }
   wxString s(wxTheApp->GetAppName());
   if (m_pFrame)
     m_pFrame->SetTitle(s);
-  
+
   SetFrame(NULL);
-  
+
   if (deleteWindow) {
     delete m_pFrame;
     m_pFrame = NULL;
     if (GetDocument() && GetDocument()->getBadFileOpen())
       ::wxYield();  // wxWindows bug workaround
   }
-  
+
   return true;
 }
 
@@ -3259,7 +3259,7 @@ PlotFileCanvas::GetBestSize() const
 }
 
 
-void 
+void
 PlotFileCanvas::OnDraw(wxDC& dc)
 {
   if (m_pView)
@@ -3278,8 +3278,8 @@ EVT_MENU(PLOTMENU_VIEW_SCALE_AUTO, PlotFileView::OnScaleAuto)
 EVT_MENU(PLOTMENU_VIEW_SCALE_FULL, PlotFileView::OnScaleFull)
 END_EVENT_TABLE()
 
-PlotFileView::PlotFileView() 
-: wxView(), m_pFrame(0), m_pCanvas(0), m_pEZPlot(0), m_pFileMenu(0), 
+PlotFileView::PlotFileView()
+: wxView(), m_pFrame(0), m_pCanvas(0), m_pEZPlot(0), m_pFileMenu(0),
   m_bMinSpecified(false), m_bMaxSpecified(false)
 {
 }
@@ -3288,8 +3288,8 @@ PlotFileView::~PlotFileView()
 {
   if (m_pEZPlot)
     delete m_pEZPlot;
-  
-  GetDocumentManager()->FileHistoryRemoveMenu (m_pFileMenu);  
+
+  GetDocumentManager()->FileHistoryRemoveMenu (m_pFileMenu);
   GetDocumentManager()->ActivateView(this, FALSE, TRUE);
 }
 
@@ -3307,7 +3307,7 @@ PlotFileView::OnProperties (wxCommandEvent& event)
 }
 
 
-void 
+void
 PlotFileView::OnScaleAuto (wxCommandEvent& event)
 {
   const PlotFile& rPlotFile = GetDocument()->getPlotFile();
@@ -3329,25 +3329,25 @@ PlotFileView::OnScaleAuto (wxCommandEvent& event)
   GetDocument()->Activate();
 }
 
-void 
+void
 PlotFileView::OnScaleMinMax (wxCommandEvent& event)
 {
   const PlotFile& rPlotFile = GetDocument()->getPlotFile();
   double min;
   double max;
-  
+
   if (! m_bMinSpecified || ! m_bMaxSpecified) {
     if (! rPlotFile.getMinMax (1, min, max)) {
       *theApp->getLog() << "Error: unable to find Min/Max\n";
       return;
     }
   }
-  
+
   if (m_bMinSpecified)
     min = m_dMinPixel;
   if (m_bMaxSpecified)
     max = m_dMaxPixel;
-  
+
   DialogGetMinMax dialogMinMax (getFrameForChild(), "Set Y-axis Minimum & Maximum", min, max);
   int retVal = dialogMinMax.ShowModal();
   if (retVal == wxID_OK) {
@@ -3360,7 +3360,7 @@ PlotFileView::OnScaleMinMax (wxCommandEvent& event)
   GetDocument()->Activate();
 }
 
-void 
+void
 PlotFileView::OnScaleFull (wxCommandEvent& event)
 {
   if (m_bMinSpecified || m_bMaxSpecified) {
@@ -3372,15 +3372,15 @@ PlotFileView::OnScaleFull (wxCommandEvent& event)
 }
 
 
-PlotFileCanvas* 
+PlotFileCanvas*
 PlotFileView::CreateCanvas (wxFrame* parent)
 {
   PlotFileCanvas* pCanvas;
-  
-  pCanvas = new PlotFileCanvas (this, parent, wxPoint(-1,-1), wxSize(-1,-1), 0);  
+
+  pCanvas = new PlotFileCanvas (this, parent, wxPoint(-1,-1), wxSize(-1,-1), 0);
   pCanvas->SetBackgroundColour(*wxWHITE);
   pCanvas->Clear();
-  
+
   return pCanvas;
 }
 
@@ -3397,19 +3397,19 @@ PlotFileView::CreateChildFrame(wxDocument *doc, wxView *view)
   wxDocChildFrame *subframe = new wxDocChildFrame(doc, view, theApp->getMainFrame(), -1, "Plot Frame", wxPoint(-1,-1), wxSize(-1,-1), wxDEFAULT_FRAME_STYLE);
 #endif
   theApp->setIconForFrame (subframe);
-  
+
   m_pFileMenu = new wxMenu;
-  
+
   m_pFileMenu->Append(MAINMENU_FILE_CREATE_PHANTOM, "Cr&eate Phantom...\tCtrl-P");
   m_pFileMenu->Append(MAINMENU_FILE_CREATE_FILTER, "Create &Filter...\tCtrl-F");
   m_pFileMenu->Append(wxID_OPEN, "&Open...\tCtrl-O");
   m_pFileMenu->Append(wxID_SAVE, "&Save\tCtrl-S");
   m_pFileMenu->Append(wxID_SAVEAS, "Save &As...");
   m_pFileMenu->Append(wxID_CLOSE, "&Close\tCtrl-W");
-  
+
   m_pFileMenu->AppendSeparator();
   m_pFileMenu->Append(PLOTMENU_FILE_PROPERTIES, "P&roperties\tCtrl-I");
-  
+
   m_pFileMenu->AppendSeparator();
   m_pFileMenu->Append(wxID_PRINT, "&Print...");
   m_pFileMenu->Append(wxID_PRINT_SETUP, "Print &Setup...");
@@ -3421,27 +3421,27 @@ PlotFileView::CreateChildFrame(wxDocument *doc, wxView *view)
   m_pFileMenu->Append(MAINMENU_FILE_EXIT, "E&xit");
   GetDocumentManager()->FileHistoryAddFilesToMenu(m_pFileMenu);
   GetDocumentManager()->FileHistoryUseMenu(m_pFileMenu);
-  
+
   wxMenu *view_menu = new wxMenu;
   view_menu->Append(PLOTMENU_VIEW_SCALE_MINMAX, "Display Scale &Set...\tCtrl-E");
   view_menu->Append(PLOTMENU_VIEW_SCALE_AUTO, "Display Scale &Auto...\tCtrl-A");
   view_menu->Append(PLOTMENU_VIEW_SCALE_FULL, "Display &Full Scale\tCtrl-U");
-  
+
   wxMenu *help_menu = new wxMenu;
   help_menu->Append(MAINMENU_HELP_CONTENTS, "&Contents\tF1");
   help_menu->Append (MAINMENU_HELP_TIPS, "&Tips");
   help_menu->Append (IDH_QUICKSTART, "&Quick Start");
   help_menu->Append(MAINMENU_HELP_ABOUT, "&About");
-  
+
   wxMenuBar *menu_bar = new wxMenuBar;
-  
+
   menu_bar->Append(m_pFileMenu, "&File");
   menu_bar->Append(view_menu, "&View");
   menu_bar->Append(help_menu, "&Help");
-  
+
   subframe->SetMenuBar(menu_bar);
   subframe->Centre(wxBOTH);
-  
+
   wxAcceleratorEntry accelEntries[4];
   accelEntries[0].Set (wxACCEL_CTRL, static_cast<int>('E'), PLOTMENU_VIEW_SCALE_MINMAX);
   accelEntries[1].Set (wxACCEL_CTRL, static_cast<int>('A'), PLOTMENU_VIEW_SCALE_AUTO);
@@ -3449,51 +3449,51 @@ PlotFileView::CreateChildFrame(wxDocument *doc, wxView *view)
   accelEntries[3].Set (wxACCEL_CTRL, static_cast<int>('I'), PLOTMENU_FILE_PROPERTIES);
   wxAcceleratorTable accelTable (4, accelEntries);
   subframe->SetAcceleratorTable (accelTable);
-  
+
   return subframe;
 }
 
 
-bool 
+bool
 PlotFileView::OnCreate (wxDocument *doc, long WXUNUSED(flags) )
 {
   m_bMinSpecified = false;
   m_bMaxSpecified = false;
   m_dAutoScaleFactor = 1.;
-  
+
   m_pFrame = CreateChildFrame(doc, this);
   SetFrame(m_pFrame);
   m_pCanvas = CreateCanvas (m_pFrame);
   m_pFrame->SetClientSize (m_pCanvas->GetBestSize());
   m_pCanvas->SetClientSize (m_pCanvas->GetBestSize());
   m_pFrame->SetTitle ("Plot File");
-  
+
   m_pFrame->Show(true);
   Activate(true);
-  
+
   return true;
 }
 
-void 
+void
 PlotFileView::setInitialClientSize ()
 {
   if (m_pFrame && m_pCanvas) {
     wxSize bestSize = m_pCanvas->GetBestSize();
-    
+
     m_pFrame->SetClientSize (bestSize);
     m_pFrame->Show (true);
     m_pFrame->SetFocus();
   }
-}  
+}
 
 
-void 
+void
 PlotFileView::OnDraw (wxDC* dc)
 {
   const PlotFile& rPlotFile = GetDocument()->getPlotFile();
   const int iNColumns = rPlotFile.getNumColumns();
   const int iNRecords = rPlotFile.getNumRecords();
-  
+
   if (iNColumns > 0 && iNRecords > 0) {
     int xsize, ysize;
     m_pCanvas->GetClientSize (&xsize, &ysize);
@@ -3505,42 +3505,42 @@ PlotFileView::OnDraw (wxDC* dc)
 }
 
 
-void 
+void
 PlotFileView::OnUpdate (wxView *WXUNUSED(sender), wxObject *WXUNUSED(hint) )
 {
   const PlotFile& rPlotFile = GetDocument()->getPlotFile();
   const int iNColumns = rPlotFile.getNumColumns();
   const int iNRecords = rPlotFile.getNumRecords();
   const bool bScatterPlot = rPlotFile.getIsScatterPlot();
-  
+
   if (iNColumns > 0 && iNRecords > 0) {
     if (m_pEZPlot)
       delete m_pEZPlot;
     m_pEZPlot = new EZPlot;
-    
+
     for (unsigned int iEzset = 0; iEzset < rPlotFile.getNumEzsetCommands(); iEzset++)
       m_pEZPlot->ezset (rPlotFile.getEzsetCommand (iEzset));
-    
+
     if (m_bMinSpecified) {
       std::ostringstream os;
       os << "ymin " << m_dMinPixel;
       m_pEZPlot->ezset (os.str());
     }
-    
+
     if (m_bMaxSpecified) {
       std::ostringstream os;
       os << "ymax " << m_dMaxPixel;
       m_pEZPlot->ezset (os.str());
     }
-    
+
     m_pEZPlot->ezset("box");
     m_pEZPlot->ezset("grid");
-    
+
     double* pdX = new double [iNRecords];
     double* pdY = new double [iNRecords];
     if (! bScatterPlot) {
       rPlotFile.getColumn (0, pdX);
-      
+
       for (int iCol = 1; iCol < iNColumns; iCol++) {
         rPlotFile.getColumn (iCol, pdY);
         m_pEZPlot->addCurve (pdX, pdY, iNRecords);
@@ -3553,17 +3553,17 @@ PlotFileView::OnUpdate (wxView *WXUNUSED(sender), wxObject *WXUNUSED(hint) )
     delete pdX;
     delete pdY;
   }
-  
+
   if (m_pCanvas)
     m_pCanvas->Refresh();
 }
 
-bool 
+bool
 PlotFileView::OnClose (bool deleteWindow)
 {
   if (! GetDocument() || ! GetDocument()->Close())
     return false;
-  
+
   Activate(false);
   if (m_pCanvas) {
     m_pCanvas->setView (NULL);
@@ -3572,7 +3572,7 @@ PlotFileView::OnClose (bool deleteWindow)
   wxString s(wxTheApp->GetAppName());
   if (m_pFrame)
     m_pFrame->SetTitle(s);
-  
+
   SetFrame(NULL);
   if (deleteWindow) {
     delete m_pFrame;
@@ -3580,7 +3580,7 @@ PlotFileView::OnClose (bool deleteWindow)
     if (GetDocument() && GetDocument()->getBadFileOpen())
       ::wxYield();  // wxWindows bug workaround
   }
-  
+
   return true;
 }
 
@@ -3590,7 +3590,7 @@ PlotFileView::OnClose (bool deleteWindow)
 
 IMPLEMENT_DYNAMIC_CLASS(TextFileView, wxView)
 
-TextFileView::~TextFileView() 
+TextFileView::~TextFileView()
 {
   GetDocumentManager()->FileHistoryRemoveMenu (m_pFileMenu);
   GetDocumentManager()->ActivateView(this, FALSE, TRUE);;
@@ -3600,16 +3600,16 @@ bool TextFileView::OnCreate(wxDocument *doc, long WXUNUSED(flags) )
 {
   m_pFrame = CreateChildFrame(doc, this);
   SetFrame (m_pFrame);
-  
+
   int width, height;
   m_pFrame->GetClientSize(&width, &height);
   m_pFrame->SetTitle("TextFile");
   m_pCanvas = new TextFileCanvas (this, m_pFrame, wxPoint(-1,-1), wxSize(width, height), wxTE_MULTILINE | wxTE_READONLY);
   m_pFrame->SetTitle("Log");
-  
+
   m_pFrame->Show (true);
   Activate (true);
-  
+
   return true;
 }
 
@@ -3622,17 +3622,17 @@ void TextFileView::OnUpdate (wxView *WXUNUSED(sender), wxObject *WXUNUSED(hint)
 {
 }
 
-bool 
+bool
 TextFileView::OnClose (bool deleteWindow)
 {
   if (! theApp->getMainFrame()->getShuttingDown())
     return false;
-  
+
   Activate(false);
   //GetDocumentManager()->ActivateView (this, false, true);
   if (! GetDocument() || ! GetDocument()->Close())
     return false;
-  
+
   SetFrame(NULL);
   if (deleteWindow) {
     delete m_pFrame;
@@ -3640,7 +3640,7 @@ TextFileView::OnClose (bool deleteWindow)
     if (GetDocument() && GetDocument()->getBadFileOpen())
       ::wxYield();  // wxWindows bug workaround
   }
-  
+
   return TRUE;
 }
 
@@ -3657,16 +3657,16 @@ TextFileView::CreateChildFrame (wxDocument *doc, wxView *view)
   wxDocChildFrame* subframe = new wxDocChildFrame (doc, view, theApp->getMainFrame(), -1, "TextFile Frame", wxPoint(-1, -1), wxSize(300, 150), wxDEFAULT_FRAME_STYLE, "Log");
 #endif
   theApp->setIconForFrame (subframe);
-  
+
   m_pFileMenu = new wxMenu;
-  
+
   m_pFileMenu->Append(MAINMENU_FILE_CREATE_PHANTOM, "Cr&eate Phantom...\tCtrl-P");
   m_pFileMenu->Append(MAINMENU_FILE_CREATE_FILTER, "Create &Filter...\tCtrl-F");
   m_pFileMenu->Append(wxID_OPEN, "&Open...\tCtrl-O");
   m_pFileMenu->Append(wxID_SAVE, "&Save\tCtrl-S");
   m_pFileMenu->Append(wxID_SAVEAS, "Save &As...");
   //  m_pFileMenu->Append(wxID_CLOSE, "&Close\tCtrl-W");
-  
+
   m_pFileMenu->AppendSeparator();
   m_pFileMenu->Append(wxID_PRINT, "&Print...");
   m_pFileMenu->Append(wxID_PRINT_SETUP, "Print &Setup...");
@@ -3678,21 +3678,21 @@ TextFileView::CreateChildFrame (wxDocument *doc, wxView *view)
   m_pFileMenu->Append(MAINMENU_FILE_EXIT, "E&xit");
   GetDocumentManager()->FileHistoryAddFilesToMenu(m_pFileMenu);
   GetDocumentManager()->FileHistoryUseMenu(m_pFileMenu);
-  
+
   wxMenu *help_menu = new wxMenu;
   help_menu->Append(MAINMENU_HELP_CONTENTS, "&Contents\tF1");
   help_menu->Append (MAINMENU_HELP_TIPS, "&Tips");
   help_menu->Append (IDH_QUICKSTART, "&Quick Start");
   help_menu->Append(MAINMENU_HELP_ABOUT, "&About");
-  
+
   wxMenuBar *menu_bar = new wxMenuBar;
-  
+
   menu_bar->Append(m_pFileMenu, "&File");
   menu_bar->Append(help_menu, "&Help");
-  
+
   subframe->SetMenuBar(menu_bar);
   subframe->Centre(wxBOTH);
-  
+
   return subframe;
 }