'''
imageJ script to read the time stamp and FRAP time from a file czi/lsm file acquired on a Zeiss microscope
the time stamp are saved into a file with the same name and ending with _ts.txt
Author: Antonio Politi, MPIBPC, 01.08.2019
modified on the 15.08.2019
version: 0.1.1
'''

#@input  File (label = "Select a file", style="file") myFile

from loci.formats import ImageReader, MetadataTools
from ij import IJ, ImagePlus, ImageStack
import os.path
import csv

def run_script(filename):
	timeStamp, FRAP = getMetadata(filename)
	timeStamp = [[i, float(round(t - timeStamp[0], 4)), int(FRAP)-1] for i, t in enumerate(timeStamp)]

	fileout =  os.path.splitext(filename)[0] + '_ts.txt'

	csvfile = open(fileout, 'wb')
	fieldnames = ['frame', 'time_sec', 'frame_frap']
	writer = csv.writer(csvfile, delimiter = '\t')
	
	writer.writerow(fieldnames)
	writer.writerows(timeStamp)
	csvfile.close()
	

		
def getMetadata(filename):
	""" read metadata from imageplus at path filename to get timestamps and frame where FRAP occurs """
	#get handle to the metadata
	reader = ImageReader()
	reader.setMetadataStore(MetadataTools.createOMEXMLMetadata())
	reader.setId(filename)
	omeOut = reader.getMetadataStore()
	
	skip = reader.getSizeZ()*reader.getSizeC()
	#timeStamps
	if reader.getSizeT() > 1:
		timeStamp = [round(omeOut.getPlaneDeltaT(0,i*skip).value(),4) for i in range(0, reader.getSizeT())]
	else:
		timeStamp = None

	extension = os.path.splitext(filename)[1]
	if extension == '.lsm':
		FRAP = reader.getSeriesMetadataValue("Track Bleach Scan Number #2")
		#reader.getSeriesMetadataValue("Event Time #1") - reader.getSeriesMetadataValue("TimeStamp #01") This exist only for lsm  
		#reader.getSeriesMetadataValue("Event Time #2") - reader.getSeriesMetadataValue("TimeStamp #01") not clear where it is stored for czi
	elif extension == '.czi':
		FRAP = reader.getMetadataValue('Experiment|AcquisitionBlock|MultiTrackSetup|TrackSetup|BleachSetup|BleachParameterSet|StartNumber #1')
	else:
		FRAP = None
	return timeStamp, FRAP

# If a Jython script is run, the variable __name__ contains the string '__main__'.
# If a script is loaded as module, __name__ has a different value.
if __name__ in ['__builtin__','__main__']:
    run_script(myFile.getPath())





