source: trunk/src/param.hh @ 541

Last change on this file since 541 was 537, checked in by MatthewWhiting, 15 years ago

Changing some uint calls to "unsigned int" in the header files. Also an extra check on growth thresholds in checkPars().

File size: 24.2 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
40namespace duchamp
41{
42
43
44  class FitsHeader; // foreshadow this so that Param knows it exists
45
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.
52
53  class Param
54  {
55  public:
56    /// @brief Default constructor.
57    Param();
58
59    /// @brief Copy constructor for Param.
60    Param(const Param& p);
61
62    /// @brief Assignment operator for Param.
63    Param& operator= (const Param& p);
64
65    /// @brief Destructor function. 
66    virtual ~Param();
67
68    /// @brief Define the default values of each parameter.
69    void  defaultValues();
70
71    //-----------------
72    // Functions in param.cc
73    //
74    /// @brief Parse the command line parameters correctly.
75    int    getopts(int argc, char ** argv, std::string progname="Duchamp");
76
77    /// @brief Read in parameters from a disk file.
78    int    readParams(std::string paramfile);
79
80    /// @brief Check the parameter list for inconsistencies
81    void   checkPars();
82
83    /// @brief Copy certain necessary FITS header parameters from a FitsHeader object
84    void   copyHeaderInfo(FitsHeader &head);
85
86    /// @brief Determine filename in which to save the mask array.
87    std::string outputMaskFile();
88
89    /// @brief Determine filename in which to save the smoothed array.
90    std::string outputSmoothFile();
91
92    /// @brief Determine filename in which to save the reconstructed array.
93    std::string outputReconFile();
94
95    /// @brief Determine filename in which to save the residual array from the atrous reconstruction.
96    std::string outputResidFile();
97
98    /// @brief Print the parameter set in a readable fashion.
99    friend std::ostream& operator<< ( std::ostream& theStream, Param& par);
100    friend class Image;
101
102    //------------------
103    // Functions in FitsIO/subsection.cc
104    //
105    /// @brief Make sure the subsection strings are OK.
106    int    verifySubsection();
107
108    /// @brief Set the correct offset values for each axis
109    void   setOffsets(struct wcsprm *wcs);
110
111    /// @brief Set the correct offset values for each axis
112    void   setOffsets(struct wcsprm &wcs);
113
114    //------------------
115    // These are in param.cc
116    /// @brief Is a pixel value a BLANK?
117    bool   isBlank(float &value);
118
119    /// @brief Is a given channel flagged as being in the Milky Way?           
120    bool   isInMW(int z);
121
122    /// @brief Is a given pixel position OK for use with stats calculations?
123    bool   isStatOK(int x, int y, int z);
124
125    /// @brief Make a mask array -- an array saying whether each pixel is BLANK or not
126    bool  *makeBlankMask(float *array, int size);
127
128    /// @brief Make a mask array -- an array saying whether each pixel is able to be used for statistics calculations
129    bool *makeStatMask(float *array, long *dim);
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    //
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    //
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;};
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;};
178    bool   getFlagOutputMask(){return flagOutputMask;};
179    void   setFlagOutputMask(bool flag){flagOutputMask=flag;};
180    std::string getFileOutputMask(){return fileOutputMask;};
181    void   setFileOutputMask(std::string s){fileOutputMask=s;};
182    bool   getFlagMaskWithObjectNum(){return flagMaskWithObjectNum;};
183    void   setFlagMaskWithObjectNum(bool flag){flagMaskWithObjectNum=flag;};
184    bool   getFlagOutputSmooth(){return flagOutputSmooth;};
185    void   setFlagOutputSmooth(bool flag){flagOutputSmooth=flag;};
186    std::string getFileOutputSmooth(){return fileOutputSmooth;};
187    void   setFileOutputSmooth(std::string s){fileOutputSmooth=s;};
188    bool   getFlagOutputRecon(){return flagOutputRecon;};
189    void   setFlagOutputRecon(bool flag){flagOutputRecon=flag;};
190    std::string getFileOutputRecon(){return fileOutputRecon;};
191    void   setFileOutputRecon(std::string s){fileOutputRecon=s;};
192    bool   getFlagOutputResid(){return flagOutputResid;};
193    void   setFlagOutputResid(bool flag){flagOutputResid=flag;};
194    std::string getFileOutputResid(){return fileOutputResid;};
195    void   setFileOutputResid(std::string s){fileOutputResid=s;};
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;};
202    std::string getAnnotationType(){return annotationType;};
203    void   setAnnotationType(std::string s){annotationType=s;};
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;};
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;};
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;};
243    std::string getNewFluxUnits(){return newFluxUnits;};
244    void setNewFluxUnits(std::string s){newFluxUnits=s;};
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    //
266    unsigned int   getMinPix(){return minPix;};
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;};
273    float  getGrowthThreshold(){return growthThreshold;};
274    void   setGrowthThreshold(float f){growthThreshold=f;};
275    bool   getFlagUserGrowthThreshold(){return flagUserGrowthThreshold;};
276    void   setFlagUserGrowthThreshold(bool b){flagUserGrowthThreshold=b;};
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);};
290    bool   getFlagRobustStats(){return flagRobustStats;};
291    void   setFlagRobustStats(bool flag){flagRobustStats=flag;};
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
347    /// @brief Are we in verbose mode?
348    bool   isVerbose(){return verbose;};
349    void   setVerbosity(bool f){verbose=f;};
350 
351  private:
352    // Input files
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.
360
361    bool       usePrevious;      ///< Whether to read the detections from a previously-created log file
362    std::string objectList;      ///< List of objects to re-plot
363
364    // Output files
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?
379    std::string fileOutputRecon; ///< The name of the reconstructed cube file
380    bool        flagOutputResid; ///< Should the residuals from the reconstruction be written to a FITS file?
381    std::string fileOutputResid; ///< The name of the residual cube file
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.
394
395    // Cube related parameters
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.
403
404    // Milky-Way parameters
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
408
409    // Trim-related
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;
416
417    // Subsection offsets
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
423
424    // Baseline related
425    bool        flagBaseline;    ///< Whether to do baseline subtraction before reconstruction and/or searching.
426
427    // Detection-related
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.
431
432    // Object growth
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
437
438    // FDR analysis
439    bool        flagFDR;         ///< Should the FDR method be used?
440    float       alphaFDR;        ///< Alpha value for FDR detection algorithm
441
442    // Basic detection
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.
449
450    // Smoothing of the cube
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).
457
458    // A trous reconstruction parameters
459    bool   flagATrous;      ///< Are we using the a trous reconstruction?
460    int    reconDim;        ///< How many dimensions to use for the reconstruction?
461    int    scaleMin;        ///< Min scale used in a trous reconstruction
462    int    scaleMax;        ///< Max scale used in a trous reconstruction
463    float  snrRecon;        ///< SNR cutoff used in a trous reconstruction (only wavelet coefficients that survive this threshold are kept)
464    Filter reconFilter;     ///< The filter used for reconstructions.
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.
467
468    // Volume-merging parameters
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
472    int    minChannels;     ///< Minimum no. of channels to make an object
473
474    // Input-Output related
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.
481
482  };
483
484  //===========================================================================
485
486
487  /// @brief Convert a string to lowercase.
488  std::string makelower( std::string s );
489
490}
491#endif
Note: See TracBrowser for help on using the repository browser.