From d99838dd41520c3b5de2c87eedfe253b54b54e26 Mon Sep 17 00:00:00 2001
From: Alessandro Abrami <alessandro.abrami@elettra.eu>
Date: Wed, 8 Sep 2021 15:55:11 +0200
Subject: [PATCH] 2021/09/08: 	BRANCH(withFilters): modificato codice per
 gestire i casi in cui la quota calcolata cade fuori dai range del selector:
 al caso prende i limiti del range corrente.

---
 src/Stage2Filter.cpp | 42 +++++++++---------------------------------
 1 file changed, 9 insertions(+), 33 deletions(-)

diff --git a/src/Stage2Filter.cpp b/src/Stage2Filter.cpp
index ca37098..e062b99 100644
--- a/src/Stage2Filter.cpp
+++ b/src/Stage2Filter.cpp
@@ -283,42 +283,18 @@ bool Stage2Filter::correct_position(itpp::vec Focus){
 	#ifdef _DBG_STAGE2FILTER
 		cout << __func__ << " ... search within discrete positions ...." << endl;
 	#endif
-	vector<nominal_pos_t>::iterator it;
-	bool newpos_in_discrete = false;
-	for ( it = _sel.nominal_pos.begin(); it != _sel.nominal_pos.end(); ++it){
-		#ifdef _DBG_STAGE2FILTER
-			std::cout << " ------:: " << __func__ << " ";
-			std::cout << (*it).pos << " " << (*it).delta;
-			std::cout << std::endl;
-		#endif
-
-		if ( fabs(newpos - (*it).pos) <= (*it).delta ) {
-			#ifdef _DBG_STAGE2FILTER
-				cout << __func__ << " ... FOUND discrete position .... for " << newpos << endl;
-			#endif
-
-			newpos_in_discrete = true;
-			break;
-		}
-	}
 
-	if ( !newpos_in_discrete ) {
-		#ifdef _DBG_STAGE2FILTER
-			cout << __func__ << " ... search approx discrete position ...." << endl;
-		#endif
-
-		vector<double> dist;
-		vector<double> target;
-		for ( it = _sel.nominal_pos.begin(); it != _sel.nominal_pos.end(); ++it){
-			dist.push_back(fabs(newpos - (*it).pos));
-			target.push_back((*it).pos);
-		}
-
-		int minElementIndex = std::min_element(dist.begin(),dist.end()) - dist.begin();
-		newpos = target[minElementIndex];
+	//
+	// Codice di sotto: cosi' non si 'esce' dal selector corrente:
+	//
+	if ( fabs(d2) > fabs(_sel.nominal_pos[_sel.selector].delta) ) {
+		double v1 = fabs(newpos - (_sel.nominal_pos[_sel.selector].pos + _sel.nominal_pos[_sel.selector].delta) );
+		double v2 = fabs(newpos - (_sel.nominal_pos[_sel.selector].pos - _sel.nominal_pos[_sel.selector].delta) );
+		if ( v1 < v2 ) newpos = _sel.nominal_pos[_sel.selector].pos + 0.99 * _sel.nominal_pos[_sel.selector].delta;
+		else           newpos = _sel.nominal_pos[_sel.selector].pos - 0.99 * _sel.nominal_pos[_sel.selector].delta;
 
 		#ifdef _DBG_STAGE2FILTER
-			cout << __func__ << " ... NEW approx discrete position ....: " << newpos << endl;
+			cout << __func__ << " ... NEW approx discrete position ....: " << newpos << " on selector #:" << _sel.selector << endl;
 		#endif
 	}
 
-- 
GitLab