Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                

S2 MPC: Sen2Cor Configuration and User Manual

Download as pdf or txt
Download as pdf or txt
You are on page 1of 53

1/53

Reference: S2-PDGS-MPC-L2A-SUM-V2.4
Issue: 1
Date: 2017-07-01

S2 MPC
Sen2Cor
Configuration and
User Manual
Ref. S2-PDGS-MPC-L2A-SUM-V2.4
2/53
Reference: S2-PDGS-MPC-L2A-SUM-V2.4
Issue: 1
Date: 2017-07-01

This Page Is Intentionally Blank


3/53
Reference: S2-PDGS-MPC-L2A-SUM-V2.4
Issue: 1
Date: 2017-07-01

Authors Table
Name Company Responsibility Date Signature
Digitally signed by
U. Mueller- Project Manager Uwe Müller- Uwe Müller-Wilm
Written by TPZV 2017-07-01 Wilm Date: 2017.07.20
Wilm L2A Maintenance 16:51:05 +02'00'

Verified by O Devignot CS Quality Manager 2017-07-01

Approved by L. Pessiot CS Service Manager 2017-07-01

Change Log
Issue Date Reason for change Pages(s)/Section(s)
1.0 2.July 2012 Created All
1.1 15 September Issue after S2PAD Phase 2 CDR. All
2012 Updated according to ESA comments and
discussion on CDR 02/08/2012
1.2 1.June 2013 Adaptation of installation procedures according to 2.4
unification of environments and pre release of
processor for QR
1.3 31. March 2014 New Section 2.2, updated Installation procedures for 2.2
Windows, moved information for data IO into new
created document [L2A-IODD]
1.4 27. June 2014 Restructuring of sections 3.1, 3.2 to align the 3.1.3
installation after upgrades of Anaconda and GDAL.
2.0 15.May 2015 Integration into Sentinel-2 Toolbox, Version 2.0 3.1
Complete Improvement of Installation Procedure:
Integration of CONDA Packages for GDAL and
GLYMUR
Upgrade to PSD V12
Upgrade of JPEG-2000 Readers to OpenJPEG
2.1.0 instead of Jasper
Fixes of SPRs according to Release note for Version
2.0
2.1 10.02.2016 Parallelisation on tile base implemented 2.5
Upgrade to PSD V13.1
2.2 13.04.2016 Integration of Look Up Tables 2.2.2, 2.2.7, 3.3.3
Automated Aerosol determination
Automated Ozone selection
New description for DEM selection
Various improvements for command line Handling
4/53
Reference: S2-PDGS-MPC-L2A-SUM-V2.4
Issue: 1
Date: 2017-07-01

Issue Date Reason for change Pages(s)/Section(s)


2.3 25.11.2016 Corrected command line options according to 2.2.7, 3.1, 3.3.3
SIIMPC-686
Updated installation procedure in section 3.1
Added new configuration items in section 3.3.3.
Added offset for DEM output
2.4 01.07.2017 Removed old installation procedure, now referring to 3.1, 5
release note
Added copyright notes
5/53
Reference: S2-PDGS-MPC-L2A-SUM-V2.4
Issue: 1
Date: 2017-07-01

Table of contents
1. INTRODUCTION 7
1.1 Purpose of the document .................................................................... 7
1.2 Document structure ............................................................................ 7
1.3 References .......................................................................................... 8
2. FUNCTIONALITY AND OPERATION 9
2.1 Level-2A Processor Architecture ......................................................... 9
2.2 Workflow .......................................................................................... 12
2.2.1 Scene Classification (L2A_SceneClass) .............................................. 12
2.2.2 Atmospheric Correction (L2A_AtmCorr) ............................................. 14
2.2.2.1 Look Up Table Generation ....................................................................... 15
2.2.2.2 User configuration.................................................................................. 16
2.2.3 Aerosol Optical Thickness ................................................................. 16
2.2.4 Water Vapour Retrieval .................................................................... 17
2.2.5 Cirrus Correction............................................................................. 18
2.2.6 Surface Reflectance Retrieval ........................................................... 19
2.2.7 Usage of Digital Elevation Maps ........................................................ 20
2.3 Product Formatting ........................................................................... 21
2.4 Runtime Configuration ...................................................................... 22
2.4.1 Pre-processing (L2A_Tables) ............................................................ 23
2.4.2 Improvement of the Processing Routines ........................................... 23
2.4.3 The 60 m Product Processing............................................................ 23
2.4.4 The 20 m Product Processing............................................................ 24
2.4.5 The 10 m Product Processing............................................................ 24
2.4.6 Post-Processing .............................................................................. 24
2.5 Parallel Processing ........................................................................... 26
2.5.1 Interface changes: .......................................................................... 26
2.6 Logging (Logger) .............................................................................. 28
3. CONFIGURATION AND INSTALLATION 29
3.1 Installation and Setup ...................................................................... 29
3.2 Configuration Files ............................................................................ 29
3.3 Operation .......................................................................................... 29
3.3.1 Command line interpreter ................................................................ 29
3.3.2 Integration into the Sentinel-2 Toolbox .............................................. 31
3.4 The Software Development Environment .......................................... 31
3.4.1 Requirements and Third Party Software ............................................. 31
3.4.1.1 Eclipse, PyDev and Rinzo ........................................................................ 32
3.4.1.2 Anaconda ............................................................................................. 32
3.4.1.3 Cython ................................................................................................. 33
3.4.1.4 Distutils ................................................................................................ 33
6/53
Reference: S2-PDGS-MPC-L2A-SUM-V2.4
Issue: 1
Date: 2017-07-01

3.4.1.5 GDAL ................................................................................................... 33


3.4.1.6 PyTables ............................................................................................... 33
3.4.2 Installation..................................................................................... 33
3.4.3 Configuration ................................................................................. 34
3.4.3.1 Configure Python ................................................................................... 34
3.4.3.2 Environment Settings ............................................................................. 35
3.4.4 Operation ...................................................................................... 36
3.4.4.1 Running the processor within Eclipse ........................................................ 36
3.4.4.2 Generating a Source Distribution ............................................................. 37
3.4.4.3 Generating a Build Distribution ................................................................ 37
4. REFERENCES 39
5. COPYRIGHT NOTES 40

List of Figures
Figure 2-1 – Sentinel-2 Spectral Bands and Resolutions ......................................... 9
Figure 2-2 – High Level Processor Architecture ..................................................... 11
Figure 2-3 – Scene Classification Module ............................................................. 11
Figure 2-4 – Atmospheric Correction Module ........................................................ 11
Figure 2-5 – Processing Flow, Overview .............................................................. 12
Figure 2-6 – Scene Classification ........................................................................ 13
Figure 2-7 – Scene Classification, Processing Flow ................................................ 14
Figure 2-8 – Atmospheric Correction, Processing Flow ........................................... 15
Figure 2-9 – AOT Retrieval using Band 12 ............................................................ 17
Figure 2-10 – WV Retrieval using Bands 8a and 9 ................................................. 18
Figure 2-11 – Cirrus Correction, Bands 2-4 with Band 10 ....................................... 19
Figure 2-12 – Left: Level 1C Input, Bands 2-4; right: Level 2A Output,
Bands 2-4, RGB composite images, scene from La Paz on ........................ 19
Figure 2-13 – Terrain correction; Left: Level 1C Input, Bands 2-4, RGB
composite image, middle: DEM, reshaped to according scene,
right: Level 2A Output, Bands 2-4, RGB composite image. ....................... 21
Figure 2-14 – Filing structure of Level-1C product on tile level ............................... 22
Figure 2-15 – Level 2A product, physical format Configuration (L2A_Config) ............ 25
Figure 3-1 – Configuration of Python interpreter within Eclipse I ............................. 34
Figure 3-2 – Configuration of Python interpreter within Eclipse II ............................ 35
Figure 3-3 – Environment setting via Eclipse ........................................................ 36
Figure 3-4 – SCD command line arguments ......................................................... 37

List of Tables
Table 2-1 – Classification Map ........................................................................... 13
Table 2-2 – Parameter space for atmospheric correction ........................................ 15
Table 3-1: Third Party products for the SDE ......................................................... 32
7/53
Reference: S2-PDGS-MPC-L2A-SUM-V2.4
Issue: 1
Date: 2017-07-01

1. Introduction
1.1 Purpose of the document
This document is the Software Installation and User Manual (SUM) for the
Sentinel-2 Level-2A Prototype Processor, which is labelled Sen2Cor for Sentinel 2
(atmospheric) Correction.
The prototype implementation for the Level 2A processing of Sentinel-2 imagery
over land is a combination of state-of-the-art techniques for performing
Atmospheric Corrections (AC, including Cirrus clouds and terrain correction),
tailored to the Sentinel-2 environment and a Scene Classification (SC) module.
Sen2Cor performs a pre-processing of Level-1C (L1C) Top of Atmosphere (TOA)
image data, and applies a scene classification an atmospheric correction and a
subsequent conversion into an ortho-image Level-2A Bottom-Of-Atmosphere
(BOA) reflectance product. Outputs are an Aerosol Optical Thickness (AOT) map,
a Water Vapour (WV) map and a Scene Classification map together with Quality
Indicators data. Details of the products and its contents is provided in [L2A-PDD]
of section 1.3.
Level-2A (L2A) products are re-sampled as L1C products with a constant GSD
(Ground Sampling Distance) of 10m, 20m and 60 m according to the native
resolution of the different spectral bands. If applicable, Level-2A products are
provided for each MSI channel at coarser resolution (i.e. 20 m and 60 m) as
well.
A large database of look-up tables (LUTs) has been compiled using an
atmospheric radiative transfer model based on libRadtran1. The LUTs are
generated for a wide variety of atmospheric conditions, solar geometries, and
ground elevations and are calculated with a high spectral resolution of 0.6 nm.
This database has been subsequently resampled with the Sentinel-2 spectral
responses, in order to obtain the sensor-specific functions needed for the
atmospheric correction.

1.2 Document structure


The configuration and user manual consists of the following chapters and
sections:

Chapter, Description
Section
1 this chapter
2 Introduces the Sen2Cor system. What is the general purpose
of the application, how is it structured, what are the
processing schemes. It lists the general system architecture
modules and functionality and gives a brief overview on its
functionality and operation.

1 https://www.libradtran.org
8/53
Reference: S2-PDGS-MPC-L2A-SUM-V2.4
Issue: 1
Date: 2017-07-01

3 Introduces the two different environments (runtime and


development) of the system in general and the source code
distribution.
3.1 How to install the processor software and the according
runtime environment.
3.2 How to configure the processor software and the according
runtime environment.
3.3 How to run the processor software in the according runtime
environment.
3.4 Describes the setup configuration and operation of the
software development environment, set up on top of Eclipse
and PyDev. Contains also a detailed overview on all used
third party tools.

With these sections the configuration and user manual enables developers to
upgrade and maintain the software and users of the software to operate the
system within their specific hardware environment.
What this document will not provide is the scientific background of the
application. This is part of the corresponding ATBD [L2A-ATBD], see below. Also
the configuration of the processor has been moved into [L2A-IODD]. In order to
avoid redundancies and inconsistencies between the different project documents,
this content will thus not be repeated here. If it is necessary for the
understanding of the operation, this SUM will refer to the according chapters of
[L2A-IODD], [L2A-PDD] and [L2A-DPM].

1.3 References
The reference list of all project related documents with their full version numbers
and issue dates is given in:
[L2A-GLODEF] S2PAD Project Glossary, S2PAD-VEGA-GLO-0001, version
3.3, 31.03.2014
[L2A-IODD] Sentinel-2 MSI – Input Output Data Definition
[L2A-PFS] Sentinel-2 MSI – Product Format Specification
[L2A-PDD] Sentinel-2 MSI – Level-2A Product Definition Document
[L2A-ATBD] Sentinel-2 MSI – Level 2A Products, Algorithm Theoretical
Basis
[L2A-PERF] Sentinel 2 MSI – Performance Tests on 64 and 32 bit
Python
[L2A-DPM] Sentinel-2 MSI – Level 2A Detailed Processing Model
9/53
Reference: S2-PDGS-MPC-L2A-SUM-V2.4
Issue: 1
Date: 2017-07-01

2. Functionality and Operation


Sen2Cor is a prototype processor for Sentinel-2 Level 2A product formatting and
processing. The processor performs the tasks of atmospheric-, terrain and cirrus
correction and a SC of Level 1C input data. Level 2A outputs are: Bottom-Of-
Atmosphere (BOA), optionally terrain- and cirrus corrected reflectance images,
AOT-, WV-, SC maps and Quality Indicators, including cloud and snow
probabilities. The Level 2A Product Formatting performed by the processor
follows the specification of the Level 1C User Product. Details are given in [L2A-
PFS].
The Sentinel-2 Multi-Spectral Instrument (MSI) consists of 13 spectral bands
with three different resolutions (10m, 20m and 60m) as shown in Figure 2-1.
The instrument covers a 290 km swath. The Level-1C image product, which
serves as the input for the Level-2A processing consists of a series of n tiles,
each with a 100 km square. Each tile consists of thirteen compressed JPEG-2000
images, each image representing one single band. The thirteen bands have three
different resolutions (10m, 20m and 60m) which lead to different image
dimensions of the Level-1C input product. These details are given in [L2A-PDD]
and [L2A-IODD].

Figure 2-1 – Sentinel-2 Spectral Bands and Resolutions

2.1 Level-2A Processor Architecture


It follows a high level description of the processor architecture:
The Sen2Cor application is designed by the following ten essential modules
(classes):
1. L2A_Process: the general operator module, which coordinates
the interaction between the other modules and creates the
skeleton L2A product structure of the metadata.
10/53
Reference: S2-PDGS-MPC-L2A-SUM-V2.4
Issue: 1
Date: 2017-07-01

2. L2A_Schedule: a scheduler module, coordinating the parallel


execution of 1..n processing modules, working on tile base
(L2A_ProcessTile).
3. L2A_ProcessTile: a single processing module, executing the
tasks of scene classification, atmospheric correction and the
creation of metadata on tile base.
4. L2A_SceneClass: performs the coarse classification of the input
images into their different contents like clouds, snow, water, soil
etc. and provides statistical analysis.
5. L2A_AtmCorr: transforms the input from top of atmosphere
(TOA) to bottom of atmosphere (BOA) representation and
performs the atmospheric correction of the input.
6. L2A_Config: a helper class providing the configuration
parameters to all other modules listed above.
7. L2A_Tables: a helper class, managing the conversion of the
JPEG-2000 based input data to an internal format (and vice versa)
and providing a high performance access to the data for the
processing modules (see section 2.4.1). It uses its own private
L2A_Config instance.
8. L2A_Manifest: a class specialized for the generation of the
manifest on product level.
9. L2A_XmlParser: a utility class for parsing the metadata and GIPP
files on demand.
10. L2A_Library: a collection of common tools used by all classes on
demand.
11/53
Reference: S2-PDGS-MPC-L2A-SUM-V2.4
Issue: 1
Date: 2017-07-01

Figure 2-2 – High Level Processor Architecture

Figure 2-3 – Scene Classification Module

Figure 2-4 – Atmospheric Correction Module


12/53
Reference: S2-PDGS-MPC-L2A-SUM-V2.4
Issue: 1
Date: 2017-07-01

2.2 Workflow
Figure 2-5 below shows the main processing workflow. After reading and
processing the input parameter and data the main processing module triggers
the creation of an internal temporary database, which is then used by the SC
and the AC module to retrieve and to store the data and intermediate products.
The processing can act in a loop, dependent on the number of different product
resolutions to be generated.

Figure 2-5 – Processing Flow, Overview

2.2.1 Scene Classification (L2A_SceneClass)


The SC algorithm allows to detect clouds, snow and cloud shadows and to
generate a classification map, which consists of 4 different classes for clouds
(including cirrus), together with six different classifications for shadows, cloud
shadows, vegetation, soils / deserts, water and snow. The algorithm is based on
a series of threshold tests that use as input top-of-atmosphere reflectance from
the Sentinel-2 spectral bands. In addition, thresholds are applied on band ratios
and indexes like the Normalized Difference Vegetation - and Snow Index (NDVI,
NDSI [3]). For each of these thresholds tests, a level of confidence is associated.
At the end of the processing chain a probabilistic cloud mask quality map and a
snow mask quality map is produced. The algorithm uses the reflective properties
of scene features to establish the presence or absence of clouds in a scene.
Cloud screening is applied to the data in order to retrieve accurate atmospheric
and surface parameters, either as input for the further processing steps below or
for being valuable input for processing steps of higher levels. Figure 2-5 below
shows the results of a SC (right side) based on modified AVIRIS test data (left
side). Twelve different classifications are provided.
13/53
Reference: S2-PDGS-MPC-L2A-SUM-V2.4
Issue: 1
Date: 2017-07-01

Figure 2-6 – Scene Classification

The generated classification map is specified as follows:


Table 2-1 – Classification Map

Label Classification

0 NO_DATA

1 SATURATED_OR_DEFECTIVE

2 DARK_AREA_PIXELS

3 CLOUD_SHADOWS

4 VEGETATION

5 NOT_VEGETATED

6 WATER

7 UNCLASSIFIED

8 CLOUD_MEDIUM_PROBABILITY

9 CLOUD_HIGH_PROBABILITY

10 THIN_CIRRUS

11 SNOW

Associated quality indicators on snow and cloud probability are generated from
the results. These Quality indicators calculate the probability (0-100%) that the
earth surface is obstructed by clouds or optically thick aerosol (ice or snow).
The SC processing consists of six different steps:
1. Snow detection;
2. Cloud detection;
3. Cloud shadow detection;
14/53
Reference: S2-PDGS-MPC-L2A-SUM-V2.4
Issue: 1
Date: 2017-07-01

4. Cirrus detection;
5. Classification map generation.
 The processing is shown in the flow diagram below.

Figure 2-7 – Scene Classification, Processing Flow

Details of this algorithm, especially on the different threshold conditions are


given in chapter 3 of [L2A-ATBD] and chapter 2.5 of [L2A-DPM]

2.2.2 Atmospheric Correction (L2A_AtmCorr)


The AC processing consists of a set of four different subtasks, (AOT, WV and
terrain retrieval (optional with terrain and cirrus correction, having three
different user products as output: AOT and WV tables on pixel level and the BOA
corrected reflectance images for all bands measured. Figure 2-8 below shows the
processing flow for the atmospheric correction module.
15/53
Reference: S2-PDGS-MPC-L2A-SUM-V2.4
Issue: 1
Date: 2017-07-01

Figure 2-8 – Atmospheric Correction, Processing Flow

2.2.2.1 Look Up Table Generation


The atmospheric model of SEN2COR (L2A_AtmCorr) is dependent on the
calculation of radiative transfer functions for different sensor and solar
geometries, ground elevations, and atmospheric parameters. The following list
presents a 6-dimensional parameter space and the grid spacing for each
parameter. The processor reads the parameter in form of Look Up Tables (LUTs)
pertaining to this parameter space and interpolates, if required. The LUTs have
been generated via libRadtran, a library for the calculation of solar and thermal
radiation in the Earth's atmosphere.
Table 2-2 – Parameter space for atmospheric correction

Parameter Range Increment / grid points


◦ ◦
Solar zenith angle 0 -70 10
◦ ◦
Sensor view angle 0 -10 10
◦ ◦ ◦
Relative azimuth angle 0 -180 30 (180 = backscatter)
Ground elevation 0 -2.5 km 0.5 km
Visibility 5 -120 km 5, 7, 10, 15, 23, 40, 80, 120 km
Water vapour, summer 0.4 -5.5 cm 0.4, 1.0, 2.0, 2.9, 4.0, 5.0 cm
Water vapour, winter 0.2 -1.5 cm 0.2, 0.4, 0.8, 1.1 cm

Starting with SEN2COR release 2.2.0 the user can select between four
atmospheric models: a set of 24 LUTs has been integrated to cover most of
atmospheric conditions on Earth for the Sentinel-2 mission. In the SEN2COR
context, a set of LUTs is composed by 6 or 4 LUT files depending on the total
water vapour columns content of the atmosphere. Different LUTs are calculated
16/53
Reference: S2-PDGS-MPC-L2A-SUM-V2.4
Issue: 1
Date: 2017-07-01

for the mid-latitude summer and mid-latitude winter atmospheres, with 6


different (sea level) ozone contents, a rural and a maritime aerosol, 6 or 4
different sea level water vapour columns. For each supported water vapour level,
the ground-to- space water vapour column depending on elevation according to
the atmosphere temperature / humidity vertical profile is provided.
SEN2COR LUTs are calculated for:
 2 different types of aerosols (rural and maritime)
 2 different types of atmospheres (mid latitude summer and mid
latitude winter)
 6 different types of ozone concentrations (depending on summer
or winter case)
 6 or 4 different amounts of water vapour column (depending on
summer or winter)

2.2.2.2 User configuration


The LUT selection is configurable via the user configuration file (L2A_GIPP.xml)
located inside the cfg folder of the directory where the $SEN2COR_HOME
environment variable points to. In the Look_UP_Tables selection of the
configuration file, three entries: Aerosol_Type, Mid_Latitude and Ozone_Content
can be set. The water vapour columns are set internally.
Default processing via configuration is the rural (continental) aerosol type with
mid latitude summer and an ozone concentration of 331 Dobson Units.

2.2.2.2.1 Setting of Automated Ozone Input


If the Ozone_Content is set to ‘0’ by the user, it will be determined automatically
by the processor. In that case, the measured ozone concentration is read from
the L1C input product (located in the AUX_DATA folder of each tile) and the LUT
with the best fit for the measured ozone concentration is used. Other parameters
possible are referenced in the configuration file.

2.2.2.2.2 Setting of Automated Aerosol / Atmosphere Determination


If the Aerosol_Type and / or Mid_Latitude are set to ‘AUTO’ by the user, it will be
determined automatically by the processor. In that case the processor will
process two (aerosol only) or four test trials before the final processing of the
atmospheric correction takes place. After calculation of the scene path radiance
in the blue and red region (as total minus reflected radiance, using the average
values obtained for the dark reference pixels) the ratio of the path radiance for
the blue channel scene compared to the read channel scene be compared to the
corresponding ratio for the existing aerosols (RURAL, MARITIME) or atmospheres
(SUMMER, WINTER) as contained in the LUTs.
The aerosol type for which the double ratio (dp) is closest to 1 is the best
approximation for the scene and will be selected ad used in all subsequent
measures for the corresponding tile.

2.2.3 Aerosol Optical Thickness


AOT retrieval provides a measure for the visual transparency of the atmosphere.
It is derived using the DDV (Dense Dark Vegetation) algorithm [5], using the
short wave infrared (SWIR) band 12 and correlates its reflectance with bands 4
17/53
Reference: S2-PDGS-MPC-L2A-SUM-V2.4
Issue: 1
Date: 2017-07-01

(red) and 2 (blue). The algorithm requires that the scene contains reference
areas of known reflectance behaviour, preferably Dark Dense Vegetation (DDV)
and/or dark soil and water bodies.
The algorithm starts with a user-defined visibility (default: 20 km) as input. If
the scene contains no dark vegetation or soil pixels, the surface reflectance
threshold of band 12 will be successively iterated in order to include medium
brightness reference pixels in the sample. If the scene contains no reference and
no water pixels the scene is processed with the start visibility instead. The
algorithm delivers an AOT map as shown in Figure 2-9 below.

Figure 2-9 – AOT Retrieval using Band 12

2.2.4 Water Vapour Retrieval


WV retrieval over land is performed with the Atmospheric Pre-corrected
Differential Absorption algorithm (APDA, [6]) which is applied to the two
Sentinel-2 bands B8a, and B9 (Fig. 4). Band 8a is the reference channel in an
atmospheric window region. Band B9 is the measurement channel in the
absorption region. The absorption depth is evaluated by calculating the radiance
for an atmosphere with no WV, assuming that the surface reflectance for the
measurement channel is the same as for the reference channel. The absorption
depth is then a measure of the WV column content.
18/53
Reference: S2-PDGS-MPC-L2A-SUM-V2.4
Issue: 1
Date: 2017-07-01

Figure 2-10 – WV Retrieval using Bands 8a and 9

2.2.5 Cirrus Correction


The Cirrus Correction algorithm uses the sentinel (cirrus) channel 10. Thin cirrus
clouds affect the visible, near- and shortwave infrared spectral regions. They are
partially transparent and thus difficult to detect with broad-band multispectral
sensors, especially over spatially inhomogeneous land areas.
WV, in contrast, dominates in the lower troposphere of 0-5 km. A narrow
spectral band in a spectral region of very strong WV absorption (Band 10) will
thus absorb the ground reflected signal, but will receive the scattered cirrus
signal.
Cirrus reflectance of band 10 can therefore be correlated with other bands in the
VNIR and SWIR region and the cirrus contribution can thus be removed from the
radiance signal to obtain a cirrus-corrected scene. This is shown in Fig. 5 below
as a qualitative result.
19/53
Reference: S2-PDGS-MPC-L2A-SUM-V2.4
Issue: 1
Date: 2017-07-01

Figure 2-11 – Cirrus Correction, Bands 2-4 with Band 10

2.2.6 Surface Reflectance Retrieval


Surface Reflectance retrieval is performed for each sequential Band B1 – B12.
Figure 2-9 below shows the Level 1C input data and the corresponding Level 2A
output after atmospheric correction from a scene of La Paz, retrieved on
28.03.2016.

Figure 2-12 – Left: Level 1C Input, Bands 2-4; right: Level 2A Output,
Bands 2-4, RGB composite images, scene from La Paz on
20/53
Reference: S2-PDGS-MPC-L2A-SUM-V2.4
Issue: 1
Date: 2017-07-01

2.2.7 Usage of Digital Elevation Maps


Since the release of SEN2COR 2.2 Digital Elevation Maps can be used for two
purposes:
1. Improvement of the scene classification: previous versions of the processor
had a tendency of false classification of water pixels inside of cloud borders
and the correct discrimination between topographic and cloud shadow pixels.
This has now been improved by taking the height information of an (optional)
digital elevation map (DEM) as an additional input. To use this feature it is
necessary to activate the reading of an appropriate DEM as is explained
below.
2. Improvement of the terrain correction for rugged terrains: the algorithm for
rugged terrain requires the existence of an appropriate Digital Elevation Map
(DEM) and a set of derived products like slope, aspect and terrain shadow
maps. The retrieval of the water vapour map also includes this terrain
elevation.
SEN2COR is currently prepared to make use of two different DEM’s. The first one
is the 90m SRTM Digital Elevation Database from CGIAR-CSI. Please read
carefully the Disclaimer given on:
http://www.cgiar-csi.org/data/srtm-90m-digital-elevation-
database-v4-1
before you decide to make use of this database.
The second supported format is the commercial 90m DTED-1 Format from
PlanetDEM:
http://www.planetobserver.com/products/planetdem/planetdem-
90/
We do not activate the usage of any of these databases by default. It has to be
set manually. The user can specify a DEM in the L2A_GIPP.xml configuration file
by setting the parameter for <DEM_Directory> to a relative path, instead of
NONE. The DEM will then be located in the specified folder in the Sen2Cor home
directory.
Example: <DEM_Directory>dem/srtm</DEM_Directory>
The Planet DEM is not downloadable for free and must be purchased. Therefore,
the processor expects the appropriate DEM data having the form of:
eXXX_nYY.dt1 in the specified local folder and uses them, if available. If no
appropriate DEM is found in this folder it tries to retrieve it from CGIAR-CSI:
For the CGIAR-CSI DEM, the processor will start automatically to download the
DEM’s from the database referenced by:
<DEM_Reference>
http://data_public:GDdci@data.cgiar-csi.org/srtm/tiles/GeoTIFF/
</DEM_Reference>
If a relative path for DEM_Directory is addressed. If an already downloaded DEM
can be found in the local folder referenced by DEM_Directory, the download will
not take place and the local archive is used instead. If the download fails and no
local DEM can be found, the processor continues with a flat surface calculation.
The geo-coordinates and angular information are obtained from the Level-1C
metadata. The area of interest is created and fitted to the input images
21/53
Reference: S2-PDGS-MPC-L2A-SUM-V2.4
Issue: 1
Date: 2017-07-01

according to the information retrieved from the metadata and the conversion is
performed using the GDAL libraries from OSGEO.
The algorithm reformats resamples and assembles the DEMs based on the geo
locations obtained either from the Level-1C metadata or from the JPEG-2000
images. Finally it creates the according slope, aspect and a hill shadow map
using the GDAL tools.
The retrieval of the spectral reflectance cube consists of the following steps:
1. iterations for terrain reflectance;
2. (optional) empirical BRDF correction;
3. adjacency correction;
4. spherical albedo correction.
Figure 2-10 below shows a comparison of the Level 2A output without usage of a
DEM and the corresponding Level 2A output when a 90 m CGIAR DEM is applied
before terrain correction. The same scene as for Figure 2.9 is shown.

Figure 2-13 – Terrain correction; Left: Level 1C Input, Bands 2-4, RGB
composite image, middle: DEM, reshaped to according scene, right: Level 2A
Output, Bands 2-4, RGB composite image.

Please Note! Since Sen2Cor V.3.0 (PFS 14.2) an offset of 10.000 is


added to the DN output Value of the DEM array in order to support
negative heights, as the OpenJPEG format only supports unsigned
integer values. The highest elevation value on Earth: ~8,848 m and
lowest elevation value on dry land: ~ -418m is thus encoded as 18848
and 9582 DN.

2.3 Product Formatting


The Level 2A Product format is closely related to the Level 1C Top-of-
Atmosphere (TOA) reflectance product which serves as an input to the
processor. It consists of 13 JPEG-2000 images, associated to the 13 Sentinel-2
spectral bands at three different spatial resolutions with a ground sampling
distance of 10, 20, and 60m.
22/53
Reference: S2-PDGS-MPC-L2A-SUM-V2.4
Issue: 1
Date: 2017-07-01

The generated Level 2A BOA reflectance output images are resampled and
generated with an equal spatial resolution for all bands, based on three user
selectable resolutions of 10, 20 and / or 60m.
The tile level contains different components, based on the user selected
resolution:
 a 10 m resolution product contains spectral bands 2, 3, 4 and 8 and an AOT
map resampled from 20m
 a 20 m product contains band 2 – 7, the bands 8a, 11 and 12 and an AOT
and WV map
 a 60m product contains all components of the 20m product and additionally
the 60m bands 1 and 9
 Additionally, starting with Sen2Cor 2.3.0 a True Color composite Image (TCI)
using Bands 2-4 with the same resolution as the monochrome bands will be
stored in parallel to the reflectance output images. This feature will be
available for PSD version 14.2 and above.
The Cirrus band 10 will be omitted in the Level 2A output, as it does not contain
surface information. Fig. 2 shows the Level 2A user product on tile level.

PDI Level-1C
Tile (TAR)

Tile Metadata IMG Data QI Data Manifest.safe PDI-Id-Metadata


(XML) (Folder) (Folder) (XML) (XML)

Figure 2-14 – Filing structure of Level-1C product on tile level

The complete specifications for all inputs are provided in [L2A-PFS] and [L2A-
IODD]. Level-2A Inputs are derived from the Level-1C data schemes as
described in [S2-PFS].

2.4 Runtime Configuration


Ground Image Processing Parameter (GIPP) are configured in an XML file named
L2A_GIPP.xml, located in the <cfg> subdirectory of the processor (see example
in the appendix), where they can be configured by the user. For each processed
Level 2A tile the GIPP xml file will be renamed to
S2?_USER_GIP_L2A_TL_<TILE_ID> (see section A.2.3 of [L2A_PFS]) and
subsequently copied into the AUX_DATA subfolder of the corresponding granule.
The GIPP are listed in their current context. These parameters, together with all
input, output and other auxiliary data are comprehensive listed in the
corresponding [L2A-IODD] document and thus not repeated here.
23/53
Reference: S2-PDGS-MPC-L2A-SUM-V2.4
Issue: 1
Date: 2017-07-01

2.4.1 Pre-processing (L2A_Tables)


The Level-1C input data is expected to be present in a folder structure at product
level, as specified in section 3.1 of [L2A-PDD]. The location of the Level-1C input
archive can be specified via the command line argument.
Due to the three different resolutions of the Level-1C input images, conversion
routines will serve for an up- and down-sampling of parts of the images into the
appropriate resolution as well as the transfer from JPEG-2000 into a different
internal format (see below). This has been implemented using the OpenJPEG
library, which will be installed during the Sen2Cor setup.
Due to the relative huge size of the image data (especially for the high resolution
10 bands B02 – B04 and B08) data in- and output has been shown as rather
time and memory consuming.
An intermediate data conversion thus was selected which converts the JPEG-
2000 images and the necessary metadata (like the DEM) into an internal format
based on HDF5. HDF5 is a data model, library, and file format for storing and
managing data. It is especially designed for flexible and efficient I/O and for high
volume and complex data. HDF5 is portable and extensible, allowing applications
to evolve in their use and platforms to be supported.
The interfacing with the internal data format is implemented via PyTables.
PyTables is a package for managing hierarchical datasets, designed to efficiently
cope with extremely large amounts of data. It is built on top of the HDF5 library,
the Python language and the NumPy package. PyTables and HDF5 are described
in section 3.4.1.6

2.4.2 Improvement of the Processing Routines


Starting with SEN2COR 2.2.0 the routines for generating user products of
different resolutions have been decoupled and generally improved:

 SEN2COR will now also work on existing L2A user products. This
allows the generation of different resolutions in subsequent steps.
 If the user is specifying no resolution at all on the command line,
all resolutions will be generated in three subsequent steps. This is
the default. The selection of a 60 m resolution or 20m resolution
via command line will only generate the resolution specified.
 If a resolution has already been processed for a given L2A
product, Sen2Cor will not start regeneration but will inform the
user that this product already exists.
 The selection of a 10 m resolution requires the generation of a 20
m product. If a 20m product already exists from a previous
processing, this will be taken as input, otherwise it will be
generated in a first step, before the 10 m resolution product is
processed. If the user wants to start from scratch, he must move,
delete or rename the existing product.
 It is also possible to remove only single tiles of an existing
product. These tiles will then be regenerated; the other existing
tiles will be left untouched.

2.4.3 The 60 m Product Processing


The 60m product processing takes the three 60m bands B01, B09 and B10 and a
60m DEM as inputs and converts them directly into the internal HD5 format. The
24/53
Reference: S2-PDGS-MPC-L2A-SUM-V2.4
Issue: 1
Date: 2017-07-01

three 10m bands B02-B04 will first be down-sampled to 60m. The same is true
for the 20m bands B05 – B8A and B11, B12. The 10m band B08 is not used for
the 60m processing.

Beneath the twelve optical channels (the cirrus channel B10 is excluded as it does
not represent surface information) the 60m product processing generates a SC map
according to the classification below, quality indicators for presence of snow and
clouds (in percentage), an Atmospheric Optical Thickness (AOT), a WV map, a
Visible Index file and a preview image, covering the three visible bands 2-4 within an
JPEG-2 compressed image, having a 320m resolution.

2.4.4 The 20 m Product Processing


The 20m product processing takes the 20m bands B05 – B8A and B11, B12 and
a 20m DEM as inputs and converts them directly into the internal HD5 format.
The three 60m bands B01, B09 and B10 will first be up-sampled to 20m, the
three 10m bands B02-B04 will be down-sampled to 20m. The 10m band B08 is
not used for the 20m processing.

The 20m product processing covers nine optical channels a 20m AOT and a WV
and a Visibility Index file corresponding to the AOT. The three resampled 60m bands
B01, B09 and B10 are omitted in order to avoid spectral artefacts due to mixed
signatures and resampling.

Starting with se2cor 2.2.0 it is no longer required, that a 60 m product will be


processed first.

2.4.5 The 10 m Product Processing


Inputs for the 10m product processing are the four 10m bands B02-B04 and
B08, an optional 10m DEM an up-sampled Scene Classification and a Visibility
Index map, both up-sampled from 20m. As the WV influence is very small, only
the scene-average WV needs to be used for the surface reflectance retrieval. The
10m product processing covers thus only four optical channels. The other
channels, not used for the calculation will be omitted. If a 20 m processing has
already been performed in ahead, these data will be used as input. Else, a 20 m
resolution will be performed first, in order to have access to the input data.

2.4.6 Post-Processing
The OpenJPEG Library is used for generating the final L2A-Product, transferring
the internal HDF5 based tables back into the JPEG-2000 format. It keeps for all
generated products the final (resampled) resolution.
Post-processing also packs the folder back to a Level-2A archive which is shown
in its unpacked version in Figure 2-15. This archive will be placed in parallel to
the Level-1C input archive. The location of the Level-2A output archive can be
configured in the L2A_GIPP.xml configuration file, which can be found in the path
where the SEN2COR_HOME environment variable points to.
25/53
Reference: S2-PDGS-MPC-L2A-SUM-V2.4
Issue: 1
Date: 2017-07-01

Figure 2-15 – Level 2A product, physical format Configuration


(L2A_Config)
26/53
Reference: S2-PDGS-MPC-L2A-SUM-V2.4
Issue: 1
Date: 2017-07-01

2.5 Parallel Processing


Since version 2.2.0 of Sen2Cor a parallel processing on tile base is implemented.
The maximum of processes can be determined via the L2A_GIPP.xml input
configuration:
<Nr_Processes>AUTO</Nr_Processes>
Nr_Processes can be an unsigned integer value specifying the number or
processes intended to operate in parallel or: AUTO. If AUTO is chosen, the
processor determines the number of processes automatically, using the CPU info
of the given architecture.
If L2A_Process is started with a L1C User product as the given directory
argument, a series of tiles will be processed in parallel, according to the given
Nr. of Processes in the L2A_GIPP above. If the Nr of Processes is 1, only a
sequential processing will take place.
If L2A_Process is started with a L1C Tile as an argument, only the selected tile
will be processed. The Nr. of processes will be temporary set to 1.
The given directory argument can be absolute or relative (see also section
3.3.1).
Memory requirements: the atmospheric correction processing for 10m
resolutions uses a huge amount of memory due to the 10.000 x 10.000 pixel for
each image. Multiple images must be kept at certain intervals completely in
memory for performing correlations. Thus, for each processing at 10m
resolution, as a general rule of thumb, a resource of 4 GB of memory per
process should be available. Thus, unless you have a machine with sufficient
memory, leave the Nr. of processes to single processing (1), otherwise memory
overflow errors will occur during processing. On a 2 Core MAC / Linux
workstation with 8 GB RAM, 2,8 GHz Intel i5 and 500 GB SSD, a 4 tiles parallel
processing for 10m resolution images has been successfully performed during
the tests. In systems which are equipped with hard disks, however more
memory might be needed, due to swapping effects.

2.5.1 Interface changes:


Command line: a new feature for the processing of single tiles has been added.
The processing of a complete product can be used as in previous versions.
Configuration: the L2A_GIPP.xml has been rearranged. Only user specific
configuration parameters are presented. Expert configuration parameters have
been moved into 2 configuration files which are located under:
<anaconda_home>/lib/python2.7/site-packages/sen2cor-2.2.0-
py2.7.egg/sen2cor/cfg
L2A_CAL_SC_GIPP.xml: contains the calibration parameter for the scene
classification which should only be changed by expert users. Thus this file is no
member of the user configuration.
L2A_CAL_AC_GIPP.xml: contains the calibration parameter for the atmospheric
correction which should only be changed by expert users. Thus this file is no
member of the user configuration.
Starting with Version 2.3.0 the following four changes in the configuration have
been added.
27/53
Reference: S2-PDGS-MPC-L2A-SUM-V2.4
Issue: 1
Date: 2017-07-01

Configuration Description Value


Item

Scaling_Limiter limits the scaling of the path true / false


radiance for the blue channel to +/- (default)
10%.

Scaling_Disabler Disables the scaling of the path true / false


radiance for the blue channel. (default)

Rho_Retrieval_Step2 Disables the execution of step 2 of true


the (default) /
false

As these configuration items are of experimental character they are located in


the expert configuration file L2A_CAL_AC_GIPP.xml and should not be changed
by standard users.
In the user configuration file L2A_GIPP.xml (located in the cfg directory of the
directory where $SEN2COR_HOME points to) the default value for the visibility
has been changed from 23 to 40 KM.

Configuration Description Value


Item

Visibility Sets the visibility default value 40.0


(default)

Other Changes:
Commands can now be executed repeatedly on an already existing User Product.
The current product will then be overwritten with the new calculation.
 A selected resolution of 60 m will only process the 60 m
resolution.
 A selected resolution of 20 m will only process the 20 m
resolution.
 A selected resolution of 10 m will process the 20 m resolution first,
if not exist (as it is the base for the 10 m. If it exists, only the 10
m resolution will be processed.
Interface to the PDGS
The current xml interface from sen2Cor embedded in the PDGS was agreed
during May 2015:

<Processor_List>
<Hp_Sc_Name step_id="1" wall_time="00:10:00" mem="2">L2A_Process <param1>
<param2><param3></Hp_Sc_Name>
<Hp_Sc_Version>xx.yy.zz</Hp_Sc_Version>
</Processor_List>
Sen2Cor creates a bash script as below:

# BEGIN
# L2A_Process.bash:
28/53
Reference: S2-PDGS-MPC-L2A-SUM-V2.4
Issue: 1
Date: 2017-07-01

export PATH="/<the anaconda installation directory>/anaconda/bin":$PATH


source ./L2A_Bashrc
L2A_Processor-$1 $2 $3 $4
# END
Where:
$1: a version string
$2: the resolution (60 <default>, 20, 10)
$3: the L2A Product ID (a string)
$4: optional parameter, currently not used.
# BEGIN
# L2A_Process.bash:
#
export PATH="/<the anaconda installation directory>/anaconda/bin":$PATH
source ./L2A_Bashrc
L2A_Process-$1 $2 $3
# END
Where:
$1: a version string
$2: the resolution (60 <default>, 20, 10)
$3: the L2A Product directory,

$3 (the directory argument can be used in two different modes.


Examples:
<the_L1C_product_directory>/S2A_OPER_PRD_MSIL1C_PDMC_20150630T084936_R062_V2
0150627T103515_20150627T103515.SAFE
<the_L1C_product_directory>/S2A_OPER_PRD_MSIL1C_PDMC_20150630T084936_R062_V2
0150627T103515_20150627T103515.SAFE/GRANULE/S2A_OPER_MSI_L1C_TL_MTI__2015062
7T180307_A000062_T32TNR_N01.00
When the second argument (on tile base) is used, the processor switches
automatically in the single process mode and generates only the given tile. With
this, the processor can also be used in combination with an external (higher
level) orchestrator.

2.6 Logging (Logger)


The module L2A_Config keeps an instance of a logger object. Each of the
processing modules writes its own diagnosis and status messages into a common
log-file, located in the HTML folder at the top of the User product.
The log level can be configured in the GIPP (L2A_GIPP.xml) as:
DEBUG, INFO, WARNING, ERROR, CRITICAL, NOTSET
The log-level is hierarchical: if e.g. set to DEBUG, all higher messages such as
INFO, WARNING, ERROR or CRITICAL will be displayed as well. Setting the log-
level to ERROR displays only ERROR and CRITICAL messages.
Beneath the message itself, the logger displays the system time stamp when the
message was generated, the log-level, the module which has generated the
message and the function and code line of the module which has generated the
message.
29/53
Reference: S2-PDGS-MPC-L2A-SUM-V2.4
Issue: 1
Date: 2017-07-01

3. Configuration and Installation


3.1 Installation and Setup
Installation and Setup of the runtime environment is specific on the actual
releases of sen2Cor and is described in the according release note under Section
4.

3.2 Configuration Files


Located under $SEN2COR_HOME/cfg the GIPP file of the application (which is an
xml formatted file) can be configured by the user for individual purposes. If a
different configuration shall be used,‘$SEN2COR_HOME directory can be
reconfigured to a different directory:
export SEN2COR_HOME’ = <directory of your choice>
This allows the operation with multiple configuration settings. Configuration is
part of the IODD and thus not described here.

3.3 Operation
The processor can be operated in two different ways:
 either as a purely command line driven application;
 or from the Sentinel-2 Toolbox
 as a command line driven application inside the PDGS

3.3.1 Command line interpreter


Calling the script L2A_Process with the option ‘-h’ via command line displays the
following menu:

W:\testdata>L2A_Process --help
usage: L2A_Process-script.py [-h] [--resolution {10,20,60}] [--sc_only]
directory

Sentinel-2 Level 2A Prototype Processor (Sen2Cor). Version: 2.4.0, created:


2017.06.16, supporting Level-1C product version: 14.2.

positional arguments:
directory Directory where the Level-1C input files are located

optional arguments:
-h, --help show this help message and exit
--resolution {10,20,60}
Target resolution, must be 10, 20 or 60 [m]
--sc_only Performs only the scene classification at 60m
resolution
30/53
Reference: S2-PDGS-MPC-L2A-SUM-V2.4
Issue: 1
Date: 2017-07-01

The <directory> argument can be either a relative or an absolute


pathname.
If a relative pathname is given, it is expected that the user is calling
Sen2Cor from inside a parent directory. Sen2cor will expand the absolute
pathname for that directory.
The pathname can either point to a L1C user product or to a single tile of
the user product.
If the argument points to a user product, all tiles of the user product will
be processed subsequently. If the argument points to a single tile, only
that tile will be processed. In the latter case, the configuration settings
for parallel processing will be ignored.
Sen2cor will use the L1C user product identifier for generating a
subsequent L2A product. For this purpose, the L1C source directory must
start with an identifier like 'S2?_????_???_???L1C*' which is the standard, if
you download a L1C user product from the Sentinel 2 data hub. The
generated product will get the identifier 'S2?_????_???_???L2A*',
everything else will be inherited from the L1C source.
The output directory for the L2A data can be configured in the
L2A_GIPP.xml configuration file. Here, the user can specify the target
directory where the L2A user product will be created. By default, the
processor will create it in the same directory where the L1C user product
is created, but replacing “L1C_” with “L2A_”.
--resolution is the target resolution for the product to be processed. See
section 2.4.1 for details. If resolution is omitted, all resolutions will be
generated.
On L1C User Product Level:

Absolute path:
L2A_Process
</the_L1C_product_directory>/S2A_OPER_PRD_MSIL1C_PDMC_20150630T084936_R062_V
20150627T103515_20150627T103515.SAFE --resolution=60
Relative Path (the command must be called from inside the user
product directory):
L2A_Process
S2A_OPER_PRD_MSIL1C_PDMC_20150630T084936_R062_V20150627T103515_20150627T1035
15.SAFE --resolution=60
On L1C Tile Level:

Absolute path:
L2A_Process
</the_L1C_product_directory>/S2A_OPER_PRD_MSIL1C_PDMC_20150630T084936_R062_V
20150627T103515_20150627T103515.SAFE/GRANULE/S2A_OPER_MSI_L1C_TL_MTI__201506
27T180307_A000062_T32TNR_N01.00 –resolution=20
Relative Path (the command must be called from inside the GRANULE
folder):
L2A_Process S2A_OPER_MSI_L1C_TL_MTI__20150627T180307_A000062_T32TNR_N01.00 -
-resolution=20
31/53
Reference: S2-PDGS-MPC-L2A-SUM-V2.4
Issue: 1
Date: 2017-07-01

3.3.2 Integration into the Sentinel-2 Toolbox


A detailed instruction the installation of Sen2Cor under the umbrella of the
Sentinel-2 Toolbox is given under:
https://www.youtube.com/channel/UCPnL3aynCQxTOjPttxMiS3Q

3.4 The Software Development Environment


This chapter describes all necessary steps to install, configure and operate the
necessary tools in order to extend or maintain the prototype processor software.
The content of this chapter is normally not needed by normal users of the
application.

3.4.1 Requirements and Third Party Software


The Sen2Cor development distribution contains an archive of essential open
source tools, which provide the development environment for the processor. The
following table specifies a comprehensive overview on all required items,
including the runtime environment. The IDL runtime environment is only needed
in that case, that a 1:1 testing is required with the initial ATCOR code, as this is
written in IDL. The original ATCOR IDL code itself is not part of the development
distribution and can only be requested at ESA by maintainers of the S2PAD
project.
32/53
Reference: S2-PDGS-MPC-L2A-SUM-V2.4
Issue: 1
Date: 2017-07-01

Table 3-1: Third Party products for the SDE

Operating System

Product Name Version Source


Linux CentOS >= 6.0 http://www.centos.org/
(alternatives) RHEL 6.0 http://www.de.redhat.com/produc
Ubuntu 12.04.2 LTS ts/rhel/desktop/
http://www.ubuntu.com/downloa
d/server
Software Development Environment
Product Name Version Source
IDE Eclipse >= 3.7.1 http://www.eclipse.org/downloads
Classic /packages/
Python IDE PyDev >= 2.5.0 http://pydev.org/
for Eclipse
XML Editor Rinzo 1.4.0 http://editorxml.sourceforge.net/
for Eclipse
Operational Tools and Libraries (see run_time_environment)
Product Name Version Source
Python Distribution Anaconda >= https://store.continuum.io
Package (including 4.0.0
Python 7.2, NumPy +
SciPy, PyTables,
Cython, Distutils and
more …

3.4.1.1 Eclipse, PyDev and Rinzo


Eclipse Classic is used and distributed as the standard development environment
for the processor. Together with PyDev, it provides a complete development
environment, including editor, syntax checker, debugger and runtime
environment for python. Rinzo is a plugin for the syntax check of XML files,
which are created and used as the standard I/O data format for the processor.
For installation, it is referred to the installation procedures of the different tools
as can be found in the references given in Table 3-1 above.

3.4.1.2 Anaconda
The Sen2Cor application uses a huge amount of python libraries, where “numpy”
and “scipy” are only the most prominent ones. One requirement of this project
was, to keep the installation overhead as low as possible. Thus, it was decided to
use a free python distribution. We decided for Anaconda after several tests with
different Python distributions. Anaconda is a completely free enterprise-ready
Python distribution for large-scale data processing, predictive analytics, and
scientific computing. Anaconda comes with its own installers, which facilitates
the setup of the development environment considerably. Anaconda is able to
33/53
Reference: S2-PDGS-MPC-L2A-SUM-V2.4
Issue: 1
Date: 2017-07-01

support other operating systems (Mac OS and Windows) and thus avoiding the
common problem of version mismatches between the different operating
systems.

3.4.1.3 Cython
Cython is a python compatible language, which enables to convert native python
code into C, so that the code can be compiled into a shared library and can be
executed without exposing the readable python code. This technique is used
here in order to protect the licensed ATCOR algorithm in the runtime distribution
from being read and analysed. Cython is an integrated part of the Anaconda
distribution described above.

3.4.1.4 Distutils
The Distutils are the Python standard for producing distribution packages. It is
used here for generating both, the development and the runtime installation
package. Distutils is an integrated part of the Anaconda distribution described
above.

3.4.1.5 GDAL
GDAL is a translator library for raster geospatial data formats that is released
under an X/MIT style Open Source license by the Open Source Geospatial
Foundation. As a library, it presents a single abstract data model to the
calling application for all supported formats. It also comes with a variety of
useful commandline utilities for data translation and processing, which is used
here (among others) for preparing the Digital Elevation Map.

3.4.1.6 PyTables
PyTables is a package for managing hierarchical datasets and designed to
efficiently and easily cope with large amounts of data.
PyTables is built on top of the HDF5 library, using the Python language and the
NumPy package. It features an object-oriented interface that, combined with C
extensions for the performance-critical parts of the code (generated using
Cython), makes it a fast, yet extremely easy to use tool for interactively
browse, process and search very large amounts of data. One important feature
of PyTables is that it optimizes memory and disk resources so that data takes
much less space (specially if on-flight compression is used) than other solutions
such as relational or object oriented databases. PyTables is an integrated part of
the Anaconda distribution described above.

3.4.2 Installation
The software development distribution (SDD) is currently only provided for
Linux. Baseline is CentOS 6.0, resp. RHEL 6.0. It is in principle possible to setup
the complete SDE for other Linux Distributions or other operating systems such
as Mac OSX or Windows. However, the SDD is not tested extensively on these
platforms, and thus not recommended. The SDD is provided in form of the
original archives, to be found in the project subdirectory labelled
‘development_environment’.
For the installation of the development environment two different installation
scenarios are possible:
34/53
Reference: S2-PDGS-MPC-L2A-SUM-V2.4
Issue: 1
Date: 2017-07-01

Global installation (default): Eclipse will be installed within a common


directory like e.g. /opt on the target system. For this installation root access on
the target system is needed.
Local installation (optional): Eclipse will be installed under a certain user
account (e.g. /home/s2l2app on the target system. For this installation a
corresponding user account must exist and the installation shall be performed
under that account.
Although Eclipse and PyDev are part of the distribution packages, it is
recommended to install these third party tools from the original software
providers, following the corresponding installation steps as given in the following
links:
 Eclipse: http://wiki.eclipse.org/Eclipse/Installation#Install_a_JVM
 PyDev: https://wiki.appcelerator.org/display/tis/PyDev+Install

3.4.3 Configuration

3.4.3.1 Configure Python


In order to select Anaconda as the Python Interpreter of your choice, within
Eclipse, first click on /Project/Properties/PyDev – Interpreter, second, click on
Configure and Interpreter not listed.

Figure 3-1 – Configuration of Python interpreter within Eclipse I

Then click on New and select the Python Interpreter in the folder where
Anaconda was installed. An example installation is shown below:
35/53
Reference: S2-PDGS-MPC-L2A-SUM-V2.4
Issue: 1
Date: 2017-07-01

Figure 3-2 – Configuration of Python interpreter within Eclipse II

3.4.3.2 Environment Settings


An environment variable is necessary to be set up in order to obtain a full
configured system:
$SEN2COR_HOME: this environment variable named is used to configure the root
directory of the Sen2Cor application package. Example: if the Sen2Cor
application package is installed under /home/sen2cor, $SEN2COR_HOME shall be
assigned to:
export SEN2COR_HOME = /home/sen2cor
The settings depend on your local setup.
This allows the operation with multiple configuration settings or the usage of the
processor within different environments.
These environment variable can be configured inside of the Eclipse workspace
via /Project/Properties/PyDev – Interpreter, as shown below:
36/53
Reference: S2-PDGS-MPC-L2A-SUM-V2.4
Issue: 1
Date: 2017-07-01

Figure 3-3 – Environment setting via Eclipse

Details on the RTE configuration are given in section 2.4.

3.4.4 Operation

3.4.4.1 Running the processor within Eclipse


Within Eclipse, create a new project using the root of your project
($SEN2COR_HOME)
Within Eclipse perform a refresh. The directory will show your project.
The main() operation of the Sen2Cor is located in the L2A_Process module. For
testing purposes within Eclipse the whole application can be operated in two
different ways:
1. Runtime Mode: /Run/Run
2. Debug Mode: /Run/Debug
In order to simulate a scenario for testing purposes a command line can be
configured within Eclipse via:
/Run/Run Configurations
37/53
Reference: S2-PDGS-MPC-L2A-SUM-V2.4
Issue: 1
Date: 2017-07-01

Figure 3-4 – SCD command line arguments

All other operational issues are equivalent with the scenario described for section
3.3.1.

3.4.4.2 Generating a Source Distribution


From the Eclipse workspace or via command line shell execute:
python setup.py s2l2app_SCD.py
This will generate an archive of the form:
s2l2app_SCD_<VERSION>.tar.gz
which then can be used for redistribution. The output will be generated in the
distribution folder of the SDE.
Please be aware that the source redistribution is only allowed to be
delivered to ESA itself or such ESA contractors, being in charge for the
development or maintenance of the processor. In case of doubts,
contact the corresponding Technical Officer of the project for
clarification.

3.4.4.3 Generating a Build Distribution


The source code of the original ATCOR software is protected by a license
agreement (see appendix). As a consequence, the Python source code of the
processor core algorithm cannot be distributed to the end user. Thus, Cython is
used as an intermediate development step. Cython is is able to generate C
source code from python code. The generated C code can then be compiled
platform specific on each target platform and can finally be redistributed in a
non-human readable shared object or dynamic link library. Following target
platforms are currently tested and will be supported:
Linux x86, 64 bit (CENTOS 6.0, alternatively RHEL 6.0)
MacOSX, x86, 64 (Mountain Lion)
Windows, 64 bit (Tested on Windows 7 Enterprise)
Generation of a build distribution therefore is performed in two steps:
Compilation of python source file into a target specific runtime library.
This is done via the command python setup.py build_ext and must be
executed on the target platform for which the distribution package shall
be created.
Finally, the platform specific library together with all provided sources, test data,
configuration and documentation is archived into platform specific distribution
packages, which are named:
38/53
Reference: S2-PDGS-MPC-L2A-SUM-V2.4
Issue: 1
Date: 2017-07-01

Sen2Cor_RTD-x.y.z-CentOS-x86_64.tar.gz
Sen2Cor_RTD-x.y.z-MacOSX-x86_64.tar.gz
Sen2Cor_RTD-x.y.z-Windows-x86_64.tar.gz
The generated packages can then be burned and delivered via a
distribution medium.
39/53
Reference: S2-PDGS-MPC-L2A-SUM-V2.4
Issue: 1
Date: 2017-07-01

4. References
1. Richter, R., Wang, X., Bachmann, M. and Schlaepfer, D. (2011).
Correction of cirrus effects in Sentinel-2 type of imagery. International
Journal of Remote Sensing, 32, 2931-2941.
2. Louis, J., A. Charantonis, A. and Berthelot, B (2010). Cloud Detection
for Sentinel-2. Proceedings of ESA Living Planet Symposium.
3. Salomonson V.V., I. Appel I. (2004). Estimating fractional snow cover
from MODIS using the normalized difference snow index. Remote
Sensing of Environment 89, 351–360.
4. Vane, G., Green, R. O., Chrien, T. G., Enmark, H. T., Hansen, E. G.,
and Porter, W. M. (1993). The airborne visible / infrared imaging
spectrometer (AVIRIS). Remote Sens. Environ. 44, 127-143.
5. Kaufman, Y., et al. (1997). The MODIS 2.1 µm channel – correlation
with visible reflectance for use in remote sensing of aerosol. IEEE
TGRS, 35, 1286 – 1298.
6. Schläpfer, D. et al. (1998). Atmospheric precorrected differential
absorption technique to retrieve columnar water vapour. Remote
Sens. Environ., 65, 353-366.
40/53
Reference: S2-PDGS-MPC-L2A-SUM-V2.4
Issue: 1
Date: 2017-07-01

5. Copyright Notes

Apache License
Version 2.0, January 2004
http://www.apache.org/licenses/

TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION

1. Definitions.

"License" shall mean the terms and conditions for use, reproduction,
and distribution as defined by Sections 1 through 9 of this document.

"Licensor" shall mean the copyright owner or entity authorized by


the copyright owner that is granting the License.

"Legal Entity" shall mean the union of the acting entity and all
other entities that control, are controlled by, or are under common
control with that entity. For the purposes of this definition,
"control" means (i) the power, direct or indirect, to cause the
direction or management of such entity, whether by contract or
otherwise, or (ii) ownership of fifty percent (50%) or more of the
outstanding shares, or (iii) beneficial ownership of such entity.

"You" (or "Your") shall mean an individual or Legal Entity


exercising permissions granted by this License.

"Source" form shall mean the preferred form for making modifications,
including but not limited to software source code, documentation
source, and configuration files.

"Object" form shall mean any form resulting from mechanical


transformation or translation of a Source form, including but
not limited to compiled object code, generated documentation,
and conversions to other media types.

"Work" shall mean the work of authorship, whether in Source or


Object form, made available under the License, as indicated by a
copyright notice that is included in or attached to the work
(an example is provided in the Appendix below).
41/53
Reference: S2-PDGS-MPC-L2A-SUM-V2.4
Issue: 1
Date: 2017-07-01

"Derivative Works" shall mean any work, whether in Source or Object


form, that is based on (or derived from) the Work and for which the
editorial revisions, annotations, elaborations, or other modifications
represent, as a whole, an original work of authorship. For the purposes
of this License, Derivative Works shall not include works that remain
separable from, or merely link (or bind by name) to the interfaces of,
the Work and Derivative Works thereof.

"Contribution" shall mean any work of authorship, including


the original version of the Work and any modifications or additions
to that Work or Derivative Works thereof, that is intentionally
submitted to Licensor for inclusion in the Work by the copyright owner
or by an individual or Legal Entity authorized to submit on behalf of
the copyright owner. For the purposes of this definition, "submitted"
means any form of electronic, verbal, or written communication sent
to the Licensor or its representatives, including but not limited to
communication on electronic mailing lists, source code control systems,
and issue tracking systems that are managed by, or on behalf of, the
Licensor for the purpose of discussing and improving the Work, but
excluding communication that is conspicuously marked or otherwise
designated in writing by the copyright owner as "Not a Contribution."

"Contributor" shall mean Licensor and any individual or Legal Entity


on behalf of whom a Contribution has been received by Licensor and
subsequently incorporated within the Work.

2. Grant of Copyright License. Subject to the terms and conditions of


this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
copyright license to reproduce, prepare Derivative Works of,
publicly display, publicly perform, sublicense, and distribute the
Work and such Derivative Works in Source or Object form.

3. Grant of Patent License. Subject to the terms and conditions of


this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
(except as stated in this section) patent license to make, have made,
use, offer to sell, sell, import, and otherwise transfer the Work,
where such license applies only to those patent claims licensable
by such Contributor that are necessarily infringed by their
Contribution(s) alone or by combination of their Contribution(s)
42/53
Reference: S2-PDGS-MPC-L2A-SUM-V2.4
Issue: 1
Date: 2017-07-01

with the Work to which such Contribution(s) was submitted. If You


institute patent litigation against any entity (including a
cross-claim or counterclaim in a lawsuit) alleging that the Work
or a Contribution incorporated within the Work constitutes direct
or contributory patent infringement, then any patent licenses
granted to You under this License for that Work shall terminate
as of the date such litigation is filed.

4. Redistribution. You may reproduce and distribute copies of the


Work or Derivative Works thereof in any medium, with or without
modifications, and in Source or Object form, provided that You
meet the following conditions:

(a) You must give any other recipients of the Work or


Derivative Works a copy of this License; and

(b) You must cause any modified files to carry prominent notices
stating that You changed the files; and

(c) You must retain, in the Source form of any Derivative Works
that You distribute, all copyright, patent, trademark, and
attribution notices from the Source form of the Work,
excluding those notices that do not pertain to any part of
the Derivative Works; and

(d) If the Work includes a "NOTICE" text file as part of its


distribution, then any Derivative Works that You distribute must
include a readable copy of the attribution notices contained
within such NOTICE file, excluding those notices that do not
pertain to any part of the Derivative Works, in at least one
of the following places: within a NOTICE text file distributed
as part of the Derivative Works; within the Source form or
documentation, if provided along with the Derivative Works; or,
within a display generated by the Derivative Works, if and
wherever such third-party notices normally appear. The contents
of the NOTICE file are for informational purposes only and
do not modify the License. You may add Your own attribution
notices within Derivative Works that You distribute, alongside
or as an addendum to the NOTICE text from the Work, provided
that such additional attribution notices cannot be construed
as modifying the License.
43/53
Reference: S2-PDGS-MPC-L2A-SUM-V2.4
Issue: 1
Date: 2017-07-01

You may add Your own copyright statement to Your modifications and
may provide additional or different license terms and conditions
for use, reproduction, or distribution of Your modifications, or
for any such Derivative Works as a whole, provided Your use,
reproduction, and distribution of the Work otherwise complies with
the conditions stated in this License.

5. Submission of Contributions. Unless You explicitly state otherwise,


any Contribution intentionally submitted for inclusion in the Work
by You to the Licensor shall be under the terms and conditions of
this License, without any additional terms or conditions.
Notwithstanding the above, nothing herein shall supersede or modify
the terms of any separate license agreement you may have executed
with Licensor regarding such Contributions.

6. Trademarks. This License does not grant permission to use the trade
names, trademarks, service marks, or product names of the Licensor,
except as required for reasonable and customary use in describing the
origin of the Work and reproducing the content of the NOTICE file.

7. Disclaimer of Warranty. Unless required by applicable law or


agreed to in writing, Licensor provides the Work (and each
Contributor provides its Contributions) on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
implied, including, without limitation, any warranties or conditions
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
PARTICULAR PURPOSE. You are solely responsible for determining the
appropriateness of using or redistributing the Work and assume any
risks associated with Your exercise of permissions under this License.

8. Limitation of Liability. In no event and under no legal theory,


whether in tort (including negligence), contract, or otherwise,
unless required by applicable law (such as deliberate and grossly
negligent acts) or agreed to in writing, shall any Contributor be
liable to You for damages, including any direct, indirect, special,
incidental, or consequential damages of any character arising as a
result of this License or out of the use or inability to use the
Work (including but not limited to damages for loss of goodwill,
work stoppage, computer failure or malfunction, or any and all
other commercial damages or losses), even if such Contributor
has been advised of the possibility of such damages.
44/53
Reference: S2-PDGS-MPC-L2A-SUM-V2.4
Issue: 1
Date: 2017-07-01

9. Accepting Warranty or Additional Liability. While redistributing


the Work or Derivative Works thereof, You may choose to offer,
and charge a fee for, acceptance of support, warranty, indemnity,
or other liability obligations and/or rights consistent with this
License. However, in accepting such obligations, You may act only
on Your own behalf and on Your sole responsibility, not on behalf
of any other Contributor, and only if You agree to indemnify,
defend, and hold each Contributor harmless for any liability
incurred by, or claims asserted against, such Contributor by reason
of your accepting any such warranty or additional liability.

END OF TERMS AND CONDITIONS

Copyright 2017, ESA

Licensed under the Apache License, Version 2.0 (the "License");


you may not use this file except in compliance with the License.
You may obtain a copy of the License at

http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software


distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
implied.
See the License for the specific language governing permissions and
limitations under the License.
45/53
Reference: S2-PDGS-MPC-L2A-SUM-V2.4
Issue: 1
Date: 2017-07-01

ATCOR License Agreement

The program "ATCOR" (hereinafer called "program") is proprietary of the


German Aerospace center (Deutsches Zentrum Für Luft- und Raumfahrt e.V.,
DLR) and is protected by the German Copyright Act. The program is made
avaialable to customer only for the purpose of use for the ESA Sentinel-2-
project, the use of ATCOR for other projects is expressively excluded. With
acceptance of these terms of a license the customer receives - without the right
to grant sublicenses - a non exclusive, non transferable right to use the program
for Sentinel-2 project. This right comprises the right to reprocess the source-
code and to translate the source-code into a different programming language
(hereinafter called "derived ATCOR")

Definition of the terms ATCOR sources and ATCOR binaries:


The term ATCOR sources specify the following three items: the source code of
ATCOR or the source code or Python byte code of the derived ATCOR program.

The term ATCOR binaries specify a non-readable version of the derived ATCOR
program. This can be either a binary executable program or an object library
which is compiled from the derived ATCOR sources

The ATCOR sources may only be used for own purposes of the customer related
to the Sentinel-2 project. The transfer of the ATCOR sources to third parties
other than ESA and its ESA selected contractors, or the use of ATCOR sources for
other projects than Sentinel-2 is subject to the prior written consent of DLR. No
restrictions shall be given in the use of ATCOR binaries.
46/53
Reference: S2-PDGS-MPC-L2A-SUM-V2.4
Issue: 1
Date: 2017-07-01

Notice of Third Party Software Licenses

This package contains open source software binaries and or python code from
external projects. These are available on an “as is” basis and subject to their
individual license agreements. This package is subject to their individual licenses
as well as the Sen2Cor code license. Sen2cor development team reserves the
right to change which third party tools will be provided in any version of this
project. Changes to license in individual packages will be updated in this file.

Sen2cor windows package contains re-distributable, run-time, shared-library


files from the Intel(TM) Math Kernel Library (“MKL binaries”). You are specifically
authorized to use the MKL binaries. Use and redistribution of the MKL binaries
are subject to the licensing terms located at https://software.intel.com/en-
us/license/intel-simplified-software-license. However, GNU/Linux and Apple Mac
OSX platforms are free from intel MKL binaries.

This software includes code from Python(R) project


Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006 Python Software
Foundation;
http://www.python.org/
Python(R) is a registered trademark of the Python Software Foundation.
Python is released under PSF License:
https://docs.python.org/2/license.html

This software includes binaries from musl libc


Copyright © 2005-2014 Rich Felker, et al.
http://www.musl-libc.org/
Musl is released under standard MIT License:
http://git.musl-libc.org/cgit/musl/tree/COPYRIGHT

This software includes code from GDAL.


Copyright (c) 2000-2016, Frank Warmerdam
http://www.gdal.org/
GDAL is released under X11/MIT License:
https://trac.osgeo.org/gdal/wiki/FAQGeneral#WhatlicensedoesGDALOGRuse

This software includes code from numpy


Copyright (c) 2005, NumPy Developers
http://www.numpy.org/
Numpy is released under BSD-New license:
https://docs.scipy.org/doc/numpy-1.10.0/license.html

This software includes code from scipy


47/53
Reference: S2-PDGS-MPC-L2A-SUM-V2.4
Issue: 1
Date: 2017-07-01

Copyright © 2001, 2002 Enthought, Inc.


Copyright © 2003-2013 SciPy Developers.
http://www.scipy.org/
Scipy is released under BSD-New license:
https://www.scipy.org/scipylib/license.html

This software includes code from pytables


Copyright (c) 2002-2004 by Francesc Alted
Copyright (c) 2005-2007 by Carabos Coop. V.
Copyright (c) 2008-2010 by Francesc Alted
Copyright (c) 2011-2015 by PyTables maintainers
http://www.pytables.org/
pytables is released under BSD 3-clause "New" or "Revised" License
https://github.com/PyTables/PyTables/blob/2.2-pro/LICENSE.txt

This software includes code from hdf5


Copyright (c) 2006, The HDF Group.
Copyright (c) 1998-2006, The Board of Trustees of the University of Illinois.
http://www.hdfgroup.org/
License for hdf5 is given here:
https://support.hdfgroup.org/products/licenses.html

This software includes code from numexpr.


Copyright (c) 2007,2008 David M. Cooke <david.m.cooke@gmail.com>
Copyright (c) 2009,2010 Francesc Alted <faltet@pytables.org>
Copyright (c) 2011- See AUTHORS.txt
https://github.com/pydata/numexpr
numexpr is released under MIT License:
https://github.com/pydata/numexpr/blob/master/LICENSE.txt

This software includes code from lxml.


Copyright (c) 2004 Infrae. All rights reserved.
http://lxml.de/
lxml is released under BSD License
https://github.com/lxml/lxml/blob/master/doc/licenses/BSD.txt

This software includes code from psutil.


Copyright (c) 2009, Jay Loden, Dave Daeschler, Giampaolo Rodola'
https://github.com/giampaolo/psutil
psutil is distributed under BSD license
https://github.com/giampaolo/psutil/blob/master/LICENSE
48/53
Reference: S2-PDGS-MPC-L2A-SUM-V2.4
Issue: 1
Date: 2017-07-01

This software includes code from skimage.


Copyright (C) 2011, the scikit-image team
http://scikit-image.org/
skimage is released under BSD License
http://scikit-image.org/docs/0.12.x/license.html

This software includes code from glymur.


Copyright (C) 2013 John Evans
https://github.com/quintusdias/glymur
glymur is released under MIT License
https://github.com/quintusdias/glymur/blob/master/LICENSE.txt

This software includes code from dateutil.


Copyright (c) 2003-2011 - Gustavo Niemeyer <gustavo@niemeyer.net>
Copyright (c) 2012-2014 - Tomi Pieviläinen <tomi.pievilainen@iki.fi>
Copyright (c) 2014-2016 - Yaron de Leeuw <me@jarondl.net>
Copyright (c) 2015- - Paul Ganssle <paul@ganssle.io>
https://github.com/dateutil/dateutil/
dateutil is released under Simplified BSD

This software includes code from matplotlib.


Copyright (c) 2012-2013 Matplotlib Development Team
https://matplotlib.org/
matplotlib is released under PSF license
https://matplotlib.org/users/license.html

This software includes code from Python Imaging Library (PIL).


Copyright (c) 1997-2011 by Secret Labs AB
Copyright (c) 1995-2011 by Fredrik Lundh
Pillow is the friendly PIL fork. It is
Copyright (c) 2010-2017 by Alex Clark and contributors
Pillow is licensed under the open source PIL Software License:
https://github.com/python-pillow/Pillow/blob/master/LICENSE

This software includes code from setuptools


https://pypi.python.org/pypi/setuptools

This software includes code from packaging


https://pypi.python.org/pypi/packaging

Files:
lib/python2.7/site-packages/sen2cor/L2A_Config.py
49/53
Reference: S2-PDGS-MPC-L2A-SUM-V2.4
Issue: 1
Date: 2017-07-01

lib/python2.7/site-packages/sen2cor/L2A_Library.py
lib/python2.7/site-packages/sen2cor/L2A_Logger.py
lib/python2.7/site-packages/sen2cor/L2A_Manifest.py
lib/python2.7/site-packages/sen2cor/L2A_Process.py
lib/python2.7/site-packages/sen2cor/L2A_ProcessTile.py
lib/python2.7/site-packages/sen2cor/L2A_SceneClass.py
lib/python2.7/site-packages/sen2cor/L2A_Schedule.py
lib/python2.7/site-packages/sen2cor/L2A_Tables.py
lib/python2.7/site-packages/sen2cor/L2A_XmlParser.py
lib/python2.7/site-packages/sen2cor/__init__.py

Copyright: Copyright (C) 2017 European Space Agency (ESA).


All Rights reserved
License: Apache 2.0

Files : lib/python2.7/site-packages/sen2cor/aux_data/
Copyright : Copyright (C) 2017 European Space Agency (ESA).
All Rights reserved
License : Apache 2.0

Files : lib/python2.7/site-packages/sen2cor/cfg/*
Copyright : Copyright (C) 2017 European Space Agency (ESA).
All Rights reserved
License : Apache 2.0

Files : lib/python2.7/site-packages/sen2cor/lib_S2A/*
Copyright : Copyright (C) 2017 European Space Agency (ESA).
All Rights reserved
License : Apache 2.0

Files : lib/python2.7/site-packages/sen2cor/lib_S2B/*
Copyright : Copyright (C) 2017 European Space Agency (ESA).
All Rights reserved
License : Apache 2.0

See copyright/Sen2cor for full text of apache 2.0 license

Files: lib/python2.7/site-packages/sen2cor/L2A_AtmCorr.so
Copyright: German Aerospace center (Deutsches Zentrum Für Luft- und
Raumfahrt e.V., DLR)
License: see copyright/ATCOR which is the license granted to ESA by DLR
50/53
Reference: S2-PDGS-MPC-L2A-SUM-V2.4
Issue: 1
Date: 2017-07-01

This software contains binaries from lapack project.


Copyright (c) 1992-2013 The University of Tennessee and The University
of Tennessee Research Foundation. All rights reserved.
Copyright (c) 2000-2013 The University of California Berkeley. All rights
reserved.
Copyright (c) 2006-2013 The University of Colorado Denver. All rights
reserved.
http://www.netlib.org/
Lapack is released under modified BSD license:
http://www.netlib.org/lapack/LICENSE.txt

This package contains binaries from libpng project


http://www.libpng.org/
libpng is distributed under libpng license
Copyright and license are listed here:
http://www.libpng.org/pub/png/src/libpng-LICENSE.txt

This package contains binaries from zlib project


Copyright (C) 1995-2017 Jean-loup Gailly and Mark Adler
https://www.zlib.net/
zlib is released under zlib license:
https://www.zlib.net/zlib_license.html

This package contains binaries from curl project


https://curl.haxx.se
Curl is released under MIT/X derivative license:
https://curl.haxx.se/docs/copyright.html

This package contains binaries from jpeg-turbo project


http://www.libjpeg-turbo.org
libjpeg-turbo is covered by three compatible BSD-style open source licenses:
https://github.com/libjpeg-turbo/libjpeg-turbo/blob/master/LICENSE.md

This package contains binaries from libxslt


http://xmlsoft.org
xslt is released under MIT license:
http://xmlsoft.org/XSLT/intro.html

This package contains binaries from libexslt


http://xmlsoft.org
exslt is released under MIT license:
http://xmlsoft.org/XSLT/EXSLT/index.html
51/53
Reference: S2-PDGS-MPC-L2A-SUM-V2.4
Issue: 1
Date: 2017-07-01

This package contains binaries from libxml2


http://xmlsoft.org
libxml2 is released under MIT license

This package contains binaries from libtiff


Copyright (c) 1988-1997 Sam Leffler
Copyright (c) 1991-1997 Silicon Graphics, Inc.
http://www.libtiff.org/
libtiff is released under BSD-like licence.

This package contains binaries from proj4


Copyright (c) 2000, Frank Warmerdam
proj4 is released under MIT licence:
http://proj4.org/license.html

This package contains binaries from libexpat


Copyright (c) 1998-2000 Thai Open Source Software Center Ltd and Clark
Cooper
Copyright (c) 2001-2017 Expat maintainers
https://libexpat.github.io/
libexpat is released under MIT licence.
https://github.com/libexpat/libexpat/blob/master/expat/COPYING

This package contains binaries from Freetype2


Copyright (c) 2000, Frank Warmerdam
Freetype2 is released under FTL licence:
http://git.savannah.gnu.org/cgit/freetype/freetype2.git/tree/docs/FTL.TXT

This package contains binaries from libgeotiff project


libgeotiff is released under public domain or X style licence:
https://svn.osgeo.org/metacrs/geotiff/trunk/libgeotiff/LICENSE

This package contains binaries from SQLite project


https://sqlite.org/
SQLite is released under public domain
https://sqlite.org/copyright.html

This package contains binaries from OpenJPEG project


http://www.openjpeg.org/
OpenJPEG is released under 2-clause BSD license
https://github.com/uclouvain/openjpeg/blob/master/LICENSE
52/53
Reference: S2-PDGS-MPC-L2A-SUM-V2.4
Issue: 1
Date: 2017-07-01

This package contains binaries from GNU Readline project


https://cnswww.cns.cwru.edu/php/chet/readline/rltop.html
Readline is released under GNU GPL v3 License.
http://www.gnu.org/licenses/gpl.html

This package contains binaries from lcms2 project


http://www.littlecms.com/
lcms2 is released under MIT license

This package contains binaries from libffi project


https://sourceware.org/libffi/
libffi is released under MIT license
https://github.com/libffi/libffi/blob/master/LICENSE

This package contains binaries from ncurses project


Copyright (c) 2011-2014,2015 by Thomas E. Dickey
https://www.gnu.org/software/ncurses/
ncurses is distributed under MIT license
http://invisible-island.net/ncurses/ncurses-license.html

This package contains binaries from libssh2 project


http://www.libssh2.org/
ncurses is distributed under BSD license
https://libssh2.org/license.html

This package contains binaries from libressl project


http://www.libressl.org/
libressl is distributed under a mix of licenses
https://github.com/libressl/libressl/blob/master/src/LICENSE

This package contains binaries from gnupg project


https://www.gnupg.org/
gnupg is distributed under a GPL license

This package contains binaries from libbz2 project


Copyright (c) Julian Seward, jseward@bzip.org
http://www.bzip.org/
libbz2 is distributed under BSD license

This package contains binaries from BLAS project


http://www.netlib.org/blas/
53/53
Reference: S2-PDGS-MPC-L2A-SUM-V2.4
Issue: 1
Date: 2017-07-01

BLAS is distributed under public domain

This package contains binaries from OpenBLAS project


http://www.openblas.net/
OpenBLAS is distributed under BSD License

This package contains binaries from GDBM project


http://www.gnu.org.ua/software/gdbm/
GDBM is released under GPL v3 License

This software includes binaries from GCC project


Copyright (C) 2009 Free Software Foundation, Inc.
libstdc++ has GCC Runtime Library Exception:
https://gcc.gnu.org/onlinedocs/libstdc++/manual/license.html
The libgcc library is licensed under the GNU GPL plus the GCC Runtime Library
Exception

You might also like