diff --git a/src/FollowUp/Nomad/FStatNomad.cpp b/src/FollowUp/Nomad/FStatNomad.cpp index 8e6d7cf0434a76798832e58f088756c092600bcd..372950129921b660c975ef708b86a34bab6ee4db 100644 --- a/src/FollowUp/Nomad/FStatNomad.cpp +++ b/src/FollowUp/Nomad/FStatNomad.cpp @@ -1077,8 +1077,8 @@ int main(int argc, char *argv[]) { MFCSearch->write_dts_file(); } - if (MFCSearch->HybridSearch()) { - MFCSearch->HybridSearchCreateLattice(MFCSearch->Cohmetric(),MFCSearch->HybridSearchMismatch(),MFCSearch->HybridSearchLattice()); + if (MFCSearch->FinalHybridSearch()) { + MFCSearch->HybridSearchCreateLattice(MFCSearch->Cohmetric(),MFCSearch->FinalHybridSearchMismatch(),MFCSearch->FinalHybridSearchLattice()); } if (MFCSearch->FinalMinMeshCoarseningExponent() != 0 && MFCSearch->FinalMaxMeshCoarseningExponent() != 0) { @@ -1360,6 +1360,13 @@ INT4 FCSearch::XLALInitUserVars ( int argc, char *argv[] ) strcpy(uvar->HybridSearchLattice, "an-star"); uvar->HybridSearchPoints = 16; + uvar->FinalHybridSearch = FALSE; + uvar->FinalHybridSearchMismatch = 0.8; + uvar->FinalHybridSearchLattice = (char*)LALCalloc( 16, sizeof(CHAR) ); + strcpy(uvar->FinalHybridSearchLattice, "an-star"); + uvar->FinalHybridSearchPoints = 16; + + uvar->metricType = MTAVFSTAT; SignalIsKnown = FALSE; @@ -1521,6 +1528,10 @@ INT4 FCSearch::XLALInitUserVars ( int argc, char *argv[] ) XLALRegisterUvarMember( HybridSearchMismatch,REAL8, 0, OPTIONAL, "Hybrid search maximal mismatch"); XLALRegisterUvarMember( HybridSearchLattice,STRING, 0, OPTIONAL, "Hybrid search lattice type: 'an-star' or 'cubic'"); XLALRegisterUvarMember( HybridSearchPoints,INT4, 0, OPTIONAL, "Hybrid search number of points"); + XLALRegisterUvarMember( FinalHybridSearch,BOOLEAN, 0, OPTIONAL, "Final do hybrid search (grid search in the Nomad search step)"); + XLALRegisterUvarMember( FinalHybridSearchMismatch,REAL8, 0, OPTIONAL, "Final hybrid search maximal mismatch"); + XLALRegisterUvarMember( FinalHybridSearchLattice,STRING, 0, OPTIONAL, "Final hybrid search lattice type: 'an-star' or 'cubic'"); + XLALRegisterUvarMember( FinalHybridSearchPoints,INT4, 0, OPTIONAL, "Final hybrid search number of points"); XLALRegisterUvarMember( metricType, INT4, 0, OPTIONAL, "Type of metric to compute: 0=phase-metric, 1=average F-metric"); /* read cmdline & cfgfile */ @@ -1961,6 +1972,11 @@ INT4 FCSearch::XLALInitUserVars ( int argc, char *argv[] ) HybridSearchLattice(uvar->HybridSearchLattice); HybridSearchPoints(uvar->HybridSearchPoints); + FinalHybridSearch(uvar->FinalHybridSearch); + FinalHybridSearchMismatch(uvar->FinalHybridSearchMismatch); + FinalHybridSearchLattice(uvar->FinalHybridSearchLattice); + FinalHybridSearchPoints(uvar->FinalHybridSearchPoints); + dopplermax(uvar->dopplermax); if ( uvar->ComputeDTS && uvar->FStatSearchType == CHSEARCH ) { diff --git a/src/FollowUp/Nomad/FStatNomad.h b/src/FollowUp/Nomad/FStatNomad.h index 9c85fcfc568234988b2a424d45b597824cce1aab..0519cc20c428fb1e406f452e8fe2d375b2545be3 100644 --- a/src/FollowUp/Nomad/FStatNomad.h +++ b/src/FollowUp/Nomad/FStatNomad.h @@ -174,6 +174,10 @@ extern "C" { REAL8 HybridSearchMismatch; CHAR *HybridSearchLattice; INT4 HybridSearchPoints; + BOOLEAN FinalHybridSearch; + REAL8 FinalHybridSearchMismatch; + CHAR *FinalHybridSearchLattice; + INT4 FinalHybridSearchPoints; INT4 metricType; diff --git a/src/FollowUp/Nomad/libFStatNomad.cpp b/src/FollowUp/Nomad/libFStatNomad.cpp index 778d383b616ada9750cf4751a1fb80fd36399fdf..1bf2f76119933434c1c63d9aa3f08129839bd327 100644 --- a/src/FollowUp/Nomad/libFStatNomad.cpp +++ b/src/FollowUp/Nomad/libFStatNomad.cpp @@ -3020,10 +3020,10 @@ INT4 FStatNomad::DoSearch(Display out,vector<ExPoint> &epv,INT4 fstatsearchtype, mads.set_user_search ( &hybrid_search ); } - if (HybridSearch()){ + if (FinalHybridSearch()){ FCHybridSearch *hybrid_search = new FCHybridSearch ( p ); hybrid_search->Tiling(tiling); - hybrid_search->NumberPoints(var_HybridSearchPoints); + hybrid_search->NumberPoints(var_FinalHybridSearchPoints); hybrid_search->Directions(directions); printf("SET HYBRID SEARCH\n"); mads.set_user_search ( hybrid_search ); @@ -3342,7 +3342,7 @@ XLALGetDetectorIDs( } /* XLALGetDetectorIDs() */ void SCHybridSearch::search( Mads & mads, int &nb_search_pts, bool &stop, stop_type &stop_reason, success_type &success, bool &count_search, const Eval_Point *& new_feas_inc, const Eval_Point *& new_infeas_inc){ -// printf("ENTER HYBRID SEARCH!\n"); + new_feas_inc = new_infeas_inc = NULL; nb_search_pts = 0; success = UNSUCCESSFUL; @@ -3407,13 +3407,11 @@ void SCHybridSearch::search( Mads & mads, int &nb_search_pts, bool &stop, stop_t LatticeTilingLocator *tloc = XLALCreateLatticeTilingLocator(tiling); const UINT8 total = XLALTotalLatticeTilingPoints( itr ); -// printf("TLOC CREATED, n=%d.\n",n); gsl_matrix *points = gsl_matrix_calloc(n,1); for (INT4 i = 0; i < n; i++){ -// printf("%d:%.16f\n",i,(*x)[i].value()/directions.at(i).scale); gsl_matrix_set(points,i,0,(*x)[i].value()/directions.at(i).scale); } -// printf("MATRIX SET DONE.\n"); + gsl_matrix *nearest_points = NULL; gsl_matrix *GAMAT( nearest_points, n, np ); @@ -3433,8 +3431,6 @@ void SCHybridSearch::search( Mads & mads, int &nb_search_pts, bool &stop, stop_t XLALNearestLatticeTilingPoints (tloc, points, &nearest_points, NULL); -// printf("NEAREST POINTS\n"); - Evaluator_Control & ev_control = mads.get_evaluator_control(); for (INT4 i = 0; i < nearest_points->size2; i++) { @@ -3448,32 +3444,14 @@ void SCHybridSearch::search( Mads & mads, int &nb_search_pts, bool &stop, stop_t for (INT4 j = 0; j < n; j++) { (*tk)[j] = (directions.at(j).scale * gsl_vector_get(cv,j)); -// printf("%.16f\t",gsl_vector_get(cv,j)); } -// printf("\n"); + ev_control.add_eval_point ( tk, _p.out().get_search_dd(), false, Double(), Double(), Double(), Double()); - ev_control.add_eval_point ( tk , - _p.out().get_search_dd() , - false , - Double() , - Double() , - Double() , - Double() ); - - + gsl_matrix_free(points); + gsl_matrix_free(nearest_points); gsl_vector_free(cv); - } - - - -// printf("EXIT HYBRID SEARCH\n"); - - - // Evaluator_Control: - - - // add the new point to the ordered list of search trial points: +} nb_search_pts = 1; @@ -3494,7 +3472,7 @@ void SCHybridSearch::search( Mads & mads, int &nb_search_pts, bool &stop, stop_t } void FCHybridSearch::search ( Mads &mads, int &nb_search_pts, bool &stop, stop_type &stop_reason, success_type &success, bool &count_search , const Eval_Point *& new_feas_inc, const Eval_Point *& new_infeas_inc ) { -// printf("ENTER HYBRID SEARCH!\n"); + new_feas_inc = new_infeas_inc = NULL; nb_search_pts = 0; success = UNSUCCESSFUL; @@ -3559,13 +3537,12 @@ void FCHybridSearch::search ( Mads &mads, int &nb_search_pts, bool &stop, stop_t LatticeTilingLocator *tloc = XLALCreateLatticeTilingLocator(tiling); const UINT8 total = XLALTotalLatticeTilingPoints( itr ); -// printf("TLOC CREATED, n=%d.\n",n); + gsl_matrix *points = gsl_matrix_calloc(n,1); for (INT4 i = 0; i < n; i++){ -// printf("%d:%.16f\n",i,(*x)[i].value()/directions.at(i).scale); gsl_matrix_set(points,i,0,(*x)[i].value()/directions.at(i).scale); } -// printf("MATRIX SET DONE.\n"); + gsl_matrix *nearest_points = NULL; gsl_matrix *GAMAT( nearest_points, n, np ); @@ -3585,8 +3562,6 @@ void FCHybridSearch::search ( Mads &mads, int &nb_search_pts, bool &stop, stop_t XLALNearestLatticeTilingPoints (tloc, points, &nearest_points, NULL); -// printf("NEAREST POINTS\n"); - Evaluator_Control & ev_control = mads.get_evaluator_control(); for (INT4 i = 0; i < nearest_points->size2; i++) { @@ -3600,46 +3575,19 @@ void FCHybridSearch::search ( Mads &mads, int &nb_search_pts, bool &stop, stop_t for (INT4 j = 0; j < n; j++) { (*tk)[j] = (directions.at(j).scale * gsl_vector_get(cv,j)); -// printf("%.16f\t",gsl_vector_get(cv,j)); } -// printf("\n"); + ev_control.add_eval_point ( tk, _p.out().get_search_dd(), false, Double(), Double(), Double(), Double()); - ev_control.add_eval_point ( tk , - _p.out().get_search_dd() , - false , - Double() , - Double() , - Double() , - Double() ); - - + gsl_matrix_free(points); + gsl_matrix_free(nearest_points); gsl_vector_free(cv); } - - -// printf("EXIT HYBRID SEARCH\n"); - - - // Evaluator_Control: - - - // add the new point to the ordered list of search trial points: - nb_search_pts = 1; - // evaluation: new_feas_inc = new_infeas_inc = NULL; - ev_control.eval_list_of_points ( _type , - mads.get_true_barrier() , - mads.get_sgte_barrier() , - mads.get_pareto_front() , - stop , - stop_reason , - new_feas_inc , - new_infeas_inc , - success ); + ev_control.eval_list_of_points ( _type, mads.get_true_barrier(), mads.get_sgte_barrier(), mads.get_pareto_front(), stop, stop_reason, new_feas_inc, new_infeas_inc, success); } diff --git a/src/FollowUp/Nomad/libFStatNomad.h b/src/FollowUp/Nomad/libFStatNomad.h index 0941e610e00654a388cdbb2e4b2aabe825bac649..1693a1f2a66cccf1047fa640479627d63787bea1 100644 --- a/src/FollowUp/Nomad/libFStatNomad.h +++ b/src/FollowUp/Nomad/libFStatNomad.h @@ -2051,6 +2051,39 @@ public: return var_HybridSearchPoints; } + void FinalHybridSearch(BOOLEAN v){ + var_FinalHybridSearch = v; + } + + BOOLEAN FinalHybridSearch(){ + return var_FinalHybridSearch; + } + + void FinalHybridSearchMismatch(REAL8 v){ + var_FinalHybridSearchMismatch = v; + } + + REAL8 FinalHybridSearchMismatch(){ + return var_FinalHybridSearchMismatch; + } + + void FinalHybridSearchLattice(CHAR* v){ + var_FinalHybridSearchLattice = v; + } + + CHAR* FinalHybridSearchLattice(){ + return var_FinalHybridSearchLattice; + } + + void FinalHybridSearchPoints(INT4 v){ + var_FinalHybridSearchPoints = v; + } + + INT4 FinalHybridSearchPoints(){ + return var_FinalHybridSearchPoints; + } + + REAL8 DoPredictFStat(INT4 fstatsearchtype,LALSegList *segList); UsefulStageVariables usefulParams; @@ -2157,9 +2190,13 @@ private: REAL8 var_SignalPeriod; BOOLEAN var_HybridSearch; + BOOLEAN var_FinalHybridSearch; REAL4 var_HybridSearchMismatch; CHAR *var_HybridSearchLattice; INT4 var_HybridSearchPoints; + REAL4 var_FinalHybridSearchMismatch; + CHAR *var_FinalHybridSearchLattice; + INT4 var_FinalHybridSearchPoints; UINT8 trials_cnt; std::vector<UINT8> trials_vec;