source: trunk/src/param.hh @ 846

Last change on this file since 846 was 846, checked in by MatthewWhiting, 13 years ago

Lots of small changes to the reconstruction code, getting the type definitions appropriate (signed vs unsigned ints, with size_t parameters in there as well.)

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