[education/kstars] /: Control to allow autofocus backlash compensation to be toggled on or off

Jasem Mutlaq null at kde.org
Thu Oct 20 05:37:41 BST 2022


Git commit 22221736cb6399a48b4411b7f21c72cce1dcf795 by Jasem Mutlaq, on behalf of John Evans.
Committed on 20/10/2022 at 04:37.
Pushed by mutlaqja into branch 'master'.

Control to allow autofocus backlash compensation to be toggled on or off

This small MR adds a control to allow the backlash compensation performed by the Linear and Linear 1 Pass autofocus algorithms to be toggled on or off. Currently it is always on.

Currently the Linear and Linear 1 Pass autofocus algorithms perform backlash compensation on outward focus movements. This works fine if nothing else if performing backlash compensation but may cause conflicts if the device driver or focuser itself is performing backlash compensation.

So, for example, with the ASI EAF there is no device driver compensation, not is the device itself capable of performing backlash compensation so it is appropriate to allow the Linear and L1P algorithms to perform the backlash compensation.

For the Sense Sesto 2 focuser, the device driver has been written to perform backlash compensation. It this case it makes sense to allow the driver to perform the backlash compensation and for the autofocus algorithm to not perform any compensation.

Other focusers such as the MyFocuserPro 2 have the ability to store user defined backlash parameters on the firmware of the device. In this case the user may wish to use the device to perform the backlash compensation or to switch that off and allow he focus algorithm to do this.

For more sophisticated focusers with no backlash, this MR will allow the autofocus backlash compensation to be turned off speeding up the focus process.

The "AF Backlash Comp" checkbox is defaulted on, so existing users will not need to make changes to continue getting focus results.

M  +186  -64   doc/ekos-focus.docbook
M  +-    --    doc/ekos_focus.png
M  +-    --    doc/focus_ccdfw_group.png
M  +-    --    doc/focus_settings.png
A  +-    --    doc/optical_train_group.png
M  +32   -18   kstars/ekos/focus/focus.cpp
M  +1    -1    kstars/ekos/focus/focus.h
M  +268  -240  kstars/ekos/focus/focus.ui

https://invent.kde.org/education/kstars/commit/22221736cb6399a48b4411b7f21c72cce1dcf795

diff --git a/doc/ekos-focus.docbook b/doc/ekos-focus.docbook
index 96c76b29e..0aebc2836 100644
--- a/doc/ekos-focus.docbook
+++ b/doc/ekos-focus.docbook
@@ -191,6 +191,42 @@
     </itemizedlist>
   </sect3>
 
+  <sect3 id="optical-train-group">
+    <title>Optical Train Group</title>
+
+    <screenshot>
+      <screeninfo> Optical Train </screeninfo>
+
+      <mediaobject>
+        <imageobject>
+          <imagedata fileref="optical_train_group.png" format="PNG"
+                     width="50%"/>
+        </imageobject>
+
+        <textobject>
+          <phrase>Optical Train Settings</phrase>
+        </textobject>
+      </mediaobject>
+    </screenshot>
+
+    <para> The Optical Train group displays the currently selected Optical
+    Train. By default this will be the primary imaging train, but other trains
+    can be selected. The group consists of:</para>
+
+    <itemizedlist>
+      <listitem>
+        <para> <guibutton>Train</guibutton>: The Optical Train currently in
+        use by the Focus tab. Hover the mouse over this field for a more
+        detailed description of the selected train.</para>
+      </listitem>
+
+      <listitem>
+        <para> <guibutton>Edit Button</guibutton>: Brings up the Optical Train
+        dialog to view and potentially change the optical trains.</para>
+      </listitem>
+    </itemizedlist>
+  </sect3>
+
   <sect3 id="focus-focuser-group">
     <title>Focuser Group</title>
 
@@ -288,10 +324,10 @@
   </sect3>
 
   <sect3 id="focus-ccd-filter-wheel">
-    <title>CCD & Filter Wheel Group</title>
+    <title>Camera & Filter Wheel Group</title>
 
     <screenshot>
-      <screeninfo> Focus CCD & Filter Wheel Group </screeninfo>
+      <screeninfo> Focus Camera & Filter Wheel Group </screeninfo>
 
       <mediaobject>
         <imageobject>
@@ -299,22 +335,41 @@
         </imageobject>
 
         <textobject>
-          <phrase>Focus CCD & Filter Wheel Group</phrase>
+          <phrase>Focus Camera & Filter Wheel Group</phrase>
         </textobject>
       </mediaobject>
     </screenshot>
 
-    <para> Set the CCD to be used in the focus process from the dropdown. The
-    <guibutton>Live Video</guibutton> button brings up the associated popup.
-    Next set the exposure length. The <guibutton>Toggle Full
-    Screen</guibutton> button pops the window displaying the focus frame out
-    to a separate window. Pressing it again returns it within the focus
-    window. The <guibutton>Show in FITS Viewer</guibutton> button pops-up a
-    separate FITS Viewer window to display the focus frame, in addition to
-    focus frame displayed within the focus window.</para>
-
-    <para> The next row of controls allows CCD parameters to be set. Choose a
-    value from the binning dropdown and then set either the camera gain or
+    <para> This section of parameters deals with the Camera and Filter
+    settings to use when focusing.</para>
+
+    <para> The top row of controls allows CCD parameters to be set.</para>
+
+    <itemizedlist>
+      <listitem>
+        <para> <guilabel>Exp</guilabel>: The exposure time in seconds.</para>
+      </listitem>
+
+      <listitem>
+        <para> The <guibutton>Toggle Full Screen</guibutton> button pops the
+        window displaying the focus frame out to a separate window. Pressing
+        it again returns it within the focus window.</para>
+      </listitem>
+
+      <listitem>
+        <para> The <guibutton>Show in FITS Viewer</guibutton> button pops-up a
+        separate FITS Viewer window to display the focus frame, in addition to
+        the focus frame displayed within the focus window.</para>
+      </listitem>
+
+      <listitem>
+        <para> The <guibutton>Live Video</guibutton> button brings up the
+        associated popup.</para>
+      </listitem>
+    </itemizedlist>
+
+    <para> The next row of controls allows Camera parameters to be set. Choose
+    a value from the binning dropdown and then set either the camera gain or
     ISO.</para>
 
     <itemizedlist>
@@ -326,60 +381,79 @@
       </listitem>
 
       <listitem>
-        <para> <guilabel>Gain / ISO</guilabel>: Set the Gain / ISO for the CCD
-        being used to focus. The value needs to be high enough to give a clear
-        star pattern but not so high as to create too much noise to interfere
-        with the focus operation. Some experimentation will be required to
-        find an optimum value. If you are unsure where to start try unity gain
-        for your camera and adjust from there.</para>
+        <para> <guilabel>Gain</guilabel>: Set the Gain for the Camera being
+        used to focus. The value needs to be high enough to give a clear star
+        pattern but not so high as to create too much noise to interfere with
+        the focus operation. Some experimentation will be required to find an
+        optimum value. If you are unsure where to start try unity gain for
+        your camera and adjust from there.</para>
+      </listitem>
+
+      <listitem>
+        <para> <guilabel>ISO</guilabel>: Set the ISO for the Camera being used
+        to focus. Some experimentation will be required to find an optimum
+        value.</para>
       </listitem>
     </itemizedlist>
 
-    <para> The next row of controls deals with the Filter Wheel, if there is
-    one. Firstly, choose the Filter Wheel from the dropdown and the filter to
-    use. To start focusing it will probably be easier to select the filter
-    that allows the most light through, for example the Lum filter. The
-    <guibutton>Filter Settings</guibutton> button brings up the <link
-    linkend="capture-filter-settings">Filter Settings</link> popup. This
-    allows a number of parameters to be set per filter to be used during an
-    Autofocus run which could be unattended so a user would not be available
-    to set parameters at run time. Broadly these allow two types of focus
-    runs:</para>
+    <para> The third row of controls deals with the Temperature Source and
+    Filter, if there is one:</para>
 
     <itemizedlist>
       <listitem>
-        <para> <emphasis role="bold">Per Filter</emphasis>: When another
-        module, for example, the Capture module requires a filter change, it
-        is possible to automatically refocus for the new filter. The exposure
-        to use for each filter is taken from the <link
+        <para> <guilabel>TS</guilabel>: Select the temperature source from the
+        dropdown. Underneath are displayed the current temperature from the
+        selected temperature source and the change in temperature between when
+        the last successful Autofocus run completed and the current
+        temperature. It is common practice to redo focus after significant
+        temperature changes that alter the telescope's focus point.</para>
+      </listitem>
+
+      <listitem>
+        <para> <guilabel>Filter</guilabel>: Select the filter to use.</para>
+
+        <para>To start focusing it will probably be easier to select the
+        filter that allows the most light through, for example the Lum filter.
+        The <guibutton>Filter Settings</guibutton> button brings up the <link
         linkend="capture-filter-settings">Filter Settings</link> popup. This
-        is very useful where, for example, narrowband filter require longer
-        exposure times than broadband filters.</para>
+        allows a number of parameters to be set per filter to be used during
+        an Autofocus run which could be unattended so a user would not be
+        available to set parameters at run time. Broadly these allow two types
+        of focus runs:</para>
+
+        <itemizedlist>
+          <listitem>
+            <para> <emphasis role="bold">Per Filter</emphasis>: When another
+            module, for example, the Capture module requires a filter change,
+            it is possible to automatically refocus for the new filter. The
+            exposure to use for each filter is taken from the <link
+            linkend="capture-filter-settings">Filter Settings</link> popup.
+            This is very useful where, for example, narrowband filter require
+            longer exposure times than broadband filters.</para>
+          </listitem>
+
+          <listitem>
+            <para> <emphasis role="bold">Lock Filter</emphasis>: It is
+            possible to specify a Lock filter to use when it is required to
+            focus another filter. For example, if a Red filter is used and an
+            Autofocus run required, it is possible to run the Autofocus using
+            the Lum filter and then, when complete, adjust the focus position
+            by an Offset value corresponding to the predetermined focus
+            difference between the Lum and Red filters. This is useful when,
+            for example, it is difficult to focus some filters directly
+            without excessively long exposure times. Note that this locked
+            filter approach may also be used in the <link
+            linkend="ekos-align">Alignment Module</link> whenever it performs
+            a capture for astrometry.</para>
+          </listitem>
+        </itemizedlist>
       </listitem>
 
       <listitem>
-        <para> <emphasis role="bold">Lock Filter</emphasis>: It is possible to
-        specify a Lock filter to use when it is required to focus another
-        filter. For example, if a Red filter is used and an Autofocus run
-        required, it is possible to run the Autofocus using the Lum filter and
-        then, when complete, adjust the focus position by an Offset value
-        corresponding to the predetermined focus difference between the Lum
-        and Red filters. This is useful when, for example, it is difficult to
-        focus some filters directly without excessively long exposure times.
-        Note that this locked filter approach may also used in the <link
-        linkend="ekos-align">Alignment Module</link> whenever it performs a
-        capture for astrometry.</para>
+        <para> <guibutton>Reset</guibutton> button will reset the focusing
+        subframe to full frame.</para>
       </listitem>
     </itemizedlist>
-
-    <para> You may select the temperature source from the dropdown on the next
-    row of controls. Underneath are displayed the current temperature from the
-    selected temperature source and the change in temperature between when the
-    last successful Autofocus run completed and the current temperature. It is
-    common practice to redo focus after significant temperature changes that
-    alter the telescope's focus point. You may reset the focusing subframe to
-    full frame capture if you click the <guibutton>Reset</guibutton> button.
-    </para>
   </sect3>
 
   <sect3 id="focus-settings">
@@ -420,6 +494,54 @@
         Module</link> for more details on how to setup Dark Frames.</para>
       </listitem>
 
+      <listitem>
+        <para> <guilabel>AF Backlash Comp</guilabel>: Check this option to
+        have the Autofocus algorithm perform backlash compensation. This
+        option is available when using the Linear and Linear 1 Pass
+        algorithms. This field should be set together with the
+        <guilabel>Backlash</guilabel> field. See the <link
+        linkend="focus-mechanics">Focus Mechanics</link> section for more
+        details.</para>
+
+        <para>Backlash in the focuser setup is likely to a combination of
+        backlash in the electronic focuser itself (e.g. in the gearing
+        mechanism), in the binding of the electronic focuser to the telescope
+        drawtube, and in the telescope drawtube's mechanism. Thus, each setup
+        will have its own backlash characteristic.</para>
+
+        <para> There are several things to consider when working out how to
+        deal with backlash: <itemizedlist>
+            <listitem>
+              <para> <emphasis role="bold">No Backlash</emphasis>: If you are
+              fortunate enough to have a setup with no backlash then it would
+              make sense to set AF Backlash Comp off. It should work fine if
+              AF Backlash Comp is on, but the AutoFocus routine will make
+              unnecessary movements.</para>
+            </listitem>
+
+            <listitem>
+              <para> <emphasis role="bold">Backlash Managed by
+              Focuser</emphasis>: If your focuser had the ability to manage
+              backlash itself then you can use this facility and turn off AF
+              Backlash Comp. Alternatively, if its possible, you could turn
+              off the focuser's backlash facility and set AF Backlash Comp
+              on.</para>
+            </listitem>
+
+            <listitem>
+              <para> <emphasis role="bold">Backlash Managed by Device
+              Driver</emphasis>: If your device driver had the ability to
+              manage backlash itself then you can use this facility and turn
+              off AF Backlash Como. Alternatively, if its possible, you could
+              turn off the device driver's backlash facility and set AF
+              Backlash Comp on.</para>
+            </listitem>
+          </itemizedlist> </para>
+
+        <para>It is important to have backlash managed in one place to avoid
+        conflicts.</para>
+      </listitem>
+
       <listitem>
         <para> <guilabel>Sub Frame</guilabel>: Either use the Full Field of
         the camera or select a Subframe around the focus star during the
@@ -495,12 +617,12 @@
         of Hyperbola and Parabola. As part of the Linear 1 Pass algorithm, the
         degree to which the curve fits the datapoints, or <link
         linkend="Coefficient_of_Determination">Coefficient of Determination,
-        R²</link>, is calculated. This option allows a minimum acceptable value
-        of R² to be defined that is compared to the value obtained from the
-        curve fitting process. If the minimum value has not been achieved then
-        Autofocus will rerun. Only one rerun will be performed and even if the
-        minimum R² has not been met the second time, the Autofocus run will
-        still be deemed successful.</para>
+        R²</link>, is calculated. This option allows a minimum acceptable
+        value of R² to be defined that is compared to the value obtained from
+        the curve fitting process. If the minimum value has not been achieved
+        then Autofocus will rerun. Only one rerun will be performed and even
+        if the minimum R² has not been met the second time, the Autofocus run
+        will still be deemed successful.</para>
 
         <para> Experiment to find an appropriate value but a good starting
         point would be 0.8 or 0.9</para>
@@ -1165,8 +1287,8 @@
     obtain, but as a guide, a value above, say 0.8 would be a good fit.</para>
 
     <para> There is an option to set an “R² Limit” in the Settings tab of the
-    Focus window that is compared to the calculated R² after the auto focus run
-    has completed. If the limit value has not been achieved, then the auto
+    Focus window that is compared to the calculated R² after the auto focus
+    run has completed. If the limit value has not been achieved, then the auto
     focus is rerun.</para>
 
     <para> Setting an R² Limit could be useful for unattended observation if
diff --git a/doc/ekos_focus.png b/doc/ekos_focus.png
index 47a042c29..8cbdd3c25 100644
Binary files a/doc/ekos_focus.png and b/doc/ekos_focus.png differ
diff --git a/doc/focus_ccdfw_group.png b/doc/focus_ccdfw_group.png
index 79224062c..e45b6c038 100644
Binary files a/doc/focus_ccdfw_group.png and b/doc/focus_ccdfw_group.png differ
diff --git a/doc/focus_settings.png b/doc/focus_settings.png
index 6f9915797..7f6800240 100644
Binary files a/doc/focus_settings.png and b/doc/focus_settings.png differ
diff --git a/doc/optical_train_group.png b/doc/optical_train_group.png
new file mode 100644
index 000000000..5bd5acc23
Binary files /dev/null and b/doc/optical_train_group.png differ
diff --git a/kstars/ekos/focus/focus.cpp b/kstars/ekos/focus/focus.cpp
index 527f46cb2..63b56ac99 100644
--- a/kstars/ekos/focus/focus.cpp
+++ b/kstars/ekos/focus/focus.cpp
@@ -979,7 +979,11 @@ void Focus::start()
                                << " Autostar: " << ( focusAutoStarEnabled->isChecked() ? "yes" : "no" )
                                << " Full frame: " << ( focusUseFullField->isChecked() ? "yes" : "no " )
                                << " [" << focusFullFieldInnerRadius->value() << "%," << focusFullFieldOuterRadius->value() << "%]"
-                               << " Step Size: " << focusTicks->value() << " Threshold: " << focusThreshold->value()
+                               << " Step Size: " << focusTicks->value()
+                               << " Number Steps " << focusOutSteps->value()
+                               << " Autofocus Backlash Comp " << ( focusAFBacklashComp->isChecked() ? "yes" : "no" )
+                               << " Backlash " << focusBacklash->value()
+                               << " Threshold: " << focusThreshold->value()
                                << " Gaussian Sigma: " << focusGaussianSigma->value()
                                << " Gaussian Kernel size: " << focusGaussianKernelSize->value()
                                << " Multi row average: " << focusMultiRowAverage->value()
@@ -1036,7 +1040,8 @@ void Focus::start()
         linearFocuser.reset(MakeLinearFocuser(params));
         curveFitting.reset(new CurveFitting());
         linearRequestedPosition = linearFocuser->initialPosition();
-        const int newPosition = adjustLinearPosition(position, linearRequestedPosition, focusBacklash->value());
+        const int newPosition = adjustLinearPosition(position, linearRequestedPosition, focusAFBacklashComp->isChecked(),
+                                focusBacklash->value());
         if (newPosition != position)
         {
             if (!changeFocus(newPosition - position))
@@ -1050,9 +1055,9 @@ void Focus::start()
     capture();
 }
 
-int Focus::adjustLinearPosition(int position, int newPosition, int backlash)
+int Focus::adjustLinearPosition(int position, int newPosition, bool backlashEnabled, int backlash)
 {
-    if (newPosition > position)
+    if (backlashEnabled && newPosition > position)
     {
         constexpr int extraMotionSteps = 5;
         int adjustment;
@@ -2411,7 +2416,8 @@ void Focus::autoFocusLinear()
         // Update the graph with the next datapoint, draw the curve, etc.
         plotLinearFocus();
 
-    nextPosition = adjustLinearPosition(currentPosition, linearRequestedPosition, focusBacklash->value());
+    nextPosition = adjustLinearPosition(currentPosition, linearRequestedPosition, focusAFBacklashComp->isChecked(),
+                                        focusBacklash->value());
 
     if (linearFocuser->isDone())
     {
@@ -2904,7 +2910,7 @@ void Focus::autoFocusProcessPositionChange(IPState state)
         {
             int temp = focuserAdditionalMovement;
             focuserAdditionalMovement = 0;
-            qCDebug(KSTARS_EKOS_FOCUS) << QString("Linear: un-doing extension. Moving back in by %1").arg(temp);
+            qCDebug(KSTARS_EKOS_FOCUS) << QString("Undoing backlash extension. Moving back in by %1").arg(temp);
 
             if (!focusIn(temp))
             {
@@ -4326,42 +4332,50 @@ void Focus::setFocusAlgorithm(Algorithm algorithm)
     switch(algorithm)
     {
         case FOCUS_ITERATIVE:
-            focusOutSteps->setEnabled(false); // Out step multiple
+            focusOutSteps->setEnabled(false);             // Out step multiple
             focusMaxTravel->setEnabled(true);             // Max Travel
-            focusTicks->setEnabled(true);                  // Initial Step Size
+            focusTicks->setEnabled(true);                 // Initial Step Size
             focusMaxSingleStep->setEnabled(true);         // Max Step Size
             focusTolerance->setEnabled(true);             // Solution tolerance
-            focusCurveFit->setEnabled(false);          // Curve fit can only be QUADRATIC
+            focusCurveFit->setEnabled(false);             // Curve fit can only be QUADRATIC
             focusCurveFit->setCurrentIndex(CurveFitting::FOCUS_QUADRATIC);
+            focusAFBacklashComp->setEnabled(false);       // Autofocus Backlash Comp off
+            focusAFBacklashComp->setChecked(false);
             break;
 
         case FOCUS_POLYNOMIAL:
-            focusOutSteps->setEnabled(false); // Out step multiple
+            focusOutSteps->setEnabled(false);             // Out step multiple
             focusMaxTravel->setEnabled(true);             // Max Travel
-            focusTicks->setEnabled(true);                  // Initial Step Size
+            focusTicks->setEnabled(true);                 // Initial Step Size
             focusMaxSingleStep->setEnabled(true);         // Max Step Size
             focusTolerance->setEnabled(true);             // Solution tolerance
-            focusCurveFit->setEnabled(false);          // Curve fit can only be QUADRATIC
+            focusCurveFit->setEnabled(false);             // Curve fit can only be QUADRATIC
             focusCurveFit->setCurrentIndex(CurveFitting::FOCUS_QUADRATIC);
+            focusAFBacklashComp->setEnabled(false);       // Autofocus Backlash Comp off
+            focusAFBacklashComp->setChecked(false);
             break;
 
         case FOCUS_LINEAR:
-            focusOutSteps->setEnabled(true);  // Out step multiple
+            focusOutSteps->setEnabled(true);              // Out step multiple
             focusMaxTravel->setEnabled(true);             // Max Travel
-            focusTicks->setEnabled(true);                  // Initial Step Size
+            focusTicks->setEnabled(true);                 // Initial Step Size
             focusMaxSingleStep->setEnabled(false);        // Max Step Size
             focusTolerance->setEnabled(true);             // Solution tolerance
-            focusCurveFit->setEnabled(false);          // Curve fit can only be QUADRATIC
+            focusCurveFit->setEnabled(false);             // Curve fit can only be QUADRATIC
             focusCurveFit->setCurrentIndex(CurveFitting::FOCUS_QUADRATIC);
+            focusAFBacklashComp->setEnabled(true);        // Autofocus Backlash Comp on
+            focusAFBacklashComp->setChecked(true);
             break;
 
         case FOCUS_LINEAR1PASS:
-            focusOutSteps->setEnabled(true);  // Out step multiple
+            focusOutSteps->setEnabled(true);              // Out step multiple
             focusMaxTravel->setEnabled(true);             // Max Travel
-            focusTicks->setEnabled(true);                  // Initial Step Size
+            focusTicks->setEnabled(true);                 // Initial Step Size
             focusMaxSingleStep->setEnabled(false);        // Max Step Size
             focusTolerance->setEnabled(false);            // Solution tolerance
-            focusCurveFit->setEnabled(true);           // Curve fit
+            focusCurveFit->setEnabled(true);              // Curve fit
+            focusAFBacklashComp->setEnabled(true);        // Autofocus Backlash Comp on
+            focusAFBacklashComp->setChecked(true);
             break;
     }
 }
diff --git a/kstars/ekos/focus/focus.h b/kstars/ekos/focus/focus.h
index fd2056790..4433dd000 100644
--- a/kstars/ekos/focus/focus.h
+++ b/kstars/ekos/focus/focus.h
@@ -636,7 +636,7 @@ class Focus : public QWidget, public Ui::Focus
         // we will then scan back in (back to the originally requested position). This "dance" is done
         // to reduce backlash on such movement changes and so that we've always focused in before capture.
         // For LINEAR1PASS algo use the user-defined backlash value to adjust by
-        int adjustLinearPosition(int position, int newPosition, int backlash);
+        int adjustLinearPosition(int position, int newPosition, bool backlashEnabled, int backlash);
 
         /**
          * @brief syncTrackingBoxPosition Sync the tracking box to the current selected star center
diff --git a/kstars/ekos/focus/focus.ui b/kstars/ekos/focus/focus.ui
index ad9512d71..f8e1b3310 100644
--- a/kstars/ekos/focus/focus.ui
+++ b/kstars/ekos/focus/focus.ui
@@ -446,6 +446,39 @@
         <property name="spacing">
          <number>3</number>
         </property>
+        <item row="1" column="3">
+         <widget class="QComboBox" name="focusISO">
+          <property name="enabled">
+           <bool>false</bool>
+          </property>
+          <property name="minimumSize">
+           <size>
+            <width>0</width>
+            <height>32</height>
+           </size>
+          </property>
+         </widget>
+        </item>
+        <item row="3" column="3">
+         <widget class="QPushButton" name="resetFrameB">
+          <property name="minimumSize">
+           <size>
+            <width>0</width>
+            <height>32</height>
+           </size>
+          </property>
+          <property name="toolTip">
+           <string>Reset focus subframe to full capture</string>
+          </property>
+          <property name="text">
+           <string>Reset</string>
+          </property>
+          <property name="icon">
+           <iconset theme="edit-delete">
+            <normaloff>.</normaloff>.</iconset>
+          </property>
+         </widget>
+        </item>
         <item row="0" column="3">
          <layout class="QHBoxLayout" name="horizontalLayout_3">
           <property name="spacing">
@@ -529,13 +562,16 @@
           </item>
          </layout>
         </item>
-        <item row="1" column="2">
-         <widget class="QLabel" name="ISOLabel">
-          <property name="enabled">
-           <bool>false</bool>
+        <item row="2" column="1">
+         <widget class="QComboBox" name="defaultFocusTemperatureSource">
+          <property name="minimumSize">
+           <size>
+            <width>0</width>
+            <height>32</height>
+           </size>
           </property>
-          <property name="text">
-           <string>ISO:</string>
+          <property name="toolTip">
+           <string>Select focuser temperature source</string>
           </property>
          </widget>
         </item>
@@ -555,46 +591,6 @@
           </property>
          </widget>
         </item>
-        <item row="1" column="1">
-         <layout class="QHBoxLayout" name="horizontalLayout_2">
-          <property name="spacing">
-           <number>1</number>
-          </property>
-          <item>
-           <widget class="QComboBox" name="focusBinning">
-            <property name="enabled">
-             <bool>false</bool>
-            </property>
-            <property name="minimumSize">
-             <size>
-              <width>0</width>
-              <height>32</height>
-             </size>
-            </property>
-           </widget>
-          </item>
-          <item>
-           <widget class="QLabel" name="gainLabel">
-            <property name="toolTip">
-             <string>Exposure time in seconds</string>
-            </property>
-            <property name="text">
-             <string>Gain:</string>
-            </property>
-           </widget>
-          </item>
-          <item>
-           <widget class="QDoubleSpinBox" name="focusGain">
-            <property name="minimumSize">
-             <size>
-              <width>0</width>
-              <height>32</height>
-             </size>
-            </property>
-           </widget>
-          </item>
-         </layout>
-        </item>
         <item row="0" column="1">
          <layout class="QHBoxLayout" name="horizontalLayout">
           <property name="spacing">
@@ -627,18 +623,79 @@
           </item>
          </layout>
         </item>
-        <item row="1" column="3">
-         <widget class="QComboBox" name="focusISO">
-          <property name="enabled">
-           <bool>false</bool>
-          </property>
-          <property name="minimumSize">
-           <size>
-            <width>0</width>
-            <height>32</height>
-           </size>
+        <item row="3" column="1">
+         <layout class="QHBoxLayout" name="horizontalLayout_11" stretch="0,1,0,1">
+          <property name="spacing">
+           <number>2</number>
           </property>
-         </widget>
+          <item>
+           <widget class="QLabel" name="label_30">
+            <property name="toolTip">
+             <string>Source temperature in Celsius</string>
+            </property>
+            <property name="text">
+             <string>Temp. =</string>
+            </property>
+           </widget>
+          </item>
+          <item>
+           <widget class="QLabel" name="absoluteTemperatureLabel">
+            <property name="sizePolicy">
+             <sizepolicy hsizetype="MinimumExpanding" vsizetype="Preferred">
+              <horstretch>0</horstretch>
+              <verstretch>0</verstretch>
+             </sizepolicy>
+            </property>
+            <property name="toolTip">
+             <string>Source temperature in Celsius</string>
+            </property>
+            <property name="frameShape">
+             <enum>QFrame::NoFrame</enum>
+            </property>
+            <property name="text">
+             <string>NA</string>
+            </property>
+            <property name="alignment">
+             <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter</set>
+            </property>
+           </widget>
+          </item>
+          <item>
+           <widget class="QLabel" name="label_31">
+            <property name="toolTip">
+             <string>Delta temperature in Celsius. It is the difference between the last recorded temperature when autofocus was successful and the current source temperature.</string>
+            </property>
+            <property name="text">
+             <string>ΔT =</string>
+            </property>
+            <property name="alignment">
+             <set>Qt::AlignCenter</set>
+            </property>
+           </widget>
+          </item>
+          <item>
+           <widget class="QLabel" name="deltaTemperatureLabel">
+            <property name="sizePolicy">
+             <sizepolicy hsizetype="MinimumExpanding" vsizetype="Preferred">
+              <horstretch>0</horstretch>
+              <verstretch>0</verstretch>
+             </sizepolicy>
+            </property>
+            <property name="toolTip">
+             <string>Delta temperature in Celsius. It is the difference between the last recorded temperature when autofocus was successful and the current source temperature.</string>
+            </property>
+            <property name="frameShape">
+             <enum>QFrame::NoFrame</enum>
+            </property>
+            <property name="text">
+             <string>NA</string>
+            </property>
+            <property name="alignment">
+             <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter</set>
+            </property>
+           </widget>
+          </item>
+         </layout>
         </item>
         <item row="1" column="0">
          <widget class="QLabel" name="label_18">
@@ -647,33 +704,23 @@
           </property>
          </widget>
         </item>
-        <item row="3" column="3">
-         <widget class="QPushButton" name="resetFrameB">
-          <property name="minimumSize">
-           <size>
-            <width>0</width>
-            <height>32</height>
-           </size>
-          </property>
-          <property name="toolTip">
-           <string>Reset focus subframe to full capture</string>
+        <item row="1" column="2">
+         <widget class="QLabel" name="ISOLabel">
+          <property name="enabled">
+           <bool>false</bool>
           </property>
           <property name="text">
-           <string>Reset</string>
-          </property>
-          <property name="icon">
-           <iconset theme="edit-delete">
-            <normaloff>.</normaloff>.</iconset>
+           <string>ISO:</string>
           </property>
          </widget>
         </item>
-        <item row="2" column="3">
-         <layout class="QHBoxLayout" name="horizontalLayout_10">
+        <item row="1" column="1">
+         <layout class="QHBoxLayout" name="horizontalLayout_2">
           <property name="spacing">
            <number>1</number>
           </property>
           <item>
-           <widget class="QComboBox" name="focusFilter">
+           <widget class="QComboBox" name="focusBinning">
             <property name="enabled">
              <bool>false</bool>
             </property>
@@ -686,24 +733,21 @@
            </widget>
           </item>
           <item>
-           <widget class="QPushButton" name="filterManagerB">
-            <property name="enabled">
-             <bool>false</bool>
-            </property>
+           <widget class="QLabel" name="gainLabel">
             <property name="toolTip">
-             <string>Filter Settings</string>
+             <string>Exposure time in seconds</string>
             </property>
             <property name="text">
-             <string/>
-            </property>
-            <property name="icon">
-             <iconset theme="view-filter">
-              <normaloff>.</normaloff>.</iconset>
+             <string>Gain:</string>
             </property>
-            <property name="iconSize">
+           </widget>
+          </item>
+          <item>
+           <widget class="QDoubleSpinBox" name="focusGain">
+            <property name="minimumSize">
              <size>
-              <width>24</width>
-              <height>24</height>
+              <width>0</width>
+              <height>32</height>
              </size>
             </property>
            </widget>
@@ -730,88 +774,44 @@
           </property>
          </widget>
         </item>
-        <item row="2" column="1">
-         <widget class="QComboBox" name="defaultFocusTemperatureSource">
-          <property name="minimumSize">
-           <size>
-            <width>0</width>
-            <height>32</height>
-           </size>
-          </property>
-          <property name="toolTip">
-           <string>Select focuser temperature source</string>
-          </property>
-         </widget>
-        </item>
-        <item row="3" column="1">
-         <layout class="QHBoxLayout" name="horizontalLayout_11" stretch="0,1,0,1">
+        <item row="2" column="3">
+         <layout class="QHBoxLayout" name="horizontalLayout_10">
           <property name="spacing">
-           <number>2</number>
+           <number>1</number>
           </property>
           <item>
-           <widget class="QLabel" name="label_30">
-            <property name="toolTip">
-             <string>Source temperature in Celsius</string>
+           <widget class="QComboBox" name="focusFilter">
+            <property name="enabled">
+             <bool>false</bool>
             </property>
-            <property name="text">
-             <string>Temp. =</string>
+            <property name="minimumSize">
+             <size>
+              <width>0</width>
+              <height>32</height>
+             </size>
             </property>
            </widget>
           </item>
           <item>
-           <widget class="QLabel" name="absoluteTemperatureLabel">
-            <property name="sizePolicy">
-             <sizepolicy hsizetype="MinimumExpanding" vsizetype="Preferred">
-              <horstretch>0</horstretch>
-              <verstretch>0</verstretch>
-             </sizepolicy>
-            </property>
-            <property name="toolTip">
-             <string>Source temperature in Celsius</string>
-            </property>
-            <property name="frameShape">
-             <enum>QFrame::NoFrame</enum>
-            </property>
-            <property name="text">
-             <string>NA</string>
-            </property>
-            <property name="alignment">
-             <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter</set>
+           <widget class="QPushButton" name="filterManagerB">
+            <property name="enabled">
+             <bool>false</bool>
             </property>
-           </widget>
-          </item>
-          <item>
-           <widget class="QLabel" name="label_31">
             <property name="toolTip">
-             <string>Delta temperature in Celsius. It is the difference between the last recorded temperature when autofocus was successful and the current source temperature.</string>
+             <string>Filter Settings</string>
             </property>
             <property name="text">
-             <string>ΔT =</string>
-            </property>
-            <property name="alignment">
-             <set>Qt::AlignCenter</set>
-            </property>
-           </widget>
-          </item>
-          <item>
-           <widget class="QLabel" name="deltaTemperatureLabel">
-            <property name="sizePolicy">
-             <sizepolicy hsizetype="MinimumExpanding" vsizetype="Preferred">
-              <horstretch>0</horstretch>
-              <verstretch>0</verstretch>
-             </sizepolicy>
-            </property>
-            <property name="toolTip">
-             <string>Delta temperature in Celsius. It is the difference between the last recorded temperature when autofocus was successful and the current source temperature.</string>
-            </property>
-            <property name="frameShape">
-             <enum>QFrame::NoFrame</enum>
+             <string/>
             </property>
-            <property name="text">
-             <string>NA</string>
+            <property name="icon">
+             <iconset theme="view-filter">
+              <normaloff>.</normaloff>.</iconset>
             </property>
-            <property name="alignment">
-             <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter</set>
+            <property name="iconSize">
+             <size>
+              <width>24</width>
+              <height>24</height>
+             </size>
             </property>
            </widget>
           </item>
@@ -822,6 +822,9 @@
      </item>
      <item>
       <widget class="QTabWidget" name="tabWidget">
+       <property name="mouseTracking">
+        <bool>true</bool>
+       </property>
        <property name="tabShape">
         <enum>QTabWidget::Rounded</enum>
        </property>
@@ -1088,7 +1091,7 @@
               </sizepolicy>
              </property>
              <property name="toolTip">
-              <string><html><head/><body><p>Set a minimum for the acceptable R² when performing an Auto Focus run. If the minimum is not met, Auto Focus will rerun once to try to improve the R². Currently only available for the Linear 1 Pass algorithm when using a Curve Fit of Hyperbola or Parabola. This feature is experimental.</p></body></html></string>
+              <string><html><head/><body><p>Set a minimum for the acceptable R² when performing an Auto Focus run. The value is between 0 (no fit) and 1 (perfect fit). 0.8 is a good start. If the minimum is not met, Auto Focus will rerun once to try to improve the R². Currently only available for the Linear 1 Pass algorithm when using a Curve Fit of Hyperbola or Parabola. This feature is experimental.</p></body></html></string>
              </property>
              <property name="minimum">
               <double>0.000000000000000</double>
@@ -1104,7 +1107,7 @@
              </property>
             </widget>
            </item>
-           <item row="0" column="1" colspan="3">
+           <item row="0" column="1">
             <widget class="QCheckBox" name="useFocusDarkFrame">
              <property name="sizePolicy">
               <sizepolicy hsizetype="Preferred" vsizetype="Preferred">
@@ -1120,6 +1123,25 @@
              </property>
             </widget>
            </item>
+           <item row="0" column="2">
+            <widget class="QCheckBox" name="focusAFBacklashComp">
+             <property name="sizePolicy">
+              <sizepolicy hsizetype="Preferred" vsizetype="Preferred">
+               <horstretch>0</horstretch>
+               <verstretch>0</verstretch>
+              </sizepolicy>
+             </property>
+             <property name="toolTip">
+              <string><html><head/><body><p>Enable to have AutoFocus perform Backlash Compensation. Use in conjunction with the Backlash field.  Either the autofocus algorithm or the driver/focuser should perform backlash compensation but not both.</p><p>Used by Linear and Linear 1 Pass algorithms.</p></body></html></string>
+             </property>
+             <property name="text">
+              <string>AF Backlash Comp</string>
+             </property>
+             <property name="checked">
+              <bool>true</bool>
+             </property>
+            </widget>
+           </item>
           </layout>
          </item>
          <item>
@@ -1525,29 +1547,19 @@
         <layout class="QVBoxLayout" name="verticalLayout_3">
          <item>
           <layout class="QGridLayout" name="gridLayout" rowstretch="0,0,0,0">
+           <property name="leftMargin">
+            <number>0</number>
+           </property>
+           <property name="topMargin">
+            <number>0</number>
+           </property>
            <property name="spacing">
             <number>3</number>
            </property>
-           <item row="0" column="0">
-            <widget class="QLabel" name="label">
-             <property name="toolTip">
-              <string/>
-             </property>
-             <property name="whatsThis">
-              <string/>
-             </property>
-             <property name="text">
-              <string>Initial Step size:</string>
-             </property>
-            </widget>
-           </item>
-           <item row="0" column="2">
-            <widget class="QLabel" name="label_12">
-             <property name="toolTip">
-              <string/>
-             </property>
+           <item row="2" column="2">
+            <widget class="QLabel" name="label_12b">
              <property name="text">
-              <string>Max Travel:</string>
+              <string>Out Step Multiple:</string>
              </property>
             </widget>
            </item>
@@ -1576,6 +1588,33 @@
              </property>
             </widget>
            </item>
+           <item row="3" column="2">
+            <widget class="QLabel" name="label_27">
+             <property name="text">
+              <string>Motion Timeout:</string>
+             </property>
+            </widget>
+           </item>
+           <item row="2" column="0">
+            <widget class="QLabel" name="label_9">
+             <property name="text">
+              <string>Settle:</string>
+             </property>
+            </widget>
+           </item>
+           <item row="3" column="1">
+            <widget class="QSpinBox" name="focusCaptureTimeout">
+             <property name="toolTip">
+              <string>Maximum time in seconds to wait for a captured image to be received before declaring a timeout.</string>
+             </property>
+             <property name="minimum">
+              <number>5</number>
+             </property>
+             <property name="maximum">
+              <number>300</number>
+             </property>
+            </widget>
+           </item>
            <item row="0" column="1">
             <widget class="QSpinBox" name="focusTicks">
              <property name="sizePolicy">
@@ -1601,10 +1640,33 @@
              </property>
             </widget>
            </item>
-           <item row="2" column="0">
-            <widget class="QLabel" name="label_9">
+           <item row="1" column="0">
+            <widget class="QLabel" name="label_17">
              <property name="text">
-              <string>Settle:</string>
+              <string>Max Step size:</string>
+             </property>
+            </widget>
+           </item>
+           <item row="1" column="1">
+            <widget class="QSpinBox" name="focusMaxSingleStep">
+             <property name="toolTip">
+              <string><html><head/><body><p>The maximum single step size the algorithm is allowed to command as it searches for the critical focus zone. The calculated step size would be limited to this maximum value.</p></body></html></string>
+             </property>
+             <property name="minimum">
+              <number>10</number>
+             </property>
+             <property name="maximum">
+              <number>100000</number>
+             </property>
+             <property name="value">
+              <number>100000</number>
+             </property>
+            </widget>
+           </item>
+           <item row="3" column="0">
+            <widget class="QLabel" name="label_26">
+             <property name="text">
+              <string>Capture Timeout:</string>
              </property>
             </widget>
            </item>
@@ -1643,10 +1705,29 @@
              </property>
             </widget>
            </item>
-           <item row="2" column="2">
-            <widget class="QLabel" name="label_12b">
+           <item row="0" column="0">
+            <widget class="QLabel" name="label">
+             <property name="toolTip">
+              <string/>
+             </property>
+             <property name="whatsThis">
+              <string/>
+             </property>
              <property name="text">
-              <string>Out Step Multiple:</string>
+              <string>Initial Step size:</string>
+             </property>
+            </widget>
+           </item>
+           <item row="3" column="3">
+            <widget class="QSpinBox" name="focusMotionTimeout">
+             <property name="toolTip">
+              <string>Maximum time in seconds to wait for a focuser to move to desired position before declaring a timeout.</string>
+             </property>
+             <property name="minimum">
+              <number>1</number>
+             </property>
+             <property name="maximum">
+              <number>120</number>
              </property>
             </widget>
            </item>
@@ -1685,66 +1766,13 @@
              </property>
             </widget>
            </item>
-           <item row="1" column="1">
-            <widget class="QSpinBox" name="focusMaxSingleStep">
-             <property name="toolTip">
-              <string><html><head/><body><p>The maximum single step size the algorithm is allowed to command as it searches for the critical focus zone. The calculated step size would be limited to this maximum value.</p></body></html></string>
-             </property>
-             <property name="minimum">
-              <number>10</number>
-             </property>
-             <property name="maximum">
-              <number>100000</number>
-             </property>
-             <property name="value">
-              <number>100000</number>
-             </property>
-            </widget>
-           </item>
-           <item row="1" column="0">
-            <widget class="QLabel" name="label_17">
-             <property name="text">
-              <string>Max Step size:</string>
-             </property>
-            </widget>
-           </item>
-           <item row="3" column="0">
-            <widget class="QLabel" name="label_26">
-             <property name="text">
-              <string>Capture Timeout:</string>
-             </property>
-            </widget>
-           </item>
-           <item row="3" column="1">
-            <widget class="QSpinBox" name="focusCaptureTimeout">
+           <item row="0" column="2">
+            <widget class="QLabel" name="label_12">
              <property name="toolTip">
-              <string>Maximum time in seconds to wait for a captured image to be received before declaring a timeout.</string>
-             </property>
-             <property name="minimum">
-              <number>5</number>
-             </property>
-             <property name="maximum">
-              <number>300</number>
+              <string/>
              </property>
-            </widget>
-           </item>
-           <item row="3" column="2">
-            <widget class="QLabel" name="label_27">
              <property name="text">
-              <string>Motion Timeout:</string>
-             </property>
-            </widget>
-           </item>
-           <item row="3" column="3">
-            <widget class="QSpinBox" name="focusMotionTimeout">
-             <property name="toolTip">
-              <string>Maximum time in seconds to wait for a focuser to move to desired position before declaring a timeout.</string>
-             </property>
-             <property name="minimum">
-              <number>1</number>
-             </property>
-             <property name="maximum">
-              <number>120</number>
+              <string>Max Travel:</string>
              </property>
             </widget>
            </item>


More information about the kde-doc-english mailing list