# Compute climatologies of sea ice from OSTIA
# Period: Copernicus (1993-2016)
#
#
# Script version 1.1
#
# Script works with:
#   Python version 3.10
#
#   Package version
#     numpy: 
#     pandas: 
#
#
#
# Ver1.0: Created by Mariko Koseki, 03.07.2025
# ver1.1: updated by Mariko, 12.01.2026




##--- Import modules ------------------------------##
import netCDF4
import numpy as np
from numpy import dtype
import pandas as pd
import datetime
from datetime import timedelta
import os
import sys
import platform



print('--- Python version ---')
print(platform.python_version())

print('--- Package version ---')
print('numpy: ', np.__version__)
print('pandas: ', pd.__version__)
print('-------------------------')
print('')





##--- Set path ------------------------------------------##
## Set path to input files ##
'''
Set path to input directory ###
'''
seaice_dir = '/nird/datapeak/NS9873K/norcpm/validation/seaicepre/' #ver1.1
### OSTIA ###
out_ostia = seaice_dir + 'ostia/all/'



## Output: Set path to output file ##
'''
Set path to output file
'''
out_dir = seaice_dir + 'clm/ostia/'

if not os.path.exists(out_dir):
    os.makedirs(out_dir)





##--- Read CSV files ------------------------------##
## Paths to CSV files ##
file_ostia = out_ostia + 'seaice_area_interpolated_ostia_all.csv'
df = pd.read_csv(file_ostia)
print(df.head(10))





## Compute climatology 1993-2016 ##
df['mean(1993-2016)'] = df[['1993', '1994', '1995', '1996', '1997', '1998', '1999', '2000', '2001', '2002',\
        '2003', '2004', '2005', '2006', '2007', '2008', '2009', '2010', '2011', '2012', '2013', '2014', '2015', '2016']].mean(axis = 1)
df['mmdd'] = pd.to_datetime(df['dtime']).dt.strftime('%m-%d')

print(df)





## Insert 'MMDD' column in the first column ##
target_col = 'mmdd'
df_target = df[target_col]
df_drp = df.drop(['dtime', 'mmdd'], axis=1)
df_drp.insert(0, target_col, df_target)
df2 = df_drp.reset_index(drop=True)
print(df2)




##--- Save DataFrame as CSV --------------------------------------##
df2.to_csv(out_dir + 'ostia_seaice_area_clm_all.csv')






##--- Extract climatology for each period -----------------------##
df_list = []
df2['date'] = pd.to_datetime('1993' + '-' + df2['mmdd'].astype(str))
print(df2)


### Jan-Jun ###
df_01_06 = df2[df2['date'] <= datetime.datetime(1993, 6, 30)]
#print(df_01_06)
df_01_06_drp = df_01_06.drop(['date'], axis=1)
print(df_01_06_drp)
df_list.append(df_01_06_drp)


### Feb-Jul ###
df_02_07 = df2[(df2['date'] >= datetime.datetime(1993, 2, 1)) & (df2['date'] <= datetime.datetime(1993, 7, 31))]
df_02_07_drp = df_02_07.drop(['date'], axis=1)
#print(df_02_07_drp)
df_list.append(df_02_07_drp)


### Mar-Aug ###
df_03_08 = df2[(df2['date'] >= datetime.datetime(1993, 3, 1)) & (df2['date'] <= datetime.datetime(1993, 8, 31))]
df_03_08_drp = df_03_08.drop(['date'], axis=1)
#print(df_03_08_drp)
df_list.append(df_03_08_drp)


### Apr-Sep ###
df_04_09 = df2[(df2['date'] >= datetime.datetime(1993, 4, 1)) & (df2['date'] <= datetime.datetime(1993, 9, 30))]
df_04_09_drp = df_04_09.drop(['date'], axis=1)
#print(df_04_09_drp)
df_list.append(df_04_09_drp)


### May-Oct ###
df_05_10 = df2[(df2['date'] >= datetime.datetime(1993, 5, 1)) & (df2['date'] <= datetime.datetime(1993, 10, 31))]
df_05_10_drp = df_05_10.drop(['date'], axis=1)
#print(df_05_10_drp)
df_list.append(df_05_10_drp)


### Jun-Nov ###
df_06_11 = df2[(df2['date'] >= datetime.datetime(1993, 6, 1)) & (df2['date'] <= datetime.datetime(1993, 11, 30))]
df_06_11_drp = df_06_11.drop(['date'], axis=1)
#print(df_06_11_drp)
df_list.append(df_06_11_drp)


### Jul-Dec ###
df_07_12 = df2[(df2['date'] >= datetime.datetime(1993, 7, 1))]
df_07_12_drp = df_07_12.drop(['date'], axis=1)
#print(df_07_12_drp)
df_list.append(df_07_12_drp)


### Aug-Dec + Jan ###
df_01 = df2[df2['date'] <= datetime.datetime(1993, 1, 31)]
df_08 = df2[df2['date'] >= datetime.datetime(1993, 8, 1)]
df_08_01 = pd.concat([df_08, df_01], axis=0)
df_08_01_drp = df_08_01.drop(['date'], axis=1)
df_08_01_rs = df_08_01_drp.reset_index(drop=True)
#print(df_08_01_rs)
df_list.append(df_08_01_rs)


### Sep-Dec + Jan-Feb ###
df_02 = df2[df2['date'] <= datetime.datetime(1993, 2, 28)]
df_09 = df2[df2['date'] >= datetime.datetime(1993, 9, 1)]
df_09_02 = pd.concat([df_09, df_02], axis=0)
df_09_02_drp = df_09_02.drop(['date'], axis=1)
df_09_02_rs = df_09_02_drp.reset_index(drop=True)
#print(df_09_02_rs)
df_list.append(df_09_02_rs)


### Oct-Dec + Jan-Mar ###
df_03 = df2[df2['date'] <= datetime.datetime(1993, 3, 31)]
df_10 = df2[df2['date'] >= datetime.datetime(1993, 10, 1)]
df_10_03 = pd.concat([df_10, df_03], axis=0)
df_10_03_drp = df_10_03.drop(['date'], axis=1)
df_10_03_rs = df_10_03_drp.reset_index(drop=True)
#print(df_10_03_rs)
df_list.append(df_10_03_rs)


### Nov-Dec + Jan-Apr ###
df_04 = df2[df2['date'] <= datetime.datetime(1993, 4, 30)]
df_11 = df2[df2['date'] >= datetime.datetime(1993, 11, 1)]
df_11_04 = pd.concat([df_11, df_04], axis=0)
df_11_04_drp = df_11_04.drop(['date'], axis=1)
df_11_04_rs = df_11_04_drp.reset_index(drop=True)
#print(df_11_04_rs)
df_list.append(df_11_04_rs)


### Dec + Jan-May ###
df_05 = df2[df2['date'] <= datetime.datetime(1993, 5, 31)]
df_12 = df2[df2['date'] >= datetime.datetime(1993, 12, 1)]
df_12_05 = pd.concat([df_12, df_05], axis=0)
df_12_05_drp = df_12_05.drop(['date'], axis=1)
df_12_05_rs = df_12_05_drp.reset_index(drop=True)
#print(df_12_05_rs)
df_list.append(df_12_05_rs)





##--- Save DataFrame as CSV --------------------------------------##
mm_name = ['01_06', '02_07', '03_08', '04_09', '05_10', '06_11', '07_12', '08_01', '09_02', '10_03', '11_04', '12_05']
for df_clm, mm in zip(df_list, mm_name):
    df_clm.to_csv(out_dir + 'ostia_seaice_area_clm_' + mm +'.csv')



print('')
print('Saved climatology')
print('')
print('Complated!!')
