diff --git a/AWAControl/badger/environments/awa/__init__.py b/AWAControl/badger/environments/awa/__init__.py
index bc17a689d5291ac678e5d234fa4f5053db52d2be..2baaa6459d021820d1819f5107e2edad4b706154 100644
--- a/AWAControl/badger/environments/awa/__init__.py
+++ b/AWAControl/badger/environments/awa/__init__.py
@@ -24,10 +24,12 @@ class Environment(environment.Environment):
         "Sy",
         "Cx",
         "Cy",
+        "correlation",
         "total_size",
         "bb_penalty",
         "log10_total_intensity",
-        "K1_phase_readback"
+        "K1_phase_readback",
+        "ICT1"
     ]
     screen_name: str = None
     image_diagnostic: Any = None
@@ -50,6 +52,8 @@ class Environment(environment.Environment):
         results = {}
         if "K1_phase_readback" in observable_names:
             results["K1_phase_readback"] = caget("AWALLRF:K1:Phase")
+        if "ICT1" in observable_names:
+            results["ICT1"] = caget("AWAVXI11ICT:Ch1")
         
         metadata = self.setpoints or {}
         metadata = metadata | results
diff --git a/AWAControl/configs/awa_camera_config.yml b/AWAControl/configs/awa_camera_config.yml
index 55da523598ed277a209eb7f6ca3cae79cd707e4b..3144ff2f9f2c93f24f3a6ea2e5f0a10147aa26b5 100644
--- a/AWAControl/configs/awa_camera_config.yml
+++ b/AWAControl/configs/awa_camera_config.yml
@@ -36,12 +36,12 @@ DYG5:
     radius: 206.9578032921999
     video_number: 5
 DYG7:
-    type: blackfly
+    type: radhard
     center:
-    - 605
-    - 548
-    radius: 350
-    ip_address: 192.168.2.106
+    - 618
+    - 558
+    radius: 500
+    serial_number: "138"
     gain: 1.0
 DYG14:
     type: blackfly
@@ -90,10 +90,10 @@ EYG3:
 DYG6:
     type: frame_grabber
     center:
-    - 348.9857434881227
-    - 237.18732942820998
+    - 398.9857434881227
+    - 337.18732942820998
     radius: 196.96246822924843
-    video_number: 36
+    video_number: 6
 Slit_YAG:
     type: frame_grabber
     center:
diff --git a/AWAControl/diagnostics/screen.py b/AWAControl/diagnostics/screen.py
index 88e5f313d28fd40dea6b9ffcbbb8141c2e80fb5f..56c5490e29c039fc0e3411f3adc12424d5279e84 100644
--- a/AWAControl/diagnostics/screen.py
+++ b/AWAControl/diagnostics/screen.py
@@ -2,6 +2,7 @@ import json
 import os.path
 import sys
 import time
+import scipy as sp
 from copy import copy
 from pprint import pprint
 from time import sleep
@@ -51,6 +52,15 @@ def load_screen(camera_name: str):
             roi=roi,
             gain=camera_config["gain"],  # 1.0 for 5 nC 5.0 for 1 nC,
         )
+    elif camera_type == "radhard":
+        image_diagnostic = AWARadHardDiagnostic(
+            screen_name=camera_name,
+            serial_number=camera_config["serial_number"],
+            alias=camera_name,
+            resolution_suffix=None,
+            roi=roi,
+            gain=camera_config["gain"],  # 1.0 for 5 nC 5.0 for 1 nC,
+        )
     else:
         raise RuntimeError(f"cannot load camera type {type}")
 
@@ -173,6 +183,7 @@ class AWAImageDiagnostic(BaseModel):
                 if result["Sx"] is not None:
                     result["Sx"] = result["Sx"] * self.resolution
                     result["Sy"] = result["Sy"] * self.resolution
+                    result["correlation"] = result["correlation"] * self.resolution**2
             else:
                 result = {}
 
@@ -344,6 +355,7 @@ class AWAImageDiagnostic(BaseModel):
                 "Cy": np.NaN,
                 "Sx": np.NaN,
                 "Sy": np.NaN,
+                "correlation": np.NaN,
                 "bb_penalty": np.NaN,
                 "total_intensity": 10**log10_total_intensity,
                 "log10_total_intensity": log10_total_intensity,
@@ -355,6 +367,7 @@ class AWAImageDiagnostic(BaseModel):
             fits = self.fit_image(img)
             centroid = fits["centroid"]
             sizes = fits["rms_sizes"]
+            correlation = fits["correlation"]
 
             # do analysis if fits return all good values
             if np.all(~np.isnan(np.stack((centroid, sizes)))):
@@ -407,6 +420,7 @@ class AWAImageDiagnostic(BaseModel):
                     "Cy": centroid[1],
                     "Sx": sizes[0],
                     "Sy": sizes[1],
+                    "correlation": correlation,
                     "bb_penalty": bb_penalty,
                     "total_intensity": fits["total_intensity"],
                     "log10_total_intensity": log10_total_intensity,
@@ -424,6 +438,7 @@ class AWAImageDiagnostic(BaseModel):
                     "Cy": np.NaN,
                     "Sx": np.NaN,
                     "Sy": np.NaN,
+                    "correlation": np.NaN,
                     "bb_penalty": np.NaN,
                     "total_intensity": fits["total_intensity"],
                     "log10_total_intensity": log10_total_intensity,
@@ -435,23 +450,52 @@ class AWAImageDiagnostic(BaseModel):
             return result
 
     def fit_image(self, img):
-        x_projection = np.sum(img, axis=0)
-        y_projection = np.sum(img, axis=1)
-
+       	x_projection   = np.sum(img, axis=0)
+        y_projection   = np.sum(img, axis=1)
+        
+        
         # subtract min value from projections
-        x_projection = x_projection - x_projection[:10].min()
-        y_projection = y_projection - y_projection[:10].min()
-
+        x_projection   = x_projection - x_projection[:10].min()
+        y_projection   = y_projection - y_projection[:10].min()
+        
+        
         para_x = fit_gaussian_linear_background(
             x_projection, visualize=self.visualize, n_restarts=self.n_fitting_restarts
         )
-        para_y = fit_gaussian_linear_background(
+       	para_y = fit_gaussian_linear_background(
             y_projection, visualize=self.visualize, n_restarts=self.n_fitting_restarts
         )
+        
+        dim1,dim2=np.shape(img)
+        img45=sp.ndimage.interpolation.rotate(img,45,reshape=False,order=1)
+       	if dim1==dim2:
+    	    img45_cropped=img45[int(dim1*(2-np.sqrt(2))/4):int(dim1*(2+np.sqrt(2))/4),int(dim2*(2-np.sqrt(2))/4):int(dim2*(2+np.sqrt(2))/4)]
+        elif dim1<dim2:
+    	    img45_cropped=img45[int(dim1*(2-np.sqrt(2))/4):int(dim1*(2+np.sqrt(2))/4),int(dim1*(2-np.sqrt(2))/4):int(dim1*(2+np.sqrt(2))/4)]
+        else:
+    	    img45_cropped=img45[int(dim2*(2-np.sqrt(2))/4):int(dim2*(2+np.sqrt(2))/4),int(dim2*(2-np.sqrt(2))/4):int(dim2*(2+np.sqrt(2))/4)]
+
+        
+        
+        
+        x_projection45 = np.sum(img45_cropped, axis=0)
+        y_projection45 = np.sum(img45_cropped, axis=1)
+        x_projection45 = x_projection45 - x_projection45[:10].min()
+        y_projection45 = y_projection45 - y_projection45[:10].min()
+        
+        para_x45 = fit_gaussian_linear_background(
+            x_projection45, visualize=self.visualize, n_restarts=self.n_fitting_restarts
+        )
+        para_y45 = fit_gaussian_linear_background(
+            y_projection45, visualize=self.visualize, n_restarts=self.n_fitting_restarts
+        )
+
+        para_xy=(para_x45[2]**2-para_y45[2]**2)/2
 
         return {
             "centroid": np.array((para_x[1], para_y[1])),
             "rms_sizes": np.array((para_x[2], para_y[2])),
+            "correlation": para_xy, 
             "total_intensity": img.sum(),
             "log10_total_intensity": np.log10(img.sum()),
         }
@@ -538,6 +582,60 @@ class AWABlackflyDiagnostic(AWAImageDiagnostic):
             img = img.reshape(ny, nx)
 
         return img, extra_data
+        
+class AWARadHardDiagnostic(AWAImageDiagnostic):
+    serial_number: str
+    gain: PositiveFloat = 1.0
+
+    @property
+    def pv_names(self) -> list:
+        suffixes = [
+            self.array_data_suffix,
+            self.array_n_cols_suffix,
+            self.array_n_rows_suffix,
+        ]
+        if self.resolution_suffix is not None:
+            suffixes += [self.resolution_suffix]
+
+        return [f"SI-138:{ele}" for ele in suffixes]
+
+    def set_camera(self):
+        print(f"setting camera {self.alias}")
+        caput("SI-138:cam1:Acquire", 0)
+        time.sleep(2)
+
+        print(str(caget("SI-138:cam1:GC_SetCameraName")))
+        current_ip = str(caget("SI-138:cam1:GC_SetCameraName"))
+        
+        print(f"starting acquisition")
+        caput("SI-138:cam1:Acquire", 1)
+
+    def get_raw_data(self) -> (np.ndarray, dict):
+        if self.testing:
+            img = np.zeros((2000, 2000))
+            img[800:-800, 900:-900] = 1
+            self.resolution = 1.0
+            extra_data = {
+                "ICT1": np.random.randn() * 0.1 + 1.0,
+                "ICT2": np.random.randn() * 0.1 + 1.0,
+            }
+        else:
+            # get pvs
+            results = caget_many(self.pv_names)
+            if results[0] is None:
+                raise RuntimeError(
+                    "epics returned no image values, make sure blackfly phobeus is active"
+                )
+            results[0] = np.uint16(results[0])
+
+            e_pvs = copy(self.extra_pvs)
+            if self.target_charge_pv is not None:
+                e_pvs += [self.target_charge_pv]
+            extra_data = dict(zip(e_pvs, caget_many(e_pvs)))
+            img, nx, ny = results[0], results[1], results[2]
+            img = img.reshape(ny, nx)
+
+        return img, extra_data
 
 
 class AWAFrameGrabberDiagnostic(AWAImageDiagnostic):