import java.util.*;
import java.io.*;
import FRET.ListOfFiles;
import FRET.IntensityTraces; 
import biocomp.moltools.util.*;

public class efficiencyHistogram{
	
	public static void main(String[] args){
		
		// directory and file variables
		String dataDir ="/home/cocktail/bkeller/PROJECTS/FRET_DAse/nonALEX_00p010ms_Mg00p0mM/raw_dat";
		String fileEnding = "dat";
		String fileList = "/home/cocktail/bkeller/PROJECTS/FRET_DAse/nonALEX_00p010ms_Mg00p0mM/file_list.dat";
		String regionFile = "/home/cocktail/bkeller/PROJECTS/FRET_DAse/nonALEX_00p010ms_Mg00p0mM/raw_tt2/regions.dat";
		String intensityDir = "/home/cocktail/bkeller/PROJECTS/FRET_DAse/nonALEX_00p010ms_Mg00p0mM/intensity_window02000";
		String efficiencyDir = "/home/cocktail/bkeller/PROJECTS/FRET_DAse/nonALEX_00p010ms_Mg00p0mM/efficiency_window02000";
		String histogramDir = "/home/cocktail/bkeller/PROJECTS/FRET_DAse/nonALEX_00p010ms_Mg00p0mM/histogram_window02000";

		
		// data variables
		double timeStep = 0.01;
		int windowLength=2000;
		int nBins =25;
		
		// get list of trace files
		String[] traceFiles = ListOfFiles.getListFromFile(fileList, dataDir, fileEnding);
		
		// initialize histogram for all trajectories
		double[] hist = new double[nBins];
		for(int i=0; i<nBins; i++) hist[i]=0;
		
		
		// loop over trace files
		for(int i=0; i< traceFiles.length; i++){
		//for(int i=15; i< 16; i++){
			
			//DEBUGGING
			System.out.println(traceFiles[i]);
	
			IntensityTraces it = new IntensityTraces(traceFiles[i], timeStep, windowLength);		// initiate class IntensityTraces
			
			it.readRegions(regionFile, i);				// read regions	      
	        it.readPhotonTrace(11, 1, 2);				// read photon trace
	        it.convertToIntensitiesContinuous();		// convert to intensities, sliding the window along the trace
	        it.convertToEfficiencies();					// calculate efficiencies
	        it.efficiencyHistogram(it.getRegions()[0], it.getRegions()[1], nBins);					// calculate normalized histogram

	        // compose output file names
			int slashPosition = traceFiles[i].lastIndexOf("/");
			String intensityFile = intensityDir + traceFiles[i].substring(slashPosition, traceFiles[i].length());
			String efficiencyFile = efficiencyDir + traceFiles[i].substring(slashPosition, traceFiles[i].length());	        
			String histogramFile = histogramDir + traceFiles[i].substring(slashPosition, traceFiles[i].length());
			
			// write intensity trace, efficiency trace and efficiency histogram
			it.writeIntensityTrace(intensityFile, it.getRegions()[0], it.getRegions()[5]);
			it.writeEfficiencyTrace(efficiencyFile, it.getRegions()[0], it.getRegions()[5]);
			it.writeEfficiencyHistogram(histogramFile);
	        
			// update histogram for all trajectories
			double[] dummyHist = it.getEfficiencyHistogram();
			for(int k=0; k<nBins; k++) hist[k] += dummyHist[k];
			
		}
		
		// normalize histogram for all trajectories
		double sum=0;
		for(int i=0; i<sum; i++) sum+=hist[i];
		for(int i=0; i<sum; i++) hist[i] /= sum;
		
		// Print out histogram
		double binSize = 1.0 / (double)nBins;
		for(int i=0; i<nBins; i++) System.out.println((i*binSize + binSize/2) + "\t" + hist[i]);
		
	
		
	} // end: main function
	
	
} // end: class
