Index: /trunk/ppStats/src/ppStats.c
===================================================================
--- /trunk/ppStats/src/ppStats.c	(revision 14019)
+++ /trunk/ppStats/src/ppStats.c	(revision 14020)
@@ -51,12 +51,43 @@
         exit (status);
     }
+
+    // report on the file disposition
+    if (data->fileLevel) {
+	pmFPALevel level = pmFPAPHULevel(config->format);
+
+        const char *levelName = pmFPALevelToName(level); // Level for file
+        psMetadataAddStr(results, PS_LIST_HEAD, "FILE.LEVEL", 0, "File level", levelName);
+
+	char *classID = NULL;
+	switch (level) {
+	  case PM_FPA_LEVEL_FPA:
+	    assert (data->fpa != NULL);
+	    assert (data->fileView->chip == -1);
+	    classID = pmFPANameFromRule ("{FPA.NAME}", data->fpa, data->fileView);
+	    break;
+	  case PM_FPA_LEVEL_CHIP:
+	    assert (data->fpa != NULL);
+	    assert (data->fileView->chip != -1);
+	    assert (data->fileView->cell == -1);
+	    classID = pmFPANameFromRule ("{CHIP.NAME}", data->fpa, data->fileView);
+	    break;
+	  case PM_FPA_LEVEL_CELL:
+	    assert (data->fpa != NULL);
+	    assert (data->fileView->chip != -1);
+	    assert (data->fileView->cell != -1);
+	    classID = pmFPANameFromRule ("{CELL.NAME}", data->fpa, data->fileView);
+	    break;
+	  default:
+	    psErrorStackPrint(stderr, "Error in file level.\n");
+	    exit (PS_EXIT_CONFIG_ERROR);
+	}
+        psMetadataAddStr(results, PS_LIST_HEAD, "CLASS.ID", 0, "name for element at file level", classID);
+	psFree (classID);
+    }
+
+    // did we actually request any data?
     if (psListLength(results->list) == 0) {
         psErrorStackPrint(stderr, "No output.\n");
         exit (status);
-    }
-
-    if (data->fileLevel) {
-        const char *level = pmFPALevelToName(pmFPAPHULevel(config->format)); // Level for file
-        psMetadataAddStr(results, PS_LIST_HEAD, "FILE.LEVEL", 0, "File level", level);
     }
 
Index: /trunk/ppStats/src/ppStats.h
===================================================================
--- /trunk/ppStats/src/ppStats.h	(revision 14019)
+++ /trunk/ppStats/src/ppStats.h	(revision 14020)
@@ -14,4 +14,6 @@
     bool doStats;                       // Do pixel statistics?
     bool fileLevel;                     // Output file level?
+    pmFPAview *fileView;		// View to analyse
+
     psList *headers;                    // Headers to read
     psList *concepts;                   // Concepts to read
Index: /trunk/ppStats/src/ppStatsData.c
===================================================================
--- /trunk/ppStats/src/ppStatsData.c	(revision 14019)
+++ /trunk/ppStats/src/ppStatsData.c	(revision 14020)
@@ -16,4 +16,5 @@
 
     psFree(data->stats);
+    psFree(data->fileView);
 
     psFree(data->chips);
@@ -40,4 +41,5 @@
     data->doStats = false;
     data->fileLevel = false;
+    data->fileView = NULL;
 
     data->sample = 0;
Index: /trunk/ppStats/src/ppStatsSetupFromArgs.c
===================================================================
--- /trunk/ppStats/src/ppStatsSetupFromArgs.c	(revision 14019)
+++ /trunk/ppStats/src/ppStatsSetupFromArgs.c	(revision 14020)
@@ -138,4 +138,5 @@
     data->sample = psMetadataLookupF32(NULL, arguments, "-sample");
     data->fileLevel = psMetadataLookupBool(NULL, arguments, "-level");
+    data->fileView = NULL;
 
     // Open the input file, determine the camera
@@ -168,13 +169,12 @@
             goto die;
         }
-        pmFPAview *view = pmFPAAddSourceFromHeader(data->fpa, header, format);
+        data->fileView = pmFPAAddSourceFromHeader(data->fpa, header, format);
         psFree(header);
         psFree(format);
-        if (!view) {
+        if (!data->fileView) {
             psError(PS_ERR_UNKNOWN, false, "Unable to add input file %s to FPA.\n", inName);
 	    result = PS_EXIT_CONFIG_ERROR;
             goto die;
         }
-        psFree(view);
     }
 
