Ejemplo n.º 1
0
void 
astrometryC(FL_OBJECT *obj, long val) 

{
  int m;
  int x, y, z;

  m = fl_get_menu(obj);
  switch (m) {
  case EDIT_PARAMETERS:
    edit_parameters(obj, m);
    break;
  case DETECT_STARS:
    detect_stars(frame, state.control[state.control_num]);
    break;
  case MATCH_STARS:
    match_stars(frame, state.control[state.control_num]);
    break;
  case SAVE_STAR_LIST:
    star_list(frame, state.control[state.control_num]);
    break;
  case LOAD_STAR_LIST:
    load_star_list(frame, state.control[state.control_num]);
    break;
  case DO_ASTROMETRY:
    state.doastr = 1;
    fl_get_mouse(&x, &y, &z);
    fl_set_mouse(0, 0);
    fl_set_mouse(x, y);
    break;
  case OPTIONS:
    edit_options(obj, m);
    break;
  case CATALOGS:
    edit_catalogs(obj, m);
    break;
  case SAVE_SETTINGS:
    show_settings(obj, m);
    break;
  case SEND_MAIL:
    edit_mail(obj, m);
    break;
  case SHOW_REPORT:
    show_report();
    break;
  }
}
Ejemplo n.º 2
0
void StarFinder::roughlyFitBrightStars(
    const std::vector<PotentialStar*>& obj_list,
    Function2D *f,double *out_sigma)
{
    // obj_list is already sorted by magnitude
    // make a new list with just the 50 brightest objects:
    std::vector<PotentialStar*> bright_list(
        obj_list.begin(),
        obj_list.begin()+int(_nstart1*obj_list.size()));

    // now sort this list by size
    std::sort(bright_list.begin(),bright_list.end(),
              std::mem_fun(&PotentialStar::isSmallerThan));

    xdbg<<"brightlist is:\n";
    const int twenty = std::min(20,int(bright_list.size()));
    for(int i=0; i<twenty; ++i) {
        xdbg<<bright_list[i]->getMag()<<" , "<<
            bright_list[i]->getSize()<<std::endl;
    }
    if (bright_list.size() > 20) {
        xdbg<<"...  (total of "<<bright_list.size()<<" elements)\n";
    }
    // Of the smallest 20, find the 5 that form the tightest peak
    // Originally I hardcoded this number as 5, but now it is calculated
    // from _star_frac.
    int five = int(0.5*_star_frac*bright_list.size());
    xdbg<<"'five' = "<<five<<std::endl;
    if (five < 5) {
        five = 5;
        xdbg<<"'five' => "<<five<<std::endl; 
    }
    if (3*five-1 >= int(bright_list.size())) {
        std::ostringstream err;
        err<<"Too few objects in bright_list.  Increase startn1.";
        throw StarFinderException(err.str());
    }
    int peak_start = 0;
    double peakWidth = bright_list[five-1]->getSize()-bright_list[0]->getSize();
    for(int k=1;k<=2*five;++k) {
        Assert(k+five-1<int(bright_list.size()));
        double sizeRange = bright_list[k+five-1]->getSize() -
            bright_list[k]->getSize();
        if (sizeRange < peakWidth) {
            peakWidth = bright_list[k+five-1]->getSize() -
                bright_list[k]->getSize();
            peak_start = k;
        }
    }
    xdbg<<"found peak starting at "<<peak_start<<
        " with width "<<peakWidth<<std::endl;

    int k1=peak_start, k2=peak_start+five;
    // Now expand list to be 2*bin_size1 wide
    while (
        k1 > 0 && bright_list[peak_start+2]->getSize() -
        bright_list[k1-1]->getSize() < _bin_size1) {
        --k1;
    }
    const int nbright = bright_list.size();
    while (
        k2 < nbright && 
        bright_list[k2]->getSize() - bright_list[k1]->getSize() < 2.*_bin_size1) {
        ++k2;
    }
    xdbg<<"expanded to "<<k1<<','<<k2<<std::endl;

    // Call these objects in the expanded peak stars
    std::vector<PotentialStar*> star_list(
        bright_list.begin()+k1, bright_list.begin()+k2);

    // Fit f using a linear fit with 2 sigma clipping
    fitStellarSizes(f,0,2.,star_list,out_sigma);

    // if sigma is too big, drop either the first or last "star" and try again.
    while(*out_sigma > _max_rms && star_list.size() > 4) {
        double diff1 = star_list.front()->getSize() -
            (*f)(star_list.front()->getPos());
        double diff2 = star_list.back()->getSize() -
            (*f)(star_list.back()->getPos());

        if (std::abs(diff1) > std::abs(diff2)) {
            star_list.erase(star_list.begin());
            xdbg<<"Erased first star.  New size = "<<star_list.size()<<std::endl;
        } else {
            star_list.erase(star_list.end()-1);
            xdbg<<"Erased last star.  New size = "<<star_list.size()<<std::endl;
        }
        fitStellarSizes(f,0,2.,star_list,out_sigma);
    }
}