source: trunk/src/Cubes/cubes_extended.cc @ 872

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

Minor tweaks to the sorting of parameters, so that everything is considered appropriately. Some things, like peak flux, do not need a valid WCS to work, so needed to change the logic slightly.

File size: 4.6 KB
Line 
1// -----------------------------------------------------------------------
2// cubes_extended.cc: Extra member functions for the Cube class, that
3//                    depend on extra classes.
4// -----------------------------------------------------------------------
5// Copyright (C) 2006, Matthew Whiting, ATNF
6//
7// This program is free software; you can redistribute it and/or modify it
8// under the terms of the GNU General Public License as published by the
9// Free Software Foundation; either version 2 of the License, or (at your
10// option) any later version.
11//
12// Duchamp is distributed in the hope that it will be useful, but WITHOUT
13// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
14// FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
15// for more details.
16//
17// You should have received a copy of the GNU General Public License
18// along with Duchamp; if not, write to the Free Software Foundation,
19// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA
20//
21// Correspondence concerning Duchamp may be directed to:
22//    Internet email: Matthew.Whiting [at] atnf.csiro.au
23//    Postal address: Dr. Matthew Whiting
24//                    Australia Telescope National Facility, CSIRO
25//                    PO Box 76
26//                    Epping NSW 1710
27//                    AUSTRALIA
28// -----------------------------------------------------------------------
29#include <unistd.h>
30#include <iostream>
31#include <iomanip>
32#include <vector>
33#include <algorithm>
34#include <string>
35#include <math.h>
36
37#include <wcslib/wcs.h>
38
39#include <duchamp/duchamp.hh>
40#include <duchamp/param.hh>
41#include <duchamp/fitsHeader.hh>
42#include <duchamp/Cubes/cubes.hh>
43#include <duchamp/Detection/detection.hh>
44#include <duchamp/Detection/columns.hh>
45#include <duchamp/Utils/utils.hh>
46#include <duchamp/Utils/mycpgplot.hh>
47#include <duchamp/Utils/Statistics.hh>
48using namespace mycpgplot;
49using namespace Statistics;
50
51namespace duchamp
52{
53
54  using namespace Column;
55
56  void Cube::sortDetections()
57  {
58    ///  @details
59    ///  A front end to the sort-by functions.
60    ///  If there is a good WCS, the detection list is sorted by the requested parameter.
61    ///  Otherwise, it is sorted by increasing z-pixel value.
62    ///  The ID numbers are then re-calculated.
63 
64//     if(this->head.isWCS()) SortByVel(*this->objectList);
65//     else SortByZ(*this->objectList);
66    if(!this->head.isWCS()){
67      if(this->par.getSortingParam()=="ra"){
68        duchampWarning("sortDetections","No good WCS, so sorting by x-value");
69        SortDetections(*this->objectList, "x-value");
70      }
71      else if(this->par.getSortingParam()=="dec"){
72        duchampWarning("sortDetections","No good WCS, so sorting by y-value");
73        SortDetections(*this->objectList, "y-value");
74      }
75      else if(this->par.getSortingParam()=="vel" || this->par.getSortingParam()=="w50"){
76        duchampWarning("sortDetections","No good WCS, so sorting by z-value");
77        SortDetections(*this->objectList, "z-value");
78      }
79      else {
80        SortDetections(*this->objectList, this->par.getSortingParam());
81      }
82    }
83    else SortDetections(*this->objectList, this->par.getSortingParam());
84    for(size_t i=0; i<this->objectList->size();i++)
85      this->objectList->at(i).setID(i+1);
86
87  }
88  //--------------------------------------------------------------------
89
90  void Cube::readSavedArrays()
91  {
92    /// @details
93    ///  This function reads in reconstructed and/or smoothed arrays that have
94    ///   been saved on disk in FITS files.
95    ///  To do this it calls the functions Cube::readReconCube() and
96    ///   Cube::readSmoothCube().
97    ///  The Param set is consulted to determine which of these arrays are needed.
98
99    // If the reconstructed array is to be read in from disk
100    if( this->par.getFlagReconExists() && this->par.getFlagATrous() ){
101      std::cout << "Reading reconstructed array: "<<std::endl;
102      if( this->readReconCube() == FAILURE){
103        std::stringstream errmsg;
104        errmsg <<"Could not read in existing reconstructed array.\n"
105               <<"Will perform reconstruction using assigned parameters.\n";
106        duchampWarning("Duchamp", errmsg.str());
107        this->par.setFlagReconExists(false);
108      }
109      else std::cout << "Reconstructed array available.\n";
110    }
111
112    if( this->par.getFlagSmoothExists() && this->par.getFlagSmooth() ){
113      std::cout << "Reading smoothed array: "<<std::endl;
114      if( this->readSmoothCube() == FAILURE){
115        std::stringstream errmsg;
116        errmsg <<"Could not read in existing smoothed array.\n"
117               <<"Will smooth the cube using assigned parameters.\n";
118        duchampWarning("Duchamp", errmsg.str());
119        this->par.setFlagSmoothExists(false);
120      }
121      else std::cout << "Smoothed array available.\n";
122    }
123   
124  }
125
126}
Note: See TracBrowser for help on using the repository browser.