source: tags/release-1.1.7/src/param.hh @ 1455

Last change on this file since 1455 was 538, checked in by MatthewWhiting, 15 years ago

Changing all uints in header files to unsigned ints.

File size: 24.2 KB
RevLine 
[299]1// -----------------------------------------------------------------------
2// param.hh: Definition of the parameter set.
3// -----------------------------------------------------------------------
4// Copyright (C) 2006, Matthew Whiting, ATNF
5//
6// This program is free software; you can redistribute it and/or modify it
7// under the terms of the GNU General Public License as published by the
8// Free Software Foundation; either version 2 of the License, or (at your
9// option) any later version.
10//
11// Duchamp is distributed in the hope that it will be useful, but WITHOUT
12// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
13// FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
14// for more details.
15//
16// You should have received a copy of the GNU General Public License
17// along with Duchamp; if not, write to the Free Software Foundation,
18// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA
19//
20// Correspondence concerning Duchamp may be directed to:
21//    Internet email: Matthew.Whiting [at] atnf.csiro.au
22//    Postal address: Dr. Matthew Whiting
23//                    Australia Telescope National Facility, CSIRO
24//                    PO Box 76
25//                    Epping NSW 1710
26//                    AUSTRALIA
27// -----------------------------------------------------------------------
[3]28#ifndef PARAM_H
29#define PARAM_H
30
31#include <iostream>
32#include <string>
33#include <vector>
[170]34#include <math.h>
[394]35#include <wcslib/wcs.h>
36#include <wcslib/wcshdr.h>
[393]37#include <duchamp/Utils/Section.hh>
38#include <duchamp/ATrous/filter.hh>
[3]39
[378]40namespace duchamp
41{
[221]42
[112]43
[378]44  class FitsHeader; // foreshadow this so that Param knows it exists
[272]45
[528]46  /// @brief Class to store general parameters.
47  ///
48  /// @details This is a general repository for parameters that are used by all
49  /// functions. This is how the user interacts with the program, as
50  /// parameters are read in from disk files through functions in this
51  /// class.
[272]52
[378]53  class Param
54  {
55  public:
[528]56    /// @brief Default constructor.
[378]57    Param();
[272]58
[528]59    /// @brief Copy constructor for Param.
[378]60    Param(const Param& p);
[309]61
[528]62    /// @brief Assignment operator for Param.
[378]63    Param& operator= (const Param& p);
[309]64
[528]65    /// @brief Destructor function. 
[378]66    virtual ~Param();
[266]67
[528]68    /// @brief Define the default values of each parameter.
[378]69    void  defaultValues();
[221]70
[378]71    //-----------------
72    // Functions in param.cc
73    //
[528]74    /// @brief Parse the command line parameters correctly.
[474]75    int    getopts(int argc, char ** argv, std::string progname="Duchamp");
[221]76
[528]77    /// @brief Read in parameters from a disk file.
[378]78    int    readParams(std::string paramfile);
[221]79
[528]80    /// @brief Check the parameter list for inconsistencies
[503]81    void   checkPars();
82
[528]83    /// @brief Copy certain necessary FITS header parameters from a FitsHeader object
[378]84    void   copyHeaderInfo(FitsHeader &head);
[221]85
[528]86    /// @brief Determine filename in which to save the mask array.
[379]87    std::string outputMaskFile();
88
[528]89    /// @brief Determine filename in which to save the smoothed array.
[378]90    std::string outputSmoothFile();
[221]91
[528]92    /// @brief Determine filename in which to save the reconstructed array.
[378]93    std::string outputReconFile();
[272]94
[528]95    /// @brief Determine filename in which to save the residual array from the atrous reconstruction.
[378]96    std::string outputResidFile();
[221]97
[528]98    /// @brief Print the parameter set in a readable fashion.
[378]99    friend std::ostream& operator<< ( std::ostream& theStream, Param& par);
100    friend class Image;
[258]101
[378]102    //------------------
103    // Functions in FitsIO/subsection.cc
104    //
[528]105    /// @brief Make sure the subsection strings are OK.
[378]106    int    verifySubsection();
[309]107
[528]108    /// @brief Set the correct offset values for each axis
[378]109    void   setOffsets(struct wcsprm *wcs);
[221]110
[528]111    /// @brief Set the correct offset values for each axis
[378]112    void   setOffsets(struct wcsprm &wcs);
[221]113
[378]114    //------------------
115    // These are in param.cc
[528]116    /// @brief Is a pixel value a BLANK?
[378]117    bool   isBlank(float &value);
[258]118
[528]119    /// @brief Is a given channel flagged as being in the Milky Way?           
[378]120    bool   isInMW(int z);
[275]121
[528]122    /// @brief Is a given pixel position OK for use with stats calculations?
[378]123    bool   isStatOK(int x, int y, int z);
[275]124
[528]125    /// @brief Make a mask array -- an array saying whether each pixel is BLANK or not
[378]126    bool  *makeBlankMask(float *array, int size);
[221]127
[528]128    /// @brief Make a mask array -- an array saying whether each pixel is able to be used for statistics calculations
[506]129    bool *makeStatMask(float *array, long *dim);
[378]130
131    //--------------------
132    // Basic inline accessor functions
133    //
134    std::string getImageFile(){return imageFile;};
135    void   setImageFile(std::string fname){imageFile = fname;};
136    std::string getFullImageFile(){
137      if(flagSubsection) return imageFile+pixelSec.getSection();
138      else return imageFile;
139    };
140    bool   getFlagSubsection(){return flagSubsection;};
141    void   setFlagSubsection(bool flag){flagSubsection=flag;};
142    std::string getSubsection(){return pixelSec.getSection();};
143    void   setSubsection(std::string range){pixelSec.setSection(range);};
144    Section &section(){Section &rsection = pixelSec; return rsection;};
145    bool   getFlagReconExists(){return flagReconExists;};
146    void   setFlagReconExists(bool flag){flagReconExists=flag;};
147    std::string getReconFile(){return reconFile;};
148    void   setReconFile(std::string file){reconFile = file;};
149    bool   getFlagSmoothExists(){return flagSmoothExists;};
150    void   setFlagSmoothExists(bool flag){flagSmoothExists=flag;};
151    std::string getSmoothFile(){return smoothFile;};
152    void   setSmoothFile(std::string file){smoothFile = file;};
153    //
[475]154    bool   getFlagUsePrevious(){return usePrevious;};
155    void   setFlagUsePrevious(bool flag){usePrevious=flag;};
156    std::string getObjectList(){return objectList;};
157    void   setObjectList(std::string s){objectList = s;};
158    std::vector<int> getObjectRequest();
159    std::vector<bool> getObjectChoices();
160    std::vector<bool> getObjectChoices(int numObjects);
161    //
[378]162    bool   getFlagLog(){return flagLog;};
163    void   setFlagLog(bool flag){flagLog=flag;};
164    std::string getLogFile(){return logFile;};
165    void   setLogFile(std::string fname){logFile = fname;};
166    std::string getOutFile(){return outFile;};
167    void   setOutFile(std::string fname){outFile = fname;};
168    bool   getFlagSeparateHeader(){return flagSeparateHeader;};
169    void   setFlagSeparateHeader(bool b){flagSeparateHeader=b;};
170    std::string getHeaderFile(){return headerFile;};
171    void   setHeaderFile(std::string s){headerFile=s;};
172    std::string getSpectraFile(){return spectraFile;};
173    void   setSpectraFile(std::string fname){spectraFile = fname;};
[424]174    bool   getFlagTextSpectra(){return flagTextSpectra;};
175    void   setFlagTextSpectra(bool b){flagTextSpectra = b;};
176    std::string getSpectraTextFile(){return spectraTextFile;};
177    void   setSpectraTextFile(std::string fname){spectraTextFile = fname;};
[379]178    bool   getFlagOutputMask(){return flagOutputMask;};
179    void   setFlagOutputMask(bool flag){flagOutputMask=flag;};
[525]180    std::string getFileOutputMask(){return fileOutputMask;};
181    void   setFileOutputMask(std::string s){fileOutputMask=s;};
[521]182    bool   getFlagMaskWithObjectNum(){return flagMaskWithObjectNum;};
183    void   setFlagMaskWithObjectNum(bool flag){flagMaskWithObjectNum=flag;};
[378]184    bool   getFlagOutputSmooth(){return flagOutputSmooth;};
185    void   setFlagOutputSmooth(bool flag){flagOutputSmooth=flag;};
[525]186    std::string getFileOutputSmooth(){return fileOutputSmooth;};
187    void   setFileOutputSmooth(std::string s){fileOutputSmooth=s;};
[378]188    bool   getFlagOutputRecon(){return flagOutputRecon;};
189    void   setFlagOutputRecon(bool flag){flagOutputRecon=flag;};
[525]190    std::string getFileOutputRecon(){return fileOutputRecon;};
191    void   setFileOutputRecon(std::string s){fileOutputRecon=s;};
[378]192    bool   getFlagOutputResid(){return flagOutputResid;};
193    void   setFlagOutputResid(bool flag){flagOutputResid=flag;};
[525]194    std::string getFileOutputResid(){return fileOutputResid;};
195    void   setFileOutputResid(std::string s){fileOutputResid=s;};
[378]196    bool   getFlagVOT(){return flagVOT;};
197    void   setFlagVOT(bool flag){flagVOT=flag;};
198    std::string getVOTFile(){return votFile;};
199    void   setVOTFile(std::string fname){votFile = fname;};
200    bool   getFlagKarma(){return flagKarma;};
201    void   setFlagKarma(bool flag){flagKarma=flag;};
[446]202    std::string getAnnotationType(){return annotationType;};
203    void   setAnnotationType(std::string s){annotationType=s;};
[378]204    std::string getKarmaFile(){return karmaFile;};
205    void   setKarmaFile(std::string fname){karmaFile = fname;};
206    bool   getFlagMaps(){return flagMaps;};
207    void   setFlagMaps(bool flag){flagMaps=flag;};
208    std::string getDetectionMap(){return detectionMap;};
209    void   setDetectionMap(std::string fname){detectionMap = fname;};
210    std::string getMomentMap(){return momentMap;};
211    void   setMomentMap(std::string fname){momentMap = fname;};
212    bool   getFlagXOutput(){return flagXOutput;};
213    void   setFlagXOutput(bool b){flagXOutput=b;};
[438]214    int    getPrecFlux(){return precFlux;};
215    void   setPrecFlux(int i){precFlux=i;};
216    int    getPrecVel(){return precVel;};
217    void   setPrecVel(int i){precVel=i;};
218    int    getPrecSNR(){return precSNR;};
219    void   setPrecSNR(int i){precSNR=i;};
[378]220    //
221    bool   getFlagNegative(){return flagNegative;};
222    void   setFlagNegative(bool flag){flagNegative=flag;};
223    bool   getFlagBlankPix(){return flagBlankPix;};
224    void   setFlagBlankPix(bool flag){flagBlankPix=flag;};
225    float  getBlankPixVal(){return blankPixValue;};
226    void   setBlankPixVal(float v){blankPixValue=v;};
227    int    getBlankKeyword(){return blankKeyword;};
228    void   setBlankKeyword(int v){blankKeyword=v;};
229    float  getBscaleKeyword(){return bscaleKeyword;};
230    void   setBscaleKeyword(float v){bscaleKeyword=v;};
231    float  getBzeroKeyword(){return bzeroKeyword;};
232    void   setBzeroKeyword(float v){bzeroKeyword=v;};
233    bool   getFlagMW(){return flagMW;};
234    void   setFlagMW(bool flag){flagMW=flag;};
235    int    getMaxMW(){return maxMW;};
236    void   setMaxMW(int m){maxMW=m;};
237    int    getMinMW(){return minMW;};
238    void   setMinMW(int m){minMW=m;};
239    void   setBeamSize(float s){numPixBeam = s;};
240    float  getBeamSize(){return numPixBeam;};
241    bool   getFlagUsingBeam(){return flagUsingBeam;};
242    void   setFlagUsingBeam(bool b){flagUsingBeam=b;};
[434]243    std::string getNewFluxUnits(){return newFluxUnits;};
244    void setNewFluxUnits(std::string s){newFluxUnits=s;};
[378]245    //
246    bool   getFlagTrim(){return flagTrim;};
247    void   setFlagTrim(bool b){flagTrim=b;};
248    bool   getFlagCubeTrimmed(){return hasBeenTrimmed;};
249    void   setFlagCubeTrimmed(bool flag){hasBeenTrimmed = flag;};
250    long   getBorderLeft(){return borderLeft;};
251    void   setBorderLeft(long b){borderLeft = b;};
252    long   getBorderRight(){return borderRight;};
253    void   setBorderRight(long b){borderRight = b;};
254    long   getBorderBottom(){return borderBottom;};
255    void   setBorderBottom(long b){borderBottom = b;};
256    long   getBorderTop(){return borderTop;};
257    void   setBorderTop(long b){borderTop = b;};
258    //
259    long   getXOffset(){return xSubOffset;};
260    void   setXOffset(long o){xSubOffset = o;};
261    long   getYOffset(){return ySubOffset;};
262    void   setYOffset(long o){ySubOffset = o;};
263    long   getZOffset(){return zSubOffset;};
264    void   setZOffset(long o){zSubOffset = o;};
265    //
[538]266    unsigned int   getMinPix(){return minPix;};
[378]267    void   setMinPix(int m){minPix=m;};
268    //   
269    bool   getFlagGrowth(){return flagGrowth;};
270    void   setFlagGrowth(bool flag){flagGrowth=flag;};
271    float  getGrowthCut(){return growthCut;};
272    void   setGrowthCut(float c){growthCut=c;};
[461]273    float  getGrowthThreshold(){return growthThreshold;};
274    void   setGrowthThreshold(float f){growthThreshold=f;};
275    bool   getFlagUserGrowthThreshold(){return flagUserGrowthThreshold;};
276    void   setFlagUserGrowthThreshold(bool b){flagUserGrowthThreshold=b;};
[378]277    //   
278    bool   getFlagFDR(){return flagFDR;};
279    void   setFlagFDR(bool flag){flagFDR=flag;};
280    float  getAlpha(){return alphaFDR;};
281    void   setAlpha(float a){alphaFDR=a;};
282    //
283    bool   getFlagBaseline(){return flagBaseline;};
284    void   setFlagBaseline(bool flag){flagBaseline = flag;};
285    //
286    bool   getFlagStatSec(){return flagStatSec;};
287    void   setFlagStatSec(bool flag){flagStatSec=flag;};
288    std::string getStatSec(){return statSec.getSection();};
289    void   setStatSec(std::string range){statSec.setSection(range);};
[385]290    bool   getFlagRobustStats(){return flagRobustStats;};
291    void   setFlagRobustStats(bool flag){flagRobustStats=flag;};
[378]292    float  getCut(){return snrCut;};
293    void   setCut(float c){snrCut=c;};
294    float  getThreshold(){return threshold;};
295    void   setThreshold(float f){threshold=f;};
296    bool   getFlagUserThreshold(){return flagUserThreshold;};
297    void   setFlagUserThreshold(bool b){flagUserThreshold=b;};
298    //   
299    bool   getFlagSmooth(){return flagSmooth;};
300    void   setFlagSmooth(bool b){flagSmooth=b;};
301    std::string getSmoothType(){return smoothType;};
302    void   setSmoothType(std::string s){smoothType=s;};
303    int    getHanningWidth(){return hanningWidth;};
304    void   setHanningWidth(int f){hanningWidth=f;};
305    void   setKernMaj(float f){kernMaj=f;};
306    float  getKernMaj(){return kernMaj;};
307    void   setKernMin(float f){kernMin=f;};
308    float  getKernMin(){return kernMin;};
309    void   setKernPA(float f){kernPA=f;};
310    float  getKernPA(){return kernPA;};
311    //   
312    bool   getFlagATrous(){return flagATrous;};
313    void   setFlagATrous(bool flag){flagATrous=flag;};
314    int    getReconDim(){return reconDim;};
315    void   setReconDim(int i){reconDim=i;};
316    int    getMinScale(){return scaleMin;};
317    void   setMinScale(int s){scaleMin=s;};
318    int    getMaxScale(){return scaleMax;};
319    void   setMaxScale(int s){scaleMax=s;};
320    float  getAtrousCut(){return snrRecon;};
321    void   setAtrousCut(float c){snrRecon=c;};
322    int    getFilterCode(){return filterCode;};
323    void   setFilterCode(int c){filterCode=c;};
324    std::string getFilterName(){return reconFilter.getName();};
325    Filter& filter(){ Filter &rfilter = reconFilter; return rfilter; };
326    //   
327    bool   getFlagAdjacent(){return flagAdjacent;};
328    void   setFlagAdjacent(bool flag){flagAdjacent=flag;};
329    float  getThreshS(){return threshSpatial;};
330    void   setThreshS(float t){threshSpatial=t;};
331    float  getThreshV(){return threshVelocity;};
332    void   setThreshV(float t){threshVelocity=t;};
333    int    getMinChannels(){return minChannels;};
334    void   setMinChannels(int n){minChannels=n;};
335    //
336    std::string getSpectralMethod(){return spectralMethod;};
337    void   setSpectralMethod(std::string s){spectralMethod=s;};
338    std::string getSpectralUnits(){return spectralUnits;};
339    void   setSpectralUnits(std::string s){spectralUnits=s;};
340    std::string getPixelCentre(){return pixelCentre;};
341    void   setPixelCentre(std::string s){pixelCentre=s;};
342    bool   drawBorders(){return borders;};
343    void   setDrawBorders(bool f){borders=f;};
344    bool   drawBlankEdge(){return blankEdge;};
345    void   setDrawBlankEdge(bool f){blankEdge=f;};
346
[528]347    /// @brief Are we in verbose mode?
[378]348    bool   isVerbose(){return verbose;};
349    void   setVerbosity(bool f){verbose=f;};
[3]350 
[378]351  private:
352    // Input files
[528]353    std::string imageFile;       ///< The image to be analysed.
354    bool        flagSubsection;  ///< Whether we just want a subsection of the image
355    Section pixelSec;            ///< The Section object storing the pixel subsection information.
356    bool        flagReconExists; ///< The reconstructed array is in a FITS file on disk.
357    std::string reconFile;       ///< The FITS file containing the reconstructed array.
358    bool        flagSmoothExists;///< The smoothed array is in a FITS file.
359    std::string smoothFile;      ///< The FITS file containing the smoothed array.
[71]360
[528]361    bool       usePrevious;      ///< Whether to read the detections from a previously-created log file
362    std::string objectList;      ///< List of objects to re-plot
[475]363
[378]364    // Output files
[528]365    bool        flagLog;         ///< Should we do the intermediate logging?
366    std::string logFile;         ///< Where the intermediate logging goes.
367    std::string outFile;         ///< Where the final results get put.
368    bool        flagSeparateHeader;///< Should the header information(parameters & statistics) be written to a separate file to the table ofresults?
369    std::string headerFile;      ///< Where the header information to go with the results table should be written.
370    std::string spectraFile;     ///< Where the spectra are displayed
371    bool        flagTextSpectra; ///< Should a text file with all spectra be written?
372    std::string spectraTextFile; ///< Where the text spectra are written.
373    bool        flagOutputMask;  ///< Should the mask image be written?
374    std::string fileOutputMask;  ///< The name of the mask image.
375    bool        flagMaskWithObjectNum;///< Should the mask values be labeled with the object ID (or just 1)?
376    bool        flagOutputSmooth;///< Should the smoothed cube be written?
377    std::string fileOutputSmooth;///< The name of the smoothed cube file
378    bool        flagOutputRecon; ///< Should the reconstructed cube be written to a FITS file?
[525]379    std::string fileOutputRecon; ///< The name of the reconstructed cube file
[528]380    bool        flagOutputResid; ///< Should the residuals from the reconstruction be written to a FITS file?
[525]381    std::string fileOutputResid; ///< The name of the residual cube file
[528]382    bool        flagVOT;         ///< Should we save results in VOTable format?
383    std::string votFile;         ///< Where the VOTable goes.
384    bool        flagKarma;       ///< Should we save results in Karma annotation format?
385    std::string karmaFile;       ///< Where the Karma annotation file goes.
386    std::string annotationType;  ///< Should the annoations be circles or borders?
387    bool        flagMaps;        ///< Should we produce detection and moment maps in postscript form?
388    std::string detectionMap;    ///< The name of the detection map (postscript file).
389    std::string momentMap;       ///< The name of the 0th moment map (ps file).
390    bool        flagXOutput;     ///< Should there be an xwindows output of the detection map?
391    int         precFlux;        ///< The desired precision for flux values.
392    int         precVel;         ///< The desired precision for velocity/frequency values.
393    int         precSNR;         ///< The desired precision for the SNR values.
[3]394
[378]395    // Cube related parameters
[528]396    bool        flagNegative;    ///< Are we going to search for negative features?
397    bool        flagBlankPix;    ///< A flag that indicates whether there are pixels defined as BLANK and whether we need to remove & ignore them in processing.
398    float       blankPixValue;   ///< Pixel value that is considered BLANK.
399    int         blankKeyword;    ///< The FITS header keyword BLANK.
400    float       bscaleKeyword;   ///< The FITS header keyword BSCALE.
401    float       bzeroKeyword;    ///< The FITS header keyword BZERO.
402    std::string newFluxUnits;    ///< The user-requested flux units, to replace BUNIT.
[475]403
[385]404    // Milky-Way parameters
[528]405    bool        flagMW;          ///< A flag that indicates whether to ignore the Milky Way channels.
406    int         maxMW;           ///< Last  Milky Way channel
407    int         minMW;           ///< First Milky Way channel
[475]408
[378]409    // Trim-related
[528]410    bool        flagTrim;        ///< Does the user want the cube trimmed?
411    bool        hasBeenTrimmed;  ///< Has the cube been trimmed of excess BLANKs around the edge?
412    long        borderLeft;      ///< The number of BLANK pixels trimmed from the left of the cube;
413    long        borderRight;     ///< The number trimmed from the Right of the cube;
414    long        borderBottom;    ///< The number trimmed from the Bottom of the cube;
415    long        borderTop;       ///< The number trimmed from the Top of the cube;
[475]416
[378]417    // Subsection offsets
[528]418    long       *offsets;         ///< The array of offsets for each FITS axis.
419    long        sizeOffsets;     ///< The size of the offsets array.
420    long        xSubOffset;      ///< The subsection's x-axis offset
421    long        ySubOffset;      ///< The subsection's y-axis offset
422    long        zSubOffset;      ///< The subsection's z-axis offset
[475]423
[378]424    // Baseline related
[528]425    bool        flagBaseline;    ///< Whether to do baseline subtraction before reconstruction and/or searching.
[475]426
[378]427    // Detection-related
[528]428    int         minPix;          ///< Minimum number of pixels for a detected object to be counted
429    float       numPixBeam;      ///< Size (area) of the beam in pixels.
430    bool        flagUsingBeam;   ///< If true, we are using the numPixBeam parameter, otherwise we use the value in the FITS header.
[475]431
[378]432    // Object growth
[528]433    bool        flagGrowth;      ///< Are we growing objects once they are found?
434    float       growthCut;       ///< The SNR that we are growing objects down to.
435    bool        flagUserGrowthThreshold; ///< Whether the user has manually defined a growth threshold
436    float       growthThreshold; ///< The threshold for growing objects down to
[475]437
[378]438    // FDR analysis
[528]439    bool        flagFDR;         ///< Should the FDR method be used?
440    float       alphaFDR;        ///< Alpha value for FDR detection algorithm
[475]441
[378]442    // Basic detection
[528]443    bool        flagStatSec;     ///< Whether we just want to use a subsection of the image to calculate the statistics.
444    Section     statSec;         ///< The Section object storing the statistics subsection information.
445    bool        flagRobustStats; ///< Whether to use robust statistics.
446    float       snrCut;          ///< How many sigma above mean is a detection when sigma-clipping
447    float       threshold;       ///< What the threshold is (when sigma-clipping).
448    bool        flagUserThreshold;///< Whether the user has defined a threshold of their own.
[475]449
[378]450    // Smoothing of the cube
[528]451    bool        flagSmooth;      ///< Should the cube be smoothed before searching?
452    std::string smoothType;      ///< The type of smoothing to be done.
453    int         hanningWidth;    ///< Width for hanning smoothing.
454    float       kernMaj;         ///< Semi-Major axis of gaussian smoothing kernel
455    float       kernMin;         ///< Semi-Minor axis of gaussian smoothing kernel
456    float       kernPA;          ///< Position angle of gaussian smoothing kernel, in degrees east of north (i.e. anticlockwise).
[475]457
[378]458    // A trous reconstruction parameters
459    bool   flagATrous;      ///< Are we using the a trous reconstruction?
[475]460    int    reconDim;        ///< How many dimensions to use for the reconstruction?
[378]461    int    scaleMin;        ///< Min scale used in a trous reconstruction
462    int    scaleMax;        ///< Max scale used in a trous reconstruction
[475]463    float  snrRecon;        ///< SNR cutoff used in a trous reconstruction (only wavelet coefficients that survive this threshold are kept)
[378]464    Filter reconFilter;     ///< The filter used for reconstructions.
[475]465    int    filterCode;      ///< The code number for the filter to be used (saves having to parse names)
466    std::string filterName; ///< The code number converted into a name, for outputting purposes.
[3]467
[378]468    // Volume-merging parameters
[475]469    bool   flagAdjacent;    ///< Whether to use the adjacent criterion for judging if objects are to be merged.
470    float  threshSpatial;   ///< Maximum spatial separation between objects
471    float  threshVelocity;  ///< Maximum channels separation between objects
[378]472    int    minChannels;     ///< Minimum no. of channels to make an object
[385]473
[378]474    // Input-Output related
[475]475    std::string spectralMethod; ///< A string indicating choice of spectral plotting method: choices are "peak" (default) or "sum"
476    std::string spectralUnits;   ///< A string indicating what units the spectral axis should be quoted in.
477    std::string pixelCentre;///< A string indicating which type of centre to give the results in: "average", "centroid", or "peak"(flux).
478    bool   borders;         ///< Whether to draw a border around the individual pixels of a detection in the spectral display
479    bool   blankEdge;       ///< Whether to draw a border around the BLANK pixel region in the moment maps and cutout images
480    bool   verbose;         ///< Whether to use maximum verbosity -- use progress indicators in the reconstruction & merging steps.
[3]481
[378]482  };
[3]483
[378]484  //===========================================================================
[221]485
[3]486
[528]487  /// @brief Convert a string to lowercase.
[378]488  std::string makelower( std::string s );
[103]489
[378]490}
[3]491#endif
Note: See TracBrowser for help on using the repository browser.