Index: trunk/FACT++/src/feedback.cc
===================================================================
--- trunk/FACT++/src/feedback.cc	(revision 12804)
+++ trunk/FACT++/src/feedback.cc	(revision 12805)
@@ -93,4 +93,6 @@
     vector<int64_t>  fCurrentsRms;
 
+    vector<double>   fCalibration;
+
     vector<vector<float>> fData;
 
@@ -243,12 +245,12 @@
             }
 
-            vector<float> val(2*416, 0);
+            fCalibration.resize(416);
             for (int i=0; i<416; i++)
             {
-                val[i]     = double(fCurrentsAvg[i])/fCursor;
-                val[i+416] = sqrt(double(fCurrentsRms[i])/fCursor-val[i]*val[i]);
-            }
-
-            fDimCalibration.Update(val);
+                fCalibration[i]     = double(fCurrentsAvg[i])/fCursor;
+                fCalibration[i+416] = sqrt(double(fCurrentsRms[i])/fCursor-val[i]*val[i]);
+            }
+
+            fDimCalibration.Update(fCalibration);
 
             fOutputEnabled = false;
@@ -522,4 +524,25 @@
     }
 
+    int PrintCalibration()
+    {
+        if (fCalibration.size()==0)
+        {
+            Out() << "No calibration performed so far." << endl;
+            return GetCurrentStatus();
+        }
+
+        for (int k=0; k<13; k++)
+            for (int j=0; j<8; j++)
+            {
+                Out() << setw(2) << k << "|" << setw(2) << j*4 << "|";
+                for (int i=0; i<4; i++)
+                    Out() << Tools::Format(" %6.1f+-4.1f", fCalibration[i], fCalibration[i+416]);
+                Out() << endl;
+            }
+        }
+
+        return GetCurrentState();
+    }
+
     int SetConstant(const EventImp &evt, int constant)
     {
@@ -644,4 +667,5 @@
         fCurrentsAvg.assign(416, 0);
         fCurrentsRms.assign(416, 0);
+        fCalibration.resize(0);
         fStartTime = Time();
         fOutputEnabled = true;
@@ -673,7 +697,4 @@
             fStatusFSC.second<2)
             return kStateConnecting;
-
-        if (GetCurrentState()==kStateCalibrating && fCursor<100)
-            return GetCurrentState();
 
 /*
@@ -720,5 +741,10 @@
 
         if (fControlType==kTemp)
+        {
+            if (GetCurrentState()==kStateCalibrating && fCursor<100)
+                return GetCurrentState();
+
             return fOutputEnabled ? kStateTempCtrlRunning : kStateTempCtrlIdle;
+        }
 
         return kStateConnected;
@@ -834,4 +860,8 @@
         AddEvent("PRINT")
             (bind(&StateMachineFeedback::Print, this))
+            ("");
+
+        AddEvent("PRINT_CALIBRATION")
+            (bind(&StateMachineFeedback::PrintCalibration, this))
             ("");
     }
