r319: add complex-valued imagefile support
[ctsim.git] / src / views.cpp
index 8c53e4ced61bf734570a557db7ee14d1fd75f7ff..307d6c0c054cf24823a1f9884be4807f7dfa6430 100644 (file)
@@ -9,7 +9,7 @@
 **  This is part of the CTSim program
 **  Copyright (C) 1983-2000 Kevin Rosenberg
 **
-**  $Id: views.cpp,v 1.40 2000/12/29 15:45:06 kevin Exp $
+**  $Id: views.cpp,v 1.41 2000/12/29 19:30:08 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
@@ -169,8 +169,10 @@ EVT_MENU(IFMENU_PROCESS_SQUARE, ImageFileView::OnSquare)
 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_FFT_MAGNITUDE, ImageFileView::OnFFTMagnitude)\r
-EVT_MENU(IFMENU_PROCESS_FFT_PHASE, ImageFileView::OnFFTPhase)\r
+EVT_MENU(IFMENU_PROCESS_FOURIER, ImageFileView::OnFourier)\r
+EVT_MENU(IFMENU_PROCESS_INVERSE_FOURIER, ImageFileView::OnInverseFourier)\r
+EVT_MENU(IFMENU_PROCESS_MAGNITUDE, ImageFileView::OnMagnitude)\r
+EVT_MENU(IFMENU_PROCESS_PHASE, ImageFileView::OnPhase)\r
 EVT_MENU(IFMENU_PLOT_ROW, ImageFileView::OnPlotRow)\r
 EVT_MENU(IFMENU_PLOT_COL, ImageFileView::OnPlotCol)\r
 END_EVENT_TABLE()
@@ -187,15 +189,26 @@ ImageFileView::~ImageFileView(void)
 void
 ImageFileView::OnProperties (wxCommandEvent& event)
 {
-  double min, max, mean, mode, median, stddev;
   const ImageFile& rIF = GetDocument()->getImageFile();
   if (rIF.nx() == 0 || rIF.ny() == 0)
     *theApp->getLog() << "Properties: empty imagefile\n";
   else {
     const std::string& rFilename = rIF.getFilename();
-    rIF.statistics (min, max, mean, mode, median, stddev);
     std::ostringstream os;
-    os << "file: " << rFilename << "\nmin: "<<min<<"\nmax: "<<max<<"\nmean: "<<mean<<"\nmedian: "<<median<<"\nmode: "<<mode<<"\nstddev: "<<stddev << "\n";
+    double min, max, mean, mode, median, stddev;\r
+    rIF.statistics (min, max, mean, mode, median, stddev);\r
+    os << "Filename: " << rFilename << "\n";\r
+    os << "Size: (" << rIF.nx() << "," << rIF.ny() << ")\n";\r
+    os << "Data type: ";\r
+    if (rIF.dataType() == Array2dFile::DATA_TYPE_COMPLEX)\r
+      os << "Complex\n";\r
+    else\r
+      os << "Real\n";\r
+    os << "\nMinimum: "<<min<<"\nMaximum: "<<max<<"\nMean: "<<mean<<"\nMedian: "<<median<<"\nMode: "<<mode<<"\nStandard Deviation: "<<stddev << "\n";
+    if (rIF.dataType() == Array2dFile::DATA_TYPE_COMPLEX) {\r
+      rIF.statistics (rIF.getImaginaryArray(), min, max, mean, mode, median, stddev);\r
+      os << "\nImaginary: min: "<<min<<"\nmax: "<<max<<"\nmean: "<<mean<<"\nmedian: "<<median<<"\nmode: "<<mode<<"\nstddev: "<<stddev << "\n";\r
+    }\r
     *theApp->getLog() << os.str().c_str();
     wxMessageDialog dialogMsg (m_frame, os.str().c_str(), "Imagefile Properties", wxOK | wxICON_INFORMATION);
     dialogMsg.ShowModal();
@@ -348,20 +361,48 @@ ImageFileView::OnExp (wxCommandEvent& event)
 }\r
 \r
 void\r
-ImageFileView::OnFFTMagnitude (wxCommandEvent& event)\r
+ImageFileView::OnFourier (wxCommandEvent& event)\r
 {\r
   ImageFile& rIF = GetDocument()->getImageFile();\r
-  rIF.FFTMagnitude (rIF);\r
+  rIF.fourier (rIF);\r
+  m_bMinSpecified = false;\r
+  m_bMaxSpecified = false;\r
+  if (theApp->getSetModifyNewDocs())\r
+    GetDocument()->Modify(TRUE);\r
+  GetDocument()->UpdateAllViews(this);\r
+}\r
+\r
+void\r
+ImageFileView::OnInverseFourier (wxCommandEvent& event)\r
+{\r
+  ImageFile& rIF = GetDocument()->getImageFile();\r
+  rIF.inverseFourier (rIF);\r
+  m_bMinSpecified = false;\r
+  m_bMaxSpecified = false;\r
   if (theApp->getSetModifyNewDocs())\r
     GetDocument()->Modify(TRUE);\r
   GetDocument()->UpdateAllViews(this);\r
 }\r
 \r
 void\r
-ImageFileView::OnFFTPhase (wxCommandEvent& event)\r
+ImageFileView::OnMagnitude (wxCommandEvent& event)\r
 {\r
   ImageFile& rIF = GetDocument()->getImageFile();\r
-  rIF.FFTPhase (rIF);\r
+  rIF.magnitude (rIF);\r
+  m_bMinSpecified = false;\r
+  m_bMaxSpecified = false;\r
+  if (theApp->getSetModifyNewDocs())\r
+    GetDocument()->Modify(TRUE);\r
+  GetDocument()->UpdateAllViews(this);\r
+}\r
+\r
+void\r
+ImageFileView::OnPhase (wxCommandEvent& event)\r
+{\r
+  ImageFile& rIF = GetDocument()->getImageFile();\r
+  rIF.phase (rIF);\r
+  m_bMinSpecified = false;\r
+  m_bMaxSpecified = false;\r
   if (theApp->getSetModifyNewDocs())\r
     GetDocument()->Modify(TRUE);\r
   GetDocument()->UpdateAllViews(this);\r
@@ -415,8 +456,11 @@ ImageFileView::CreateChildFrame(wxDocument *doc, wxView *view)
   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->Append (IFMENU_PROCESS_FFT_MAGNITUDE, "&FFT Magnitude");\r
-  process_menu->Append (IFMENU_PROCESS_FFT_PHASE, "FFT &Phase");\r
+  process_menu->AppendSeparator();\r
+  process_menu->Append (IFMENU_PROCESS_FOURIER, "&Fourier");\r
+  process_menu->Append (IFMENU_PROCESS_INVERSE_FOURIER, "&Inverse Fourier");\r
+  process_menu->Append (IFMENU_PROCESS_MAGNITUDE, "&Magnitude");\r
+  process_menu->Append (IFMENU_PROCESS_PHASE, "&Phase");\r
 \r
   wxMenu *plot_menu = new wxMenu;\r
   plot_menu->Append (IFMENU_PLOT_ROW, "Plot &Row");\r