<SYSTEM_TASK:>
Given the following text description, write Python code to implement the functionality described below step by step
<END_TASK>
<USER_TASK:>
Description:
 Atmospherically Corrected Earth Engine Time Series
Overview
This notebook creates atmospherically corrected time series of satellite imagery using Google Earth Engine and the 6S emulator. 
Supported missions
Sentintel2
Landsat8
Landsat7
Landsat5
Landsat4
Output
Average, cloud-free pixel values 
Cloud masking
Uses standard cloud masks, i.e. FMASK for Landsat and ESA-QA60 for Sentinel 2.  There is no guarantee they will find all clouds, a discussion on more advance and/or alternative cloud masking strategies is available here
Initialize
Step1:  User Input
Step2:  All time series
This function extracts cloud-free time series for each mission, atmospherically corrects them and joins them together
Step3:  Data post-processing
Resample into daily intervals using liner interpolation and calculate hue-saturation-value from RGB.
Step4:  Hue Stretch
We visualize hue by taking a HSV color triplet and 'strecthing' the saturation  and value (i.e. setting them to 1) then converting the new 'stretched' HSV color-triplet back into RGB for display on the screen.
Step5:  bringing it all together...
make a pretty graph to help us do some science.
<ASSISTANT_TASK:>
Python Code:
# standard modules
import os
import sys
import ee
import colorsys
from IPython.display import display, Image
%matplotlib inline
ee.Initialize()
# custom modules
# base_dir = os.path.dirname(os.getcwd())
# sys.path.append(os.path.join(base_dir,'atmcorr'))
from atmcorr.timeSeries import timeSeries
from atmcorr.postProcessing import postProcessing
from atmcorr.plots import plotTimeSeries
Explanation: Atmospherically Corrected Earth Engine Time Series
Overview
This notebook creates atmospherically corrected time series of satellite imagery using Google Earth Engine and the 6S emulator. 
Supported missions
Sentintel2
Landsat8
Landsat7
Landsat5
Landsat4
Output
Average, cloud-free pixel values 
Cloud masking
Uses standard cloud masks, i.e. FMASK for Landsat and ESA-QA60 for Sentinel 2.  There is no guarantee they will find all clouds, a discussion on more advance and/or alternative cloud masking strategies is available here
Initialize
End of explanation
target = 'forest'
geom = ee.Geometry.Rectangle(-82.10941, 37.33251, -82.08195, 37.34698)
# start and end of time series
startDate = '1990-01-01'# YYYY-MM-DD
stopDate  = '2017-01-01'# YYYY-MM-DD
# satellite missions
missions = ['Sentinel2', 'Landsat8', 'Landsat7', 'Landsat5', 'Landsat4']
Explanation: User Input
End of explanation
allTimeSeries = timeSeries(target, geom, startDate, stopDate, missions)
Explanation: All time series
This function extracts cloud-free time series for each mission, atmospherically corrects them and joins them together
End of explanation
DF = postProcessing(allTimeSeries, startDate, stopDate)
Explanation: Data post-processing
Resample into daily intervals using liner interpolation and calculate hue-saturation-value from RGB.
End of explanation
hue_stretch = [colorsys.hsv_to_rgb(hue,1,1) for hue in DF['hue']]
Explanation: Hue Stretch
We visualize hue by taking a HSV color triplet and 'strecthing' the saturation  and value (i.e. setting them to 1) then converting the new 'stretched' HSV color-triplet back into RGB for display on the screen.
End of explanation
plotTimeSeries(DF, hue_stretch, startDate, stopDate)
Explanation: bringing it all together...
make a pretty graph to help us do some science.
End of explanation
<END_TASK>