diff --git a/src/tutorials/java/AffinagePleiades/AffinageRugged.java b/src/tutorials/java/AffinagePleiades/AffinageRugged.java
index bbc8a11b042de74b3fdc004b36fb470adda634d9..e1485707d30e79987e853ee46c7a6c1c8044ada3 100644
--- a/src/tutorials/java/AffinagePleiades/AffinageRugged.java
+++ b/src/tutorials/java/AffinagePleiades/AffinageRugged.java
@@ -63,8 +63,8 @@ public class AffinageRugged {
 
             // Initialize Orekit, assuming an orekit-data folder is in user home directory
             File home       = new File(System.getProperty("user.home"));
-            //File orekitData = new File(home, "workspace/data/orekit-data");
-            File orekitData = new File(home, "COTS/orekit-data");
+            File orekitData = new File(home, "workspace/data/orekit-data");
+            //File orekitData = new File(home, "COTS/orekit-data");
             DataProvidersManager.getInstance().addProvider(new DirectoryCrawler(orekitData));
 
             
@@ -117,32 +117,43 @@ public class AffinageRugged {
            
             
             Vector3D position = lineSensor.getPosition(); // This returns a zero vector since we set the relative position of the sensor w.r.T the satellite to 0.
-            AbsoluteDate firstLineDate = lineSensor.getDate(pleiadesViewingModel.dimension/2);
-            System.out.format("date %s %n",firstLineDate.toString());
+            AbsoluteDate firstLineDate = lineSensor.getDate(0);
             Vector3D los = lineSensor.getLOS(firstLineDate,0);
             GeodeticPoint upLeftPoint = rugged.directLocation(firstLineDate, position, los);
-            System.out.format(Locale.US, "upper left point: φ = %8.10f °, λ = %8.10f °, h = %8.3f m%n",
-                              FastMath.toDegrees(upLeftPoint.getLatitude()),
-                              FastMath.toDegrees(upLeftPoint.getLongitude()),
-                              upLeftPoint.getAltitude());
+          
             los = lineSensor.getLOS(firstLineDate,pleiadesViewingModel.dimension-1);
-            GeodeticPoint upRightPoint = rugged.directLocation(firstLineDate, position, los);
-            System.out.format(Locale.US, "upper right point: φ = %8.10f °, λ = %8.10f °, h = %8.3f m%n",
-                              FastMath.toDegrees(upRightPoint.getLatitude()),
-                              FastMath.toDegrees(upRightPoint.getLongitude()),upRightPoint.getAltitude());                   
-            los = lineSensor.getLOS(firstLineDate,pleiadesViewingModel.dimension/2);
-            GeodeticPoint centerPoint = rugged.directLocation(firstLineDate, position, los);
-            System.out.format(Locale.US, "center point: φ = %8.10f °, λ = %8.10f °, h = %8.3f m%n",
+            //GeodeticPoint upRightPoint = rugged.directLocation(firstLineDate, position, los);               
+            
+            
+            AbsoluteDate lineDate = lineSensor.getDate(pleiadesViewingModel.dimension/2);
+            los = lineSensor.getLOS(lineDate,pleiadesViewingModel.dimension/2);
+            GeodeticPoint centerPoint = rugged.directLocation(lineDate, position, los);
+            System.out.format(Locale.US, "center geodetic position : φ = %8.10f °, λ = %8.10f °, h = %8.3f m%n",
                               FastMath.toDegrees(centerPoint.getLatitude()),
                               FastMath.toDegrees(centerPoint.getLongitude()),centerPoint.getAltitude());                   
             
+
+              
+            int pixelPosition = pleiadesViewingModel.dimension-1;
+            los = lineSensor.getLOS(firstLineDate,pixelPosition);
+            GeodeticPoint upperRight = rugged.directLocation(firstLineDate, position, los);
+           
+            AbsoluteDate lineDate_y = lineSensor.getDate(pleiadesViewingModel.dimension-1);
+            los = lineSensor.getLOS(lineDate_y,0);
+            GeodeticPoint lowerLeft = rugged.directLocation(lineDate_y, position, los);
+     
             
-            System.out.format(" **** Add roll and pitch values **** %n");       
+            double GSD_X = DistanceTools.computeDistanceRad(upLeftPoint.getLongitude(), upLeftPoint.getLatitude(),upperRight.getLongitude() , upperRight.getLatitude())/pleiadesViewingModel.dimension;
+            double GSD_Y = DistanceTools.computeDistanceRad(upLeftPoint.getLongitude(), upLeftPoint.getLatitude(),lowerLeft.getLongitude() , lowerLeft.getLatitude())/pleiadesViewingModel.dimension;
             
             
-            double rollValue =  FastMath.toRadians( 0.1);
-            double pitchValue = FastMath.toRadians(-0.3);
-            double factorValue = 0.5;
+            System.out.format(" GSD X %2.2f Y %2.2f **** %n", GSD_X, GSD_Y);    
+            
+            System.out.format(" **** Add roll and pitch values **** %n");       
+            
+            double rollValue =  FastMath.toRadians(-0.01);
+            double pitchValue = FastMath.toRadians(0.02);
+            double factorValue = 1.05;
                         
             System.out.format("roll : %3.5f pitch : %3.5f factor : %3.5f \n",rollValue,pitchValue,factorValue);
                         
@@ -172,9 +183,29 @@ public class AffinageRugged {
             int lineSampling = 1000;
             int pixelSampling = 1000;		
             //measure.CreateMeasure(lineSampling, pixelSampling); 
-            measure.CreateNoisyMeasure(lineSampling, pixelSampling); // Test with noisy measures
+            
+            //double pixErr = 0.0;
+            //double altErr = 0.0;
+            final double[] pixErr = new double[4];
+            pixErr[0] = 0; // lat mean
+            pixErr[1] = 0.1; // lat std
+            pixErr[2] = 0; // lon mean
+            pixErr[3] = 0.1; // lon std
+            
+            final double[] altErr = new double[2];
+            altErr[0] = 1.0; //mean
+            altErr[1] = 3.0; //std  
+            measure.CreateNoisyMeasure(lineSampling, pixelSampling,pixErr,altErr); // Test with noisy measures
             System.out.format("nb TiePoints %d %n", measure.getMeasureCount());
 
+            System.out.format(" **** Initial Residuals  **** %n");
+            
+            LocalisationMetrics gtResiduals = new LocalisationMetrics(measure.getMapping(),rugged, false);
+            System.out.format("gt residuals max :  %3.4f mean %3.4f meters  %n",gtResiduals.getMaxResidual(),gtResiduals.getMeanResidual());
+             
+           
+            
+            
             System.out.format(" **** Reset Roll/Pitch/Factor **** %n");
             rugged.
             getLineSensor(pleiadesViewingModel.getSensorName()).
@@ -204,20 +235,20 @@ public class AffinageRugged {
             System.out.format(" **** Initial Residuals  **** %n");
             
             LocalisationMetrics initlialResiduals = new LocalisationMetrics(measure.getMapping(),rugged, false);
-            System.out.format("residuals max :  %3.4e mean %3.4e meters  %n",initlialResiduals.getMaxResidual(),initlialResiduals.getMeanResidual());
+            System.out.format("residuals max :  %3.4f mean %3.4f meters  %n",initlialResiduals.getMaxResidual(),initlialResiduals.getMeanResidual());
              
            
             
             System.out.format(" **** Start optimization  **** %n");
             // perform parameters estimation
-            int maxIterations = 15;
-            double convergenceThreshold =  1e-12;
+            int maxIterations = 100;
+            double convergenceThreshold =  1e-10;
             
             System.out.format("iterations max %d convergence threshold  %3.6e \n",maxIterations, convergenceThreshold);
 
             
             Optimum optimum = rugged.estimateFreeParameters(Collections.singletonList(measure.getMapping()), maxIterations,convergenceThreshold);
-            
+            System.out.format("max value  %3.6e %n",optimum.getResiduals().getMaxValue());
    
             System.out.format(" Optimization performed in %d iterations \n",optimum.getEvaluations());
 
@@ -247,12 +278,10 @@ public class AffinageRugged {
 
             LocalisationMetrics localisationResiduals = new LocalisationMetrics(measure.getMapping(),rugged, false);
             System.out.format("residuals max :  %3.4e mean %3.4e  meters %n",localisationResiduals.getMaxResidual(),localisationResiduals.getMeanResidual());
-            //RealVector residuals =  optimum.getResiduals();
-
-
+            LocalisationMetrics localisationResidualsDeg = new LocalisationMetrics(measure.getMapping(),rugged, true);
+            System.out.format("residuals max  :  %3.4e deg mean %3.4e  deg %n",localisationResidualsDeg.getMaxResidual(),localisationResidualsDeg.getMeanResidual());
             
             
-
         } catch (OrekitException oe) {
             System.err.println(oe.getLocalizedMessage());
             System.exit(1);