source: branches/pixel-map-branch/src/Cubes/baseline.cc

Last change on this file was 246, checked in by Matthew Whiting, 17 years ago

Summary of changes:

  • Rather than storing centres, the Objects now keep the xSum, ySum etc and return xSum/float(numPix) as the result for xCentre.
  • To do this, we also keep track of the number of pixels in each object. Each time a pixel, scan or object is added, we increment the number by the correct amount.
  • These parameters are also calculated as we go, rather than all at once.
  • Detection::calcParams() changed to Detection::calcFluxes(), so that it just works out the flux-related parameters. Things like xCentre etc are done in the Objects.
  • areClose() improved to work at the Scan level, rather than looking at each pixel. It only compares Scans within the appropriate y-range.
  • Other functions simplified include logDetectionList() and trimImage().
  • Scan::join() and Scan::isCommon() changed to Scan::unite() and Scan::intersect().
File size: 2.2 KB
Line 
1#include <iostream>
2#include <iomanip>
3#include <param.hh>
4#include <ATrous/atrous.hh>
5#include <Cubes/cubes.hh>
6#include <Utils/feedback.hh>
7
8void Cube::removeBaseline()
9{
10  /**
11   *  A front-end to the getBaseline routine, specialised for the
12   *  Cube data structure. Calls getBaseline on each spectrum individually.
13   *  Upon exit, the original array minus its spectral baseline is stored
14   *   in this->array and the baseline is in this->baseline.
15   *  If the reconstructed array exists, the baseline is subtracted from
16   *   it as well.
17   */
18
19  float *spec     = new float[this->axisDim[2]];
20  float *thisBaseline = new float[this->axisDim[2]];
21  int numSpec = this->axisDim[0]*this->axisDim[1];
22
23  ProgressBar bar;
24  if(this->par.isVerbose()) bar.init(numSpec);
25  for(int pix=0; pix<numSpec; pix++){ // for each spatial pixel...
26
27    if(this->par.isVerbose() ) bar.update(pix+1);
28
29    for(int z=0; z<this->axisDim[2]; z++) 
30      spec[z] = this->array[z*numSpec + pix];
31
32    getBaseline(this->axisDim[2], spec, thisBaseline, this->par);
33
34    for(int z=0; z<this->axisDim[2]; z++) {
35      this->baseline[z*numSpec+pix] = thisBaseline[z];
36      if(!par.isBlank(this->array[z*numSpec+pix])){
37        this->array[z*numSpec+pix] -= thisBaseline[z];
38        if(this->reconExists) this->recon[z*numSpec+pix] -= thisBaseline[z];
39      }     
40    }
41
42  } 
43
44  delete [] spec;
45  delete [] thisBaseline;
46 
47  if(this->par.isVerbose()) bar.remove();
48}
49
50
51
52void Cube::replaceBaseline()
53{
54  /**
55   *  A routine to replace the baseline flux on the reconstructed array
56   *   (if it exists) and the fluxes of each of the detected objects (if any).
57   */
58
59  if(this->par.getFlagBaseline()){
60
61    for(int i=0;i<this->numPixels;i++){
62      if(!(this->par.isBlank(this->array[i])))
63        this->array[i] += this->baseline[i];
64    }
65
66    if(this->reconExists){
67      // if we made a reconstruction, we need to add the baseline back in
68      //   for plotting purposes
69      for(int i=0;i<this->numPixels;i++){
70        if(!(this->par.isBlank(this->array[i])))
71          this->recon[i] += this->baseline[i];
72      }
73    }
74 
75    for(int obj=0;obj<this->objectList.size();obj++){
76      // for each detection, correct the flux calculations.
77      this->objectList[obj].calcFluxes(this->array, this->axisDim);
78     
79    }
80   
81  }
82
83}
Note: See TracBrowser for help on using the repository browser.