protected void loadSnapshot(String strSnapshot) {
		log.info("strSnapshot = " + strSnapshot);
		String strSnapshotFilename = fileImport.getName() + "-" + strSubjectID
				+ "-" + strSnapshot + ".ss";

		try {
			DataInputStream in = new DataInputStream(new FileInputStream(
					strSnapshotFilename));

			// Camera information
			
			in.readDouble(); in.readDouble(); in.readDouble();
		
//			double x = in.readDouble();
//			double y = in.readDouble();
//			double scale = in.readDouble();

			// TODO I need to fully understand how scale things working...
//			getCanvas().getCamera().setViewScale(scale);
//			
//			PBounds viewBounds = getCanvas().getCamera().getViewBounds();
//			getCanvas().getCamera().translate(viewBounds.getCenterX() - x, viewBounds.getCenterY() - y);
			
			// Dust

			int nDustLength = in.readInt();
			assert nDustLength == dustList.length;

			for (int i = 0; i < nDustLength; i++) {
				double dX = in.readDouble();
				double dY = in.readDouble();
				dustList[i].setOffset(dX, dY);
			}

			// Magnet

			int nMagnetLength = in.readInt();

			removeAllMagnet();

			for (int i = 0; i < mnuMagnet.getItemCount(); i++) {
				JMenuItem m = mnuMagnet.getItem(i);
				m.setSelected(false);
			}

			for (int i = 0; i < nMagnetLength; i++) {
				int nVarIndex = in.readInt();
				double dX = in.readDouble();
				double dY = in.readDouble();
				int nMagnitude = in.readInt();
				double dThreshold = in.readDouble();

				Magnet aMagnet = addMagnet(nVarIndex);
				aMagnet.setOffset(dX, dY);
				aMagnet.setMagnitude(nMagnitude);
				aMagnet.setThreshold(dThreshold);

				for (int j = 0; j < mnuMagnet.getItemCount(); j++) {
					JMenuItem m = mnuMagnet.getItem(j);
					if (m.getText().equals(aMagnet.getMagnetName())) {
						m.setSelected(true);
						break;
					}
				}

				// m.setRepelList(); TODO
			}

			controlWindow.refresh();

			// Control Window

			controlWindow.loadSnapshot(in);

		} catch (EOFException e) {
			e.printStackTrace();
			assert false;
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}