/** Disposes of the tagged images in the imagestorage */
 @Override
 public void close() {
   shutdownHook_.run();
   Runtime.getRuntime().removeShutdownHook(shutdownHook_);
   for (MultipageTiffReader r : new HashSet<MultipageTiffReader>(tiffReadersByLabel_.values())) {
     try {
       r.close();
     } catch (IOException ex) {
       ReportingUtils.logError(ex);
     }
   }
 }
 @Override
 public void writeDisplaySettings() {
   for (MultipageTiffReader r : new HashSet<MultipageTiffReader>(tiffReadersByLabel_.values())) {
     try {
       r.rewriteDisplaySettings(displayAndComments_.getJSONArray("Channels"));
       r.rewriteComments(displayAndComments_.getJSONObject("Comments"));
     } catch (JSONException ex) {
       ReportingUtils.logError("Error writing display settings");
     } catch (IOException ex) {
       ReportingUtils.logError(ex);
     }
   }
 }
 private void openExistingDataSet() throws IOException {
   // Need to throw error if file not found
   MultipageTiffReader reader = null;
   File dir = new File(directory_);
   for (File f : dir.listFiles()) {
     if (f.getName().endsWith(".tif") || f.getName().endsWith(".TIF")) {
       reader = new MultipageTiffReader(f);
       Set<String> labels = reader.getIndexKeys();
       for (String label : labels) {
         tiffReadersByLabel_.put(label, reader);
         int frameIndex = Integer.parseInt(label.split("_")[2]);
         lastFrameOpenedDataSet_ = Math.max(frameIndex, lastFrameOpenedDataSet_);
       }
     }
   }
   try {
     setSummaryMetadata(reader.getSummaryMetadata());
     numPositions_ = MDUtils.getNumPositions(summaryMetadata_);
     displayAndComments_ = reader.getDisplayAndComments();
   } catch (JSONException ex) {
     ReportingUtils.logError(ex);
   }
 }