source: tags/release-1.1.11b/src/param.hh @ 1323

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

Making sure it works with the redesigned needBeamSize function (ie. not using it before reading beam from file). Also removing a lot of redundant code.

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