CameraITS: scene1/test_linearity change fit to len(sensitivies)

Bug: 33670952
Change-Id: Ia2e626d7ddd203018035a5b4c5d171af072ff2d4
diff --git a/apps/CameraITS/tests/scene1/test_linearity.py b/apps/CameraITS/tests/scene1/test_linearity.py
index 0557998..a5ed85d 100644
--- a/apps/CameraITS/tests/scene1/test_linearity.py
+++ b/apps/CameraITS/tests/scene1/test_linearity.py
@@ -24,6 +24,14 @@
 import matplotlib
 import matplotlib.pyplot
 
+NAME = os.path.basename(__file__).split('.')[0]
+RESIDUAL_THRESHOLD = 0.0003  # approximately each sample is off by 2/255
+# The HAL3.2 spec requires that curves up to 64 control points in length
+# must be supported.
+L = 64
+LM1 = float(L-1)
+
+
 def main():
     """Test that device processing can be inverted to linear pixels.
 
@@ -31,49 +39,40 @@
     target. Attempts to invert all the ISP processing to get back to
     linear R,G,B pixel data.
     """
-    NAME = os.path.basename(__file__).split(".")[0]
-
-    RESIDUAL_THRESHOLD = 0.0003 # approximately each sample is off by 2/255
-
-    # The HAL3.2 spec requires that curves up to 64 control points in length
-    # must be supported.
-    L = 64
-    LM1 = float(L-1)
-
     gamma_lut = numpy.array(
-            sum([[i/LM1, math.pow(i/LM1, 1/2.2)] for i in xrange(L)], []))
+        sum([[i/LM1, math.pow(i/LM1, 1/2.2)] for i in xrange(L)], []))
     inv_gamma_lut = numpy.array(
-            sum([[i/LM1, math.pow(i/LM1, 2.2)] for i in xrange(L)], []))
+        sum([[i/LM1, math.pow(i/LM1, 2.2)] for i in xrange(L)], []))
 
     with its.device.ItsSession() as cam:
         props = cam.get_camera_properties()
         its.caps.skip_unless(its.caps.compute_target_exposure(props) and
                              its.caps.per_frame_control(props))
 
-        e,s = its.target.get_target_exposure_combos(cam)["midSensitivity"]
+        e, s = its.target.get_target_exposure_combos(cam)['midSensitivity']
         s /= 2
         sens_range = props['android.sensor.info.sensitivityRange']
         sensitivities = [s*1.0/3.0, s*2.0/3.0, s, s*4.0/3.0, s*5.0/3.0]
         sensitivities = [s for s in sensitivities
-                if s > sens_range[0] and s < sens_range[1]]
+                         if s > sens_range[0] and s < sens_range[1]]
 
         req = its.objects.manual_capture_request(0, e)
-        req["android.blackLevel.lock"] = True
-        req["android.tonemap.mode"] = 0
-        req["android.tonemap.curveRed"] = gamma_lut.tolist()
-        req["android.tonemap.curveGreen"] = gamma_lut.tolist()
-        req["android.tonemap.curveBlue"] = gamma_lut.tolist()
+        req['android.blackLevel.lock'] = True
+        req['android.tonemap.mode'] = 0
+        req['android.tonemap.curveRed'] = gamma_lut.tolist()
+        req['android.tonemap.curveGreen'] = gamma_lut.tolist()
+        req['android.tonemap.curveBlue'] = gamma_lut.tolist()
 
         r_means = []
         g_means = []
         b_means = []
 
         for sens in sensitivities:
-            req["android.sensor.sensitivity"] = sens
+            req['android.sensor.sensitivity'] = sens
             cap = cam.do_capture(req)
             img = its.image.convert_capture_to_rgb_image(cap)
             its.image.write_image(
-                    img, "%s_sens=%04d.jpg" % (NAME, sens))
+                img, '%s_sens=%04d.jpg' % (NAME, sens))
             img = its.image.apply_lut_to_image(img, inv_gamma_lut[1::2] * LM1)
             tile = its.image.get_image_patch(img, 0.45, 0.45, 0.1, 0.1)
             rgb_means = its.image.compute_image_means(tile)
@@ -81,17 +80,22 @@
             g_means.append(rgb_means[1])
             b_means.append(rgb_means[2])
 
-        pylab.plot(sensitivities, r_means, 'r')
-        pylab.plot(sensitivities, g_means, 'g')
-        pylab.plot(sensitivities, b_means, 'b')
-        pylab.ylim([0,1])
-        matplotlib.pyplot.savefig("%s_plot_means.png" % (NAME))
+        pylab.title(NAME)
+        pylab.plot(sensitivities, r_means, '-ro')
+        pylab.plot(sensitivities, g_means, '-go')
+        pylab.plot(sensitivities, b_means, '-bo')
+        pylab.xlim([sens_range[0], sens_range[1]/2])
+        pylab.ylim([0, 1])
+        pylab.xlabel('sensitivity(ISO)')
+        pylab.ylabel('RGB avg [0, 1]')
+        matplotlib.pyplot.savefig('%s_plot_means.png' % (NAME))
 
         # Check that each plot is actually linear.
         for means in [r_means, g_means, b_means]:
-            line,residuals,_,_,_  = numpy.polyfit(range(5),means,1,full=True)
-            print "Line: m=%f, b=%f, resid=%f"%(line[0], line[1], residuals[0])
-            assert(residuals[0] < RESIDUAL_THRESHOLD)
+            line, residuals, _, _, _ = numpy.polyfit(range(len(sensitivities)),
+                                                     means, 1, full=True)
+            print 'Line: m=%f, b=%f, resid=%f'%(line[0], line[1], residuals[0])
+            assert residuals[0] < RESIDUAL_THRESHOLD
 
 if __name__ == '__main__':
     main()