package imseProc.app;

import org.eclipse.swt.widgets.Display;



import org.eclipse.swt.widgets.Shell;

import otherSupport.SettingsManager;

import edu.emory.mathcs.utils.ConcurrencyUtils;

import mds.GMDSFetcher;
import imseProc.aqui.AquisitionHanger;
import imseProc.arduinoComm.ArduinoCommHanger;
import imseProc.core.IMSEProc;
import imseProc.core.Img;
import imseProc.dacControl.DACTimingHanger;
import imseProc.dshGen.DSHGenSource;
import imseProc.gmds.GMDSSink;
import imseProc.gmds.GMDSSource;
import imseProc.graph.GraphUtilProcessor;
import imseProc.gui.swt.ImageWindow;
import imseProc.jotter.JotterSink;
import imseProc.jotter.JotterSource;
import imseProc.noiseGen.NoiseGenSWTControl;
import imseProc.noiseGen.NoiseGenSource;
import imseProc.platesGen.PlatesGenSource;
import imseProc.proc.demod.DSHDemod;
import imseProc.proc.fft.FFTProcessor;
import imseProc.proc.imgFit.ImageFitProcessor;
import imseProc.proc.seriesAvg.SeriesAverageProcessor;
import imseProc.sensicam.SensicamSource;
import imseProc.stepperMotor.controllers.StepperHanger;
import imseProc.stepperMotor.controllers.StepperSWTController;
import imseProc.proc.transform.TransformProcessor;

/** The IMSE App to perform transform on sim results 
 *  
 */
public class IMSEProcSimTrans {
	public static void main(String[] args) {
		new SettingsManager("minerva", true);
		
		
		//int pulse = 178;
		//int pulse = 351; String setName = "SIM/EQH/faroNov2013/DSH/DSH"; String transName = "SIM/EQH/faroNov2013/TRANS/TRANS";
		int pulse = 351; String setName = "ANLYS/CAL354/DSH/DSH"; String transName = "ANLYS/CAL354/DSH_TRANS/DSH_TRANS";		
		//int pulse = 178; String setName = "ANLYS/CAL93/DSH/DSH"; String transName = "ANLYS/CAL93/DSH_TRANS/DSH_TRANS";
				
		//Display swtDisplay = new Display();
		
		///ConcurrencyUtils.setThreadPool(IMSEProc.getThreadPool()); //bad idea :(
		   
		//Read data from PCCIS MDS+ DB (HGW Lab)
		
		//Sources need to be instantiated
		GMDSSource mdsSrc = new GMDSSource();
		mdsSrc.loadTarget("AUG", pulse, setName);
		
		while(!mdsSrc.isIdle()){
			try { Thread.sleep(500); } catch (InterruptedException e) { }		
		}
		
		TransformProcessor xform = new TransformProcessor(mdsSrc, 0);
		try { Thread.sleep(500); } catch (InterruptedException e) { } //wait for the initial calc to fail before retrigger		
		xform.loadMapPoints(pulse);
		xform.calc();
		
		while(!xform.isIdle()){
			try { Thread.sleep(500); } catch (InterruptedException e) { }		
		}
		
		GMDSSink mdsSink = new GMDSSink();
		mdsSink.setSource(xform);
		
		mdsSink.setData("AUG", pulse, transName);
		mdsSink.save();
				
		while(!mdsSink.isIdle()){
			try { Thread.sleep(500); } catch (InterruptedException e) { }		
		}
		
		//IMSEProc.addImgPipeClass(GMDSSink.class);		
		//IMSEProc.addImgPipeClass(TransformProcessor.class);
			
		//ImageWindow imgWin1 = new ImageWindow(swtDisplay, null, 0);
		
		//IMSEProc.msgLoop(swtDisplay);
		
		IMSEProc.shutdown();
		
		//swtDisplay.dispose();
	}
}