void StarFinder::fitStellarSizes( Function2D *f, int order, double sig_clip, const std::vector<PotentialStar*>& star_list, double *out_sigma) { // Make list of positions std::vector<Position> pos_list(star_list.size()); std::transform(star_list.begin(),star_list.end(),pos_list.begin(), std::mem_fun(&PotentialStar::getPos)); // Make list of sizes std::vector<double> sizelist(star_list.size()); std::transform(star_list.begin(),star_list.end(),sizelist.begin(), std::mem_fun(&PotentialStar::getSize)); // Use all stars in list (to start with anyway), so all true std::vector<bool> use_list(star_list.size(),true); if (int(star_list.size()) <= (order+1)*(order+2)/2) { std::ostringstream err; err<<"Not enough stars to do fit. "; err<<"Increase stars_per_bin or decrease fit_order."; throw StarFinderException(err.str()); } // Do the fit. double chisq; int dof; xdbg<<"before outlier fit\n"; f->outlierFit(order,sig_clip,pos_list,sizelist,&use_list,0,&chisq,&dof,0); xdbg<<"after outlier fit\n"; xdbg<<"chisq,dof,sigma = "<<chisq<<','<<dof<<','<< sqrt(chisq/dof)<<std::endl; *out_sigma = sqrt(chisq/dof); }
void call_list() { use_list(&g_list); }