Index: trunk/psModules/src/camera/pmFPAview.c
===================================================================
--- trunk/psModules/src/camera/pmFPAview.c	(revision 12696)
+++ trunk/psModules/src/camera/pmFPAview.c	(revision 15093)
@@ -3,6 +3,6 @@
  *  @author EAM, IfA
  *
- *  @version $Revision: 1.11 $ $Name: not supported by cvs2svn $
- *  @date $Date: 2007-03-30 21:12:56 $
+ *  @version $Revision: 1.12 $ $Name: not supported by cvs2svn $
+ *  @date $Date: 2007-09-29 01:19:47 $
  *
  *  Copyright 2004 Maui High Performance Computing Center, University of Hawaii
@@ -53,5 +53,5 @@
 
 // return a view restricted to the level (must be >= the input level)
-pmFPAview *pmFPAviewForLevel(pmFPALevel level, const pmFPAview *input) 
+pmFPAview *pmFPAviewForLevel(pmFPALevel level, const pmFPAview *input)
 {
     PS_ASSERT_PTR_NON_NULL(input, NULL);
@@ -62,12 +62,12 @@
     switch (level) {
       case PM_FPA_LEVEL_FPA:
-	output->chip = -1;
+        output->chip = -1;
       case PM_FPA_LEVEL_CHIP:
-	output->cell = -1;
+        output->cell = -1;
       case PM_FPA_LEVEL_CELL:
-	output->readout = -1;
-	break;
+        output->readout = -1;
+        break;
       default:
-	break;
+        break;
     }
     return output;
@@ -321,2 +321,48 @@
     return NULL;
 }
+
+pmFPAview *pmFPAviewGenerate(const pmFPA *fpa, const pmChip *chip, const pmCell *cell,
+                             const pmReadout *reaodut)
+{
+    PS_ASSERT_PTR_NON_NULL(fpa, NULL);
+
+    pmFPAview *view = pmFPAviewAlloc(0);// View to return
+
+    if (!chip) {
+        return view;
+    }
+
+    for (view->chip = 0; view->chip < fpa->chips->n && fpa->chips->data[view->chip] != chip; view->chip++);
+    if (view->chip == fpa->chips->n) {
+        psError(PS_ERR_UNKNOWN, true, "Unable to find chip %x in fpa.", chip);
+        psFree(view);
+        return NULL;
+    }
+
+    if (!cell) {
+        return view;
+    }
+
+    for (view->cell = 0; view->cell < chip->cells->n && chip->cells->data[view->cell] != cell; view->cell++);
+    if (view->cell == chip->cells->n) {
+        psError(PS_ERR_UNKNOWN, true, "Unable to find cell %x in chip.", cell);
+        psFree(view);
+        return NULL;
+    }
+
+    if (!readout) {
+        return view;
+    }
+
+    for (view->readout = 0;
+         view->readout < cell->readouts->n && cell->readouts->data[view->readout] != readout;
+         view->readout++);
+    if (view->readout == cell->readouts->n) {
+        psError(PS_ERR_UNKNOWN, true, "Unable to find readout %x in cell.", readout);
+        psFree(view);
+        return NULL;
+    }
+
+    return view;
+}
+
