#!/usr/bin/env python


import argparse
import ca_tracker
from multiprocessing import Process

import logging
logging.basicConfig(level=logging.INFO)
from logging.config import fileConfig
import os
#fileConfig('../ca_tracker/config/logging_config.ini')
logger = logging.getLogger()



def compute_times_and_seg(exp_filename, conf_data):
    
    logger.info('starting compute absolute times for %s', exp_filename)
    ca_tracker.abs_time(exp_filename, conf_data)

    logger.info('starting cell segmentation for %s', exp_filename)
    ca_tracker.cell_detect_2(exp_filename, conf_data)
    
    logger.info('starting particle tracking for %s', exp_filename)
    ca_tracker.track_centroids(exp_filename, conf_data)

    logger.info('starting merge_tracking_data for %s', exp_filename)
    ca_tracker.merge_tracking_data(exp_filename, conf_data)
    
    logger.info('starting compute features for %s', exp_filename)
    ca_tracker.compute_features(exp_filename, conf_data)

    logger.info('starting classify cells for %s', exp_filename)
    ca_tracker.classify_cells(exp_filename, conf_data)

    logger.info('starting intensity extraction for %s', exp_filename)
    ca_tracker.extract_intensity(exp_filename, conf_data)

    logger.info('starting plot profiles for %s', exp_filename)
    ca_tracker.plot_profiles(exp_filename, conf_data)
    
    logger.info('starting export overlays with labels %s', exp_filename)
    ca_tracker.exportOverlaysWithLabels(exp_filename, conf_data)    


if __name__ == '__main__':

    print 'working dir in ca_tracker:'
    print os.getcwd()

    parser = argparse.ArgumentParser(description='Compute absolute times and segment cells.')
    #parser.add_argument('-config', action="store_true", default=False)
    parser.add_argument('--config', dest='config_filename', help='path to config json file')
    args = parser.parse_args()
    config_filename = args.config_filename
    
    if config_filename is None:
        conf_data = ca_tracker.h.readConfig()
    else:
        conf_data = ca_tracker.h.readConfig(config_filename)
    
    exp_names = ca_tracker.h.getExpNames(conf_data)

    if exp_names is not None:
        logger.info('located following datasets: \n %s', exp_names)
        
        
    for exp_name in exp_names:
        p = Process(target=compute_times_and_seg, args=(exp_name, conf_data))
        p.start()    