r11859: Canonicalize whitespace
[ctsim.git] / include / procsignal.h
index 798bfc9cb97fbd8c9cc9d65a44b15137bc71bb01..9da33e0e09fd684e755950d45ec011c75fd1a4e8 100644 (file)
@@ -1,15 +1,15 @@
 /*****************************************************************************
 ** FILE IDENTIFICATION
 **
-**     Name:         filter.h
+**      Name:         filter.h
 **      Purpose:      Signal filter header file
-**     Programmer:   Kevin Rosenberg
-**     Date Started: June 2000
+**      Programmer:   Kevin Rosenberg
+**      Date Started: June 2000
 **
 **  This is part of the CTSim program
 **  Copyright (c) 1983-2001 Kevin Rosenberg
 **
-**  $Id: procsignal.h,v 1.13 2001/01/28 19:10:18 kevin Exp $
+**  $Id$
 **
 **  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
@@ -33,8 +33,7 @@
 #include "config.h"
 #endif
 #ifdef HAVE_FFTW
-#include <fftw.h>
-#include <rfftw.h>
+#include <fftw3.h>
 #endif
 
 #include <complex>
@@ -66,13 +65,16 @@ class ProcessSignal {
       BACKWARD = 1,
     };
 
-    ProcessSignal (const char* szFilterName, const char* szFilterMethodName,double bw, double signalIncrement, int n, double param, const char* szDomainName, const char* szFilterGenerationName, const int zeropad = 0, const int preinterpolationFactor = 1, const int iTraceLevel = Trace::TRACE_NONE, int iGeometry = Scanner::GEOMETRY_PARALLEL, double dFocalLength = 1., SGP* pSGP = NULL);
+    ProcessSignal (const char* szFilterName, const char* szFilterMethodName,double bw, double signalIncrement,
+      int n, double param, const char* szDomainName, const char* szFilterGenerationName,
+      const int zeropad, const int preinterpolationFactor, const int iTraceLevel, int iGeometry,
+      double dFocalLength, double dSourceDetectorLength, SGP* pSGP = NULL);
 
     ~ProcessSignal();
 
     void filterSignal (const float input[], double output[]) const;
 
-    bool fail(void) const      {return m_fail;}
+    bool fail(void) const       {return m_fail;}
     const std::string& failMessage(void) const {return m_failMessage;}
 
     void setTraceLevel (int traceLevel) {m_traceLevel = traceLevel; }
@@ -87,15 +89,15 @@ class ProcessSignal {
     const int idFilterGeneration() const { return m_idFilterGeneration;}
 
     static const int getFilterGenerationCount() {return s_iFilterGenerationCount;}
-    static const char** getFilterGenerationNameArray() {return s_aszFilterGenerationName;}
-    static const char** getFilterGenerationTitleArray() {return s_aszFilterGenerationTitle;}
+    static const char* const* getFilterGenerationNameArray() {return s_aszFilterGenerationName;}
+    static const char* const* getFilterGenerationTitleArray() {return s_aszFilterGenerationTitle;}
     static int convertFilterGenerationNameToID (const char* const fgName);
     static const char* convertFilterGenerationIDToName (const int idFG);
     static const char* convertFilterGenerationIDToTitle (const int idFG);
-  
+
     static const int getFilterMethodCount() {return s_iFilterMethodCount;}
-    static const char** getFilterMethodNameArray() {return s_aszFilterMethodName;}
-    static const char** getFilterMethodTitleArray() {return s_aszFilterMethodTitle;}
+    static const char* const* getFilterMethodNameArray() {return s_aszFilterMethodName;}
+    static const char* const* getFilterMethodTitleArray() {return s_aszFilterMethodTitle;}
     static int convertFilterMethodNameToID (const char* const filterMethodName);
     static const char* convertFilterMethodIDToName (const int idFilterMethod);
     static const char* convertFilterMethodIDToTitle (const int idFilterMethod);
@@ -106,10 +108,11 @@ class ProcessSignal {
     static void finiteFourierTransform (const std::complex<double> input[], std::complex<double> output[], const int n, const int direction);
     static void finiteFourierTransform (const std::complex<double> input[], double output[], const int n, const int direction);
 
+    static int addZeropadFactor (int n, int iZeropad);
 
  private:
-        std::string m_nameFilterMethod;
-        std::string m_nameFilterGeneration;
+         std::string m_nameFilterMethod;
+         std::string m_nameFilterGeneration;
     int m_idFilterMethod;
     int m_idFilterGeneration;
     int m_nSignalPoints;
@@ -135,27 +138,31 @@ class ProcessSignal {
     int m_iPreinterpolationFactor;
     int m_idGeometry;
     double m_dFocalLength;
+    double m_dSourceDetectorLength;
 
     bool m_fail;
     std::string m_failMessage;
 
-    static const char* s_aszFilterMethodName[];
-    static const char* s_aszFilterMethodTitle[];
+    static const char* const s_aszFilterMethodName[];
+    static const char* const s_aszFilterMethodTitle[];
     static const int s_iFilterMethodCount;
-    static const char* s_aszFilterGenerationName[];
-    static const char* s_aszFilterGenerationTitle[];
+    static const char* const s_aszFilterGenerationName[];
+    static const char* const s_aszFilterGenerationTitle[];
     static const int s_iFilterGenerationCount;
 
 #ifdef HAVE_FFTW
-    fftw_real* m_adRealFftInput, *m_adRealFftSignal;
-    rfftw_plan m_realPlanForward, m_realPlanBackward;
-    fftw_complex* m_adComplexFftInput, *m_adComplexFftSignal;
+    double *m_adRealFftInput, *m_adRealFftOutput, *m_adRealFftSignal, *m_adRealFftBackwardOutput;
+    fftw_plan m_realPlanForward, m_realPlanBackward;
+    fftw_complex *m_adComplexFftInput, *m_adComplexFftOutput, *m_adComplexFftSignal, *m_adComplexFftBackwardOutput;
     fftw_plan m_complexPlanForward, m_complexPlanBackward;
 #endif
 
-    void init (const int idFilter, int idFilterMethod, double dBandwidth, double dSignalIncrement, int nSignalPoints, double dFilterParam, const int idDomain, int idFilterGeneration, const int iZeropad, const int iPreinterpolationFactor, const int iTraceLevel, const int iGeometry, double dFocalLength, SGP* pSGP);
+    void init (const int idFilter, int idFilterMethod, double dBandwidth, double dSignalIncrement,
+      int nSignalPoints, double dFilterParam, const int idDomain, int idFilterGeneration, const int iZeropad,
+      const int iPreinterpolationFactor, const int iTraceLevel, const int iGeometry, double dFocalLength,
+      double dSourceDetectorLength, SGP* pSGP);
 
-    // transforms that use precalculated trig tables, therefore don't 
+    // transforms that use precalculated trig tables, therefore don't
     // require number of data points (n) as an argument
     void finiteFourierTransform (const double input[], std::complex<double> output[], const int direction) const;
     void finiteFourierTransform (const std::complex<double> input[], std::complex<double> output[], const int direction) const;