###############################################################################
# Copyright (c) 2011 - 2012 Trimble Navigation Ltd
# $Id: NoPiSC_Main.py,v 1.4 2012/03/08 04:42:28 shankar Exp $
###############################################################################
#
# NoPiSC_Main.py
#
# This top level module loops over a range of dates and concatenates per day
# stats_combo files into a single All_Stats file. Each unique combo will have a
# separate All_Stats file. Each unique combo will be assigned a "global" combo
# number. This is required since the combo number could change each day. Each
# day's diffs_summary file is parsed to identify combos processed. The per day
# stats_combo files are then appended to a "global" All_Stats_Combo# file.
###############################################################################

import sys
import os
import glob
from dateutil.rrule import rrule, DAILY
import datetime

from NoPiSC_Process import *
add_utils_dir_to_path()

from NoPiUT_Common_Meas import *
from NoPiUT_Load_Summary import *

summary_file_name = 'diffs_summary.txt'

###############################################################################
# Process data for over the range start_date - end_date for relevant
# baselines. The baselines are parsed from either a user specified file or from
# NoPiSG_Baselines.cfg
###############################################################################

# Path to data directory is a required argument
if ( len( sys.argv ) < 2 ) :
  show_multi_day_help()

# Ensure data directory name includes appropriate forward/back slash
data_path   = data_path_valid( sys.argv[1] )

# Parse multi day stats generator command line options
user_opts   = parse_multi_day_options()

# Parse default/user specified baseline file
[baseline_name, baseline_dir, norm_vals_file]=parse_baselines_file( user_opts )

# Determine processing start/end dates
[start_date, end_date]  =  get_date_range( user_opts ) 

# Generate statistics for NoPi results for each baseline over the
# period: start_date to end_date
for baseline,dir_name in zip( baseline_name,baseline_dir ) :

  # Reset day_num for each baseline
  day_num = 0

  print '--------------------------------------------------------------------' 
  print 'Concatenating results for : %s' % baseline

  # Loop from start_date to end_date
  for dt in rrule(DAILY, dtstart=start_date, until=end_date) :
    
    # Day number for current date. Start_date is day # 1
    day_num += 1

    [cur_date, cur_day_path] = get_cur_day_path( dt, data_path, baseline,
                                                 dir_name, disp_date = False )
    cur_day_summary_file     = cur_day_path + summary_file_name

    if ( os.access( cur_day_summary_file, os.R_OK ) ) :  
      diffs_summ = cl_load_diffs_summ( cur_day_summary_file )
      # Update master combo list if diffs_summ contains any new unique
      # combo. Also, concatenate data for each valid combo found in
      # diffs_summ
      update_master_combo_list( diffs_summ, cur_day_path,
                                dir_name, day_num ) 
    # Flag a warning a continue to the next day's data if a particular
    # day is missing diffs_summary.txt
    elif ( os.path.exists( cur_day_path ) ) :
      print 'Cannot locate summary file: %s' % summary_file_name
      print 'Skipping data for Baseline: %s Date: %s' % ( baseline, cur_date )
      continue

  # Reset global array: previous_day[] defined in
  # NoPiSC_Process.py
  # Required to ensure each baseline's per day statistics are
  # concatenated with necessary NaNs appended to the concatenated
  # files. NaNs are appended for days with missing data
  clear_prev_day_reg()

# Write list of master combos to a file. This file will be used when
# invoking Stats Display
create_concat_summary_file( baseline_name, baseline_dir, start_date, end_date )
