In [1]:
import warnings
warnings.filterwarnings("ignore",category=FutureWarning)
import xarray as xr
import numpy as np
from matplotlib import pyplot as plt
import os
import csv
warnings.filterwarnings("ignore",message='invalid value encountered in less_equal')
%matplotlib inline
In [2]:
flight = '20150706'
In [3]:
pf1 = {'tempC': [],'rh': [],'Nt': [],'twc': [],'Dmm': [],'ar': [],'re': [],'rjctRatio': []}
pf2 = {'tempC': [],'rh': [],'Nt': [],'twc': [],'Dmm': [],'ar': [],'re': [],'rjctRatio': []}
cipFile = '/Users/danstechman/GoogleDrive/PECAN-Data/mp-data/' + flight + '/' + flight + '_CIPfit-spirals-10s1sAvg.nc'
# Pull out any global variables/attributes from the netcdf file
cipData_root = xr.open_dataset(cipFile)
sprlZone = str(cipData_root.sprlZone.data,'utf-8')
mcsType = str(cipData_root.mcsType.data,'utf-8')
numSprls = len(sprlZone)
# Loop over each spiral for the current flight
for ix in np.arange(0,numSprls):
# Open the group associated with the current spiral
cipData = xr.open_dataset(cipFile,group='spiral_' + str(ix+1))
if ix in [0,1]:
if ix == 0:
pf1['tempC'] = cipData.tempC_10s.data
pf1['rh'] = cipData.rh_10s.data
pf1['Nt'] = cipData.cipNt_hybrid_igf.data
pf1['twc'] = cipData.cipTWC_hybrid_igf_mlr.data
pf1['Dmm'] = cipData.cipDmm_hybrid_igf_mlr.data
pf1['ar'] = cipData.areaRatio_10s.data
pf1['re'] = cipData.efctvRadius_10s_mlr.data
pf1['rjctRatio'] = cipData.rjctRatio_10s.data
if ix == 1:
pf2['tempC'] = cipData.tempC_10s.data
pf2['rh'] = cipData.rh_10s.data
pf2['Nt'] = cipData.cipNt_hybrid_igf.data
pf2['twc'] = cipData.cipTWC_hybrid_igf_mlr.data
pf2['Dmm'] = cipData.cipDmm_hybrid_igf_mlr.data
pf2['ar'] = cipData.areaRatio_10s.data
pf2['re'] = cipData.efctvRadius_10s_mlr.data
pf2['rjctRatio'] = cipData.rjctRatio_10s.data
# Change units as desired for any variables
pf1['re'] = pf1['re']/1000
pf2['re'] = pf2['re']/1000
pf1['Dmm'][pf1['Dmm'] == 0] = np.nan
pf2['Dmm'][pf2['Dmm'] == 0] = np.nan
pf1['Nt'][pf1['Nt'] == 0] = np.nan
pf2['Nt'][pf2['Nt'] == 0] = np.nan
pf1['twc'][pf1['twc'] == 0] = np.nan
pf2['twc'][pf2['twc'] == 0] = np.nan
In [4]:
pf1_temp = pf1['tempC'][(pf1['tempC'] <= -2) & (pf1['tempC'] >= -7)]
Dmm_pf1 = pf1['Dmm'][(pf1['tempC'] <= -2) & (pf1['tempC'] >= -7)]
finiteIx_pf1 = np.isfinite(Dmm_pf1)
pf_Dmm_pf1 = np.poly1d(np.polyfit(pf1_temp[finiteIx_pf1],Dmm_pf1[finiteIx_pf1], 1))
Dmm_pf1_dT = pf_Dmm_pf1(-5) - pf_Dmm_pf1(-6)
print(Dmm_pf1_dT*1000)
In [58]:
print(np.nanmean(pf1['Dmm'][(pf1['tempC'] <= 0)]))
In [6]:
fig, ax = plt.subplots(figsize=(8,10))
ax.plot(Dmm_pf1[finiteIx_pf1],pf1_temp[finiteIx_pf1],'b-')
ax.plot(Dmm_pf1[finiteIx_pf1],pf1_temp[finiteIx_pf1],'bo',markeredgecolor='white',markeredgewidth=1,markersize=12)
ax.plot(pf_Dmm_pf1(pf1_temp[finiteIx_pf1]),pf1_temp[finiteIx_pf1],'r-')
ax.set_ylim(-10,0)
ax.invert_yaxis()
ax.set_ylabel('Temperature ($^{\circ}$C)',fontsize=18)
ax.tick_params(axis='both', which='major', labelsize=16)
ax.grid(which='both')
In [54]:
pf2_temp = pf2['tempC'][(pf2['tempC'] <= -5.5) & (pf2['tempC'] >= -8.8)]
Dmm_pf2 = pf2['Dmm'][(pf2['tempC'] <= -5.5) & (pf2['tempC'] >= -8.8)]
finiteIx_pf2 = np.isfinite(Dmm_pf2)
pf_Dmm_pf2 = np.poly1d(np.polyfit(pf2_temp[finiteIx_pf2],Dmm_pf2[finiteIx_pf2], 1))
Dmm_pf2_dT = pf_Dmm_pf2(-5) - pf_Dmm_pf2(-6)
print(Dmm_pf2_dT*1000)
In [60]:
print(np.nanmean(pf2['Dmm'][(pf2['tempC'] <= 0)]))
In [17]:
fig, ax = plt.subplots(figsize=(8,10))
ax.plot(Dmm_pf2[finiteIx_pf2],pf2_temp[finiteIx_pf2],'b-')
ax.plot(Dmm_pf2[finiteIx_pf2],pf2_temp[finiteIx_pf2],'bo',markeredgecolor='white',markeredgewidth=1,markersize=12)
ax.plot(pf_Dmm_pf2(pf2_temp[finiteIx_pf2]),pf2_temp[finiteIx_pf2],'r-')
ax.set_ylim(-10,0)
ax.invert_yaxis()
ax.set_ylabel('Temperature ($^{\circ}$C)',fontsize=18)
ax.tick_params(axis='both', which='major', labelsize=16)
ax.grid(which='both')
In [4]:
pf1_temp = pf1['tempC'][pf1['tempC'] <= 0]
Nt_pf1 = pf1['Nt'][pf1['tempC'] <= 0]
finiteIx_pf1 = np.isfinite(np.log10(Nt_pf1))
pf_Nt_pf1 = np.poly1d(np.polyfit(pf1_temp[finiteIx_pf1],np.log10(Nt_pf1[finiteIx_pf1]), 1))
Nt_pf1_dT = 1 - (10**pf_Nt_pf1(-6)/10**pf_Nt_pf1(-5))
print(Nt_pf1_dT)
In [27]:
pf1_temp = pf1['tempC'][(pf1['tempC'] <= -3) & (pf1['tempC'] >= -7.7)]
Nt_pf1 = pf1['Nt'][(pf1['tempC'] <= -3) & (pf1['tempC'] >= -7.7)]
finiteIx_pf1 = np.isfinite(np.log10(Nt_pf1))
pf_Nt_pf1 = np.poly1d(np.polyfit(pf1_temp[finiteIx_pf1],np.log10(Nt_pf1[finiteIx_pf1]), 1))
Nt_pf1_dT = 1 - (10**pf_Nt_pf1(-6)/10**pf_Nt_pf1(-5))
print(Nt_pf1_dT)
In [5]:
fig, ax = plt.subplots(figsize=(8,10))
ax.plot(Nt_pf1[finiteIx_pf1],pf1_temp[finiteIx_pf1],'b-')
ax.plot(Nt_pf1[finiteIx_pf1],pf1_temp[finiteIx_pf1],'bo',markeredgecolor='white',markeredgewidth=1,markersize=12)
ax.plot(10**(pf_Nt_pf1(pf1_temp[finiteIx_pf1])),pf1_temp[finiteIx_pf1],'r-')
ax.set_ylim(-10,0)
ax.set_xscale('log',nonposx='mask')
ax.invert_yaxis()
ax.set_ylabel('Temperature ($^{\circ}$C)',fontsize=18)
ax.tick_params(axis='both', which='major', labelsize=16)
ax.grid(which='both')
In [6]:
pf2_temp = pf2['tempC'][pf2['tempC'] <= 0]
Nt_pf2 = pf2['Nt'][pf2['tempC'] <= 0]
finiteIx_pf2 = np.isfinite(np.log10(Nt_pf2))
pf_Nt_pf2 = np.poly1d(np.polyfit(pf2_temp[finiteIx_pf2],np.log10(Nt_pf2[finiteIx_pf2]), 1))
Nt_pf2_dT = 1 - (10**pf_Nt_pf2(-6)/10**pf_Nt_pf2(-5))
print(Nt_pf2_dT)
In [29]:
pf2_temp = pf2['tempC'][(pf2['tempC'] <= -3) & (pf2['tempC'] >= -8)]
Nt_pf2 = pf2['Nt'][(pf2['tempC'] <= -3) & (pf2['tempC'] >= -8)]
finiteIx_pf2 = np.isfinite(np.log10(Nt_pf2))
pf_Nt_pf2 = np.poly1d(np.polyfit(pf2_temp[finiteIx_pf2],np.log10(Nt_pf2[finiteIx_pf2]), 1))
Nt_pf2_dT = 1 - (10**pf_Nt_pf2(-6)/10**pf_Nt_pf2(-5))
print(Nt_pf2_dT)
In [30]:
fig, ax = plt.subplots(figsize=(8,10))
ax.plot(Nt_pf2[finiteIx_pf2],pf2_temp[finiteIx_pf2],'b-')
ax.plot(Nt_pf2[finiteIx_pf2],pf2_temp[finiteIx_pf2],'bo',markeredgecolor='white',markeredgewidth=1,markersize=12)
ax.plot(10**(pf_Nt_pf2(pf2_temp[finiteIx_pf2])),pf2_temp[finiteIx_pf2],'r-')
ax.set_ylim(-10,0)
ax.set_xscale('log',nonposx='mask')
ax.invert_yaxis()
ax.set_ylabel('Temperature ($^{\circ}$C)',fontsize=18)
ax.tick_params(axis='both', which='major', labelsize=16)
ax.grid(which='both')
In [7]:
pf1_temp = pf1['tempC'][pf1['tempC'] <= 0]
twc_pf1 = pf1['twc'][pf1['tempC'] <= 0]
finiteIx_pf1 = np.isfinite(np.log10(twc_pf1))
pf_twc_pf1 = np.poly1d(np.polyfit(pf1_temp[finiteIx_pf1],np.log10(twc_pf1[finiteIx_pf1]), 1))
twc_pf1_dT = 1 - (10**pf_twc_pf1(-6)/10**pf_twc_pf1(-5))
print(twc_pf1_dT)
In [31]:
pf1_temp = pf1['tempC'][(pf1['tempC'] <= -3) & (pf1['tempC'] >= -7.7)]
twc_pf1 = pf1['twc'][(pf1['tempC'] <= -3) & (pf1['tempC'] >= -7.7)]
finiteIx_pf1 = np.isfinite(np.log10(twc_pf1))
pf_twc_pf1 = np.poly1d(np.polyfit(pf1_temp[finiteIx_pf1],np.log10(twc_pf1[finiteIx_pf1]), 1))
twc_pf1_dT = 1 - (10**pf_twc_pf1(-6)/10**pf_twc_pf1(-5))
print(twc_pf1_dT)
In [32]:
fig, ax = plt.subplots(figsize=(8,10))
ax.plot(twc_pf1[finiteIx_pf1],pf1_temp[finiteIx_pf1],'b-')
ax.plot(twc_pf1[finiteIx_pf1],pf1_temp[finiteIx_pf1],'bo',markeredgecolor='white',markeredgewidth=1,markersize=12)
ax.plot(10**(pf_twc_pf1(pf1_temp[finiteIx_pf1])),pf1_temp[finiteIx_pf1],'r-')
ax.set_ylim(-10,0)
ax.set_xscale('log',nonposx='mask')
ax.invert_yaxis()
ax.set_ylabel('Temperature ($^{\circ}$C)',fontsize=18)
ax.tick_params(axis='both', which='major', labelsize=16)
ax.grid(which='both')
In [9]:
pf2_temp = pf2['tempC'][pf2['tempC'] <= 0]
twc_pf2 = pf2['twc'][pf2['tempC'] <= 0]
finiteIx_pf2 = np.isfinite(np.log10(twc_pf2))
pf_twc_pf2 = np.poly1d(np.polyfit(pf2_temp[finiteIx_pf2],np.log10(twc_pf2[finiteIx_pf2]), 1))
twc_pf2_dT = 1 - (10**pf_twc_pf2(-6)/10**pf_twc_pf2(-5))
print(twc_pf2_dT)
In [51]:
pf2_temp = pf2['tempC'][(pf2['tempC'] <= -5) & (pf2['tempC'] >= -8.5)]
twc_pf2 = pf2['twc'][(pf2['tempC'] <= -5) & (pf2['tempC'] >= -8.5)]
finiteIx_pf2 = np.isfinite(np.log10(twc_pf2))
pf_twc_pf2 = np.poly1d(np.polyfit(pf2_temp[finiteIx_pf2],np.log10(twc_pf2[finiteIx_pf2]), 1))
twc_pf2_dT = 1 - (10**pf_twc_pf2(-6)/10**pf_twc_pf2(-5))
print(twc_pf2_dT)
In [52]:
fig, ax = plt.subplots(figsize=(8,10))
ax.plot(twc_pf2[finiteIx_pf2],pf2_temp[finiteIx_pf2],'b-')
ax.plot(twc_pf2[finiteIx_pf2],pf2_temp[finiteIx_pf2],'bo',markeredgecolor='white',markeredgewidth=1,markersize=12)
ax.plot(10**(pf_twc_pf2(pf2_temp[finiteIx_pf2])),pf2_temp[finiteIx_pf2],'r-')
ax.set_ylim(-10,0)
ax.set_xscale('log',nonposx='mask')
ax.invert_yaxis()
ax.set_ylabel('Temperature ($^{\circ}$C)',fontsize=18)
ax.tick_params(axis='both', which='major', labelsize=16)
ax.grid(which='both')