From b580711bbde5efc41e10022f64ff4e33d66c8582 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Uwe=20M=C3=BCller-Wilm?= Date: Sun, 6 Mar 2016 18:24:56 +0100 Subject: [PATCH] phase in of Sen2cor 2.1.1 --- MANIFEST.in | 9 +- PKG-INFO | 6 +- sen2cor.egg-info/PKG-INFO | 2 +- sen2cor.egg-info/SOURCES.txt | 362 +- sen2cor.egg-info/entry_points.txt | 4 +- sen2cor/L2A_Borg.py | 12 - sen2cor/L2A_Config.py | 2201 ++- sen2cor/L2A_Library.py | 47 +- sen2cor/L2A_Process.py | 496 +- sen2cor/L2A_SceneClass.py | 2 +- sen2cor/L2A_Tables.py | 1076 +- sen2cor/L2A_XmlParser.py | 316 +- .../cfg/DICO/1.0/DPC/header/DPC_Header.xsd | 52 - .../1.0/DPC/processing/baseProcessing.xsd | 132 - .../1.0/DPC/processing/synthesisReport.xsd | 274 - .../1.0/DPC/services/DPC_ExceptionReport.xsd | 63 - .../1.0/DPC/services/ProductionManage.xsd | 90 - .../1.1.0/Examples/exampleCapabilities.xsd | 42 - .../1.1.0/Examples/exampleCapabilities1.xml | 140 - .../ows/1.1.0/Examples/exampleConstraint1.xml | 28 - .../Examples/exampleExceptionReport1.xml | 13 - .../Examples/exampleExceptionReport2.xml | 9 - .../ows/1.1.0/Examples/exampleGeneralBox2.xml | 8 - .../Examples/exampleGetCapabilities2.xml | 17 - .../Examples/exampleOperationsMetadata.xml | 84 - .../ows/1.1.0/Examples/exampleWGS84Box2.xml | 8 - .../DPC/services/opengis/ows/1.1.0/ReadMe.txt | 87 - .../opengis/ows/1.1.0/ows19115subset.xsd | 232 - .../DPC/services/opengis/ows/1.1.0/owsAll.xsd | 23 - .../services/opengis/ows/1.1.0/owsCommon.xsd | 154 - .../opengis/ows/1.1.0/owsContents.xsd | 86 - .../ows/1.1.0/owsDataIdentification.xsd | 127 - .../opengis/ows/1.1.0/owsDomainType.xsd | 264 - .../opengis/ows/1.1.0/owsExceptionReport.xsd | 76 - .../opengis/ows/1.1.0/owsGetCapabilities.xsd | 112 - .../opengis/ows/1.1.0/owsGetResourceByID.xsd | 51 - .../opengis/ows/1.1.0/owsInputOutputData.xsd | 59 - .../opengis/ows/1.1.0/owsManifest.xsd | 122 - .../ows/1.1.0/owsOperationsMetadata.xsd | 140 - .../ows/1.1.0/owsServiceIdentification.xsd | 60 - .../opengis/ows/1.1.0/owsServiceProvider.xsd | 47 - .../DPC/services/opengis/wps/1.0.0/ReadMe.txt | 82 - .../wps/1.0.0/common/DescriptionType.xsd | 49 - .../wps/1.0.0/common/ProcessBriefType.xsd | 44 - .../wps/1.0.0/common/ProcessVersion.xsd | 25 - .../wps/1.0.0/common/RequestBaseType.xsd | 42 - .../wps/1.0.0/common/ResponseBaseType.xsd | 44 - .../opengis/wps/1.0.0/common/WSDL.xsd | 30 - .../10_wpsGetCapabilities_request.xml | 8 - .../10_wpsGetCapabilities_request_SOAP.xml | 20 - .../20_wpsGetCapabilities_response.xml | 84 - .../20_wpsGetCapabilities_response_SOAP.xml | 97 - .../30_wpsDescribeProcess_request.xml | 5 - .../30_wpsDescribeProcess_request_SOAP.xml | 17 - ...0_wpsDescribeProcess_response-extended.xml | 101 - .../40_wpsDescribeProcess_response.xml | 80 - .../50_wpsExecute_request_RawDataOutput.xml | 36 - ...cute_request-extended_ResponseDocument.xml | 62 - ...51_wpsExecute_request_ResponseDocument.xml | 40 - ...52_wpsExecute_request_ResponseDocument.xml | 43 - .../53_wpsExecute_request_ComplexValue.xml | 48 - .../1.0.0/examples/62_wpsExecute_response.xml | 42 - .../1.0.0/examples/90_wpsExceptionReport.xml | 7 - .../wps/1.0.0/examples/DPC_services.wsdl | 2111 --- .../1.0.0/examples/MyComplexValueSchema.xsd | 17 - .../wps/1.0.0/examples/example_service.wsdl | 2131 --- .../DPC/services/opengis/wps/1.0.0/wpsAll.xsd | 23 - .../wps/1.0.0/wpsDescribeProcess_request.xsd | 41 - .../wps/1.0.0/wpsDescribeProcess_response.xsd | 421 - .../opengis/wps/1.0.0/wpsExecute_request.xsd | 346 - .../opengis/wps/1.0.0/wpsExecute_response.xsd | 218 - .../wps/1.0.0/wpsGetCapabilities_request.xsd | 43 - .../wps/1.0.0/wpsGetCapabilities_response.xsd | 111 - .../services/opengis/xlinks/1.0.0/xlinks.xsd | 122 - .../1.0/DPC/services/owsExceptionReport.xsd | 76 - sen2cor/cfg/DICO/1.0/DataAccess/item/item.xsd | 197 - .../cfg/DICO/1.0/DataAccess/item/item2A.xsd | 181 - .../DataAccess/userProduct/userProduct.xsd | 99 - .../Orb_Reference/EO_OPER_MPL_ORBSCT_REF.xsd | 28 - .../FOS/Orb_Restituted/EO_OPER_AUX_ORBRES.xsd | 29 - .../FOS/Orb_predicted/EO_OPER_MPL_ORBPRE.xsd | 46 - .../cfg/DICO/1.0/GS/header/stationHeader.xsd | 143 - sen2cor/cfg/DICO/1.0/GS/plan/ACQ.xsd | 82 - .../DICO/1.0/GS/report/StationDownlink.xsd | 52 - .../1.0/GS/report/StationUnavailability.xsd | 42 - sen2cor/cfg/DICO/1.0/IPF/base/base.xsd | 155 - .../DICO/1.0/IPF/job/IDP_SC_Configuration.xsd | 70 - .../DICO/1.0/IPF/job/IDP_SC_LaunchReport.xsd | 76 - sen2cor/cfg/DICO/1.0/IPF/job/IPF_JobOrder.xsd | 369 - sen2cor/cfg/DICO/1.0/PDGS/archive/archive.xsd | 174 - sen2cor/cfg/DICO/1.0/PDGS/base/base.xsd | 120 - sen2cor/cfg/DICO/1.0/PDGS/center/center.xsd | 188 - .../cfg/DICO/1.0/PDGS/component/component.xsd | 55 - .../1.0/PDGS/configuration/configuration.xsd | 123 - sen2cor/cfg/DICO/1.0/PDGS/dimap/dimap.xsd | 11267 ---------------- sen2cor/cfg/DICO/1.0/PDGS/dimap/dimap2A.xsd | 829 -- .../DICO/1.0/PDGS/fileNaming/fileNaming.xsd | 200 - .../cfg/DICO/1.0/PDGS/header/EOF_Header.xsd | 107 - .../logical_definitions.xsd | 9323 ------------- .../DICO/1.0/PDGS/spacecraft/spacecraft.xsd | 56 - .../PDGS/station/StationUnavailability.xsd | 43 - .../cfg/DICO/1.0/SY/date_time/date_time.xsd | 275 - .../DICO/1.0/SY/geographical/geographical.xsd | 160 - sen2cor/cfg/DICO/1.0/SY/image/image.xsd | 804 -- sen2cor/cfg/DICO/1.0/SY/misc/misc.xsd | 820 -- .../DICO/1.0/SY/orbital/HeaderTypes_Orbit.xsd | 49 - sen2cor/cfg/DICO/1.0/SY/orbital/orbital.xsd | 262 - sen2cor/cfg/DICO/1.0/SY/platform/platform.xsd | 41 - .../1.0/SY/representation/representation.xsd | 49 - sen2cor/cfg/DICO/1.0/SY/spatio/spatio.xsd | 97 - sen2cor/cfg/DICO/1.0/SY/tile/tile.xsd | 246 - sen2cor/cfg/Inventory_Metadata.xsd | 321 - sen2cor/cfg/L2A_GIPP.xml | 141 +- .../S2_PDI_Level-1C_Datastrip_Metadata.xsd | 25 - .../S2_PDI_Level-1C_Datastrip_Structure.xsd | 70 - sen2cor/cfg/S2_PDI_Level-1C_Tile_Metadata.xsd | 12 - .../cfg/S2_PDI_Level-1C_Tile_Structure.xsd | 108 - .../S2_PDI_Level-2A_Datastrip_Metadata.xsd | 25 - .../S2_PDI_Level-2A_Datastrip_Structure.xsd | 42 - sen2cor/cfg/S2_PDI_Level-2A_Tile_Metadata.xsd | 18 - .../cfg/S2_PDI_Level-2A_Tile_Structure.xsd | 156 - .../cfg/S2_User_Product_Level-1C_Metadata.xsd | 13 - .../S2_User_Product_Level-1C_Structure.xsd | 75 - .../cfg/S2_User_Product_Level-2A_Metadata.xsd | 20 - .../S2_User_Product_Level-2A_Structure.xsd | 70 - sen2cor/cfg/manifest.safe | 2 +- sen2cor/lib/Thumbs.db | Bin 7168 -> 0 bytes sen2cor/setup.py | 2 +- setup.py | 11 +- 129 files changed, 3105 insertions(+), 38662 deletions(-) delete mode 100755 sen2cor/L2A_Borg.py mode change 100755 => 100644 sen2cor/L2A_Config.py mode change 100755 => 100644 sen2cor/L2A_Library.py mode change 100755 => 100644 sen2cor/L2A_SceneClass.py mode change 100755 => 100644 sen2cor/L2A_XmlParser.py delete mode 100755 sen2cor/cfg/DICO/1.0/DPC/header/DPC_Header.xsd delete mode 100755 sen2cor/cfg/DICO/1.0/DPC/processing/baseProcessing.xsd delete mode 100755 sen2cor/cfg/DICO/1.0/DPC/processing/synthesisReport.xsd delete mode 100755 sen2cor/cfg/DICO/1.0/DPC/services/DPC_ExceptionReport.xsd delete mode 100755 sen2cor/cfg/DICO/1.0/DPC/services/ProductionManage.xsd delete mode 100755 sen2cor/cfg/DICO/1.0/DPC/services/opengis/ows/1.1.0/Examples/exampleCapabilities.xsd delete mode 100755 sen2cor/cfg/DICO/1.0/DPC/services/opengis/ows/1.1.0/Examples/exampleCapabilities1.xml delete mode 100755 sen2cor/cfg/DICO/1.0/DPC/services/opengis/ows/1.1.0/Examples/exampleConstraint1.xml delete mode 100755 sen2cor/cfg/DICO/1.0/DPC/services/opengis/ows/1.1.0/Examples/exampleExceptionReport1.xml delete mode 100755 sen2cor/cfg/DICO/1.0/DPC/services/opengis/ows/1.1.0/Examples/exampleExceptionReport2.xml delete mode 100755 sen2cor/cfg/DICO/1.0/DPC/services/opengis/ows/1.1.0/Examples/exampleGeneralBox2.xml delete mode 100755 sen2cor/cfg/DICO/1.0/DPC/services/opengis/ows/1.1.0/Examples/exampleGetCapabilities2.xml delete mode 100755 sen2cor/cfg/DICO/1.0/DPC/services/opengis/ows/1.1.0/Examples/exampleOperationsMetadata.xml delete mode 100755 sen2cor/cfg/DICO/1.0/DPC/services/opengis/ows/1.1.0/Examples/exampleWGS84Box2.xml delete mode 100755 sen2cor/cfg/DICO/1.0/DPC/services/opengis/ows/1.1.0/ReadMe.txt delete mode 100755 sen2cor/cfg/DICO/1.0/DPC/services/opengis/ows/1.1.0/ows19115subset.xsd delete mode 100755 sen2cor/cfg/DICO/1.0/DPC/services/opengis/ows/1.1.0/owsAll.xsd delete mode 100755 sen2cor/cfg/DICO/1.0/DPC/services/opengis/ows/1.1.0/owsCommon.xsd delete mode 100755 sen2cor/cfg/DICO/1.0/DPC/services/opengis/ows/1.1.0/owsContents.xsd delete mode 100755 sen2cor/cfg/DICO/1.0/DPC/services/opengis/ows/1.1.0/owsDataIdentification.xsd delete mode 100755 sen2cor/cfg/DICO/1.0/DPC/services/opengis/ows/1.1.0/owsDomainType.xsd delete mode 100755 sen2cor/cfg/DICO/1.0/DPC/services/opengis/ows/1.1.0/owsExceptionReport.xsd delete mode 100755 sen2cor/cfg/DICO/1.0/DPC/services/opengis/ows/1.1.0/owsGetCapabilities.xsd delete mode 100755 sen2cor/cfg/DICO/1.0/DPC/services/opengis/ows/1.1.0/owsGetResourceByID.xsd delete mode 100755 sen2cor/cfg/DICO/1.0/DPC/services/opengis/ows/1.1.0/owsInputOutputData.xsd delete mode 100755 sen2cor/cfg/DICO/1.0/DPC/services/opengis/ows/1.1.0/owsManifest.xsd delete mode 100755 sen2cor/cfg/DICO/1.0/DPC/services/opengis/ows/1.1.0/owsOperationsMetadata.xsd delete mode 100755 sen2cor/cfg/DICO/1.0/DPC/services/opengis/ows/1.1.0/owsServiceIdentification.xsd delete mode 100755 sen2cor/cfg/DICO/1.0/DPC/services/opengis/ows/1.1.0/owsServiceProvider.xsd delete mode 100755 sen2cor/cfg/DICO/1.0/DPC/services/opengis/wps/1.0.0/ReadMe.txt delete mode 100755 sen2cor/cfg/DICO/1.0/DPC/services/opengis/wps/1.0.0/common/DescriptionType.xsd delete mode 100755 sen2cor/cfg/DICO/1.0/DPC/services/opengis/wps/1.0.0/common/ProcessBriefType.xsd delete mode 100755 sen2cor/cfg/DICO/1.0/DPC/services/opengis/wps/1.0.0/common/ProcessVersion.xsd delete mode 100755 sen2cor/cfg/DICO/1.0/DPC/services/opengis/wps/1.0.0/common/RequestBaseType.xsd delete mode 100755 sen2cor/cfg/DICO/1.0/DPC/services/opengis/wps/1.0.0/common/ResponseBaseType.xsd delete mode 100755 sen2cor/cfg/DICO/1.0/DPC/services/opengis/wps/1.0.0/common/WSDL.xsd delete mode 100755 sen2cor/cfg/DICO/1.0/DPC/services/opengis/wps/1.0.0/examples/10_wpsGetCapabilities_request.xml delete mode 100755 sen2cor/cfg/DICO/1.0/DPC/services/opengis/wps/1.0.0/examples/10_wpsGetCapabilities_request_SOAP.xml delete mode 100755 sen2cor/cfg/DICO/1.0/DPC/services/opengis/wps/1.0.0/examples/20_wpsGetCapabilities_response.xml delete mode 100755 sen2cor/cfg/DICO/1.0/DPC/services/opengis/wps/1.0.0/examples/20_wpsGetCapabilities_response_SOAP.xml delete mode 100755 sen2cor/cfg/DICO/1.0/DPC/services/opengis/wps/1.0.0/examples/30_wpsDescribeProcess_request.xml delete mode 100755 sen2cor/cfg/DICO/1.0/DPC/services/opengis/wps/1.0.0/examples/30_wpsDescribeProcess_request_SOAP.xml delete mode 100755 sen2cor/cfg/DICO/1.0/DPC/services/opengis/wps/1.0.0/examples/40_wpsDescribeProcess_response-extended.xml delete mode 100755 sen2cor/cfg/DICO/1.0/DPC/services/opengis/wps/1.0.0/examples/40_wpsDescribeProcess_response.xml delete mode 100755 sen2cor/cfg/DICO/1.0/DPC/services/opengis/wps/1.0.0/examples/50_wpsExecute_request_RawDataOutput.xml delete mode 100755 sen2cor/cfg/DICO/1.0/DPC/services/opengis/wps/1.0.0/examples/51_wpsExecute_request-extended_ResponseDocument.xml delete mode 100755 sen2cor/cfg/DICO/1.0/DPC/services/opengis/wps/1.0.0/examples/51_wpsExecute_request_ResponseDocument.xml delete mode 100755 sen2cor/cfg/DICO/1.0/DPC/services/opengis/wps/1.0.0/examples/52_wpsExecute_request_ResponseDocument.xml delete mode 100755 sen2cor/cfg/DICO/1.0/DPC/services/opengis/wps/1.0.0/examples/53_wpsExecute_request_ComplexValue.xml delete mode 100755 sen2cor/cfg/DICO/1.0/DPC/services/opengis/wps/1.0.0/examples/62_wpsExecute_response.xml delete mode 100755 sen2cor/cfg/DICO/1.0/DPC/services/opengis/wps/1.0.0/examples/90_wpsExceptionReport.xml delete mode 100755 sen2cor/cfg/DICO/1.0/DPC/services/opengis/wps/1.0.0/examples/DPC_services.wsdl delete mode 100755 sen2cor/cfg/DICO/1.0/DPC/services/opengis/wps/1.0.0/examples/MyComplexValueSchema.xsd delete mode 100755 sen2cor/cfg/DICO/1.0/DPC/services/opengis/wps/1.0.0/examples/example_service.wsdl delete mode 100755 sen2cor/cfg/DICO/1.0/DPC/services/opengis/wps/1.0.0/wpsAll.xsd delete mode 100755 sen2cor/cfg/DICO/1.0/DPC/services/opengis/wps/1.0.0/wpsDescribeProcess_request.xsd delete mode 100755 sen2cor/cfg/DICO/1.0/DPC/services/opengis/wps/1.0.0/wpsDescribeProcess_response.xsd delete mode 100755 sen2cor/cfg/DICO/1.0/DPC/services/opengis/wps/1.0.0/wpsExecute_request.xsd delete mode 100755 sen2cor/cfg/DICO/1.0/DPC/services/opengis/wps/1.0.0/wpsExecute_response.xsd delete mode 100755 sen2cor/cfg/DICO/1.0/DPC/services/opengis/wps/1.0.0/wpsGetCapabilities_request.xsd delete mode 100755 sen2cor/cfg/DICO/1.0/DPC/services/opengis/wps/1.0.0/wpsGetCapabilities_response.xsd delete mode 100755 sen2cor/cfg/DICO/1.0/DPC/services/opengis/xlinks/1.0.0/xlinks.xsd delete mode 100755 sen2cor/cfg/DICO/1.0/DPC/services/owsExceptionReport.xsd delete mode 100755 sen2cor/cfg/DICO/1.0/DataAccess/item/item.xsd delete mode 100755 sen2cor/cfg/DICO/1.0/DataAccess/item/item2A.xsd delete mode 100755 sen2cor/cfg/DICO/1.0/DataAccess/userProduct/userProduct.xsd delete mode 100755 sen2cor/cfg/DICO/1.0/FOS/Orb_Reference/EO_OPER_MPL_ORBSCT_REF.xsd delete mode 100755 sen2cor/cfg/DICO/1.0/FOS/Orb_Restituted/EO_OPER_AUX_ORBRES.xsd delete mode 100755 sen2cor/cfg/DICO/1.0/FOS/Orb_predicted/EO_OPER_MPL_ORBPRE.xsd delete mode 100755 sen2cor/cfg/DICO/1.0/GS/header/stationHeader.xsd delete mode 100755 sen2cor/cfg/DICO/1.0/GS/plan/ACQ.xsd delete mode 100755 sen2cor/cfg/DICO/1.0/GS/report/StationDownlink.xsd delete mode 100755 sen2cor/cfg/DICO/1.0/GS/report/StationUnavailability.xsd delete mode 100755 sen2cor/cfg/DICO/1.0/IPF/base/base.xsd delete mode 100755 sen2cor/cfg/DICO/1.0/IPF/job/IDP_SC_Configuration.xsd delete mode 100755 sen2cor/cfg/DICO/1.0/IPF/job/IDP_SC_LaunchReport.xsd delete mode 100755 sen2cor/cfg/DICO/1.0/IPF/job/IPF_JobOrder.xsd delete mode 100755 sen2cor/cfg/DICO/1.0/PDGS/archive/archive.xsd delete mode 100755 sen2cor/cfg/DICO/1.0/PDGS/base/base.xsd delete mode 100755 sen2cor/cfg/DICO/1.0/PDGS/center/center.xsd delete mode 100755 sen2cor/cfg/DICO/1.0/PDGS/component/component.xsd delete mode 100755 sen2cor/cfg/DICO/1.0/PDGS/configuration/configuration.xsd delete mode 100755 sen2cor/cfg/DICO/1.0/PDGS/dimap/dimap.xsd delete mode 100755 sen2cor/cfg/DICO/1.0/PDGS/dimap/dimap2A.xsd delete mode 100755 sen2cor/cfg/DICO/1.0/PDGS/fileNaming/fileNaming.xsd delete mode 100755 sen2cor/cfg/DICO/1.0/PDGS/header/EOF_Header.xsd delete mode 100755 sen2cor/cfg/DICO/1.0/PDGS/logical_definitions/logical_definitions.xsd delete mode 100755 sen2cor/cfg/DICO/1.0/PDGS/spacecraft/spacecraft.xsd delete mode 100755 sen2cor/cfg/DICO/1.0/PDGS/station/StationUnavailability.xsd delete mode 100755 sen2cor/cfg/DICO/1.0/SY/date_time/date_time.xsd delete mode 100755 sen2cor/cfg/DICO/1.0/SY/geographical/geographical.xsd delete mode 100755 sen2cor/cfg/DICO/1.0/SY/image/image.xsd delete mode 100755 sen2cor/cfg/DICO/1.0/SY/misc/misc.xsd delete mode 100755 sen2cor/cfg/DICO/1.0/SY/orbital/HeaderTypes_Orbit.xsd delete mode 100755 sen2cor/cfg/DICO/1.0/SY/orbital/orbital.xsd delete mode 100755 sen2cor/cfg/DICO/1.0/SY/platform/platform.xsd delete mode 100755 sen2cor/cfg/DICO/1.0/SY/representation/representation.xsd delete mode 100755 sen2cor/cfg/DICO/1.0/SY/spatio/spatio.xsd delete mode 100755 sen2cor/cfg/DICO/1.0/SY/tile/tile.xsd delete mode 100755 sen2cor/cfg/Inventory_Metadata.xsd delete mode 100755 sen2cor/cfg/S2_PDI_Level-1C_Datastrip_Metadata.xsd delete mode 100755 sen2cor/cfg/S2_PDI_Level-1C_Datastrip_Structure.xsd delete mode 100755 sen2cor/cfg/S2_PDI_Level-1C_Tile_Metadata.xsd delete mode 100755 sen2cor/cfg/S2_PDI_Level-1C_Tile_Structure.xsd delete mode 100755 sen2cor/cfg/S2_PDI_Level-2A_Datastrip_Metadata.xsd delete mode 100755 sen2cor/cfg/S2_PDI_Level-2A_Datastrip_Structure.xsd delete mode 100755 sen2cor/cfg/S2_PDI_Level-2A_Tile_Metadata.xsd delete mode 100755 sen2cor/cfg/S2_PDI_Level-2A_Tile_Structure.xsd delete mode 100755 sen2cor/cfg/S2_User_Product_Level-1C_Metadata.xsd delete mode 100755 sen2cor/cfg/S2_User_Product_Level-1C_Structure.xsd delete mode 100755 sen2cor/cfg/S2_User_Product_Level-2A_Metadata.xsd delete mode 100755 sen2cor/cfg/S2_User_Product_Level-2A_Structure.xsd delete mode 100755 sen2cor/lib/Thumbs.db diff --git a/MANIFEST.in b/MANIFEST.in index a09ac9f..94e432f 100755 --- a/MANIFEST.in +++ b/MANIFEST.in @@ -1,11 +1,14 @@ include README.txt include README.md include SETUP.pdf - +global-exclude L2A_AtmCorr.py L2A_TestUtils.py .DS_Store .estimation *_report.xml *.bak *.tmp *~ +recursive-include cfg * recursive-include sen2cor * -exclude sen2cor/*.pyc sen2cor/*.c sen2cor/*.o -global-exclude L2A_AtmCorr.py L2A_TestUtils.py .DS_Store .estimation *.bak *.tmp *~ +exclude sen2cor/*.pyc sen2cor/*.c sen2cor/*.o sen2cor/L2A_AtmCorr.py +graft cfg +prune dem +prune log prune sen2cor/bin prune sen2cor/dem prune sen2cor/log diff --git a/PKG-INFO b/PKG-INFO index 18f81bc..ae45ccf 100644 --- a/PKG-INFO +++ b/PKG-INFO @@ -1,6 +1,6 @@ -Metadata-Version: 1.0 +Metadata-Version: 13.1 Name: sen2cor -Version: 2.0.3 +Version: 2.1.0 Summary: sen2cor: Sentinel 2 Level 2A Prototype Processor Home-page: www.telespazio-vega.de Author: Telespazio VEGA Deutschland GmbH @@ -20,7 +20,7 @@ Description: sen2cor: Sentinel 2 Level 2A Prototype Processor module for the Atmospheric Correction is attached to this software in form of a binary library only. - Please read the docs located on: http://s2tbx.telespazio-vega.de for further info. + Please read the docs located on: http://s2tbx.telespazio-vega.de/sen2cor for further info. Platform: linux-x86_64 Platform: macosx-10.5-x86_64 diff --git a/sen2cor.egg-info/PKG-INFO b/sen2cor.egg-info/PKG-INFO index 2468da4..54f8df5 100644 --- a/sen2cor.egg-info/PKG-INFO +++ b/sen2cor.egg-info/PKG-INFO @@ -1,6 +1,6 @@ Metadata-Version: 1.0 Name: sen2cor -Version: 2.0.5 +Version: 2.1.2 Summary: sen2cor: Sentinel 2 Level 2A Prototype Processor Home-page: www.telespazio-vega.de Author: Telespazio VEGA Deutschland GmbH diff --git a/sen2cor.egg-info/SOURCES.txt b/sen2cor.egg-info/SOURCES.txt index 78061d8..5f3ceaa 100644 --- a/sen2cor.egg-info/SOURCES.txt +++ b/sen2cor.egg-info/SOURCES.txt @@ -1,14 +1,19 @@ MANIFEST.in README.md README.txt -SETUP.pdf setup.cfg setup.py -sen2cor/L2A_Borg.py +cfg/.DS_Store +cfg/L2A_GIPP.xml +sen2cor/.DS_Store sen2cor/L2A_Config.py sen2cor/L2A_Library.py +sen2cor/L2A_Logger.py +sen2cor/L2A_Manifest.py sen2cor/L2A_Process.py +sen2cor/L2A_ProcessTile.py sen2cor/L2A_SceneClass.py +sen2cor/L2A_Schedule.py sen2cor/L2A_Tables.py sen2cor/L2A_XmlParser.py sen2cor/__init__.py @@ -20,133 +25,260 @@ sen2cor.egg-info/entry_points.txt sen2cor.egg-info/not-zip-safe sen2cor.egg-info/pbr.json sen2cor.egg-info/top_level.txt +sen2cor/build/.DS_Store sen2cor/build/lib.linux-x86_64-2.7/L2A_AtmCorr.so sen2cor/build/lib.linux-x86_64-2.7/libopenjp2.so sen2cor/build/lib.macosx-10.5-x86_64-2.7/L2A_AtmCorr.so sen2cor/build/lib.macosx-10.5-x86_64-2.7/libopenjp2.dylib sen2cor/build/lib.win-amd64-2.7/L2A_AtmCorr.pyd sen2cor/build/lib.win-amd64-2.7/openjp2.dll +sen2cor/cfg/.DS_Store +sen2cor/cfg/.estimation sen2cor/cfg/INSPIRE.xml -sen2cor/cfg/Inventory_Metadata.xsd +sen2cor/cfg/L2A_CAL_AC_GIPP.xml +sen2cor/cfg/L2A_CAL_AC_GIPP.xsd +sen2cor/cfg/L2A_CAL_SC_GIPP.xml +sen2cor/cfg/L2A_CAL_SC_GIPP.xsd sen2cor/cfg/L2A_GIPP.xml +sen2cor/cfg/L2A_GIPP.xsd +sen2cor/cfg/L2A_Manifest.xml sen2cor/cfg/OLQC_Report.xsd sen2cor/cfg/Readme.txt -sen2cor/cfg/S2_PDI_Level-1C_Datastrip_Metadata.xsd -sen2cor/cfg/S2_PDI_Level-1C_Datastrip_Structure.xsd -sen2cor/cfg/S2_PDI_Level-1C_Tile_Metadata.xsd -sen2cor/cfg/S2_PDI_Level-1C_Tile_Structure.xsd -sen2cor/cfg/S2_PDI_Level-2A_Datastrip_Metadata.xsd -sen2cor/cfg/S2_PDI_Level-2A_Datastrip_Structure.xsd -sen2cor/cfg/S2_PDI_Level-2A_Tile_Metadata.xsd -sen2cor/cfg/S2_PDI_Level-2A_Tile_Structure.xsd -sen2cor/cfg/S2_User_Product_Level-1C_Metadata.xsd -sen2cor/cfg/S2_User_Product_Level-1C_Structure.xsd -sen2cor/cfg/S2_User_Product_Level-2A_Metadata.xsd -sen2cor/cfg/S2_User_Product_Level-2A_Structure.xsd sen2cor/cfg/__init__.py sen2cor/cfg/manifest.safe -sen2cor/cfg/DICO/1.0/DPC/header/DPC_Header.xsd -sen2cor/cfg/DICO/1.0/DPC/processing/baseProcessing.xsd -sen2cor/cfg/DICO/1.0/DPC/processing/synthesisReport.xsd -sen2cor/cfg/DICO/1.0/DPC/services/DPC_ExceptionReport.xsd -sen2cor/cfg/DICO/1.0/DPC/services/ProductionManage.xsd -sen2cor/cfg/DICO/1.0/DPC/services/owsExceptionReport.xsd -sen2cor/cfg/DICO/1.0/DPC/services/opengis/ows/1.1.0/ReadMe.txt -sen2cor/cfg/DICO/1.0/DPC/services/opengis/ows/1.1.0/ows19115subset.xsd -sen2cor/cfg/DICO/1.0/DPC/services/opengis/ows/1.1.0/owsAll.xsd -sen2cor/cfg/DICO/1.0/DPC/services/opengis/ows/1.1.0/owsCommon.xsd -sen2cor/cfg/DICO/1.0/DPC/services/opengis/ows/1.1.0/owsContents.xsd -sen2cor/cfg/DICO/1.0/DPC/services/opengis/ows/1.1.0/owsDataIdentification.xsd -sen2cor/cfg/DICO/1.0/DPC/services/opengis/ows/1.1.0/owsDomainType.xsd -sen2cor/cfg/DICO/1.0/DPC/services/opengis/ows/1.1.0/owsExceptionReport.xsd -sen2cor/cfg/DICO/1.0/DPC/services/opengis/ows/1.1.0/owsGetCapabilities.xsd -sen2cor/cfg/DICO/1.0/DPC/services/opengis/ows/1.1.0/owsGetResourceByID.xsd -sen2cor/cfg/DICO/1.0/DPC/services/opengis/ows/1.1.0/owsInputOutputData.xsd -sen2cor/cfg/DICO/1.0/DPC/services/opengis/ows/1.1.0/owsManifest.xsd -sen2cor/cfg/DICO/1.0/DPC/services/opengis/ows/1.1.0/owsOperationsMetadata.xsd -sen2cor/cfg/DICO/1.0/DPC/services/opengis/ows/1.1.0/owsServiceIdentification.xsd -sen2cor/cfg/DICO/1.0/DPC/services/opengis/ows/1.1.0/owsServiceProvider.xsd -sen2cor/cfg/DICO/1.0/DPC/services/opengis/ows/1.1.0/Examples/exampleCapabilities.xsd -sen2cor/cfg/DICO/1.0/DPC/services/opengis/ows/1.1.0/Examples/exampleCapabilities1.xml -sen2cor/cfg/DICO/1.0/DPC/services/opengis/ows/1.1.0/Examples/exampleConstraint1.xml -sen2cor/cfg/DICO/1.0/DPC/services/opengis/ows/1.1.0/Examples/exampleExceptionReport1.xml -sen2cor/cfg/DICO/1.0/DPC/services/opengis/ows/1.1.0/Examples/exampleExceptionReport2.xml -sen2cor/cfg/DICO/1.0/DPC/services/opengis/ows/1.1.0/Examples/exampleGeneralBox2.xml -sen2cor/cfg/DICO/1.0/DPC/services/opengis/ows/1.1.0/Examples/exampleGetCapabilities2.xml -sen2cor/cfg/DICO/1.0/DPC/services/opengis/ows/1.1.0/Examples/exampleOperationsMetadata.xml -sen2cor/cfg/DICO/1.0/DPC/services/opengis/ows/1.1.0/Examples/exampleWGS84Box2.xml -sen2cor/cfg/DICO/1.0/DPC/services/opengis/wps/1.0.0/ReadMe.txt -sen2cor/cfg/DICO/1.0/DPC/services/opengis/wps/1.0.0/wpsAll.xsd -sen2cor/cfg/DICO/1.0/DPC/services/opengis/wps/1.0.0/wpsDescribeProcess_request.xsd -sen2cor/cfg/DICO/1.0/DPC/services/opengis/wps/1.0.0/wpsDescribeProcess_response.xsd -sen2cor/cfg/DICO/1.0/DPC/services/opengis/wps/1.0.0/wpsExecute_request.xsd -sen2cor/cfg/DICO/1.0/DPC/services/opengis/wps/1.0.0/wpsExecute_response.xsd -sen2cor/cfg/DICO/1.0/DPC/services/opengis/wps/1.0.0/wpsGetCapabilities_request.xsd -sen2cor/cfg/DICO/1.0/DPC/services/opengis/wps/1.0.0/wpsGetCapabilities_response.xsd -sen2cor/cfg/DICO/1.0/DPC/services/opengis/wps/1.0.0/common/DescriptionType.xsd -sen2cor/cfg/DICO/1.0/DPC/services/opengis/wps/1.0.0/common/ProcessBriefType.xsd -sen2cor/cfg/DICO/1.0/DPC/services/opengis/wps/1.0.0/common/ProcessVersion.xsd -sen2cor/cfg/DICO/1.0/DPC/services/opengis/wps/1.0.0/common/RequestBaseType.xsd -sen2cor/cfg/DICO/1.0/DPC/services/opengis/wps/1.0.0/common/ResponseBaseType.xsd -sen2cor/cfg/DICO/1.0/DPC/services/opengis/wps/1.0.0/common/WSDL.xsd -sen2cor/cfg/DICO/1.0/DPC/services/opengis/wps/1.0.0/examples/10_wpsGetCapabilities_request.xml -sen2cor/cfg/DICO/1.0/DPC/services/opengis/wps/1.0.0/examples/10_wpsGetCapabilities_request_SOAP.xml -sen2cor/cfg/DICO/1.0/DPC/services/opengis/wps/1.0.0/examples/20_wpsGetCapabilities_response.xml -sen2cor/cfg/DICO/1.0/DPC/services/opengis/wps/1.0.0/examples/20_wpsGetCapabilities_response_SOAP.xml -sen2cor/cfg/DICO/1.0/DPC/services/opengis/wps/1.0.0/examples/30_wpsDescribeProcess_request.xml -sen2cor/cfg/DICO/1.0/DPC/services/opengis/wps/1.0.0/examples/30_wpsDescribeProcess_request_SOAP.xml -sen2cor/cfg/DICO/1.0/DPC/services/opengis/wps/1.0.0/examples/40_wpsDescribeProcess_response-extended.xml -sen2cor/cfg/DICO/1.0/DPC/services/opengis/wps/1.0.0/examples/40_wpsDescribeProcess_response.xml -sen2cor/cfg/DICO/1.0/DPC/services/opengis/wps/1.0.0/examples/50_wpsExecute_request_RawDataOutput.xml -sen2cor/cfg/DICO/1.0/DPC/services/opengis/wps/1.0.0/examples/51_wpsExecute_request-extended_ResponseDocument.xml -sen2cor/cfg/DICO/1.0/DPC/services/opengis/wps/1.0.0/examples/51_wpsExecute_request_ResponseDocument.xml -sen2cor/cfg/DICO/1.0/DPC/services/opengis/wps/1.0.0/examples/52_wpsExecute_request_ResponseDocument.xml -sen2cor/cfg/DICO/1.0/DPC/services/opengis/wps/1.0.0/examples/53_wpsExecute_request_ComplexValue.xml -sen2cor/cfg/DICO/1.0/DPC/services/opengis/wps/1.0.0/examples/62_wpsExecute_response.xml -sen2cor/cfg/DICO/1.0/DPC/services/opengis/wps/1.0.0/examples/90_wpsExceptionReport.xml -sen2cor/cfg/DICO/1.0/DPC/services/opengis/wps/1.0.0/examples/DPC_services.wsdl -sen2cor/cfg/DICO/1.0/DPC/services/opengis/wps/1.0.0/examples/MyComplexValueSchema.xsd -sen2cor/cfg/DICO/1.0/DPC/services/opengis/wps/1.0.0/examples/example_service.wsdl -sen2cor/cfg/DICO/1.0/DPC/services/opengis/xlinks/1.0.0/xlinks.xsd -sen2cor/cfg/DICO/1.0/DataAccess/item/item.xsd -sen2cor/cfg/DICO/1.0/DataAccess/item/item2A.xsd -sen2cor/cfg/DICO/1.0/DataAccess/userProduct/userProduct.xsd -sen2cor/cfg/DICO/1.0/FOS/Orb_Reference/EO_OPER_MPL_ORBSCT_REF.xsd -sen2cor/cfg/DICO/1.0/FOS/Orb_Restituted/EO_OPER_AUX_ORBRES.xsd -sen2cor/cfg/DICO/1.0/FOS/Orb_predicted/EO_OPER_MPL_ORBPRE.xsd -sen2cor/cfg/DICO/1.0/GS/header/stationHeader.xsd -sen2cor/cfg/DICO/1.0/GS/plan/ACQ.xsd -sen2cor/cfg/DICO/1.0/GS/report/StationDownlink.xsd -sen2cor/cfg/DICO/1.0/GS/report/StationUnavailability.xsd -sen2cor/cfg/DICO/1.0/IPF/base/base.xsd -sen2cor/cfg/DICO/1.0/IPF/job/IDP_SC_Configuration.xsd -sen2cor/cfg/DICO/1.0/IPF/job/IDP_SC_LaunchReport.xsd -sen2cor/cfg/DICO/1.0/IPF/job/IPF_JobOrder.xsd -sen2cor/cfg/DICO/1.0/PDGS/archive/archive.xsd -sen2cor/cfg/DICO/1.0/PDGS/base/base.xsd -sen2cor/cfg/DICO/1.0/PDGS/center/center.xsd -sen2cor/cfg/DICO/1.0/PDGS/component/component.xsd -sen2cor/cfg/DICO/1.0/PDGS/configuration/configuration.xsd -sen2cor/cfg/DICO/1.0/PDGS/dimap/dimap.xsd -sen2cor/cfg/DICO/1.0/PDGS/dimap/dimap2A.xsd -sen2cor/cfg/DICO/1.0/PDGS/fileNaming/fileNaming.xsd -sen2cor/cfg/DICO/1.0/PDGS/header/EOF_Header.xsd -sen2cor/cfg/DICO/1.0/PDGS/logical_definitions/logical_definitions.xsd -sen2cor/cfg/DICO/1.0/PDGS/spacecraft/spacecraft.xsd -sen2cor/cfg/DICO/1.0/PDGS/station/StationUnavailability.xsd -sen2cor/cfg/DICO/1.0/SY/date_time/date_time.xsd -sen2cor/cfg/DICO/1.0/SY/geographical/geographical.xsd -sen2cor/cfg/DICO/1.0/SY/image/image.xsd -sen2cor/cfg/DICO/1.0/SY/misc/misc.xsd -sen2cor/cfg/DICO/1.0/SY/orbital/HeaderTypes_Orbit.xsd -sen2cor/cfg/DICO/1.0/SY/orbital/orbital.xsd -sen2cor/cfg/DICO/1.0/SY/platform/platform.xsd -sen2cor/cfg/DICO/1.0/SY/representation/representation.xsd -sen2cor/cfg/DICO/1.0/SY/spatio/spatio.xsd -sen2cor/cfg/DICO/1.0/SY/tile/tile.xsd +sen2cor/cfg/S2-PDGS-TAS-DI-PSD-V13.1_SAFE/.DS_Store +sen2cor/cfg/S2-PDGS-TAS-DI-PSD-V13.1_SAFE/MANIFEST/.DS_Store +sen2cor/cfg/S2-PDGS-TAS-DI-PSD-V13.1_SAFE/MANIFEST/manifest_hktm.safe +sen2cor/cfg/S2-PDGS-TAS-DI-PSD-V13.1_SAFE/MANIFEST/manifest_pdi_l1c_datastrip.safe +sen2cor/cfg/S2-PDGS-TAS-DI-PSD-V13.1_SAFE/MANIFEST/manifest_pdi_l1c_tile.safe +sen2cor/cfg/S2-PDGS-TAS-DI-PSD-V13.1_SAFE/MANIFEST/manifest_user_product_l1c.safe +sen2cor/cfg/S2-PDGS-TAS-DI-PSD-V13.1_SAFE/resources/.DS_Store +sen2cor/cfg/S2-PDGS-TAS-DI-PSD-V13.1_SAFE/resources/docbook/.DS_Store +sen2cor/cfg/S2-PDGS-TAS-DI-PSD-V13.1_SAFE/resources/docbook/int/.DS_Store +sen2cor/cfg/S2-PDGS-TAS-DI-PSD-V13.1_SAFE/resources/docbook/int/esa/.DS_Store +sen2cor/cfg/S2-PDGS-TAS-DI-PSD-V13.1_SAFE/resources/docbook/int/esa/safe/book.xml +sen2cor/cfg/S2-PDGS-TAS-DI-PSD-V13.1_SAFE/resources/docbook/int/esa/safe/example/manifest.safe +sen2cor/cfg/S2-PDGS-TAS-DI-PSD-V13.1_SAFE/resources/docbook/int/esa/safe/example/s1-level-0.xsd +sen2cor/cfg/S2-PDGS-TAS-DI-PSD-V13.1_SAFE/resources/docbook/int/esa/safe/media/SDF-Markups-1-bis.svg +sen2cor/cfg/S2-PDGS-TAS-DI-PSD-V13.1_SAFE/resources/docbook/int/esa/safe/media/SDF-Markups-1.png +sen2cor/cfg/S2-PDGS-TAS-DI-PSD-V13.1_SAFE/resources/docbook/int/esa/safe/media/SDF-Markups-1.svg +sen2cor/cfg/S2-PDGS-TAS-DI-PSD-V13.1_SAFE/resources/docbook/int/esa/safe/media/SDF-Markups-2-bis.svg +sen2cor/cfg/S2-PDGS-TAS-DI-PSD-V13.1_SAFE/resources/docbook/int/esa/safe/media/SDF-Markups-2.png +sen2cor/cfg/S2-PDGS-TAS-DI-PSD-V13.1_SAFE/resources/docbook/int/esa/safe/media/SDF-Markups-2.svg +sen2cor/cfg/S2-PDGS-TAS-DI-PSD-V13.1_SAFE/resources/docbook/int/esa/safe/media/SDF-Markups-3-bis.svg +sen2cor/cfg/S2-PDGS-TAS-DI-PSD-V13.1_SAFE/resources/docbook/int/esa/safe/media/SDF-Markups-3.png +sen2cor/cfg/S2-PDGS-TAS-DI-PSD-V13.1_SAFE/resources/docbook/int/esa/safe/media/SDF-Markups-3.svg +sen2cor/cfg/S2-PDGS-TAS-DI-PSD-V13.1_SAFE/resources/docbook/int/esa/safe/media/SDF-Markups-4-bis.svg +sen2cor/cfg/S2-PDGS-TAS-DI-PSD-V13.1_SAFE/resources/docbook/int/esa/safe/media/SDF-Markups-4.png +sen2cor/cfg/S2-PDGS-TAS-DI-PSD-V13.1_SAFE/resources/docbook/int/esa/safe/media/SDF-Markups-4.svg +sen2cor/cfg/S2-PDGS-TAS-DI-PSD-V13.1_SAFE/resources/docbook/int/esa/safe/media/Sentinel-SAFE-Data-Object.png +sen2cor/cfg/S2-PDGS-TAS-DI-PSD-V13.1_SAFE/resources/docbook/int/esa/safe/media/Sentinel-SAFE-Data-Object.svg +sen2cor/cfg/S2-PDGS-TAS-DI-PSD-V13.1_SAFE/resources/docbook/int/esa/safe/media/Sentinel-SAFE-Metadata-Object.png +sen2cor/cfg/S2-PDGS-TAS-DI-PSD-V13.1_SAFE/resources/docbook/int/esa/safe/media/Sentinel-SAFE-Metadata-Object.svg +sen2cor/cfg/S2-PDGS-TAS-DI-PSD-V13.1_SAFE/resources/docbook/int/esa/safe/media/Sentinel-SAFE-Wrapped-Metadata-Object.png +sen2cor/cfg/S2-PDGS-TAS-DI-PSD-V13.1_SAFE/resources/docbook/int/esa/safe/media/Sentinel-SAFE-Wrapped-Metadata-Object.svg +sen2cor/cfg/S2-PDGS-TAS-DI-PSD-V13.1_SAFE/resources/docbook/int/esa/safe/media/example.png +sen2cor/cfg/S2-PDGS-TAS-DI-PSD-V13.1_SAFE/resources/docbook/int/esa/safe/media/example.svg +sen2cor/cfg/S2-PDGS-TAS-DI-PSD-V13.1_SAFE/resources/docbook/int/esa/safe/media/index.png +sen2cor/cfg/S2-PDGS-TAS-DI-PSD-V13.1_SAFE/resources/docbook/int/esa/safe/media/index.svg +sen2cor/cfg/S2-PDGS-TAS-DI-PSD-V13.1_SAFE/resources/docbook/int/esa/safe/media/informationModel.png +sen2cor/cfg/S2-PDGS-TAS-DI-PSD-V13.1_SAFE/resources/docbook/int/esa/safe/media/informationModel.svg +sen2cor/cfg/S2-PDGS-TAS-DI-PSD-V13.1_SAFE/resources/docbook/int/esa/safe/media/logo.jpg +sen2cor/cfg/S2-PDGS-TAS-DI-PSD-V13.1_SAFE/resources/docbook/int/esa/safe/media/measurement.png +sen2cor/cfg/S2-PDGS-TAS-DI-PSD-V13.1_SAFE/resources/docbook/int/esa/safe/media/measurement.svg +sen2cor/cfg/S2-PDGS-TAS-DI-PSD-V13.1_SAFE/resources/docbook/int/esa/safe/media/measurementWithInclusion.png +sen2cor/cfg/S2-PDGS-TAS-DI-PSD-V13.1_SAFE/resources/docbook/int/esa/safe/media/measurementWithInclusion.svg +sen2cor/cfg/S2-PDGS-TAS-DI-PSD-V13.1_SAFE/resources/docbook/int/esa/safe/media/metadataBinary.png +sen2cor/cfg/S2-PDGS-TAS-DI-PSD-V13.1_SAFE/resources/docbook/int/esa/safe/media/metadataBinary.svg +sen2cor/cfg/S2-PDGS-TAS-DI-PSD-V13.1_SAFE/resources/docbook/int/esa/safe/media/metadataBinaryWithInclusion.png +sen2cor/cfg/S2-PDGS-TAS-DI-PSD-V13.1_SAFE/resources/docbook/int/esa/safe/media/metadataBinaryWithInclusion.svg +sen2cor/cfg/S2-PDGS-TAS-DI-PSD-V13.1_SAFE/resources/docbook/int/esa/safe/media/metadataWrapped.png +sen2cor/cfg/S2-PDGS-TAS-DI-PSD-V13.1_SAFE/resources/docbook/int/esa/safe/media/metadataWrapped.svg +sen2cor/cfg/S2-PDGS-TAS-DI-PSD-V13.1_SAFE/resources/docbook/int/esa/safe/media/notation.xsd +sen2cor/cfg/S2-PDGS-TAS-DI-PSD-V13.1_SAFE/resources/docbook/int/esa/safe/media/physicalModel.png +sen2cor/cfg/S2-PDGS-TAS-DI-PSD-V13.1_SAFE/resources/docbook/int/esa/safe/media/physicalModel.svg +sen2cor/cfg/S2-PDGS-TAS-DI-PSD-V13.1_SAFE/resources/docbook/int/esa/safe/media/save.png +sen2cor/cfg/S2-PDGS-TAS-DI-PSD-V13.1_SAFE/resources/docbook/int/esa/safe/media/save.svg +sen2cor/cfg/S2-PDGS-TAS-DI-PSD-V13.1_SAFE/resources/docbook/int/esa/safe/media/sdf-block-complex-content.png +sen2cor/cfg/S2-PDGS-TAS-DI-PSD-V13.1_SAFE/resources/docbook/int/esa/safe/media/sdf-block-content.png +sen2cor/cfg/S2-PDGS-TAS-DI-PSD-V13.1_SAFE/resources/docbook/int/esa/safe/media/sdf-block-location.png +sen2cor/cfg/S2-PDGS-TAS-DI-PSD-V13.1_SAFE/resources/docbook/int/esa/safe/media/sdf-block-tree.png +sen2cor/cfg/S2-PDGS-TAS-DI-PSD-V13.1_SAFE/resources/docbook/int/esa/safe/media/internal-links/dataobject.png +sen2cor/cfg/S2-PDGS-TAS-DI-PSD-V13.1_SAFE/resources/docbook/int/esa/safe/media/internal-links/dataobject.svg +sen2cor/cfg/S2-PDGS-TAS-DI-PSD-V13.1_SAFE/resources/docbook/int/esa/safe/media/internal-links/included-schema.png +sen2cor/cfg/S2-PDGS-TAS-DI-PSD-V13.1_SAFE/resources/docbook/int/esa/safe/media/internal-links/included-schema.svg +sen2cor/cfg/S2-PDGS-TAS-DI-PSD-V13.1_SAFE/resources/docbook/int/esa/safe/media/internal-links/metadata-and-index.png +sen2cor/cfg/S2-PDGS-TAS-DI-PSD-V13.1_SAFE/resources/docbook/int/esa/safe/media/internal-links/metadata-and-index.svg +sen2cor/cfg/S2-PDGS-TAS-DI-PSD-V13.1_SAFE/resources/docbook/int/esa/safe/media/internal-links/wrapped-metadata.png +sen2cor/cfg/S2-PDGS-TAS-DI-PSD-V13.1_SAFE/resources/docbook/int/esa/safe/media/internal-links/wrapped-metadata.svg +sen2cor/cfg/S2-PDGS-TAS-DI-PSD-V13.1_SAFE/resources/docbook/int/esa/safe/media/model/Sentinel-SAFE-Information-Model.png +sen2cor/cfg/S2-PDGS-TAS-DI-PSD-V13.1_SAFE/resources/docbook/int/esa/safe/media/model/Sentinel-SAFE-Information-Model.svg +sen2cor/cfg/S2-PDGS-TAS-DI-PSD-V13.1_SAFE/resources/docbook/int/esa/safe/media/model/Sentinel-SAFE-Logical-Model.png +sen2cor/cfg/S2-PDGS-TAS-DI-PSD-V13.1_SAFE/resources/docbook/int/esa/safe/media/model/Sentinel-SAFE-Logical-Model.svg +sen2cor/cfg/S2-PDGS-TAS-DI-PSD-V13.1_SAFE/resources/docbook/int/esa/safe/media/model/Sentinel-SAFE-Manifest-File-Physical-Model.png +sen2cor/cfg/S2-PDGS-TAS-DI-PSD-V13.1_SAFE/resources/docbook/int/esa/safe/media/model/Sentinel-SAFE-Manifest-File-Physical-Model.svg +sen2cor/cfg/S2-PDGS-TAS-DI-PSD-V13.1_SAFE/resources/docbook/int/esa/safe/media/model/Sentinel-SAFE-Objects-Physical-Model.png +sen2cor/cfg/S2-PDGS-TAS-DI-PSD-V13.1_SAFE/resources/docbook/int/esa/safe/media/model/Sentinel-SAFE-Objects-Physical-Model.svg +sen2cor/cfg/S2-PDGS-TAS-DI-PSD-V13.1_SAFE/resources/docbook/int/esa/safe/media/model/Sentinel-SAFE-Objects.png +sen2cor/cfg/S2-PDGS-TAS-DI-PSD-V13.1_SAFE/resources/docbook/int/esa/safe/media/model/Sentinel-SAFE-Objects.svg +sen2cor/cfg/S2-PDGS-TAS-DI-PSD-V13.1_SAFE/resources/docbook/int/esa/safe/media/model/Sentinel-SAFE-Physical-Model.png +sen2cor/cfg/S2-PDGS-TAS-DI-PSD-V13.1_SAFE/resources/docbook/int/esa/safe/media/model/Sentinel-SAFE-Physical-Model.svg +sen2cor/cfg/S2-PDGS-TAS-DI-PSD-V13.1_SAFE/resources/docbook/int/esa/safe/shared/appendix/fdl-1.3.xml +sen2cor/cfg/S2-PDGS-TAS-DI-PSD-V13.1_SAFE/resources/docbook/int/esa/safe/shared/namespace/gml.xml +sen2cor/cfg/S2-PDGS-TAS-DI-PSD-V13.1_SAFE/resources/docbook/int/esa/safe/shared/namespace/prefixes.xml +sen2cor/cfg/S2-PDGS-TAS-DI-PSD-V13.1_SAFE/resources/docbook/int/esa/safe/shared/namespace/sentinel-safe.xml +sen2cor/cfg/S2-PDGS-TAS-DI-PSD-V13.1_SAFE/resources/docbook/int/esa/safe/shared/namespace/xfdu.xml +sen2cor/cfg/S2-PDGS-TAS-DI-PSD-V13.1_SAFE/resources/docbook/int/esa/safe/shared/preface/example.png +sen2cor/cfg/S2-PDGS-TAS-DI-PSD-V13.1_SAFE/resources/docbook/int/esa/safe/shared/preface/example.svg +sen2cor/cfg/S2-PDGS-TAS-DI-PSD-V13.1_SAFE/resources/docbook/int/esa/safe/shared/preface/example.xsd +sen2cor/cfg/S2-PDGS-TAS-DI-PSD-V13.1_SAFE/resources/docbook/int/esa/safe/shared/preface/glossary.xml +sen2cor/cfg/S2-PDGS-TAS-DI-PSD-V13.1_SAFE/resources/docbook/int/esa/safe/shared/preface/type-reference-conventions.xml +sen2cor/cfg/S2-PDGS-TAS-DI-PSD-V13.1_SAFE/resources/docbook/int/esa/safe/shared/qualification/contentUnit.xml +sen2cor/cfg/S2-PDGS-TAS-DI-PSD-V13.1_SAFE/resources/docbook/int/esa/safe/shared/qualification/xfdu.xml +sen2cor/cfg/S2-PDGS-TAS-DI-PSD-V13.1_SAFE/resources/xql/int/esa/safe/sentinel-1.0/product-id.xql +sen2cor/cfg/S2-PDGS-TAS-DI-PSD-V13.1_SAFE/resources/xql/int/esa/safe/sentinel-1.0/util-module.xql +sen2cor/cfg/S2-PDGS-TAS-DI-PSD-V13.1_SAFE/resources/xsd-component/int/esa/safe/sentinel-1.0/sentinel-2/hktm/level-0/s2-level-0-annot.xsd +sen2cor/cfg/S2-PDGS-TAS-DI-PSD-V13.1_SAFE/resources/xsd-component/int/esa/safe/sentinel-1.0/sentinel-2/hktm/level-0/s2-level-0.xsd +sen2cor/cfg/S2-PDGS-TAS-DI-PSD-V13.1_SAFE/resources/xsd/fr/gael/drb/impl/sdf/sdf-20020222.xsd +sen2cor/cfg/S2-PDGS-TAS-DI-PSD-V13.1_SAFE/resources/xsd/fr/gael/drb/impl/sdf/sdf-2_3.xsd +sen2cor/cfg/S2-PDGS-TAS-DI-PSD-V13.1_SAFE/resources/xsd/int/esa/safe/sentinel/1.1/active-sensor-types.xsd +sen2cor/cfg/S2-PDGS-TAS-DI-PSD-V13.1_SAFE/resources/xsd/int/esa/safe/sentinel/1.1/gml-wrapper.xsd +sen2cor/cfg/S2-PDGS-TAS-DI-PSD-V13.1_SAFE/resources/xsd/int/esa/safe/sentinel/1.1/safe.xsd +sen2cor/cfg/S2-PDGS-TAS-DI-PSD-V13.1_SAFE/resources/xsd/int/esa/safe/sentinel/1.1/xfdu.xsd +sen2cor/cfg/S2-PDGS-TAS-DI-PSD-V13.1_SAFE/resources/xsd/int/esa/safe/sentinel/1.1/sentinel-2/safe-abstract.xsd +sen2cor/cfg/S2-PDGS-TAS-DI-PSD-V13.1_SAFE/resources/xsd/int/esa/safe/sentinel/1.1/sentinel-2/hktm/safe.xsd +sen2cor/cfg/S2-PDGS-TAS-DI-PSD-V13.1_SAFE/resources/xsd/int/esa/safe/sentinel/1.1/sentinel-2/hktm/level-0/hktm-level-0-types.xsd +sen2cor/cfg/S2-PDGS-TAS-DI-PSD-V13.1_SAFE/resources/xsd/int/esa/safe/sentinel/1.1/sentinel-2/hktm/level-0/xfdu.xsd +sen2cor/cfg/S2-PDGS-TAS-DI-PSD-V13.1_SAFE/resources/xsd/int/esa/safe/sentinel/1.1/sentinel-2/level-0/s2-level-0-types.xsd +sen2cor/cfg/S2-PDGS-TAS-DI-PSD-V13.1_SAFE/resources/xsd/int/esa/safe/sentinel/1.1/sentinel-2/msi/archive_l0_datastrip/xfdu.xsd +sen2cor/cfg/S2-PDGS-TAS-DI-PSD-V13.1_SAFE/resources/xsd/int/esa/safe/sentinel/1.1/sentinel-2/msi/archive_l0_granule/xfdu.xsd +sen2cor/cfg/S2-PDGS-TAS-DI-PSD-V13.1_SAFE/resources/xsd/int/esa/safe/sentinel/1.1/sentinel-2/msi/archive_l0_user_product/xfdu.xsd +sen2cor/cfg/S2-PDGS-TAS-DI-PSD-V13.1_SAFE/resources/xsd/int/esa/safe/sentinel/1.1/sentinel-2/msi/archive_l1a_datastrip/xfdu.xsd +sen2cor/cfg/S2-PDGS-TAS-DI-PSD-V13.1_SAFE/resources/xsd/int/esa/safe/sentinel/1.1/sentinel-2/msi/archive_l1a_granule/xfdu.xsd +sen2cor/cfg/S2-PDGS-TAS-DI-PSD-V13.1_SAFE/resources/xsd/int/esa/safe/sentinel/1.1/sentinel-2/msi/archive_l1a_user_product/xfdu.xsd +sen2cor/cfg/S2-PDGS-TAS-DI-PSD-V13.1_SAFE/resources/xsd/int/esa/safe/sentinel/1.1/sentinel-2/msi/archive_l1b_datastrip/xfdu.xsd +sen2cor/cfg/S2-PDGS-TAS-DI-PSD-V13.1_SAFE/resources/xsd/int/esa/safe/sentinel/1.1/sentinel-2/msi/archive_l1b_granule/xfdu.xsd +sen2cor/cfg/S2-PDGS-TAS-DI-PSD-V13.1_SAFE/resources/xsd/int/esa/safe/sentinel/1.1/sentinel-2/msi/archive_l1b_user_product/xfdu.xsd +sen2cor/cfg/S2-PDGS-TAS-DI-PSD-V13.1_SAFE/resources/xsd/int/esa/safe/sentinel/1.1/sentinel-2/msi/archive_l1c_datastrip/xfdu.xsd +sen2cor/cfg/S2-PDGS-TAS-DI-PSD-V13.1_SAFE/resources/xsd/int/esa/safe/sentinel/1.1/sentinel-2/msi/archive_l1c_tile/xfdu.xsd +sen2cor/cfg/S2-PDGS-TAS-DI-PSD-V13.1_SAFE/resources/xsd/int/esa/safe/sentinel/1.1/sentinel-2/msi/archive_l1c_user_product/xfdu.xsd +sen2cor/cfg/S2-PDGS-TAS-DI-PSD-V13.1_SAFE/resources/xsd/int/esa/safe/sentinel/1.1/sentinel-2/msi/archive_l2a_user_product/xfdu.xsd +sen2cor/cfg/S2-PDGS-TAS-DI-PSD-V13.1_SAFE/resources/xsd/net/opengis/gml/3.0.0/base/basicTypes.xsd +sen2cor/cfg/S2-PDGS-TAS-DI-PSD-V13.1_SAFE/resources/xsd/net/opengis/gml/3.0.0/base/coordinateOperations.xsd +sen2cor/cfg/S2-PDGS-TAS-DI-PSD-V13.1_SAFE/resources/xsd/net/opengis/gml/3.0.0/base/coordinateReferenceSystems.xsd +sen2cor/cfg/S2-PDGS-TAS-DI-PSD-V13.1_SAFE/resources/xsd/net/opengis/gml/3.0.0/base/coordinateSystems.xsd +sen2cor/cfg/S2-PDGS-TAS-DI-PSD-V13.1_SAFE/resources/xsd/net/opengis/gml/3.0.0/base/coverage.xsd +sen2cor/cfg/S2-PDGS-TAS-DI-PSD-V13.1_SAFE/resources/xsd/net/opengis/gml/3.0.0/base/dataQuality.xsd +sen2cor/cfg/S2-PDGS-TAS-DI-PSD-V13.1_SAFE/resources/xsd/net/opengis/gml/3.0.0/base/datums.xsd +sen2cor/cfg/S2-PDGS-TAS-DI-PSD-V13.1_SAFE/resources/xsd/net/opengis/gml/3.0.0/base/defaultStyle.xsd +sen2cor/cfg/S2-PDGS-TAS-DI-PSD-V13.1_SAFE/resources/xsd/net/opengis/gml/3.0.0/base/dictionary.xsd +sen2cor/cfg/S2-PDGS-TAS-DI-PSD-V13.1_SAFE/resources/xsd/net/opengis/gml/3.0.0/base/direction.xsd +sen2cor/cfg/S2-PDGS-TAS-DI-PSD-V13.1_SAFE/resources/xsd/net/opengis/gml/3.0.0/base/dynamicFeature.xsd +sen2cor/cfg/S2-PDGS-TAS-DI-PSD-V13.1_SAFE/resources/xsd/net/opengis/gml/3.0.0/base/feature.xsd +sen2cor/cfg/S2-PDGS-TAS-DI-PSD-V13.1_SAFE/resources/xsd/net/opengis/gml/3.0.0/base/geometryAggregates.xsd +sen2cor/cfg/S2-PDGS-TAS-DI-PSD-V13.1_SAFE/resources/xsd/net/opengis/gml/3.0.0/base/geometryBasic0d1d.xsd +sen2cor/cfg/S2-PDGS-TAS-DI-PSD-V13.1_SAFE/resources/xsd/net/opengis/gml/3.0.0/base/geometryBasic2d.xsd +sen2cor/cfg/S2-PDGS-TAS-DI-PSD-V13.1_SAFE/resources/xsd/net/opengis/gml/3.0.0/base/geometryComplexes.xsd +sen2cor/cfg/S2-PDGS-TAS-DI-PSD-V13.1_SAFE/resources/xsd/net/opengis/gml/3.0.0/base/geometryPrimitives.xsd +sen2cor/cfg/S2-PDGS-TAS-DI-PSD-V13.1_SAFE/resources/xsd/net/opengis/gml/3.0.0/base/gml.xsd +sen2cor/cfg/S2-PDGS-TAS-DI-PSD-V13.1_SAFE/resources/xsd/net/opengis/gml/3.0.0/base/gmlBase.xsd +sen2cor/cfg/S2-PDGS-TAS-DI-PSD-V13.1_SAFE/resources/xsd/net/opengis/gml/3.0.0/base/grids.xsd +sen2cor/cfg/S2-PDGS-TAS-DI-PSD-V13.1_SAFE/resources/xsd/net/opengis/gml/3.0.0/base/measures.xsd +sen2cor/cfg/S2-PDGS-TAS-DI-PSD-V13.1_SAFE/resources/xsd/net/opengis/gml/3.0.0/base/observation.xsd +sen2cor/cfg/S2-PDGS-TAS-DI-PSD-V13.1_SAFE/resources/xsd/net/opengis/gml/3.0.0/base/referenceSystems.xsd +sen2cor/cfg/S2-PDGS-TAS-DI-PSD-V13.1_SAFE/resources/xsd/net/opengis/gml/3.0.0/base/temporal.xsd +sen2cor/cfg/S2-PDGS-TAS-DI-PSD-V13.1_SAFE/resources/xsd/net/opengis/gml/3.0.0/base/topology.xsd +sen2cor/cfg/S2-PDGS-TAS-DI-PSD-V13.1_SAFE/resources/xsd/net/opengis/gml/3.0.0/base/units.xsd +sen2cor/cfg/S2-PDGS-TAS-DI-PSD-V13.1_SAFE/resources/xsd/net/opengis/gml/3.0.0/base/valueObjects.xsd +sen2cor/cfg/S2-PDGS-TAS-DI-PSD-V13.1_SAFE/resources/xsd/net/opengis/gml/3.0.0/smil/smil20-language.xsd +sen2cor/cfg/S2-PDGS-TAS-DI-PSD-V13.1_SAFE/resources/xsd/net/opengis/gml/3.0.0/smil/smil20.xsd +sen2cor/cfg/S2-PDGS-TAS-DI-PSD-V13.1_SAFE/resources/xsd/net/opengis/gml/3.0.0/smil/xml-mod.xsd +sen2cor/cfg/S2-PDGS-TAS-DI-PSD-V13.1_SAFE/resources/xsd/net/opengis/gml/3.0.0/xlink/xlinks.xsd +sen2cor/cfg/S2-PDGS-TAS-DI-PSD-V13.1_SAFE/resources/xsd/org/ccsds/xfdu/xfdu-1-4.xsd +sen2cor/cfg/S2-PDGS-TAS-DI-PSD-V13.1_SAFE/resources/xsd/org/ccsds/xfdu/xfdu.xsd +sen2cor/cfg/S2-PDGS-TAS-DI-PSD-V13.1_SAFE/resources/xsd/org/ccsds/xfdu/xlink.xsd +sen2cor/cfg/S2-PDGS-TAS-DI-PSD-V13.1_Schema/.DS_Store +sen2cor/cfg/S2-PDGS-TAS-DI-PSD-V13.1_Schema/Inventory_Metadata.xsd +sen2cor/cfg/S2-PDGS-TAS-DI-PSD-V13.1_Schema/OLQC_Report.xsd +sen2cor/cfg/S2-PDGS-TAS-DI-PSD-V13.1_Schema/Readme.txt +sen2cor/cfg/S2-PDGS-TAS-DI-PSD-V13.1_Schema/S2_PDI_Level-1C_Datastrip_Metadata.xsd +sen2cor/cfg/S2-PDGS-TAS-DI-PSD-V13.1_Schema/S2_PDI_Level-1C_Datastrip_Metadata_Brief.xsd +sen2cor/cfg/S2-PDGS-TAS-DI-PSD-V13.1_Schema/S2_PDI_Level-1C_Datastrip_Metadata_Standard.xsd +sen2cor/cfg/S2-PDGS-TAS-DI-PSD-V13.1_Schema/S2_PDI_Level-1C_Tile_Metadata.xsd +sen2cor/cfg/S2-PDGS-TAS-DI-PSD-V13.1_Schema/S2_PDI_Level-1C_Tile_Metadata_Brief.xsd +sen2cor/cfg/S2-PDGS-TAS-DI-PSD-V13.1_Schema/S2_PDI_Level-1C_Tile_Metadata_Standard.xsd +sen2cor/cfg/S2-PDGS-TAS-DI-PSD-V13.1_Schema/S2_PDI_Level-2A_Datastrip_Metadata.xsd +sen2cor/cfg/S2-PDGS-TAS-DI-PSD-V13.1_Schema/S2_PDI_Level-2A_Datastrip_Structure.xsd +sen2cor/cfg/S2-PDGS-TAS-DI-PSD-V13.1_Schema/S2_PDI_Level-2A_Tile_Metadata.xsd +sen2cor/cfg/S2-PDGS-TAS-DI-PSD-V13.1_Schema/S2_User_Product_Level-1C_Metadata.xsd +sen2cor/cfg/S2-PDGS-TAS-DI-PSD-V13.1_Schema/S2_User_Product_Level-2A_Metadata.xsd +sen2cor/cfg/S2-PDGS-TAS-DI-PSD-V13.1_Schema/DICO/.DS_Store +sen2cor/cfg/S2-PDGS-TAS-DI-PSD-V13.1_Schema/DICO/12/.DS_Store +sen2cor/cfg/S2-PDGS-TAS-DI-PSD-V13.1_Schema/DICO/12/DataAccess/.DS_Store +sen2cor/cfg/S2-PDGS-TAS-DI-PSD-V13.1_Schema/DICO/12/DataAccess/item/item.xsd +sen2cor/cfg/S2-PDGS-TAS-DI-PSD-V13.1_Schema/DICO/12/DataAccess/item/item2A.xsd +sen2cor/cfg/S2-PDGS-TAS-DI-PSD-V13.1_Schema/DICO/12/DataAccess/userProduct/userProduct.xsd +sen2cor/cfg/S2-PDGS-TAS-DI-PSD-V13.1_Schema/DICO/12/PDGS/.DS_Store +sen2cor/cfg/S2-PDGS-TAS-DI-PSD-V13.1_Schema/DICO/12/PDGS/archive/archive.xsd +sen2cor/cfg/S2-PDGS-TAS-DI-PSD-V13.1_Schema/DICO/12/PDGS/base/base.xsd +sen2cor/cfg/S2-PDGS-TAS-DI-PSD-V13.1_Schema/DICO/12/PDGS/center/center.xsd +sen2cor/cfg/S2-PDGS-TAS-DI-PSD-V13.1_Schema/DICO/12/PDGS/component/component.xsd +sen2cor/cfg/S2-PDGS-TAS-DI-PSD-V13.1_Schema/DICO/12/PDGS/configuration/configuration.xsd +sen2cor/cfg/S2-PDGS-TAS-DI-PSD-V13.1_Schema/DICO/12/PDGS/dimap/dimap.xsd +sen2cor/cfg/S2-PDGS-TAS-DI-PSD-V13.1_Schema/DICO/12/PDGS/dimap/dimap2A.xsd +sen2cor/cfg/S2-PDGS-TAS-DI-PSD-V13.1_Schema/DICO/12/PDGS/fileNaming/fileNaming.xsd +sen2cor/cfg/S2-PDGS-TAS-DI-PSD-V13.1_Schema/DICO/12/PDGS/header/EOF_Header.xsd +sen2cor/cfg/S2-PDGS-TAS-DI-PSD-V13.1_Schema/DICO/12/PDGS/logical_definitions/logical_definitions.xsd +sen2cor/cfg/S2-PDGS-TAS-DI-PSD-V13.1_Schema/DICO/12/PDGS/spacecraft/spacecraft.xsd +sen2cor/cfg/S2-PDGS-TAS-DI-PSD-V13.1_Schema/DICO/12/PDGS/station/StationUnavailability.xsd +sen2cor/cfg/S2-PDGS-TAS-DI-PSD-V13.1_Schema/DICO/12/SY/date_time/date_time.xsd +sen2cor/cfg/S2-PDGS-TAS-DI-PSD-V13.1_Schema/DICO/12/SY/geographical/geographical.xsd +sen2cor/cfg/S2-PDGS-TAS-DI-PSD-V13.1_Schema/DICO/12/SY/image/image.xsd +sen2cor/cfg/S2-PDGS-TAS-DI-PSD-V13.1_Schema/DICO/12/SY/misc/misc.xsd +sen2cor/cfg/S2-PDGS-TAS-DI-PSD-V13.1_Schema/DICO/12/SY/orbital/HeaderTypes_Orbit.xsd +sen2cor/cfg/S2-PDGS-TAS-DI-PSD-V13.1_Schema/DICO/12/SY/orbital/orbital.xsd +sen2cor/cfg/S2-PDGS-TAS-DI-PSD-V13.1_Schema/DICO/12/SY/platform/platform.xsd +sen2cor/cfg/S2-PDGS-TAS-DI-PSD-V13.1_Schema/DICO/12/SY/representation/representation.xsd +sen2cor/cfg/S2-PDGS-TAS-DI-PSD-V13.1_Schema/DICO/12/SY/spatio/spatio.xsd +sen2cor/cfg/S2-PDGS-TAS-DI-PSD-V13.1_Schema/DICO/12/SY/tile/tile.xsd +sen2cor/cfg/S2-PDGS-TAS-DI-PSD-V13.1_Schema/DICO/13/.DS_Store +sen2cor/cfg/S2-PDGS-TAS-DI-PSD-V13.1_Schema/DICO/13/DataAccess/.DS_Store +sen2cor/cfg/S2-PDGS-TAS-DI-PSD-V13.1_Schema/DICO/13/DataAccess/item/item.xsd +sen2cor/cfg/S2-PDGS-TAS-DI-PSD-V13.1_Schema/DICO/13/DataAccess/item/item2A.xsd +sen2cor/cfg/S2-PDGS-TAS-DI-PSD-V13.1_Schema/DICO/13/DataAccess/userProduct/userProduct.xsd +sen2cor/cfg/S2-PDGS-TAS-DI-PSD-V13.1_Schema/DICO/13/PDGS/.DS_Store +sen2cor/cfg/S2-PDGS-TAS-DI-PSD-V13.1_Schema/DICO/13/PDGS/archive/archive.xsd +sen2cor/cfg/S2-PDGS-TAS-DI-PSD-V13.1_Schema/DICO/13/PDGS/base/base.xsd +sen2cor/cfg/S2-PDGS-TAS-DI-PSD-V13.1_Schema/DICO/13/PDGS/center/center.xsd +sen2cor/cfg/S2-PDGS-TAS-DI-PSD-V13.1_Schema/DICO/13/PDGS/component/component.xsd +sen2cor/cfg/S2-PDGS-TAS-DI-PSD-V13.1_Schema/DICO/13/PDGS/configuration/configuration.xsd +sen2cor/cfg/S2-PDGS-TAS-DI-PSD-V13.1_Schema/DICO/13/PDGS/dimap/dimap.xsd +sen2cor/cfg/S2-PDGS-TAS-DI-PSD-V13.1_Schema/DICO/13/PDGS/dimap/dimap2A.xsd +sen2cor/cfg/S2-PDGS-TAS-DI-PSD-V13.1_Schema/DICO/13/PDGS/fileNaming/fileNaming.xsd +sen2cor/cfg/S2-PDGS-TAS-DI-PSD-V13.1_Schema/DICO/13/PDGS/header/EOF_Header.xsd +sen2cor/cfg/S2-PDGS-TAS-DI-PSD-V13.1_Schema/DICO/13/PDGS/logical_definitions/logical_definitions.xsd +sen2cor/cfg/S2-PDGS-TAS-DI-PSD-V13.1_Schema/DICO/13/PDGS/spacecraft/spacecraft.xsd +sen2cor/cfg/S2-PDGS-TAS-DI-PSD-V13.1_Schema/DICO/13/PDGS/station/StationUnavailability.xsd +sen2cor/cfg/S2-PDGS-TAS-DI-PSD-V13.1_Schema/DICO/13/SY/date_time/date_time.xsd +sen2cor/cfg/S2-PDGS-TAS-DI-PSD-V13.1_Schema/DICO/13/SY/geographical/geographical.xsd +sen2cor/cfg/S2-PDGS-TAS-DI-PSD-V13.1_Schema/DICO/13/SY/image/image.xsd +sen2cor/cfg/S2-PDGS-TAS-DI-PSD-V13.1_Schema/DICO/13/SY/misc/misc.xsd +sen2cor/cfg/S2-PDGS-TAS-DI-PSD-V13.1_Schema/DICO/13/SY/orbital/HeaderTypes_Orbit.xsd +sen2cor/cfg/S2-PDGS-TAS-DI-PSD-V13.1_Schema/DICO/13/SY/orbital/orbital.xsd +sen2cor/cfg/S2-PDGS-TAS-DI-PSD-V13.1_Schema/DICO/13/SY/platform/platform.xsd +sen2cor/cfg/S2-PDGS-TAS-DI-PSD-V13.1_Schema/DICO/13/SY/representation/representation.xsd +sen2cor/cfg/S2-PDGS-TAS-DI-PSD-V13.1_Schema/DICO/13/SY/spatio/spatio.xsd +sen2cor/cfg/S2-PDGS-TAS-DI-PSD-V13.1_Schema/DICO/13/SY/tile/tile.xsd +sen2cor/cfg/S2-PDGS-TAS-DI-PSD-V13.1_Schema/STRUCTURE/.DS_Store +sen2cor/cfg/S2-PDGS-TAS-DI-PSD-V13.1_Schema/STRUCTURE/S2_PDI_Level-1C_Datastrip_Structure.xsd +sen2cor/cfg/S2-PDGS-TAS-DI-PSD-V13.1_Schema/STRUCTURE/S2_PDI_Level-1C_Tile_Structure.xsd +sen2cor/cfg/S2-PDGS-TAS-DI-PSD-V13.1_Schema/STRUCTURE/S2_PDI_Level-2A_Datastrip_Structure.xsd +sen2cor/cfg/S2-PDGS-TAS-DI-PSD-V13.1_Schema/STRUCTURE/S2_PDI_Level-2A_Tile_Structure.xsd +sen2cor/cfg/S2-PDGS-TAS-DI-PSD-V13.1_Schema/STRUCTURE/S2_User_Product_Level-1C_Structure.xsd +sen2cor/cfg/S2-PDGS-TAS-DI-PSD-V13.1_Schema/STRUCTURE/S2_User_Product_Level-2A_Structure.xsd +sen2cor/lib/.DS_Store sen2cor/lib/GlobalSnowMap.tiff sen2cor/lib/Readme.txt -sen2cor/lib/Thumbs.db sen2cor/lib/__init__.py sen2cor/lib/10/h99000_wv04_rura.atm sen2cor/lib/10/h99000_wv10_rura.atm diff --git a/sen2cor.egg-info/entry_points.txt b/sen2cor.egg-info/entry_points.txt index 621c4d1..17459f7 100644 --- a/sen2cor.egg-info/entry_points.txt +++ b/sen2cor.egg-info/entry_points.txt @@ -1,5 +1,5 @@ [console_scripts] L2A_Process = sen2cor.L2A_Process:main -L2A_Process-02.00.05 = sen2cor.L2A_Process:main -L2A_Process-2.0.5 = sen2cor.L2A_Process:main +L2A_Process-02.01.02 = sen2cor.L2A_Process:main +L2A_Process-2.1.2 = sen2cor.L2A_Process:main diff --git a/sen2cor/L2A_Borg.py b/sen2cor/L2A_Borg.py deleted file mode 100755 index 843ce23..0000000 --- a/sen2cor/L2A_Borg.py +++ /dev/null @@ -1,12 +0,0 @@ -''' -Created on Feb 22, 2012 -The Borg Pattern for sharing states -@author: umuellerwilm -''' -class Borg(object): - _shared = {} - def __new__(cls, *p, **k): - inst = object.__new__(cls) - inst.__dict__ = cls._shared - return inst - diff --git a/sen2cor/L2A_Config.py b/sen2cor/L2A_Config.py old mode 100755 new mode 100644 index 9f9974e..4ae3f84 --- a/sen2cor/L2A_Config.py +++ b/sen2cor/L2A_Config.py @@ -2,44 +2,71 @@ from numpy import * import fnmatch -import sys, os -import logging +import sys, os, logging, inspect import ConfigParser from L2A_XmlParser import L2A_XmlParser from L2A_Library import stdoutWrite, stderrWrite from lxml import etree, objectify from time import strftime -from datetime import datetime, date -from distutils.dir_util import mkpath, copy_tree -from distutils.file_util import copy_file -from L2A_Borg import Borg +from datetime import datetime +from multiprocessing import Lock +from shutil import copyfile, copytree +from psutil import cpu_count +l = Lock() -class L2A_Config(Borg): - _shared = {} - def __init__(self, sourceDir = False): +def getScriptDir(follow_symlinks=True): + if getattr(sys, 'frozen', False): # py2exe, PyInstaller, cx_Freeze + path = os.path.abspath(sys.executable) + else: + path = inspect.getabsfile(getScriptDir) + if follow_symlinks: + path = os.path.realpath(path) + return os.path.dirname(path) + + +class L2A_Config(object): + + def __init__(self, logger, sourceDir = False): self._processorName = 'Sentinel-2 Level 2A Prototype Processor (Sen2Cor)' - self._processorVersion = '2.0.6' - self._processorDate = '2015.12.02' - self._productVersion = '13' + self._processorVersion = '2.1.2' + self._processorDate = '2016.02.26' + self._productVersion = '13.1' + self._logger = logger + self._logLevel = 'INFO' + self._sc_lp_blu = 1.0 + self._tEstimation = 0.0 if(sourceDir): - self._home = os.environ['SEN2COR_HOME'] + '/' - moduleDir = os.environ['SEN2COR_BIN'] + '/' + try: + self._home = os.environ['SEN2COR_HOME'] + except: + self._home = os.path.dirname(getScriptDir()) + try: + scriptDir = os.environ['SEN2COR_BIN'] + except: + scriptDir = getScriptDir() + self._sourceDir = sourceDir - self._configDir = moduleDir + 'cfg/' - self._logDir = self._home + 'log/' - self._configFn = self._home + 'cfg/L2A_GIPP.xml' + self._configDir = os.path.join(scriptDir, 'cfg') + self._logDir = os.path.join(self._home, 'log') + self._configFn = os.path.join(self._home, 'cfg', 'L2A_GIPP.xml') + self.configSC = os.path.join(self._configDir, 'L2A_CAL_SC_GIPP.xml') + self.configAC = os.path.join(self._configDir, 'L2A_CAL_AC_GIPP.xml') + self._calibrationFn = '' self._solarIrradianceFn = '' self._atmDataFn = '' self._elevationMapFn = '' - self._tEstimation = 0.0 - self._tEst60 = 100.0 - self._tEst20 = 500.0 - self._tEst10 = 1500.0 - self._processingStatusFn = self._logDir + '.progress' - self._processingEstimationFn = self._configDir + '.estimation' + self._tEst60 = 150.0 + self._tEst20 = self._tEst60 * 8.0 + self._tEst10 = self._tEst60 * 8.0 + self._tStart = None + self._nrTiles = None + self._nrProcs = None + self._processingStatusFn = os.path.join(self._logDir, '.progress') + self._processingEstimationFn = os.path.join(self._configDir, '.estimation') + if os.path.isfile(self._processingEstimationFn) == False: # init processing estimation file: config = ConfigParser.RawConfigParser() @@ -47,13 +74,12 @@ def __init__(self, sourceDir = False): config.set('time estimation','t_est_60', self._tEst60) config.set('time estimation','t_est_20', self._tEst20) config.set('time estimation','t_est_10', self._tEst10) - with open(self._processingEstimationFn, 'a') as configFile: - config.write(configFile) - + configFile = open(self._processingEstimationFn, 'w') + config.write(configFile) + configFile.close() self._ncols = -1 self._nrows = -1 self._nbnds = -1 - self._tTotal = 0.0 self._sza = -1 self._saa = -1 self._GIPP = '' @@ -118,9 +144,8 @@ def __init__(self, sourceDir = False): self._wl1400a = array([1.330, 1.490]) # range for interpolation self._wl1900a = array([1.780, 1.970]) # range for interpolation self._wv_thr_cirrus = 0.60 - self._sc_lp_blu = 1.0 self._d2 = 1.0 # this is a constant, see explanation in line 2061 - self._timestamp = datetime.now() + self._timestamp = None self._c0 = None self._c1 = None self._e0 = None @@ -137,53 +162,880 @@ def __init__(self, sourceDir = False): self._L1C_TILE_ID = None self._L2A_UP_MTD_XML = None self._L2A_DS_MTD_XML = None + self._L2A_DS_MTD_LST = [] self._L2A_TILE_MTD_XML = None self._L2A_UP_ID = None + self._L2A_DS_LST = [] self._L2A_DS_ID = None self._L2A_TILE_ID = None - self._tracer = None - self._logger = None - self._fnTrace = None - self._fnLog = None self._creationDate = None self._targetDirectory = None + self._scOnly = False + self._workDir = None + self._processed60 = False + self._processed20 = False + self._processed10 = False + self._refresh = False + self._selectedTile = None return + def get_processing_status_fn(self): + return self._processingStatusFn + + + def get_processing_estimation_fn(self): + return self._processingEstimationFn + + + def set_processing_status_fn(self, value): + self._processingStatusFn = value + + + def set_processing_estimation_fn(self, value): + self._processingEstimationFn = value + + + def del_processing_status_fn(self): + del self._processingStatusFn + + + def del_processing_estimation_fn(self): + del self._processingEstimationFn + + + + def get_nr_tiles(self): + if self.selectedTile != None: + self._nrTiles = 1 + return self._nrTiles + # else: + self._nrTiles = 0 + filemask = 'S2A_*_L1C_*' + GRANULE = 'GRANULE' + granuleDir = os.path.join(self.workDir, GRANULE) + filelist = sorted(os.listdir(granuleDir)) + for tile in filelist: + if fnmatch.fnmatch(tile, filemask) == False: + continue + self._nrTiles += 1 + return self._nrTiles + + + def get_nr_procs(self): + nrProcs = self._nrProcs + if nrProcs == 'AUTO': + self._nrProcs = cpu_count() + else: + self._nrProcs = int(nrProcs) + return self._nrProcs + + + def set_nr_tiles(self, value): + self._nrTiles = value + + + def set_nr_procs(self, value): + self._nrProcs = value + + + def del_nr_tiles(self): + del self._nrTiles + + + def del_nr_procs(self): + del self._nrProcs + + + def get_t_start(self): + return self._tStart + + + def set_t_start(self, value): + self._tStart = value + + + def del_t_start(self): + del self._tStart + + + def get_t_estimation(self): + return self._tEstimation + + + def set_t_estimation(self, value): + self._tEstimation = value + + + def del_t_estimation(self): + del self._tEstimation + + + def get_selected_tile(self): + return self._selectedTile + + + def set_selected_tile(self, value): + self._selectedTile = value + + + def del_selected_tile(self): + del self._selectedTile + + + def get_log_level(self): + return self._logLevel + + + def set_log_level(self, value): + self._logLevel = value + + + def del_log_level(self): + del self._logLevel + + + def get_target_directory(self): + return self._targetDirectory + + + def set_target_directory(self, value): + self._targetDirectory = value + + + def del_target_directory(self): + del self._targetDirectory + + + def get_logger(self): + return self._logger + + + def set_logger(self, value): + self._logger = value + + + def del_logger(self): + del self._logger + + def get_sc_lp_blu(self): return self._sc_lp_blu def set_sc_lp_blu(self, value): self._sc_lp_blu = value - self.setLpBlueScale() - + def del_sc_lp_blu(self): del self._sc_lp_blu - def get_t_total(self): - return self._tTotal + def get_refresh(self): + return self._refresh + + + def set_refresh(self, value): + self._refresh = value + + + def del_refresh(self): + del self._refresh + + + def get_processed_60(self): + return self._processed60 + + + def get_processed_20(self): + return self._processed20 + + + def get_processed_10(self): + return self._processed10 + + + def set_processed_60(self, value): + self._processed60 = value + + + def set_processed_20(self, value): + self._processed20 = value + + + def set_processed_10(self, value): + self._processed10 = value + + + def del_processed_60(self): + del self._processed60 + + + def del_processed_20(self): + del self._processed20 + + + def del_processed_10(self): + del self._processed10 + + + def get_work_dir(self): + return self._workDir + + + def set_work_dir(self, value): + self._workDir = value + + + def del_work_dir(self): + del self._workDir + + + def get_sc_only(self): + return self._scOnly + + + def set_sc_only(self, value): + self._scOnly = value + + + def del_sc_only(self): + del self._scOnly + + + def get_config_sc(self): + return self._configSC + + + def get_config_ac(self): + return self._configAC + + + def set_config_sc(self, value): + self._configSC = value + + + def set_config_ac(self, value): + self._configAC = value + + + def del_config_sc(self): + del self._configSC + + + def del_config_ac(self): + del self._configAC + + + def get_dem_directory(self): + return self._demDirectory + + + def get_dem_reference(self): + return self._demReference + + + def get_snow_map_reference(self): + return self._snowMapReference + + + def set_dem_directory(self, value): + self._demDirectory = value + + + def set_dem_reference(self, value): + self._demReference = value + + + def set_snow_map_reference(self, value): + self._snowMapReference = value + + + def del_dem_directory(self): + del self._demDirectory + + + def del_dem_reference(self): + del self._demReference + + + def del_snow_map_reference(self): + del self._snowMapReference + + + def get_median_filter(self): + return self._medianFilter + + + def set_median_filter(self, value): + self._medianFilter = value + + + def del_median_filter(self): + del self._medianFilter + + + def get_t_sdw(self): + return self._T_SDW + + + def get_t_b_02_b_12(self): + return self._T_B02_B12 + + + def set_t_sdw(self, value): + self._T_SDW = value + + + def set_t_b_02_b_12(self, value): + self._T_B02_B12 = value + + + def del_t_sdw(self): + del self._T_SDW + + + def del_t_b_02_b_12(self): + del self._T_B02_B12 + + + def get_no_data(self): + return self._noData + + + def get_saturated_defective(self): + return self._saturatedDefective + + + def get_dark_features(self): + return self._darkFeatures + + + def get_cloud_shadows(self): + return self._cloudShadows + + + def get_vegetation(self): + return self._vegetation + + + def get_bare_soils(self): + return self._bareSoils + + + def get_water(self): + return self._water + + + def get_low_proba_clouds(self): + return self._lowProbaClouds + + + def get_med_proba_clouds(self): + return self._medProbaClouds + + + def get_high_proba_clouds(self): + return self._highProbaClouds + + + def get_thin_cirrus(self): + return self._thinCirrus + + + def get_snow_ice(self): + return self._snowIce + + + def set_no_data(self, value): + self._noData = value + + + def set_saturated_defective(self, value): + self._saturatedDefective = value + + + def set_dark_features(self, value): + self._darkFeatures = value + + + def set_cloud_shadows(self, value): + self._cloudShadows = value + + + def set_vegetation(self, value): + self._vegetation = value + + + def set_bare_soils(self, value): + self._bareSoils = value + + + def set_water(self, value): + self._water = value + + + def set_low_proba_clouds(self, value): + self._lowProbaClouds = value + + + def set_med_proba_clouds(self, value): + self._medProbaClouds = value + + + def set_high_proba_clouds(self, value): + self._highProbaClouds = value + + + def set_thin_cirrus(self, value): + self._thinCirrus = value + + + def set_snow_ice(self, value): + self._snowIce = value + + + def del_no_data(self): + del self._noData + + + def del_saturated_defective(self): + del self._saturatedDefective + + + def del_dark_features(self): + del self._darkFeatures + + + def del_cloud_shadows(self): + del self._cloudShadows + + + def del_vegetation(self): + del self._vegetation + + + def del_bare_soils(self): + del self._bareSoils + + + def del_water(self): + del self._water + + + def del_low_proba_clouds(self): + del self._lowProbaClouds + + + def del_med_proba_clouds(self): + del self._medProbaClouds + + + def del_high_proba_clouds(self): + del self._highProbaClouds + + + def del_thin_cirrus(self): + del self._thinCirrus + + + def del_snow_ice(self): + del self._snowIce + + + def get_t_21_b_12(self): + return self._T21_B12 + + + def get_t_22_b_12(self): + return self._T22_B12 + + + def get_t_21_r_b_02_b_11(self): + return self._T21_R_B02_B11 + + + def get_t_22_r_b_02_b_11(self): + return self._T22_R_B02_B11 + + + def set_t_21_b_12(self, value): + self._T21_B12 = value + + + def set_t_22_b_12(self, value): + self._T22_B12 = value + + + def set_t_21_r_b_02_b_11(self, value): + self._T21_R_B02_B11 = value + + + def set_t_22_r_b_02_b_11(self, value): + self._T22_R_B02_B11 = value + + + def del_t_21_b_12(self): + del self._T21_B12 + + + def del_t_22_b_12(self): + del self._T22_B12 + + + def del_t_21_r_b_02_b_11(self): + del self._T21_R_B02_B11 + + + def del_t_22_r_b_02_b_11(self): + del self._T22_R_B02_B11 + + + def get_t_11_b_02(self): + return self._T11_B02 + + + def get_t_12_b_02(self): + return self._T12_B02 - def set_t_total(self, value): - self._tTotal = value + def get_t_11_r_b_02_b_11(self): + return self._T11_R_B02_B11 - def del_t_total(self): - del self._tTotal + def get_t_12_r_b_02_b_11(self): + return self._T12_R_B02_B11 + + + def set_t_11_b_02(self, value): + self._T11_B02 = value + + + def set_t_12_b_02(self, value): + self._T12_B02 = value + + + def set_t_11_r_b_02_b_11(self, value): + self._T11_R_B02_B11 = value + + + def set_t_12_r_b_02_b_11(self, value): + self._T12_R_B02_B11 = value + + + def del_t_11_b_02(self): + del self._T11_B02 + + + def del_t_12_b_02(self): + del self._T12_B02 + + + def del_t_11_r_b_02_b_11(self): + del self._T11_R_B02_B11 + + + def del_t_12_r_b_02_b_11(self): + del self._T12_R_B02_B11 + + + def get_t_1_ndvi(self): + return self._T1_NDVI + + + def get_t_2_ndvi(self): + return self._T2_NDVI + + + def set_t_1_ndvi(self, value): + self._T1_NDVI = value + + + def set_t_2_ndvi(self, value): + self._T2_NDVI = value + + + def del_t_1_ndvi(self): + del self._T1_NDVI + + + def del_t_2_ndvi(self): + del self._T2_NDVI + + + def get_t_1_snow(self): + return self._T1_SNOW + + + def get_t_2_snow(self): + return self._T2_SNOW + + + def set_t_1_snow(self, value): + self._T1_SNOW = value + + + def set_t_2_snow(self, value): + self._T2_SNOW = value + + + def del_t_1_snow(self): + del self._T1_SNOW + + + def del_t_2_snow(self): + del self._T2_SNOW + + + def get_t_1_r_b_02_b_04(self): + return self._T1_R_B02_B04 + + + def get_t_2_r_b_02_b_04(self): + return self._T2_R_B02_B04 + + + def get_t_1_r_b_8_a_b_03(self): + return self._T1_R_B8A_B03 + + + def get_t_2_r_b_8_a_b_03(self): + return self._T2_R_B8A_B03 + + + def get_t_1_r_b_8_a_b_11(self): + return self._T1_R_B8A_B11 + + + def get_t_2_r_b_8_a_b_11(self): + return self._T2_R_B8A_B11 + + + def set_t_1_r_b_02_b_04(self, value): + self._T1_R_B02_B04 = value + + + def set_t_2_r_b_02_b_04(self, value): + self._T2_R_B02_B04 = value + + + def set_t_1_r_b_8_a_b_03(self, value): + self._T1_R_B8A_B03 = value + + + def set_t_2_r_b_8_a_b_03(self, value): + self._T2_R_B8A_B03 = value + + + def set_t_1_r_b_8_a_b_11(self, value): + self._T1_R_B8A_B11 = value + + + def set_t_2_r_b_8_a_b_11(self, value): + self._T2_R_B8A_B11 = value + + + def del_t_1_r_b_02_b_04(self): + del self._T1_R_B02_B04 + + + def del_t_2_r_b_02_b_04(self): + del self._T2_R_B02_B04 + + + def del_t_1_r_b_8_a_b_03(self): + del self._T1_R_B8A_B03 + + + def del_t_2_r_b_8_a_b_03(self): + del self._T2_R_B8A_B03 + + + def del_t_1_r_b_8_a_b_11(self): + del self._T1_R_B8A_B11 + + + def del_t_2_r_b_8_a_b_11(self): + del self._T2_R_B8A_B11 + + + def get_t_1_b_02(self): + return self._T1_B02 + + + def get_t_2_b_02(self): + return self._T2_B02 + + + def get_t_1_b_8_a(self): + return self._T1_B8A + + + def get_t_2_b_8_a(self): + return self._T2_B8A + + + def get_t_1_b_10(self): + return self._T1_B10 + + + def get_t_2_b_10(self): + return self._T2_B10 + + + def get_t_1_b_12(self): + return self._T1_B12 + + + def get_t_2_b_12(self): + return self._T2_B12 + + + def set_t_1_b_02(self, value): + self._T1_B02 = value + + + def set_t_2_b_02(self, value): + self._T2_B02 = value + + + def set_t_1_b_8_a(self, value): + self._T1_B8A = value + + + def set_t_2_b_8_a(self, value): + self._T2_B8A = value + + + def set_t_1_b_10(self, value): + self._T1_B10 = value + + + def set_t_2_b_10(self, value): + self._T2_B10 = value + + + def set_t_1_b_12(self, value): + self._T1_B12 = value + + + def set_t_2_b_12(self, value): + self._T2_B12 = value + + + def del_t_1_b_02(self): + del self._T1_B02 + + + def del_t_2_b_02(self): + del self._T2_B02 + + + def del_t_1_b_8_a(self): + del self._T1_B8A + + + def del_t_2_b_8_a(self): + del self._T2_B8A + + + def del_t_1_b_10(self): + del self._T1_B10 + + + def del_t_2_b_10(self): + del self._T2_B10 + + + def del_t_1_b_12(self): + del self._T1_B12 + + + def del_t_2_b_12(self): + del self._T2_B12 + + + def get_t_1_ndsi_snw(self): + return self._T1_NDSI_SNW + + + def get_t_2_ndsi_snw(self): + return self._T2_NDSI_SNW + + + def set_t_1_ndsi_snw(self, value): + self._T1_NDSI_SNW = value + + + def set_t_2_ndsi_snw(self, value): + self._T2_NDSI_SNW = value + + + def del_t_1_ndsi_snw(self): + del self._T1_NDSI_SNW + + + def del_t_2_ndsi_snw(self): + del self._T2_NDSI_SNW + + + def get_t_1_ndsi_cld(self): + return self._T1_NDSI_CLD + + + def get_t_2_ndsi_cld(self): + return self._T2_NDSI_CLD + + + def set_t_1_ndsi_cld(self, value): + self._T1_NDSI_CLD = value + + + def set_t_2_ndsi_cld(self, value): + self._T2_NDSI_CLD = value + + + def del_t_1_ndsi_cld(self): + del self._T1_NDSI_CLD + + + def del_t_2_ndsi_cld(self): + del self._T2_NDSI_CLD + + + def get_t_1_b_04(self): + return self._T1_B04 + + + def get_t_2_b_04(self): + return self._T2_B04 + + + def set_t_1_b_04(self, value): + self._T1_B04 = value + + + def set_t_2_b_04(self, value): + self._T2_B04 = value + + + def del_t_1_b_04(self): + del self._T1_B04 + + + def del_t_2_b_04(self): + del self._T2_B04 def get_l_2_a_wvp_quantification_value(self): - return self.__L2A_WVP_QUANTIFICATION_VALUE + return self._L2A_WVP_QUANTIFICATION_VALUE def set_l_2_a_wvp_quantification_value(self, value): - self.__L2A_WVP_QUANTIFICATION_VALUE = value + self._L2A_WVP_QUANTIFICATION_VALUE = value def del_l_2_a_wvp_quantification_value(self): - del self.__L2A_WVP_QUANTIFICATION_VALUE + del self._L2A_WVP_QUANTIFICATION_VALUE def get_product_version(self): @@ -355,10 +1207,6 @@ def del_l2a_up_id(self): del self._L2A_UP_ID - def get_l2a_ds_id(self): - return self._L2A_DS_ID - - def get_l2a_tile_id(self): return self._L2A_TILE_ID @@ -379,10 +1227,6 @@ def get_l2a_up_mtd_xml(self): return self._L2A_UP_MTD_XML - def get_l2a_ds_mtd_xml(self): - return self._L2A_DS_MTD_XML - - def get_l2a_tile_mtd_xml(self): return self._L2A_TILE_MTD_XML @@ -391,10 +1235,6 @@ def set_l1c_tile_mtd_xml(self, value): self._L1C_TILE_MTD_XML = value - def set_l2a_ds_id(self, value): - self._L2A_DS_ID = value - - def set_l2a_tile_id(self, value): self._L2A_TILE_ID = value @@ -411,10 +1251,6 @@ def set_l2a_up_mtd_xml(self, value): self._L2A_UP_MTD_XML = value - def set_l2a_ds_mtd_xml(self, value): - self._L2A_DS_MTD_XML = value - - def set_l2a_tile_mtd_xml(self, value): self._L2A_TILE_MTD_XML = value @@ -739,8 +1575,8 @@ def del_ecmwf(self): del self._ECMWF - def __exit__(self): - sys.exit(-1) +# def __exit__(self): +# sys.exit(-1) def get_output_fn(self): @@ -748,7 +1584,7 @@ def get_output_fn(self): def set_output_fn(self, value): - self._outputFn = self._dataDir + value + self._outputFn = os.path.join(self._dataDir, value) def del_output_fn(self): @@ -772,7 +1608,7 @@ def get_shadow_map_fn(self): def set_shadow_map_fn(self, value): - self._shadowMapFn = self._dataDir + value + self._shadowMapFn = os.path.join(self._dataDir, value) def del_shadow_map_fn(self): @@ -887,14 +1723,6 @@ def get_water_vapor_fn(self): return self._waterVaporFn - def get_tracer(self): - return self._tracer - - - def get_logger(self): - return self._logger - - def get_adj_km(self): return self._adj_km @@ -915,7 +1743,6 @@ def get_cloud_refl_thr_blu(self): return self._cloud_refl_thr_blu - def get_dem_unit(self): return self._dem_unit @@ -1113,37 +1940,37 @@ def set_source_dir(self, value): def set_data_dir(self, value): - self._dataDir = value + '/' + self._dataDir = value def set_config_dir(self, value): - self._configDir = value + '/' + self._configDir = value def set_bin_dir(self, value): - self._binDir = value + '/' + self._binDir = value def set_lib_dir(self, value): - self._libDir = value + '/' + self._libDir = value def set_log_dir(self, value): - self._logDir = value + '/' + self._logDir = value def set_config_fn(self, value): - self._configFn = value + self._configFn = value def set_input_fn(self, value): - self._inputFn = self._dataDir + value + self._inputFn = os.path.join(self._dataDir, value) def set_aot_fn(self, value): - self._aotFn = self._dataDir + value + self._aotFn = os.path.join(self._dataDir, value) def set_aspect_fn(self, value): - self._aspectFn = self._dataDir + value + self._aspectFn = os.path.join(self._dataDir, value) def set_atm_data_fn(self, value): @@ -1155,55 +1982,47 @@ def set_calibr_fn(self, value): def set_class_map_fn(self, value): - self._classMapFn = self._dataDir + value + self._classMapFn = os.path.join(self._dataDir, value) def set_cloud_qi_map_fn(self, value): - self._cloudQiMapFn = self._dataDir + value + self._cloudQiMapFn = os.path.join(self._dataDir, value) def set_ddv_fn(self, value): - self._ddvFn = self._dataDir + value + self._ddvFn = os.path.join(self._dataDir, value) def set_elevation_map_fn(self, value): - self._elevationMapFn = self._dataDir + value + self._elevationMapFn = os.path.join(self._dataDir, value) def set_hcw_fn(self, value): - self._hcwFn = self._dataDir + value + self._hcwFn = os.path.join(self._dataDir, value) def set_ilumination_fn(self, value): - self._iluminationFn = self._dataDir + value + self._iluminationFn = os.path.join(self._dataDir, value) def set_sky_view_fn(self, value): - self._skyViewFn = self._dataDir + value + self._skyViewFn = os.path.join(self._dataDir, value) def set_slope_fn(self, value): - self._slopeFn = self._dataDir + value + self._slopeFn = os.path.join(self._dataDir, value) def set_snow_qi_map_fn(self, value): - self._snowQiMapFn = self._dataDir + value + self._snowQiMapFn = os.path.join(self._dataDir, value) def set_vis_index_fn(self, value): - self._visIndexFn = self._dataDir + value + self._visIndexFn = os.path.join(self._dataDir, value) def set_water_vapor_fn(self, value): - self._waterVaporFn = self._dataDir + value - - - def set_tracer(self, value): - self._tracer = value - - - def set_logger(self, value): - self._logger = value + self._waterVaporFn = os.path.join(self._dataDir, value) def set_adj_km(self, value): @@ -1524,14 +2343,6 @@ def del_water_vapor_fn(self): del self._waterVaporFn - def del_tracer(self): - del self._tracer - - - def del_logger(self): - del self._logger - - def del_adj_km(self): del self._adj_km @@ -1752,6 +2563,40 @@ def del_wv_thr_cirrus(self): del self._wv_thr_cirrus + def set_l2a_ds_id(self, value): + self._L2A_DS_ID = value + if value in self._L2A_DS_LST: + return + self._L2A_DS_LST.append(value) + + + def get_l2a_ds_id(self): + try: + tileId = self._L2A_TILE_ID[25:40] + for ref in self._L2A_DS_LST: + if tileId in ref: + return ref + except: + return self._L2A_DS_ID + + + def set_l2a_ds_mtd_xml(self, value): + self._L2A_DS_MTD_XML = value + if value in self._L2A_DS_MTD_LST: + return + self._L2A_DS_MTD_LST.append(value) + + + def get_l2a_ds_mtd_xml(self): + try: + tileId = self._L2A_TILE_ID[25:40] + for ref in self._L2A_DS_MTD_LST: + if tileId in ref: + return ref + except: + return self._L2A_DS_MTD_XML + + # Properties: processorName = property(get_processor_name, set_processor_name, del_processor_name, "processorName's docstring") processorVersion = property(get_processor_version, set_processor_version, del_processor_version, "processorVersion's docstring") @@ -1764,13 +2609,13 @@ def del_wv_thr_cirrus(self): libDir = property(get_lib_dir, set_lib_dir, del_lib_dir, "libDir's docstring") logDir = property(get_log_dir, set_log_dir, del_log_dir, "logDir's docstring") configFn = property(get_config_fn, set_config_fn, del_config_fn, "configFn's docstring") + configSC = property(get_config_sc, set_config_sc, del_config_sc, "configSC's docstring") + configAC = property(get_config_ac, set_config_ac, del_config_ac, "configAC's docstring") atmDataFn = property(get_atm_data_fn, set_atm_data_fn, del_atm_data_fn, "atmDataFn's docstring") calibrationFn = property(get_calibr_fn, set_calibr_fn, del_calibr_fn, "calibrationFn's docstring") sensorFn = property(get_sensor_fn, set_sensor_fn, del_sensor_fn, "sensorFn's docstring") solarIrradianceFn = property(get_solar_irradiance_fn, set_solar_irradiance_fn, del_solar_irradiance_fn, "solarIrradianceFn's docstring") elevationMapFn = property(get_elevation_map_fn, set_elevation_map_fn, del_elevation_map_fn, "elevationMapFn's docstring") - tracer = property(get_tracer, set_tracer, del_tracer, "tracer's docstring") - logger = property(get_logger, set_logger, del_logger, "logger's docstring") adj_km = property(get_adj_km, set_adj_km, del_adj_km, "adj_km's docstring") beta_thr = property(get_beta_thr, set_beta_thr, del_beta_thr, "beta_thr's docstring") ch940 = property(get_ch_940, set_ch_940, del_ch_940, "ch940's docstring") @@ -1798,7 +2643,6 @@ def del_wv_thr_cirrus(self): altit = property(get_altit, set_altit, del_altit, "altit's docstring") npref = property(get_npref, set_npref, del_npref, "npref's docstring") phi_scl_min = property(get_phi_scl_min, set_phi_scl_min, del_phi_scl_min, "phi_scl_min's docstring") - sc_lp_blu = property(get_sc_lp_blu, set_sc_lp_blu, del_sc_lp_blu, "sc_lp_blu's docstring") phi_unscl_max = property(get_phi_unscl_max, set_phi_unscl_max, del_phi_unscl_max, "phi_unscl_max's docstring") pixelsize = property(get_pixelsize, set_pixelsize, del_pixelsize, "pixelsize's docstring") resolution = property(get_resolution, set_resolution, del_resolution, "resolution's docstring") @@ -1867,91 +2711,86 @@ def del_wv_thr_cirrus(self): L2A_AOT_QUANTIFICATION_VALUE = property(get_l2a_aot_quantification_value, set_l2a_aot_quantification_value, del_l2a_aot_quantification_value, "L2A_AOT_QUANTIFICATION_VALUE's docstring") creationDate = property(get_creation_date, set_creation_date, del_creation_date, "creationDate's docstring") productVersion = property(get_product_version, set_product_version, del_product_version, "productVersion's docstring") - tTotal = property(get_t_total, set_t_total, del_t_total, "tTotal's docstring") - - def set_traceLevel(self, level): - self.tracer.info('Log level will be updated to: %s', level) - if (level == 'DEBUG'): - self.tracer.setLevel(logging.DEBUG) - elif (level == 'INFO'): - self.tracer.setLevel(logging.INFO) - elif (level == 'WARNING'): - self.tracer.setLevel(logging.WARNING) - elif (level == 'ERROR'): - self.tracer.setLevel(logging.ERROR) - elif (level == 'CRITICAL'): - self.tracer.setLevel(logging.CRITICAL) - else: - self.tracer.setLevel(logging.NOTSET) - - - def get_traceLevel(self): - if(self.tracer.getEffectiveLevel() == logging.DEBUG): - return 'DEBUG' - elif(self.tracer.getEffectiveLevel() == logging.INFO): - return 'INFO' - elif(self.tracer.getEffectiveLevel() == logging.WARNING): - return 'WARNING' - elif(self.tracer.getEffectiveLevel() == logging.ERROR): - return 'ERROR' - elif(self.tracer.getEffectiveLevel() == logging.CRITICAL): - return 'CRITICAL' - else: - return 'NOTSET' - - - traceLevel = property(get_traceLevel, set_traceLevel) - - def initLogAndTrace(self): - dt = datetime.now() - self.creationDate = strftime('%Y%m%dT%H%M%S', dt.timetuple()) - logname = 'L2A_' + self.creationDate - self._tracer = logging.Logger(logname) - self._logger = logging.Logger(logname) - logdir = os.environ['SEN2COR_HOME'] + '/log' - if not os.path.exists(logdir): - os.mkdir(logdir) - self._fnTrace = self._logDir + logname + '_trace.xml' - f = open(self._fnTrace, 'w') - f.write('\n') - f.write('\n') - f.close() - self._fnLog = self._logDir + logname + '_report.xml' - f = open(self._fnLog, 'w') - f.write('\n') - f.write('\n') - f.close() - tHandler = logging.FileHandler(self._fnTrace) - lHandler = logging.FileHandler(self._fnLog) - tFormatter = logging.Formatter('\n\n%(message)s\n') - lFormatter = logging.Formatter('\n\n%(message)s\n') - tHandler.setFormatter(tFormatter) - lHandler.setFormatter(lFormatter) - self._tracer.addHandler(tHandler) - self._logger.addHandler(lHandler) - self._tracer.level = logging.INFO - self._logger.level = logging.INFO - self._tracer.info('Application started') - self._tracer.info('Tracing system initialized with level: INFO') - self._tracer.info('Application initialized with root level %s', self._home) - self._logger.info('Report file opened for results') - self._tracer.debug('Module L2A_Config initialized') - return - - - def createL2A_UserProduct(self): +# tTotal = property(get_t_total, set_t_total, del_t_total, "tTotal's docstring") + T1_B04 = property(get_t_1_b_04, set_t_1_b_04, del_t_1_b_04, "T1_B04's docstring") + T2_B04 = property(get_t_2_b_04, set_t_2_b_04, del_t_2_b_04, "T2_B04's docstring") + T1_NDSI_CLD = property(get_t_1_ndsi_cld, set_t_1_ndsi_cld, del_t_1_ndsi_cld, "T1_NDSI_CLD's docstring") + T2_NDSI_CLD = property(get_t_2_ndsi_cld, set_t_2_ndsi_cld, del_t_2_ndsi_cld, "T2_NDSI_CLD's docstring") + T1_NDSI_SNW = property(get_t_1_ndsi_snw, set_t_1_ndsi_snw, del_t_1_ndsi_snw, "T1_NDSI_SNW's docstring") + T2_NDSI_SNW = property(get_t_2_ndsi_snw, set_t_2_ndsi_snw, del_t_2_ndsi_snw, "T2_NDSI_SNW's docstring") + T1_B02 = property(get_t_1_b_02, set_t_1_b_02, del_t_1_b_02, "T1_B02's docstring") + T2_B02 = property(get_t_2_b_02, set_t_2_b_02, del_t_2_b_02, "T2_B02's docstring") + T1_B8A = property(get_t_1_b_8_a, set_t_1_b_8_a, del_t_1_b_8_a, "T1_B8A's docstring") + T2_B8A = property(get_t_2_b_8_a, set_t_2_b_8_a, del_t_2_b_8_a, "T2_B8A's docstring") + T1_B10 = property(get_t_1_b_10, set_t_1_b_10, del_t_1_b_10, "T1_B10's docstring") + T2_B10 = property(get_t_2_b_10, set_t_2_b_10, del_t_2_b_10, "T2_B10's docstring") + T1_B12 = property(get_t_1_b_12, set_t_1_b_12, del_t_1_b_12, "T1_B12's docstring") + T2_B12 = property(get_t_2_b_12, set_t_2_b_12, del_t_2_b_12, "T2_B12's docstring") + T1_R_B02_B04 = property(get_t_1_r_b_02_b_04, set_t_1_r_b_02_b_04, del_t_1_r_b_02_b_04, "T1_R_B02_B04's docstring") + T2_R_B02_B04 = property(get_t_2_r_b_02_b_04, set_t_2_r_b_02_b_04, del_t_2_r_b_02_b_04, "T2_R_B02_B04's docstring") + T1_R_B8A_B03 = property(get_t_1_r_b_8_a_b_03, set_t_1_r_b_8_a_b_03, del_t_1_r_b_8_a_b_03, "T1_R_B8A_B03's docstring") + T2_R_B8A_B03 = property(get_t_2_r_b_8_a_b_03, set_t_2_r_b_8_a_b_03, del_t_2_r_b_8_a_b_03, "T2_R_B8A_B03's docstring") + T1_R_B8A_B11 = property(get_t_1_r_b_8_a_b_11, set_t_1_r_b_8_a_b_11, del_t_1_r_b_8_a_b_11, "T1_R_B8A_B11's docstring") + T2_R_B8A_B11 = property(get_t_2_r_b_8_a_b_11, set_t_2_r_b_8_a_b_11, del_t_2_r_b_8_a_b_11, "T2_R_B8A_B11's docstring") + T1_SNOW = property(get_t_1_snow, set_t_1_snow, del_t_1_snow, "T1_SNOW's docstring") + T2_SNOW = property(get_t_2_snow, set_t_2_snow, del_t_2_snow, "T2_SNOW's docstring") + T1_NDVI = property(get_t_1_ndvi, set_t_1_ndvi, del_t_1_ndvi, "T1_NDVI's docstring") + T2_NDVI = property(get_t_2_ndvi, set_t_2_ndvi, del_t_2_ndvi, "T2_NDVI's docstring") + T11_B02 = property(get_t_11_b_02, set_t_11_b_02, del_t_11_b_02, "T11_B02's docstring") + T12_B02 = property(get_t_12_b_02, set_t_12_b_02, del_t_12_b_02, "T12_B02's docstring") + T11_R_B02_B11 = property(get_t_11_r_b_02_b_11, set_t_11_r_b_02_b_11, del_t_11_r_b_02_b_11, "T11_R_B02_B11's docstring") + T12_R_B02_B11 = property(get_t_12_r_b_02_b_11, set_t_12_r_b_02_b_11, del_t_12_r_b_02_b_11, "T12_R_B02_B11's docstring") + T21_B12 = property(get_t_21_b_12, set_t_21_b_12, del_t_21_b_12, "T21_B12's docstring") + T22_B12 = property(get_t_22_b_12, set_t_22_b_12, del_t_22_b_12, "T22_B12's docstring") + T21_R_B02_B11 = property(get_t_21_r_b_02_b_11, set_t_21_r_b_02_b_11, del_t_21_r_b_02_b_11, "T21_R_B02_B11's docstring") + T22_R_B02_B11 = property(get_t_22_r_b_02_b_11, set_t_22_r_b_02_b_11, del_t_22_r_b_02_b_11, "T22_R_B02_B11's docstring") + noData = property(get_no_data, set_no_data, del_no_data, "noData's docstring") + saturatedDefective = property(get_saturated_defective, set_saturated_defective, del_saturated_defective, "saturatedDefective's docstring") + darkFeatures = property(get_dark_features, set_dark_features, del_dark_features, "darkFeatures's docstring") + cloudShadows = property(get_cloud_shadows, set_cloud_shadows, del_cloud_shadows, "cloudShadows's docstring") + vegetation = property(get_vegetation, set_vegetation, del_vegetation, "vegetation's docstring") + bareSoils = property(get_bare_soils, set_bare_soils, del_bare_soils, "bareSoils's docstring") + water = property(get_water, set_water, del_water, "water's docstring") + lowProbaClouds = property(get_low_proba_clouds, set_low_proba_clouds, del_low_proba_clouds, "lowProbaClouds's docstring") + medProbaClouds = property(get_med_proba_clouds, set_med_proba_clouds, del_med_proba_clouds, "medProbaClouds's docstring") + highProbaClouds = property(get_high_proba_clouds, set_high_proba_clouds, del_high_proba_clouds, "highProbaClouds's docstring") + thinCirrus = property(get_thin_cirrus, set_thin_cirrus, del_thin_cirrus, "thinCirrus's docstring") + snowIce = property(get_snow_ice, set_snow_ice, del_snow_ice, "snowIce's docstring") + T_SDW = property(get_t_sdw, set_t_sdw, del_t_sdw, "T_SDW's docstring") + T_B02_B12 = property(get_t_b_02_b_12, set_t_b_02_b_12, del_t_b_02_b_12, "T_B02_B12's docstring") + medianFilter = property(get_median_filter, set_median_filter, del_median_filter, "medianFilter's docstring") + demDirectory = property(get_dem_directory, set_dem_directory, del_dem_directory, "demDirectory's docstring") + demReference = property(get_dem_reference, set_dem_reference, del_dem_reference, "demReference's docstring") + snowMapReference = property(get_snow_map_reference, set_snow_map_reference, del_snow_map_reference, "snowMapReference's docstring") + scOnly = property(get_sc_only, set_sc_only, del_sc_only, "scOnly's docstring") + workDir = property(get_work_dir, set_work_dir, del_work_dir, "workDir's docstring") + processed60 = property(get_processed_60, set_processed_60, del_processed_60, "processed60's docstring") + processed20 = property(get_processed_20, set_processed_20, del_processed_20, "processed20's docstring") + processed10 = property(get_processed_10, set_processed_10, del_processed_10, "processed10's docstring") + refresh = property(get_refresh, set_refresh, del_refresh, "refresh's docstring") + logger = property(get_logger, set_logger, del_logger, "log's docstring") + targetDirectory = property(get_target_directory, set_target_directory, del_target_directory, "targetDirectory's docstring") + logLevel = property(get_log_level, set_log_level, del_log_level, "logLevel's docstring") + selectedTile = property(get_selected_tile, set_selected_tile, del_selected_tile, "selectedTile's docstring") + tEstimation = property(get_t_estimation, set_t_estimation, del_t_estimation, "tEstimation's docstring") + tStart = property(get_t_start, set_t_start, del_t_start, "tStart's docstring") + nrTiles = property(get_nr_tiles, set_nr_tiles, del_nr_tiles, "nrTiles's docstring") + nrProcs = property(get_nr_procs, set_nr_procs, del_nr_procs, "nrProcs's docstring") + processingStatusFn = property(get_processing_status_fn, set_processing_status_fn, del_processing_status_fn, "processingStatusFn's docstring") + processingEstimationFn = property(get_processing_estimation_fn, set_processing_estimation_fn, del_processing_estimation_fn, "processingEstimationFn's docstring") + + def createOrUpdateL2A_UserProduct(self): + firstInit = False L1C_UP_MASK = '*1C_*' L1C_UP_DIR = self.sourceDir if os.path.exists(L1C_UP_DIR) == False: - stderrWrite('directory "%s" does not exist.\n' % L1C_UP_DIR) - self.exitError() + self.logger.fatal('directory "%s" does not exist.' % L1C_UP_DIR) return False # detect the filename for the datastrip metadata: - L1C_DS_DIR = L1C_UP_DIR + '/DATASTRIP/' + L1C_DS_DIR = os.path.join(L1C_UP_DIR, 'DATASTRIP') if os.path.exists(L1C_DS_DIR) == False: - stderrWrite('directory "%s" does not exist.\n' % L1C_DS_DIR) - self.exitError() + self.logger.fatal('directory "%s" does not exist.' % L1C_DS_DIR) return False L1C_DS_MASK = '*_L1C_*' @@ -1964,25 +2803,23 @@ def createL2A_UserProduct(self): break if found == False: - stderrWrite('No metadata in datastrip\n.') - self.exitError() + self.logger.fatal('No metadata in datastrip.') + return False - L1C_DS_DIR += dirname + L1C_DS_DIR = os.path.join(L1C_DS_DIR, dirname) L1C_DS_MTD_XML = (dirname[:-7]+'.xml').replace('_MSI_', '_MTD_') - self.L1C_DS_MTD_XML = L1C_DS_DIR + '/' + L1C_DS_MTD_XML + self.L1C_DS_MTD_XML = os.path.join(L1C_DS_DIR, L1C_DS_MTD_XML) dirname, basename = os.path.split(L1C_UP_DIR) if(fnmatch.fnmatch(basename, L1C_UP_MASK) == False): - stderrWrite('%s: identifier "*1C_*" is missing.\n' % basename) - self.exitError() + self.logger.fatal('%s: identifier "*1C_*" is missing.' % basename) return False - GRANULE = L1C_UP_DIR + '/GRANULE' + GRANULE = os.path.join(L1C_UP_DIR, 'GRANULE') if os.path.exists(GRANULE) == False: - stderrWrite('directory "%s" does not exist.\n' % GRANULE) - self.exitError() + self.logger.fatal('directory "%s" does not exist.' % GRANULE) return False - + # # the product (directory) structure: #------------------------------------------------------- @@ -1995,94 +2832,127 @@ def createL2A_UserProduct(self): if(os.path.exists(dirname) == False): os.mkdir(dirname) - L2A_UP_DIR = dirname + '/' + L2A_UP_ID - self._L2A_UP_DIR = L2A_UP_DIR + L2A_UP_DIR = os.path.join(dirname, L2A_UP_ID) + self.L2A_UP_DIR = L2A_UP_DIR self.L2A_UP_ID = L2A_UP_ID + L1C_INSPIRE_XML = os.path.join(L1C_UP_DIR, 'INSPIRE.xml') + L1C_MANIFEST_SAFE = os.path.join(L1C_UP_DIR, 'manifest.safe') + L2A_INSPIRE_XML = os.path.join(L2A_UP_DIR, 'INSPIRE.xml') + L2A_MANIFEST_SAFE = os.path.join(L2A_UP_DIR, 'manifest.safe') + self.L2A_MANIFEST_SAFE = L2A_MANIFEST_SAFE - L1C_INSPIRE_XML = L1C_UP_DIR + '/INSPIRE.xml' - L1C_MANIFEST_SAFE = L1C_UP_DIR + '/manifest.safe' - - L2A_INSPIRE_XML = L2A_UP_DIR + '/INSPIRE.xml' - L2A_MANIFEST_SAFE = L2A_UP_DIR + '/manifest.safe' - - AUX_DATA = '/AUX_DATA' - DATASTRIP = '/DATASTRIP' - GRANULE = '/GRANULE' - HTML = '/HTML' - REP_INFO = '/rep_info' - firstInit = False - - if(os.path.exists(L2A_UP_DIR + GRANULE) == False): - copy_tree(L1C_UP_DIR + AUX_DATA, L2A_UP_DIR + AUX_DATA) - copy_tree(L1C_UP_DIR + DATASTRIP, L2A_UP_DIR + DATASTRIP) - copy_tree(L1C_UP_DIR + HTML, L2A_UP_DIR + HTML) - copy_tree(L1C_UP_DIR + REP_INFO, L2A_UP_DIR + REP_INFO) - # remove the L1C xsds: - S2_mask = 'S2_*.xsd' - repdir = L2A_UP_DIR + REP_INFO - filelist = os.listdir(repdir) - for filename in filelist: - if(fnmatch.fnmatch(filename, S2_mask) == True): - os.remove(repdir + '/' + filename) - copy_file(L1C_INSPIRE_XML, L2A_INSPIRE_XML) - copy_file(L1C_MANIFEST_SAFE, L2A_MANIFEST_SAFE) - os.mkdir(L2A_UP_DIR + GRANULE) + AUX_DATA = 'AUX_DATA' + DATASTRIP = 'DATASTRIP' + GRANULE = 'GRANULE' + HTML = 'HTML' + REP_INFO = 'rep_info' + QI_DATA = 'QI_DATA' + + if os.name == 'nt': + #special treatment for windows for long pathnames: + L1C_UP_DIR_ = u'\\'.join([u'\\\\?', L1C_UP_DIR]) + L1C_INSPIRE_XML_ = u'\\'.join([u'\\\\?', L1C_INSPIRE_XML]) + L1C_MANIFEST_SAFE_ = u'\\'.join([u'\\\\?', L1C_MANIFEST_SAFE]) + L2A_UP_DIR_ = u'\\'.join([u'\\\\?', L2A_UP_DIR]) + L2A_INSPIRE_XML_ = u'\\'.join([u'\\\\?', L2A_INSPIRE_XML]) + L2A_MANIFEST_SAFE_ = u'\\'.join([u'\\\\?', L2A_MANIFEST_SAFE]) + else: + L1C_UP_DIR_ = L1C_UP_DIR + L1C_INSPIRE_XML_ = L1C_INSPIRE_XML + L1C_MANIFEST_SAFE_ = L1C_MANIFEST_SAFE + L2A_UP_DIR_ = L2A_UP_DIR + L2A_INSPIRE_XML_ = L2A_INSPIRE_XML + L2A_MANIFEST_SAFE_ = L2A_MANIFEST_SAFE + + if(os.path.exists(os.path.join(L2A_UP_DIR, GRANULE)) == False): firstInit = True - - self.L1C_INSPIRE_XML = L1C_INSPIRE_XML - self.L2A_INSPIRE_XML = L2A_INSPIRE_XML - self.L1C_MANIFEST_SAFE = L1C_MANIFEST_SAFE - self.L2A_MANIFEST_SAFE = L2A_MANIFEST_SAFE + l.acquire() + try: + copytree(os.path.join(L1C_UP_DIR_, AUX_DATA), os.path.join(L2A_UP_DIR_, AUX_DATA)) + copytree(os.path.join(L1C_UP_DIR_, DATASTRIP), os.path.join(L2A_UP_DIR_, DATASTRIP)) + copytree(os.path.join(L1C_UP_DIR_, HTML), os.path.join(L2A_UP_DIR_, HTML)) + copytree(os.path.join(L1C_UP_DIR_, REP_INFO), os.path.join(L2A_UP_DIR_, REP_INFO)) + # remove the L1C xsds: + S2_mask = 'S2_*.xsd' + repdir = os.path.join(L2A_UP_DIR, REP_INFO) + filelist = os.listdir(repdir) + + for filename in filelist: + if(fnmatch.fnmatch(filename, S2_mask) == True): + os.remove(os.path.join(repdir, filename)) + copyfile(L1C_MANIFEST_SAFE_, L2A_MANIFEST_SAFE_) + copyfile(L1C_INSPIRE_XML_, L2A_INSPIRE_XML_) + os.mkdir(os.path.join(L2A_UP_DIR_, GRANULE)) + finally: + l.release() #create user product: S2A_mask = 'S2A_*.xml' - filelist = sorted(os.listdir(L1C_UP_DIR)) - found = False + try: + filelist = sorted(os.listdir(L1C_UP_DIR)) + found = False + except: + self.logger.fatal('L1C input is not accessible') + return False + for filename in filelist: if(fnmatch.fnmatch(filename, S2A_mask) == True): found = True break if found == False: - stderrWrite('No metadata for user product.\n') - self.exitError() - + self.logger.fatal('No metadata for user product') + return False + # prepare L2A User Product metadata file - fn_L1C = L1C_UP_DIR + '/' + filename + fn_L1C = os.path.join(L1C_UP_DIR, filename) fn_L2A = filename[:4] + 'USER' + filename[8:] fn_L2A = fn_L2A.replace('L1C_', 'L2A_') - fn_L2A = L2A_UP_DIR + '/' + fn_L2A + fn_L2A = os.path.join(L2A_UP_DIR, fn_L2A) self.L1C_UP_MTD_XML = fn_L1C self.L2A_UP_MTD_XML = fn_L2A - + + # get the bandIndex + if self._resolution == 10: + bandIndex = [1,2,3,7] + self._ch940 = [0,0,0,0,0,0] + else: + bandIndex = [0,1,2,3,4,5,6,8,9,10,11,12] + self._ch940 = [8,8,9,9,0,0] # this must always be initialized: xp = L2A_XmlParser(self, 'UP1C') pic = xp.getTree('General_Info', 'Product_Image_Characteristics') self._dnScale = float32(pic.QUANTIFICATION_VALUE.text) - # rc = pic.Reflectance_Conversion + rc = pic.Reflectance_Conversion # The earth sun distance correction factor, already squared: - # Attention! L1C is already corrected by the Earth-Sun distance. - # ATCOR expects the uncorrected TOA rad as input and thus applies d2 - # in order to rescale TOA rad. As this is wrong, d2 is permanently fixed to 1.0 in the constructor - # self._d2 = 1.0 / float32(rc.U.text) + self._d2 = float32(rc.U.text) + node = pic.Reflectance_Conversion.Solar_Irradiance_List + i=0 + self._e0 = zeros(size(bandIndex), float32) + for index in bandIndex: + par = node.SOLAR_IRRADIANCE[index] + if par is None: self.parNotFound(par) + self._e0[i]= float32(par.text)/10 + i+=1 if firstInit == True: # copy L2A schemes from config_dir into rep_info: xp = L2A_XmlParser(self, 'GIPP') cs = xp.getRoot('Common_Section') - upScheme2a = cs.UP_Scheme_2A.text - tileScheme2a = cs.Tile_Scheme_2A.text - dsScheme2a = cs.DS_Scheme_2A.text - copy_file(self.configDir + upScheme2a, L2A_UP_DIR + REP_INFO + '/' + upScheme2a) - copy_file(self.configDir + tileScheme2a, L2A_UP_DIR + REP_INFO + '/' + tileScheme2a) - copy_file(self.configDir + dsScheme2a, L2A_UP_DIR + REP_INFO + '/' + dsScheme2a) + + dirname, basename = os.path.split(cs.UP_Scheme_2A.text) + copyfile(os.path.join(self.configDir, cs.UP_Scheme_2A.text), os.path.join(L2A_UP_DIR, REP_INFO, basename)) + dirname, basename = os.path.split(cs.Tile_Scheme_2A.text) + copyfile(os.path.join(self.configDir, cs.Tile_Scheme_2A.text), os.path.join(L2A_UP_DIR, REP_INFO, basename)) + dirname, basename = os.path.split(cs.DS_Scheme_2A.text) + copyfile(os.path.join(self.configDir, cs.DS_Scheme_2A.text), os.path.join(L2A_UP_DIR, REP_INFO, basename)) # copy L2A User Product metadata file: - copy_file(fn_L1C, fn_L2A) + copyfile(fn_L1C, fn_L2A) # remove old L1C entries from L1C_UP_MTD_XML: xp = L2A_XmlParser(self, 'UP2A') if(xp.convert() == False): - self.tracer.fatal('error in converting user product metadata to level 2A') - self.exitError() - xp = L2A_XmlParser(self, 'UP2A') + self.logger.fatal('error in converting user product metadata to level 2A') + + xp = L2A_XmlParser(self, 'UP2A') pi = xp.getTree('General_Info', 'L2A_Product_Info') del pi.L2A_Product_Organisation.Granule_List[:] # update L2A entries from L1C_UP_MTD_XML: @@ -2093,11 +2963,15 @@ def createL2A_UserProduct(self): pi.GENERATION_TIME = strftime('%Y-%m-%dT%H:%M:%SZ', dt.timetuple()) pi.PREVIEW_IMAGE_URL = 'http://www.telespazio-vega.de' qo = pi.Query_Options - #qo.PREVIEW_IMAGE = True - #qo.METADATA_LEVEL = 'Standard' qo.Aux_List.attrib['productLevel'] = 'Level-2Ap' pic = xp.getTree('General_Info', 'L2A_Product_Image_Characteristics') + L1C_TOA_QUANTIFICATION_VALUE =pic.L1C_L2A_Quantification_Values_List qvl = objectify.Element('L1C_L2A_Quantification_Values_List') + qvl.L1C_TOA_QUANTIFICATION_VALUE = L1C_TOA_QUANTIFICATION_VALUE + rc = pic.Reflectance_Conversion + # The earth sun distance correction factor, + # already squared: + self._d2 = float32(rc.U.text) qvl.L2A_BOA_QUANTIFICATION_VALUE = str(int(self._dnScale)) qvl.L2A_BOA_QUANTIFICATION_VALUE.attrib['unit'] = 'none' qvl.L2A_AOT_QUANTIFICATION_VALUE = str(self._L2A_AOT_QUANTIFICATION_VALUE) @@ -2116,12 +2990,12 @@ def createL2A_UserProduct(self): scid.L2A_SCENE_CLASSIFICATION_TEXT = 'SC_SATURATED_DEFECTIVE' scid.L2A_SCENE_CLASSIFICATION_INDEX = '1' scl.append(scid) - + scid = objectify.Element('L2A_Scene_Classification_ID') scid.L2A_SCENE_CLASSIFICATION_TEXT = 'SC_DARK_FEATURE_SHADOW' scid.L2A_SCENE_CLASSIFICATION_INDEX = '2' scl.append(scid) - + scid = objectify.Element('L2A_Scene_Classification_ID') scid.L2A_SCENE_CLASSIFICATION_TEXT = 'SC_CLOUD_SHADOW' scid.L2A_SCENE_CLASSIFICATION_INDEX = '3' @@ -2131,7 +3005,7 @@ def createL2A_UserProduct(self): scid.L2A_SCENE_CLASSIFICATION_TEXT = 'SC_VEGETATION' scid.L2A_SCENE_CLASSIFICATION_INDEX = '4' scl.append(scid) - + scid = objectify.Element('L2A_Scene_Classification_ID') scid.L2A_SCENE_CLASSIFICATION_TEXT = 'SC_BARE_SOIL_DESERT' scid.L2A_SCENE_CLASSIFICATION_INDEX = '5' @@ -2167,258 +3041,549 @@ def createL2A_UserProduct(self): scid.L2A_SCENE_CLASSIFICATION_INDEX = '11' scl.append(scid) pic.append(scl) - + auxinfo = xp.getRoot('L2A_Auxiliary_Data_Info') auxdata = objectify.Element('Aux_Data') gipp = objectify.Element('L2A_GIPP_List') auxdata.append(gipp) - auxdata.L2A_PRODUCTION_DEM_TYPE = self.getStr('Common_Section', 'DEM_Reference') - auxdata.L2A_LIBRADTRAN_LUTS = self.getStr('Atmospheric_Correction/References', 'Atm_Data_Filename') - auxdata.L2A_SNOW_CLIMATOLOGY = self.getStr('Scene_Classification', 'Snow_Map_Reference') + auxdata.L2A_PRODUCTION_DEM_TYPE = self.demReference + auxdata.L2A_LIBRADTRAN_LUTS = self.atmDataFn + auxdata.L2A_SNOW_CLIMATOLOGY = self.snowMapReference auxinfo.append(auxdata) xp.export() - + #create datastrip ID: - L2A_DS_DIR = self._L2A_UP_DIR + DATASTRIP - dirlist = sorted(os.listdir(L2A_DS_DIR)) S2A_mask = 'S2A_*' found = False + L2A_DS_DIR = os.path.join(self._L2A_UP_DIR, DATASTRIP) + dirlist = sorted(os.listdir(L2A_DS_DIR)) for dirname in dirlist: if(fnmatch.fnmatch(dirname, S2A_mask) == True): - found = True - break - if found == False: - stderrWrite('No subdirectory in datastrip.\n') - self.exitError() - - L1C_DS_ID = dirname - L2A_DS_ID = L1C_DS_ID[:4] + 'USER' + L1C_DS_ID[8:] - L2A_DS_ID = L2A_DS_ID.replace('L1C_', 'L2A_') - self.L2A_DS_ID = L2A_DS_ID - - olddir = L2A_DS_DIR + '/' + L1C_DS_ID - newdir = L2A_DS_DIR + '/' + L2A_DS_ID - - if firstInit == True: - os.rename(olddir, newdir) - - #find datastrip metadada, rename and change it: - L2A_DS_DIR = newdir - filelist = sorted(os.listdir(L2A_DS_DIR)) - found = False - for filename in filelist: - if(fnmatch.fnmatch(filename, S2A_mask) == True): - found = True - break + + L1C_DS_ID = dirname + L2A_DS_ID = L1C_DS_ID[:4] + 'USER' + L1C_DS_ID[8:] + L2A_DS_ID = L2A_DS_ID.replace('L1C_', 'L2A_') + self.L2A_DS_ID = L2A_DS_ID + + olddir = os.path.join(L2A_DS_DIR, L1C_DS_ID) + newdir = os.path.join(L2A_DS_DIR, L2A_DS_ID) + + if firstInit == True: + os.rename(olddir, newdir) + + #find datastrip metadada, rename and change it: + L2A_DS_SUBDIR = newdir + filelist = sorted(os.listdir(L2A_DS_SUBDIR)) + found = False + for filename in filelist: + if(fnmatch.fnmatch(filename, S2A_mask) == True): + L1C_DS_MTD_XML = filename + found = True + break + if found == False: + self.logger.fatal('No metadata in datastrip.') + + L2A_DS_MTD_XML = L1C_DS_MTD_XML[:4] + 'USER' + L1C_DS_MTD_XML[8:] + L2A_DS_MTD_XML = L2A_DS_MTD_XML.replace('L1C_', 'L2A_') + oldfile = os.path.join(L2A_DS_SUBDIR, L1C_DS_MTD_XML) + newfile = os.path.join(L2A_DS_SUBDIR, L2A_DS_MTD_XML) + self.L2A_DS_MTD_XML = newfile + + if firstInit == True: + os.rename(oldfile, newfile) + + xp = L2A_XmlParser(self, 'DS2A') + if(xp.convert() == False): + self.logger.fatal('error in converting datastrip metadata to level 2A') + ti = xp.getTree('Image_Data_Info', 'Tiles_Information') + try: + del ti.Tile_List.Tile[:] + except: + pass + xp.export() + found = True + if found == False: - stderrWrite('No metadata in datastrip\n.') - self.exitError() - - LXX_DS_MTD_XML = filename - L2A_DS_MTD_XML = LXX_DS_MTD_XML[:4] + 'USER' + LXX_DS_MTD_XML[8:] - L2A_DS_MTD_XML = L2A_DS_MTD_XML.replace('L1C_', 'L2A_') - - oldfile = L2A_DS_DIR + '/' + LXX_DS_MTD_XML - newfile = L2A_DS_DIR + '/' + L2A_DS_MTD_XML - self.L2A_DS_MTD_XML = newfile - if firstInit == True: - os.rename(oldfile, newfile) - xp = L2A_XmlParser(self, 'DS2A') - if(xp.convert() == False): - self.tracer.fatal('error in converting datastrip metadata to level 2A') - self.exitError() - xp = L2A_XmlParser(self, 'DS2A') - ti = xp.getTree('Image_Data_Info', 'Tiles_Information') - if(ti != False): - del ti.Tile_List.Tile[:] - xp.export() - - return sorted(os.listdir(L1C_UP_DIR + GRANULE)) + self.logger.fatal('no subdirectory in datastrip') + if self._selectedTile != None: + self.nrProcs = 1 + return [self._selectedTile] + else: + return sorted(os.listdir(os.path.join(L1C_UP_DIR, GRANULE))) + + + def create_L2A_Tile(self, tile): + # generate new Tile ID: + GRANULE = 'GRANULE' + L1C_TILE_ID = tile + L2A_TILE_ID = L1C_TILE_ID[:4] + 'USER' + L1C_TILE_ID[8:] + L2A_TILE_ID = L2A_TILE_ID.replace('L1C_', 'L2A_') + self.L1C_TILE_ID = L1C_TILE_ID + self.L2A_TILE_ID = L2A_TILE_ID + L1C_TILE_ID = os.path.join(self.sourceDir, GRANULE, L1C_TILE_ID) + L2A_TILE_ID = os.path.join(self.L2A_UP_DIR, GRANULE, L2A_TILE_ID) + + if(os.path.exists(L2A_TILE_ID) == False): + os.mkdir(L2A_TILE_ID) + else: + # find the tile metadata: + filelist = sorted(os.listdir(L2A_TILE_ID)) + filemask = 'S2A_USER_MTD_*.xml' + for filename in filelist: + if(fnmatch.fnmatch(filename, filemask) == True): + break + + L2A_TILE_MTD_XML = filename + self.L2A_TILE_MTD_XML = os.path.join(L2A_TILE_ID, L2A_TILE_MTD_XML) + L1C_TILE_MTD_XML = L2A_TILE_MTD_XML[:4] + 'OPER' + L2A_TILE_MTD_XML[8:] + L1C_TILE_MTD_XML = L1C_TILE_MTD_XML.replace('L2A_', 'L1C_') + self.L1C_TILE_MTD_XML = os.path.join(L1C_TILE_ID, L1C_TILE_MTD_XML) + return L2A_TILE_ID def postprocess(self): - xp = L2A_XmlParser(self, 'UP2A') - auxdata = xp.getTree('L2A_Auxiliary_Data_Info', 'Aux_Data') - gipp = auxdata.L2A_GIPP_List - dirname, basename = os.path.split(self.L2A_TILE_MTD_XML) - fn1r = basename.replace('_MTD_', '_GIP_') - fn2r = fn1r.replace('.xml', '') - gippFn = etree.Element('GIPP_FILENAME', type='GIP_Level-2Ap', version=self.processorVersion) - gippFn.text = fn2r - gipp.append(gippFn) - xp.export() - - # copy log to QI data as a report: - report = basename.replace('.xml', '_Report.xml') - report = dirname + '/QI_DATA/' + report - - if((os.path.isfile(self._fnLog)) == False): - self.tracer.fatal('Missing file: ' + self._fnLog) - self.exitError() - - f = open(self._fnLog, 'a') - f.write('') - f.close() - copy_file(self._fnLog, report) - - trace = basename.replace('.xml', '_Trace.xml') - trace = dirname + '/QI_DATA/' + trace - - if((os.path.isfile(self._fnTrace)) == False): - self.tracer.fatal('Missing file: ' + self._fnTrace) - self.exitError - - f = open(self._fnTrace, 'a') - f.write('') - f.close() - copy_file(self._fnTrace, trace) - - ''' - if os.path.exists(self._fnTrace): - os.remove(self._fnTrace) - if os.path.exists(self._fnLog): - os.remove(self._fnLog) - ''' - return - + if self.L2A_TILE_MTD_XML != None: + try: + l2aTileId = self.L2A_TILE_ID + xp = L2A_XmlParser(self, 'UP2A') + auxdata = xp.getTree('L2A_Auxiliary_Data_Info', 'Aux_Data') + gipp = auxdata.L2A_GIPP_List + gippFn = etree.Element('GIPP_FILENAME', type='GIP_Level-2Ap', version=self.processorVersion) + gippFn.text = l2aTileId + gipp.append(gippFn) + xp.export() + return True + except: + return False + return True + def setTimeEstimation(self, resolution): + if self.selectedTile != None: + nrTiles = 1 + else: + nrTiles = self.nrTiles + + factor = float32(nrTiles) + config = ConfigParser.RawConfigParser(allow_no_value=True) - config.read(self._processingEstimationFn) - self._tEst60 = config.getfloat('time estimation','t_est_60') - self._tEst20 = config.getfloat('time estimation','t_est_20') - self._tEst10 = config.getfloat('time estimation','t_est_10') + l.acquire() + try: + config.read(self._processingEstimationFn) + tEst60 = config.getfloat('time estimation','t_est_60') * factor + tEst20 = config.getfloat('time estimation','t_est_20') * factor + tEst10 = config.getfloat('time estimation','t_est_10') * factor + finally: + l.release() + if(resolution == 60): - self._tEstimation = self._tEst60 + self._tEstimation = tEst60 elif(resolution == 20): - self._tEstimation = self._tEst20 + self._tEstimation = tEst20 elif(resolution == 10): - self._tEstimation = self._tEst10 + self._tEstimation = (tEst20 + tEst10) + else: + self._tEstimation = (tEst60 + tEst20 + tEst10) return - def writeTimeEstimation(self, resolution, tMeasure): - config = ConfigParser.RawConfigParser() - tMeasureAsString = str(tMeasure) - config.add_section('time estimation') - config.set('time estimation','t_est_60', self._tEst60) - config.set('time estimation','t_est_20', self._tEst20) - config.set('time estimation','t_est_10', self._tEst10) - if(resolution == 60): - config.set('time estimation','t_est_60', tMeasureAsString) - elif(resolution == 20): - config.set('time estimation','t_est_20', tMeasureAsString) - elif(resolution == 10): - config.set('time estimation','t_est_10', tMeasureAsString) - - with open(self._processingEstimationFn, 'w') as configFile: + def writeTimeEstimation(self, tMeasure): + l.acquire() + try: + config = ConfigParser.RawConfigParser() + config.read(self._processingEstimationFn) + + if(self.resolution == 60): + tEst = config.getfloat('time estimation','t_est_60') + tMeasureAsString = str((tEst + tMeasure) / 2.0 ) + config.set('time estimation','t_est_60', tMeasureAsString) + + elif(self.resolution == 20): + tEst = config.getfloat('time estimation','t_est_20') + tMeasureAsString = str((tEst + tMeasure) / 2.0 ) + config.set('time estimation','t_est_20', tMeasureAsString) + + elif(self.resolution == 10): + tEst = config.getfloat('time estimation','t_est_10') + tMeasureAsString = str((tEst + tMeasure) / 2.0 ) + config.set('time estimation','t_est_10', tMeasureAsString) + + configFile = open(self._processingEstimationFn, 'w') config.write(configFile) - return - + configFile.close() + finally: + l.release() def timestamp(self, procedure): - tNow = datetime.now() - tDelta = tNow - self._timestamp - self._timestamp = tNow - self.tracer.debug('Procedure: ' + procedure + ', elapsed time[s]: %0.3f' % tDelta.total_seconds()) - self.logger.info('Procedure: ' + procedure + ', elapsed time[s]: %0.3f' % tDelta.total_seconds()) - if(self.tracer.getEffectiveLevel() != logging.NOTSET): - stdoutWrite('%s, elapsed time[s]: %0.3f\n' % (procedure, tDelta.total_seconds())) - #else: - increment = tDelta.total_seconds() / self._tEstimation - self._tTotal += increment - tTotalPercentage = float32(self._tTotal * 100.0) - stdoutWrite('Progress[%%]: %03.2f : ' % tTotalPercentage) - #stdout.flush() - f = open(self._processingStatusFn, 'w') - f.write(str(tTotalPercentage) + '\n') - f.close() + import multiprocessing + p = multiprocessing.current_process() + l.acquire() + try: + tNow = datetime.now() + tDelta = tNow - self._timestamp + self._timestamp = tNow + if(self.logger.getEffectiveLevel() != logging.NOTSET): + self.logger.info('Procedure: ' + procedure + ', elapsed time[s]: %0.3f' % tDelta.total_seconds()) + + f = open(self._processingStatusFn, 'r') + tTotal = float(f.readline()) * 0.01 + f.close() + increment = tDelta.total_seconds() / self._tEstimation + tTotal += increment + if tTotal > 1.0: + tWeighted = 100.0 - exp(-tTotal) + elif tTotal > 0.98: + tWeighted = tTotal * 100.0 - exp(-tTotal) + else: + tWeighted = tTotal * 100.0 + + stdoutWrite('Progress[%%]: %03.2f : ' % tWeighted) + stdoutWrite('PID-%d, %s, elapsed time[s]: %0.3f\n' % (p.pid, procedure, tDelta.total_seconds())) + + f = open(self._processingStatusFn, 'w') + f.write(str(tWeighted) + '\n') + f.close() + except: + f = open(self._processingStatusFn, 'w') + f.write('0.0\n') + f.close() + finally: + l.release() return def parNotFound(self, parameter): - dummy, basename = os.path.split(self._configFn) - self.tracer.fatal('Configuration parameter %s not found in %s' % (parameter, basename)) - stderrWrite('Configuration parameter <%s> not found in %s\n' % (parameter, basename)) - stderrWrite('Program forced to terminate.\n') - self.__exit__() + basename = os.path.basename(self._configFn) + self.logger.fatal('Configuration parameter <%s> not found in %s' % (parameter, basename)) + return False + + + def readPreferences(self): + ### Classificators + ####READING FROM L2A_CAL_SC_GIPP.xml + xp=L2A_XmlParser(self,'SC_GIPP') + xp.export() + xp.validate() + + ### Snow_map_reference + node = xp.getTree('Scene_Classification', 'References') + + par = node.Snow_Map + if par is None: self.parNotFound(node) + self.snowMapReference = par.text + + node = xp.getTree('Scene_Classification', 'Classificators') + par = node.NO_DATA + if par is None: self.parNotFound(node) + self.noData = int32(par.text) + + par = node.SATURATED_DEFECTIVE + if par is None: self.parNotFound(node) + self.saturatedDefective = int32(par.text) - def exitError(self, reason = None): - stderrWrite('Fatal error occurred, see tracefile for details.\n') - if reason: stderrWrite('Reason: %s\n' % reason) - self.__exit__() + par = node.DARK_FEATURES + if par is None: self.parNotFound(node) + self.darkFeatures = int32(par.text) + + par = node.CLOUD_SHADOWS + if par is None: self.parNotFound(node) + self.cloudShadows = int32(par.text) + par = node.VEGETATION + if par is None: self.parNotFound(node) + self.vegetation = int32(par.text) - def readPreferences(self): - xp = L2A_XmlParser(self, 'GIPP') + par = node.BARE_SOILS + if par is None: self.parNotFound(node) + self.bareSoils = int32(par.text) + + par = node.WATER + if par is None: self.parNotFound(node) + self.water = int32(par.text) + + par = node.LOW_PROBA_CLOUDS + if par is None: self.parNotFound(node) + self.lowProbaClouds = int32(par.text) + + par = node.MEDIUM_PROBA_CLOUDS + if par is None: self.parNotFound(node) + self.medProbaClouds = int32(par.text) + + par = node.HIGH_PROBA_CLOUDS + if par is None: self.parNotFound(node) + self.highProbaClouds = int32(par.text) + + par = node.THIN_CIRRUS + if par is None: self.parNotFound(node) + self.thinCirrus = int32(par.text) + + par = node.SNOW_ICE + if par is None: self.parNotFound(node) + self.snowIce = int32(par.text) + + ### Thresholds + node = xp.getTree ('Scene_Classification', 'Thresholds') + + par = node.T1_B02 + if par is None: self.parNotFound(node) + self.T1_B02 = float32(par.text) + + par = node.T2_B02 + if par is None: self.parNotFound(node) + self.T2_B02 = float32(par.text) + + par = node.T1_B04 + if par is None: self.parNotFound(node) + self.T1_B04 = float32(par.text) + + par = node.T2_B04 + if par is None: self.parNotFound(node) + self.T2_B04 = float32(par.text) + + par = node.T1_B8A + if par is None: self.parNotFound(node) + self.T1_B8A = float32(par.text) + + par = node.T2_B8A + if par is None: self.parNotFound(node) + self.T2_B8A = float32(par.text) + + par = node.T1_B10 + if par is None: self.parNotFound(node) + self.T1_B10 = float32(par.text) + + par = node.T2_B10 + if par is None: self.parNotFound(node) + self.T2_B10 = float32(par.text) + + par = node.T1_B12 + if par is None: self.parNotFound(node) + self.T1_B12 = float32(par.text) + + par = node.T2_B12 + if par is None: self.parNotFound(node) + self.T2_B12 = float32(par.text) + + par = node.T1_NDSI_CLD + if par is None: self.parNotFound(node) + self.T1_NDSI_CLD = float32(par.text) + + par = node.T2_NDSI_CLD + if par is None: self.parNotFound(node) + self.T2_NDSI_CLD = float32(par.text) + + par = node.T1_NDSI_SNW + if par is None: self.parNotFound(node) + self.T1_NDSI_SNW = float32(par.text) + + par = node.T2_NDSI_SNW + if par is None: self.parNotFound(node) + self.T2_NDSI_SNW = float32(par.text) + + par = node.T1_R_B02_B04 + if par is None: self.parNotFound(node) + self.T1_R_B02_B04 = float32(par.text) + + par = node.T2_R_B02_B04 + if par is None: self.parNotFound(node) + self.T2_R_B02_B04 = float32(par.text) + + par = node.T1_R_B8A_B03 + if par is None: self.parNotFound(node) + self.T1_R_B8A_B03 = float32(par.text) + + par = node.T2_R_B8A_B03 + if par is None: self.parNotFound(node) + self.T2_R_B8A_B03 = float32(par.text) + + par = node.T1_R_B8A_B11 + if par is None: self.parNotFound(node) + self.T1_R_B8A_B11 = float32(par.text) + + par = node.T2_R_B8A_B11 + if par is None: self.parNotFound(node) + self.T2_R_B8A_B11 = float32(par.text) + + par = node.T1_SNOW + if par is None: self.parNotFound(node) + self.T1_SNOW = float32(par.text) + + par = node.T2_SNOW + if par is None: self.parNotFound(node) + self.T2_SNOW = float32(par.text) + + par = node.T1_NDVI + if par is None: self.parNotFound(node) + self.T1_NDVI = float32(par.text) + + par = node.T2_NDVI + if par is None: self.parNotFound(node) + self.T2_NDVI = float32(par.text) + + par = node.T1_R_B8A_B03 + if par is None: self.parNotFound(node) + self.T1_R_B8A_B03 = float32(par.text) + + par = node.T2_R_B8A_B03 + if par is None: self.parNotFound(node) + self.T2_R_B8A_B03 = float32(par.text) + + par = node.T11_B02 + if par is None: self.parNotFound(node) + self.T11_B02 = float32(par.text) + + par = node.T12_B02 + if par is None: self.parNotFound(node) + self.T12_B02 = float32(par.text) + + par = node.T11_R_B02_B11 + if par is None: self.parNotFound(node) + self.T11_R_B02_B11 = float32(par.text) + + par = node.T12_R_B02_B11 + if par is None: self.parNotFound(node) + self.T12_R_B02_B11 = float32(par.text) + + par = node.T21_B12 + if par is None: self.parNotFound(node) + self.T21_B12 = float32(par.text) + + par = node.T22_B12 + if par is None: self.parNotFound(node) + self.T22_B12 = float32(par.text) + + par = node.T21_R_B02_B11 + if par is None: self.parNotFound(node) + self.T21_R_B02_B11 = float32(par.text) + + par = node.T22_R_B02_B11 + if par is None: self.parNotFound(node) + self.T22_R_B02_B11 = float32(par.text) + + par = node.T_CLOUD_LP + if par is None: self.parNotFound(node) + self.T_CLOUD_LP = float32(par.text) + + par = node.T_CLOUD_MP + if par is None: self.parNotFound(node) + self.T_CLOUD_MP = float32(par.text) + + par = node.T_CLOUD_HP + if par is None: self.parNotFound(node) + self.T_CLOUD_HP = float32(par.text) + + par = node.T1_B10 + if par is None: self.parNotFound(node) + self.T1_B10 = float32(par.text) + + par = node.T2_B10 + if par is None: self.parNotFound(node) + self.T2_B10 = float32(par.text) + + par = node.T_SDW + if par is None: self.parNotFound(node) + self.T_SDW = float32(par.text) + + par = node.T_B02_B12 + if par is None: self.parNotFound(node) + self.T_B02_B12 = float32(par.text) + + ###READING FROM L2A_CAL_AC_GIPP.xml + ### Scaling: + xp = L2A_XmlParser(self, 'AC_GIPP') + xp.export() + xp.validate() + + node = xp.getTree('Atmospheric_Correction', 'References') + par = node.Lib_Dir + if par is None: self.parNotFound(par) + try: + scriptDir = os.environ['SEN2COR_BIN'] + except: + scriptDir = getScriptDir() + self.libDir = os.path.join(scriptDir,'lib') + if self._resolution == 10: + libDir = os.path.join(self.libDir,'10') + else: + libDir = os.path.join(self.libDir,'20_60') + if self._resolution == 10: bandIndex = [1,2,3,7] self._ch940 = [0,0,0,0,0,0] else: bandIndex = [0,1,2,3,4,5,6,8,9,10,11,12] - self._ch940 = [8,8,9,9,0,0] + self._ch940 = [8,8,9,9,0,0] + + sensor = xp.getTree('Atmospheric_Correction', 'Sensor') + wavelength = sensor.Calibration.Band_List.wavelength + i = 0 + self._c0 = zeros(size(bandIndex), float32) + self._c1 = zeros(size(bandIndex), float32) + self._wvlsen = zeros(size(bandIndex), float32) + for index in bandIndex: + self._c0[i] = float32(wavelength[index].attrib['c0']) + self._c1[i] = float32(wavelength[index].attrib['c1']) + self._wvlsen[i] = float32(wavelength[index].text) + i+=1 + + i = 0 + self._fwhm = zeros(size(bandIndex), float32) + for index in bandIndex: + par = sensor.Resolution.Band_List.fwhm[index] + if par is None: self.parNotFound(par) + self._fwhm[i] = float32(par.text) + i+=1 + + #####READING FROM L2A_GIPP.xml + xp = L2A_XmlParser(self, 'GIPP') + xp.export() + xp.validate() ### Common_Section: node = xp.getRoot('Common_Section') if node is None: self.parNotFound(node) - par = node.Trace_Level + par = node.Log_Level if par is None: self.parNotFound(par) - self.traceLevel = par.text + self._logLevel = par.text + + par = node.Nr_Processes + if par is None: self.parNotFound(par) + self.nrProcs = par.text # SIITBX-55: alternative output directory for PDGS: par = node.Target_Directory if par is None: self.parNotFound(par) - self._targetDirectory = par.text - + self._targetDirectory = par.text + + par = node.DEM_Directory + if par is None: self.parNotFound(par) + self._demDirectory = par.text + + par = node.DEM_Reference + if par is None: self.parNotFound(par) + self._demReference = par.text + + ### Scene Classification: + ### Filters: + node = xp.getTree('Scene_Classification','Filters') + if node is None: self.parNotFound(node) + + par = node.Median_Filter + if par is None: self.parNotFound(node) + self.medianFilter = int(par.text) + + ### Atmospheric Correction: ### References: node = xp.getTree('Atmospheric_Correction', 'References') if node is None: self.parNotFound(node) - - par = node.Lib_Dir - if par is None: self.parNotFound(par) - moduleDir = os.environ['SEN2COR_BIN'] + '/' - self.libDir = moduleDir + 'lib' - if self._resolution == 10: - libDir = self.libDir + '10' - else: - libDir = self.libDir + '20_60' par = node.Atm_Data_Filename if par is None: self.parNotFound(par) - self.atmDataFn = libDir + '/' + par.text - - ### Scaling: - node = xp.getTree('Atmospheric_Correction', 'Calibration') - if node is None: self.parNotFound(node) + self.atmDataFn = par.text + self.atmDataFn = os.path.join(libDir,self.atmDataFn) - par = node.Adj_Km - if par is None: self.parNotFound(par) - self.adj_km = float32(par.text) - - par = node.Visibility - if par is None: self.parNotFound(par) - self.visibility = float32(par.text) - - par = node.Altitude - if par is None: self.parNotFound(par) - self.altit = float32(par.text) - - par = node.Smooth_WV_Map - if par is None: self.parNotFound(par) - self.smooth_wvmap = float32(par.text) - if (self.smooth_wvmap < 0.0): self.smooth_wvmap = 0.0 - - par = node.WV_Threshold_Cirrus - if par is None: self.parNotFound(par) - self.wv_thr_cirrus = clip(float32(par.text), 0.1, 1.0) - self.tracer.info('Cirrus threshold will be clipped between 0.1 and 1.0') - - par = node.Scale_Lp_Blue - if par is None: self.parNotFound(par) - self._sc_lp_blu = float32(par.text) - ### Flags: node = xp.getTree('Atmospheric_Correction', 'Flags') if node is None: self.parNotFound(node) @@ -2447,40 +3612,45 @@ def readPreferences(self): if par is None: self.parNotFound(par) self.icirrus = int(par.text) - sensor = xp.getTree('Atmospheric_Correction', 'Sensor') - wavelength = sensor.Calibration.Band_List.wavelength - i = 0 - self._c0 = zeros(size(bandIndex), float32) - self._c1 = zeros(size(bandIndex), float32) - for index in bandIndex: - self._c0[i] = float32(wavelength[index].attrib['c0']) - self._c1[i] = float32(wavelength[index].attrib['c1']) - i+=1 - - wavelength = sensor.Solar_Irradiance.Band_List.wavelength - i = 0 - self._wvlsen = zeros(size(bandIndex), float32) - self._e0 = zeros(size(bandIndex), float32) - self._fwhm = zeros(size(bandIndex), float32) - for index in bandIndex: - self._wvlsen[i] = float32(wavelength[index].text) - self._e0[i] = float32(wavelength[index].attrib['e0']) - self._fwhm[i] = float32(wavelength[index].attrib['fwhm']) - i+=1 - return + ### Calibration: + node = xp.getTree('Atmospheric_Correction', 'Calibration') + if node is None: self.parNotFound(node) + + par = node.Adj_Km + if par is None: self.parNotFound(par) + self.adj_km = float32(par.text) + + par = node.Visibility + if par is None: self.parNotFound(par) + self.visibility = float32(par.text) + + par = node.Altitude + if par is None: self.parNotFound(par) + self.altit = float32(par.text) + + par = node.Smooth_WV_Map + if par is None: self.parNotFound(par) + self.smooth_wvmap = float32(par.text) + if (self.smooth_wvmap < 0.0): self.smooth_wvmap = 0.0 + par = node.WV_Threshold_Cirrus + if par is None: self.parNotFound(par) + self.wv_thr_cirrus = clip(float32(par.text), 0.1, 1.0) + return + + def readTileMetadata(self): xp = L2A_XmlParser(self, 'T2A') ang = xp.getTree('Geometric_Info', 'Tile_Angles') try: azimuthAnglesList = ang.Sun_Angles_Grid.Azimuth.Values_List.VALUES - solaz_arr = xp.getFloatArray(azimuthAnglesList) + solaz_arr = self.getFloatArray(azimuthAnglesList) except: self.logger.warning('No azimuth angular values in tile metadata available, will be set to 0') solaz_arr = 0 try: zenithAnglesList = ang.Sun_Angles_Grid.Zenith.Values_List.VALUES - solze_arr = xp.getFloatArray(zenithAnglesList) + solze_arr = self.getFloatArray(zenithAnglesList) except: self.logger.warning('No zenith angular values in user metadata available, will be set to 0') solze_arr = 0 @@ -2498,7 +3668,7 @@ def readTileMetadata(self): break if(nrows == None or ncols == None): - self.exitError('no image dimension in metadata specified, please correct') + self.logger.fatal('no image dimension in metadata specified, please correct') if(nrows < ncols): last_row = int(solaz_arr[0].size * float(nrows)/float(ncols) + 0.5) saa = solaz_arr[0:last_row,:] @@ -2528,7 +3698,7 @@ def readTileMetadata(self): try: solaz = float32(ang.Mean_Sun_Angle.AZIMUTH_ANGLE.text) except: - self.logger.warning('No nean azimuth angular values in tile metadata available, will be set to 0') + self.logger.warning('No mean azimuth angular values in tile metadata available, will be set to 0') solaz = 0 self._solze = absolute(solze) @@ -2582,7 +3752,7 @@ def _get_subNodes(self, node, valtype): elif(valtype == 'float'): arr = zeros([count], float32) else: - self.tracer.error('wrong type declatarion: ' + type) + self.logger.error('wrong type declatarion: ' + type) self.parNotFound('wrong type declatarion: ' + type) i = 0 @@ -2628,26 +3798,28 @@ def getFloatArray(self, node): if nrows < 0: return False - ncols = len(node[0].split()) + ncols = len(node[0].text.split()) a = zeros([nrows,ncols],dtype=float32) for i in range(nrows): - a[i,:] = array(node[i].split(),dtype(float32)) + a[i,:] = nan_to_num(array(node[i].text.split(),dtype(float32))) return a def putArrayAsStr(self, a, node): + set_printoptions(precision=6) if a.ndim == 1: nrows = a.shape[0] - for i in nrows: + for i in range(nrows): node[i] = a[i],dtype=str - + elif a.ndim == 2: nrows = a.shape[0] for i in range(nrows): aStr = array_str(a[i,:]).strip('[]') node[i] = aStr + return True else: return False @@ -2656,12 +3828,12 @@ def getStringArray(self, node): nrows = len(node) if nrows < 0: return False - - ncols = len(node[0].split()) + + ncols = len(node[0].text.split()) a = zeros([nrows,ncols],dtype=str) - + for i in range(nrows): - a[i,:] = array(node[i].split(),dtype(str)) + a[i,:] = array(node[i].text.split(),dtype(str)) return a @@ -2671,36 +3843,29 @@ def _adapt(self, default, setpoint, theRange): # check if valid range, allow a broader interval than default if (setpoint[0] < default[0] - theRange): default[0] -= theRange - self.tracer.info('Adaptation of band interval. Setpoint: ' + str(setpoint[0] * 1000.0) + ', new value: ' + str(default[0] * 1000.0)) + self.logger.info('Adaptation of band interval. Setpoint: ' + str(setpoint[0] * 1000.0) + ', new value: ' + str(default[0] * 1000.0)) elif (setpoint[0] > default[1]): - self.tracer.info('Setpoint > upper limit, will be ignored! Setpoint: ' + str(setpoint[0] * 1000.0) + ', new value: ' + str(default[0] * 1000.0)) + self.logger.info('Setpoint > upper limit, will be ignored! Setpoint: ' + str(setpoint[0] * 1000.0) + ', new value: ' + str(default[0] * 1000.0)) pass else: default[0] = setpoint[0] if (setpoint[1] > default[1] + theRange): default[1] += theRange - self.tracer.info('Adaptation of band interval. Setpoint: ' + str(setpoint[1] * 1000.0) + ', new value: ' + str(default[1] * 1000.0)) + self.logger.info('Adaptation of band interval. Setpoint: ' + str(setpoint[1] * 1000.0) + ', new value: ' + str(default[1] * 1000.0)) elif (setpoint[1] < default[0]): - self.tracer.info('Setpoint < lower limit, will be ignored! Setpoint: ' + str(setpoint[1] * 1000.0) + ', new value: ' + str(default[1] * 1000.0)) + self.logger.info('Setpoint < lower limit, will be ignored! Setpoint: ' + str(setpoint[1] * 1000.0) + ', new value: ' + str(default[1] * 1000.0)) pass else: default[1] = setpoint[1] return default - def setLpBlueScale(self): - xp = L2A_XmlParser(self, 'GIPP') - cal = xp.getTree('Atmospheric_Correction', 'Calibration') - cal.Scale_Lp_Blue = str(self.sc_lp_blu) - xp.export() - - def _getDoc(self): from xml.etree import ElementTree as ET try: tree = ET.parse(self.configFn) except Exception, inst: - self.tracer.exception("Unexpected error opening %s: %s", self.configFn, inst) - self.exitError('Error in XML document') + self.logger.exception("Unexpected error opening %s: %s", self.configFn, inst) + self.logger.fatal('Error in XML document') doc = tree.getroot() return doc @@ -2711,20 +3876,34 @@ def getInt(self, label, key): par = doc.find(parameter) if par is None: self.parNotFound(parameter) return int(par.text) - - + + def getFloat(self, label, key): doc = self._getDoc() parameter = label + '/' + key par = doc.find(parameter) if par is None: self.parNotFound(parameter) return float32(par.text) - - + + def getStr(self, label, key): doc = self._getDoc() parameter = label + '/' + key par = doc.find(parameter) if par is None: self.parNotFound(parameter) - return par.text - \ No newline at end of file + return par.text + + + def getNrTiles(self): + nrTiles = 0 + filemask = 'S2A_*_L1C_*' + GRANULE = 'GRANULE' + granuleDir = os.path.join(self.workDir, GRANULE) + filelist = sorted(os.listdir(granuleDir)) + for tile in filelist: + if fnmatch.fnmatch(tile, filemask) == False: + continue + nrTiles += 1 + return nrTiles + + diff --git a/sen2cor/L2A_Library.py b/sen2cor/L2A_Library.py old mode 100755 new mode 100644 index 5cf66d6..720b3ed --- a/sen2cor/L2A_Library.py +++ b/sen2cor/L2A_Library.py @@ -1,18 +1,12 @@ #!/usr/bin/env python from numpy import * -from scipy import ndimage -from scipy import stats -from scipy.signal import medfilt2d from scipy.signal import medfilt from scipy.ndimage import map_coordinates from scipy import interpolate as sp -from scipy import stats from scipy.ndimage.filters import uniform_filter -from matplotlib import pyplot as plt -import time -import os, sys, fnmatch +import sys, os try: import Image except: @@ -54,21 +48,11 @@ def showImage(arr): scale = 255.0 scaledArr = (arr-arrmin).astype(float32) / float32(arrlen) * scale arr = (scaledArr.astype(uint8)) - #plt.imshow(arr, interpolation='nearest') - #plt.show() img = Image.fromarray(arr) img.show() return True -def showMask(alist, row, col): - arr = zeros(row,col) - arr[alist] = 255 - img = Image.fromarray(arr) - img.show() - return True - - def reverse(a): return a[::-1] @@ -1560,9 +1544,6 @@ def adjacency_weight(nadj_regions, adj_km, pixelsize): #----------------------------------------------------------------------- def load_wv_tables_summer(): - from L2A_Config import L2A_Config - msg = 'Load water vapour tables for summer period' - L2A_Config().tracer.debug(msg) # Output: # wv_av = 1000 # uu1 = wv values (cm*1000) @@ -1635,9 +1616,6 @@ def _ret(): return (wv_av, uu1, suu1, nuu1, uu1_altit) #----------------------------------------------------------------------------------- def load_wv_tables_winter(): - from L2A_Config import L2A_Config - msg = 'Load water vapour tables for winter period' - L2A_Config().tracer.debug(msg) # # Output: # wv_av = 400 @@ -1689,29 +1667,6 @@ def _ret(): return (wv_av, uu1, suu1, nuu1, uu1_altit) return _ret() -#------------------------------------------------------------------------------------------ -def check_required_cirrus_bands(unit_log, iwaterwv, red_band, nir_band, snow_band, swir2_band): -# check if water vapor band, swir2_band, nir_band, and (red or snow band) exist - from L2A_Config import L2A_Config - ierror = 1 - if (iwaterwv == 0): - L2A_Config().tracer.error('Cirrus correction requires calculation of water vapor map (iwaterwv > 0)') - return ierror - - elif (nir_band <= 0): - L2A_Config().tracer.error('Error: cirrus correction requires a NIR band') - return ierror - - elif (swir2_band <= 0): - L2A_Config().tracer.error('Error: cirrus correction requires a SWIR2 band (2.1 - 2.2 micron)') - return ierror - - elif (bitwise_and(red_band <= 0, snow_band <= 0)): - L2A_Config().tracer.error('Error: cirrus correction requires a red band or a 1.6 micron band') - return ierror - - return 0 - #------------------------------------------------------------------------------------------ def read_wv_trans945_1375(gamma, solze, h1_cirrus): diff --git a/sen2cor/L2A_Process.py b/sen2cor/L2A_Process.py index b1f863b..6e39b5c 100644 --- a/sen2cor/L2A_Process.py +++ b/sen2cor/L2A_Process.py @@ -1,295 +1,283 @@ #!/usr/bin/env python # -*- coding: iso-8859-15 -*- +### This module creates the central structure of the L2A_Product and calls the L2A_Schedule module + from numpy import * from tables import * -import sys -import os -import fnmatch +import sys, os, logging, fnmatch, warnings, platform, multiprocessing +import cPickle as pickle +from shutil import copyfile from time import time - -from L2A_Config import L2A_Config -from L2A_Tables import L2A_Tables -from L2A_SceneClass import L2A_SceneClass -from L2A_AtmCorr import L2A_AtmCorr +from L2A_Logger import getLevel +from L2A_Schedule import L2A_Schedule +from L2A_Config import L2A_Config, getScriptDir from L2A_XmlParser import L2A_XmlParser -from L2A_Library import stdoutWrite, stderrWrite, showImage -from lxml import etree, objectify - -class L2A_Process(object): - def __init__(self, workdir): - self._config = L2A_Config(workdir) - self._tables = False - self._processed60 = False - self._processed20 = False - self._processed10 = False - self._scOnly = False - - - def get_sc_only(self): - return self._scOnly - - - def set_sc_only(self, value): - self._scOnly = value - - - def del_sc_only(self): - del self._scOnly - - - def get_tables(self): - return self._tables - - - def set_tables(self, value): - self._tables = value - - - def del_tables(self): - del self._tables - - - def get_config(self): - return self._config - - - def set_config(self, value): - self._config = value - - - def del_config(self): - del self._config +from L2A_Library import stdoutWrite, stderrWrite +from L2A_Manifest import L2A_Manifest +from L2A_ProcessTile import SUCCESS, FAILURE +warnings.filterwarnings("ignore") +formatter = logging.Formatter('\n\n%(message)s\n') - def __exit__(self): - sys.exit(-1) +def updateTiles(config): + dirname, basename = os.path.split(config.workDir) + L2A_UP_ID = basename[:4] + 'USER' + basename[8:] + L2A_UP_ID = L2A_UP_ID.replace('1C_', '2A_') + targetDir = config.targetDirectory + if targetDir != 'DEFAULT': + dirname = targetDir - config = property(get_config, set_config, del_config, "config's docstring") - tables = property(get_tables, set_tables, del_tables, "tables's docstring") - scOnly = property(get_sc_only, set_sc_only, del_sc_only, "scOnly's docstring") - - - def selectAndProcess(self, tile): - if(self.config.resolution == 10): - self.config.tracer.info('selected resolution is 10m') - self.config.logger.info('selected resolution is 10m') - if(self._processed20 == False): - self.config.resolution = 20 - stdoutWrite('check if 20m table exists ...\n') - self.config.tracer.info('20m resolution must be processed first') - self.config.logger.info('20m resolution must be processed first') - self.selectAndProcess(tile) - - self.config.resolution = 10 - self.config.readPreferences() - self.tables = L2A_Tables(self.config, tile) - self.config.readTileMetadata() - self._processed10 = self.process() - if(self._processed10 == False): - return False - - elif(self.config.resolution == 20): - self.config.tracer.info('selected resolution is 20m') - self.config.logger.info('selected resolution is 20m') - if(self._processed60 == False): - self.config.resolution = 60 - stdoutWrite('check if 60m table exists...\n') - self.config.tracer.info('60m resolution must be processed first') - self.config.logger.info('60m resolution must be processed first') - self.selectAndProcess(tile) - - self.config.resolution = 20 - self.config.readPreferences() - self.tables = L2A_Tables(self.config, tile) - self.config.readTileMetadata() - self._processed20 = self.process() - if(self._processed20 == False): - return False - - elif(self.config.resolution == 60): - self.config.tracer.info('selected resolution is 60m') - self.config.logger.info('selected resolution is 60m') - self.config.readPreferences() - self.tables = L2A_Tables(self.config, tile) - self.config.readTileMetadata() - self._processed60 = self.process() - if(self._processed60 == False): - return False + config.L2A_UP_DIR = os.path.join(dirname, L2A_UP_ID) + L1C_TILES = config.createOrUpdateL2A_UserProduct() + if L1C_TILES == False: + return False + filemask = 'S2A_OPER_*' + picFn = 'configPic.p' + L2A_TILES = [] + for tile in L1C_TILES: + if fnmatch.fnmatch(tile, filemask) == False: + continue + L2A_TILE_ID = config.create_L2A_Tile(tile) + L2A_TILES.append(L2A_TILE_ID) + picFnTile = os.path.join(L2A_TILE_ID, picFn) + logger = config.logger + config.logger = None + if(os.path.isfile(picFnTile) == False or config.refresh == True): + # next statement creates or overwrites the permanent config object: + # we must remove the logger first ... + try: + src = open(picFn, 'wb') + pickle.dump(config, src, 2) + src.close() + copyfile(picFn, picFnTile) + os.remove(picFn) + except: + config.logger = logger + logger.fatal('cannot create the config object %s' % picFn) else: - self.config.logger.debug('wrong resolution for processing configured: ', str(self.config.resolution)) - return False - - def process(self): - if self.tables.checkAotMapIsPresent(): - self.config.timestamp('L2A_Process: resolution '+ str(self.config.resolution) + ' m already processed') - return True - - astr = 'L2A_Process: processing with resolution ' + str(self.config.resolution) + ' m' - self.config.timestamp(astr) - self.config.timestamp('L2A_Process: start of pre processing') - if(self.preprocess() == False): - return False - - if(self.config.resolution > 10): - self.config.timestamp('L2A_Process: start of Scene Classification') - sc = L2A_SceneClass(self.config, self.tables) - self.config.tracer.info('Performing Scene Classification with resolution %d m', self.config.resolution) - self.config.logger.info('Performing Scene Classification with resolution %d m', self.config.resolution) - if(sc.process() == False): - return False + tStart = config.tStart + tEstimation = config.tEstimation + try: + f = open(picFnTile, 'rb') + config = pickle.load(f) + f.close() + config.tStart = tStart + config.tEstimation = tEstimation + f = open(picFnTile, 'wb') + pickle.dump(config, f, 2) + f.close() + except: + config.logger = logger + logger.fatal('cannot update the config object %s with new time estimation' % f) + + return L2A_TILES - if(self.scOnly == False): - self.config.timestamp('L2A_Process: start of Atmospheric Correction') - self.config.tracer.info('Performing Atmospheric Correction with resolution %d m', self.config.resolution) - self.config.logger.info('Performing Atmospheric Correction with resolution %d m', self.config.resolution) - ac = L2A_AtmCorr(self.config, self.tables) - if(ac.process() == False): - return False - self.config.timestamp('L2A_Process: start of post processing') - if(self.postprocess() == False): +def postprocess(config): + HTML = 'HTML' + SEN2COR = 'SEN2COR' + REPORT_XML = '_report.xml' + + basename = os.path.basename(config.L2A_UP_DIR) + fileID = basename + fnOut = os.path.join(config.L2A_UP_DIR, HTML, SEN2COR + REPORT_XML) + filelist = sorted(os.listdir(config.logDir)) + for filename in filelist: + if((fileID in filename) == False): + continue + try: + fnIn = os.path.join(config.logDir, filename) + f = open(fnIn, 'a') + f.write('') + f.close() + copyfile(fnIn, fnOut) + return True + except: + config.logger.error('cannot copy report file: %s' % fnIn) return False - - return True - - def preprocess(self): - self.config.tracer.info('Pre-processing with resolution %d m', self.config.resolution) - self.config.logger.info('Pre-processing with resolution %d m', self.config.resolution) - self.config.tTotal = 0 - # this is to check the config for the L2A_AtmCorr in ahead. - # This has historical reasons due to ATCOR porting. - # Should be moved to the L2A_Config for better design: - if(self.scOnly == False): - dummy = L2A_AtmCorr(self.config, None) - dummy.checkConfiguration() - - # validate the meta data: - xp = L2A_XmlParser(self.config, 'UP1C') - xp.export() - xp.validate() - xp = L2A_XmlParser(self.config, 'T1C') - xp.export() - xp.validate() - xp = L2A_XmlParser(self.config, 'DS1C') - xp.export() - xp.validate() - - if(self.tables.importBandList() == False): - return False - return True - - - def postprocess(self): - self.config.tracer.info('Post-processing with resolution %d m', self.config.resolution) - self.config.logger.info('Post-processing with resolution %d m', self.config.resolution) - - res = self.tables.exportBandList() - self.tables.postprocess() - if(self.config.resolution == 60): - self.config.postprocess() - - # validate the meta data: - xp = L2A_XmlParser(self.config, 'UP2A') - xp.validate() - xp = L2A_XmlParser(self.config, 'T2A') - xp.validate() - xp = L2A_XmlParser(self.config, 'DS2A') - xp.validate() - return res - - - def resetProcessingStatus(self): - self._processed60 = False - self._processed20 = False - self._processed10 = False - return + config.logger.error('report file not present: %s' % fnOut) + return False def main(args=None): import argparse - config = L2A_Config() + + config = L2A_Config(None) descr = config.processorName +'. Version: '+ config.processorVersion + ', created: '+ config.processorDate + \ ', supporting Level-1C product version: ' + config.productVersion + '.' parser = argparse.ArgumentParser(description=descr) parser.add_argument('directory', help='Directory where the Level-1C input files are located') - parser.add_argument('--resolution', type=int, choices=[10, 20, 60], help='Target resolution, must be 10, 20 or 60 [m]') - parser.add_argument('--sc_only', action='store_true', help='Performs only the scene classification at 60m resolution') - parser.add_argument('--profile', action='store_true', help='Profiles the processor\'s performance') + parser.add_argument('--resolution', type=int, choices=[10, 20, 60], help='Target resolution, can be 10, 20 or 60m. If omitted, all resolutions will be processed') + parser.add_argument('--sc_only', action='store_true', help='Performs only the scene classification at 60 or 20m resolution') + parser.add_argument('--cr_only', action='store_true', help='Performs only the creation of the L2A product tree, no processing') +# parser.add_argument('--profile', action='store_true', help='Profiles the processor\'s performance') + parser.add_argument('--refresh', action='store_true', help='Performs a refresh of the persistent configuration before start') + parser.add_argument('--GIP_L2A', help='Select the user GIPP') + parser.add_argument('--GIP_L2A_SC', help='Select the scene classification GIPP') + parser.add_argument('--GIP_L2A_AC', help='Select the atmospheric correction GIPP') args = parser.parse_args() - + # SIITBX-49: directory should not end with '/': directory = args.directory - if directory[-1] == '/': + if directory[-1] == '/' or directory[-1] == '\\': directory = directory[:-1] # check if directory argument starts with a relative path. If not, expand: if(os.path.isabs(directory)) == False: cwd = os.getcwd() directory = os.path.join(cwd, directory) - elif os.path.exists(args.directory) == False: - stderrWrite('directory "%s" does not exist\n.' % args.directory) - return False + + directory = os.path.normpath(directory) + if os.path.exists(directory) == False: + stderrWrite('directory "%s" does not exist\n.' % directory) + return FAILURE + + # check if directory argument contains a tile. If yes, split the tile from path, + # put the tile in the config object created below as selected tile, + # create the new path for the user directory. + selectedTile = None + if 'GRANULE' in directory: + dirname, selectedTile = os.path.split(directory) + directory = os.path.dirname(dirname) - processor = L2A_Process(directory) - processor.scOnly = args.sc_only - + test = os.path.basename(directory) + S2A_L1C_mask = 'S2A_????_???_???L1C*' + if(fnmatch.fnmatch(test, S2A_L1C_mask) == False): + stderrWrite('L1C user product directory must match the following mask: %s\n' % S2A_L1C_mask) + stderrWrite('but is: %s\n' % test) + return FAILURE + + config = L2A_Config(None, directory) HelloWorld = config.processorName +', '+ config.processorVersion +', created: '+ config.processorDate stdoutWrite('\n%s started ...\n' % HelloWorld) - tStart = time() - S2A_mask = 'S2A_*' - # next statement creates L2A product Structure: - config.initLogAndTrace() - config.readPreferences() - tiles = config.createL2A_UserProduct() - for tile in tiles: - if(fnmatch.fnmatch(tile, S2A_mask) == False): - continue - - processor.resetProcessingStatus() - config.initLogAndTrace() - config.tracer.info(HelloWorld) - config.logger.info(HelloWorld) -# config.calcEarthSunDistance2(tile) - if args.resolution == None: - resolution = 60 - else: - resolution = args.resolution - - config.resolution = resolution - config.setTimeEstimation(resolution) - config.logger.debug('Module L2A_Process initialized') - - if(args.profile == True): - import cProfile, pstats, StringIO - pr = cProfile.Profile() - pr.enable() - result = processor.selectAndProcess(tile) - pr.disable() - s = StringIO.StringIO() - sortby = 'cumulative' - ps = pstats.Stats(pr, stream=s).sort_stats(sortby).print_stats(.25, 'L2A_') - ps.print_stats() - profile = s.getvalue() - s.close() - with open(os.environ['SEN2COR_HOME'] + '/log/profile', 'w') as textFile: - textFile.write(profile) - textFile.close() - else: - result = processor.selectAndProcess(tile) - if(result == False): - stderrWrite('Application terminated with errors, see log file and traces.\n') - return False - - tMeasure = time() - tStart - config.writeTimeEstimation(resolution, tMeasure) +# if(args.profile == True): +# import cProfile, pstats, StringIO +# pr = cProfile.Profile() +# pr.enable() + + if args.resolution == None: + resolution = 0 + else: + resolution = args.resolution + + # create and initialize the base log system: + dirname, basename = os.path.split(directory) + L2A_UP_ID = basename[:4] + 'USER' + basename[8:] + L2A_UP_ID = L2A_UP_ID.replace('1C_', '2A_') + + logName = L2A_UP_ID + '_report.xml' + logDir = config.logDir + logLevel = config.logLevel + fnLog = os.path.join(logDir, logName) + if not os.path.exists(logDir): + os.mkdir(logDir) + + try: + f = open(config.processingStatusFn, 'w') + f.write('0.0\n') + f.close() + except: + stderrWrite('cannot create process status file: %s\n' % config.processingStatusFn) + return FAILURE + try: + f = open(fnLog, 'w') + f.write('\n') + f.write('\n') + f.close() + except: + stderrWrite('cannot update the report file: %s\n' % fnLog) + return FAILURE + + # Just a normal logger + logger = logging.getLogger('sen2cor') + handler = logging.FileHandler(fnLog) + handler.setFormatter(formatter) + logger.addHandler(handler) + logger.level = getLevel(logLevel) + logger.info('logging for the main process initialized') + config.logger = logger + + CFG = 'cfg' + if args.GIP_L2A != None: + config._configFn = os.path.join(config.home, CFG, args.GIP_L2A) + + if args.GIP_L2A_SC != None: + config.configSC = os.path.join(config.home, CFG, args.GIP_L2A_SC) + + if args.GIP_L2A_AC != None: + config.configAC = os.path.join(config.home , CFG, args.GIP_L2A_AC) + + config.workDir = directory + config.resolution = resolution + config.scOnly = args.sc_only + config.crOnly = args.cr_only + config.refresh = args.refresh + config.selectedTile = selectedTile + result = config.readPreferences() + if result == False: + return FAILURE + + config.tStart = time() + config.setTimeEstimation(resolution) + + L2A_TILES = updateTiles(config) + if L2A_TILES == False: + return FAILURE + + result = SUCCESS + + if config.crOnly == False: + scheduler = L2A_Schedule(config, L2A_TILES) + result = scheduler.sync() + config.logger = logger + # validate the meta data on user product level: + try: + xp = L2A_XmlParser(config, 'UP2A') + xp.validate() + except: + logger.error('parsing error for user product') + result = FAILURE + +# if(args.profile == True): +# pr.disable() +# s = StringIO.StringIO() +# sortby = 'cumulative' +# ps = pstats.Stats(pr, stream=s).sort_stats(sortby).print_stats(.25, 'L2A_') +# ps.print_stats() +# profile = s.getvalue() +# s.close() +# with open(os.path.join(getScriptDir(), 'log', 'profile'), 'w') as textFile: +# textFile.write(profile) +# textFile.close() + else: + config.logger = logger + #Create the manifest.safe (L2A) + mn = L2A_Manifest(config) + mn.generate(config.L2A_UP_DIR, config.L2A_MANIFEST_SAFE) + try: + xp = L2A_XmlParser(config, 'Manifest') + xp.validate() + except: + logger.error('parsing error for manifest') + result = FAILURE + + if postprocess(config) == False: + result = FAILURE + + if result == FAILURE: + stdoutWrite('Progress[%]: 100.00 : Application terminated with at least one error.\n') + else: + stdoutWrite('Progress[%]: 100.00 : Application terminated successfully.\n') + + return result - stdoutWrite('\nApplication terminated successfully.\n') - return True if __name__ == "__main__": - sys.exit(main() or 0) + if platform.system() == 'Windows': + multiprocessing.freeze_support() + sys.exit(main()) diff --git a/sen2cor/L2A_SceneClass.py b/sen2cor/L2A_SceneClass.py old mode 100755 new mode 100644 index 8a12e2e..27c5adf --- a/sen2cor/L2A_SceneClass.py +++ b/sen2cor/L2A_SceneClass.py @@ -1 +1 @@ -#!/usr/bin/env python import os import sys from numpy import * from scipy.ndimage.morphology import * from scipy.ndimage.interpolation import * from scipy.ndimage.filters import median_filter from time import time from lxml import etree, objectify from L2A_Borg import Borg from L2A_Config import L2A_Config from L2A_Library import * from L2A_Tables import L2A_Tables from L2A_XmlParser import L2A_XmlParser set_printoptions(precision = 7, suppress = True) class L2A_SceneClass(Borg): def __init__(self, config, tables): self._notClassified = 100 self._notSnow = 50 self._config = config self._tables = tables self.tables.acMode = False x,y,n = tables.getBandSize(self.tables.B02) self.classificationMask = ones([x,y], uint16) * self._notClassified self.confidenceMaskSnow = zeros_like(tables.getBand(self.tables.B02)) self.confidenceMaskCloud = zeros_like(tables.getBand(self.tables.B02)) self._meanShadowDistance = 0 self.filter = None self.LOWEST = 0.000001 self._noData = self.config.getInt('Scene_Classification/Classificators', 'NO_DATA') self._saturatedDefective = self.config.getInt('Scene_Classification/Classificators', 'SATURATED_DEFECTIVE') self._darkFeatures = self.config.getInt('Scene_Classification/Classificators', 'DARK_FEATURES') self._cloudShadows = self.config.getInt('Scene_Classification/Classificators', 'CLOUD_SHADOWS') self._vegetation = self.config.getInt('Scene_Classification/Classificators', 'VEGETATION') self._bareSoils = self.config.getInt('Scene_Classification/Classificators', 'BARE_SOILS') self._water = self.config.getInt('Scene_Classification/Classificators', 'WATER') self._lowProbaClouds = self.config.getInt('Scene_Classification/Classificators', 'LOW_PROBA_CLOUDS') self._medProbaClouds = self.config.getInt('Scene_Classification/Classificators', 'MEDIUM_PROBA_CLOUDS') self._highProbaClouds = self.config.getInt('Scene_Classification/Classificators', 'HIGH_PROBA_CLOUDS') self._thinCirrus = self.config.getInt('Scene_Classification/Classificators', 'THIN_CIRRUS') self._snowIce = self.config.getInt('Scene_Classification/Classificators', 'SNOW_ICE') self.config.logger.debug('Module L2A_SceneClass initialized') self._processingStatus = True self._sumPercentage = 0.0 def assignClassifcation(self, arr, treshold, classification): cm = self.classificationMask cm[(arr == treshold) & (cm == self._notClassified)] = classification self.confidenceMaskCloud[(cm == classification)] = 0 return def get_config(self): return self._config def get_tables(self): return self._tables def set_config(self, value): self._config = value def set_tables(self, value): self._tables = value def del_config(self): del self._config def del_tables(self): del self._tables config = property(get_config, set_config, del_config, "config's docstring") tables = property(get_tables, set_tables, del_tables, "tables's docstring") def preprocess(self): B03 = self.tables.getBand(self.tables.B03) B8A = self.tables.getBand(self.tables.B8A) self.classificationMask[(B03==0) & (B8A==0)] = self._noData return def postprocess(self): if(self._processingStatus == False): return False CM = self.classificationMask CM[(CM == self._notClassified)] = self._saturatedDefective value = self.config.getInt('Scene_Classification/Calibration', 'Median_Filter') if(value > 0): CM = median_filter(CM, value) self.config.logger.info('Filtering output with level: ' + str(value)) self.config.logger.info('Storing final Classification Mask') self.tables.setBand(self.tables.SCL,(CM).astype(uint8)) self.config.logger.info('Storing final Snow Confidence Mask') self.tables.setBand(self.tables.SNW,(self.confidenceMaskSnow*100+0.5).astype(uint8)) self.config.logger.info('Storing final Cloud Confidence Mask') self.tables.setBand(self.tables.CLD,(self.confidenceMaskCloud*100+0.5).astype(uint8)) # add L2A quality info on tile level: self.updateQualityIndicators(1, 'T2A') # add L2A quality info on user level: xp = L2A_XmlParser(self.config, 'DS2A') ti = xp.getTree('Image_Data_Info', 'Tiles_Information') nrTilesProcessed = len(ti.Tile_List.Tile) self.updateQualityIndicators(nrTilesProcessed, 'UP2A') def __exit__(self): sys.exit(-1) def __del__(self): self.config.logger.info('Module L2A_SceneClass deleted') def L2A_CSND_1_1(self): # Step 1a: Brightness threshold on red (Band 4) T1_B04 = self.config.getFloat('Scene_Classification/Thresholds', 'T1_B04') T2_B04 = self.config.getFloat('Scene_Classification/Thresholds', 'T2_B04') T1_B08 = 0.04 T2_B08 = 0.15 B04 = self.tables.getBand(self.tables.B04) B08 = self.tables.getBand(self.tables.B8A) self.confidenceMaskCloud = clip(B04, T1_B04, T2_B04) #self.confidenceMaskCloud = ((self.confidenceMaskCloud - T1_B04)/(T2_B04-T1_B04))**2 self.confidenceMaskCloud = ((self.confidenceMaskCloud - T1_B04)/(T2_B04-T1_B04)) CM = self.classificationMask CM[(B04T1_B08) & (B08 0 B03 = self.tables.getBand(self.tables.B03) B11 = self.tables.getBand(self.tables.B11) NDSI = (B03 - B11) / maximum((B03 + B11), self.LOWEST) CMC = clip(NDSI, T1_NDSI_CLD, T2_NDSI_CLD) CMC = ((CMC - T1_NDSI_CLD)/(T2_NDSI_CLD-T1_NDSI_CLD)) CM = self.classificationMask CM[(CMC==0)] = self._notClassified self.confidenceMaskCloud *= CMC self.config.tracer.debug(statistics(self.confidenceMaskCloud, 'CM Cloud step 1.2')) return def L2A_CSND_2_0(self): return def L2A_CSND_2_1(self): # Snow filter 1: Normalized Difference Snow Index (NDSI) T1_NDSI_SNW = self.config.getFloat('Scene_Classification/Thresholds', 'T1_NDSI_SNW') T2_NDSI_SNW = self.config.getFloat('Scene_Classification/Thresholds', 'T2_NDSI_SNW') B03 = self.tables.getBand(self.tables.B03) B11 = self.tables.getBand(self.tables.B11) NDSI = (B03 - B11) / maximum((B03 + B11), self.LOWEST) CMS = clip(NDSI, T1_NDSI_SNW, T2_NDSI_SNW) CMS = ((CMS - T1_NDSI_SNW)/(T2_NDSI_SNW-T1_NDSI_SNW)) CM = self.classificationMask CM[(CMS == 0) & (CM == self._notClassified)] = self._notSnow self.confidenceMaskSnow = CMS return def L2A_CSND_2_2(self): # Snow filter 2: Band 8 thresholds T1_B8A = self.config.getFloat('Scene_Classification/Thresholds', 'T1_B8A') T2_B8A = self.config.getFloat('Scene_Classification/Thresholds', 'T2_B8A') B8A = self.tables.getBand(self.tables.B8A) CMS = clip(B8A, T1_B8A, T2_B8A) CMS = ((CMS - T1_B8A) / (T2_B8A - T1_B8A)) CM = self.classificationMask CM[(CMS == 0) & (CM == self._notClassified)] = self._notSnow self.confidenceMaskSnow *= CMS return def L2A_CSND_2_3(self): # Snow filter 3: Band 2 thresholds T1_B02 = self.config.getFloat('Scene_Classification/Thresholds', 'T1_B02') T2_B02 = self.config.getFloat('Scene_Classification/Thresholds', 'T2_B02') B02 = self.tables.getBand(self.tables.B02) CMS = clip(B02, T1_B02, T2_B02) CMS = ((CMS - T1_B02) / (T2_B02 - T1_B02)) CM = self.classificationMask CM[(CMS == 0) & (CM == self._notClassified)] = self._notSnow self.confidenceMaskSnow *= CMS return def L2A_CSND_2_4(self): # Snow filter 4: Ratio Band 2 / Band 4 T1_R_B02_B04 = self.config.getFloat('Scene_Classification/Thresholds', 'T1_R_B02_B04') T2_R_B02_B04 = self.config.getFloat('Scene_Classification/Thresholds', 'T2_R_B02_B04') B02 = self.tables.getBand(self.tables.B02) B04 = self.tables.getBand(self.tables.B04) RB02_B04 = B02 / maximum(B04,self.LOWEST) CMS = clip(RB02_B04, T1_R_B02_B04, T2_R_B02_B04) CMS = ((CMS - T1_R_B02_B04) / (T2_R_B02_B04 - T1_R_B02_B04)) CM = self.classificationMask CM[(CMS == 0) & (CM == self._notClassified)] = self._notSnow self.confidenceMaskSnow *= CMS CM = self.classificationMask return def L2A_CSND_2_5(self): # Snow filter 5: snow boundary zones T1_SNOW = self.config.getFloat('Scene_Classification/Thresholds', 'T1_SNOW') T2_SNOW = self.config.getFloat('Scene_Classification/Thresholds', 'T2_SNOW') B12 = self.tables.getBand(self.tables.B12) CM = self.classificationMask CMS = self.confidenceMaskSnow CMS[B12 > T2_SNOW] = 0 CM[(B12 > T2_SNOW) & (CM == self._notClassified)] = self._notSnow CM[CM == self._notClassified] = self._snowIce # important, if classified as snow, this should not become cloud: self.confidenceMaskCloud[CM == self._snowIce] = 0 # release the lock for the non snow classification CM[CM == self._notSnow] = self._notClassified return def L2A_CSND_3(self): # Step 3: Normalized Difference Vegetation Index (NDVI) T1_NDVI = self.config.getFloat('Scene_Classification/Thresholds', 'T1_NDVI') T2_NDVI = self.config.getFloat('Scene_Classification/Thresholds', 'T2_NDVI') T1_B2T = 0.15 B02 = self.tables.getBand(self.tables.B02) B04 = self.tables.getBand(self.tables.B04) B8A = self.tables.getBand(self.tables.B8A) NDVI = (B8A - B04) / maximum((B8A + B04), self.LOWEST) CMC = clip(NDVI, T1_NDVI, T2_NDVI) CMC = ((CMC - T1_NDVI)/(T2_NDVI-T1_NDVI)) CM = self.classificationMask CM[(CMC==1) & (CM == self._notClassified) & (B02 < T1_B2T)] = self._vegetation CMC[(CM== self._vegetation)] = 0 FLT = [(CMC>0) & (CMC < 1.0)] CMC[FLT] = CMC[FLT] * -1 + 1 self.confidenceMaskCloud[FLT] *= CMC[FLT] self.config.tracer.debug(statistics(self.confidenceMaskCloud, 'CM Cloud step 3')) return def L2A_CSND_4(self): # Step 4: Ratio Band 8 / Band 3 for senescing vegetation T1_R_B8A_B03 = self.config.getFloat('Scene_Classification/Thresholds', 'T1_R_B8A_B03') T2_R_B8A_B03 = self.config.getFloat('Scene_Classification/Thresholds', 'T2_R_B8A_B03') B03 = self.tables.getBand(self.tables.B03) B8A = self.tables.getBand(self.tables.B8A) rb8b3 = B8A/maximum(B03,self.LOWEST) CMC = clip(rb8b3, T1_R_B8A_B03, T2_R_B8A_B03) CMC = (CMC - T1_R_B8A_B03) / (T2_R_B8A_B03 - T1_R_B8A_B03) CM = self.classificationMask CM[(CMC==1) & (CM == self._notClassified)] = self._vegetation CMC[(CM== self._vegetation)] = 0 FLT = [(CMC>0) & (CMC < 1.0)] CMC[FLT] = CMC[FLT] * -1 + 1 self.confidenceMaskCloud[FLT] *= CMC[FLT] self.config.tracer.debug(statistics(self.confidenceMaskCloud, 'CM Cloud step 4')) return def L2A_CSND_5_1(self): # Step 5.1: Ratio Band 2 / Band 11 for soils T11_B02 = self.config.getFloat('Scene_Classification/Thresholds', 'T11_B02') # -0.40 T12_B02 = self.config.getFloat('Scene_Classification/Thresholds', 'T12_B02') # 0.46 T11_R_B02_B11 = self.config.getFloat('Scene_Classification/Thresholds', 'T11_R_B02_B11') # 0.55 T12_R_B02_B11 = self.config.getFloat('Scene_Classification/Thresholds', 'T12_R_B02_B11') # 0.80 B02 = self.tables.getBand(self.tables.B02) B11 = self.tables.getBand(self.tables.B11) R_B02_B11 = clip((B02/maximum(B11,self.LOWEST)),0,100) B02_FT = clip(R_B02_B11*T11_B02+T12_B02, 0.15, 0.32) R_B02_B11_GT_T12_R_B02_B11 = where((R_B02_B11 > T12_R_B02_B11) | (B02 > B02_FT), True, False) CM = self.classificationMask CM[(R_B02_B11_GT_T12_R_B02_B11 == False) & (CM == self._notClassified)] = self._bareSoils self.confidenceMaskCloud[CM == self._bareSoils] = 0 R_B02_B11_GT_T11_R_B02_B11_LE_T12_R_B02_B11 = where((R_B02_B11 > T11_R_B02_B11) & (R_B02_B11 < T12_R_B02_B11), True, False) a = 1 / (T12_R_B02_B11 - T11_R_B02_B11) b = -T11_R_B02_B11 * a CMC = self.confidenceMaskCloud FLT = (R_B02_B11_GT_T11_R_B02_B11_LE_T12_R_B02_B11 == True) & (R_B02_B11_GT_T12_R_B02_B11 == False) & (CM == self._notClassified) CMC[FLT] = a * R_B02_B11[FLT] + b self.confidenceMaskCloud[FLT] *= CMC[FLT] self.config.tracer.debug(statistics(self.confidenceMaskCloud, 'CM Cloud step 5.1')) return def L2A_CSND_5_2(self): # Step 5.2: Ratio Band 2 / Band 11 for water bodies, dependent on Band 12 T21_B12 = self.config.getFloat('Scene_Classification/Thresholds', 'T21_B12') # 0.1 T22_B12 = self.config.getFloat('Scene_Classification/Thresholds', 'T22_B12') # -0.09 T21_R_B02_B11 = self.config.getFloat('Scene_Classification/Thresholds', 'T21_R_B02_B11') # 2.0 T22_R_B02_B11 = self.config.getFloat('Scene_Classification/Thresholds', 'T22_R_B02_B11') # 4.0 B02 = self.tables.getBand(self.tables.B02) B11 = self.tables.getBand(self.tables.B11) B12 = self.tables.getBand(self.tables.B12) R_B02_B11 = B02 / maximum(B11,self.LOWEST) B12_FT = clip(R_B02_B11*T21_B12+T22_B12, 0.07, 0.21) R_B02_B11_GT_T22_R_B02_B11 = where((R_B02_B11 > T22_R_B02_B11) & (B12 < B12_FT), True, False) CM = self.classificationMask # this is a reference, no need to reassign CM[(R_B02_B11_GT_T22_R_B02_B11 == True) & (CM == self._notClassified)] = self._water self.confidenceMaskCloud[CM == self._water] = 0 R15_AMB = (R_B02_B11 < T22_R_B02_B11) & (R_B02_B11 >= T21_R_B02_B11) & (B12 < B12_FT) if(R15_AMB.size > 0): a = -1 / (T22_R_B02_B11 - T21_R_B02_B11) b = -T21_R_B02_B11 * a + 1 CMC = a * R_B02_B11[R15_AMB] + b self.confidenceMaskCloud[R15_AMB] *= CMC # second part, modification for improvement of water classification: T_24 = 0.034 B04 = self.tables.getBand(self.tables.B04) DIFF24_AMB = B02-B04 #CM = self.classificationMask F1 = DIFF24_AMB > T_24 CM[F1 & (CM == self._notClassified)] = self._water self.confidenceMaskCloud[F1 & (CM == self._water)] = 0 self.config.tracer.debug(statistics(self.confidenceMaskCloud, 'CM Cloud step 5.2')) return def L2A_CSND_6(self): # Step 6: Ratio Band 8 / Band 11 for rocks and sands in deserts T1_R_B8A_B11 = self.config.getFloat('Scene_Classification/Thresholds', 'T1_R_B8A_B11') T2_R_B8A_B11 = self.config.getFloat('Scene_Classification/Thresholds', 'T2_R_B8A_B11') B8A = self.tables.getBand(self.tables.B8A) B11 = self.tables.getBand(self.tables.B11) R_B8A_B11 = B8A/maximum(B11,self.LOWEST) CMC = clip(R_B8A_B11, T1_R_B8A_B11, T2_R_B8A_B11) CMC = (CMC - T1_R_B8A_B11) / (T2_R_B8A_B11 - T1_R_B8A_B11) self.assignClassifcation(CMC, 0, self._bareSoils) self.confidenceMaskCloud *= CMC self.config.tracer.debug(statistics(self.confidenceMaskCloud, 'CM Cloud step 6')) return def L2A_CSND_7(self): T_CLOUD_LP = self.config.getFloat('Scene_Classification/Thresholds', 'T_CLOUD_LP') T_CLOUD_MP = self.config.getFloat('Scene_Classification/Thresholds', 'T_CLOUD_MP') T_CLOUD_HP = self.config.getFloat('Scene_Classification/Thresholds', 'T_CLOUD_HP') T1_B10 = self.config.getFloat('Scene_Classification/Thresholds', 'T1_B10') T2_B10 = self.config.getFloat('Scene_Classification/Thresholds', 'T2_B10') B02 = self.tables.getBand(self.tables.B02) B10 = self.tables.getBand(self.tables.B10) LPC = self._lowProbaClouds MPC = self._medProbaClouds HPC = self._highProbaClouds CIR = self._thinCirrus CM = self.classificationMask CMC = self.confidenceMaskCloud CM[(CMC > T_CLOUD_LP) & (CMC < T_CLOUD_MP) & (CM == self._notClassified)] = LPC self.config.tracer.debug(statistics(CMC[(CM == LPC)], 'CM LOW_PROBA_CLOUDS')) CM[(CMC >= T_CLOUD_MP) & (CMC < T_CLOUD_HP) & (CM == self._notClassified)] = MPC self.config.tracer.debug(statistics(CMC[(CM == MPC)], 'CM MEDIUM_PROBA_CLOUDS')) CM[(CMC >= T_CLOUD_HP) & (CM == self._notClassified)] = HPC self.config.tracer.debug(statistics(CMC[(CM == HPC)], 'CM HIGH_PROBA_CLOUDS')) CM[(B10 > T1_B10) & (B10 < T2_B10) & (CMC < 0.8) & (B02 < 0.50) & (CM != HPC)] = CIR self.config.tracer.debug(statistics(CMC[(CM == CIR)], 'CM THIN_CIRRUS')) CM[(B10 >= T2_B10) & (CM == self._notClassified)]= MPC self.config.tracer.debug(statistics(CMC[(CM == MPC)], 'CM MEDIUM_PROBA_CLOUDS, step2')) return def L2A_SHD(self): csd1 = self.L2A_CSHD_1() csd2 = self.L2A_CSHD_2() CSP = (csd1 * csd2 > 0) CM = self.classificationMask if(self.tables.hasBand(self.tables.SDW)): T_SDW = self.config.getFloat('Scene_Classification/Thresholds', 'T_SDW') shadow = self.tables.getBand(self.tables.SDW, uint8) tShadow = array(shadow, float32) / 255.0 CM[(CM == self._darkFeatures) & (tShadow > T_SDW) & (CSP == True)] = self._cloudShadows CM[(CM == self._water) & (CSP == True)] = self._cloudShadows else: CM[(CM == self._darkFeatures) & (CSP == True)] = self._cloudShadows CM[(CM == self._water) & (CSP == True)] = self._cloudShadows return def L2A_CSHD_2(self): # Part2: radiometric input: x,y,n = self.tables.getBandSize(2) BX = zeros((6,x,y), float32) BX[0,:,:] = self.tables.getBand(self.tables.B02) BX[1,:,:] = self.tables.getBand(self.tables.B03) BX[2,:,:] = self.tables.getBand(self.tables.B04) BX[3,:,:] = self.tables.getBand(self.tables.B8A) BX[4,:,:] = self.tables.getBand(self.tables.B11) BX[5,:,:] = self.tables.getBand(self.tables.B12) RV_MEAN = array([0.0696000, 0.0526667, 0.0537708, 0.0752000, 0.0545000, 0.0255000], dtype=float32) distance = zeros((6,x,y), float32) for i in range(0,6): distance[i,:,:] = abs(BX[i,:,:] - RV_MEAN[i]) T_B02_B12 = self.config.getFloat('Scene_Classification/Thresholds', 'T_B02_B12') msd = mean(distance, axis=0) msd = median_filter(msd, 3) msd = 1.0 - msd T0 = 1.0 - T_B02_B12 msd[msd < T0] = 0.0 return msd def L2A_CSHD_1(self): #Part1 geometric input: y = self.confidenceMaskCloud.shape[0] x = self.confidenceMaskCloud.shape[1] cloud_mask = self.confidenceMaskCloud filt_b = zeros([y,x], float32) mask_shadow = zeros([y,x], float32) # Read azimuth and elevation solar angles solar_azimuth = -int(self.config.solaz + 0.5) solar_elevation = int(90.0 - self.config.solze + 0.5) # Median Filter 7x7 cloud_mask = median_filter(cloud_mask, (7,7)) # Dilatation cross-shape operator shape = generate_binary_structure(2,1) cloud_mask = binary_dilation(cloud_mask > 0.33, shape).astype(cloud_mask.dtype) # Create cloud height distribution (for 30m pixel resolution) distr_clouds = concatenate([reverse(1. / (1.0 + (arange(51) / 30.0) ** (2 * 5))), 1 / (1.0 + (arange(150) / 90.0) ** (2 * 5))]) # Create projected cloud shadow distribution npts_shad = distr_clouds.size / tan(solar_elevation * pi / 180.) factor = npts_shad/distr_clouds.size # SIITBX-46: to suppress unwanted user warning for zoom: import warnings warnings.filterwarnings('ignore') distr_shad = zoom(distr_clouds, factor) # Create filter for convolution (depends on azimuth solar angle) ys = float(y/2.0) xs = float(x/2.0) ds = float(distr_shad.size/2.0) filt_b[0:distr_shad.size,0] = distr_shad # keep the original value of first distr_shad pixel # and mark first distr_shad pixel with -1: filt_b0 = distr_shad[0] filt_b[0,0]= -1.0 filt_b[0,1]= -1.0 # Place into center for rotation, subtract 90 degree: filt_b = roll(filt_b, int(ys-ds), axis=0) filt_b = roll(filt_b, int(xs), axis=1) filt_b = reverse(rotate(filt_b, solar_azimuth, reshape=False, order=0)) # identify first distr_shad pixel after rotation and keep these values # for retranslation. Multiple entries can occurr due to rotation, # so take the first one: y0, x0 = where(filt_b < 0.0) if(y0.size) > 1: y0 = min(y0) if(x0.size) > 1: x0 = min(x0) filt_b[filt_b < 0.0] = filt_b0 y0 = y0.astype(int) x0 = x0.astype(int) # Now perform the convolution: fft1 = fft.rfft2(cloud_mask) fft2 = fft.rfft2(filt_b) shadow_prob = fft.irfft2(fft1 * fft2) # Move back to corners: shadow_prob = roll(shadow_prob, y0, axis=0) shadow_prob = roll(shadow_prob, x0, axis=1) CM = self.classificationMask # Shadow_prob can be smaller as CM, correct this: dy = CM.shape[0] - shadow_prob.shape[0] dx = CM.shape[1] - shadow_prob.shape[1] if(dy > 0): b = zeros([x,dy],float32) shadow_prob = concatenate((shadow_prob, b), axis=0) elif(dx > 0): b = zeros([y,dx],float32) shadow_prob = concatenate((shadow_prob, b), axis=1) # Remove data outside of interest: shadow_prob[CM == self._noData] = 0 # Normalisation: shadow_prob = shadow_prob * (1.0 / maximum(shadow_prob.max(), 1.0)) # Remove cloud_mask from Shadow probability: shadow_prob = maximum((shadow_prob - cloud_mask), 0) return shadow_prob def L2A_DarkVegetationRecovery(self): B04 = self.tables.getBand(self.tables.B04) B8A = self.tables.getBand(self.tables.B8A) NDVI = (B8A - B04) / maximum((B8A + B04), self.LOWEST) T2_NDVI = self.config.getFloat('Scene_Classification/Thresholds', 'T2_NDVI') F1 = NDVI > T2_NDVI CM = self.classificationMask CM[F1 & (CM == self._darkFeatures)] = self._vegetation CM[F1 & (CM == self._notClassified)] = self._vegetation T2_R_B8A_B03 = self.config.getFloat('Scene_Classification/Thresholds', 'T2_R_B8A_B03') B03 = self.tables.getBand(self.tables.B03) rb8b3 = B8A/maximum(B03,self.LOWEST) F2 = rb8b3 > T2_R_B8A_B03 CM[F2 & (CM == self._darkFeatures)] = self._vegetation CM[F2 & (CM == self._notClassified)] = self._vegetation def L2A_WaterPixelRecovery(self): B02 = self.tables.getBand(self.tables.B02) B11 = self.tables.getBand(self.tables.B11) R_B02_B11 = B02/maximum(B11,self.LOWEST) T3 = 4.0 F3 = R_B02_B11 > T3 CM = self.classificationMask CM[F3 & (CM == self._darkFeatures)] = self._water CM[F3 & (CM == self._notClassified)] = self._water def L2A_SoilRecovery(self): T4 = 0.65 B02 = self.tables.getBand(self.tables.B02) B11 = self.tables.getBand(self.tables.B11) R_B02_B11 = B02/maximum(B11,self.LOWEST) F4 = R_B02_B11 < T4 CM = self.classificationMask CM[F4 & (CM == self._darkFeatures)] = self._bareSoils def average(self, oldVal, classifier, count): newVal = self.getClassificationPercentage(classifier) result = (float32(oldVal) * float32(count) + float32(newVal)) / float32(count + 1.0) return format('%f' % result) def getClassificationPercentage(self, classificator): cm = self.classificationMask if(classificator == self._noData): # count all for no data pixels: nrEntriesTotal = float32(size(cm)) nrEntriesClassified = float32(size(cm[cm == self._noData])) self._sumPercentage = 0.0 else: # count percentage of classified pixels: nrEntriesTotal = float32(size(cm[cm != self._noData])) nrEntriesClassified = float32(size(cm[cm == classificator])) fraction = nrEntriesClassified / nrEntriesTotal percentage = fraction * 100 self._sumPercentage += percentage self.config.logger.info('Classificator: %d' % classificator) self.config.logger.info('Percentage: %f' % percentage) self.config.logger.info('Sum Percentage: %f' % self._sumPercentage) if(classificator == self._noData): self._sumPercentage = 0.0 percentageStr = format('%f' % percentage) return percentageStr def updateQualityIndicators(self, nrTilesProcessed, metadata): xp = L2A_XmlParser(self.config, metadata) try: # Node exists and has to be updated: if(metadata == 'T2A'): icqi = objectify.Element('L2A_Image_Content_QI') else: icqi = objectify.Element('Image_Content_QI') icqi.NODATA_PIXEL_PERCENTAGE = self.getClassificationPercentage(self._noData) icqi.SATURATED_DEFECTIVE_PIXEL_PERCENTAGE = self.getClassificationPercentage(self._saturatedDefective) icqi.DARK_FEATURES_PERCENTAGE = self.getClassificationPercentage(self._darkFeatures) icqi.CLOUD_SHADOW_PERCENTAGE = self.getClassificationPercentage(self._cloudShadows) icqi.VEGETATION_PERCENTAGE = self.getClassificationPercentage(self._vegetation) icqi.BARE_SOILS_PERCENTAGE = self.getClassificationPercentage(self._bareSoils) icqi.WATER_PERCENTAGE = self.getClassificationPercentage(self._water) icqi.LOW_PROBA_CLOUDS_PERCENTAGE = self.getClassificationPercentage(self._lowProbaClouds) icqi.MEDIUM_PROBA_CLOUDS_PERCENTAGE = self.getClassificationPercentage(self._medProbaClouds) icqi.HIGH_PROBA_CLOUDS_PERCENTAGE = self.getClassificationPercentage(self._highProbaClouds) icqi.THIN_CIRRUS_PERCENTAGE = self.getClassificationPercentage(self._thinCirrus) icqi.SNOW_ICE_PERCENTAGE = self.getClassificationPercentage(self._snowIce) icqi.RADIATIVE_TRANSFER_ACCURAY = 0.0 icqi.WATER_VAPOUR_RETRIEVAL_ACCURACY = 0.0 icqi.AOT_RETRIEVAL_ACCURACY = 0.0 except: # Node must be created: if(metadata == 'T2A'): icqi = objectify.Element('L2A_Image_Content_QI') else: icqi = objectify.Element('Image_Content_QI') icqi.NODATA_PIXEL_PERCENTAGE = self.getClassificationPercentage(self._noData) icqi.SATURATED_DEFECTIVE_PIXEL_PERCENTAGE = self.getClassificationPercentage(self._saturatedDefective) icqi.DARK_FEATURES_PERCENTAGE = self.getClassificationPercentage(self._darkFeatures) icqi.CLOUD_SHADOW_PERCENTAGE = self.getClassificationPercentage(self._cloudShadows) icqi.VEGETATION_PERCENTAGE = self.getClassificationPercentage(self._vegetation) icqi.BARE_SOILS_PERCENTAGE = self.getClassificationPercentage(self._bareSoils) icqi.WATER_PERCENTAGE = self.getClassificationPercentage(self._water) icqi.LOW_PROBA_CLOUDS_PERCENTAGE = self.getClassificationPercentage(self._lowProbaClouds) icqi.MEDIUM_PROBA_CLOUDS_PERCENTAGE = self.getClassificationPercentage(self._medProbaClouds) icqi.HIGH_PROBA_CLOUDS_PERCENTAGE = self.getClassificationPercentage(self._highProbaClouds) icqi.THIN_CIRRUS_PERCENTAGE = self.getClassificationPercentage(self._thinCirrus) icqi.SNOW_ICE_PERCENTAGE = self.getClassificationPercentage(self._snowIce) icqi.RADIATIVE_TRANSFER_ACCURAY = 0.0 icqi.WATER_VAPOUR_RETRIEVAL_ACCURACY = 0.0 icqi.AOT_RETRIEVAL_ACCURACY = 0.0 if(metadata == 'T2A'): qii = xp.getRoot('Quality_Indicators_Info') qii.insert(1, icqi) else: qii = xp.getRoot('L2A_Quality_Indicators_Info') qii.append(icqi) xp.export() def process(self): ts = time.time() self.config.timestamp('Pre process ') self.preprocess() self.config.timestamp('L2A_SC init ') self.L2A_CSND_1_1() self.config.timestamp('L2A_CSND_1_1 ') self.L2A_CSND_1_2() self.config.timestamp('L2A_CSND_1_2 ') if(self.tables.sceneCouldHaveSnow() == True): self.config.logger.info('Snow probality, detection will be performed') self.L2A_CSND_2_0() self.config.timestamp('L2A_CSND_2_0 ') self.L2A_CSND_2_1() self.config.timestamp('L2A_CSND_2_1 ') self.L2A_CSND_2_2() self.config.timestamp('L2A_CSND_2_2 ') self.L2A_CSND_2_3() self.config.timestamp('L2A_CSND_2_3 ') self.L2A_CSND_2_4() self.config.timestamp('L2A_CSND_2_4 ') self.L2A_CSND_2_5() self.config.timestamp('L2A_CSND_2_5 ') else: self.config.logger.info('Now snow probality, detection will be ignored') self.L2A_CSND_3() self.config.timestamp('L2A_CSND_3 ') self.L2A_CSND_4() self.config.timestamp('L2A_CSND_4 ') self.L2A_CSND_5_1() self.config.timestamp('L2A_CSHD_5_1 ') self.L2A_CSND_5_2() self.config.timestamp('L2A_CSND_5_2 ') self.L2A_CSND_6() self.config.timestamp('L2A_CSND_6 ') self.L2A_CSND_7() self.config.timestamp('L2A_CSND_7 ') self.L2A_SHD() self.config.timestamp('L2A_SHD ') self.L2A_SoilRecovery() self.config.timestamp('Soil recovery') self.L2A_DarkVegetationRecovery() self.config.timestamp('DV recovery ') self.L2A_WaterPixelRecovery() self.config.timestamp('WP recovery ') self.postprocess() self.config.timestamp('Post process ') tDelta = time.time() - ts self.config.logger.info('Procedure L2A_SceneClass overall time [s]: %0.3f' % tDelta) if(self.config.traceLevel == 'DEBUG'): stdoutWrite('Procedure L2A_SceneClass, overall time[s]: %0.3f.\n' % tDelta) return True \ No newline at end of file +#!/usr/bin/env python from numpy import * from scipy.ndimage.morphology import * from scipy.ndimage.interpolation import * from scipy.ndimage.filters import median_filter from lxml import objectify from L2A_Library import * from L2A_XmlParser import L2A_XmlParser from multiprocessing import Lock import cPickle as pickle import os l = Lock() set_printoptions(precision = 7, suppress = True) class L2A_SceneClass(object): def __init__(self, config, tables): self._notClassified = 100 self._notSnow = 50 self._config = config self._tables = tables self._logger = config.logger self.tables.acMode = False x,y,n = tables.getBandSize(self.tables.B02) self.classificationMask = ones([x,y], uint16) * self._notClassified self.confidenceMaskSnow = zeros_like(tables.getBand(self.tables.B02)) self.confidenceMaskCloud = zeros_like(tables.getBand(self.tables.B02)) self._meanShadowDistance = 0 self.filter = None self.LOWEST = 0.000001 self._noData = self.config.noData self._saturatedDefective = self.config.saturatedDefective self._darkFeatures = self.config.darkFeatures self._cloudShadows = self.config.cloudShadows self._vegetation = self.config.vegetation self._bareSoils = self.config.bareSoils self._water = self.config.water self._lowProbaClouds = self.config.lowProbaClouds self._medProbaClouds = self.config.medProbaClouds self._highProbaClouds = self.config.highProbaClouds self._thinCirrus = self.config.thinCirrus self._snowIce = self.config.snowIce self.logger.debug('Module L2A_SceneClass initialized') self._processingStatus = True self._sumPercentage = 0.0 def assignClassifcation(self, arr, treshold, classification): cm = self.classificationMask cm[(arr == treshold) & (cm == self._notClassified)] = classification self.confidenceMaskCloud[(cm == classification)] = 0 return def get_logger(self): return self._logger def set_logger(self, value): self._logger = value def del_logger(self): del self._logger def get_config(self): return self._config def get_tables(self): return self._tables def set_config(self, value): self._config = value def set_tables(self, value): self._tables = value def del_config(self): del self._config def del_tables(self): del self._tables tables = property(get_tables, set_tables, del_tables, "tables's docstring") config = property(get_config, set_config, del_config, "config's docstring") logger = property(get_logger, set_logger, del_logger, "logger's docstring") def preprocess(self): B03 = self.tables.getBand(self.tables.B03) B8A = self.tables.getBand(self.tables.B8A) self.classificationMask[(B03==0) & (B8A==0)] = self._noData return def postprocess(self): if(self._processingStatus == False): return False CM = self.classificationMask CM[(CM == self._notClassified)] = self._saturatedDefective value = self.config.medianFilter if(value > 0): CM = median_filter(CM, value) self.logger.info('Filtering output with level: ' + str(value)) self.logger.info('Storing final Classification Mask') self.tables.setBand(self.tables.SCL,(CM).astype(uint8)) self.logger.info('Storing final Snow Confidence Mask') self.tables.setBand(self.tables.SNW,(self.confidenceMaskSnow*100+0.5).astype(uint8)) self.logger.info('Storing final Cloud Confidence Mask') self.tables.setBand(self.tables.CLD,(self.confidenceMaskCloud*100+0.5).astype(uint8)) try: # add L2A quality info on tile level: self.updateQualityIndicators(1, 'T2A') # add L2A quality info on user level: xp = L2A_XmlParser(self.config, 'DS2A') ti = xp.getTree('Image_Data_Info', 'Tiles_Information') nrTilesProcessed = len(ti.Tile_List.Tile) self.updateQualityIndicators(nrTilesProcessed, 'UP2A') except: stdoutWrite('error in updating quality indicators\n') self.logger.error('error in updating quality indicators') GRANULE = 'GRANULE' L2A_TILE_ID = os.path.join(self.config.L2A_UP_DIR, GRANULE, self.config.L2A_TILE_ID) picFn = os.path.join(L2A_TILE_ID,'configPic.p') self.config.logger = None try: f = open(picFn, 'wb') pickle.dump(self.config, f, 2) f.close() self.config.logger = self.logger except: self.config.logger = self.logger self.logger.fatal('cannot update configuration' % picFn) return def __exit__(self): sys.exit(-1) def __del__(self): self.logger.info('Module L2A_SceneClass deleted') def L2A_CSND_1_1(self): # Step 1a: Brightness threshold on red (Band 4) T1_B04 = self.config.T1_B04 T2_B04 = self.config.T2_B04 T1_B08 = 0.04 T2_B08 = 0.15 B04 = self.tables.getBand(self.tables.B04) B08 = self.tables.getBand(self.tables.B8A) self.confidenceMaskCloud = clip(B04, T1_B04, T2_B04) #self.confidenceMaskCloud = ((self.confidenceMaskCloud - T1_B04)/(T2_B04-T1_B04))**2 self.confidenceMaskCloud = ((self.confidenceMaskCloud - T1_B04)/(T2_B04-T1_B04)) CM = self.classificationMask CM[(B04T1_B08) & (B08 0 B03 = self.tables.getBand(self.tables.B03) B11 = self.tables.getBand(self.tables.B11) NDSI = (B03 - B11) / maximum((B03 + B11), self.LOWEST) CMC = clip(NDSI, T1_NDSI_CLD, T2_NDSI_CLD) CMC = ((CMC - T1_NDSI_CLD)/(T2_NDSI_CLD-T1_NDSI_CLD)) CM = self.classificationMask CM[(CMC==0)] = self._notClassified self.confidenceMaskCloud *= CMC self.logger.debug(statistics(self.confidenceMaskCloud, 'CM Cloud step 1.2')) return def L2A_CSND_2_0(self): return def L2A_CSND_2_1(self): # Snow filter 1: Normalized Difference Snow Index (NDSI) T1_NDSI_SNW = self.config.T1_NDSI_SNW T2_NDSI_SNW = self.config.T2_NDSI_SNW B03 = self.tables.getBand(self.tables.B03) B11 = self.tables.getBand(self.tables.B11) NDSI = (B03 - B11) / maximum((B03 + B11), self.LOWEST) CMS = clip(NDSI, T1_NDSI_SNW, T2_NDSI_SNW) CMS = ((CMS - T1_NDSI_SNW)/(T2_NDSI_SNW-T1_NDSI_SNW)) CM = self.classificationMask CM[(CMS == 0) & (CM == self._notClassified)] = self._notSnow self.confidenceMaskSnow = CMS return def L2A_CSND_2_2(self): # Snow filter 2: Band 8 thresholds T1_B8A = self.config.T1_B8A T2_B8A = self.config.T2_B8A B8A = self.tables.getBand(self.tables.B8A) CMS = clip(B8A, T1_B8A, T2_B8A) CMS = ((CMS - T1_B8A) / (T2_B8A - T1_B8A)) CM = self.classificationMask CM[(CMS == 0) & (CM == self._notClassified)] = self._notSnow self.confidenceMaskSnow *= CMS return def L2A_CSND_2_3(self): # Snow filter 3: Band 2 thresholds T1_B02 = self.config.T1_B02 T2_B02 = self.config.T2_B02 B02 = self.tables.getBand(self.tables.B02) CMS = clip(B02, T1_B02, T2_B02) CMS = ((CMS - T1_B02) / (T2_B02 - T1_B02)) CM = self.classificationMask CM[(CMS == 0) & (CM == self._notClassified)] = self._notSnow self.confidenceMaskSnow *= CMS return def L2A_CSND_2_4(self): # Snow filter 4: Ratio Band 2 / Band 4 T1_R_B02_B04 = self.config.T1_R_B02_B04 T2_R_B02_B04 = self.config.T2_R_B02_B04 B02 = self.tables.getBand(self.tables.B02) B04 = self.tables.getBand(self.tables.B04) RB02_B04 = B02 / maximum(B04,self.LOWEST) CMS = clip(RB02_B04, T1_R_B02_B04, T2_R_B02_B04) CMS = ((CMS - T1_R_B02_B04) / (T2_R_B02_B04 - T1_R_B02_B04)) CM = self.classificationMask CM[(CMS == 0) & (CM == self._notClassified)] = self._notSnow self.confidenceMaskSnow *= CMS CM = self.classificationMask return def L2A_CSND_2_5(self): # Snow filter 5: snow boundary zones T1_SNOW = self.config.T1_SNOW T2_SNOW = self.config.T2_SNOW B12 = self.tables.getBand(self.tables.B12) CM = self.classificationMask CMS = self.confidenceMaskSnow CMS[B12 > T2_SNOW] = 0 CM[(B12 > T2_SNOW) & (CM == self._notClassified)] = self._notSnow CM[CM == self._notClassified] = self._snowIce # important, if classified as snow, this should not become cloud: self.confidenceMaskCloud[CM == self._snowIce] = 0 # release the lock for the non snow classification CM[CM == self._notSnow] = self._notClassified return def L2A_CSND_3(self): # Step 3: Normalized Difference Vegetation Index (NDVI) T1_NDVI = self.config.T1_NDVI T2_NDVI = self.config.T2_NDVI T1_B2T = 0.15 B02 = self.tables.getBand(self.tables.B02) B04 = self.tables.getBand(self.tables.B04) B8A = self.tables.getBand(self.tables.B8A) NDVI = (B8A - B04) / maximum((B8A + B04), self.LOWEST) CMC = clip(NDVI, T1_NDVI, T2_NDVI) CMC = ((CMC - T1_NDVI)/(T2_NDVI-T1_NDVI)) CM = self.classificationMask CM[(CMC==1) & (CM == self._notClassified) & (B02 < T1_B2T)] = self._vegetation CMC[(CM== self._vegetation)] = 0 FLT = [(CMC>0) & (CMC < 1.0)] CMC[FLT] = CMC[FLT] * -1 + 1 self.confidenceMaskCloud[FLT] *= CMC[FLT] self.logger.debug(statistics(self.confidenceMaskCloud, 'CM Cloud step 3')) return def L2A_CSND_4(self): # Step 4: Ratio Band 8 / Band 3 for senescing vegetation T1_R_B8A_B03 = self.config.T1_R_B8A_B03 T2_R_B8A_B03 = self.config.T2_R_B8A_B03 B03 = self.tables.getBand(self.tables.B03) B8A = self.tables.getBand(self.tables.B8A) rb8b3 = B8A/maximum(B03,self.LOWEST) CMC = clip(rb8b3, T1_R_B8A_B03 , T2_R_B8A_B03) CMC = (CMC - T1_R_B8A_B03 ) / (T2_R_B8A_B03 - T1_R_B8A_B03 ) CM = self.classificationMask CM[(CMC==1) & (CM == self._notClassified)] = self._vegetation CMC[(CM== self._vegetation)] = 0 FLT = [(CMC>0) & (CMC < 1.0)] CMC[FLT] = CMC[FLT] * -1 + 1 self.confidenceMaskCloud[FLT] *= CMC[FLT] self.logger.debug(statistics(self.confidenceMaskCloud, 'CM Cloud step 4')) return def L2A_CSND_5_1(self): # Step 5.1: Ratio Band 2 / Band 11 for soils T11_B02 = self.config.T11_B02 T12_B02 = self.config.T12_B02 T11_R_B02_B11 = self.config.T11_R_B02_B11 T12_R_B02_B11 = self.config.T12_R_B02_B11 B02 = self.tables.getBand(self.tables.B02) B11 = self.tables.getBand(self.tables.B11) R_B02_B11 = clip((B02/maximum(B11,self.LOWEST)),0,100) B02_FT = clip(R_B02_B11*T11_B02+T12_B02, 0.15, 0.32) R_B02_B11_GT_T12_R_B02_B11 = where((R_B02_B11 > T12_R_B02_B11) | (B02 > B02_FT), True, False) CM = self.classificationMask CM[(R_B02_B11_GT_T12_R_B02_B11 == False) & (CM == self._notClassified)] = self._bareSoils self.confidenceMaskCloud[CM == self._bareSoils] = 0 R_B02_B11_GT_T11_R_B02_B11_LE_T12_R_B02_B11 = where((R_B02_B11 > T11_R_B02_B11) & (R_B02_B11 < T12_R_B02_B11), True, False) a = 1 / (T12_R_B02_B11 - T11_R_B02_B11) b = -T11_R_B02_B11 * a CMC = self.confidenceMaskCloud FLT = (R_B02_B11_GT_T11_R_B02_B11_LE_T12_R_B02_B11 == True) & (R_B02_B11_GT_T12_R_B02_B11 == False) & (CM == self._notClassified) CMC[FLT] = a * R_B02_B11[FLT] + b self.confidenceMaskCloud[FLT] *= CMC[FLT] self.logger.debug(statistics(self.confidenceMaskCloud, 'CM Cloud step 5.1')) return def L2A_CSND_5_2(self): # Step 5.2: Ratio Band 2 / Band 11 for water bodies, dependent on Band 12 T21_B12 = self.config.T21_B12 # 0.1 T22_B12 = self.config.T22_B12 # -0.09 T21_R_B02_B11 = self.config.T21_R_B02_B11 # 2.0 T22_R_B02_B11 = self.config.T22_R_B02_B11 # 4.0 B02 = self.tables.getBand(self.tables.B02) B11 = self.tables.getBand(self.tables.B11) B12 = self.tables.getBand(self.tables.B12) R_B02_B11 = B02 / maximum(B11,self.LOWEST) B12_FT = clip(R_B02_B11*T21_B12+T22_B12, 0.07, 0.21) R_B02_B11_GT_T22_R_B02_B11 = where((R_B02_B11 > T22_R_B02_B11) & (B12 < B12_FT), True, False) CM = self.classificationMask # this is a reference, no need to reassign CM[(R_B02_B11_GT_T22_R_B02_B11 == True) & (CM == self._notClassified)] = self._water self.confidenceMaskCloud[CM == self._water] = 0 R15_AMB = (R_B02_B11 < T22_R_B02_B11) & (R_B02_B11 >= T21_R_B02_B11) & (B12 < B12_FT) if(R15_AMB.size > 0): a = -1 / (T22_R_B02_B11 - T21_R_B02_B11) b = -T21_R_B02_B11 * a + 1 CMC = a * R_B02_B11[R15_AMB] + b self.confidenceMaskCloud[R15_AMB] *= CMC # second part, modification for improvement of water classification: T_24 = 0.034 B04 = self.tables.getBand(self.tables.B04) DIFF24_AMB = B02-B04 #CM = self.classificationMask F1 = DIFF24_AMB > T_24 CM[F1 & (CM == self._notClassified)] = self._water self.confidenceMaskCloud[F1 & (CM == self._water)] = 0 self.logger.debug(statistics(self.confidenceMaskCloud, 'CM Cloud step 5.2')) return def L2A_CSND_6(self): # Step 6: Ratio Band 8 / Band 11 for rocks and sands in deserts T1_R_B8A_B11 = self.config.T1_R_B8A_B11 T2_R_B8A_B11 = self.config.T2_R_B8A_B11 B8A = self.tables.getBand(self.tables.B8A) B11 = self.tables.getBand(self.tables.B11) R_B8A_B11 = B8A/maximum(B11,self.LOWEST) CMC = clip(R_B8A_B11, T1_R_B8A_B11, T2_R_B8A_B11) CMC = (CMC - T1_R_B8A_B11) / (T2_R_B8A_B11 - T1_R_B8A_B11) self.assignClassifcation(CMC, 0, self._bareSoils) self.confidenceMaskCloud *= CMC self.logger.debug(statistics(self.confidenceMaskCloud, 'CM Cloud step 6')) return def L2A_CSND_7(self): T_CLOUD_LP = self.config.T_CLOUD_LP T_CLOUD_MP = self.config.T_CLOUD_MP T_CLOUD_HP = self.config.T_CLOUD_HP T1_B10 = self.config.T1_B10 T2_B10 = self.config.T2_B10 B02 = self.tables.getBand(self.tables.B02) B10 = self.tables.getBand(self.tables.B10) LPC = self._lowProbaClouds MPC = self._medProbaClouds HPC = self._highProbaClouds CIR = self._thinCirrus CM = self.classificationMask CMC = self.confidenceMaskCloud CM[(CMC > T_CLOUD_LP) & (CMC < T_CLOUD_MP) & (CM == self._notClassified)] = LPC self.logger.debug(statistics(CMC[(CM == LPC)], 'CM LOW_PROBA_CLOUDS')) CM[(CMC >= T_CLOUD_MP) & (CMC < T_CLOUD_HP) & (CM == self._notClassified)] = MPC self.logger.debug(statistics(CMC[(CM == MPC)], 'CM MEDIUM_PROBA_CLOUDS')) CM[(CMC >= T_CLOUD_HP) & (CM == self._notClassified)] = HPC self.logger.debug(statistics(CMC[(CM == HPC)], 'CM HIGH_PROBA_CLOUDS')) CM[(B10 > T1_B10) & (B10 < T2_B10) & (CMC < 0.8) & (B02 < 0.50) & (CM != HPC)] = CIR self.logger.debug(statistics(CMC[(CM == CIR)], 'CM THIN_CIRRUS')) CM[(B10 >= T2_B10) & (CM == self._notClassified)]= MPC self.logger.debug(statistics(CMC[(CM == MPC)], 'CM MEDIUM_PROBA_CLOUDS, step2')) return def L2A_SHD(self): csd1 = self.L2A_CSHD_1() csd2 = self.L2A_CSHD_2() CSP = (csd1 * csd2 > 0) CM = self.classificationMask if(self.tables.hasBand(self.tables.SDW)): T_SDW = self.config.T_SDW shadow = self.tables.getBand(self.tables.SDW, uint8) tShadow = array(shadow, float32) / 255.0 CM[(CM == self._darkFeatures) & (tShadow > T_SDW) & (CSP == True)] = self._cloudShadows CM[(CM == self._water) & (CSP == True)] = self._cloudShadows else: CM[(CM == self._darkFeatures) & (CSP == True)] = self._cloudShadows CM[(CM == self._water) & (CSP == True)] = self._cloudShadows return def L2A_CSHD_2(self): # Part2: radiometric input: x,y,n = self.tables.getBandSize(2) BX = zeros((6,x,y), float32) BX[0,:,:] = self.tables.getBand(self.tables.B02) BX[1,:,:] = self.tables.getBand(self.tables.B03) BX[2,:,:] = self.tables.getBand(self.tables.B04) BX[3,:,:] = self.tables.getBand(self.tables.B8A) BX[4,:,:] = self.tables.getBand(self.tables.B11) BX[5,:,:] = self.tables.getBand(self.tables.B12) RV_MEAN = array([0.0696000, 0.0526667, 0.0537708, 0.0752000, 0.0545000, 0.0255000], dtype=float32) distance = zeros((6,x,y), float32) for i in range(0,6): distance[i,:,:] = abs(BX[i,:,:] - RV_MEAN[i]) T_B02_B12 = self.config.T_B02_B12 msd = mean(distance, axis=0) msd = median_filter(msd, 3) msd = 1.0 - msd T0 = 1.0 - T_B02_B12 msd[msd < T0] = 0.0 return msd def L2A_CSHD_1(self): #Part1 geometric input: y = self.confidenceMaskCloud.shape[0] x = self.confidenceMaskCloud.shape[1] cloud_mask = self.confidenceMaskCloud filt_b = zeros([y,x], float32) mask_shadow = zeros([y,x], float32) # Read azimuth and elevation solar angles solar_azimuth = -int(self.config.solaz + 0.5) solar_elevation = int(90.0 - self.config.solze + 0.5) # Median Filter 7x7 cloud_mask = median_filter(cloud_mask, (7,7)) # Dilatation cross-shape operator shape = generate_binary_structure(2,1) cloud_mask = binary_dilation(cloud_mask > 0.33, shape).astype(cloud_mask.dtype) # Create cloud height distribution (for 30m pixel resolution) distr_clouds = concatenate([reverse(1. / (1.0 + (arange(51) / 30.0) ** (2 * 5))), 1 / (1.0 + (arange(150) / 90.0) ** (2 * 5))]) # Create projected cloud shadow distribution npts_shad = distr_clouds.size / tan(solar_elevation * pi / 180.) factor = npts_shad/distr_clouds.size # SIITBX-46: to suppress unwanted user warning for zoom: import warnings warnings.filterwarnings('ignore') distr_shad = zoom(distr_clouds, factor) # Create filter for convolution (depends on azimuth solar angle) ys = float(y/2.0) xs = float(x/2.0) ds = float(distr_shad.size/2.0) filt_b[0:distr_shad.size,0] = distr_shad # keep the original value of first distr_shad pixel # and mark first distr_shad pixel with -1: filt_b0 = distr_shad[0] filt_b[0,0]= -1.0 filt_b[0,1]= -1.0 # Place into center for rotation, subtract 90 degree: filt_b = roll(filt_b, int(ys-ds), axis=0) filt_b = roll(filt_b, int(xs), axis=1) filt_b = reverse(rotate(filt_b, solar_azimuth, reshape=False, order=0)) # identify first distr_shad pixel after rotation and keep these values # for retranslation. Multiple entries can occurr due to rotation, # so take the first one: y0, x0 = where(filt_b < 0.0) if(y0.size) > 1: y0 = min(y0) if(x0.size) > 1: x0 = min(x0) filt_b[filt_b < 0.0] = filt_b0 y0 = y0.astype(int) x0 = x0.astype(int) # Now perform the convolution: fft1 = fft.rfft2(cloud_mask) fft2 = fft.rfft2(filt_b) shadow_prob = fft.irfft2(fft1 * fft2) # Move back to corners: shadow_prob = roll(shadow_prob, y0, axis=0) shadow_prob = roll(shadow_prob, x0, axis=1) CM = self.classificationMask # Shadow_prob can be smaller as CM, correct this: dy = CM.shape[0] - shadow_prob.shape[0] dx = CM.shape[1] - shadow_prob.shape[1] if(dy > 0): b = zeros([x,dy],float32) shadow_prob = concatenate((shadow_prob, b), axis=0) elif(dx > 0): b = zeros([y,dx],float32) shadow_prob = concatenate((shadow_prob, b), axis=1) # Remove data outside of interest: shadow_prob[CM == self._noData] = 0 # Normalisation: shadow_prob = shadow_prob * (1.0 / maximum(shadow_prob.max(), 1.0)) # Remove cloud_mask from Shadow probability: shadow_prob = maximum((shadow_prob - cloud_mask), 0) return shadow_prob def L2A_DarkVegetationRecovery(self): B04 = self.tables.getBand(self.tables.B04) B8A = self.tables.getBand(self.tables.B8A) NDVI = (B8A - B04) / maximum((B8A + B04), self.LOWEST) T2_NDVI = self.config.T2_NDVI F1 = NDVI > T2_NDVI CM = self.classificationMask CM[F1 & (CM == self._darkFeatures)] = self._vegetation CM[F1 & (CM == self._notClassified)] = self._vegetation T2_R_B8A_B03 = self.config.T2_R_B8A_B03 B03 = self.tables.getBand(self.tables.B03) rb8b3 = B8A/maximum(B03,self.LOWEST) F2 = rb8b3 > T2_R_B8A_B03 CM[F2 & (CM == self._darkFeatures)] = self._vegetation CM[F2 & (CM == self._notClassified)] = self._vegetation def L2A_WaterPixelRecovery(self): B02 = self.tables.getBand(self.tables.B02) B11 = self.tables.getBand(self.tables.B11) R_B02_B11 = B02/maximum(B11,self.LOWEST) T3 = 4.0 F3 = R_B02_B11 > T3 CM = self.classificationMask CM[F3 & (CM == self._darkFeatures)] = self._water CM[F3 & (CM == self._notClassified)] = self._water def L2A_SoilRecovery(self): T4 = 0.65 B02 = self.tables.getBand(self.tables.B02) B11 = self.tables.getBand(self.tables.B11) R_B02_B11 = B02/maximum(B11,self.LOWEST) F4 = R_B02_B11 < T4 CM = self.classificationMask CM[F4 & (CM == self._darkFeatures)] = self._bareSoils def average(self, oldVal, classifier, count): newVal = self.getClassificationPercentage(classifier) result = (float32(oldVal) * float32(count) + float32(newVal)) / float32(count + 1.0) return format('%f' % result) def getClassificationPercentage(self, classificator): cm = self.classificationMask if(classificator == self._noData): # count all for no data pixels: nrEntriesTotal = float32(size(cm)) nrEntriesClassified = float32(size(cm[cm == self._noData])) self._sumPercentage = 0.0 else: # count percentage of classified pixels: nrEntriesTotal = float32(size(cm[cm != self._noData])) nrEntriesClassified = float32(size(cm[cm == classificator])) fraction = nrEntriesClassified / nrEntriesTotal percentage = fraction * 100 self._sumPercentage += percentage self.logger.info('Classificator: %d' % classificator) self.logger.info('Percentage: %f' % percentage) self.logger.info('Sum Percentage: %f' % self._sumPercentage) if(classificator == self._noData): self._sumPercentage = 0.0 percentageStr = format('%f' % percentage) return percentageStr def updateQualityIndicators(self, nrTilesProcessed, metadata): xp = L2A_XmlParser(self.config, metadata) test = True if metadata == 'T2A': icqi = xp.getTree('Quality_Indicators_Info', 'L2A_Image_Content_QI') if icqi == False: qii = xp.getRoot('Quality_Indicators_Info') icqi = objectify.Element('L2A_Image_Content_QI') test = False icqi.NODATA_PIXEL_PERCENTAGE = self.getClassificationPercentage(self._noData) icqi.SATURATED_DEFECTIVE_PIXEL_PERCENTAGE = self.getClassificationPercentage(self._saturatedDefective) icqi.DARK_FEATURES_PERCENTAGE = self.getClassificationPercentage(self._darkFeatures) icqi.CLOUD_SHADOW_PERCENTAGE = self.getClassificationPercentage(self._cloudShadows) icqi.VEGETATION_PERCENTAGE = self.getClassificationPercentage(self._vegetation) icqi.BARE_SOILS_PERCENTAGE = self.getClassificationPercentage(self._bareSoils) icqi.WATER_PERCENTAGE = self.getClassificationPercentage(self._water) icqi.LOW_PROBA_CLOUDS_PERCENTAGE = self.getClassificationPercentage(self._lowProbaClouds) icqi.MEDIUM_PROBA_CLOUDS_PERCENTAGE = self.getClassificationPercentage(self._medProbaClouds) icqi.HIGH_PROBA_CLOUDS_PERCENTAGE = self.getClassificationPercentage(self._highProbaClouds) icqi.THIN_CIRRUS_PERCENTAGE = self.getClassificationPercentage(self._thinCirrus) icqi.SNOW_ICE_PERCENTAGE = self.getClassificationPercentage(self._snowIce) icqi.RADIATIVE_TRANSFER_ACCURAY = 0.0 icqi.WATER_VAPOUR_RETRIEVAL_ACCURACY = 0.0 icqi.AOT_RETRIEVAL_ACCURACY = 0.0 if test == False: qii.insert(1, icqi) elif metadata == 'UP2A': icqi = xp.getTree('L2A_Quality_Indicators_Info', 'Image_Content_QI') if icqi == False: qii = xp.getRoot('L2A_Quality_Indicators_Info') icqi = objectify.Element('Image_Content_QI') icqi.NODATA_PIXEL_PERCENTAGE = self.getClassificationPercentage(self._noData) icqi.SATURATED_DEFECTIVE_PIXEL_PERCENTAGE = self.getClassificationPercentage(self._saturatedDefective) icqi.DARK_FEATURES_PERCENTAGE = self.getClassificationPercentage(self._darkFeatures) icqi.CLOUD_SHADOW_PERCENTAGE = self.getClassificationPercentage(self._cloudShadows) icqi.VEGETATION_PERCENTAGE = self.getClassificationPercentage(self._vegetation) icqi.BARE_SOILS_PERCENTAGE = self.getClassificationPercentage(self._bareSoils) icqi.WATER_PERCENTAGE = self.getClassificationPercentage(self._water) icqi.LOW_PROBA_CLOUDS_PERCENTAGE = self.getClassificationPercentage(self._lowProbaClouds) icqi.MEDIUM_PROBA_CLOUDS_PERCENTAGE = self.getClassificationPercentage(self._medProbaClouds) icqi.HIGH_PROBA_CLOUDS_PERCENTAGE = self.getClassificationPercentage(self._highProbaClouds) icqi.THIN_CIRRUS_PERCENTAGE = self.getClassificationPercentage(self._thinCirrus) icqi.SNOW_ICE_PERCENTAGE = self.getClassificationPercentage(self._snowIce) icqi.RADIATIVE_TRANSFER_ACCURAY = 0.0 icqi.WATER_VAPOUR_RETRIEVAL_ACCURACY = 0.0 icqi.AOT_RETRIEVAL_ACCURACY = 0.0 qii.append(icqi) else: icqi.NODATA_PIXEL_PERCENTAGE = self.average(icqi.NODATA_PIXEL_PERCENTAGE, self._noData, nrTilesProcessed) icqi.SATURATED_DEFECTIVE_PIXEL_PERCENTAGE = self.average(icqi.SATURATED_DEFECTIVE_PIXEL_PERCENTAGE, self._saturatedDefective, nrTilesProcessed) icqi.DARK_FEATURES_PERCENTAGE = self.average(icqi.DARK_FEATURES_PERCENTAGE, self._darkFeatures, nrTilesProcessed) icqi.CLOUD_SHADOW_PERCENTAGE = self.average(icqi.CLOUD_SHADOW_PERCENTAGE, self._cloudShadows, nrTilesProcessed) icqi.VEGETATION_PERCENTAGE = self.average(icqi.VEGETATION_PERCENTAGE, self._vegetation, nrTilesProcessed) icqi.BARE_SOILS_PERCENTAGE = self.average(icqi.BARE_SOILS_PERCENTAGE, self._bareSoils, nrTilesProcessed) icqi.WATER_PERCENTAGE = self.average(icqi.WATER_PERCENTAGE, self._water, nrTilesProcessed) icqi.LOW_PROBA_CLOUDS_PERCENTAGE = self.average(icqi.LOW_PROBA_CLOUDS_PERCENTAGE, self._lowProbaClouds, nrTilesProcessed) icqi.MEDIUM_PROBA_CLOUDS_PERCENTAGE = self.average(icqi.MEDIUM_PROBA_CLOUDS_PERCENTAGE, self._medProbaClouds, nrTilesProcessed) icqi.HIGH_PROBA_CLOUDS_PERCENTAGE = self.average(icqi.HIGH_PROBA_CLOUDS_PERCENTAGE, self._highProbaClouds, nrTilesProcessed) icqi.THIN_CIRRUS_PERCENTAGE = self.average(icqi.THIN_CIRRUS_PERCENTAGE, self._thinCirrus, nrTilesProcessed) icqi.SNOW_ICE_PERCENTAGE = self.average(icqi.SNOW_ICE_PERCENTAGE, self._snowIce, nrTilesProcessed) icqi.RADIATIVE_TRANSFER_ACCURAY = 0.0 icqi.WATER_VAPOUR_RETRIEVAL_ACCURACY = 0.0 icqi.AOT_RETRIEVAL_ACCURACY = 0.0 xp.export() def process(self): self.config.timestamp('Pre process ') self.preprocess() self.config.timestamp('L2A_SC init ') self.L2A_CSND_1_1() self.config.timestamp('L2A_CSND_1_1 ') self.L2A_CSND_1_2() self.config.timestamp('L2A_CSND_1_2 ') if(self.tables.sceneCouldHaveSnow() == True): self.logger.info('Snow probality, detection will be performed') self.L2A_CSND_2_0() self.config.timestamp('L2A_CSND_2_0 ') self.L2A_CSND_2_1() self.config.timestamp('L2A_CSND_2_1 ') self.L2A_CSND_2_2() self.config.timestamp('L2A_CSND_2_2 ') self.L2A_CSND_2_3() self.config.timestamp('L2A_CSND_2_3 ') self.L2A_CSND_2_4() self.config.timestamp('L2A_CSND_2_4 ') self.L2A_CSND_2_5() self.config.timestamp('L2A_CSND_2_5 ') else: self.logger.info('Now snow probality, detection will be ignored') self.L2A_CSND_3() self.config.timestamp('L2A_CSND_3 ') self.L2A_CSND_4() self.config.timestamp('L2A_CSND_4 ') self.L2A_CSND_5_1() self.config.timestamp('L2A_CSHD_5_1 ') self.L2A_CSND_5_2() self.config.timestamp('L2A_CSND_5_2 ') self.L2A_CSND_6() self.config.timestamp('L2A_CSND_6 ') self.L2A_CSND_7() self.config.timestamp('L2A_CSND_7 ') self.L2A_SHD() self.config.timestamp('L2A_SHD ') self.L2A_SoilRecovery() self.config.timestamp('Soil recovery') self.L2A_DarkVegetationRecovery() self.config.timestamp('DV recovery ') self.L2A_WaterPixelRecovery() self.config.timestamp('WP recovery ') self.postprocess() self.config.timestamp('Post process ') return True \ No newline at end of file diff --git a/sen2cor/L2A_Tables.py b/sen2cor/L2A_Tables.py index 795eb98..551ec88 100644 --- a/sen2cor/L2A_Tables.py +++ b/sen2cor/L2A_Tables.py @@ -6,22 +6,25 @@ import fnmatch import warnings import subprocess -import sys, os +import sys, os, tempfile, logging import glob from PIL import Image +from time import sleep import glymur from tables import * from numpy import * from tables.description import * -from distutils.dir_util import copy_tree, mkpath -from distutils.file_util import copy_file +from shutil import copyfile, copytree from scipy.ndimage.interpolation import zoom -from L2A_Config import L2A_Config -from L2A_Library import rectBivariateSpline, stdoutWrite, showImage, stderrWrite +from L2A_Library import * from lxml import etree, objectify from L2A_XmlParser import L2A_XmlParser -from L2A_Borg import Borg + +from subprocess import CalledProcessError +from osgeo.gdal_array import BandReadAsArray +from multiprocessing import Lock +l = Lock() try: from osgeo import gdal,osr @@ -30,10 +33,13 @@ except ImportError: import gdal,osr from gdalconst import * + + # SIITBX-47: to suppress user warning due to the fact that # http://trac.osgeo.org/gdal/ticket/5480 is not implemented # in the current openJPEG driver for windows used by ANACONDA: gdal.PushErrorHandler('CPLQuietErrorHandler') +gdal.UseExceptions() class Particle(IsDescription): bandName = StringCol(8) @@ -44,21 +50,20 @@ class Particle(IsDescription): rasterCount = UInt8Col() -class L2A_Tables(Borg): - def __init__(self, config, L1C_TILE_ID): - self.config = config +class L2A_Tables(object): + def __init__(self, config): + self._config = config + self._logger = config.logger L1C_UP_MASK = '*1C_*' - if(fnmatch.fnmatch(config.sourceDir, L1C_UP_MASK) == False): - self.config.logger.fatal('identifier "*1C_*" is missing for the Level-1C_User_Product') - self.config.exitError() - return False - AUX_DATA = '/AUX_DATA' - IMG_DATA = '/IMG_DATA' - QI_DATA = '/QI_DATA' - GRANULE = '/GRANULE/' + AUX_DATA = 'AUX_DATA' + IMG_DATA = 'IMG_DATA' + QI_DATA = 'QI_DATA' + GRANULE = 'GRANULE' + + self.aux_src = None - if config.traceLevel == 'DEBUG': + if self._logger.level == logging.DEBUG: self._DEV0 = '' else: if os.name == 'posix': @@ -70,123 +75,131 @@ def __init__(self, config, L1C_TILE_ID): if(self._resolution == 10): self._bandIndex = [1,2,3,7] self._nBands = 4 - bandDir = '/R10m' + bandDir = 'R10m' elif(self._resolution == 20): self._bandIndex = [0,1,2,3,4,5,6,8,9,10,11,12] self._nBands = 9 - bandDir = '/R20m' + bandDir = 'R20m' elif(self._resolution == 60): self._bandIndex = [0,1,2,3,4,5,6,8,9,10,11,12] self._nBands = 11 - bandDir = '/R60m' + bandDir = 'R60m' BANDS = bandDir - #Creation_Date = self.config.creationDate # generate new Tile ID: - L2A_TILE_ID = L1C_TILE_ID[:4] + 'USER' + L1C_TILE_ID[8:] - #L2A_TILE_ID = L2A_TILE_ID[:25] + Creation_Date + L2A_TILE_ID[40:] - L2A_TILE_ID = L2A_TILE_ID.replace('L1C_', 'L2A_') - self.config.L2A_TILE_ID = L2A_TILE_ID - L2A_TILE_ID_SHORT = '/' + L2A_TILE_ID[:55] - L1C_TILE_ID = config.sourceDir + GRANULE + L1C_TILE_ID - L2A_TILE_ID = config.L2A_UP_DIR + GRANULE + L2A_TILE_ID - - if(os.path.exists(L2A_TILE_ID) == False): - os.mkdir(L2A_TILE_ID) - copy_tree(L1C_TILE_ID + QI_DATA, L2A_TILE_ID + QI_DATA) - - self.config.logger.info('new working directory is: ' + L2A_TILE_ID) + L1C_TILE_ID = os.path.join(config.sourceDir, GRANULE, config.L1C_TILE_ID) + L2A_TILE_ID = os.path.join(config.L2A_UP_DIR, GRANULE, config.L2A_TILE_ID) + self.logger.info('tile directory is: ' + L2A_TILE_ID) + + if os.name == 'nt': + #special treatment for windows for long pathnames: + L1C_TILE_ID_ = u'\\'.join([u'\\\\?', L1C_TILE_ID]) + L2A_TILE_ID_ = u'\\'.join([u'\\\\?', L2A_TILE_ID]) + configFn = u'\\'.join([u'\\\\?', config.configFn]) + else: + L1C_TILE_ID_ = L1C_TILE_ID + L2A_TILE_ID_ = L2A_TILE_ID + configFn = config.configFn + + qiData = os.path.join(L2A_TILE_ID_, QI_DATA) + if(os.path.exists(qiData) == False): + copytree(os.path.join(L1C_TILE_ID_, QI_DATA), os.path.join(L2A_TILE_ID_, QI_DATA)) + filelist = sorted(os.listdir(L1C_TILE_ID_)) + found = False + for filename in filelist: + if(fnmatch.fnmatch(filename, L1C_UP_MASK) == True): + found = True + break + if found == False: + self.logger.fatal('No metadata in tile') - filelist = sorted(os.listdir(L1C_TILE_ID)) - found = False - for filename in filelist: - if(fnmatch.fnmatch(filename, L1C_UP_MASK) == True): - found = True - break - if found == False: - self.config.tracer.fatal('No metadata in tile') - self.config.exitError() - - L1C_TILE_MTD_XML = L1C_TILE_ID + '/' + filename - L2A_TILE_MTD_XML = filename - L2A_TILE_MTD_XML = L2A_TILE_MTD_XML[:4] + 'USER' + L2A_TILE_MTD_XML[8:] - L2A_TILE_MTD_XML = L2A_TILE_MTD_XML.replace('L1C_', 'L2A_') - L2A_TILE_MTD_XML = L2A_TILE_ID + '/' + L2A_TILE_MTD_XML - self.config.L1C_TILE_MTD_XML = L1C_TILE_MTD_XML - self.config.L2A_TILE_MTD_XML = L2A_TILE_MTD_XML + L1C_TILE_MTD_XML = os.path.join(L1C_TILE_ID_, filename) + L2A_TILE_MTD_XML = filename + L2A_TILE_MTD_XML = L2A_TILE_MTD_XML[:4] + 'USER' + L2A_TILE_MTD_XML[8:] + L2A_TILE_MTD_XML = L2A_TILE_MTD_XML.replace('L1C_', 'L2A_') + L2A_TILE_MTD_XML = os.path.join(L2A_TILE_ID_, L2A_TILE_MTD_XML) + self.config.L1C_TILE_MTD_XML = L1C_TILE_MTD_XML + self.config.L2A_TILE_MTD_XML = L2A_TILE_MTD_XML - if(self._resolution == 60): xp = L2A_XmlParser(self.config, 'T1C') - if(xp.validate()) == False: - tg = xp.getTree('Geometric_Info', 'Tile_Geocoding') - if tg.attrib['metadataLevel'] == 'Brief': - stderrWrite('\nFile: ' + self.config.L1C_TILE_MTD_XML + '\n') - stderrWrite('Section: \n') - stderrWrite('This version of Sen2Cor does not support the "Brief" metadata level.\n') - stderrWrite('please donwnload a product which has at least the "Standard" metadata level.\n') - self.config.exitError() - - copy_file(L1C_TILE_MTD_XML, L2A_TILE_MTD_XML) + copyfile(L1C_TILE_MTD_XML, L2A_TILE_MTD_XML) xp = L2A_XmlParser(self.config, 'T2A') if(xp.convert() == False): - self.tracer.fatal('error in converting tile metadata to level 2A') - self.config.exitError() - - #update tile id in ds metadata file. + self.logger.fatal('error in converting tile metadata to level 2A') + + tileId = self.config.L2A_TILE_ID + if('L2A_CO_' in tileId): + self.logger.info('consolidated tile ' + tileId + ': no entry in datastrip metadata generated') + else: xp = L2A_XmlParser(self.config, 'DS2A') ti = xp.getTree('Image_Data_Info', 'Tiles_Information') - Tile = objectify.Element('Tile', tileId = self.config.L2A_TILE_ID) try: + Tile = objectify.Element('Tile', tileId = self.config.L2A_TILE_ID) ti.Tile_List.append(Tile) + xp.export() + xp.validate() except: - self.config.logger.warning('No Tile_List in datastrip metadata available') - xp.export() + self.logger.fatal('no Tile_List in datastrip metadata found') - L1C_ImgDataDir = L1C_TILE_ID + IMG_DATA - self._L2A_ImgDataDir = L2A_TILE_ID + IMG_DATA + L1C_ImgDataDir = os.path.join(L1C_TILE_ID_, IMG_DATA) + self._L2A_ImgDataDir = os.path.join(L2A_TILE_ID_, IMG_DATA) self._L1C_bandDir = L1C_ImgDataDir - self._L2A_bandDir = self._L2A_ImgDataDir + BANDS + self._L2A_bandDir = os.path.join(self._L2A_ImgDataDir, BANDS) if(os.path.exists(self._L2A_bandDir) == False): - mkpath(self._L2A_bandDir) + os.makedirs(self._L2A_bandDir) + + self._L1C_QualityMasksDir = os.path.join(L1C_TILE_ID_, QI_DATA) + self._L2A_QualityDataDir = os.path.join(L2A_TILE_ID_, QI_DATA) + self._L2A_AuxDataDir = os.path.join(L2A_TILE_ID_, AUX_DATA) - self._L1C_QualityMasksDir = L1C_TILE_ID + QI_DATA - self._L2A_QualityDataDir = L2A_TILE_ID + QI_DATA - self._L2A_AuxDataDir = L2A_TILE_ID + AUX_DATA if(os.path.exists(self._L2A_AuxDataDir) == False): - mkpath(self._L2A_AuxDataDir) - elif self.config.resolution == 10: - # read configuration from AUX dir: - dummy, basename = os.path.split(config.L2A_TILE_MTD_XML) + copytree(os.path.join(L1C_TILE_ID_, AUX_DATA), os.path.join(L2A_TILE_ID_, AUX_DATA)) + filelist = sorted(os.listdir(self._L2A_AuxDataDir)) + filemask = 'S2A_*' + for filenameAux in filelist: + if fnmatch.fnmatch(filenameAux, filemask) == True: + self.aux_src=filenameAux + break + # copy configuration to AUX dir: + basename = os.path.basename(config._L2A_TILE_MTD_XML) fnAux = basename.replace('_MTD_', '_GIP_') - config.configFn = os.path.join(self._L2A_AuxDataDir,fnAux) + target = os.path.join(self._L2A_AuxDataDir,fnAux) + if(os.path.exists(target) == False): + try: + copyfile(configFn, target) + except: + self.logger.error('cannot copy configuration to %s' % target) + if(os.path.exists(self._L2A_QualityDataDir) == False): - mkpath(self._L2A_QualityDataDir) + os.makedirs(self._L2A_QualityDataDir) # # the File structure: #------------------------------------------------------- - pre = L2A_TILE_ID_SHORT[:9] + L2A_TILE_ID_SHORT = config.L2A_TILE_ID[:55] + pre = L2A_TILE_ID_SHORT[:8] post = L2A_TILE_ID_SHORT[13:] - self._L2A_Tile_BND_File = self._L2A_bandDir + L2A_TILE_ID_SHORT + '_BXX_' + str(self._resolution) + 'm.jp2' - self._L2A_Tile_VIS_File = self._L2A_bandDir + pre + '_VIS' + post + '_' + str(self._resolution) + 'm.jp2' - self._L2A_Tile_AOT_File = self._L2A_bandDir + pre + '_AOT' + post + '_' + str(self._resolution) + 'm.jp2' - self._L2A_Tile_WVP_File = self._L2A_bandDir + pre + '_WVP' + post + '_' + str(self._resolution) + 'm.jp2' - self._L2A_Tile_SDW_File = self._L2A_bandDir + pre + '_SDW' + post + '_' + str(self._resolution) + 'm.jp2' - self._L2A_Tile_SLP_File = self._L2A_bandDir + pre + '_SLP' + post + '_' + str(self._resolution) + 'm.jp2' - self._L2A_Tile_ASP_File = self._L2A_bandDir + pre + '_ASP' + post + '_' + str(self._resolution) + 'm.jp2' - self._L2A_Tile_DEM_File = self._L2A_AuxDataDir + pre + '_DEM' + post + '_' + str(self._resolution) + 'm.jp2' - self._L2A_Tile_CLD_File = self._L2A_QualityDataDir + pre + '_CLD' + post + '_' + str(self._resolution) + 'm.jp2' - self._L2A_Tile_SNW_File = self._L2A_QualityDataDir + pre + '_SNW' + post + '_' + str(self._resolution) + 'm.jp2' - self._L2A_Tile_SCL_File = self._L2A_ImgDataDir + pre + '_SCL' + post + '_' + str(self._resolution) + 'm.jp2' - if self.config.traceLevel == 'DEBUG': - self._L2A_Tile_PVI_File = self._L2A_QualityDataDir + pre + '_PVI' + post + '_' + str(self._resolution) + 'm.jp2' - else: - self._L2A_Tile_PVI_File = self._L2A_QualityDataDir + pre + '_PVI' + post + '.jp2' - - self._ImageDataBase = self._L2A_bandDir + '/.database.h5' - self._TmpFile = self._L2A_bandDir + '/.tmpfile.tif' - self._TmpDemFile = self._L2A_bandDir + '/.tmpdem.tif' + self._L2A_Tile_BND_File = os.path.join(self._L2A_bandDir , L2A_TILE_ID_SHORT + '_BXX_' + str(self._resolution) + 'm.jp2') + self._L2A_Tile_VIS_File = os.path.join(self._L2A_bandDir , pre + '_VIS_' + post + '_' + str(self._resolution) + 'm.jp2') + self._L2A_Tile_AOT_File = os.path.join(self._L2A_bandDir , pre + '_AOT_' + post + '_' + str(self._resolution) + 'm.jp2') + self._L2A_Tile_WVP_File = os.path.join(self._L2A_bandDir , pre + '_WVP_' + post + '_' + str(self._resolution) + 'm.jp2') + self._L2A_Tile_SDW_File = os.path.join(self._L2A_bandDir , pre + '_SDW_' + post + '_' + str(self._resolution) + 'm.jp2') + self._L2A_Tile_SLP_File = os.path.join(self._L2A_bandDir , pre + '_SLP_' + post + '_' + str(self._resolution) + 'm.jp2') + self._L2A_Tile_ASP_File = os.path.join(self._L2A_bandDir , pre + '_ASP_' + post + '_' + str(self._resolution) + 'm.jp2') + self._L2A_Tile_DEM_File = os.path.join(self._L2A_AuxDataDir , pre + '_DEM_' + post + '_' + str(self._resolution) + 'm.jp2') + self._L2A_Tile_CLD_File = os.path.join(self._L2A_QualityDataDir , pre + '_CLD_' + post + '_' + str(self._resolution) + 'm.jp2') + self._L2A_Tile_SNW_File = os.path.join(self._L2A_QualityDataDir , pre + '_SNW_' + post + '_' + str(self._resolution) + 'm.jp2') + self._L2A_Tile_SCL_File = os.path.join(self._L2A_ImgDataDir , pre + '_SCL_' + post + '_' + str(self._resolution) + 'm.jp2') + self._L2A_Tile_PVI_File = os.path.join(self._L2A_QualityDataDir , pre + '_PVI_' + post + '_' + str(self._resolution) + 'm.jp2') + self._L2A_Tile_DDV_File = os.path.join(self._L2A_QualityDataDir , pre + '_DDV_' + post + '_' + str(self._resolution) + 'm.jp2') + + self._ImageDataBase = os.path.join(self._L2A_bandDir, '.database.h5') + self._TmpFile = os.path.join(self._L2A_bandDir, '.tmpfile.tif') + self._TmpDemFile = os.path.join(self._L2A_bandDir, '.tmpdem.tif') + self._TmpPwcFile = os.path.join(self._L2A_bandDir, '.tmppwc.tif') + self._TmpMslFile = os.path.join(self._L2A_bandDir, '.tmpmsl.tif') + self._TmpOzoFile = os.path.join(self._L2A_bandDir, '.tmpozo.tif') self._acMode = False # default setting for scene classification # Geodata from image metadata: @@ -199,7 +212,7 @@ def __init__(self, config, L1C_TILE_ID): self._bandNames = ['B01','B02','B03','B04','B05','B06','B07','B08','B8A',\ 'B09','B10','B11','B12','DEM','SCL','SNW','CLD','AOT',\ 'WVP','VIS','SCM','PRV','ILU','SLP','ASP','HAZ','SDW',\ - 'DDV','HCW','ELE'] + 'DDV','HCW','ELE', 'PWC', 'MSL', 'OZO'] # the mapping of the channels and bands self._B01 = 0 @@ -232,9 +245,11 @@ def __init__(self, config, L1C_TILE_ID): self._DDV = 27 self._HCW = 28 self._ELE = 29 + self._PWC = 30 + self._MSL = 31 + self._OZO = 32 - self.config.tracer.debug('Module L2A_Tables initialized with resolution %d' % self._resolution) - + self.logger.debug('Module L2A_Tables initialized with resolution %d' % self._resolution) def get_ac_mode(self): return self._acMode @@ -248,6 +263,18 @@ def del_ac_mode(self): del self._acMode + def get_logger(self): + return self._logger + + + def set_logger(self, value): + self._logger = value + + + def del_logger(self): + del self._logger + + def get_corner_coordinates(self): return self._cornerCoordinates @@ -331,7 +358,7 @@ def __exit__(self): def __del__(self): - self.config.tracer.debug('Module L2A_Tables deleted') + self.logger.debug('Module L2A_Tables deleted') def get_config(self): @@ -432,6 +459,18 @@ def get_scm(self): def get_prv(self): return self._PRV + + + def get_pwc(self): + return self._PWC + + + def get_msl(self): + return self._MSL + + + def get_ozo(self): + return self._OZO def set_b01(self, value): @@ -520,6 +559,18 @@ def set_scm(self, value): def set_prv(self, value): self._PRV = value + + + def set_pwc(self, value): + self._PWC = value + + + def set_msl(self, value): + self._MSL = value + + + def set_ozo(self, value): + self._OZO = value def del_b01(self): @@ -608,6 +659,18 @@ def del_scm(self): def del_prv(self): del self._PRV + + + def del_pwc(self): + del self._PWC + + + def del_msl(self): + del self._MSL + + + def del_ozo(self): + del self._OZO def get_ilu(self): @@ -715,6 +778,9 @@ def del_ele(self): VIS = property(get_vis, set_vis, del_vis, "VIS's docstring") SCM = property(get_scm, set_scm, del_scm, "SCM's docstring") PRV = property(get_prv, set_prv, del_prv, "PRV's docstring") + PWC = property(get_pwc, set_pwc, del_pwc, "PWC's docstring") + MSL = property(get_msl, set_msl, del_msl, "MSL's docstring") + OZO = property(get_ozo, set_ozo, del_ozo, "OZO's docstring") ILU = property(get_ilu, set_ilu, del_ilu, "ILU's docstring") SLP = property(get_slp, set_slp, del_slp, "SLP's docstring") SDW = property(get_sdw, set_sdw, del_sdw, "SDW's docstring") @@ -723,6 +789,7 @@ def del_ele(self): HCW = property(get_hcw, set_hcw, del_hcw, "HCW's docstring") ELE = property(get_ele, set_ele, del_ele, "ELE's docstring") config = property(get_config, set_config, del_config, "config's docstring") + logger = property(get_logger, set_logger, del_logger, "logger's docstring") bandIndex = property(get_band_index, set_band_index, del_band_index, "bandIndex's docstring") nBands = property(get_n_bands, set_n_bands, del_n_bands, "nBands's docstring") dbName = property(get_db_name, set_db_name, del_db_name, "dbName's docstring") @@ -786,26 +853,47 @@ def getResolutionIndex(self): else: return False - def checkAotMapIsPresent(self): - sourceDir = self._L2A_ImgDataDir + '/R' + str(self.config.resolution) + 'm' - os.chdir(sourceDir) + + def checkAotMapIsPresent(self, resolution): + sourceDir = os.path.join(self._L2A_ImgDataDir, 'R' + str(resolution) + 'm') + try: + dirs = sorted(os.listdir(sourceDir)) + filemask = '*_AOT_L2A_*' + '.jp2' + for filename in dirs: + if fnmatch.fnmatch(filename, filemask) == True: + return True + return False + except: + return False + + + def checkBandCount(self): + sourceDir = self._L1C_bandDir dirs = sorted(os.listdir(sourceDir)) - filemask = '*_AOT_L2A_*' + '.jp2' - for filename in dirs: - if fnmatch.fnmatch(filename, filemask) == True: - return True - return False + bandIndex = self.bandIndex + bandCount = 0 + for i in bandIndex: + for filename in dirs: + bandName = self.getBandNameFromIndex(i) + filemask = '*_L1C_*_%3s.jp2' % bandName + if fnmatch.fnmatch(filename, filemask) == False: + continue + bandCount += 1 + break + if len(bandIndex) > bandCount: + return False + return True + def importBandList(self): # convert JPEG-2000 input files to H5 file format # initialize H5 database for usage: sourceDir = self._L1C_bandDir - os.chdir(sourceDir) - database = self._ImageDataBase + database = os.path.join(sourceDir, self._ImageDataBase) rasterX = False if(os.path.isfile(database)): os.remove(database) - self.config.tracer.info('Old database removed') + self.logger.info('Old database removed') self.config.timestamp('L2A_Tables: start import') dirs = sorted(os.listdir(sourceDir)) @@ -819,20 +907,21 @@ def importBandList(self): if(rasterX == False): self.setCornerCoordinates() rasterX = True - self.importBand(i, filename) + res = self.importBand(i, os.path.join(sourceDir, filename)) + if res == False: + return False break + upsampling = False - # 10m bands only: perform an up sampling of SCL, AOT, and VIS from 20 m channels to 10 if(self._resolution == 10): - self.config.tracer.info('perform up sampling of SCL, AOT and VIS from 20m channels to 10m') + self.logger.info('perform up sampling of SCL, AOT and VIS from 20m channels to 10m') srcResolution = '_20m' - channels = [17,18,19] + channels = [17,19] sourceDir = self._L2A_bandDir.replace('R10m', 'R20m') upsampling = True if upsampling == True: - os.chdir(sourceDir) dirs = sorted(os.listdir(sourceDir)) for i in channels: for filename in dirs: @@ -841,42 +930,70 @@ def importBandList(self): filemask = '*_' + bandName + '_L2A_*' + srcResolution + '.jp2' if fnmatch.fnmatch(filename, filemask) == False: continue - self.importBand(i, filename) + res = self.importBand(i, os.path.join(sourceDir, filename)) + if res == False: + return False break # scene class is in different directory: sourceDir = self._L2A_ImgDataDir - os.chdir(sourceDir) dirs = sorted(os.listdir(sourceDir)) bandName = 'SCL' channel = 14 + filemask = '*_' + bandName + '_L2A_*' + srcResolution + '.jp2' for filename in dirs: - filemask = '*_' + bandName + '_L2A_*' + srcResolution + '.jp2' if fnmatch.fnmatch(filename, filemask) == False: continue - self.importBand(channel, filename) + res = self.importBand(channel, os.path.join(sourceDir, filename)) + if res == False: + return False break - if(self.gdalDEM() == True): - # generate hill shadow, slope and aspect using DEM: - if(self.gdalDEM_Shade() == False): - self.config.tracer.fatal('shell execution error generating DEM shadow') - self.config.exitError() + self.dem = False + demDir = self.config.demDirectory + if demDir == 'NONE': + self.logger.info('DEM directory not specified, flat surface is used') + return True + + demDir = os.path.join(self.config.home, self.config.demDirectory) + # check if DEM is a DTED type, these files must exist in the given directory: + DTED = False + filemask = 'e*.dt1' + if os.path.exists(demDir): + files = sorted(os.listdir(demDir)) + for filename in files: + if fnmatch.fnmatch(filename, filemask) == True: + DTED = True + break + + # yes it is, run dem preparation for DTED: + if DTED == True: + if(self.gdalDEM_dted() == False): return False - - if(self.gdalDEM_Slope() == False): - self.config.tracer.fatal('shell execution error generating DEM slope') - self.config.exitError() + + else: # run DEM preparation for SRTM: + if(self.gdalDEM_srtm() == False): return False - if(self.gdalDEM_Aspect() == False): - self.config.tracer.fatal('shell execution error generating DEM aspect') - self.config.exitError() - return False + # generate hill shadow, slope and aspect using DEM: + if(self.gdalDEM_Shade() == False): + self.logger.fatal('shell execution error generating DEM shadow') + return False + + if(self.gdalDEM_Slope() == False): + self.logger.fatal('shell execution error generating DEM slope') + return False + + if(self.gdalDEM_Aspect() == False): + self.logger.fatal('shell execution error generating DEM aspect') + return False + try: os.remove(self._TmpDemFile) + except: + pass -# self.createPreviewImage() self.config.timestamp('L2A_Tables: stop import') + return True @@ -908,13 +1025,13 @@ def is_northern(self, latitude): # Determines if given latitude is a northern fo def transform_utm_to_wgs84(self, easting, northing, zone1, zone2): - utm_coordinate_system = osr.SpatialReference() + utm_coordinate_system = osr.SpatialReference() #Create a new spatial reference object using a named parameter utm_coordinate_system.SetWellKnownGeogCS("WGS84") # Set geographic coordinate system to handle lat/lon zone = zone1 hemi = zone2 # SIITBX-48: if(hemi == 'N'): # N is Northern Hemisphere - utm_coordinate_system.SetUTM(zone, 1) + utm_coordinate_system.SetUTM(zone, 1) # call sets detailed projection transformation parameters else: utm_coordinate_system.SetUTM(zone, 0) wgs84_coordinate_system = utm_coordinate_system.CloneGeogCS() # Clone ONLY the geographic coordinate system @@ -933,20 +1050,62 @@ def transform_wgs84_to_utm(self, lon, lat): return wgs84_to_utm_geo_transform.TransformPoint(lon, lat, 0) # returns easting, northing, altitude - def gdalDEM(self): - import urllib - import zipfile + def getAuxData(self, bandIndex): + ''' + PWC (Precipitable Water Content), Grib Unit [kg/m^2] + MSL (Mean Sea Level pressure), Grib Unit [Pa] + OZO (Ozone), Grib Unit [kg/m^2] + + calculation for Ozone according to R. Richter (20/1/2016): + ---------------------------------------------------------- + GRIB_UNIT = [kg/m^2] + standard ozone column is 300 DU (Dobson Units), + equals to an air column of 3 mm at STP (standard temperature (0 degree C) and pressure of 1013 mbar). + + Thus, molecular weight of O3 (M = 48): 2.24 g (equals to 22.4 liter at STP) + + 300 DU = 3 mm (equals to (0.3*48 / 2.24) [g/m^2]) + = 6.428 [g/m^2] = 6.428 E-3 [kg/m^2] - demDir = self.config.getStr('Common_Section', 'DEM_Directory') + Example: + + ozone (GRIB) = 0.005738 (equals to DU = 300 * 0.005738/6.428 E-3) + ozone (DU) = 267.4 DU + + Thus, ozone GRIB will be weighted with factor 155.5694 (equals to 1/6.428 E-3) + in order to receive ozone in DU + ''' + auxBands = [self.PWC, self.MSL, self.OZO] + if bandIndex in auxBands == False: + self.logger.error('wrong band index for aux data') + return False + + bandIndex -= 29 # bandIndex starts at 30 + ozoneFactor = 155.5694 # 1/6.428 E-3 + standardOzoneColumn = 300.0 + + straux_src = os.path.join(self._L2A_AuxDataDir, self.aux_src) + dataSet = gdal.Open(straux_src, GA_ReadOnly) + try: + band = dataSet.GetRasterBand(bandIndex) + arr = BandReadAsArray(band) + if bandIndex == 3: # recalculate to 300 DU: + arr = arr * standardOzoneColumn * ozoneFactor + except: + self.logger.error('error in reading aux data from band %s' % self.getBandNameFromIndex(bandIndex)) + return False + + return arr + + + def gdalDEM_dted(self): + demDir = self.config._demDirectory if demDir == 'NONE': - self.config.logger.info('DEM directory not specified, flat surface is used') + self.logger.info('DEM directory not specified, flat surface is used') return False - self.config.logger.info('Start DEM alignment for tile') - sourceDir = self.config.home + '/' + demDir - if(os.path.exists(sourceDir) == False): - mkpath(sourceDir) - os.chdir(sourceDir) + self.logger.info('Start DEM alignment for tile') + sourceDir = os.path.join(self.config.home, demDir) xy = self.cornerCoordinates xp = L2A_XmlParser(self.config, 'T2A') @@ -957,156 +1116,432 @@ def gdalDEM(self): zone2 = zone[-1:].upper() lonMin, latMin, dummy = self.transform_utm_to_wgs84(xy[1,0], xy[1,1], zone1, zone2) lonMax, latMax, dummy = self.transform_utm_to_wgs84(xy[3,0], xy[3,1], zone1, zone2) + + lat_cen = int((latMax+latMin)/2) + lon_cen = int((lonMax+lonMin)/2) + lonMin = int(lonMin) + lonMax = int(lonMax) + latMin = int(latMin) + latMax = int(latMax) + + if lon_cen<0: + lonMask='w' + lon_cen=-lon_cen + else: + lonMask='e' + + if lat_cen<0: + latMask='s' + lat_cen=-lat_cen + else: + latMask='n' + + if lon_cen < 100: + if lon_cen < 10: + lonMask = lonMask + '00' + else: + lonMask = lonMask + '0' + + command = 'gdalwarp ' + arguments = '-ot Int16 ' + srtmf_src = '' + + filelist = sorted(os.listdir(sourceDir)) + found = False + for i in range(lonMin-1,lonMax+1): + for j in range(latMin-1,latMax+1): + file_mask = lonMask + str(i) + '_' + latMask + str(j) + '.dt1' + + for filename in filelist: + if(fnmatch.fnmatch(filename, file_mask) == True): + found = True + srtmf_src += ' ' + os.path.join(sourceDir, filename) + break + + if found == False: + self.logger.info('DEM not found, flat surface is used') + return False + + hcsCode = tg.HORIZONTAL_CS_CODE.text + t_srs = '-t_srs ' + hcsCode + + te = ' -te %f %f %f %f' % (xy[0,0], xy[2,1], xy[2,0], xy[0,1]) + tr = ' -tr %d %d' % (self.config.resolution, self.config.resolution) + t_warp = te + tr + ' -r cubicspline ' + + if(os.path.isfile(self._TmpFile) == True): + os.remove(self._TmpFile) + + tmpFile = os.path.join(sourceDir, 'srtm_' + self.config.L2A_TILE_ID + '.tif') + callstr = command + arguments + t_srs + t_warp + srtmf_src + ' ' + tmpFile + l.acquire() + try: + if(os.path.isfile(tmpFile) == True): + os.remove(tmpFile) + if(os.path.isfile(self._TmpFile) == True): + os.remove(self._TmpFile) + + p = subprocess.check_output(callstr, shell=True) + stdoutWrite(p) + except: + stderrWrite('Error reading DEM, flat surface will be used.\n') + self.logger.fatal('Error reading DEM, flat surface will be used') + os.remove(srtmf_src) + return False + finally: + l.release() + + while True: + if(os.path.isfile(tmpFile) == True): + break + else: + sleep(1) + continue + + copyfile(tmpFile, self._TmpFile) + self.importBand(self.DEM) + os.rename(self._TmpFile, self._TmpDemFile) + os.remove(srtmf_src) + self.logger.info('DEM received and prepared') + return True + + + def gdalDEM_srtm(self): + import urllib + import zipfile + + demDir = self.config._demDirectory + if demDir == 'NONE': + self.logger.info('DEM directory not specified, flat surface is used') + return False + + self.logger.info('Start DEM alignment for tile') + sourceDir = os.path.join(self.config.home, demDir) + l.acquire() + try: + if(os.path.exists(sourceDir) == False): + os.makedirs(sourceDir) + finally: + l.release() + + xy = self.cornerCoordinates + xp = L2A_XmlParser(self.config, 'T2A') + tg = xp.getTree('Geometric_Info', 'Tile_Geocoding') + hcsName = tg.HORIZONTAL_CS_NAME.text + zone = hcsName.split()[4] + zone1 = int(zone[:-1]) + zone2 = zone[-1:].upper() + lonMin, latMin, dummy = self.transform_utm_to_wgs84(xy[1,0], xy[1,1], zone1, zone2) + lonMax, latMax, dummy = self.transform_utm_to_wgs84(xy[3,0], xy[3,1], zone1, zone2) lonMinId = int((-180-lonMin)/(-360)*72)+1 lonMaxId = int((-180-lonMax)/(-360)*72)+1 latMinId = int((60-latMax)/(120)*24)+1 # this is inverted by intention latMaxId = int((60-latMin)/(120)*24)+1 # this is inverted by intention - + if(lonMinId < 1) or (lonMaxId > 72) or (latMinId < 1) or (latMaxId > 24): - self.config.logger.info('no SRTM dataset available for this tile, flat surface is used') + self.logger.error('no SRTM dataset available for this tile, flat surface will be used') return False for i in range(lonMinId, lonMaxId+1): - for j in range(latMinId, latMaxId+1): + for j in range(latMinId, latMaxId+1): + tifFn = 'srtm_{:0>2d}_{:0>2d}.tif'.format(i,j) zipFn = 'srtm_{:0>2d}_{:0>2d}.zip'.format(i,j) - if(os.path.isfile(zipFn) == False): - prefix = self.config.getStr('Common_Section', 'DEM_Reference') + tifFn_path = os.path.join(sourceDir,tifFn) + zipFn_path = os.path.join(sourceDir,zipFn) + + if(os.path.isfile(tifFn_path) == True): + self.logger.info('DEM exists: %s', tifFn_path) + continue # tiffile exists, no action necessary + + elif(os.path.isfile(zipFn_path) == False): + # zipfile needs to be downloaded ... + prefix = self.config._demReference stdoutWrite('Trying to retrieve DEM from URL %s this may take some time ...\n' % prefix) - self.config.logger.info('Trying to retrieve DEM from URL: %s', prefix) + self.logger.info('Trying to retrieve DEM from URL: %s', prefix) url = prefix + zipFn - webFile = urllib.urlopen(url) - localFile = open(url.split('/')[-1], 'wb') - localFile.write(webFile.read()) - webFile.close() - localFile.close() - - zipf = zipfile.ZipFile(zipFn, mode='r') - for subfile in zipf.namelist(): - zipf.extract(subfile) - zipf.close() - + l.acquire() + try: + webFile = urllib.urlopen(url) + localFile = open(os.path.join(sourceDir, url.split('/')[-1]), 'wb') + localFile.write(webFile.read()) + webFile.close() + localFile.close() + except: + stderrWrite('No network connection or timeout, flat surface will be used.\n') + self.logger.error('No network connection or timeout, flat surface will be used') + return False + finally: + l.release() + + else: # zipfile meanwhile extracted from a different process ... + if(os.path.isfile(tifFn_path) == True): + self.logger.info('DEM exists: %s', tifFn_path) + continue # tiffile exists, no action necessary + + l.acquire() + try: + zipf = zipfile.ZipFile(zipFn_path, mode='r') + for subfile in zipf.namelist(): + zipf.extract(subfile,sourceDir) + zipf.close() + while True: + if(os.path.isfile(tifFn_path) == True): + self.logger.info('DEM unpacked: %s', tifFn_path) + break + else: + sleep(1) + continue + except: + stderrWrite('Zip file %s is corrupt, flat surface will be used.\n' % zipFn_path) + self.logger.error('Zip file %s is corrupt, flat surface will be used' % zipFn_path) + return False + finally: + l.release() + command = 'gdalwarp ' arguments = '-ot Int16 ' - srtmf_src = 'srtm_tmp_src.tif' if(lonMinId == lonMaxId) & (latMinId == latMaxId): - srtmf_src = 'srtm_{:0>2d}_{:0>2d}.tif'.format(i,j) + srtmf_src = os.path.join(sourceDir,'srtm_{:0>2d}_{:0>2d}.tif'.format(i,j)) else: + # more than 1 DEM needs to be concatenated: for i in range(lonMinId, lonMaxId+1): for j in range(latMinId, latMaxId+1): - arguments += 'srtm_{:0>2d}_{:0>2d}.tif '.format(i,j) + tifFn = os.path.join(sourceDir,'srtm_{:0>2d}_{:0>2d}.tif'.format(i,j)) + arguments += tifFn + ' ' + while True: + if(os.path.isfile(tifFn) == True): + break + else: + sleep(1) + continue + + srtmf_src = os.path.join(sourceDir, 'srtm_' + self.config.L2A_TILE_ID + '_src.tif') + if(os.path.isfile(srtmf_src) == True): + os.remove(srtmf_src) - callstr = command + arguments + srtmf_src + self._DEV0 - if(subprocess.call(callstr, shell=True) != 0): - self.config.tracer.fatal('shell execution error using gdalwarp') - self.config.exitError() + callstr = command + arguments + srtmf_src + l.acquire() + try: + p = subprocess.check_output(callstr, shell=True) + stdoutWrite(p) + except: + stderrWrite('shell execution error using gdalwarp.\n') + self.logger.fatal('shell execution error using gdalwarp') return False + finally: + l.release() + while True: + if(os.path.isfile(srtmf_src) == True): + break + else: + sleep(1) + continue + hcsCode = tg.HORIZONTAL_CS_CODE.text t_srs = '-t_srs ' + hcsCode - + te = ' -te %f %f %f %f' % (xy[0,0], xy[2,1], xy[2,0], xy[0,1]) tr = ' -tr %d %d' % (self.config.resolution, self.config.resolution) t_warp = te + tr + ' -r cubicspline ' + arguments = '-ot Int16 ' + tmpFile = os.path.join(sourceDir, 'srtm_' + self.config.L2A_TILE_ID + '.tif') + if(os.path.isfile(tmpFile) == True): + os.remove(tmpFile) + callstr = command + arguments + t_srs + t_warp + srtmf_src + ' ' + tmpFile + l.acquire() + try: + p = subprocess.check_output(callstr, shell=True) + stdoutWrite(p) + except: + stderrWrite('Error reading DEM, flat surface will be used.\n') + self.logger.fatal('Error reading DEM, flat surface will be used') + if((os.path.isfile(srtmf_src) == True) and ('_src.tif' in srtmf_src)): + os.remove(srtmf_src) + return False + finally: + l.release() + + while True: + if(os.path.isfile(tmpFile) == True): + break + else: + sleep(1) + continue if(os.path.isfile(self._TmpFile) == True): os.remove(self._TmpFile) - - arguments = '-ot Int16 ' - callstr = command + arguments + t_srs + t_warp + srtmf_src + ' ' + self._TmpFile + self._DEV0 - if(subprocess.call(callstr, shell=True) != 0): - self.config.tracer.fatal('shell execution error using gdalwarp') - os.remove(srtmf_src) - self.config.exitError() - + copyfile(tmpFile, self._TmpFile) self.importBand(self.DEM) + if(os.path.isfile(self._TmpDemFile) == True): + os.remove(self._TmpDemFile) + if((os.path.isfile(srtmf_src) == True) and ('_src.tif' in srtmf_src)): + os.remove(srtmf_src) + os.rename(self._TmpFile, self._TmpDemFile) - os.remove(srtmf_src) + self.logger.info('DEM received and prepared') return True def gdalDEM_Shade(self): + head, tmpFile = os.path.split(self._TmpFile) + head, tmpDemFile = os.path.split(self._TmpDemFile) + curdir = os.path.curdir + altitude = 90.0 - float32(mean(self.config.solze_arr)) azimuth = float32(mean(self.config.solaz_arr)) command = 'gdaldem hillshade ' options = '-compute_edges -az ' + str(azimuth) + ' -alt ' + str(altitude) + callstr = command + options + ' ' + tmpDemFile + ' ' + tmpFile - callstr = command + options + ' ' + self._TmpDemFile + ' ' + self._TmpFile + self._DEV0 - if(subprocess.call(callstr, shell=True) != 0): - self.config.tracer.fatal('shell execution error using gdaldem') - self.config.exitError() + l.acquire() + try: + os.chdir(head) + p = subprocess.check_output(callstr, shell=True) + stdoutWrite(p) + os.chdir(curdir) + except: + self.logger.fatal('shell execution error using gdaldem shade') return False - + finally: + l.release() + self.importBand(self.SDW) return True def gdalDEM_Slope(self): + head, tmpFile = os.path.split(self._TmpFile) + head, tmpDemFile = os.path.split(self._TmpDemFile) + curdir = os.path.curdir + command = 'gdaldem slope ' - srtmf_src = 'srtm_tmp_src.tif' options = '-compute_edges' + callstr = command + options + ' ' + tmpDemFile + ' ' + tmpFile - callstr = command + options + ' ' + self._TmpDemFile + ' ' + self._TmpFile + self._DEV0 - if(subprocess.call(callstr, shell=True) != 0): - self.config.tracer.fatal('shell execution error using gdaldem') - self.config.exitError() + l.acquire() + try: + os.chdir(head) + p = subprocess.check_output(callstr, shell=True) + stdoutWrite(p) + os.chdir(curdir) + except: + self.logger.fatal('shell execution error using gdaldem slope') return False + finally: + l.release() - self.importBand(self.SLP) + self.importBand(self.SLP) return True def gdalDEM_Aspect(self): + head, tmpFile = os.path.split(self._TmpFile) + head, tmpDemFile = os.path.split(self._TmpDemFile) + curdir = os.path.curdir + command = 'gdaldem aspect ' options = '-compute_edges' + callstr = command + options + ' ' + tmpDemFile + ' ' + tmpFile - callstr = command + options + ' ' + self._TmpDemFile + ' ' + self._TmpFile + self._DEV0 - if(subprocess.call(callstr, shell=True) != 0): - self.config.tracer.fatal('shell execution error using gdaldem') - self.config.exitError() + l.acquire() + try: + os.chdir(head) + p = subprocess.check_output(callstr, shell=True) + stdoutWrite(p) + os.chdir(curdir) + except: + self.logger.fatal('shell execution error using gdaldem aspect') return False + finally: + l.release() self.importBand(self.ASP) return True + def importBand(self, index, filename=None): bandName = self.getBandNameFromIndex(index) + if filename == None: # input via GDAL (GeoTiff data, DEM): - tmpfile = self._TmpFile - indataArr = gdal.Open(tmpfile, GA_ReadOnly) + tmpFile = self._TmpFile + curdir = os.path.curdir + head, tail = os.path.split(tmpFile) + l.acquire() + os.chdir(head) + while True: + try: + indataArr = gdal.Open(tail, GA_ReadOnly) + break + except: + sleep(1) + continue + + os.chdir(curdir) + l.release() tgt_nrows = indataArr.RasterYSize - tgt_ncols = indataArr.RasterXSize + tgt_ncols = indataArr.RasterXSize else: # the new input for JP2 data: warnings.filterwarnings("ignore") kwargs = {"tilesize": (2048, 2048), "prog": "RPCL"} indataset = glymur.Jp2k(filename, **kwargs) # now the resamling: - # to suppress the rounding error for TPZF testdata: src_nrows = indataset.shape[0] src_ncols = indataset.shape[1] tgt_nrows = self.config.nrows tgt_ncols = self.config.ncols - if src_nrows == tgt_nrows: - # no resamling required: - indataArr = indataset[:] - elif src_nrows > tgt_nrows: + + test1 = indataset[:] + print 'Band:', bandName + print '=============================' + + print 'no resampling, mean:', test1[0:12,0:12].mean() + print test1[0:12,0:12] + # if src_nrows == tgt_nrows: + # no resamling required: + # indataArr = indataset[:] + # elif src_nrows > tgt_nrows: + a = 1 + if a == 1: # downsampling is required: # first step, take first lower resolution slice. indataArr = indataset[::2,::2] + print '10 to 20, sliced, mean: ', indataArr[0:6,0:6].mean() + print indataArr[0:6,0:6] # for target r20 no further resampling necessary: if self._resolution == 60: - zoomX = float64(tgt_ncols)/(float64(src_ncols)*0.5) - zoomY = float64(tgt_nrows)/(float64(src_nrows)*0.5) - indataArr = zoom(indataArr, ([zoomX,zoomY]), order=0) - elif tgt_nrows > src_nrows: + + zoomX = float64(src_ncols*0.5)/(float64(src_ncols)) + zoomY = float64(src_nrows*0.5)/(float64(src_nrows)) + test2 = zoom(test1, ([zoomX,zoomY]), order=0) + print '10 to 20, resampled, nearest, mean: ', test2[0:6,0:6].mean() + print test2[0:6,0:6] + test3 = zoom(test1, ([zoomX,zoomY]), order=1) + print '10 to 20, resampled, bilinear, mean: ', test3[0:6,0:6].mean() + print test3[0:6,0:6] +# zoomX = float64(tgt_ncols)/(float64(src_ncols)*0.5) +# zoomY = float64(tgt_nrows)/(float64(src_nrows)*0.5) +# indataArr = zoom(indataArr, ([zoomX,zoomY]), order=0) +# print '20 to 60:', indataArr.mean() +# print indataArr[0:2,0:2] + + #elif tgt_nrows > src_nrows: + if a == 1: # upsampling is required: indataArr = indataset[:] zoomX = float64(tgt_ncols)/float64(src_ncols) zoomY = float64(tgt_nrows)/float64(src_nrows) indataArr = zoom(indataArr, ([zoomX,zoomY]), order=3) - indataset = None - + print 'upsampling', indataArr.mean(), 'zoomX:', zoomX, 'zoomY:', zoomY + print '-----------------' + indataset = None + + if (index < 10) and (indataArr.max() == 0): + self.logger.fatal('Band ' + bandName + ' does not contain any data') + return False + h5file = openFile(self._ImageDataBase, mode='a', title = str(self._resolution) + 'm bands') if(h5file.__contains__('/tmp') == False): h5file.createGroup('/', 'tmp', 'temporary data') @@ -1124,10 +1559,10 @@ def importBand(self, index, filename=None): garrays = h5file.createGroup('/', 'arrays', 'band arrays') if(h5file.__contains__('/arrays/' + bandName)): - self.config.tracer.error( bandName + ' already exists in database ' + self._ImageDataBase) + self.logger.error( bandName + ' already exists in database ' + self._ImageDataBase) h5file.close() indataArr = None - return + return True else: filters = Filters(complib="zlib", complevel=1) if filename == None: @@ -1154,18 +1589,15 @@ def importBand(self, index, filename=None): table.flush() h5file.close() indataArr = None - self.config.tracer.info(bandName + ' imported') self.config.timestamp('L2A_Tables: band ' + bandName + ' imported') - return + return True def exportBandList(self): sourceDir = self._L2A_bandDir if(os.path.exists(sourceDir) == False): - self.config.tracer.fatal('missing directory %s:' % sourceDir) - self.config.exitError() + self.logger.fatal('missing directory %s:' % sourceDir) return False - os.chdir(sourceDir) database = self._ImageDataBase self.config.timestamp('L2A_Tables: start export') @@ -1176,19 +1608,25 @@ def exportBandList(self): bandIndex = [1,2,3,7,13] elif(self._resolution == 20): if(self.acMode == True): - bandIndex = [1,2,3,4,5,6,8,11,12,13,14,15,16,17,18,19] + bandIndex = [1,2,3,4,5,6,8,11,12,13,14,15,16,17,18,19,27] else: bandIndex = [1,2,3,4,5,6,8,11,12,13,14,15,16] elif(self._resolution == 60): if(self.acMode == True): - bandIndex = [0,1,2,3,4,5,6,8,9,11,12,13,14,15,16,17,18,19] + bandIndex = [0,1,2,3,4,5,6,8,9,11,12,13,14,15,16,17,18,19,27] else: bandIndex = [0,1,2,3,4,5,6,8,9,11,12,13,14,15,16] #prepare the xml export - Granules = objectify.Element('Granules') - Granules.attrib['granuleIdentifier'] = self.config.L2A_TILE_ID - Granules.attrib['datastripIdentifier'] = self.config.L2A_DS_ID - Granules.attrib['imageFormat'] = 'JPEG2000' + tileId = self.config.L2A_TILE_ID + consolidatedTile = False + if ('L2A_CO_' in tileId): + consolidatedTile = True + self.logger.info('consolidated tile ' + tileId + ': no entry in user product metadata generated') + else: + Granules = objectify.Element('Granules') + Granules.attrib['granuleIdentifier'] = self.config.L2A_TILE_ID + Granules.attrib['datastripIdentifier'] = self.config.L2A_DS_ID + Granules.attrib['imageFormat'] = 'JPEG2000' h5file = openFile(self._ImageDataBase, mode='r') for index in bandIndex: bandName = self.getBandNameFromIndex(index) @@ -1208,18 +1646,21 @@ def exportBandList(self): filename = self._L2A_Tile_WVP_File elif(bandName == 'DEM'): filename = self._L2A_Tile_DEM_File - demDir = self.config.getStr('Common_Section', 'DEM_Directory') + demDir = self.config._demDirectory if demDir == 'NONE': continue + elif(bandName == 'DDV'): + filename = self._L2A_Tile_DDV_File + if self.logger.level != logging.DEBUG: + continue try: node = h5file.getNode('/arrays', bandName) band = node.read() kwargs = {"tilesize": (2048, 2048), "prog": "RPCL"} - glymur.Jp2k(filename, band.astype(uint16), **kwargs) - self.config.tracer.info('Band ' + bandName + ' exported') + glymur.Jp2k(filename, band.astype(uint16), **kwargs) self.config.timestamp('L2A_Tables: band ' + bandName + ' exported') filename = os.path.basename(filename.strip('.jp2')) - if (bandName != 'VIS'): + if (bandName != 'VIS' and consolidatedTile == False): imageId = etree.Element('IMAGE_ID_2A') imageId.text = filename Granules.append(imageId) @@ -1260,15 +1701,18 @@ def exportBandList(self): bl = pi.Query_Options.Band_List bl.insert(7,bn) except: - self.config.logger.warning('No Spectral_Information in user metadata available') - gl = objectify.Element('Granule_List') - gl.append(Granules) - po = pi.L2A_Product_Organisation - po.append(gl) + self.logger.warning('No Spectral_Information in user metadata available') + + if consolidatedTile == False: + gl = objectify.Element('Granule_List') + gl.append(Granules) + po = pi.L2A_Product_Organisation + po.append(gl) + xp.export() # update on tile level: - if(self._resolution == 60): + if(self._resolution > 10): xp = L2A_XmlParser(self.config, 'T2A') gi = xp.getRoot('General_Info') tiOld = xp.getTree('General_Info', 'TILE_ID_2A') @@ -1279,38 +1723,42 @@ def exportBandList(self): dsNew = etree.Element('DATASTRIP_ID_2A') dsNew.text = self.config.L2A_DS_ID gi.replace(dsOld, dsNew) - pxlqi2a = objectify.Element('L2A_Pixel_Level_QI') - fn = os.path.basename(self._L2A_Tile_CLD_File) - fn = fn.replace('_60m.jp2', '') - pxlqi2a.CLOUD_CONFIDENCE_MASK = fn - fn = os.path.basename(self._L2A_Tile_SNW_File) - fn = fn.replace('_60m.jp2', '') - pxlqi2a.SNOW_ICE_CONFIDENCE_MASK = fn - qii = xp.getRoot('Quality_Indicators_Info') - qii.insert(3, pxlqi2a) - pviOld = xp.getTree('Quality_Indicators_Info', 'PVI_FILENAME') - pviNew = etree.Element('PVI_FILENAME') - if self.config.traceLevel != 'DEBUG': - self.createPreviewImage() - self.config.timestamp('L2A_Tables: preview image exported') - fn = os.path.basename(self._L2A_Tile_PVI_File) - fn = fn.replace('.jp2', '') - pviNew.text = fn - qii.replace(pviOld, pviNew) + pxlqi2a = xp.getTree('Quality_Indicators_Info', 'L2A_Pixel_Level_QI') + if pxlqi2a == False: + pxlqi2a = objectify.Element('L2A_Pixel_Level_QI') + fn = os.path.basename(self._L2A_Tile_CLD_File) + fn = fn.replace('_60m.jp2', '') + fn = fn.replace('_20m.jp2', '') + pxlqi2a.CLOUD_CONFIDENCE_MASK = fn + fn = os.path.basename(self._L2A_Tile_SNW_File) + fn = fn.replace('_60m.jp2', '') + fn = fn.replace('_20m.jp2', '') + pxlqi2a.SNOW_ICE_CONFIDENCE_MASK = fn + qii = xp.getRoot('Quality_Indicators_Info') + qii.insert(3, pxlqi2a) + pviOld = xp.getTree('Quality_Indicators_Info', 'PVI_FILENAME') + pviNew = etree.Element('PVI_FILENAME') + fn = os.path.basename(self._L2A_Tile_PVI_File) + fn = fn.replace('.jp2', '') + pviNew.text = fn + qii.replace(pviOld, pviNew) + xp.export() - if self.config.traceLevel == 'DEBUG': - self.createPreviewImage() - + + self.createPreviewImage() + self.config.timestamp('L2A_Tables: preview image exported') # cleanup: if(os.path.isfile(self._TmpFile)): os.remove(self._TmpFile) if(os.path.isfile(database)): os.remove(database) - globdir = self.config.L2A_UP_DIR + '/GRANULE/' + self.config.L2A_TILE_ID + '/*/*.jp2.aux.xml' + + GRANULE = 'GRANULE' + globdir = os.path.join(self.config.L2A_UP_DIR, GRANULE, self.config.L2A_TILE_ID,'*','*.jp2.aux.xml') for filename in glob.glob(globdir): os.remove(filename) - globdir = self.config.L2A_UP_DIR + '/GRANULE/' + self.config.L2A_TILE_ID + '/*/*/*.jp2.aux.xml' + globdir = os.path.join(self.config.L2A_UP_DIR, GRANULE, self.config.L2A_TILE_ID,'*','*','*.jp2.aux.xml') for filename in glob.glob(globdir): os.remove(filename) @@ -1319,11 +1767,13 @@ def exportBandList(self): def createPreviewImage(self): - self.config.tracer.debug('Creating Preview Image') - sourceDir = self._L2A_QualityDataDir - os.chdir(sourceDir) - filename = self._L2A_Tile_PVI_File + if os.path.exists(filename): + self.logger.info('Preview Image already exists') + return True + else: + self.logger.info('Creating Preview Image') + acMode = self.acMode self.acMode = False b = self.getBand(self.B02) @@ -1344,32 +1794,29 @@ def createPreviewImage(self): a = array(out) kwargs = {"tilesize": (2048, 2048), "prog": "RPCL"} glymur.Jp2k(filename, a.astype(uint8), **kwargs) - self.config.tracer.debug('Preview Image created') + self.logger.debug('preview image exported') return True except: - self.config.tracer.fatal('Preview Image creation failed') - self.config.exitError() + self.logger.fatal('preview image export failed') return False def scaleImgArray(self, arr): if(arr.ndim) != 2: - self.config.tracer.fatal('must be a 2 dimensional array') - self.config.exitError() + self.logger.fatal('must be a 2 dimensional array') return False - if self.config.traceLevel != 'DEBUG': + if self.logger.level != logging.DEBUG: src_ncols = self.config.ncols src_nrows = self.config.nrows tgt_ncols = 343.0 tgt_nrows = 343.0 - zoomX = float64(tgt_ncols)/float64(src_ncols) zoomY = float64(tgt_nrows)/float64(src_nrows) arr = zoom(arr, ([zoomX,zoomY]), order=0) arrclip = arr.copy() min_ = 0.0 - max_ = 0.25 + max_ = 0.250 scale = 255.0 arr = clip(arrclip, min_, max_) #SIITBX-50: wrong scale was used: @@ -1377,15 +1824,6 @@ def scaleImgArray(self, arr): return scaledArr - def postprocess(self): - dummy, basename = os.path.split(self.config.L2A_TILE_MTD_XML) - fnAux = basename.replace('_MTD_', '_GIP_') - # copy configuration to AUX dir: - target = os.path.join(self._L2A_AuxDataDir,fnAux) - copy_file(self.config.configFn, target) - return - - def testDb(self): result = False try: @@ -1399,7 +1837,7 @@ def testDb(self): result = False h5file.close() - self.config.tracer.info(status) + self.logger.info(status) return result @@ -1409,10 +1847,10 @@ def hasBand(self, index): try: h5file = openFile(self._ImageDataBase, mode='r') h5file.getNode('/arrays', bandName) - self.config.tracer.debug('Channel %s is present', self.getBandNameFromIndex(index)) + self.logger.debug('Channel %s is present', self.getBandNameFromIndex(index)) result = True except: - self.config.tracer.debug('Channel %s is not available', self.getBandNameFromIndex(index)) + self.logger.debug('Channel %s is not available', self.getBandNameFromIndex(index)) result = False h5file.close() @@ -1444,9 +1882,8 @@ def getBand(self, index, dataType=uint16): node = h5file.getNode('/arrays', bandName) nrows, ncols, count = self.getBandSize(index) if (count < 1): - self.config.tracer.fatal('Insufficient band size: ' + count) + self.logger.fatal('Insufficient band size: ' + count) h5file.close() - self.config.exitError() array = node.read() h5file.close() @@ -1479,17 +1916,15 @@ def TOA_refl2rad(self, index, indataArr): ''' nrows = self.config.nrows ncols = self.config.ncols - + if(self.config.resolution == 10): validBand = [None,0,1,2,None,None,None,3,None,None,None,None,None] else: validBand = [0,1,2,3,4,5,6,None,7,8,9,10,11] - bandIndex = validBand[index] if(bandIndex == None): - self.config.tracer.debug('Wrong band index %02d for selected resolution %02d', index, self.config.resolution) - self.config.exitError() - + self.logger.fatal('Wrong band index %02d for selected resolution %02d', index, self.config.resolution) + # The solar zenith array: x = arange(nrows, dtype=float32) / (nrows-1) * self.config.solze_arr.shape[0] y = arange(ncols, dtype=float32) / (ncols-1) * self.config.solze_arr.shape[1] @@ -1508,7 +1943,7 @@ def TOA_refl2rad(self, index, indataArr): # rad = rho * cos(radians(sza)) * Es * sc / (pi * d2) # where: d2 = 1.0 / U # scale: 1 / (0.001 * 1000) = 1 (default) - + # To reduce the memory consumption for 10m images: rad = zeros_like(rho) for i in range(nrows): @@ -1541,7 +1976,7 @@ def setBand(self, index, array): dtIn = self.setDataType(array.dtype) filters = Filters(complib="zlib", complevel=1) node = h5file.createEArray(arr, bandName, dtIn, (0,array.shape[1]), bandName, filters=filters) - self.config.tracer.debug('Channel %02d %s added to table', index, self.getBandNameFromIndex(index)) + self.logger.debug('Channel %02d %s added to table', index, self.getBandNameFromIndex(index)) node.append(array) table = h5file.root.metadata.META @@ -1576,7 +2011,7 @@ def removeBand(self, index): node = h5file.getNode('/arrays', bandName) node.remove() table.flush() - self.config.tracer.debug('Channel %02d %s removed from table', index, self.getBandNameFromIndex(index)) + self.logger.debug('Channel %02d %s removed from table', index, self.getBandNameFromIndex(index)) h5file.close() @@ -1588,7 +2023,7 @@ def removeAllBands(self): if(h5file.__contains__('/arrays/')): node = h5file.getNode('/', 'arrays') del node - self.config.tracer.debug('All channels removed from table') + self.logger.debug('All channels removed from table') h5file.close() self.removeAllTmpBands() @@ -1601,15 +2036,13 @@ def getTmpBand(self, index, dataType=int16): node = h5file.getNode('/tmp', bandName) if (node.dtype != dataType): - self.config.tracer.error('wrong data type, must be: ' + str(node.dtype)) h5file.close() - self.config.exitError() - + self.logger.fatal('wrong data type, must be: ' + str(node.dtype)) + nrows, ncols, count = self.getBandSize(index) if (count < 1): - self.config.tracer.error('insufficient band size: ' + count) h5file.close() - self.config.exitError() + self.logger.fatal('insufficient band size: ' + count) array = node.read() h5file.close() @@ -1629,7 +2062,7 @@ def setTmpBand(self, index, array): dtIn = self.setDataType(array.dtype) filters = Filters(complib="zlib", complevel=1) node = h5file.createEArray(tmp, bandName, dtIn, (0,array.shape[1]), bandName, filters=filters) - self.config.tracer.debug('Temporary channel ' + str(index) + ' added to table') + self.logger.debug('Temporary channel ' + str(index) + ' added to table') node.append(array) table.flush() h5file.close() @@ -1645,7 +2078,7 @@ def removeTmpBand(self, index): node = h5file.getNode('/tmp', bandName) node.remove() table.flush() - self.config.tracer.debug('Temporary channel ' + str(index) + ' removed from table') + self.logger.debug('Temporary channel ' + str(index) + ' removed from table') h5file.close() return @@ -1658,7 +2091,7 @@ def removeAllTmpBands(self): node = h5file.getNode('/tmp') del node table.flush() - self.config.tracer.debug('All temporary channels removed from table') + self.logger.debug('All temporary channels removed from table') h5file.close() return @@ -1697,25 +2130,24 @@ def setDataType(self, dtIn): def getArray(self, filename): - cfg = L2A_Config() filename = self._testdir + filename + '.npy' if((os.path.isfile(filename)) == False): - cfg.tracer.critical('File ' + filename + ' not present') + self.logger.critical('File ' + filename + ' not present') return False return load(filename) + def getDiffFromArrays(self, filename1, filename2): - cfg = L2A_Config() filename1 = self._testdir + filename1 + '.npy' filename2 = self._testdir + filename2 + '.npy' if((os.path.isfile(filename1)) == False): - cfg.tracer.critical('File ' + filename1 + ' not present') + self.logger.critical('File ' + filename1 + ' not present') return False if((os.path.isfile(filename2)) == False): - cfg.tracer.critical('File ' + filename2 + ' not present') + self.logger.critical('File ' + filename2 + ' not present') return False arr1 = load(filename1) @@ -1724,25 +2156,28 @@ def getDiffFromArrays(self, filename1, filename2): def saveArray(self, filename, arr): - cfg = L2A_Config() filename = self._testdir + filename + '.npy' save(filename, arr) if(os.path.exists(self._L2A_bandDir) == False): - os.makedirs(self._L2A_bandDir) - - cfg.tracer.info('File ' + filename + ' saved to disk') + os.makedirs(self._L2A_bandDir) + self.logger.info('File ' + filename + ' saved to disk') return def sceneCouldHaveSnow(self): - globalSnowMapFn = self.config.getStr('Scene_Classification', 'Snow_Map_Reference') - globalSnowMapFn = self.config.libDir + globalSnowMapFn + globalSnowMapFn = self.config.snowMapReference + globalSnowMapFn = os.path.join(self.config.libDir, globalSnowMapFn) if((os.path.isfile(globalSnowMapFn)) == False): - self.config.tracer.error('global snow map not present, snow detection will be performed') + self.logger.error('global snow map not present, snow detection will be performed') return True - - img = Image.open(globalSnowMapFn) + + l.acquire() + try: + img = Image.open(globalSnowMapFn) + finally: + l.release() + globalSnowMap = array(img) xy = self.cornerCoordinates xp = L2A_XmlParser(self.config, 'T2A') @@ -1762,6 +2197,5 @@ def sceneCouldHaveSnow(self): aoi = globalSnowMap[yMin:yMax,xMin:xMax] if(aoi.max() > 0): return True + return False - - diff --git a/sen2cor/L2A_XmlParser.py b/sen2cor/L2A_XmlParser.py old mode 100755 new mode 100644 index 131c718..7f32bfc --- a/sen2cor/L2A_XmlParser.py +++ b/sen2cor/L2A_XmlParser.py @@ -2,11 +2,13 @@ import os, sys from lxml import etree, objectify from L2A_Library import stdoutWrite, stderrWrite -from L2A_Borg import Borg +from multiprocessing import Lock +l = Lock() -class L2A_XmlParser(Borg): +class L2A_XmlParser(object): def __init__(self, config, product): self._config = config + self._logger = config.logger self._product = product self._xmlFn = None self._xmlName = None @@ -14,6 +16,7 @@ def __init__(self, config, product): self._tree = None self._scheme = None + l.acquire() try: doc = objectify.parse(config.configFn) root = doc.getroot() @@ -24,130 +27,150 @@ def __init__(self, config, product): tileScheme2a = cs.Tile_Scheme_2A.text dsScheme1c = cs.DS_Scheme_1C.text dsScheme2a = cs.DS_Scheme_2A.text - except: - config.tracer.fatal('Error in parsing config file.') - config.exitError(); - - if(product == 'UP1C'): - self._xmlFn = config.L1C_UP_MTD_XML - self._scheme = upScheme1c - elif(product == 'UP2A'): - self._xmlFn = config.L2A_UP_MTD_XML - self._scheme = upScheme2a - elif(product == 'DS1C'): - self._xmlFn = config.L1C_DS_MTD_XML - self._scheme = dsScheme1c - elif(product == 'DS2A'): - self._xmlFn = config.L2A_DS_MTD_XML - self._scheme = dsScheme2a - elif(product == 'T1C'): - self._xmlFn = config.L1C_TILE_MTD_XML - self._scheme = tileScheme1c - elif(product == 'T2A'): - self._xmlFn = config.L2A_TILE_MTD_XML - self._scheme = tileScheme2a - elif(product == 'GIPP'): - self._xmlFn = config.configFn - self._scheme = None - else: - config.tracer.fatal('wrong identifier for xml structure: ' + product) - config.exitError() - - self.setRoot(); - return - - - def getRoot(self, key=None): - try: - if key == None: - return self._root + # gippScheme = cs.GIPP_Scheme.text + # scScheme = cs.SC_Scheme.text + # acScheme = cs.AC_Scheme.text + + if(product == 'UP1C'): + self._xmlFn = config.L1C_UP_MTD_XML + self._scheme = upScheme1c + elif(product == 'UP2A'): + self._xmlFn = config.L2A_UP_MTD_XML + self._scheme = upScheme2a + elif(product == 'DS1C'): + self._xmlFn = config.L1C_DS_MTD_XML + self._scheme = dsScheme1c + elif(product == 'DS2A'): + self._xmlFn = config.L2A_DS_MTD_XML + self._scheme = dsScheme2a + elif(product == 'T1C'): + self._xmlFn = config.L1C_TILE_MTD_XML + self._scheme = tileScheme1c + elif(product == 'T2A'): + self._xmlFn = config.L2A_TILE_MTD_XML + self._scheme = tileScheme2a + elif(product == 'GIPP'): + self._xmlFn = config.configFn + self._scheme = "L2A_GIPP.xsd" + elif(product == 'SC_GIPP'): + self._xmlFn = config.configSC + self._scheme = 'L2A_CAL_SC_GIPP.xsd' + elif(product == 'AC_GIPP'): + self._xmlFn = config.configAC + self._scheme = "L2A_CAL_AC_GIPP.xsd" + elif(product == 'Manifest'): + self._xmlFn = config.L2A_MANIFEST_SAFE + self._scheme = 'S2-PDGS-TAS-DI-PSD-V13.1_SAFE/resources/xsd/int/esa/safe/sentinel/1.1/sentinel-2/msi/archive_l2a_user_product/xfdu.xsd' else: - root = self._root[key] - return root - except: - return False + self._logger.fatal('wrong identifier for xml structure: ' + product) + finally: + l.release() + + self.setRoot(); def setRoot(self): - if self._root != None: - return True + l.acquire() try: doc = objectify.parse(self._xmlFn) self._root = doc.getroot() - return True + ret = True except: - return False + ret = False + finally: + l.release() + + return ret - def getTree(self, key, subkey): + def getRoot(self, key=None): + l.acquire() try: - tree = self._root[key] - return tree['{}' + subkey] + if key == None: + root = self._root + else: + root = self._root[key] except: - return False + root = False + finally: + l.release() + + return root - def setTree(self, key, subkey): - try: - root = self._root[key] - except: - return False + def getTree(self, key, subkey): + l.acquire() try: - self._tree = root['{}' + subkey] - return True + tree = self._root[key] + ret = tree['{}' + subkey] except: - self._tree = root - if(self.append(subkey, '') == True): - try: - self._tree = root['{}' + subkey] - self.export() - return True - except: - return False - return False - + ret = False + finally: + l.release() + + return ret + def validate(self): - dummy, fn = os.path.split(self._xmlFn) - stdoutWrite('Validating metadata file %s against scheme ...\n' % fn) + fn = os.path.basename(self._xmlFn) + self._logger.info('validating metadata file %s against scheme' % fn) + l.acquire() try: - schema = etree.XMLSchema(file = self._config.configDir + '/' + self._scheme) + schema = etree.XMLSchema(file = os.path.join(self._config.configDir, self._scheme)) parser = etree.XMLParser(schema = schema) objectify.parse(self._xmlFn, parser) - stdoutWrite('Metadata file is valid.\n') - return True + self._logger.info('metadata file is valid') + ret = True except etree.XMLSyntaxError, err: - stdoutWrite('Metadata file is invalid, see logfile for details.\n') - self._config.logger.error('Schema file: %s' % self._scheme) - self._config.logger.error('Details: %s' % str(err)) - return False + stdoutWrite('Metadata file is invalid, see report file for details.\n') + self._logger.error('Schema file: %s' % self._scheme) + self._logger.error('Details: %s' % str(err)) + ret = False + except: + stdoutWrite('Unspecific Error in metadata.\n') + self._logger.error('unspecific error in metadata') + ret = False + finally: + l.release() + + return ret def append(self, key, value): + ret = False + l.acquire() try: e = etree.Element(key) e.text = value self._tree.append(e) - return True + ret = True except: - return False - + ret = False + finally: + l.release() + + return ret + def export(self): import codecs - outfile = codecs.open(self._xmlFn, 'w', 'utf-8') - outfile.write('\n') - objectify.deannotate(self._root, xsi_nil=True, cleanup_namespaces=True) - outstr = etree.tostring(self._root, pretty_print=True) - outfile.write(outstr) - outfile.close() - return self.setRoot() + l.acquire() + try: + outfile = codecs.open(self._xmlFn, 'w', 'utf-8') + outfile.write('\n') + objectify.deannotate(self._root, xsi_nil=True, cleanup_namespaces=True) + outstr = etree.tostring(self._root, pretty_print=True) + outfile.write(outstr) + outfile.close() + finally: + l.release() + + return self.setRoot() + def convert(self): import codecs - outfile = codecs.open(self._xmlFn, 'w', 'utf-8') - outfile.write('\n') objectify.deannotate(self._root, xsi_nil=True, cleanup_namespaces=True) outstr = etree.tostring(self._root, pretty_print=True) outstr = outstr.replace('-1C', '-2A') @@ -173,106 +196,17 @@ def convert(self): '') outstr = outstr.replace('', '\n'\ '') - outfile.write(outstr) - outfile.close() - return self.setRoot() - - - def getIntArray(self, node): - nrows = len(node) - if nrows < 0: - return False - - ncols = len(node[0].text.split()) - a = zeros([nrows,ncols],dtype=int) - - for i in range(nrows): - a[i,:] = nan_to_num(array(node[i].text.split(),dtype(int))) - return a - - - def getUintArray(self, node): - nrows = len(node) - if nrows < 0: - return False - - ncols = len(node[0].text.split()) - a = zeros([nrows,ncols],dtype=uint) - - for i in range(nrows): - a[i,:] = nan_to_num(array(node[i].text.split(),dtype(uint))) - - return a - - - def getFloatArray(self, node): - nrows = len(node) - if nrows < 0: - return False - - ncols = len(node[0].text.split()) - a = zeros([nrows,ncols],dtype=float32) - - for i in range(nrows): - a[i,:] = nan_to_num(array(node[i].text.split(),dtype(float32))) - - return a - - - def getStringArray(self, node): - nrows = len(node) - if nrows < 0: - return False - - ncols = len(node[0].text.split()) - a = zeros([nrows,ncols],dtype=str) - - for i in range(nrows): - a[i,:] = array(node[i].text.split(),dtype(str)) - - return a - - - def setArrayAsStr(self, node, a): - set_printoptions(precision=6) - if a.ndim == 1: - nrows = a.shape[0] - for i in nrows: - node[i] = a[i],dtype=str - - elif a.ndim == 2: - nrows = a.shape[0] - ncols = a.shape[1] - for i in range(nrows): - aStr = array_str(a[i,:]).strip('[]') - node[i] = aStr - return True - else: - return False - - - def getViewingIncidenceAnglesArray(self, node, bandId, detectorId, _type='Zenith'): - nrows = len(node) - for i in range(nrows): - if((int(node[i].bandId) == bandId) and (int(node[i].detectorId) == detectorId)): - if _type == 'Zenith': - a = self.getFloatArray(node[i].Zenith.Values_List.VALUES) - elif _type == 'Azimuth': - a = self.getFloatArray(node[i].Azimuth.Values_List.VALUES) - return a - return False - - - def setViewingIncidenceAnglesArray(self, node, arr, bandId, detectorId, _type='Zenith'): - nrows = len(node) - for i in range(nrows): - if((int(node[i].bandId) == bandId) and (int(node[i].detectorId) == detectorId)): - if _type == 'Zenith': - return self.setArrayAsStr(node[i].Zenith.Values_List.VALUES, arr) - elif _type == 'Azimuth': - return self.setArrayAsStr(node[i].Azimuth.Values_List.VALUES, arr) - - return False - - \ No newline at end of file + l.acquire() + try: + outfile = codecs.open(self._xmlFn, 'w', 'utf-8') + outfile.write('\n') + outfile.write(outstr) + outfile.close() + except: + stdoutWrite('Error in writing file: %s\n' % self._xmlFn) + self._logger.error('error in writing file: %s\n' % self._xmlFn) + finally: + l.release() + + return self.setRoot() diff --git a/sen2cor/cfg/DICO/1.0/DPC/header/DPC_Header.xsd b/sen2cor/cfg/DICO/1.0/DPC/header/DPC_Header.xsd deleted file mode 100755 index 309f155..0000000 --- a/sen2cor/cfg/DICO/1.0/DPC/header/DPC_Header.xsd +++ /dev/null @@ -1,52 +0,0 @@ - - - - - - - - - - Satellite identification - - - - - Interface description and specification - - - - - - name of XML Schema validating this file - - - - - - - - - - XML Schema version number - - - - - - - - - - - UTC Production date-time - - - - - SubSystem providing the Interface : DPC - - - - - diff --git a/sen2cor/cfg/DICO/1.0/DPC/processing/baseProcessing.xsd b/sen2cor/cfg/DICO/1.0/DPC/processing/baseProcessing.xsd deleted file mode 100755 index 473824e..0000000 --- a/sen2cor/cfg/DICO/1.0/DPC/processing/baseProcessing.xsd +++ /dev/null @@ -1,132 +0,0 @@ - - - - - - Description of data exchange with DPC external entity - - - - - - - Data type (ie : product, GIPP, aux_data, ...) - - - - - - S2 data processing level : L0, L1A, L1B, L1C, L2, Tile Consolidation - - - - - - - Version of the processing chain to execute (not used by the current version of Phoebus) - - - - - - Production context saving behavior - - - - - saving type : full or mimimum - - - - - Location to put the saving package - - - - - - - Version identification - - - - - - - - Identifier of a production request - - - - - - - - - - - - - Activation of trace mode during execution (true/false) - - - - - - Production priority level (integer value 0 to 100) - - - - - - S2 data processing level : L0, L1A, L1B, L1C, L2, Tile Consolidation - - - - - - - - - - - - - - - Production Context execution saving type : full or minimum - - - - - - - - - URL to exchange data with external entities - - - - - - - - Internal DPC components - - - - - - - - - Order to a processing execution - - - - - - - - - diff --git a/sen2cor/cfg/DICO/1.0/DPC/processing/synthesisReport.xsd b/sen2cor/cfg/DICO/1.0/DPC/processing/synthesisReport.xsd deleted file mode 100755 index 3afb884..0000000 --- a/sen2cor/cfg/DICO/1.0/DPC/processing/synthesisReport.xsd +++ /dev/null @@ -1,274 +0,0 @@ - - - - - - - This type is not used - - - - - Description d'une donnee manquante - - - - - - - - from RD 213: this schema describes the whole synthesis reports of each steps and jobs for a workplan id - - - - - - - For each IPF launch of the workplan - - - - - - - - - - - - - - - This type is not used - - - - - - Recopie du tag equivalent du fichier de Commande - - - - - - - - - - Recopie du tag equivalent du fichier de Commande si present (cas des LAI) - - - - - - - - - - Recopie du tag equivalent du fichier de Commande avec mise a jour dans le cas de creation de fichiers - - - - - - - - - - Recopie du tag equivalent du fichier de Commande - - - - - - - - - - Compte-rendu d'execution - - - - - - Etat d'execution ("RUNNING", "FINISHED", "STOPPED") - - - - - - - - - - - - Etat de fin d'execution ("OK", "WARNING", "ERROR", "ABORTED") - - - - - - - - - - - - - Messages de log generes au cours de l'execution (tag present uniquement dans le cas des LAI) - - - - - - Messages de type WARNING - - - - - - - - - - Messages de type ERROR - - - - - - - - - - - - - - - - - - - This type is not used - - - - - - - - - - - - - - This type is not used - - - - - Description d'une donnee demandee a l'archive - - - - - - - DThis type is not used - - - - - Type de la donnee recherchee - - - - - - - - - - - - - - Critere de selection (SQL) - - - - - - - This type is not used - - - - - nom de la fonction impact�e - - - - - - - - - - Code du message - - - - - - - - - - Libell� du message - - - - - - - - - - Descriptif du message - - - - - - - - - - - - This type describes the report of each ipf - - - - - - - - Number of the launch ID for each launch, 1 if no parallelisation for the IPF step - - - - - Including of each Idp_Sc_Launch_Report, only one if no parallelisation - - - - - - - - diff --git a/sen2cor/cfg/DICO/1.0/DPC/services/DPC_ExceptionReport.xsd b/sen2cor/cfg/DICO/1.0/DPC/services/DPC_ExceptionReport.xsd deleted file mode 100755 index 98b863f..0000000 --- a/sen2cor/cfg/DICO/1.0/DPC/services/DPC_ExceptionReport.xsd +++ /dev/null @@ -1,63 +0,0 @@ - - - - owsExceptionReport.xsd 2011-02-07 - This XML Schema Document encodes the Exception Report response to all OWS operations. - - OWS is an OGC Standard. - Copyright (c) 2006,2010 Open Geospatial Consortium, Inc. All Rights Reserved. - To obtain additional rights of use, visit http://www.opengeospatial.org/legal/ . - - - - - - - - Report Message returned to the hosted processing Client hen the server detects an error while processing that operation request. It is an adaptation of the Opengis OWS Report message to the S2-PDGS needs. Some optional node are suppressed - - - - - - Unordered list of one or more Exception elements that each describes an error. These Exception elements shall be interpreted by clients as being independent of one another (not hierarchical). - - - - - - Specification version for OWS operation. The string value shall contain one x.y.z "version" value (e.g., "2.1.3"). A version number shall contain three non-negative integers separated by decimal points, in the form "x.y.z". The integers y and z shall not exceed 99. Each version shall be for the Implementation Specification (document) and the associated XML Schemas to which requested operations will conform. An Implementation Specification version normally specifies XML Schemas against which an XML encoded operation response must conform and should be validated. See Version negotiation subclause for more information. - - - - - - - - - - - - - - - An Exception element describes one detected error that a server chooses to convey to the client. - - - - - Ordered sequence of text strings that describe this specific exception or error. The contents of these strings are left open to definition by each server implementation. A server is strongly encouraged to include at least one ExceptionText value, to provide more information about the detected error than provided by the exceptionCode. When included, multiple ExceptionText values shall provide hierarchical information about one detected error, with the most significant information listed first. - - - - - - A code representing the type of this exception, which shall be selected from a set of exceptionCode values specified for the specific service operation and server. - - - - diff --git a/sen2cor/cfg/DICO/1.0/DPC/services/ProductionManage.xsd b/sen2cor/cfg/DICO/1.0/DPC/services/ProductionManage.xsd deleted file mode 100755 index f8cccf2..0000000 --- a/sen2cor/cfg/DICO/1.0/DPC/services/ProductionManage.xsd +++ /dev/null @@ -1,90 +0,0 @@ - - - - - - - - - - Root: Control order description file - - - - - - Providers parameters - - - - - - Satellite identification - - - - - - - Userame of the operator that launches the control order - - - - - Date of XML file creation - - - - - - - - - - - not filled for the current version of DPC - - - - - not filled for the current version of DPC - - - - - not filled for the current version of DPC - - - - - - - - New priority level. - - - - - - - - - The type of action to be applied : STOP / CANCEL / RESUME/ CHANGE_PRIORITY - - - - - - - - name of XML Schema validating this file - - - - - XML Schema version number - - - - - diff --git a/sen2cor/cfg/DICO/1.0/DPC/services/opengis/ows/1.1.0/Examples/exampleCapabilities.xsd b/sen2cor/cfg/DICO/1.0/DPC/services/opengis/ows/1.1.0/Examples/exampleCapabilities.xsd deleted file mode 100755 index 1ced0c8..0000000 --- a/sen2cor/cfg/DICO/1.0/DPC/services/opengis/ows/1.1.0/Examples/exampleCapabilities.xsd +++ /dev/null @@ -1,42 +0,0 @@ - - - - exampleCapabilities.xsd 2006-08-09 - Copyright (c) 2006 Open Geospatial Consortium, Inc. All Rights Reserved. - - - - - - - - - - XML encoded GetCapabilities operation response. This document provides clients with service metadata about a specific service instance, usually including metadata about the tightly-coupled data served. If the server does not implement the updateSequence parameter, the server shall always return the complete Capabilities document, without the updateSequence parameter. When the server implements the updateSequence parameter and the GetCapabilities operation request included the updateSequence parameter with the current value, the server shall return this element with only the "version" and "updateSequence" attributes. Otherwise, all optional elements shall be included or not depending on the actual value of the Contents parameter in the GetCapabilities operation request. This base type shall be extended by each specific OWS to include the additional contents needed. - - - - - - - This element shall be included whenever this OWS operates on any tightly-coupled data, by any specified operation (even when that data is also available to clients from another service). - - - - - - - - - - Metadata about the data served by this server. The XML Schema of this section is specific to each OWS type. - - - diff --git a/sen2cor/cfg/DICO/1.0/DPC/services/opengis/ows/1.1.0/Examples/exampleCapabilities1.xml b/sen2cor/cfg/DICO/1.0/DPC/services/opengis/ows/1.1.0/Examples/exampleCapabilities1.xml deleted file mode 100755 index 01774db..0000000 --- a/sen2cor/cfg/DICO/1.0/DPC/services/opengis/ows/1.1.0/Examples/exampleCapabilities1.xml +++ /dev/null @@ -1,140 +0,0 @@ - - - - - Acme Corp. Map Server - Serveur de Carte par Acme Corp. - - Map Server maintained by Acme Corporation. - Contact: webmaster@wmt.acme.com. - High quality maps showing roadrunner nests and possible ambush locations. - - bird - roadrunner - ambush - - OGC:WMS - 1.2.0 - 1.1.1 - NONE - NONE - - - Acme Corporation - - - Jeff Smith, Server Administrator - Computer Scientist - - - +1 301 555-1212 - +1 301 555-1212 - -
- NASA Goddard Space Flight Center - Greenbelt - MD - 20771 - USA - user@host.com -
-
-
-
- - - - - - - - - - text/xml - - - - - - - - - - - - - image/gif - image/png - image/jpeg - - - - - text/xml - text/plain - text/html - application/vnd.ogc.se_inimage - - - - - - - - - - - - text/xml - text/plain - text/html - - - - - - text/xml - text/plain - text/html - - - - - 5 - - - - - 4000 - - - - - 4000 - - - - - - - - - - - - 999 999 - 999 999 - - - - 999 999 - 999 999 - - - - -
diff --git a/sen2cor/cfg/DICO/1.0/DPC/services/opengis/ows/1.1.0/Examples/exampleConstraint1.xml b/sen2cor/cfg/DICO/1.0/DPC/services/opengis/ows/1.1.0/Examples/exampleConstraint1.xml deleted file mode 100755 index 706c97a..0000000 --- a/sen2cor/cfg/DICO/1.0/DPC/services/opengis/ows/1.1.0/Examples/exampleConstraint1.xml +++ /dev/null @@ -1,28 +0,0 @@ - - - - - - - - - - - 1 - 1000 - - - Maximum value of TBD - urn:ogc:def:dataType:OGC:1.1:positiveInteger - - - - 1 - - Maximum value of TBD - urn:ogc:def:dataType:OGC:1.1:positiveInteger - - diff --git a/sen2cor/cfg/DICO/1.0/DPC/services/opengis/ows/1.1.0/Examples/exampleExceptionReport1.xml b/sen2cor/cfg/DICO/1.0/DPC/services/opengis/ows/1.1.0/Examples/exampleExceptionReport1.xml deleted file mode 100755 index 30a19fa..0000000 --- a/sen2cor/cfg/DICO/1.0/DPC/services/opengis/ows/1.1.0/Examples/exampleExceptionReport1.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - - service - - - version - - diff --git a/sen2cor/cfg/DICO/1.0/DPC/services/opengis/ows/1.1.0/Examples/exampleExceptionReport2.xml b/sen2cor/cfg/DICO/1.0/DPC/services/opengis/ows/1.1.0/Examples/exampleExceptionReport2.xml deleted file mode 100755 index 44af62d..0000000 --- a/sen2cor/cfg/DICO/1.0/DPC/services/opengis/ows/1.1.0/Examples/exampleExceptionReport2.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - diff --git a/sen2cor/cfg/DICO/1.0/DPC/services/opengis/ows/1.1.0/Examples/exampleGeneralBox2.xml b/sen2cor/cfg/DICO/1.0/DPC/services/opengis/ows/1.1.0/Examples/exampleGeneralBox2.xml deleted file mode 100755 index 1d65ef8..0000000 --- a/sen2cor/cfg/DICO/1.0/DPC/services/opengis/ows/1.1.0/Examples/exampleGeneralBox2.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - - 189000 834000 - 285000 962000 - diff --git a/sen2cor/cfg/DICO/1.0/DPC/services/opengis/ows/1.1.0/Examples/exampleGetCapabilities2.xml b/sen2cor/cfg/DICO/1.0/DPC/services/opengis/ows/1.1.0/Examples/exampleGetCapabilities2.xml deleted file mode 100755 index 06e0c13..0000000 --- a/sen2cor/cfg/DICO/1.0/DPC/services/opengis/ows/1.1.0/Examples/exampleGetCapabilities2.xml +++ /dev/null @@ -1,17 +0,0 @@ - - - - - 1.0.0 - 0.8.3 - - -
Contents
-
- - text/xml - -
diff --git a/sen2cor/cfg/DICO/1.0/DPC/services/opengis/ows/1.1.0/Examples/exampleOperationsMetadata.xml b/sen2cor/cfg/DICO/1.0/DPC/services/opengis/ows/1.1.0/Examples/exampleOperationsMetadata.xml deleted file mode 100755 index 738e92c..0000000 --- a/sen2cor/cfg/DICO/1.0/DPC/services/opengis/ows/1.1.0/Examples/exampleOperationsMetadata.xml +++ /dev/null @@ -1,84 +0,0 @@ - - - - - - - - - - - - text/xml - - - - - - - - - - - text/xml - - - - - - - - image/gif - image/png - image/jpeg - - - - - text/xml - text/plain - text/html - application/vnd.ogc.se_inimage - - - - - - - - - - - - text/xml - text/plain - text/html - - - - - - text/xml - text/plain - text/html - - - - - 5 - - - - - 4000 - - - - - 4000 - - - diff --git a/sen2cor/cfg/DICO/1.0/DPC/services/opengis/ows/1.1.0/Examples/exampleWGS84Box2.xml b/sen2cor/cfg/DICO/1.0/DPC/services/opengis/ows/1.1.0/Examples/exampleWGS84Box2.xml deleted file mode 100755 index 53eabae..0000000 --- a/sen2cor/cfg/DICO/1.0/DPC/services/opengis/ows/1.1.0/Examples/exampleWGS84Box2.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - - -71.63 41.75 - -70.78 42.90 - diff --git a/sen2cor/cfg/DICO/1.0/DPC/services/opengis/ows/1.1.0/ReadMe.txt b/sen2cor/cfg/DICO/1.0/DPC/services/opengis/ows/1.1.0/ReadMe.txt deleted file mode 100755 index 45a2d86..0000000 --- a/sen2cor/cfg/DICO/1.0/DPC/services/opengis/ows/1.1.0/ReadMe.txt +++ /dev/null @@ -1,87 +0,0 @@ -OpenGIS(r) OWS Common- ReadMe.txt -=========================== - -OpenGIS(r) Web Service Common (OWS) Implementation Specification - -More information on the OGC OWS Common standard may be found at - http://www.opengeospatial.org/standards/common - -The most current schema are available at http://schemas.opengis.net/ . - -The root (all-components) XML Schema Document, which includes -directly and indirectly all the XML Schema Documents, defined by -OWS 2.0 is owsAll.xsd . - -* Latest version is: http://schemas.opengis.net/ows/2.0/owsAll.xsd * - ------------------------------------------------------------------------ - -2011-02-07 Peter Schut - - * v1.1.0: The 1.1.0 version of owsExceptionReport.xsd has been corrected - to reflect the corrigenda (OGC 07-141). The owsExceptionReport.xsd - schema previously referenced an obsolete version of the XML schema. - -2010-05-06 Jim Greenwood - - * v2.0.0: The 2.0.0 version are the XML Schema Documents for OGC - document 06-121r9, approved as an Implementation Specification in May - 2005. - -2010-01-21 Kevin Stegemoller - * update/verify copyright (06-135r7 s#3.2) - * migrate relative to absolute URLs of schema imports (06-135r7 s#15) - * updated xsd:schema:@version attribute (06-135r7 s#13.4) - * add archives (.zip) files of previous versions - * create/update ReadMe.txt (06-135r7 s#17) - -2007-04-03 Arliss Whiteside - - * v1.1.0: OWS Common specification has been updated to version 1.1.0 - (OGC 06-121r3). These very small changes are taken from corrigendum - (OGC 07-016) which corrects the schemaLocation references in - declarations for the namespace - http://www.w3.org/1999/xlink, in the OWS Common 1.1 XML Schema. - These schemaLocation references are changed to relatively reference - the old schema location at - http://www.opengis.net/xlink/1.0.0/xlinks.xsd . - - * Note: check each OGC numbered document for detailed changes. - -2005-11-22 Arliss Whiteside - - * v1.0.0, v0.4.0, v0.3.2, v0.3.1, v0.3.0: All five of these sets of - XML Schema Documents have been edited to reflect the corrigenda to - all those OGC documents which are based on the change requests: - OGC 05-068r1 "Store xlinks.xsd file at a fixed location" - OGC 05-081r2 "Change to use relative paths" - - * v1.0.0: The 1.0.0 version are the XML Schema Documents for OGC - document 05-008, approved as an Implementation Specification in May - 2005. - - * v0.4.0: The 0.4.0 version are the XML Schema Documents for OGC - document 04-016r5. - - * v0.3.2: The 0.3.2 version are the XML Schema Documents after - correcting one small incorrect difference from OGC document - 04-016r3. - - * v0.3.1: The 0.3.1 version are the XML Schema Documents attached to - OGC document 04-016r3, containing that editing of document 04-016r2. - This Recommendation Paper is available to the public at - http://portal.opengis.org/files/?artifact_id=6324. - - * v0.3.0: OWS Common set of XML Schema Documents from OGC document - 04-016r2 approved as Recommendation Paper in the April 2004 OGC - meetings. - ------------------------------------------------------------------------ - -Policies, Procedures, Terms, and Conditions of OGC(r) are available - http://www.opengeospatial.org/ogc/legal/ . - -Copyright (c) 2010 Open Geospatial Consortium, Inc. All Rights Reserved. - ------------------------------------------------------------------------ - diff --git a/sen2cor/cfg/DICO/1.0/DPC/services/opengis/ows/1.1.0/ows19115subset.xsd b/sen2cor/cfg/DICO/1.0/DPC/services/opengis/ows/1.1.0/ows19115subset.xsd deleted file mode 100755 index eaff0f7..0000000 --- a/sen2cor/cfg/DICO/1.0/DPC/services/opengis/ows/1.1.0/ows19115subset.xsd +++ /dev/null @@ -1,232 +0,0 @@ - - - - - ows19115subset.xsd 2010-01-30 - This XML Schema Document encodes the parts of ISO 19115 used by the common "ServiceIdentification" and "ServiceProvider" sections of the GetCapabilities operation response, known as the service metadata XML document. The parts encoded here are the MD_Keywords, CI_ResponsibleParty, and related classes. The UML package prefixes were omitted from XML names, and the XML element names were all capitalized, for consistency with other OWS Schemas. This document also provides a simple coding of text in multiple languages, simplified from Annex J of ISO 19115. - - OWS is an OGC Standard. - Copyright (c) 2006,2010 Open Geospatial Consortium, Inc. All Rights Reserved. - To obtain additional rights of use, visit http://www.opengeospatial.org/legal/ . - - - - - - - - - Text string with the language of the string identified as recommended in the XML 1.0 W3C Recommendation, section 2.12. - - - - - - - - - - - Title of this resource, normally used for display to a human. - - - - - - Brief narrative description of this resource, normally used for display to a human. - - - - - - - - Unordered list of one or more commonly used or formalised word(s) or phrase(s) used to describe the subject. When needed, the optional "type" can name the type of the associated list of keywords that shall all have the same type. Also when needed, the codeSpace attribute of that "type" can reference the type name authority and/or thesaurus. - If the xml:lang attribute is not included in a Keyword element, then no language is specified for that element unless specified by another means. All Keyword elements in the same Keywords element that share the same xml:lang attribute value represent different keywords in that language. - For OWS use, the optional thesaurusName element was omitted as being complex information that could be referenced by the codeSpace attribute of the Type element. - - - - - - - - - - Name or code with an (optional) authority. If the codeSpace attribute is present, its value shall reference a dictionary, thesaurus, or authority for the name or code, such as the organisation who assigned the value, or the dictionary from which it is taken. - Type copied from basicTypes.xsd of GML 3 with documentation edited, for possible use outside the ServiceIdentification section of a service metadata document. - - - - - - - - - - - Identification of, and means of communication with, person(s) responsible for the resource(s). - For OWS use in the ServiceProvider section of a service metadata document, the optional organizationName element was removed, since this type is always used with the ProviderName element which provides that information. The optional individualName element was made mandatory, since either the organizationName or individualName element is mandatory. The mandatory "role" element was changed to optional, since no clear use of this information is known in the ServiceProvider section. - - - - - - Identification of, and means of communication with, person responsible for the server. At least one of IndividualName, OrganisationName, or PositionName shall be included. - - - - - - - - - - - - - - Identification of, and means of communication with, person responsible for the server. - For OWS use in the ServiceProvider section of a service metadata document, the optional organizationName element was removed, since this type is always used with the ProviderName element which provides that information. The mandatory "role" element was changed to optional, since no clear use of this information is known in the ServiceProvider section. - - - - - - - - - - - - Name of the responsible person: surname, given name, title separated by a delimiter. - - - - - - Name of the responsible organization. - - - - - - Role or position of the responsible person. - - - - - - Function performed by the responsible party. Possible values of this Role shall include the values and the meanings listed in Subclause B.5.5 of ISO 19115:2003. - - - - - - Address of the responsible party. - - - - - - Information required to enable contact with the responsible person and/or organization. - For OWS use in the service metadata document, the optional hoursOfService and contactInstructions elements were retained, as possibly being useful in the ServiceProvider section. - - - - - Telephone numbers at which the organization or individual may be contacted. - - - - - Physical and email address at which the organization or individual may be contacted. - - - - - On-line information that can be used to contact the individual or organization. OWS specifics: The xlink:href attribute in the xlink:simpleLink attribute group shall be used to reference this resource. Whenever practical, the xlink:href attribute with type anyURI should be a URL from which more contact information can be electronically retrieved. The xlink:title attribute with type "string" can be used to name this set of information. The other attributes in the xlink:simpleLink attribute group should not be used. - - - - - Time period (including time zone) when individuals can contact the organization or individual. - - - - - Supplemental instructions on how or when to contact the individual or organization. - - - - - - - - Reference to on-line resource from which data can be obtained. - For OWS use in the service metadata document, the CI_OnlineResource class was XML encoded as the attributeGroup "xlink:simpleLink", as used in GML. - - - - - - - Telephone numbers for contacting the responsible individual or organization. - - - - - Telephone number by which individuals can speak to the responsible organization or individual. - - - - - Telephone number of a facsimile machine for the responsible -organization or individual. - - - - - - - - Location of the responsible individual or organization. - - - - - Address line for the location. - - - - - City of the location. - - - - - State or province of the location. - - - - - ZIP or other postal code. - - - - - Country of the physical address. - - - - - Address of the electronic mailbox of the responsible organization or individual. - - - - - diff --git a/sen2cor/cfg/DICO/1.0/DPC/services/opengis/ows/1.1.0/owsAll.xsd b/sen2cor/cfg/DICO/1.0/DPC/services/opengis/ows/1.1.0/owsAll.xsd deleted file mode 100755 index 4cb1719..0000000 --- a/sen2cor/cfg/DICO/1.0/DPC/services/opengis/ows/1.1.0/owsAll.xsd +++ /dev/null @@ -1,23 +0,0 @@ - - - - owsAll.xsd 2010-01-30 - This XML Schema Document includes and imports, directly and indirectly, all the XML Schemas defined by the OWS Common Implemetation Specification. - - OWS is an OGC Standard. - Copyright (c) 2006,2010 Open Geospatial Consortium, Inc. All Rights Reserved. - To obtain additional rights of use, visit http://www.opengeospatial.org/legal/ . - - - - - - - - - diff --git a/sen2cor/cfg/DICO/1.0/DPC/services/opengis/ows/1.1.0/owsCommon.xsd b/sen2cor/cfg/DICO/1.0/DPC/services/opengis/ows/1.1.0/owsCommon.xsd deleted file mode 100755 index 64d127e..0000000 --- a/sen2cor/cfg/DICO/1.0/DPC/services/opengis/ows/1.1.0/owsCommon.xsd +++ /dev/null @@ -1,154 +0,0 @@ - - - - - owsCommon.xsd 2010-01-30 - This XML Schema Document encodes various parameters and parameter types that can be used in OWS operation requests and responses. - - OWS is an OGC Standard. - Copyright (c) 2006,2010 Open Geospatial Consortium, Inc. All Rights Reserved. - To obtain additional rights of use, visit http://www.opengeospatial.org/legal/ . - - - - - - - - XML encoded identifier of a standard MIME type, possibly a parameterized MIME type. - - - - - - - - - Specification version for OWS operation. The string value shall contain one x.y.z "version" value (e.g., "2.1.3"). A version number shall contain three non-negative integers separated by decimal points, in the form "x.y.z". The integers y and z shall not exceed 99. Each version shall be for the Implementation Specification (document) and the associated XML Schemas to which requested operations will conform. An Implementation Specification version normally specifies XML Schemas against which an XML encoded operation response must conform and should be validated. See Version negotiation subclause for more information. - - - - - - - - - - - This element either references or contains more metadata about the element that includes this element. To reference metadata stored remotely, at least the xlinks:href attribute in xlink:simpleLink shall be included. Either at least one of the attributes in xlink:simpleLink or a substitute for the AbstractMetaData element shall be included, but not both. An Implementation Specification can restrict the contents of this element to always be a reference or always contain metadata. (Informative: This element was adapted from the metaDataProperty element in GML 3.0.) - - - - - - - Reference to metadata recorded elsewhere, either external to this XML document or within it. Whenever practical, the xlink:href attribute with type anyURI should include a URL from which this metadata can be electronically retrieved. - - - - - Optional reference to the aspect of the element which includes this "metadata" element that this metadata provides more information about. - - - - - - - Abstract element containing more metadata about the element that includes the containing "metadata" element. A specific server implementation, or an Implementation Specification, can define concrete elements in the AbstractMetaData substitution group. - - - - - - - - - XML encoded minimum rectangular bounding box (or region) parameter, surrounding all the associated data. - This type is adapted from the EnvelopeType of GML 3.1, with modified contents and documentation for encoding a MINIMUM size box SURROUNDING all associated data. - - - - - Position of the bounding box corner at which the value of each coordinate normally is the algebraic minimum within this bounding box. In some cases, this position is normally displayed at the top, such as the top left for some image coordinates. For more information, see Subclauses 10.2.5 and C.13. - - - - - Position of the bounding box corner at which the value of each coordinate normally is the algebraic maximum within this bounding box. In some cases, this position is normally displayed at the bottom, such as the bottom right for some image coordinates. For more information, see Subclauses 10.2.5 and C.13. - - - - - - Usually references the definition of a CRS, as specified in [OGC Topic 2]. Such a CRS definition can be XML encoded using the gml:CoordinateReferenceSystemType in [GML 3.1]. For well known references, it is not required that a CRS definition exist at the location the URI points to. If no anyURI value is included, the applicable CRS must be either: -a) Specified outside the bounding box, but inside a data structure that includes this bounding box, as specified for a specific OWS use of this bounding box type. -b) Fixed and specified in the Implementation Specification for a specific OWS use of the bounding box type. - - - - - The number of dimensions in this CRS (the length of a coordinate sequence in this use of the PositionType). This number is specified by the CRS definition, but can also be specified here. - - - - - - - Position instances hold the coordinates of a position in a coordinate reference system (CRS) referenced by the related "crs" attribute or elsewhere. For an angular coordinate axis that is physically continuous for multiple revolutions, but whose recorded values can be discontinuous, special conditions apply when the bounding box is continuous across the value discontinuity: -a) If the bounding box is continuous clear around this angular axis, then ordinate values of minus and plus infinity shall be used. -b) If the bounding box is continuous across the value discontinuity but is not continuous clear around this angular axis, then some non-normal value can be used if specified for a specific OWS use of the BoundingBoxType. For more information, see Subclauses 10.2.5 and C.13. - This type is adapted from DirectPositionType and doubleList of GML 3.1. The adaptations include omission of all the attributes, since the needed information is included in the BoundingBoxType. - - - - - - - - - XML encoded minimum rectangular bounding box (or region) parameter, surrounding all the associated data. This box is specialized for use with the 2D WGS 84 coordinate reference system with decimal values of longitude and latitude. - This type is adapted from the general BoundingBoxType, with modified contents and documentation for use with the 2D WGS 84 coordinate reference system. - - - - - - - Position of the bounding box corner at which the values of longitude and latitude normally are the algebraic minimums within this bounding box. For more information, see Subclauses 10.4.5 and C.13. - - - - - Position of the bounding box corner at which the values of longitude and latitude normally are the algebraic minimums within this bounding box. For more information, see Subclauses 10.4.5 and C.13. - - - - - - This attribute can be included when considered useful. When included, this attribute shall reference the 2D WGS 84 coordinate reference system with longitude before latitude and decimal values of longitude and latitude. - - - - - The number of dimensions in this CRS (the length of a coordinate sequence in this use of the PositionType). This number is specified by the CRS definition, but can also be specified here. - - - - - - - - - Two-dimensional position instances hold the longitude and latitude coordinates of a position in the 2D WGS 84 coordinate reference system. The longitude value shall be listed first, followed by the latitude value, both in decimal degrees. Latitude values shall range from -90 to +90 degrees, and longitude values shall normally range from -180 to +180 degrees. For the longitude axis, special conditions apply when the bounding box is continuous across the +/- 180 degrees meridian longitude value discontinuity: -a) If the bounding box is continuous clear around the Earth, then longitude values of minus and plus infinity shall be used. -b) If the bounding box is continuous across the value discontinuity but is not continuous clear around the Earth, then some non-normal value can be used if specified for a specific OWS use of the WGS84BoundingBoxType. For more information, see Subclauses 10.4.5 and C.13. - - - - - - diff --git a/sen2cor/cfg/DICO/1.0/DPC/services/opengis/ows/1.1.0/owsContents.xsd b/sen2cor/cfg/DICO/1.0/DPC/services/opengis/ows/1.1.0/owsContents.xsd deleted file mode 100755 index 77b6c84..0000000 --- a/sen2cor/cfg/DICO/1.0/DPC/services/opengis/ows/1.1.0/owsContents.xsd +++ /dev/null @@ -1,86 +0,0 @@ - - - - owsContents.xsd 2010-01-30 - This XML Schema Document encodes the typical Contents section of an OWS service metadata (Capabilities) document. This Schema can be built upon to define the Contents section for a specific OWS. If the ContentsBaseType in this XML Schema cannot be restricted and extended to define the Contents section for a specific OWS, all other relevant parts defined in owsContents.xsd shall be used by the "ContentsType" in the wxsContents.xsd prepared for the specific OWS. - - OWS is an OGC Standard. - Copyright (c) 2006,2010 Open Geospatial Consortium, Inc. All Rights Reserved. - To obtain additional rights of use, visit http://www.opengeospatial.org/legal/ . - - - - - - - - Contents of typical Contents section of an OWS service metadata (Capabilities) document. This type shall be extended and/or restricted if needed for specific OWS use to include the specific metadata needed. - - - - - Unordered set of summary descriptions for the datasets available from this OWS server. This set shall be included unless another source is referenced and all this metadata is available from that source. - - - - - Unordered set of references to other sources of metadata describing the coverage offerings available from this server. - - - - - - - - Reference to a source of metadata describing coverage offerings available from this server. This parameter can reference a catalogue server from which dataset metadata is available. This ability is expected to be used by servers with thousands or millions of datasets, for which searching a catalogue is more feasible than fetching a long Capabilities XML document. When no DatasetDescriptionSummaries are included, and one or more catalogue servers are referenced, this set of catalogues shall contain current metadata summaries for all the datasets currently available from this OWS server, with the metadata for each such dataset referencing this OWS server. - - - - - - - - Typical dataset metadata in typical Contents section of an OWS service metadata (Capabilities) document. This type shall be extended and/or restricted if needed for specific OWS use, to include the specific Dataset description metadata needed. - - - - - - - Unordered list of zero or more minimum bounding rectangles surrounding coverage data, using the WGS 84 CRS with decimal degrees and longitude before latitude. If no WGS 84 bounding box is recorded for a coverage, any such bounding boxes recorded for a higher level in a hierarchy of datasets shall apply to this coverage. If WGS 84 bounding box(es) are recorded for a coverage, any such bounding boxes recorded for a higher level in a hierarchy of datasets shall be ignored. For each lowest-level coverage in a hierarchy, at least one applicable WGS84BoundingBox shall be either recorded or inherited, to simplify searching for datasets that might overlap a specified region. If multiple WGS 84 bounding boxes are included, this shall be interpreted as the union of the areas of these bounding boxes. - - - - - Unambiguous identifier or name of this coverage, unique for this server. - - - - - Unordered list of zero or more minimum bounding rectangles surrounding coverage data, in AvailableCRSs. Zero or more BoundingBoxes are allowed in addition to one or more WGS84BoundingBoxes to allow more precise specification of the Dataset area in AvailableCRSs. These Bounding Boxes shall not use any CRS not listed as an AvailableCRS. However, an AvailableCRS can be listed without a corresponding Bounding Box. If no such bounding box is recorded for a coverage, any such bounding boxes recorded for a higher level in a hierarchy of datasets shall apply to this coverage. If such bounding box(es) are recorded for a coverage, any such bounding boxes recorded for a higher level in a hierarchy of datasets shall be ignored. If multiple bounding boxes are included with the same CRS, this shall be interpreted as the union of the areas of these bounding boxes. - - - - - Optional unordered list of additional metadata about this dataset. A list of optional metadata elements for this dataset description could be specified in the Implementation Specification for this service. - - - - - Metadata describing zero or more unordered subsidiary datasets available from this server. - - - - - - - - diff --git a/sen2cor/cfg/DICO/1.0/DPC/services/opengis/ows/1.1.0/owsDataIdentification.xsd b/sen2cor/cfg/DICO/1.0/DPC/services/opengis/ows/1.1.0/owsDataIdentification.xsd deleted file mode 100755 index dde83e1..0000000 --- a/sen2cor/cfg/DICO/1.0/DPC/services/opengis/ows/1.1.0/owsDataIdentification.xsd +++ /dev/null @@ -1,127 +0,0 @@ - - - - owsDataIdentification.xsd 2010-01-30 - This XML Schema Document encodes the parts of the MD_DataIdentification class of ISO 19115 (OGC Abstract Specification Topic 11) which are expected to be used for most datasets. This Schema also encodes the parts of this class that are expected to be useful for other metadata. Both may be used within the Contents section of OWS service metadata (Capabilities) documents. - - OWS is an OGC Standard. - Copyright (c) 2006,2010 Open Geospatial Consortium, Inc. All Rights Reserved. - To obtain additional rights of use, visit http://www.opengeospatial.org/legal/ . - - - - - - - - - Human-readable descriptive information for the object it is included within. -This type shall be extended if needed for specific OWS use to include additional metadata for each type of information. This type shall not be restricted for a specific OWS to change the multiplicity (or optionality) of some elements. - If the xml:lang attribute is not included in a Title, Abstract or Keyword element, then no language is specified for that element unless specified by another means. All Title, Abstract and Keyword elements in the same Description that share the same xml:lang attribute value represent the description of the parent object in that language. Multiple Title or Abstract elements shall not exist in the same Description with the same xml:lang attribute value unless otherwise specified. - - - - - - - - - - - Basic metadata identifying and describing a set of data. - - - - - - - Optional unique identifier or name of this dataset. - - - - - Optional unordered list of additional metadata about this data(set). A list of optional metadata elements for this data identification could be specified in the Implementation Specification for this service. - - - - - - - - - - Extended metadata identifying and describing a set of data. This type shall be extended if needed for each specific OWS to include additional metadata for each type of dataset. If needed, this type should first be restricted for each specific OWS to change the multiplicity (or optionality) of some elements. - - - - - - - Unordered list of zero or more bounding boxes whose union describes the extent of this dataset. - - - - - Unordered list of zero or more references to data formats supported for server outputs. - - - - - Unordered list of zero or more available coordinate reference systems. - - - - - - - - - - Unique identifier or name of this dataset. - - - - - - Reference to a format in which this data can be encoded and transferred. More specific parameter names should be used by specific OWS specifications wherever applicable. More than one such parameter can be included for different purposes. - - - - - - - Coordinate reference system in which data from this data(set) or resource is available or supported. More specific parameter names should be used by specific OWS specifications wherever applicable. More than one such parameter can be included for different purposes. - - - - - - Access constraint applied to assure the protection of privacy or intellectual property, or any other restrictions on retrieving or using data from or otherwise using this server. The reserved value NONE (case insensitive) shall be used to mean no access constraints are imposed. - - - - - - Fees and terms for retrieving data from or otherwise using this server, including the monetary units as specified in ISO 4217. The reserved value NONE (case insensitive) shall be used to mean no fees or terms. - - - - - - Identifier of a language used by the data(set) contents. This language identifier shall be as specified in IETF RFC 4646. When this element is omitted, the language used is not identified. - - - - diff --git a/sen2cor/cfg/DICO/1.0/DPC/services/opengis/ows/1.1.0/owsDomainType.xsd b/sen2cor/cfg/DICO/1.0/DPC/services/opengis/ows/1.1.0/owsDomainType.xsd deleted file mode 100755 index e7d0a1f..0000000 --- a/sen2cor/cfg/DICO/1.0/DPC/services/opengis/ows/1.1.0/owsDomainType.xsd +++ /dev/null @@ -1,264 +0,0 @@ - - - - owsDomainType.xsd 2010-01-30 - This XML Schema Document encodes the allowed values (or domain) of a quantity, often for an input or output parameter to an OWS. Such a parameter is sometimes called a variable, quantity, literal, or typed literal. Such a parameter can use one of many data types, including double, integer, boolean, string, or URI. The allowed values can also be encoded for a quantity that is not explicit or not transferred, but is constrained by a server implementation. - - OWS is an OGC Standard. - Copyright (c) 2006,2010 Open Geospatial Consortium, Inc. All Rights Reserved. - To obtain additional rights of use, visit http://www.opengeospatial.org/legal/ . - - - - - - - - - Valid domain (or allowed set of values) of one quantity, with its name or identifier. - - - - - - Name or identifier of this quantity. - - - - - - - - - Valid domain (or allowed set of values) of one quantity, with needed metadata but without a quantity name or identifier. - - - - - - Optional default value for this quantity, which should be included when this quantity has a default value. - - - - - Meaning metadata should be referenced or included for each quantity. - - - - - This data type metadata should be referenced or included for each quantity. - - - - - Unit of measure, which should be included when this set of PossibleValues has units or a more complete reference system. - - - - - Optional unordered list of other metadata about this quantity. A list of required and optional other metadata elements for this quantity should be specified in the Implementation Specification for this service. - - - - - - - - Specifies the possible values of this quantity. - - - - - - - - - - - - Specifies that any value is allowed for this parameter. - - - - - - - Specifies that no values are allowed for this parameter or quantity. - - - - - - - Reference to externally specified list of all the valid values and/or ranges of values for this quantity. (Informative: This element was simplified from the metaDataProperty element in GML 3.0.) - - - - - - Indicates that this quantity has units or a reference system, and identifies the unit or reference system used by the AllowedValues or ValuesReference. - - - - - Identifier of unit of measure of this set of values. Should be included then this set of values has units (and not a more complete reference system). - - - - - Identifier of reference system used by this set of values. Should be included then this set of values has a reference system (not just units). - - - - - - - - - List of all the valid values and/or ranges of values for this quantity. For numeric quantities, signed values should be ordered from negative infinity to positive infinity. - - - - - - - - - - - - - - A single value, encoded as a string. This type can be used for one value, for a spacing between allowed values, or for the default value of a parameter. - - - - - - - - - The default value for a quantity for which multiple values are allowed. - - - - - - - - A range of values of a numeric parameter. This range can be continuous or discrete, defined by a fixed spacing between adjacent valid values. If the MinimumValue or MaximumValue is not included, there is no value limit in that direction. Inclusion of the specified minimum and maximum values in the range shall be defined by the rangeClosure. - - - - - - - Shall be included when the allowed values are NOT continuous in this range. Shall not be included when the allowed values are continuous in this range. - - - - - - Shall be included unless the default value applies. - - - - - - - Minimum value of this numeric parameter. - - - - - - Maximum value of this numeric parameter. - - - - - - The regular distance or spacing between the allowed values in a range. - - - - - - Specifies which of the minimum and maximum values are included in the range. Note that plus and minus infinity are considered closed bounds. - - - - - - The specified minimum and maximum values are included in this range. - - - - - The specified minimum and maximum values are NOT included in this range. - - - - - The specified minimum value is NOT included in this range, and the specified maximum value IS included in this range. - - - - - The specified minimum value IS included in this range, and the specified maximum value is NOT included in this range. - - - - - - - - - - References metadata about a quantity, and provides a name for this metadata. (Informative: This element was simplified from the metaDataProperty element in GML 3.0.) - - - - - Human-readable name of the metadata described by associated referenced document. - - - - - - - - - Reference to data or metadata recorded elsewhere, either external to this XML document or within it. Whenever practical, this attribute should be a URL from which this metadata can be electronically retrieved. Alternately, this attribute can reference a URN for well-known metadata. For example, such a URN could be a URN defined in the "ogc" URN namespace. - - - - - - Definition of the meaning or semantics of this set of values. This Meaning can provide more specific, complete, precise, machine accessible, and machine understandable semantics about this quantity, relative to other available semantic information. For example, other semantic information is often provided in "documentation" elements in XML Schemas or "description" elements in GML objects. - - - - - - Definition of the data type of this set of values. In this case, the xlink:href attribute can reference a URN for a well-known data type. For example, such a URN could be a data type identification URN defined in the "ogc" URN namespace. - - - - - - Definition of the reference system used by this set of values, including the unit of measure whenever applicable (as is normal). In this case, the xlink:href attribute can reference a URN for a well-known reference system, such as for a coordinate reference system (CRS). For example, such a URN could be a CRS identification URN defined in the "ogc" URN namespace. - - - - - - Definition of the unit of measure of this set of values. In this case, the xlink:href attribute can reference a URN for a well-known unit of measure (uom). For example, such a URN could be a UOM identification URN defined in the "ogc" URN namespace. - - - - diff --git a/sen2cor/cfg/DICO/1.0/DPC/services/opengis/ows/1.1.0/owsExceptionReport.xsd b/sen2cor/cfg/DICO/1.0/DPC/services/opengis/ows/1.1.0/owsExceptionReport.xsd deleted file mode 100755 index a8db0a3..0000000 --- a/sen2cor/cfg/DICO/1.0/DPC/services/opengis/ows/1.1.0/owsExceptionReport.xsd +++ /dev/null @@ -1,76 +0,0 @@ - - - - owsExceptionReport.xsd 2011-02-07 - This XML Schema Document encodes the Exception Report response to all OWS operations. - - OWS is an OGC Standard. - Copyright (c) 2006,2010 Open Geospatial Consortium, Inc. All Rights Reserved. - To obtain additional rights of use, visit http://www.opengeospatial.org/legal/ . - - - - - - - - Report message returned to the client that requested any OWS operation when the server detects an error while processing that operation request. - - - - - - Unordered list of one or more Exception elements that each describes an error. These Exception elements shall be interpreted by clients as being independent of one another (not hierarchical). - - - - - - Specification version for OWS operation. The string value shall contain one x.y.z "version" value (e.g., "2.1.3"). A version number shall contain three non-negative integers separated by decimal points, in the form "x.y.z". The integers y and z shall not exceed 99. Each version shall be for the Implementation Specification (document) and the associated XML Schemas to which requested operations will conform. An Implementation Specification version normally specifies XML Schemas against which an XML encoded operation response must conform and should be validated. See Version negotiation subclause for more information. - - - - - - - - - - Identifier of the language used by all included exception text values. These language identifiers shall be as specified in IETF RFC 4646. When this attribute is omitted, the language used is not identified. - - - - - - - - - - An Exception element describes one detected error that a server chooses to convey to the client. - - - - - Ordered sequence of text strings that describe this specific exception or error. The contents of these strings are left open to definition by each server implementation. A server is strongly encouraged to include at least one ExceptionText value, to provide more information about the detected error than provided by the exceptionCode. When included, multiple ExceptionText values shall provide hierarchical information about one detected error, with the most significant information listed first. - - - - - - A code representing the type of this exception, which shall be selected from a set of exceptionCode values specified for the specific service operation and server. - - - - - When included, this locator shall indicate to the client where an exception was encountered in servicing the client's operation request. This locator should be included whenever meaningful information can be provided by the server. The contents of this locator will depend on the specific exceptionCode and OWS service, and shall be specified in the OWS Implementation Specification. - - - - diff --git a/sen2cor/cfg/DICO/1.0/DPC/services/opengis/ows/1.1.0/owsGetCapabilities.xsd b/sen2cor/cfg/DICO/1.0/DPC/services/opengis/ows/1.1.0/owsGetCapabilities.xsd deleted file mode 100755 index dbb71d3..0000000 --- a/sen2cor/cfg/DICO/1.0/DPC/services/opengis/ows/1.1.0/owsGetCapabilities.xsd +++ /dev/null @@ -1,112 +0,0 @@ - - - - owsGetCapabilities.xsd 2010-01-30 - This XML Schema Document defines the GetCapabilities operation request and response XML elements and types, which are common to all OWSs. This XML Schema shall be edited by each OWS, for example, to specify a specific value for the "service" attribute. - - OWS is an OGC Standard. - Copyright (c) 2006,2010 Open Geospatial Consortium, Inc. All Rights Reserved. - To obtain additional rights of use, visit http://www.opengeospatial.org/legal/ . - - - - - - - - - - XML encoded GetCapabilities operation response. This document provides clients with service metadata about a specific service instance, usually including metadata about the tightly-coupled data served. If the server does not implement the updateSequence parameter, the server shall always return the complete Capabilities document, without the updateSequence parameter. When the server implements the updateSequence parameter and the GetCapabilities operation request included the updateSequence parameter with the current value, the server shall return this element with only the "version" and "updateSequence" attributes. Otherwise, all optional elements shall be included or not depending on the actual value of the Contents parameter in the GetCapabilities operation request. This base type shall be extended by each specific OWS to include the additional contents needed. - - - - - - - - - - Service metadata document version, having values that are "increased" whenever any change is made in service metadata document. Values are selected by each server, and are always opaque to clients. When not supported by server, server shall not return this attribute. - - - - - - - - - XML encoded GetCapabilities operation request. This operation allows clients to retrieve service metadata about a specific service instance. In this XML encoding, no "request" parameter is included, since the element name specifies the specific operation. This base type shall be extended by each specific OWS to include the additional required "service" attribute, with the correct value for that OWS. - - - - - When omitted, server shall return latest supported version. - - - - - When omitted or not supported by server, server shall return complete service metadata (Capabilities) document. - - - - - When omitted or not supported by server, server shall return service metadata document using the MIME type "text/xml". - - - - - - When omitted or not supported by server, server shall return latest complete service metadata document. - - - - - - - - Service type identifier, where the string value is the OWS type abbreviation, such as "WMS" or "WFS". - - - - - - - Prioritized sequence of one or more specification versions accepted by client, with preferred versions listed first. See Version negotiation subclause for more information. - - - - - - - - - Unordered list of zero or more names of requested sections in complete service metadata document. Each Section value shall contain an allowed section name as specified by each OWS specification. See Sections parameter subclause for more information. - - - - - - - - - Service metadata document version, having values that are "increased" whenever any change is made in service metadata document. Values are selected by each server, and are always opaque to clients. See updateSequence parameter use subclause for more information. - - - - - - - Prioritized sequence of zero or more GetCapabilities operation response formats desired by client, with preferred formats listed first. Each response format shall be identified by its MIME type. See AcceptFormats parameter use subclause for more information. - - - - - - diff --git a/sen2cor/cfg/DICO/1.0/DPC/services/opengis/ows/1.1.0/owsGetResourceByID.xsd b/sen2cor/cfg/DICO/1.0/DPC/services/opengis/ows/1.1.0/owsGetResourceByID.xsd deleted file mode 100755 index f15b22f..0000000 --- a/sen2cor/cfg/DICO/1.0/DPC/services/opengis/ows/1.1.0/owsGetResourceByID.xsd +++ /dev/null @@ -1,51 +0,0 @@ - - - - owsGetResourceByID.xsd 2010-01-30 - This XML Schema Document encodes the GetResourceByID operation request message. This typical operation is specified as a base for profiling in specific OWS specifications. For information on the allowed changes and limitations in such profiling, see Subclause 9.4.1 of the OWS Common specification. - - OWS is an OGC Standard. - Copyright (c) 2006,2010 Open Geospatial Consortium, Inc. All Rights Reserved. - To obtain additional rights of use, visit http://www.opengeospatial.org/legal/ . - - - - - - - - - XML encoded GetResourceByID operation response. The complexType used by this element shall be specified by each specific OWS. - - - - - - - - Request to a service to perform the GetResourceByID operation. This operation allows a client to retrieve one or more identified resources, including datasets and resources that describe datasets or parameters. In this XML encoding, no "request" parameter is included, since the element name specifies the specific operation. - - - - - Unordered list of zero or more resource identifiers. These identifiers can be listed in the Contents section of the service metadata (Capabilities) document. For more information on this parameter, see Subclause 9.4.2.1 of the OWS Common specification. - - - - - Optional reference to the data format to be used for response to this operation request. This element shall be included when multiple output formats are available for the selected resource(s), and the client desires a format other than the specified default, if any. - - - - - - - - diff --git a/sen2cor/cfg/DICO/1.0/DPC/services/opengis/ows/1.1.0/owsInputOutputData.xsd b/sen2cor/cfg/DICO/1.0/DPC/services/opengis/ows/1.1.0/owsInputOutputData.xsd deleted file mode 100755 index e8f28b6..0000000 --- a/sen2cor/cfg/DICO/1.0/DPC/services/opengis/ows/1.1.0/owsInputOutputData.xsd +++ /dev/null @@ -1,59 +0,0 @@ - - - - owsInputOutputData.xsd 2010-01-30 - This XML Schema Document specifies types and elements for input and output of operation data, allowing including multiple data items with each data item either included or referenced. The contents of each type and element specified here can be restricted and/or extended for each use in a specific OWS specification. - - OWS is an OGC Standard. - Copyright (c) 2006,2010 Open Geospatial Consortium, Inc. All Rights Reserved. - To obtain additional rights of use, visit http://www.opengeospatial.org/legal/ . - - - - - - - - Response from an OWS operation, allowing including multiple output data items with each item either included or referenced. This OperationResponse element, or an element using the ManifestType with a more specific element name, shall be used whenever applicable for responses from OWS operations. - This element is specified for use where the ManifestType contents are needed for an operation response, but the Manifest element name is not fully applicable. This element or the ManifestType shall be used instead of using the ows:ReferenceType proposed in OGC 04-105. - - - - - - Input data in a XML-encoded OWS operation request, allowing including multiple data items with each data item either included or referenced. This InputData element, or an element using the ManifestType with a more-specific element name (TBR), shall be used whenever applicable within XML-encoded OWS operation requests. - - - - - - - - Complete reference to a remote resource that needs to be retrieved from an OWS using an XML-encoded operation request. This element shall be used, within an InputData or Manifest element that is used for input data, when that input data needs to be retrieved from another web service using a XML-encoded OWS operation request. This element shall not be used for local payload input data or for requesting the resource from a web server using HTTP Get. - - - - - - - The XML-encoded operation request message to be sent to request this input data from another web server using HTTP Post. - - - - - Reference to the XML-encoded operation request message to be sent to request this input data from another web server using HTTP Post. The referenced message shall be attached to the same message (using the cid scheme), or be accessible using a URL. - - - - - - - - diff --git a/sen2cor/cfg/DICO/1.0/DPC/services/opengis/ows/1.1.0/owsManifest.xsd b/sen2cor/cfg/DICO/1.0/DPC/services/opengis/ows/1.1.0/owsManifest.xsd deleted file mode 100755 index dee51a5..0000000 --- a/sen2cor/cfg/DICO/1.0/DPC/services/opengis/ows/1.1.0/owsManifest.xsd +++ /dev/null @@ -1,122 +0,0 @@ - - - - - owsManifest.xsd 2010-01-30 - This XML Schema Document specifies types and elements for document or resource references and for package manifests that contain multiple references. The contents of each type and element specified here can be restricted and/or extended for each use in a specific OWS specification. - - OWS is an OGC Standard. - Copyright (c) 2006,2010 Open Geospatial Consortium, Inc. All Rights Reserved. - To obtain additional rights of use, visit http://www.opengeospatial.org/legal/ . - - - - - - - - - - - Base for a reference to a remote or local resource. - This type contains only a restricted and annotated set of the attributes from the xlink:simpleLink attributeGroup. - - - - - Reference to a remote resource or local payload. A remote resource is typically addressed by a URL. For a local payload (such as a multipart mime message), the xlink:href must start with the prefix cid:. - - - - - Reference to a resource that describes the role of this reference. When no value is supplied, no particular role value is to be inferred. - - - - - Although allowed, this attribute is not expected to be useful in this application of xlink:simpleLink. - - - - - Describes the meaning of the referenced resource in a human-readable fashion. - - - - - Although allowed, this attribute is not expected to be useful in this application of xlink:simpleLink. - - - - - Although allowed, this attribute is not expected to be useful in this application of xlink:simpleLink. - - - - - - - - - Complete reference to a remote or local resource, allowing including metadata about that resource. - - - - - - - Optional unique identifier of the referenced resource. - - - - - - The format of the referenced resource. This element is omitted when the mime type is indicated in the http header of the reference. - - - - - Optional unordered list of additional metadata about this resource. A list of optional metadata elements for this ReferenceType could be specified in the Implementation Specification for each use of this type in a specific OWS. - - - - - - - - - - - - - Logical group of one or more references to remote and/or local resources, allowing including metadata about that group. A Group can be used instead of a Manifest that can only contain one group. - - - - - - - - - - - - - - - Unordered list of one or more groups of references to remote and/or local resources. - - - - - - - - - - - diff --git a/sen2cor/cfg/DICO/1.0/DPC/services/opengis/ows/1.1.0/owsOperationsMetadata.xsd b/sen2cor/cfg/DICO/1.0/DPC/services/opengis/ows/1.1.0/owsOperationsMetadata.xsd deleted file mode 100755 index 7e0ef74..0000000 --- a/sen2cor/cfg/DICO/1.0/DPC/services/opengis/ows/1.1.0/owsOperationsMetadata.xsd +++ /dev/null @@ -1,140 +0,0 @@ - - - - owsOperationsMetadata.xsd 2010-01-30 - This XML Schema Document encodes the basic contents of the "OperationsMetadata" section of the GetCapabilities operation response, also known as the Capabilities XML document. - - OWS is an OGC Standard. - Copyright (c) 2006,2010 Open Geospatial Consortium, Inc. All Rights Reserved. - To obtain additional rights of use, visit http://www.opengeospatial.org/legal/ . - - - - - - - - - - Metadata about the operations and related abilities specified by this service and implemented by this server, including the URLs for operation requests. The basic contents of this section shall be the same for all OWS types, but individual services can add elements and/or change the optionality of optional elements. - - - - - - Metadata for unordered list of all the (requests for) operations that this server interface implements. The list of required and optional operations implemented shall be specified in the Implementation Specification for this service. - - - - - Optional unordered list of parameter valid domains that each apply to one or more operations which this server interface implements. The list of required and optional parameter domain limitations shall be specified in the Implementation Specification for this service. - - - - - Optional unordered list of valid domain constraints on non-parameter quantities that each apply to this server. The list of required and optional constraints shall be specified in the Implementation Specification for this service. - - - - - - - - - - Individual software vendors and servers can use this element to provide metadata about any additional server abilities. - - - - - - Metadata for one operation that this server implements. - - - - - - Unordered list of Distributed Computing Platforms (DCPs) supported for this operation. At present, only the HTTP DCP is defined, so this element will appear only once. - - - - - Optional unordered list of parameter domains that each apply to this operation which this server implements. If one of these Parameter elements has the same "name" attribute as a Parameter element in the OperationsMetadata element, this Parameter element shall override the other one for this operation. The list of required and optional parameter domain limitations for this operation shall be specified in the Implementation Specification for this service. - - - - - Optional unordered list of valid domain constraints on non-parameter quantities that each apply to this operation. If one of these Constraint elements has the same "name" attribute as a Constraint element in the OperationsMetadata element, this Constraint element shall override the other one for this operation. The list of required and optional constraints for this operation shall be specified in the Implementation Specification for this service. - - - - - Optional unordered list of additional metadata about this operation and its' implementation. A list of required and optional metadata elements for this operation should be specified in the Implementation Specification for this service. (Informative: This metadata might specify the operation request parameters or provide the XML Schemas for the operation request.) - - - - - - Name or identifier of this operation (request) (for example, GetCapabilities). The list of required and optional operations implemented shall be specified in the Implementation Specification for this service. - - - - - - - - Information for one distributed Computing Platform (DCP) supported for this operation. At present, only the HTTP DCP is defined, so this element only includes the HTTP element. - - - - - - - - - - - - Connect point URLs for the HTTP Distributed Computing Platform (DCP). Normally, only one Get and/or one Post is included in this element. More than one Get and/or Post is allowed to support including alternative URLs for uses such as load balancing or backup. - - - - - - Connect point URL prefix and any constraints for the HTTP "Get" request method for this operation request. - - - - - Connect point URL and any constraints for the HTTP "Post" request method for this operation request. - - - - - - - - - Connect point URL and any constraints for this HTTP request method for this operation request. In the OnlineResourceType, the xlink:href attribute in the xlink:simpleLink attribute group shall be used to contain this URL. The other attributes in the xlink:simpleLink attribute group should not be used. - - - - - - - Optional unordered list of valid domain constraints on non-parameter quantities that each apply to this request method for this operation. If one of these Constraint elements has the same "name" attribute as a Constraint element in the OperationsMetadata or Operation element, this Constraint element shall override the other one for this operation. The list of required and optional constraints for this request method for this operation shall be specified in the Implementation Specification for this service. - - - - - - - - diff --git a/sen2cor/cfg/DICO/1.0/DPC/services/opengis/ows/1.1.0/owsServiceIdentification.xsd b/sen2cor/cfg/DICO/1.0/DPC/services/opengis/ows/1.1.0/owsServiceIdentification.xsd deleted file mode 100755 index 520a2b8..0000000 --- a/sen2cor/cfg/DICO/1.0/DPC/services/opengis/ows/1.1.0/owsServiceIdentification.xsd +++ /dev/null @@ -1,60 +0,0 @@ - - - - owsServiceIdentification.xsd 2010-01-30 - This XML Schema Document encodes the common "ServiceIdentification" section of the GetCapabilities operation response, known as the Capabilities XML document. This section encodes the SV_ServiceIdentification class of ISO 19119 (OGC Abstract Specification Topic 12). - - OWS is an OGC Standard. - Copyright (c) 2006,2010 Open Geospatial Consortium, Inc. All Rights Reserved. - To obtain additional rights of use, visit http://www.opengeospatial.org/legal/ . - - - - - - - - General metadata for this specific server. This XML Schema of this section shall be the same for all OWS. - - - - - - - - A service type name from a registry of services. For example, the values of the codeSpace URI and name and code string may be "OGC" and "catalogue." This type name is normally used for machine-to-machine communication. - - - - - Unordered list of one or more versions of this service type implemented by this server. This information is not adequate for version negotiation, and shall not be used for that purpose. - - - - - Unordered list of identifiers of Application Profiles that are implemented by this server. This element should be included for each specified application profile implemented by this server. The identifier value should be specified by each Application Profile. If this element is omitted, no meaning is implied. - - - - - If this element is omitted, no meaning is implied. - - - - - Unordered list of access constraints applied to assure the protection of privacy or intellectual property, and any other restrictions on retrieving or using data from or otherwise using this server. The reserved value NONE (case insensitive) shall be used to mean no access constraints are imposed. When this element is omitted, no meaning is implied. - - - - - - - - diff --git a/sen2cor/cfg/DICO/1.0/DPC/services/opengis/ows/1.1.0/owsServiceProvider.xsd b/sen2cor/cfg/DICO/1.0/DPC/services/opengis/ows/1.1.0/owsServiceProvider.xsd deleted file mode 100755 index b15f621..0000000 --- a/sen2cor/cfg/DICO/1.0/DPC/services/opengis/ows/1.1.0/owsServiceProvider.xsd +++ /dev/null @@ -1,47 +0,0 @@ - - - - owsServiceProvider.xsd 2010-01-30 - This XML Schema Document encodes the common "ServiceProvider" section of the GetCapabilities operation response, known as the Capabilities XML document. This section encodes the SV_ServiceProvider class of ISO 19119 (OGC Abstract Specification Topic 12). - - OWS is an OGC Standard. - Copyright (c) 2006,2010 Open Geospatial Consortium, Inc. All Rights Reserved. - To obtain additional rights of use, visit http://www.opengeospatial.org/legal/ . - - - - - - - - Metadata about the organization that provides this specific service instance or server. - - - - - - A unique identifier for the service provider organization. - - - - - Reference to the most relevant web site of the service provider. - - - - - Information for contacting the service provider. The OnlineResource element within this ServiceContact element should not be used to reference a web site of the service provider. - - - - - - diff --git a/sen2cor/cfg/DICO/1.0/DPC/services/opengis/wps/1.0.0/ReadMe.txt b/sen2cor/cfg/DICO/1.0/DPC/services/opengis/wps/1.0.0/ReadMe.txt deleted file mode 100755 index 8a3a48c..0000000 --- a/sen2cor/cfg/DICO/1.0/DPC/services/opengis/wps/1.0.0/ReadMe.txt +++ /dev/null @@ -1,82 +0,0 @@ -OGC(r) WPS schema - ReadMe.txt -============================== - -OpenGIS(r) Web Processing Service (WPS) Interface Standard ------------------------------------------------------------------------ - -The OpenGIS(r) Web Processing Service (WPS) Interface Standard provides -rules for standardizing how inputs and outputs (requests and responses) -for geospatial processing services, such as polygon overlay. The -standard also defines how a client can request the execution of a -process, and how the output from the process is handled. It defines an -interface that facilitates the publishing of geospatial processes and -clients’ discovery of and binding to those processes. The data required -by the WPS can be delivered across a network or they can be available at -the server. - -The root (all-components) XML Schema Document, which includes -directly and indirectly all the XML Schema Documents, defined by -WPS 1.0.0 is wpsAll.xsd . - -The WPS schema are described in the OGC WPS 1.0.0 document 05-007r7. - - Note: check each OGC numbered document for detailed changes. - -More information may be found at - http://www.opengeospatial.org/standards/wps - -The most current schema are available at http://schemas.opengis.net/ . - ------------------------------------------------------------------------ - -2010-02-03 Kevin Stegemoller - * v1.0.0: updated xsd:schema:@version to 1.0.0 2010-02-03 (06-135r7 s#13.4) - * v1.0.0: - + updated xsd:schema:@version attribute (06-135r7 s#13.4) - + update relative schema imports to absolute URLs (06-135r7 s#15) - + update/verify copyright (06-135r7 s#3.2) - + add archives (.zip) files of previous versions - + create/update ReadMe.txt (06-135r7 s#17) - -2007-12-05 Peter Schut, WPS RWG - * v1.0.0: error in ows/1.1.0 causes validation error see below - or OGC 07-141 - ------------------------------------------------------------------------ - -Policies, Procedures, Terms, and Conditions of OGC(r) are available - http://www.opengeospatial.org/ogc/legal/ . - -Copyright (c) 2010 Open Geospatial Consortium, Inc. All Rights Reserved. - ------------------------------------------------------------------------ ------------------------------------------------------------------------ - -CHANGES -======= - -Change 07-141 -------------- - -There is a obsolete reference in the OWS Common 1.1.0 -ExceptionReport.xsd schema which causes the WPS 1.0.0 -examples/90_wpsExceptionReport.xml not to validate correctly in some -validators. Below is the summary of the issue detailed in the OGC -Change Request 07-141. The full Change Request 07-141 is available at -http://portal.opengeospatial.org/files/?artifact_id=24601 - -The current OWS Common 1.1.0 ExceptionReport.xsd schema references an -obsolete version of the XML schema, and therefore does not validate -properly if an XML validator actually attempts to import the XML -schema at this obsolete location. As a consequence other OGC schemas -cannot import the exception report schema. - -In ows/1.1.0/owsExceptionReport.xsd -replace - -with - - - -- from Change Request OGC 07-141 by Peter Schut, WPS RWG - diff --git a/sen2cor/cfg/DICO/1.0/DPC/services/opengis/wps/1.0.0/common/DescriptionType.xsd b/sen2cor/cfg/DICO/1.0/DPC/services/opengis/wps/1.0.0/common/DescriptionType.xsd deleted file mode 100755 index f626827..0000000 --- a/sen2cor/cfg/DICO/1.0/DPC/services/opengis/wps/1.0.0/common/DescriptionType.xsd +++ /dev/null @@ -1,49 +0,0 @@ - - - - - $Id: wpsCommon.xsd 2007-10-09 $ - - This XML Schema Document encodes elements and types that are shared by multiple WPS operations. - - WPS is an OGC Standard. - Copyright (c) 2007,2010 Open Geospatial Consortium, Inc. All Rights Reserved. - To obtain additional rights of use, visit http://www.opengeospatial.org/legal/ . - - - - - - - - - Description of a WPS process or output object. - - - - - Unambiguous identifier or name of a process, unique for this server, or unambiguous identifier or name of an output, unique for this process. - - - - - Title of a process or output, normally available for display to a human. - - - - - Brief narrative description of a process or output, normally available for display to a human. - - - - - Optional unordered list of additional metadata about this process/input/output. A list of optional and/or required metadata elements for this process/input/output could be specified in an Application Profile for this service. - - - - - diff --git a/sen2cor/cfg/DICO/1.0/DPC/services/opengis/wps/1.0.0/common/ProcessBriefType.xsd b/sen2cor/cfg/DICO/1.0/DPC/services/opengis/wps/1.0.0/common/ProcessBriefType.xsd deleted file mode 100755 index 8e361db..0000000 --- a/sen2cor/cfg/DICO/1.0/DPC/services/opengis/wps/1.0.0/common/ProcessBriefType.xsd +++ /dev/null @@ -1,44 +0,0 @@ - - - - - $Id: ProcessBriefType.xsd 2007-10-09 $ - - Brief description of a Process, designed for Process discovery. - - WPS is an OGC Standard. - Copyright (c) 2007,2010 Open Geospatial Consortium, Inc. All Rights Reserved. - To obtain additional rights of use, visit http://www.opengeospatial.org/legal/ . - - - - - - - - - - - - - - - - Optional unordered list of application profiles to which this process complies. - - - - - Location of a WSDL document which describes this process. - - - - - - - - diff --git a/sen2cor/cfg/DICO/1.0/DPC/services/opengis/wps/1.0.0/common/ProcessVersion.xsd b/sen2cor/cfg/DICO/1.0/DPC/services/opengis/wps/1.0.0/common/ProcessVersion.xsd deleted file mode 100755 index 2ae18e6..0000000 --- a/sen2cor/cfg/DICO/1.0/DPC/services/opengis/wps/1.0.0/common/ProcessVersion.xsd +++ /dev/null @@ -1,25 +0,0 @@ - - - - $Id: wpsCommon.xsd 2007-03-03 $ - - This XML Schema Document encodes elements and types that are shared by multiple WPS operations. - - WPS is an OGC Standard. - Copyright (c) 2007,2010 Open Geospatial Consortium, Inc. All Rights Reserved. - To obtain additional rights of use, visit http://www.opengeospatial.org/legal/ . - - - - - - - - Release version of this Process, included when a process version needs to be included for clarification about the process to be used. It is possible that a WPS supports a process with different versions due to reasons such as modifications of process algorithms. Notice that this is the version identifier for the process, not the version of the WPS interface. The processVersion is informative only. Version negotiation for processVersion is not available. Requests to Execute a process do not include a processVersion identifier. - - - diff --git a/sen2cor/cfg/DICO/1.0/DPC/services/opengis/wps/1.0.0/common/RequestBaseType.xsd b/sen2cor/cfg/DICO/1.0/DPC/services/opengis/wps/1.0.0/common/RequestBaseType.xsd deleted file mode 100755 index cade06a..0000000 --- a/sen2cor/cfg/DICO/1.0/DPC/services/opengis/wps/1.0.0/common/RequestBaseType.xsd +++ /dev/null @@ -1,42 +0,0 @@ - - - - - $Id: RequestBaseType.xsd 2007-10-09 $ - - This XML Schema Document encodes elements and types that are shared by multiple WPS operations. - - WPS is an OGC Standard. - Copyright (c) 2007,2010 Open Geospatial Consortium, Inc. All Rights Reserved. - To obtain additional rights of use, visit http://www.opengeospatial.org/legal/ . - - - - - - - - - WPS operation request base, for all WPS operations except GetCapabilities. In this XML encoding, no "request" parameter is included, since the element name specifies the specific operation. - - - - Service type identifier (WPS) - - - - - Version of the WPS interface specification implemented by the server (1.0.0) - - - - - RFC 4646 language code of the human-readable text (e.g. "en-CA"). - - - - diff --git a/sen2cor/cfg/DICO/1.0/DPC/services/opengis/wps/1.0.0/common/ResponseBaseType.xsd b/sen2cor/cfg/DICO/1.0/DPC/services/opengis/wps/1.0.0/common/ResponseBaseType.xsd deleted file mode 100755 index 411ead1..0000000 --- a/sen2cor/cfg/DICO/1.0/DPC/services/opengis/wps/1.0.0/common/ResponseBaseType.xsd +++ /dev/null @@ -1,44 +0,0 @@ - - - - - $Id: wpsCommon.xsd 2007-10-09 $ - - This XML Schema Document encodes elements and types that are shared by multiple WPS operations. - - WPS is an OGC Standard. - Copyright (c) 2007,2010 Open Geospatial Consortium, Inc. All Rights Reserved. - To obtain additional rights of use, visit http://www.opengeospatial.org/legal/ . - - - - - - - - - - - WPS operation response base, for all WPS operations except GetCapabilities. - - - - Service type identifier (WPS) - - - - - Version of the WPS interface specification implemented by the server (1.0.0) - - - - - RFC 4646 language code of the human-readable text (e.g. "en-CA"). - - - - diff --git a/sen2cor/cfg/DICO/1.0/DPC/services/opengis/wps/1.0.0/common/WSDL.xsd b/sen2cor/cfg/DICO/1.0/DPC/services/opengis/wps/1.0.0/common/WSDL.xsd deleted file mode 100755 index 8422480..0000000 --- a/sen2cor/cfg/DICO/1.0/DPC/services/opengis/wps/1.0.0/common/WSDL.xsd +++ /dev/null @@ -1,30 +0,0 @@ - - - - - $Id: WSDL.xsd 2007-05-01 $ - - Location of a WSDL document. - - WPS is an OGC Standard. - Copyright (c) 2007,2010 Open Geospatial Consortium, Inc. All Rights Reserved. - To obtain additional rights of use, visit http://www.opengeospatial.org/legal/ . - - - - - - - - - Location of a WSDL document. - - - - - The URL from which the WSDL document can be retrieved. - - - - - diff --git a/sen2cor/cfg/DICO/1.0/DPC/services/opengis/wps/1.0.0/examples/10_wpsGetCapabilities_request.xml b/sen2cor/cfg/DICO/1.0/DPC/services/opengis/wps/1.0.0/examples/10_wpsGetCapabilities_request.xml deleted file mode 100755 index 5396e86..0000000 --- a/sen2cor/cfg/DICO/1.0/DPC/services/opengis/wps/1.0.0/examples/10_wpsGetCapabilities_request.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - 1.0.0 - - diff --git a/sen2cor/cfg/DICO/1.0/DPC/services/opengis/wps/1.0.0/examples/10_wpsGetCapabilities_request_SOAP.xml b/sen2cor/cfg/DICO/1.0/DPC/services/opengis/wps/1.0.0/examples/10_wpsGetCapabilities_request_SOAP.xml deleted file mode 100755 index e7e061a..0000000 --- a/sen2cor/cfg/DICO/1.0/DPC/services/opengis/wps/1.0.0/examples/10_wpsGetCapabilities_request_SOAP.xml +++ /dev/null @@ -1,20 +0,0 @@ - - - - - - - - 1.0.0 - - - - diff --git a/sen2cor/cfg/DICO/1.0/DPC/services/opengis/wps/1.0.0/examples/20_wpsGetCapabilities_response.xml b/sen2cor/cfg/DICO/1.0/DPC/services/opengis/wps/1.0.0/examples/20_wpsGetCapabilities_response.xml deleted file mode 100755 index 0e62c01..0000000 --- a/sen2cor/cfg/DICO/1.0/DPC/services/opengis/wps/1.0.0/examples/20_wpsGetCapabilities_response.xml +++ /dev/null @@ -1,84 +0,0 @@ - - - - AAFC GDAS-based WPS server - AAFC GDAS-based WPS server developed for the OGC WPSie. - - WPS - AAFC - geospatial - geoprocessing - - WPS - 1.0.0 - 0.4.0 - NONE - NONE - - - Agriculture and Agri-Food Canada - - - Peter Schut - Information System Scientist - - - +1 613 759-1874 - +1 613 759-1937 - - - Room 1135, Neatby Building, 960, Carling Avenue - Ottawa - ON - K1AOC6 - Canada - schutp@agr.gc.ca - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - buffer - Buffer a polygon feature - Buffer the polygon coordinates found in one GML stream by a given buffer distance, and output the results in GML. - - - - - - - en-CA - - - en-CA - fr-CA - - - - diff --git a/sen2cor/cfg/DICO/1.0/DPC/services/opengis/wps/1.0.0/examples/20_wpsGetCapabilities_response_SOAP.xml b/sen2cor/cfg/DICO/1.0/DPC/services/opengis/wps/1.0.0/examples/20_wpsGetCapabilities_response_SOAP.xml deleted file mode 100755 index edcfa96..0000000 --- a/sen2cor/cfg/DICO/1.0/DPC/services/opengis/wps/1.0.0/examples/20_wpsGetCapabilities_response_SOAP.xml +++ /dev/null @@ -1,97 +0,0 @@ - - - - - - AAFC GDAS-based WPS server - AAFC GDAS-based WPS server developed for the OGC WPSie. - - WPS - AAFC - geospatial - geoprocessing - - WPS - 1.0.0 - 0.4.0 - NONE - NONE - - - Agriculture and Agri-Food Canada - - - Peter Schut - Information System Scientist - - - +1 613 759-1874 - +1 613 759-1937 - - - Room 1135, Neatby Building, 960, Carling Avenue - Ottawa - ON - K1AOC6 - Canada - schutp@agr.gc.ca - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - buffer - Buffer a polygon feature - Buffer the polygon coordinates found in one GML stream by a given - buffer distance, and output the results in GML. - - - - - - - en-CA - - - en-CA - fr-CA - - - - - - diff --git a/sen2cor/cfg/DICO/1.0/DPC/services/opengis/wps/1.0.0/examples/30_wpsDescribeProcess_request.xml b/sen2cor/cfg/DICO/1.0/DPC/services/opengis/wps/1.0.0/examples/30_wpsDescribeProcess_request.xml deleted file mode 100755 index 1b1d0ba..0000000 --- a/sen2cor/cfg/DICO/1.0/DPC/services/opengis/wps/1.0.0/examples/30_wpsDescribeProcess_request.xml +++ /dev/null @@ -1,5 +0,0 @@ - - - intersection - union - diff --git a/sen2cor/cfg/DICO/1.0/DPC/services/opengis/wps/1.0.0/examples/30_wpsDescribeProcess_request_SOAP.xml b/sen2cor/cfg/DICO/1.0/DPC/services/opengis/wps/1.0.0/examples/30_wpsDescribeProcess_request_SOAP.xml deleted file mode 100755 index 17d83a2..0000000 --- a/sen2cor/cfg/DICO/1.0/DPC/services/opengis/wps/1.0.0/examples/30_wpsDescribeProcess_request_SOAP.xml +++ /dev/null @@ -1,17 +0,0 @@ - - - - - intersection - union - - - diff --git a/sen2cor/cfg/DICO/1.0/DPC/services/opengis/wps/1.0.0/examples/40_wpsDescribeProcess_response-extended.xml b/sen2cor/cfg/DICO/1.0/DPC/services/opengis/wps/1.0.0/examples/40_wpsDescribeProcess_response-extended.xml deleted file mode 100755 index e75c769..0000000 --- a/sen2cor/cfg/DICO/1.0/DPC/services/opengis/wps/1.0.0/examples/40_wpsDescribeProcess_response-extended.xml +++ /dev/null @@ -1,101 +0,0 @@ - - - - - Buffer - Create a buffer around a polygon. - Create a buffer around a single polygon. Accepts the polygon as GML and provides GML output for the buffered feature. - - - - - urn:ogc:wps:1.0.0:buffer - - - - InputPolygon - Polygon to be buffered - URI to a set of GML that describes the polygon. - - - - text/xml - base64 - http://foo.bar/gml/3.1.0/polygon.xsd - - - - - text/xml - UTF-8 - http://foo.bar/gml/3.1.0/polygon.xsd - - - - - - BufferDistance - Buffer Distance - Distance to be used to calculate buffer. - - float - - - meters - - - meters - feet - - - - 100 - - - - BufferZones - Buffer Zones - Defines the width of each buffer zone for a multiple-ring-buffer. If only one buffer zone shall be created, this Input can be omitted. - - - - text/xml - UTF-8 - http://foo.bar/complexValueSchema.xsd - - - - - text/xml - UTF-8 - http://foo.bar/SecondComplexValueSchema.xsd - - - - - - - - BufferedPolygon - Buffered Polygon - GML stream describing the buffered polygon feature. - - - - text/xml - base64 - http://foo.bar/gml/3.1.0/polygon.xsd - - - - - text/xml - UTF-8 - http://foo.bar/gml/3.1.0/polygon.xsd - - - - - - - diff --git a/sen2cor/cfg/DICO/1.0/DPC/services/opengis/wps/1.0.0/examples/40_wpsDescribeProcess_response.xml b/sen2cor/cfg/DICO/1.0/DPC/services/opengis/wps/1.0.0/examples/40_wpsDescribeProcess_response.xml deleted file mode 100755 index 8906e1f..0000000 --- a/sen2cor/cfg/DICO/1.0/DPC/services/opengis/wps/1.0.0/examples/40_wpsDescribeProcess_response.xml +++ /dev/null @@ -1,80 +0,0 @@ - - - - - Buffer - Create a buffer around a polygon. - Create a buffer around a single polygon. Accepts the polygon as GML and provides GML output for the buffered feature. - - - - - urn:ogc:wps:1.0.0:buffer - - - - InputPolygon - Polygon to be buffered - URI to a set of GML that describes the polygon. - - - - text/xml - base64 - http://foo.bar/gml/3.1.0/polygon.xsd - - - - - text/xml - UTF-8 - http://foo.bar/gml/3.1.0/polygon.xsd - - - - - - BufferDistance - Buffer Distance - Distance to be used to calculate buffer. - - float - - - meters - - - meters - feet - - - - 100 - - - - - - BufferedPolygon - Buffered Polygon - GML stream describing the buffered polygon feature. - - - - text/xml - base64 - http://foo.bar/gml/3.1.0/polygon.xsd - - - - - text/xml - UTF-8 - http://foo.bar/gml/3.1.0/polygon.xsd - - - - - - - diff --git a/sen2cor/cfg/DICO/1.0/DPC/services/opengis/wps/1.0.0/examples/50_wpsExecute_request_RawDataOutput.xml b/sen2cor/cfg/DICO/1.0/DPC/services/opengis/wps/1.0.0/examples/50_wpsExecute_request_RawDataOutput.xml deleted file mode 100755 index aae024e..0000000 --- a/sen2cor/cfg/DICO/1.0/DPC/services/opengis/wps/1.0.0/examples/50_wpsExecute_request_RawDataOutput.xml +++ /dev/null @@ -1,36 +0,0 @@ - - - - - Buffer - - - InputPolygon - Playground area - - - - BufferDistance - Distance which people will walk to get to a playground. - - 400 - - - - - - BufferedPolygon - - - diff --git a/sen2cor/cfg/DICO/1.0/DPC/services/opengis/wps/1.0.0/examples/51_wpsExecute_request-extended_ResponseDocument.xml b/sen2cor/cfg/DICO/1.0/DPC/services/opengis/wps/1.0.0/examples/51_wpsExecute_request-extended_ResponseDocument.xml deleted file mode 100755 index 15d4d4d..0000000 --- a/sen2cor/cfg/DICO/1.0/DPC/services/opengis/wps/1.0.0/examples/51_wpsExecute_request-extended_ResponseDocument.xml +++ /dev/null @@ -1,62 +0,0 @@ - - - - - Buffer - - - InputPolygon - Playground area - - - - BufferDistance - Distance which people will walk to get to a playground . - - 400 - - - - BufferZoneWidth - Defining buffer zone width - - - - - - 0 - 100 - - - - - 100 - 400 - - - - - - - - - - - BufferedPolygon - Area serviced by playground. - Area within which most users of this playground will live plus the buffer. - - - - diff --git a/sen2cor/cfg/DICO/1.0/DPC/services/opengis/wps/1.0.0/examples/51_wpsExecute_request_ResponseDocument.xml b/sen2cor/cfg/DICO/1.0/DPC/services/opengis/wps/1.0.0/examples/51_wpsExecute_request_ResponseDocument.xml deleted file mode 100755 index ece136f..0000000 --- a/sen2cor/cfg/DICO/1.0/DPC/services/opengis/wps/1.0.0/examples/51_wpsExecute_request_ResponseDocument.xml +++ /dev/null @@ -1,40 +0,0 @@ - - - - - Buffer - - - InputPolygon - Playground area - - - - BufferDistance - Distance which people will walk to get to a playground. - - 400 - - - - - - - BufferedPolygon - Area serviced by playground. - Area within which most users of this playground will live. - - - - diff --git a/sen2cor/cfg/DICO/1.0/DPC/services/opengis/wps/1.0.0/examples/52_wpsExecute_request_ResponseDocument.xml b/sen2cor/cfg/DICO/1.0/DPC/services/opengis/wps/1.0.0/examples/52_wpsExecute_request_ResponseDocument.xml deleted file mode 100755 index 139f132..0000000 --- a/sen2cor/cfg/DICO/1.0/DPC/services/opengis/wps/1.0.0/examples/52_wpsExecute_request_ResponseDocument.xml +++ /dev/null @@ -1,43 +0,0 @@ - - - - - Buffer - - - InputPolygon - Playground area - - - - BufferDistance - Distance which people will walk to get to a playground. - - 400 - - - - - - - BufferedPolygon - Area serviced by playground. - Area within which most users of this playground will live. - - - - diff --git a/sen2cor/cfg/DICO/1.0/DPC/services/opengis/wps/1.0.0/examples/53_wpsExecute_request_ComplexValue.xml b/sen2cor/cfg/DICO/1.0/DPC/services/opengis/wps/1.0.0/examples/53_wpsExecute_request_ComplexValue.xml deleted file mode 100755 index 54bcb61..0000000 --- a/sen2cor/cfg/DICO/1.0/DPC/services/opengis/wps/1.0.0/examples/53_wpsExecute_request_ComplexValue.xml +++ /dev/null @@ -1,48 +0,0 @@ - - - - Reclassification - - - InputLayer - The layer which's values shall be reclassified - - - - BufferDistance - Distance which people will walk to get to a playground. - - - - - - - 0 - 119 - - A - - - - 120 - - - B - - - - - - - - - - - Outlayer - Reclassified Layer. - Layer classified into two classes, where class A is less than or equal 120 and class B is more than 120. - - - - diff --git a/sen2cor/cfg/DICO/1.0/DPC/services/opengis/wps/1.0.0/examples/62_wpsExecute_response.xml b/sen2cor/cfg/DICO/1.0/DPC/services/opengis/wps/1.0.0/examples/62_wpsExecute_response.xml deleted file mode 100755 index 8d64119..0000000 --- a/sen2cor/cfg/DICO/1.0/DPC/services/opengis/wps/1.0.0/examples/62_wpsExecute_response.xml +++ /dev/null @@ -1,42 +0,0 @@ - - - - Buffer - Create a buffer around a polygon. - String - OGC:WPS:Buffer - - - - - - - - InputPolygon - Playground area - - - - BufferDistance - Distance which people will walk to get to a playground - - 400 - - - - - - BufferedPolygon - Area serviced by playground. - Area within which most users of this playground will live. - - - - - BufferedPolygon - Area serviced by playground. - Area within which most users of this playground will live. - - - - \ No newline at end of file diff --git a/sen2cor/cfg/DICO/1.0/DPC/services/opengis/wps/1.0.0/examples/90_wpsExceptionReport.xml b/sen2cor/cfg/DICO/1.0/DPC/services/opengis/wps/1.0.0/examples/90_wpsExceptionReport.xml deleted file mode 100755 index 3533f21..0000000 --- a/sen2cor/cfg/DICO/1.0/DPC/services/opengis/wps/1.0.0/examples/90_wpsExceptionReport.xml +++ /dev/null @@ -1,7 +0,0 @@ - - - - Request is for an operation that is not supported by this server - - diff --git a/sen2cor/cfg/DICO/1.0/DPC/services/opengis/wps/1.0.0/examples/DPC_services.wsdl b/sen2cor/cfg/DICO/1.0/DPC/services/opengis/wps/1.0.0/examples/DPC_services.wsdl deleted file mode 100755 index 0c2edb4..0000000 --- a/sen2cor/cfg/DICO/1.0/DPC/services/opengis/wps/1.0.0/examples/DPC_services.wsdl +++ /dev/null @@ -1,2111 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - This standard web method is automatically generated to give a full description of this operation. The response will be an embedded WPS XML GetCapabilities Response. Please consult the OGC Web Site for the WPS 0.4.0 specification. - - - - - This standard web method is automatically generated to give a full description of all processes provided by this operation. The response will be an embedded WPS XML DescribeProcess Response. Please consult the OGC Web Site for the WPS 0.4.0 specification. - - - - - This web method will require a good undestanding of the WPS Schema. This method will evaluate your WPS XML Request, will process it and will response by an embbeded WPS XML Response. Please consult the OGC Web Site for the WPS 0.4.0 specification. - - - - - Area of the Geometry(s) - - - - - Returns the area of this Geometry(s). Areal Geometries have a non-zero area. They override this function to compute the area. Others return 0.0 - - - - - Buffer geometry(ie) from a GML stream - - - - - The buffer of a Geometry at a distance d is the Polygon or MultiPolygon which contains all points within a distance d of the Geometry. The distance d is interpreted according to the Precision Model of the Geometry. Both positive and negative distances are supported. - - - - - Convex Hull geometry(ie) from a GML stream - - - - - The convex hull of a Geometry is the smallest convex Polygon that contains all the points in the Geometry. If the convex hull contains fewer than 3 points, a lower dimension Geometry is returned. It will return a Geometry with the minimal number of points needed to represent the convex hull. In particular, no more than two consecutive points will be collinear. - - - - - Number of Geometries - - - - - Returns the number of Geometries in a GeometryCollection (or 1, if the geometry is not a collection). - - - - - Number of vertices in Geometry(s) - - - - - Returns the count of this Geometrys vertices. The Geometrys contained by composite Geometrys must be Geometry's. - - - - - Difference between geometry(ie) from a GML stream with another GML stream - - - - - The difference between two Geometries A and B is the set of all points which lie in A but not in B. This method returns the closure of the resultant Geometry. a.difference(b) = closure( { x ³ Â¥2 | x ³ a Ú x ´ b } ) - - - - - Intersect geometry(ie) from a GML stream with another GML stream - - - - - The intersection of two Geometries A and B is the set of all points which lie in both A and B. a.intersection(b) = { x ³ Â¥2 | x ³ a Ù x ³ b } - - - - - Length of the Geometry - - - - - Returns the length of this Geometry. Linear geometries return their length. Areal geometries return their perimeter. - - - - - Symmetric diffrence between geometry(ie) from a GML stream with another GML stream - - - - - The symmetric difference of two Geometries A and B is the set of all points which lie in either A or B but not both. This method returns the closure of the resultant Geometry. a.symDifference(b) = closure( { x ³ Â¥2 | (x ³ a Ù x ´ b) Ú (x ´ a Ù x ³ b) } ) - - - - - Union geometry(ie) from a GML stream with another GML stream - - - - - The union of two Geometries A and B is the set of all points which lie in A or B. a.union(b) = { x ³ Â¥2 | x ³ a Ú x ³ b } - - - - - - - This standard web method is automatically generated to give a full description of this operation. The response will be an embedded WPS XML GetCapabilities Response. Please consult the OGC Web Site for the WPS 0.4.0 specification. - - - - - This standard web method is automatically generated to give a full description of all processes provided by this operation. The response will be an embedded WPS XML DescribeProcess Response. Please consult the OGC Web Site for the WPS 0.4.0 specification. - - - - - This web method will require a good undestanding of the WPS Schema. This method will evaluate your WPS XML Request, will process it and will response by an embbeded WPS XML Response. Please consult the OGC Web Site for the WPS 0.4.0 specification. - - - - - Area of the Geometry(s) - - - - - Returns the area of this Geometry(s). Areal Geometries have a non-zero area. They override this function to compute the area. Others return 0.0 - - - - - Buffer geometry(ie) from a GML stream - - - - - The buffer of a Geometry at a distance d is the Polygon or MultiPolygon which contains all points within a distance d of the Geometry. The distance d is interpreted according to the Precision Model of the Geometry. Both positive and negative distances are supported. - - - - - Convex Hull geometry(ie) from a GML stream - - - - - The convex hull of a Geometry is the smallest convex Polygon that contains all the points in the Geometry. If the convex hull contains fewer than 3 points, a lower dimension Geometry is returned. It will return a Geometry with the minimal number of points needed to represent the convex hull. In particular, no more than two consecutive points will be collinear. - - - - - Number of Geometries - - - - - Returns the number of Geometries in a GeometryCollection (or 1, if the geometry is not a collection). - - - - - Number of vertices in Geometry(s) - - - - - Returns the count of this Geometrys vertices. The Geometrys contained by composite Geometrys must be Geometry's. - - - - - Difference between geometry(ie) from a GML stream with another GML stream - - - - - The difference between two Geometries A and B is the set of all points which lie in A but not in B. This method returns the closure of the resultant Geometry. a.difference(b) = closure( { x ³ Â¥2 | x ³ a Ú x ´ b } ) - - - - - Intersect geometry(ie) from a GML stream with another GML stream - - - - - The intersection of two Geometries A and B is the set of all points which lie in both A and B. a.intersection(b) = { x ³ Â¥2 | x ³ a Ù x ³ b } - - - - - Length of the Geometry - - - - - Returns the length of this Geometry. Linear geometries return their length. Areal geometries return their perimeter. - - - - - Symmetric diffrence between geometry(ie) from a GML stream with another GML stream - - - - - The symmetric difference of two Geometries A and B is the set of all points which lie in either A or B but not both. This method returns the closure of the resultant Geometry. a.symDifference(b) = closure( { x ³ Â¥2 | (x ³ a Ù x ´ b) Ú (x ´ a Ù x ³ b) } ) - - - - - Union geometry(ie) from a GML stream with another GML stream - - - - - The union of two Geometries A and B is the set of all points which lie in A or B. a.union(b) = { x ³ Â¥2 | x ³ a Ú x ³ b } - - - - - - - This standard web method is automatically generated to give a full description of this operation. The response will be an embedded WPS XML GetCapabilities Response. Please consult the OGC Web Site for the WPS 0.4.0 specification. - - - - - This standard web method is automatically generated to give a full description of all processes provided by this operation. The response will be an embedded WPS XML DescribeProcess Response. Please consult the OGC Web Site for the WPS 0.4.0 specification. - - - - - This web method will require a good undestanding of the WPS Schema. This method will evaluate your WPS XML Request, will process it and will response by an embbeded WPS XML Response. Please consult the OGC Web Site for the WPS 0.4.0 specification. - - - - - Area of the Geometry(s) - - - - - Returns the area of this Geometry(s). Areal Geometries have a non-zero area. They override this function to compute the area. Others return 0.0 - - - - - Buffer geometry(ie) from a GML stream - - - - - The buffer of a Geometry at a distance d is the Polygon or MultiPolygon which contains all points within a distance d of the Geometry. The distance d is interpreted according to the Precision Model of the Geometry. Both positive and negative distances are supported. - - - - - Convex Hull geometry(ie) from a GML stream - - - - - The convex hull of a Geometry is the smallest convex Polygon that contains all the points in the Geometry. If the convex hull contains fewer than 3 points, a lower dimension Geometry is returned. It will return a Geometry with the minimal number of points needed to represent the convex hull. In particular, no more than two consecutive points will be collinear. - - - - - Number of Geometries - - - - - Returns the number of Geometries in a GeometryCollection (or 1, if the geometry is not a collection). - - - - - Number of vertices in Geometry(s) - - - - - Returns the count of this Geometrys vertices. The Geometrys contained by composite Geometrys must be Geometry's. - - - - - Difference between geometry(ie) from a GML stream with another GML stream - - - - - The difference between two Geometries A and B is the set of all points which lie in A but not in B. This method returns the closure of the resultant Geometry. a.difference(b) = closure( { x ³ Â¥2 | x ³ a Ú x ´ b } ) - - - - - Intersect geometry(ie) from a GML stream with another GML stream - - - - - The intersection of two Geometries A and B is the set of all points which lie in both A and B. a.intersection(b) = { x ³ Â¥2 | x ³ a Ù x ³ b } - - - - - Length of the Geometry - - - - - Returns the length of this Geometry. Linear geometries return their length. Areal geometries return their perimeter. - - - - - Symmetric diffrence between geometry(ie) from a GML stream with another GML stream - - - - - The symmetric difference of two Geometries A and B is the set of all points which lie in either A or B but not both. This method returns the closure of the resultant Geometry. a.symDifference(b) = closure( { x ³ Â¥2 | (x ³ a Ù x ´ b) Ú (x ´ a Ù x ³ b) } ) - - - - - Union geometry(ie) from a GML stream with another GML stream - - - - - The union of two Geometries A and B is the set of all points which lie in A or B. a.union(b) = { x ³ Â¥2 | x ³ a Ú x ³ b } - - - - - - - This standard web method is automatically generated to give a full description of this operation. The response will be an embedded WPS XML GetCapabilities Response. Please consult the OGC Web Site for the WPS 0.4.0 specification. - - - - - This standard web method is automatically generated to give a full description of all processes provided by this operation. The response will be an embedded WPS XML DescribeProcess Response. Please consult the OGC Web Site for the WPS 0.4.0 specification. - - - - - This web method will require a good undestanding of the WPS Schema. This method will evaluate your WPS XML Request, will process it and will response by an embbeded WPS XML Response. Please consult the OGC Web Site for the WPS 0.4.0 specification. - - - - - Area of the Geometry(s) - - - - - Returns the area of this Geometry(s). Areal Geometries have a non-zero area. They override this function to compute the area. Others return 0.0 - - - - - Buffer geometry(ie) from a GML stream - - - - - The buffer of a Geometry at a distance d is the Polygon or MultiPolygon which contains all points within a distance d of the Geometry. The distance d is interpreted according to the Precision Model of the Geometry. Both positive and negative distances are supported. - - - - - Convex Hull geometry(ie) from a GML stream - - - - - The convex hull of a Geometry is the smallest convex Polygon that contains all the points in the Geometry. If the convex hull contains fewer than 3 points, a lower dimension Geometry is returned. It will return a Geometry with the minimal number of points needed to represent the convex hull. In particular, no more than two consecutive points will be collinear. - - - - - Number of Geometries - - - - - Returns the number of Geometries in a GeometryCollection (or 1, if the geometry is not a collection). - - - - - Number of vertices in Geometry(s) - - - - - Returns the count of this Geometrys vertices. The Geometrys contained by composite Geometrys must be Geometry's. - - - - - Difference between geometry(ie) from a GML stream with another GML stream - - - - - The difference between two Geometries A and B is the set of all points which lie in A but not in B. This method returns the closure of the resultant Geometry. a.difference(b) = closure( { x ³ Â¥2 | x ³ a Ú x ´ b } ) - - - - - Intersect geometry(ie) from a GML stream with another GML stream - - - - - The intersection of two Geometries A and B is the set of all points which lie in both A and B. a.intersection(b) = { x ³ Â¥2 | x ³ a Ù x ³ b } - - - - - Length of the Geometry - - - - - Returns the length of this Geometry. Linear geometries return their length. Areal geometries return their perimeter. - - - - - Symmetric diffrence between geometry(ie) from a GML stream with another GML stream - - - - - The symmetric difference of two Geometries A and B is the set of all points which lie in either A or B but not both. This method returns the closure of the resultant Geometry. a.symDifference(b) = closure( { x ³ Â¥2 | (x ³ a Ù x ´ b) Ú (x ´ a Ù x ³ b) } ) - - - - - Union geometry(ie) from a GML stream with another GML stream - - - - - The union of two Geometries A and B is the set of all points which lie in A or B. a.union(b) = { x ³ Â¥2 | x ³ a Ú x ³ b } - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Perform spatial analysis on GML (xml document) version 2.1.2 or 3.0. This operation supports GML coming from a WMS or WFS Service. . The spatial analysis methods (like buffer,intersect,union,difference,symDifference,convexHull) will return the most specific class possible to represent the result. If the result is homogeneous, a Point, LineString, or Polygon will be returned if the result contains a single element; otherwise, a MultiPoint, MultiLineString, or MultiPolygon will be returned. If the result is heterogeneous a GeometryCollection will be returned. For faster spatial analysis, use simplication (option available for all processs) either Douglas-Peucker or Topology Preserving algorithm. It will ensure that any polygonal geometries returned are valid BUT simple lines are not guaranteed to remain simple after simplification. Important note: Using Douglas-Peucker simplification does not preserve topology; e.g. polygons can be split, collapse to lines or disappear holes can be created or disappear, and lines can cross. - - - - - - - - - - - - - - - diff --git a/sen2cor/cfg/DICO/1.0/DPC/services/opengis/wps/1.0.0/examples/MyComplexValueSchema.xsd b/sen2cor/cfg/DICO/1.0/DPC/services/opengis/wps/1.0.0/examples/MyComplexValueSchema.xsd deleted file mode 100755 index 7af07ec..0000000 --- a/sen2cor/cfg/DICO/1.0/DPC/services/opengis/wps/1.0.0/examples/MyComplexValueSchema.xsd +++ /dev/null @@ -1,17 +0,0 @@ - - - - - - - - - - - - - - - - - diff --git a/sen2cor/cfg/DICO/1.0/DPC/services/opengis/wps/1.0.0/examples/example_service.wsdl b/sen2cor/cfg/DICO/1.0/DPC/services/opengis/wps/1.0.0/examples/example_service.wsdl deleted file mode 100755 index faa7a9d..0000000 --- a/sen2cor/cfg/DICO/1.0/DPC/services/opengis/wps/1.0.0/examples/example_service.wsdl +++ /dev/null @@ -1,2131 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - This standard web method is automatically generated to give a full description of this operation. The response will be an embedded WPS XML GetCapabilities Response. Please consult the OGC Web Site for the WPS 0.4.0 specification. - - - - - This standard web method is automatically generated to give a full description of all processes provided by this operation. The response will be an embedded WPS XML DescribeProcess Response. Please consult the OGC Web Site for the WPS 0.4.0 specification. - - - - - This web method will require a good undestanding of the WPS Schema. This method will evaluate your WPS XML Request, will process it and will response by an embbeded WPS XML Response. Please consult the OGC Web Site for the WPS 0.4.0 specification. - - - - - Area of the Geometry(s) - - - - - Returns the area of this Geometry(s). Areal Geometries have a non-zero area. They override this function to compute the area. Others return 0.0 - - - - - Buffer geometry(ie) from a GML stream - - - - - The buffer of a Geometry at a distance d is the Polygon or MultiPolygon which contains all points within a distance d of the Geometry. The distance d is interpreted according to the Precision Model of the Geometry. Both positive and negative distances are supported. - - - - - Convex Hull geometry(ie) from a GML stream - - - - - The convex hull of a Geometry is the smallest convex Polygon that contains all the points in the Geometry. If the convex hull contains fewer than 3 points, a lower dimension Geometry is returned. It will return a Geometry with the minimal number of points needed to represent the convex hull. In particular, no more than two consecutive points will be collinear. - - - - - Number of Geometries - - - - - Returns the number of Geometries in a GeometryCollection (or 1, if the geometry is not a collection). - - - - - Number of vertices in Geometry(s) - - - - - Returns the count of this Geometrys vertices. The Geometrys contained by composite Geometrys must be Geometry's. - - - - - Difference between geometry(ie) from a GML stream with another GML stream - - - - - The difference between two Geometries A and B is the set of all points which lie in A but not in B. This method returns the closure of the resultant Geometry. a.difference(b) = closure( { x ³ Â¥2 | x ³ a Ú x ´ b } ) - - - - - Intersect geometry(ie) from a GML stream with another GML stream - - - - - The intersection of two Geometries A and B is the set of all points which lie in both A and B. a.intersection(b) = { x ³ Â¥2 | x ³ a Ù x ³ b } - - - - - Length of the Geometry - - - - - Returns the length of this Geometry. Linear geometries return their length. Areal geometries return their perimeter. - - - - - Symmetric diffrence between geometry(ie) from a GML stream with another GML stream - - - - - The symmetric difference of two Geometries A and B is the set of all points which lie in either A or B but not both. This method returns the closure of the resultant Geometry. a.symDifference(b) = closure( { x ³ Â¥2 | (x ³ a Ù x ´ b) Ú (x ´ a Ù x ³ b) } ) - - - - - Union geometry(ie) from a GML stream with another GML stream - - - - - The union of two Geometries A and B is the set of all points which lie in A or B. a.union(b) = { x ³ Â¥2 | x ³ a Ú x ³ b } - - - - - - - This standard web method is automatically generated to give a full description of this operation. The response will be an embedded WPS XML GetCapabilities Response. Please consult the OGC Web Site for the WPS 0.4.0 specification. - - - - - This standard web method is automatically generated to give a full description of all processes provided by this operation. The response will be an embedded WPS XML DescribeProcess Response. Please consult the OGC Web Site for the WPS 0.4.0 specification. - - - - - This web method will require a good undestanding of the WPS Schema. This method will evaluate your WPS XML Request, will process it and will response by an embbeded WPS XML Response. Please consult the OGC Web Site for the WPS 0.4.0 specification. - - - - - Area of the Geometry(s) - - - - - Returns the area of this Geometry(s). Areal Geometries have a non-zero area. They override this function to compute the area. Others return 0.0 - - - - - Buffer geometry(ie) from a GML stream - - - - - The buffer of a Geometry at a distance d is the Polygon or MultiPolygon which contains all points within a distance d of the Geometry. The distance d is interpreted according to the Precision Model of the Geometry. Both positive and negative distances are supported. - - - - - Convex Hull geometry(ie) from a GML stream - - - - - The convex hull of a Geometry is the smallest convex Polygon that contains all the points in the Geometry. If the convex hull contains fewer than 3 points, a lower dimension Geometry is returned. It will return a Geometry with the minimal number of points needed to represent the convex hull. In particular, no more than two consecutive points will be collinear. - - - - - Number of Geometries - - - - - Returns the number of Geometries in a GeometryCollection (or 1, if the geometry is not a collection). - - - - - Number of vertices in Geometry(s) - - - - - Returns the count of this Geometrys vertices. The Geometrys contained by composite Geometrys must be Geometry's. - - - - - Difference between geometry(ie) from a GML stream with another GML stream - - - - - The difference between two Geometries A and B is the set of all points which lie in A but not in B. This method returns the closure of the resultant Geometry. a.difference(b) = closure( { x ³ Â¥2 | x ³ a Ú x ´ b } ) - - - - - Intersect geometry(ie) from a GML stream with another GML stream - - - - - The intersection of two Geometries A and B is the set of all points which lie in both A and B. a.intersection(b) = { x ³ Â¥2 | x ³ a Ù x ³ b } - - - - - Length of the Geometry - - - - - Returns the length of this Geometry. Linear geometries return their length. Areal geometries return their perimeter. - - - - - Symmetric diffrence between geometry(ie) from a GML stream with another GML stream - - - - - The symmetric difference of two Geometries A and B is the set of all points which lie in either A or B but not both. This method returns the closure of the resultant Geometry. a.symDifference(b) = closure( { x ³ Â¥2 | (x ³ a Ù x ´ b) Ú (x ´ a Ù x ³ b) } ) - - - - - Union geometry(ie) from a GML stream with another GML stream - - - - - The union of two Geometries A and B is the set of all points which lie in A or B. a.union(b) = { x ³ Â¥2 | x ³ a Ú x ³ b } - - - - - - - This standard web method is automatically generated to give a full description of this operation. The response will be an embedded WPS XML GetCapabilities Response. Please consult the OGC Web Site for the WPS 0.4.0 specification. - - - - - This standard web method is automatically generated to give a full description of all processes provided by this operation. The response will be an embedded WPS XML DescribeProcess Response. Please consult the OGC Web Site for the WPS 0.4.0 specification. - - - - - This web method will require a good undestanding of the WPS Schema. This method will evaluate your WPS XML Request, will process it and will response by an embbeded WPS XML Response. Please consult the OGC Web Site for the WPS 0.4.0 specification. - - - - - Area of the Geometry(s) - - - - - Returns the area of this Geometry(s). Areal Geometries have a non-zero area. They override this function to compute the area. Others return 0.0 - - - - - Buffer geometry(ie) from a GML stream - - - - - The buffer of a Geometry at a distance d is the Polygon or MultiPolygon which contains all points within a distance d of the Geometry. The distance d is interpreted according to the Precision Model of the Geometry. Both positive and negative distances are supported. - - - - - Convex Hull geometry(ie) from a GML stream - - - - - The convex hull of a Geometry is the smallest convex Polygon that contains all the points in the Geometry. If the convex hull contains fewer than 3 points, a lower dimension Geometry is returned. It will return a Geometry with the minimal number of points needed to represent the convex hull. In particular, no more than two consecutive points will be collinear. - - - - - Number of Geometries - - - - - Returns the number of Geometries in a GeometryCollection (or 1, if the geometry is not a collection). - - - - - Number of vertices in Geometry(s) - - - - - Returns the count of this Geometrys vertices. The Geometrys contained by composite Geometrys must be Geometry's. - - - - - Difference between geometry(ie) from a GML stream with another GML stream - - - - - The difference between two Geometries A and B is the set of all points which lie in A but not in B. This method returns the closure of the resultant Geometry. a.difference(b) = closure( { x ³ Â¥2 | x ³ a Ú x ´ b } ) - - - - - Intersect geometry(ie) from a GML stream with another GML stream - - - - - The intersection of two Geometries A and B is the set of all points which lie in both A and B. a.intersection(b) = { x ³ Â¥2 | x ³ a Ù x ³ b } - - - - - Length of the Geometry - - - - - Returns the length of this Geometry. Linear geometries return their length. Areal geometries return their perimeter. - - - - - Symmetric diffrence between geometry(ie) from a GML stream with another GML stream - - - - - The symmetric difference of two Geometries A and B is the set of all points which lie in either A or B but not both. This method returns the closure of the resultant Geometry. a.symDifference(b) = closure( { x ³ Â¥2 | (x ³ a Ù x ´ b) Ú (x ´ a Ù x ³ b) } ) - - - - - Union geometry(ie) from a GML stream with another GML stream - - - - - The union of two Geometries A and B is the set of all points which lie in A or B. a.union(b) = { x ³ Â¥2 | x ³ a Ú x ³ b } - - - - - - - This standard web method is automatically generated to give a full description of this operation. The response will be an embedded WPS XML GetCapabilities Response. Please consult the OGC Web Site for the WPS 0.4.0 specification. - - - - - This standard web method is automatically generated to give a full description of all processes provided by this operation. The response will be an embedded WPS XML DescribeProcess Response. Please consult the OGC Web Site for the WPS 0.4.0 specification. - - - - - This web method will require a good undestanding of the WPS Schema. This method will evaluate your WPS XML Request, will process it and will response by an embbeded WPS XML Response. Please consult the OGC Web Site for the WPS 0.4.0 specification. - - - - - Area of the Geometry(s) - - - - - Returns the area of this Geometry(s). Areal Geometries have a non-zero area. They override this function to compute the area. Others return 0.0 - - - - - Buffer geometry(ie) from a GML stream - - - - - The buffer of a Geometry at a distance d is the Polygon or MultiPolygon which contains all points within a distance d of the Geometry. The distance d is interpreted according to the Precision Model of the Geometry. Both positive and negative distances are supported. - - - - - Convex Hull geometry(ie) from a GML stream - - - - - The convex hull of a Geometry is the smallest convex Polygon that contains all the points in the Geometry. If the convex hull contains fewer than 3 points, a lower dimension Geometry is returned. It will return a Geometry with the minimal number of points needed to represent the convex hull. In particular, no more than two consecutive points will be collinear. - - - - - Number of Geometries - - - - - Returns the number of Geometries in a GeometryCollection (or 1, if the geometry is not a collection). - - - - - Number of vertices in Geometry(s) - - - - - Returns the count of this Geometrys vertices. The Geometrys contained by composite Geometrys must be Geometry's. - - - - - Difference between geometry(ie) from a GML stream with another GML stream - - - - - The difference between two Geometries A and B is the set of all points which lie in A but not in B. This method returns the closure of the resultant Geometry. a.difference(b) = closure( { x ³ Â¥2 | x ³ a Ú x ´ b } ) - - - - - Intersect geometry(ie) from a GML stream with another GML stream - - - - - The intersection of two Geometries A and B is the set of all points which lie in both A and B. a.intersection(b) = { x ³ Â¥2 | x ³ a Ù x ³ b } - - - - - Length of the Geometry - - - - - Returns the length of this Geometry. Linear geometries return their length. Areal geometries return their perimeter. - - - - - Symmetric diffrence between geometry(ie) from a GML stream with another GML stream - - - - - The symmetric difference of two Geometries A and B is the set of all points which lie in either A or B but not both. This method returns the closure of the resultant Geometry. a.symDifference(b) = closure( { x ³ Â¥2 | (x ³ a Ù x ´ b) Ú (x ´ a Ù x ³ b) } ) - - - - - Union geometry(ie) from a GML stream with another GML stream - - - - - The union of two Geometries A and B is the set of all points which lie in A or B. a.union(b) = { x ³ Â¥2 | x ³ a Ú x ³ b } - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Perform spatial analysis on GML (xml document) version 2.1.2 or 3.0. This operation supports GML coming from a WMS or WFS Service. . The spatial analysis methods (like buffer,intersect,union,difference,symDifference,convexHull) will return the most specific class possible to represent the result. If the result is homogeneous, a Point, LineString, or Polygon will be returned if the result contains a single element; otherwise, a MultiPoint, MultiLineString, or MultiPolygon will be returned. If the result is heterogeneous a GeometryCollection will be returned. For faster spatial analysis, use simplication (option available for all processs) either Douglas-Peucker or Topology Preserving algorithm. It will ensure that any polygonal geometries returned are valid BUT simple lines are not guaranteed to remain simple after simplification. Important note: Using Douglas-Peucker simplification does not preserve topology; e.g. polygons can be split, collapse to lines or disappear holes can be created or disappear, and lines can cross. - - - - - - - - - - - - - - - diff --git a/sen2cor/cfg/DICO/1.0/DPC/services/opengis/wps/1.0.0/wpsAll.xsd b/sen2cor/cfg/DICO/1.0/DPC/services/opengis/wps/1.0.0/wpsAll.xsd deleted file mode 100755 index 1f80cc5..0000000 --- a/sen2cor/cfg/DICO/1.0/DPC/services/opengis/wps/1.0.0/wpsAll.xsd +++ /dev/null @@ -1,23 +0,0 @@ - - - - $Id: wpsAll.xsd 2007-10-09 $ - - This XML Schema includes and imports, directly and indirectly, all the XML Schemas defined by the WPS Implemetation Specification. - - WPS is an OGC Standard. - Copyright (c) 2007,2010 Open Geospatial Consortium, Inc. All Rights Reserved. - To obtain additional rights of use, visit http://www.opengeospatial.org/legal/ . - - - - - - - - - - - diff --git a/sen2cor/cfg/DICO/1.0/DPC/services/opengis/wps/1.0.0/wpsDescribeProcess_request.xsd b/sen2cor/cfg/DICO/1.0/DPC/services/opengis/wps/1.0.0/wpsDescribeProcess_request.xsd deleted file mode 100755 index 71a8652..0000000 --- a/sen2cor/cfg/DICO/1.0/DPC/services/opengis/wps/1.0.0/wpsDescribeProcess_request.xsd +++ /dev/null @@ -1,41 +0,0 @@ - - - - - $Id: wpsDescribeProcess_request.xsd 2007-10-09 $ - - This XML Schema Document encodes the WPS DescribeProcess operation request. - - WPS is an OGC Standard. - Copyright (c) 2007,2010 Open Geospatial Consortium, Inc. All Rights Reserved. - To obtain additional rights of use, visit http://www.opengeospatial.org/legal/ . - - - - - - - - - - WPS DescribeProcess operation request. - - - - - - - - Unordered list of one or more identifiers of the processes for which the client is requesting detailed descriptions. This element shall be repeated for each process for which a description is requested. These Identifiers are unordered, but the WPS shall return the process descriptions in the order in which they were requested. - - - - - - - - diff --git a/sen2cor/cfg/DICO/1.0/DPC/services/opengis/wps/1.0.0/wpsDescribeProcess_response.xsd b/sen2cor/cfg/DICO/1.0/DPC/services/opengis/wps/1.0.0/wpsDescribeProcess_response.xsd deleted file mode 100755 index 50206dd..0000000 --- a/sen2cor/cfg/DICO/1.0/DPC/services/opengis/wps/1.0.0/wpsDescribeProcess_response.xsd +++ /dev/null @@ -1,421 +0,0 @@ - - - - - $Id: wpsDescribeProcess_response.xsd 2007-10-09 $ - - This XML Schema Document encodes the WPS DescribeProcess operation response. - - WPS is an OGC Standard. - Copyright (c) 2007,2010 Open Geospatial Consortium, Inc. All Rights Reserved. - To obtain additional rights of use, visit http://www.opengeospatial.org/legal/ . - - - - - - - - - - - - WPS DescribeProcess operation response. - - - - - - - - Ordered list of one or more full Process descriptions, listed in the order in which they were requested in the DescribeProcess operation request. - - - - - - - - - - - Full description of a process. - - - - - - - List of the inputs to this process. In almost all cases, at least one process input is required. However, no process inputs may be identified when all the inputs are predetermined fixed resources. In this case, those resources shall be identified in the ows:Abstract element that describes the process. - - - - - - Unordered list of one or more descriptions of the inputs that can be accepted by this process, including all required and optional inputs. Where an input is optional because a default value exists, that default value must be identified in the "ows:Abstract" element for that input, except in the case of LiteralData, where the default must be indicated in the corresponding ows:DefaultValue element. Where an input is optional because it depends on the value(s) of other inputs, this must be indicated in the ows:Abstract element for that input. - - - - - - - - List of outputs which will or can result from executing the process. - - - - - - Unordered list of one or more descriptions of all the outputs that can result from executing this process. At least one output is required from each process. - - - - - - - - - Indicates if ComplexData outputs from this process can be stored by the WPS server as web-accessible resources. If "storeSupported" is "true", the Execute operation request may include "asReference" equals "true" for any complex output, directing that the output of the process be stored so that the client can retrieve it as required. By default for this process, storage is not supported and all outputs are returned encoded in the Execute response. - - - - - Indicates if ongoing status information can be provided for this process. If "true", the Status element of the stored Execute response document shall be kept up to date. If "false" then the Status element shall not be updated until processing is complete. By default, status information is not provided for this process. - - - - - - - - - - Description of an input to a process. - - - - - In this use, the DescriptionType shall describe this process input. - - - - - - - The minimum number of times that values for this parameter are required in an Execute request. If "0", this data input is optional. If greater than "0" then this process input is required. - - - - - The maximum number of times that values for this parameter are permitted in an Execute request. If "1" then this parameter may appear only once in an Execute request. If greater than "1", then this input parameter may appear that many times in an Execute request. - - - - - - - - - Identifies the form of this input and provides supporting information. - - - - - Indicates that this Input shall be a complex data structure (such as a GML document), and provides a list of Formats, Encodings, and Schemas supported for this Input. The value of this ComplexData structure can be input either embedded in the Execute request or remotely accessible to the server. The client can select from among the identified combinations of Formats, Encodings, and Schemas to specify the form of the Input. This allows for complete specification of particular versions of GML, or image formats. - - - - - Indicates that this Input shall be a simple numeric value or character string that is embedded in the execute request, and describes the possible values. - - - - - Indicates that this Input shall be a BoundingBox data structure that is embedded in the execute request, and provides a list of the Coordinate Reference System support for this Bounding Box. - - - - - - - - Description of a process input that consists of a simple literal value (e.g., "2.1"). (Informative: This type is a subset of the ows:UnNamedDomainType defined in owsDomaintype.xsd.) - - - - - - - Identifies the type of this literal input and provides supporting information. For literal values with a defined Unit of Measure, the contents of these sub-elements shall be understood to be consistent with the default Unit of Measure. - - - - - Optional default value for this quantity, which should be included when this quantity has a default value. The DefaultValue shall be understood to be consistent with the unit of measure selected in the Execute request. - - - - - - - - - - Identifies the type of this literal input and provides supporting information. - - - - - Indicates that there are a finite set of values and ranges allowed for this input, and contains list of all the valid values and/or ranges of values. Notice that these values and ranges can be displayed to a human client. - - - - - Indicates that any value is allowed for this input. This element shall be included when there are no restrictions, except for data type, on the allowable value of this input. - - - - - Indicates that there are a finite set of values and ranges allowed for this input, which are specified in the referenced list. - - - - - - - - References an externally defined finite set of values and ranges for this input. - - - - - Reference to a description of the mimetype, encoding, and schema used for this set of values and ranges. - - - - - - - - - - - - - The maximum file size, in megabytes, of this input. If the input exceeds this size, the server will return an error instead of processing the inputs. - - - - - - - - - - Listing of the Unit of Measure (U0M) support for this process input or output. - - - - - Reference to the default UOM supported for this input or output, if UoM is applicable. The process shall expect input in or produce output in this UOM unless the Execute request specifies another supported UOM. - - - - - - Reference to the default UOM supported for this Input/Output - - - - - - - - Unordered list of references to all of the UOMs supported for this input or output, if UOM is applicable. The default UOM shall be included in this list. - - - - - - - - Identifies a UOM supported for this input or output. - - - - - Reference to a UOM supported for this input or output. - - - - - - - - Listing of the Coordinate Reference System (CRS) support for this process input or output. - - - - - Identifies the default CRS that will be used unless the Execute operation request specifies another supported CRS. - - - - - - Reference to the default CRS supported for this Input/Output - - - - - - - - Unordered list of references to all of the CRSs supported for this Input/Output. The default CRS shall be included in this list. - - - - - - - - Identifies a Coordinate Reference System (CRS) supported for this input or output. - - - - - Reference to a CRS supported for this Input/Output. - - - - - - - - Formats, encodings, and schemas supported by a process input or output. - - - - - Identifies the default combination of Format, Encoding, and Schema supported for this Input/Output. The process shall expect input in or produce output in this combination of MimeType/Encoding/Schema unless the Execute request specifies otherwise. - - - - - Unordered list of combinations of format, encoding, and schema supported for this Input/Output. This element shall be repeated for each combination of MimeType/Encoding/Schema that is supported for this Input/Output. This list shall include the default MimeType/Encoding/Schema. - - - - - - - - Identifies the default Format, Encoding, and Schema supported for this input or output. The process shall expect input in or produce output in this combination of Format/Encoding/Schema unless the Execute request specifies otherwise.. - - - - - The default combination of MimeType/Encoding/Schema supported for this Input/Output. - - - - - - - - Identifies valid combinations of Format, Encoding, and Schema supported for this input or output. The process shall expect input in or produce output in this combination of Format/Encoding/Schema unless the Execute request specifies otherwise.. - - - - - A valid combination of MimeType/Encoding/Schema supported for this Input/Output. - - - - - - - - A combination of format, encoding, and/or schema supported by a process input or output. - - - - - Mime type supported for this input or output (e.g., text/xml). - - - - - Reference to an encoding supported for this input or output (e.g., UTF-8). This element shall be omitted if Encoding does not apply to this Input/Output. - - - - - Reference to a definition of XML elements or types supported for this Input/Output (e.g., GML 2.1 Application Schema). Each of these XML elements or types shall be defined in a separate XML Schema Document. This parameter shall be included when this input/output is XML encoded using an XML schema. When included, the input/output shall validate against the referenced XML Schema. This element shall be omitted if Schema does not apply to this Input/Output. Note: If the Input/Output uses a profile of a larger schema, the server administrator should provide that schema profile for validation purposes. - - - - - - - - - Description of a process Output. - - - - - In this use, the DescriptionType shall describe this process output. - - - - - - - - - Identifies the form of this output, and provides supporting information. - - - - - Indicates that this Output shall be a complex data structure (such as a GML fragment) that is returned by the execute operation response. The value of this complex data structure can be output either embedded in the execute operation response or remotely accessible to the client. When this output form is indicated, the process produces only a single output, and "store" is "false, the output shall be returned directly, without being embedded in the XML document that is otherwise provided by execute operation response. - This element also provides a list of format, encoding, and schema combinations supported for this output. The client can select from among the identified combinations of formats, encodings, and schemas to specify the form of the output. This allows for complete specification of particular versions of GML, or image formats. - - - - - Indicates that this output shall be a simple literal value (such as an integer) that is embedded in the execute response, and describes that output. - - - - - Indicates that this output shall be a BoundingBox data structure, and provides a list of the CRSs supported in these Bounding Boxes. This element shall be included when this process output is an ows:BoundingBox element. - - - - - - - - Description of a literal output (or input). - - - - - Data type of this set of values (e.g. integer, real, etc). This data type metadata should be included for each quantity whose data type is not a string. - - - - - List of supported units of measure for this input or output. This element should be included when this literal has a unit of measure (e.g., "meters", without a more complete reference system). Not necessary for a count, which has no units. - - - - - - diff --git a/sen2cor/cfg/DICO/1.0/DPC/services/opengis/wps/1.0.0/wpsExecute_request.xsd b/sen2cor/cfg/DICO/1.0/DPC/services/opengis/wps/1.0.0/wpsExecute_request.xsd deleted file mode 100755 index e8991e2..0000000 --- a/sen2cor/cfg/DICO/1.0/DPC/services/opengis/wps/1.0.0/wpsExecute_request.xsd +++ /dev/null @@ -1,346 +0,0 @@ - - - - - $Id: wpsExecute_request.xsd 2007-10-09 $ - - This XML Schema Document encodes the WPS Execute operation request. - - WPS is an OGC Standard. - Copyright (c) 2007,2010 Open Geospatial Consortium, Inc. All Rights Reserved. - To obtain additional rights of use, visit http://www.opengeospatial.org/legal/ . - - - - - - - - - - - WPS Execute operation request, to execute one identified Process. If a process is to be run multiple times, each run shall be submitted as a separate Execute request. - - - - - - - - Identifier of the Process to be executed. This Process identifier shall be as listed in the ProcessOfferings section of the WPS Capabilities document. - - - - - List of input (or parameter) values provided to the process, including each of the Inputs needed to execute the process. It is possible to have no inputs provided only when all the inputs are predetermined fixed resources. In all other cases, at least one input is required. - - - - - Defines the response type of the WPS, either raw data or XML document. If absent, the response shall be a response document which includes all outputs encoded in the response. - - - - - - - - - - - List of the Inputs provided as part of the Execute Request. - - - - - Unordered list of one or more inputs to be used by the process, including each of the Inputs needed to execute the process. - - - - - - - - Defines the response type of the WPS, either raw data or XML document - - - - - Indicates that the outputs shall be returned as part of a WPS response document. - - - - - Indicates that the output shall be returned directly as raw data, without a WPS response document. - - - - - - - - - - Unordered list of definitions of the outputs (or parameters) requested from the process. These outputs are not normally identified, unless the client is specifically requesting a limited subset of outputs, and/or is requesting output formats and/or schemas and/or encodings different from the defaults and selected from the alternatives identified in the process description, or wishes to customize the descriptive information about the output. - - - - - - Indicates if the execute response document shall be stored. If "true" then the executeResponseLocation attribute in the execute response becomes mandatory, which will point to the location where the executeResponseDocument is stored. The service shall respond immediately to the request and return an executeResponseDocument containing the executeResponseLocation and the status element which has five possible subelements (choice):ProcessAccepted, ProcessStarted, ProcessPaused, ProcessFailed and ProcessSucceeded, which are chosen and populated as follows: 1) If the process is completed when the initial executeResponseDocument is returned, the element ProcessSucceeded is populated with the process results. 2) If the process already failed when the initial executeResponseDocument is returned, the element ProcessFailed is populated with the Exception. 3) If the process has been paused when the initial executeResponseDocument is returned, the element ProcessPaused is populated. 4) If the process has been accepted when the initial executeResponseDocument is returned, the element ProcessAccepted is populated, including percentage information. 5) If the process execution is ongoing when the initial executeResponseDocument is returned, the element ProcessStarted is populated. In case 3, 4, and 5, if status updating is requested, updates are made to the executeResponseDocument at the executeResponseLocation until either the process completes successfully or fails. Regardless, once the process completes successfully, the ProcessSucceeded element is populated, and if it fails, the ProcessFailed element is populated. - Specifies if the Execute operation response shall be returned quickly with status information, or not returned until process execution is complete. This parameter shall not be included unless the corresponding "statusSupported" parameter is included and is "true" in the ProcessDescription for this process. - - - - - Indicates if the Execute operation response shall include the DataInputs and OutputDefinitions elements. If lineage is "true" the server shall include in the execute response a complete copy of the DataInputs and OutputDefinition elements as received in the execute request. If lineage is "false" then these elements shall be omitted from the response. - - - - - Indicates if the stored execute response document shall be updated to provide ongoing reports on the status of execution. If status is "true" and storeExecuteResponse is "true" (and the server has indicated that both storeSupported and statusSupported are "true") then the Status element of the execute response document stored at executeResponseLocation is kept up to date by the process. While the execute response contains ProcessAccepted, ProcessStarted, or ProcessPaused, updates shall be made to the executeResponse document until either the process completes successfully (in which case ProcessSucceeded is populated), or the process fails (in which case ProcessFailed is populated). If status is "false" then the Status element shall not be updated until the process either completes successfully or fails. If status="true" and storeExecuteResponse is "false" then the service shall raise an exception. - - - - - - - Definition of a format, encoding, schema, and unit-of-measure for an output to be returned from a process. - - - - - In this use, the DescriptionType shall describe this process input or output. - - - - - Title of the process output, normally available for display to a human. This element should be used if the client wishes to customize the Title in the execute response. This element should not be used if the Title provided for this output in the ProcessDescription is adequate. - - - - - Brief narrative description of a process output, normally available for display to a human. This element should be used if the client wishes to customize the Abstract in the execute response. This element should not be used if the Abstract provided for this output in the ProcessDescription is adequate. - - - - - - Specifies if this output should be stored by the process as a web-accessible resource. If asReference is "true", the server shall store this output so that the client can retrieve it as required. If store is "false", all the output shall be encoded in the Execute operation response document. This parameter only applies to ComplexData outputs. This parameter shall not be included unless the corresponding "storeSupported" parameter is included and is "true" in the ProcessDescription for this process. - - - - - - - - - Definition of a format, encoding, schema, and unit-of-measure for an output to be returned from a process. - - - - - Unambiguous identifier or name of an output, unique for this process. - - - - - - Reference to the unit of measure (if any) requested for this output. A uom can be referenced when a client wants to specify one of the units of measure supported for this output. This uom shall be a unit of measure referenced for this output of this process in the Process full description. - - - - - - - - References the XML schema, format, and encoding of a complex value. - - - - The Format of this input or requested for this output (e.g., text/xml). This element shall be omitted when the Format is indicated in the http header of the output. When included, this format shall be one published for this output or input in the Process full description. - - - - - The encoding of this input or requested for this output (e.g., UTF-8). This "encoding" shall be included whenever the encoding required is not the default encoding indicated in the Process full description. When included, this encoding shall be one published for this output or input in the Process full description. - - - - - Web-accessible XML Schema Document that defines the content model of this complex resource (e.g., encoded using GML 2.2 Application Schema). This reference should be included for XML encoded complex resources to facilitate validation. - PS I changed the name of this attribute to be consistent with the ProcessDescription. The original was giving me validation troubles in XMLSpy. - - - - - - - - Value of one input to a process. - - - - - Unambiguous identifier or name of a process, unique for this server, or unambiguous identifier or name of an output, unique for this process. - - - - - Title of a process or output, normally available for display to a human. - - - - - Brief narrative description of a process or output, normally available for display to a human. - - - - - Identifies the form of this input, and provides supporting information. - - - - - - - - Identifies the form of this input or output value, and provides supporting information. - - - - - Identifies this input value as a web accessible resource, and references that resource. - - - - - Identifies this input value as a data embedded in this request, and includes that data. - - - - - - - - Identifies the form of this input or output value, and provides supporting information. - - - - - Identifies this input or output value as a complex data structure encoded in XML (e.g., using GML), and provides that complex data structure. For an input, this element may be used by a client for any process input coded as ComplexData in the ProcessDescription. For an output, this element shall be used by a server when "store" in the Execute request is "false". - - - - - Identifies this input or output data as literal data of a simple quantity (e.g., one number), and provides that data. - - - - - Identifies this input or output data as an ows:BoundingBox data structure, and provides that ows:BoundingBox data. - - - - - - - - - Reference to an input or output value that is a web accessible resource. - - - - - Extra HTTP request headers needed by the service identified in ../Reference/@href. For example, an HTTP SOAP request requires a SOAPAction header. This permits the creation of a complete and valid POST request. - - - - - Key portion of the Key-Value pair in the HTTP request header. - - - - - Value portion of the Key-Value pair in the HTTP request header. - - - - - - - - The contents of this element to be used as the body of the HTTP request message to be sent to the service identified in ../Reference/@href. For example, it could be an XML encoded WFS request using HTTP POST - - - - - Reference to a remote document to be used as the body of the an HTTP POST request message to the service identified in ../Reference/@href. - - - - - Reference to a remote document to be used as the body of the an HTTP POST request message. This attribute shall contain a URL from which this input can be electronically retrieved. - - - - - - - - - Reference to a web-accessible resource that can be used as input, or is provided by the process as output. This attribute shall contain a URL from which this input/output can be electronically retrieved. - - - - - Identifies the HTTP method. Allows a choice of GET or POST. Default is GET. - - - - - - - - - - - - - - Complex data (such as an image), including a definition of the complex value data structure (i.e., schema, format, and encoding). May be an ows:Manifest data structure. - - - - - - - - - - - One simple literal value (such as an integer or real number) that is embedded in the Execute operation request or response. - - - - - String containing the Literal value (e.g., "49"). - - - - Identifies the data type of this literal input or output. This dataType should be included for each quantity whose value is not a simple string. - - - - - Identifies the unit of measure of this literal input or output. This unit of measure should be referenced for any numerical value that has units (e.g., "meters", but not a more complete reference system). Shall be a UOM identified in the Process description for this input or output. - - - - - - diff --git a/sen2cor/cfg/DICO/1.0/DPC/services/opengis/wps/1.0.0/wpsExecute_response.xsd b/sen2cor/cfg/DICO/1.0/DPC/services/opengis/wps/1.0.0/wpsExecute_response.xsd deleted file mode 100755 index 71f1397..0000000 --- a/sen2cor/cfg/DICO/1.0/DPC/services/opengis/wps/1.0.0/wpsExecute_response.xsd +++ /dev/null @@ -1,218 +0,0 @@ - - - - - $Id: wpsExecute_response.xsd 2007-10-09 $ - - This XML Schema Document encodes the WPS Execute operation response. - - WPS is an OGC Standard. - Copyright (c) 2007,2010 Open Geospatial Consortium, Inc. All Rights Reserved. - To obtain additional rights of use, visit http://www.opengeospatial.org/legal/ . - - - - - - - - - - - - WPS Execute operation response. By default, this XML document is delivered to the client in response to an Execute request. If "status" is "false" in the Execute operation request, this document is normally returned when process execution has been completed. - If "status" in the Execute request is "true", this response shall be returned as soon as the Execute request has been accepted for processing. In this case, the same XML document is also made available as a web-accessible resource from the URL identified in the statusLocation, and the WPS server shall repopulate it once the process has completed. It may repopulate it on an ongoing basis while the process is executing. - However, the response to an Execute request will not include this element in the special case where the output is a single complex value result and the Execute request indicates that "store" is "false". Instead, the server shall return the complex result (e.g., GIF image or GML) directly, without encoding it in the ExecuteResponse. If processing fails in this special case, the normal ExecuteResponse shall be sent, with the error condition indicated. This option is provided to simplify the programming required for simple clients and for service chaining. - - - - - - - - Process description from the ProcessOfferings section of the GetCapabilities response. - - - - - Execution status of this process. - - - - - Inputs that were provided as part of the execute request. This element shall be omitted unless the lineage attribute of the execute request is set to "true". - - - - - Complete list of Output data types that were requested as part of the Execute request. This element shall be omitted unless the lineage attribute of the execute request is set to "true". - - - - - List of values of the Process output parameters. Normally there would be at least one output when the process has completed successfully. If the process has not finished executing, the implementer can choose to include whatever final results are ready at the time the Execute response is provided. If the reference locations of outputs are known in advance, these URLs may be provided before they are populated. - - - - - - Unordered list of values of all the outputs produced by this process. It is not necessary to include an output until the Status is ProcessSucceeded. - - - - - - - - - This attribute shall contain the GetCapabilities URL of the WPS service which was invoked - - - - - The URL referencing the location from which the ExecuteResponse can be retrieved. If "status" is "true" in the Execute request, the ExecuteResponse should also be found here as soon as the process returns the initial response to the client. It should persist at this location as long as the outputs are accessible from the server. The outputs may be stored for as long as the implementer of the server decides. If the process takes a long time, this URL can be repopulated on an ongoing basis in order to keep the client updated on progress. Before the process has succeeded, the ExecuteResponse contains information about the status of the process, including whether or not processing has started, and the percentage completed. It may also optionally contain the inputs and any ProcessStartedType interim results. When the process has succeeded, the ExecuteResponse found at this URL shall contain the output values or references to them. - - - - - - - - - - Definition of a format, encoding, schema, and unit-of-measure for an output to be returned from a process. - - - - - Output definition as provided in the execute request - - - - - - - - Value of one output from a process. - - - - - In this use, the DescriptionType shall describe this process output. - - - - Identifies the form of this output, and provides supporting information. - - - - - - - - - Identifies the form of this input or output value, and provides supporting information. - - - - - Identifies this output as a web accessible resource, and references that resource. This element shall only be used for complex data. This element shall be used by a server when "store" in the Execute request is "true". - - - - - Identifies this output value as a data embedded in this response, and includes that data. This element shall be used by a server when "store" in the Execute request is "false". - - - - - - - - Reference to an output value that is a web accessible resource. - - - - Reference to a web-accessible resource that is provided by the process as output. This attribute shall contain a URL from which this output can be electronically retrieved. - - - - - - - - - Description of the status of process execution. - - - - - Indicates that this process has been accepted by the server, but is in a queue and has not yet started to execute. The contents of this human-readable text string is left open to definition by each server implementation, but is expected to include any messages the server may wish to let the clients know. Such information could include how long the queue is, or any warning conditions that may have been encountered. The client may display this text to a human user. - - - - - Indicates that this process has been accepted by the server, and processing has begun. - - - - - Indicates that this process has been accepted by the server, and processing has started but subsequently been paused by the server. - - - - - Indicates that this process has successfully completed execution. The contents of this human-readable text string is left open to definition by each server, but is expected to include any messages the server may wish to let the clients know, such as how long the process took to execute, or any warning conditions that may have been encountered. The client may display this text string to a human user. The client should make use of the presence of this element to trigger automated or manual access to the results of the process. If manual access is intended, the client should use the presence of this element to present the results as downloadable links to the user. - - - - - Indicates that execution of this process has failed, and includes error information. - - - - - - The time (UTC) that the process finished. If the process is still executing or awaiting execution, this element shall contain the creation time of this document. - - - - - - - Indicates that this process has been has been accepted by the server, and processing has begun. - - - - - A human-readable text string whose contents are left open to definition by each WPS server, but is expected to include any messages the server may wish to let the clients know. Such information could include how much longer the process may take to execute, or any warning conditions that may have been encountered to date. The client may display this text to a human user. - - - - Percentage of process that has been completed, where 0 means the process has just started, and 99 means the process is almost complete. This value is expected to be accurate to within ten percent. - - - - - - - - - - - - - - - Indicator that the process has failed to execute successfully. The reason for failure is given in the exception report. - - - - - - - diff --git a/sen2cor/cfg/DICO/1.0/DPC/services/opengis/wps/1.0.0/wpsGetCapabilities_request.xsd b/sen2cor/cfg/DICO/1.0/DPC/services/opengis/wps/1.0.0/wpsGetCapabilities_request.xsd deleted file mode 100755 index 06dc0ba..0000000 --- a/sen2cor/cfg/DICO/1.0/DPC/services/opengis/wps/1.0.0/wpsGetCapabilities_request.xsd +++ /dev/null @@ -1,43 +0,0 @@ - - - - - $Id: wpsGetCapabilities_request.xsd 2007-10-09 $ - - This XML Schema Document encodes the WPS GetCapabilities operation request. - - WPS is an OGC Standard. - Copyright (c) 2007,2010 Open Geospatial Consortium, Inc. All Rights Reserved. - To obtain additional rights of use, visit http://www.opengeospatial.org/legal/ . - - - - - - - - - - - - When omitted, server shall return latest supported version. - - - - - - OGC service type identifier (WPS). - - - - - RFC 4646 language code of the human-readable text (e.g. "en-CA"). - - - - - diff --git a/sen2cor/cfg/DICO/1.0/DPC/services/opengis/wps/1.0.0/wpsGetCapabilities_response.xsd b/sen2cor/cfg/DICO/1.0/DPC/services/opengis/wps/1.0.0/wpsGetCapabilities_response.xsd deleted file mode 100755 index 45cbccc..0000000 --- a/sen2cor/cfg/DICO/1.0/DPC/services/opengis/wps/1.0.0/wpsGetCapabilities_response.xsd +++ /dev/null @@ -1,111 +0,0 @@ - - - - - $Id: wpsGetCapabilities_response.xsd 2007-10-09 $ - - This XML Schema Document encodes the WPS GetCapabilities operation response. - - WPS is an OGC Standard. - Copyright (c) 2007,2010 Open Geospatial Consortium, Inc. All Rights Reserved. - To obtain additional rights of use, visit http://www.opengeospatial.org/legal/ . - - - - - - - - - - - - - WPS GetCapabilities operation response. This document provides clients with service metadata about a specific service instance, including metadata about the processes that can be executed. Since the server does not implement the updateSequence and Sections parameters, the server shall always return the complete Capabilities document, without the updateSequence parameter. - - - - - - - - - - - List of the default and other languages supported by this service. - - - - - Location of a WSDL document which describes the entire service. - - - - - - - - - - - - Listing of the default and other languages supported by this service. - - - - - - Identifies the default language that will be used unless the operation request specifies another supported language. - - - - - - Identifier of the default language supported by the service. This language identifier shall be as specified in IETF RFC 4646. - - - - - - - - Unordered list of references to all of the languages supported by this service. The default language shall be included in this list. - - - - - - - - - Identifies a list of languages supported by this service. - - - - - Identifier of a language supported by the service. This language identifier shall be as specified in IETF RFC 4646. - - - - - - - - List of brief descriptions of the processes offered by this WPS server. - - - - - - Unordered list of one or more brief descriptions of all the processes offered by this WPS server. - - - - - - - diff --git a/sen2cor/cfg/DICO/1.0/DPC/services/opengis/xlinks/1.0.0/xlinks.xsd b/sen2cor/cfg/DICO/1.0/DPC/services/opengis/xlinks/1.0.0/xlinks.xsd deleted file mode 100755 index 8105040..0000000 --- a/sen2cor/cfg/DICO/1.0/DPC/services/opengis/xlinks/1.0.0/xlinks.xsd +++ /dev/null @@ -1,122 +0,0 @@ - - - - - xlinks.xsd v3.0b2 2001-07 - - GML 3.0 candidate xlinks schema. Copyright (c) 2001 OGC, All Rights Reserved. - - - - - - - - - - - - - - The 'show' attribute is used to communicate the desired presentation - of the ending resource on traversal from the starting resource; it's - value should be treated as follows: - new - load ending resource in a new window, frame, pane, or other - presentation context - replace - load the resource in the same window, frame, pane, or - other presentation context - embed - load ending resource in place of the presentation of the - starting resource - other - behavior is unconstrained; examine other markup in the - link for hints - none - behavior is unconstrained - - - - - - - - - - - - - - - - The 'actuate' attribute is used to communicate the desired timing - of traversal from the starting resource to the ending resource; - it's value should be treated as follows: - onLoad - traverse to the ending resource immediately on loading - the starting resource - onRequest - traverse from the starting resource to the ending - resource only on a post-loading event triggered for - this purpose - other - behavior is unconstrained; examine other markup in link - for hints - none - behavior is unconstrained - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/sen2cor/cfg/DICO/1.0/DPC/services/owsExceptionReport.xsd b/sen2cor/cfg/DICO/1.0/DPC/services/owsExceptionReport.xsd deleted file mode 100755 index a8db0a3..0000000 --- a/sen2cor/cfg/DICO/1.0/DPC/services/owsExceptionReport.xsd +++ /dev/null @@ -1,76 +0,0 @@ - - - - owsExceptionReport.xsd 2011-02-07 - This XML Schema Document encodes the Exception Report response to all OWS operations. - - OWS is an OGC Standard. - Copyright (c) 2006,2010 Open Geospatial Consortium, Inc. All Rights Reserved. - To obtain additional rights of use, visit http://www.opengeospatial.org/legal/ . - - - - - - - - Report message returned to the client that requested any OWS operation when the server detects an error while processing that operation request. - - - - - - Unordered list of one or more Exception elements that each describes an error. These Exception elements shall be interpreted by clients as being independent of one another (not hierarchical). - - - - - - Specification version for OWS operation. The string value shall contain one x.y.z "version" value (e.g., "2.1.3"). A version number shall contain three non-negative integers separated by decimal points, in the form "x.y.z". The integers y and z shall not exceed 99. Each version shall be for the Implementation Specification (document) and the associated XML Schemas to which requested operations will conform. An Implementation Specification version normally specifies XML Schemas against which an XML encoded operation response must conform and should be validated. See Version negotiation subclause for more information. - - - - - - - - - - Identifier of the language used by all included exception text values. These language identifiers shall be as specified in IETF RFC 4646. When this attribute is omitted, the language used is not identified. - - - - - - - - - - An Exception element describes one detected error that a server chooses to convey to the client. - - - - - Ordered sequence of text strings that describe this specific exception or error. The contents of these strings are left open to definition by each server implementation. A server is strongly encouraged to include at least one ExceptionText value, to provide more information about the detected error than provided by the exceptionCode. When included, multiple ExceptionText values shall provide hierarchical information about one detected error, with the most significant information listed first. - - - - - - A code representing the type of this exception, which shall be selected from a set of exceptionCode values specified for the specific service operation and server. - - - - - When included, this locator shall indicate to the client where an exception was encountered in servicing the client's operation request. This locator should be included whenever meaningful information can be provided by the server. The contents of this locator will depend on the specific exceptionCode and OWS service, and shall be specified in the OWS Implementation Specification. - - - - diff --git a/sen2cor/cfg/DICO/1.0/DataAccess/item/item.xsd b/sen2cor/cfg/DICO/1.0/DataAccess/item/item.xsd deleted file mode 100755 index c493761..0000000 --- a/sen2cor/cfg/DICO/1.0/DataAccess/item/item.xsd +++ /dev/null @@ -1,197 +0,0 @@ - - - - - - Product Data Item identification - - - - - - - - Product Data Item identification - - - - - - - - - - Product Data Item identification - - - - - - - - - Preview Image identification - - - - - - - - - Product Data Item identification - - - - - - - - - - Product Data Item identification - - - - - - - - - Product Data Item identification - - - - - - - - - Product Data Item identification - - - - - - - - - Product Data Item identification - - - - - - - - - Product Data Item identification - - - - - - - - - Product Data Item identification - - - - - - - - - Product Data Item identification - - - - - - - - - Product Data Item identification - - - - - - - - - Product Data Item identification - - - - - - - - - Datatake identification - - - - - - - - Product Data Item identification - - - - - - - - - - Product Data Item identification list: Granule, Tile, DataStrip, GIPP, DEM, GRI, IERS, POD, ECMWF, HKTM, SAD) - - - - - - - - - - - - - - - - - - - - - Product Identifier in the archive (auxiliary, DEM, GIPP,...) - - - - - - a PDI_ID or a Product ID - - - - - - The file type used by the Archive to discriminate Items (PDIs, products, auxiliary) - - - - - - The archive latency (On-line / Off-line) - - - - - - - diff --git a/sen2cor/cfg/DICO/1.0/DataAccess/item/item2A.xsd b/sen2cor/cfg/DICO/1.0/DataAccess/item/item2A.xsd deleted file mode 100755 index 759738d..0000000 --- a/sen2cor/cfg/DICO/1.0/DataAccess/item/item2A.xsd +++ /dev/null @@ -1,181 +0,0 @@ - - - - - - - Product Data Item identification - - - - - - - - Product Data Item identification - - - - - - - - - - - - Product Data Item identification - - - - - - - - - Preview Image identification - - - - - - - - - Product Data Item identification - - - - - - - - - - Product Data Item identification - - - - - - - Product Data Item identification - - - - - - - Product Data Item identification - - - - - - - - - Product Data Item identification - - - - - - - - - Product Data Item identification - - - - - - - - - Product Data Item identification - - - - - - - - - Product Data Item identification - - - - - - - - - Product Data Item identification - - - - - - - - - Product Data Item identification - - - - - - - - - Datatake identification - - - - - - - - Product Data Item identification - - - - - - - - - - Product Data Item identification list: Granule, Tile, Datastrip, GIPP, DEM, GRI, IERS, POD, ECMWF, HKTM, SAD) - - - - - - - - - - - - - - - - - - - - - Product Identifier in the archive (auxiliary, DEM, GIPP,...) - - - - - - a PDI_ID_2A or a Product ID - - - - diff --git a/sen2cor/cfg/DICO/1.0/DataAccess/userProduct/userProduct.xsd b/sen2cor/cfg/DICO/1.0/DataAccess/userProduct/userProduct.xsd deleted file mode 100755 index 610550f..0000000 --- a/sen2cor/cfg/DICO/1.0/DataAccess/userProduct/userProduct.xsd +++ /dev/null @@ -1,99 +0,0 @@ - - - - - - - A PDI physical Url or a PDI consolidated ID - - - - - - A PDI physical Url (https://-dag server url-/download?PdiID=-PDIid-&dsPdiID=-DsPDIid-) - - - - - - - - A Consolidated PDI identifier - - - - - - - - The archive status of the product specified by the PhysicalIdentifier: available / temporaryUnavailable / expected - - - - - - - - - - The request to translate Logical PDI-ids in Physical PDI-ids. - - - - - Request for Logical items translation - - - - - - This field represents the logical identifier (granules only) as received through the ngEO IF 329 - - - - - - - - - Request the translation for Consolidated Tiles - - - - - - The s2 uri originated by ngEO - - - - - - - - The s2 user id - - - - - - The needed info to request an authorization to ngEO - - - - - The S2 user id - - - - - The S2 Product Uri originated by ngEO. - - - - - - Do the ngEO authorization - - - - diff --git a/sen2cor/cfg/DICO/1.0/FOS/Orb_Reference/EO_OPER_MPL_ORBSCT_REF.xsd b/sen2cor/cfg/DICO/1.0/FOS/Orb_Reference/EO_OPER_MPL_ORBSCT_REF.xsd deleted file mode 100755 index 3711274..0000000 --- a/sen2cor/cfg/DICO/1.0/FOS/Orb_Reference/EO_OPER_MPL_ORBSCT_REF.xsd +++ /dev/null @@ -1,28 +0,0 @@ - - - - - - - Orbit Scenario Data Types - - - $Revision: 1.1 $ $Date: 2011/06/16 11:11:07 $ - - - - - - - - - - - - - - - - - - diff --git a/sen2cor/cfg/DICO/1.0/FOS/Orb_Restituted/EO_OPER_AUX_ORBRES.xsd b/sen2cor/cfg/DICO/1.0/FOS/Orb_Restituted/EO_OPER_AUX_ORBRES.xsd deleted file mode 100755 index 3f54d85..0000000 --- a/sen2cor/cfg/DICO/1.0/FOS/Orb_Restituted/EO_OPER_AUX_ORBRES.xsd +++ /dev/null @@ -1,29 +0,0 @@ - - - - - - - - Restituted Orbit Data Types - - - $Revision: 1.1 $ $Date: 2011/06/16 11:10:53 $ - - - - - - - - - - - - - - - - - - diff --git a/sen2cor/cfg/DICO/1.0/FOS/Orb_predicted/EO_OPER_MPL_ORBPRE.xsd b/sen2cor/cfg/DICO/1.0/FOS/Orb_predicted/EO_OPER_MPL_ORBPRE.xsd deleted file mode 100755 index 8a5d975..0000000 --- a/sen2cor/cfg/DICO/1.0/FOS/Orb_predicted/EO_OPER_MPL_ORBPRE.xsd +++ /dev/null @@ -1,46 +0,0 @@ - - - - - - - - - Earth Explorer Header data types - - - $Revision: 1.1 $ $Date: 2011/10/07 08:02:08 $ - - - Predicted Orbit File - - - $Revision: 1.1 $ $Date: 2011/10/07 08:01:47 $ - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/sen2cor/cfg/DICO/1.0/GS/header/stationHeader.xsd b/sen2cor/cfg/DICO/1.0/GS/header/stationHeader.xsd deleted file mode 100755 index 9697f70..0000000 --- a/sen2cor/cfg/DICO/1.0/GS/header/stationHeader.xsd +++ /dev/null @@ -1,143 +0,0 @@ - - - - - - - The Fixed Header is an XML structure. Many of its fields are redundant with the File Name elements, but are present in more readable form in the Fixed Header, whereas in File Name they are more compact for obvious reasons - - - - - Type describing the structure of a Fixed Header - - - - - It is a repetition of the Logical File Name, i.e. the File Names excluding the extension. - - - - - A 1-line description of the File Type. - - - - - Multi-lines free text - - - - - A 1-word description of the Mission, coherent -with the Mission element in the File Name. - - - - - A 1-line description of the file class, coherent -with the File Class element in the File Name - - - - - - - These files will not be revised by version - - - - - - - - - - - - - Period of time - - - - - This is the UTC Validity Start Time, coherent with -the Validity Start Time in the File Name, but in -CCSDS ASCII format with time reference. - - - - - This is the UTC Validity Stop Time, coherent with -the Validity Stop Time in the File Name, but in -CCSDS ASCII format with time reference. - - - - - - - - - Name of the Ground Segment element creating -the file (e.g. FOS, PDGS, SSALTO...) - - - - - - - - - - - - - - - - - - - - - - - - - - Name of the facility or tool, within the Ground -Segment element, creating the file (e.g. MCS, -DFEP, IPF1...) - - - - - Version of the tool - - - - - - - - - - This is the UTC Creation Date, in CCSDS ASCII -format with time reference. - - - - - - - Mission name - - - - - - - - - diff --git a/sen2cor/cfg/DICO/1.0/GS/plan/ACQ.xsd b/sen2cor/cfg/DICO/1.0/GS/plan/ACQ.xsd deleted file mode 100755 index 0a1391a..0000000 --- a/sen2cor/cfg/DICO/1.0/GS/plan/ACQ.xsd +++ /dev/null @@ -1,82 +0,0 @@ - - - - - - - - - - Id of the ACQ. Must be unique for each ACQ -element transmitted to the station. -By convention it is coded as indicated in the -format - - - - - Absolute orbit number relevant to the planned -acquisition - - - - - Identification of the station, three characters -according to the station codes listed in [AD-02], -right padded with an underscore - - - - - Identification of the Satellite -S2A, S2B - - - - - Identification of the Downlink Channels -“1”, “2”, “1+2” - - - - - - - - - - - - UTC time of acquisition of signal. - - - - - UTC time of loss of signal - - - - - UTC time for start of data dump. - - - - - UTC time for stop of data dump. - - - - - - - - - - - - - - - - - diff --git a/sen2cor/cfg/DICO/1.0/GS/report/StationDownlink.xsd b/sen2cor/cfg/DICO/1.0/GS/report/StationDownlink.xsd deleted file mode 100755 index f6899fb..0000000 --- a/sen2cor/cfg/DICO/1.0/GS/report/StationDownlink.xsd +++ /dev/null @@ -1,52 +0,0 @@ - - - - - - - - Type for Details of station downlink - - - - - Identification of the antenna used - - - - - Acquisition Id code - - - - - Effective Date/Time of data acquisition start - - - - - Effective Date/Time of data acquisition stop - - - - - Oveall status of downlink - - - - - Commented reason for Not OK downlinks - - - - - - - Oveall status of downlink : OK/Not_OK - - - - - - - diff --git a/sen2cor/cfg/DICO/1.0/GS/report/StationUnavailability.xsd b/sen2cor/cfg/DICO/1.0/GS/report/StationUnavailability.xsd deleted file mode 100755 index 31350bb..0000000 --- a/sen2cor/cfg/DICO/1.0/GS/report/StationUnavailability.xsd +++ /dev/null @@ -1,42 +0,0 @@ - - - - - - - - Type for Details of station unavailability - - - - - Date/Time of unavailability start - - - - - Date/Time of unavailability end - - - - - Type of outage : planned/unplanned - - - - - Commented reason for unavailability, including unavailability of equipment (e.g. unavailability of DFEP systems). - - - - - - - Type of outage : Planned, unplanned - - - - - - - diff --git a/sen2cor/cfg/DICO/1.0/IPF/base/base.xsd b/sen2cor/cfg/DICO/1.0/IPF/base/base.xsd deleted file mode 100755 index 166789d..0000000 --- a/sen2cor/cfg/DICO/1.0/IPF/base/base.xsd +++ /dev/null @@ -1,155 +0,0 @@ - - - - - - Version identification - - - - - - - - - - - - - - - - - - Message formatted in conformance as the log message format - - - - - Fonction name generating the message - - - - - log code formatted - - - - - description - - - - - generation date - - - - - Working station - - - - - IDP-SCName - - - - - Processor version - - - - - type of log : debug, warning, info,... - - - - - - - - - - - - - - - - File type input of an IDP-SC - - - - - - - - - - - - - - - - - File type output of an IDP-SC - - - - - - - - - - - - - IDP-SC or OLQC name - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/sen2cor/cfg/DICO/1.0/IPF/job/IDP_SC_Configuration.xsd b/sen2cor/cfg/DICO/1.0/IPF/job/IDP_SC_Configuration.xsd deleted file mode 100755 index 74998b0..0000000 --- a/sen2cor/cfg/DICO/1.0/IPF/job/IDP_SC_Configuration.xsd +++ /dev/null @@ -1,70 +0,0 @@ - - - - - - Processing configuration Interface for specific IDP-SC or OLQC - - - - - - IDP-SC or OLQC performance requirements - - - - - - maximum RAM size in GB used for this IDP-SC or OLQC - - - - - - Disk usage size in GB - - - - - - - - - List of IDP-SC or OLQC name and corresponding version. This List is completed only in IDP-SC FORMAT description - - - - - - IDP-SC or OLQC description : name and version - - - - - IDP-SC or OLQC name - - - - - IDP-SC or OLQC version used identifier - - - - - - - - - - - IDP-SC name or OLQC name - - - - - IDP-SC or OLQC version used identifier - - - - - diff --git a/sen2cor/cfg/DICO/1.0/IPF/job/IDP_SC_LaunchReport.xsd b/sen2cor/cfg/DICO/1.0/IPF/job/IDP_SC_LaunchReport.xsd deleted file mode 100755 index e511835..0000000 --- a/sen2cor/cfg/DICO/1.0/IPF/job/IDP_SC_LaunchReport.xsd +++ /dev/null @@ -1,76 +0,0 @@ - - - - - - - - - - Context of IDP-SC execution - - - - - - Identifier of IDP-SC start up order (extracted from jobOrder filename) - - - - - - - - - Information the events occured during the IDP-SC execution - - - - - - IDP-SC start up date - - - - - IDP-SC ending date - - - - - IDP-SC execution status - - - - - - - - - - - - - List of log messages generated by the IDP-SC during execution. ALARM and WARNING (TDC) messages are inserted. - - - - - - Message formatted in conformance as the log message format - - - - - - - - - - - - - Report for an Idp-Sc or OLQC execution - - - diff --git a/sen2cor/cfg/DICO/1.0/IPF/job/IPF_JobOrder.xsd b/sen2cor/cfg/DICO/1.0/IPF/job/IPF_JobOrder.xsd deleted file mode 100755 index 8b35b35..0000000 --- a/sen2cor/cfg/DICO/1.0/IPF/job/IPF_JobOrder.xsd +++ /dev/null @@ -1,369 +0,0 @@ - - - - - - - - - - - - - - - - - - - - A string defining the name of -the parameter - - - - - A string defining the value of -the parameter - - - - - - - - Execution Parameter of one task - - - - - - The IDP-SC version - - - - - Intermediate data or trace files produced by the Tasks during IPF testing/maintenance mode - - - - - - - - - - - - Indicator of generation of the breakpoint file - - - - - - - - - - - - List of file type is specific to each task - - - - - - - - - - Origin : physical, logical, stem, regexp or directory - - - - - Complete path + filename - - - - - - - - - - - - - - - - - - - - Package of input file - - - - - - - - - List of file type is specific to each task - - - - - Physical, logical, stem, regexp or directory - - - - - - - - Complete path + filename - - - - - - - - - List of time validity intervals is generic partitioning in subintervals of sensing time, indicating which of the input files should be used in the specific interval - - - - - - - - - date time start in specific format - - - - - - - - - - date time stop in specific format - - - - - - - - - - any of the filename listed in the previous List_of_File_Names fields - - - - - - - - - - - - - - - - - - - Package of output file - - - - - - - - - List of file types is specific to each task - - - - - - - - - - - - - - - - - Job Order Type - - - - - Common Parameters - - - - - - The IDP-SC or OLQC name - - - - - The IDP-SC version - - - - - Logging levels are ordered from low to-high details as in the list. E.g.setting INFO forces PROGRESS, -WARNING and ERROR messages to be issued as well. - - - - - - - - - - - - - - Logging levels are ordered from low to-high details as in the list. E.g.setting PROGRESS,forces -WARNING and ERROR messages to be issued as well. - - - - - - - - - - - - - - Always set to false in S2 environment - - - - - - - - - - - Flag indicated if intermediate data or trace files shall be produced - - - - - - - - - - - Not relevant in S2 PDGS processing context - - - - - String with mission specific content - - - - - The config_Files section will -contain one entry for -each configuration file. In case of no configuration file such tag shall be present in the Job Order with null occurrence. - - - - - - Absolute pathname and -filename of the configuration -file - - - - - - - - The sensing start/stop time represents the requested data window to be processed. Not filled in S2 context - - - - - - The start time of the processing of main input data in the format -YYYYMMDD_HHMMSSuuuuuu - - - - - - - - - - The stop time for the processing of main input data in the format YYYYMMDD_HHMMSSuuuuuu - - - - - - - - - - - - - Specific Processing parameter directly provided and not stored in conf file - - - - - - Characteristics of each parameter - - - - - - - - - - - List of tasks involved in the IDP_SC - - - - - - - - - - - diff --git a/sen2cor/cfg/DICO/1.0/PDGS/archive/archive.xsd b/sen2cor/cfg/DICO/1.0/PDGS/archive/archive.xsd deleted file mode 100755 index e469b26..0000000 --- a/sen2cor/cfg/DICO/1.0/PDGS/archive/archive.xsd +++ /dev/null @@ -1,174 +0,0 @@ - - - - - - - - - - - - - Product data item identifier - - - - - Parent PDI-id (referenced datastrip id) - - - - - The datatake id (aka GID, group id) - - - - - The FileType of the Item. Cf. [DI-PSD] - - - - - On-line / Off-line - - - - - - S2 Earth Observation Specialization. - - - - - S2 Earth Observation Specialization. -Cf. [NGEO-EICD-S2], opt:EarthObservation - - - - - - - PDIs metadata to set Central Index and Catalogue - - - - - Metadata for Central index purpose - - - - - - - - - https://-dag server url-/ -get? -PdiID=-PDIid- -dsPdiID=-DatastripPDIid- - - - - - A substring of the Pdi-id (acq station stripped), useful to detect redounded or complementary PDIs. - - - - - - Aggregated quality score for the Item. - - - - - - - - - Metadata for cataloguing purpose. Mandatory for PDI at granule level - - - - - - S2 Earth Observation Specialization. - - - - - - - - - - - - - - - Metadata to update PDIs status at the Central Index - - - - - - Type of performed operation (delete, latency update) - - - - - - - - - - - - - - - - - - - - - - - True if the Archive is unavailable - - - - - - - - - - - - Archived and Intoried Item to be Indexed and Catalogued - - - - - - - - - - - - - - - Metadata to notify PDIs status change - - - - - - - - diff --git a/sen2cor/cfg/DICO/1.0/PDGS/base/base.xsd b/sen2cor/cfg/DICO/1.0/PDGS/base/base.xsd deleted file mode 100755 index 8804450..0000000 --- a/sen2cor/cfg/DICO/1.0/PDGS/base/base.xsd +++ /dev/null @@ -1,120 +0,0 @@ - - - - - - - - - - - - - - - - - - Data interface is independant from any satellite. - - - - - - - - - - - Email address. - - - - - - - - - - - - - - - - - - - - - Address Ftp. - - - - - - Language - - - - - - - - - - Number of satellites - - - - - - Acces path of a data - - - - - - - - - - - - - - - - - - - State : ON/OFF - - - - - - - - - OK / KO - - - - - - - - - To be Defined - - - - - - - - - - - diff --git a/sen2cor/cfg/DICO/1.0/PDGS/center/center.xsd b/sen2cor/cfg/DICO/1.0/PDGS/center/center.xsd deleted file mode 100755 index ca07048..0000000 --- a/sen2cor/cfg/DICO/1.0/PDGS/center/center.xsd +++ /dev/null @@ -1,188 +0,0 @@ - - - - - - - - Site Centres and Processing Archiving Centre - - - - - - - - - Center used for Acquisition and Processing - - - - - - - - center used only for acquisition - - - - - - - - Center used for Acquisition and Processing - - - - - - - - - - center used only for acquisition - - - - - - - - - - - Acquistion Center coded on 3 characters - - - - - - - - - - - - - - PAC1 (assigned to Spanish PAC) PAC2 (assigned to UK PAC) - - - - - - Processing and archiving Center N�1 (assigned to Spanish PAC) - - - - - - - - Processing and archiving Center N�2 (assigned to UK PAC) - - - - - - - - - - - PDMC - - - - - - - - MPCC - - - - - - - - Reference Platform - - - - - - - - - - - External Center - - - - - - - - - - - - - - - - Archiving Center - - - - - - - - - - - - - - - - - Processing Center - - - - - - - - - - - - - - - - - - - - - - - - - - - Processing Center - - - - - - - - diff --git a/sen2cor/cfg/DICO/1.0/PDGS/component/component.xsd b/sen2cor/cfg/DICO/1.0/PDGS/component/component.xsd deleted file mode 100755 index 3d843d1..0000000 --- a/sen2cor/cfg/DICO/1.0/PDGS/component/component.xsd +++ /dev/null @@ -1,55 +0,0 @@ - - - - - Component types - - - $Revision: 1.1 $ $Date: 2011/06/16 11:10:48 $ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/sen2cor/cfg/DICO/1.0/PDGS/configuration/configuration.xsd b/sen2cor/cfg/DICO/1.0/PDGS/configuration/configuration.xsd deleted file mode 100755 index 1357656..0000000 --- a/sen2cor/cfg/DICO/1.0/PDGS/configuration/configuration.xsd +++ /dev/null @@ -1,123 +0,0 @@ - - - - - - - - A Scheduled Time Plan - - - - - How many times within the day (same time interval between two consecutive scheduling action) - - - - - - - The list of MRFs used by a component. - - - - - - - - The MRF filename - - - - - The MRF Validity start time - - - - - The MRF Validity stop time - - - - - - - - - - Identifier of the Host - - - - - - Allowed Transfer Methods: FTP, SFTP, FTPS or FS (for local filesystem) - - - - - - - - - - - User password - - - - - - User Name - - - - - - Temporary filename convention. -PREFIX_DOT : prefixed with “.”. This is the default in case -SUFFIX_LOCK : suffixed with “.lock” -TMP_DIR : use of a temporary directory (valid only for transfer of files and not for products with a directory structure). - - - - - - - - - - - - Repository name (unique identifier) - - - - - Type of transfer protocol to be used: FTP, SFTP, FTPS or FS (for local filesystem) - - - - - The identifier of the host. - - - - - Path where the data will be made available - - - - - Account on data consumer host - - - - - Encrypted Password of Account on data provider host. - - - - - - diff --git a/sen2cor/cfg/DICO/1.0/PDGS/dimap/dimap.xsd b/sen2cor/cfg/DICO/1.0/PDGS/dimap/dimap.xsd deleted file mode 100755 index 26d6d56..0000000 --- a/sen2cor/cfg/DICO/1.0/PDGS/dimap/dimap.xsd +++ /dev/null @@ -1,11267 +0,0 @@ - - - - - - - - - - - - - - - - - Pointing angles - - - - - Along lines - - - - - Along columns - - - - - - - Yaw, pitch, and roll angles - - - - - - - - - - Zenith and azimuth angles - - - - - - The range of the angle is into [0,360°[ - - - - - - - Dataset identification - - - - - String that identifies a Sentinel2 dataset - - - - - - - - Metadata Profile - - - - - - Metadata file format - - - - - - - - - - List of process-related data for tracing and debugging purposes. Every process should append the list with a new Step element. - - - - - Reference of GIPP files used by the inventory process. A GIPP type must appear only once in the list. An inventory process should append the list with the reference of every GIPP used (if not present yet in the list) - - - - DATATION - INIT_LOC_INV - CLOUD_INV - ARCHIVE_PRODUCT - - - - - - - - - - - List of process-related data for tracing and debugging purposes. Every process should append the list with a new Step element. - - - - ARCHIVE_PRODUCT - - - - - - - Reference of GIPP files used by the inventory process. A GIPP type must appear only once in the list. An inventory process should append the list with the reference of every GIPP used (if not present yet in the list) - - - - DATATION - INIT_LOC_INV - CLOUD_INV - ARCHIVE_PRODUCT - - - - - - - DEM type used by the inventory process (GLOBE or SRTM for example) - - - - - - - - - - - - - - - - List of process-related data for tracing and debugging purposes. Every process should append the list with a new Step element. - - - - INIT_LOC_PROD - L1A_PRODUCT - RADIO_S2 - GEO_S2 - L1B_PRODUCT - TILING_S2 - L1C_PRODUCT - L1A_PRODUCT - L1B_PRODUCT - L1C_PRODUCT - - - - - - - Reference of GIPP files used by the inventory process. A GIPP type must appear only once in the list. An inventory process should append the list with the reference of every GIPP used (if not present yet in the list) - - - - DATATION - INIT_LOC_INV - CLOUD_INV - ARCHIVE_PRODUCT - - - - - - - DEM type used by the inventory process (GLOBE or SRTM for example) - - - - - - - - - - - - Reference of GIPP files used by the production process. A GIPP type must appear only once in the list. An production process should append the list with the reference of every GIPP used (if not present yet in the list) - - - - DATATION - INIT_LOC_INV - CLOUD_INV - ARCHIVE_PRODUCT - - - - - - - DEM type used by the production process (GLOBE or SRTM for example) - - - - - - - - - - - - - - Metadata file identification - - - - - possible values are : "DATATION", "INIT_LOC_INV", "CLOUD_INV", "ARCHIVE_PRODUCT", "INIT_LOC_PROD", "RADIO_S2", "L1A_PRODUCT", -"GEO_S2", "L1B_PRODUCT", "RESAMPLE_S2", "L1C_PRODUCT" - - - - - - - - - - - - Unique Identifier of a Sentinel2 datastrip - - - - - - - - - - MSI operation mode: Nominal Observation Mode/Extended Observation Mode/Dark Signal Calibration Mode/Absolute Radiometry Calibration Mode/Vicarious Calibration Mode/Raw Measurement Mode/Test Mode - - - - - - - - - - - - - - - - - - - - - - DATATION - - - - - - - - - - DATATION - - - Processing/archiving date - - - - - Identifier of the downlink orbit - - - - - Imaging Orbit Number - - - - DATATION - - - - - - - - - - - - - - - - - DATATION - - - - - - - Imaging Start Time - - - - - Acquisition orbit direction (descending, ascending) - - - - - Downlink priority flag, can be set to NOMINAL, NRT or RT - - - - - - - - - - - - - - - - Flag to indicate if compress mode is by passed - - - ARCHIVE_PRODUCT - L1A_PRODUCT - L1B_PRODUCT - L1C_PRODUCT - - - - - - - Flag to indicate if equalization is active - - - ARCHIVE_PRODUCT - L1A_PRODUCT - L1B_PRODUCT - L1C_PRODUCT - - - - - - - On board active Detectors (in case of compression by-passed) - - - ARCHIVE_PRODUCT - L1A_PRODUCT - L1B_PRODUCT - L1C_PRODUCT - - - - - - - - - - - - - - - - On board TDI configuration - - - - - - For B3, B4, B11 and B12 only - - - - - - - - - - - - - - - - - - - - - - - - Flag to indicate if compress mode is by passed - - - ARCHIVE_PRODUCT - L1A_PRODUCT - L1B_PRODUCT - L1C_PRODUCT - - - - - - - Flag to indicate if equalization is active - - - ARCHIVE_PRODUCT - L1A_PRODUCT - L1B_PRODUCT - L1C_PRODUCT - - - - - - - On board active Detectors (in case of compression by-passed) - - - ARCHIVE_PRODUCT - L1A_PRODUCT - L1B_PRODUCT - L1C_PRODUCT - - - - - - - - - - - - - - - - On board TDI configuration - - - - - - For B3, B4, B11 and B12 only - - - - - - - - - - - - - - - - - - - - - - - - List of relative source packets for each couple (band ; detector). Created by ANA_TM, updated before archiving and by InitLoc Production for Level1 processing. - - - - DATATION - ARCHIVE_PRODUCT - INIT_LOC_PROD - - - - - - - - - - - - - - - - - - - - First source packet counter. Updated by Init_Loc_Inv, Archive and Init_Loc_Prod. - - - - - - - - - - Position of the first source packet in the on board scene - - - - - - - - - - - Number of source packets. Updated by Init_Loc_Inv, Archive and Init_Loc_Prod - - - - - - - - - - - Band identifier for source frame description - - - - - - - - - - - Detector identifier for source frame description - - - - - - - - - - - - - - - - - Summary of all degradations (lost and degraded packets) for the whole datastrip - - - - - - Number of lost packets for the whole datastrip - - - - - Number of too degraded packets (i.e. erroneous packets not trustworthy, meaning they will not be used by further processing) for the whole datastrip - - - - - Number of degraded packets (i.e. erroneous packets but trustworthy, meaning they will be used by further processing) for the whole datastrip - - - - - - Percentage of lost or degraded (either too degraded or not) ancillary data packets in the data-strip - - - - - - - - - - - - - - - - - - - - DATATION - ARCHIVE_PRODUCT - INIT_LOC_PROD - - - - - - - - - - - First source packet counter. - - - - - - - - - - Position of the first source packet in the on board scene - - - - - - - - - - - Number of source packets. - - - - - - - - - - - Band identifier for source frame description - - - - - - - - - - - - - - - - - Type of degradation - - - - - This field is optional: when DEGRADATION_TYPE is "LOST", it is not present. -Otherwise, there is one Error_Type_List element by type of error, containing the number of fields with that kind of error. -Possible types of error (from AnaTm specifications in DPM) are: -- out of bounds (type 1) -- internal inconsistency (type 2) -- temporal inconsistency (type 3) -- transfer vs source inconsistency (type 4), should be rare, for very few transfer information in annotation - - - - - - - - - - Type of error (from AnaTm specifications): -- outOfBounds matches error type 1; -- internalInconsistency matches error type 2; -- temporalInconsistency matches error type 3; -- transferVsSourceInconsistency matches error type 4: this error should be rare, for very few transfer information in annotation - - - - - - - - - - - - - - - - - - - - Date of the first line of the scene which contains the first lost / degraded source packet - - - - - Counter of the first source packet in error. This number is in [0;143] for 10m bands, [0;71] for 20m bands or [0;23] for 60m bands. - - - - - - - - - - - Number of lost or degraded source packet. This number is in [1;144] for 10m bands, [1;72] for 20m bands or [1;24] for 60m bands - - - - - - - - - - - - - - - - - Band identifier - - - - - - - - - - - Detector identifier - - - - - - - - - - - - - - - - - - - - DATATION - ARCHIVE_PRODUCT - INIT_LOC_PROD - - - - - - - - - - - First source packet counter. - - - - - - - - - - - - - - - Position of the first source packet in the on board scene - - - - - - - - - - - Number of source packets. - - - - - - - - - - - - - - - - Band identifier for source frame description - - - - - - - - - - - - - - - - - Type of degradation - - - - - Type of error (from AnaTm specifications): -- type 1 -- type 2 -- type 3 -- type 4 -- type 5 -- type 6 - - - - - - - - - - - - - - - - - - - - - - - - - Date of the first line of the scene which contains the first lost / degraded source packet - - - - - Counter of the first source packet in error. This number is in [0;143] for 10m bands, [0;71] for 20m bands or [0;23] for 60m bands. - - - - - - - - - - - Number of lost or degraded source packet. This number is in [1;144] for 10m bands, [1;72] for 20m bands or [1;24] for 60m bands - - - - - - - - - - - - - - - - - Band identifier - - - - - - - - - - - Detector identifier - - - - - - - - - - - - - - - - - - - - Type of degradation - - - - - Type of error (from AnaTm specifications): -- type 1 -- type 2 -- type 3 -- type 4 -- type 5 -- type 6 - - - - - - - - - - - - - - - - - - - - - - - - - Date of the first line of the scene which contains the first lost / degraded source packet - - - - - Counter of the first source packet in error. This number is in [0;143] for 10m bands, [0;71] for 20m bands or [0;23] for 60m bands. - - - - - - - - - - - Number of lost or degraded source packet. This number is in [1;144] for 10m bands, [1;72] for 20m bands or [1;24] for 60m bands - - - - - - - - - - - - - - - - - Band identifier - - - - - - - - - - - Detector identifier - - - - - - - - - - - - - - - - - - Source packet information - - - - - Datation model - - - - - - - - - - - - - - - The Precise orbit determination data (POD) provides information in order to improve the accuracy in the geo location of the data strips that have been inventoried. The POD data are optional. Each point is sampled at 1 Hz. - - - INIT_LOC_PROD - - - - - - - - - - - Spacecraft Position (X, Y, Z) from POD in millimeters - - - - - Spacecraft velocities (Vx, Vy, Vz) from POD in millimeters per seconds - - - - - Date (GPS Time referential frame) - - - - - - - - - A 'true' value indicates that these points must be used instead of GPS points - - - - - - - - - - - - - Onboard Hybrided attitude (STR+IMU), provided at 10Hz, gives the PRF frame in the J2000. - - - - - - Only one sample for one GPS_TIME. - - - - - - Space separated list of 4 quaternion values ordered as Q0 Q1 Q2 Q3 - - - - - - When 1 : quaternion is valid - - - - - Dated angular velocities - - - - - Velocity angular errors - - - - - GPS time value - - - - - List of 11 boolean flags separated by whitespace: STR1 STR2 STR3 GPSR-A GPSR-B VCU-A VCU-B IMU-1 IMU-2 IMU-3 IMU-4 - - - ARCHIVE_PRODUCT - L1A_PRODUCT - L1B_PRODUCT - L1C_PRODUCT - - - - - - - - - - AOCS Mode - - - ARCHIVE_PRODUCT - L1A_PRODUCT - L1B_PRODUCT - L1C_PRODUCT - - - - - - - - - - - - - - - - AOCS Submode - - - ARCHIVE_PRODUCT - L1A_PRODUCT - L1B_PRODUCT - L1C_PRODUCT - - - - - - - - - - - - - - - - - - Difference Between GSE filter estimate and first in-use STR measurement - - - ARCHIVE_PRODUCT - L1A_PRODUCT - L1B_PRODUCT - L1C_PRODUCT - - - - - - - Difference Between GSE filter estimate and second in-use STR measurement - - - ARCHIVE_PRODUCT - L1A_PRODUCT - L1B_PRODUCT - L1C_PRODUCT - - - - - - - - - - - - - - - - - - - Description of ephemeris data (filtered and raw) - - - - - Description of attitudes data (filtered and raw) - - - - - These data are acquired at 1 Hz - - - - - List of source packets lost / degraded - - - - - - - - - Type of degradation - - - - - - - - - - - - - - - - - - - - - - - - - - - ARCHIVE_PRODUCT - L1A_PRODUCT - L1B_PRODUCT - L1C_PRODUCT - - - - - - - - These data are acquired at 0.1 Hz - - - - - - List of 11 booleans from MSI-SAD packet - - - - - - - - - - - - - - - - - - - - Description of ephemeris data (filtered and raw) - - - - - Description of attitudes data (filtered and raw) - - - - - These data are acquired at 1 Hz - - - - - List of source packets lost / degraded - - - - - - - - - Type of degradation - - - - - - - - - - - - - - - - - - - - - - - - - - - ARCHIVE_PRODUCT - L1A_PRODUCT - L1B_PRODUCT - L1C_PRODUCT - - - - - - - - These data are acquired at 0.1 Hz - - - - - - List of 11 booleans from MSI-SAD packet - - - - - - - - - - - - - - - - - - - - Description of ephemeris data (filtered and raw) - - - - - Description of attitudes data (filtered and raw) - - - - - These data are acquired at 1 Hz - - - - - List of source packets lost / degraded - - - - - - - - - Type of degradation - - - - - - - - - - - - - - - - - - - - - - - - - - - ARCHIVE_PRODUCT - L1A_PRODUCT - L1B_PRODUCT - L1C_PRODUCT - - - - - - - - These data are acquired at 0.1 Hz - - - - - - List of 11 booleans from MSI-SAD packet - - - - - - - - - - - - - - - - - - - - - - Created by DATATION, updated by RADIO_S2. Coefficient also called Absolute calibration coefficient or Ak (used to perform the transform between Level-1B numerical count to radiances) - - - - DATATION - RADIO_S2 - - - - - - - - - - - - - - - - - - - - - - - Compression rate - ARCHIVE_PRODUCT - L1A_PRODUCT - L1B_PRODUCT - L1C_PRODUCT - - - In case of uncompressed data a configurable default value will be chosen (e.g. -1) - - - - - - - Integration time - ARCHIVE_PRODUCT - L1A_PRODUCT - L1B_PRODUCT - L1C_PRODUCT - - - - - - - In-flight Non Uniform Correction table ID defined by 10 bits. This ID is uniform for all transmitted bands. It identifies the correction coefficients table used in-flight. In case of NUC by-passed, the value is set to NONE. - - - ARCHIVE_PRODUCT - L1A_PRODUCT - L1B_PRODUCT - L1C_PRODUCT - - - - - - - - - - - - - - - The granules identification and information - DATATION - INIT_LOC_INV - CLOUD_INV - INIT_LOC_PROD - GEO_S2 - - - - - - - The granules geometry - - - - - For each detector, list of the granules composing the datastrip - - - - - - - - - - - - - - - Position of the granule in the Group of Source Packets. This position is identified through the position of the scenes first lines in the datastrip and is expressed as number of 10m resolution images lines - - - - - - - - - - GPS date-time of the first line of the granule. The date-time is given with a precision of one nanosecond. - - - - DATATION - INIT_LOC_PROD - - - - - - - - - - - - - - - - - - Detector identifier - - - - - - - - - - - - - - - - - - The granules identification and information - DATATION - INIT_LOC_INV - CLOUD_INV - INIT_LOC_PROD - GEO_S2 - - - - - - - The granules geometry - - - - - For each detector, list of the granules composing the datastrip - - - - - - - - - - - - - - - Position of the granule in the Group of Source Packets. This position is identified through the position of the scenes first lines in the datastrip and is expressed as number of 10m resolution images lines - - - - - - - - - - GPS date-time of the first line of the granule. The date-time is given with a precision of one nanosecond. - - - - DATATION - INIT_LOC_PROD - - - - - - - The granule footprint on ground : list of 5 (lat, lon, h) points. Altitude is provided over the geoid. This footprint is provided as a polygon counter-clockwise oriented. The polygon must be closed (the first and last vertices are the same). - - - - - The granule footprint in the QL display: list of 4 (l,c) points - - - - - Information provided for each granule, at the center of the granule - - - - - - The granule centre on ground : 1 (lat, lon, h) point. Altitude is provided over the geoid. - - - - - The granule centre in the QL display: 1 (l,c) point - - - - - Incidence angles corresponding to the center of the granule - - - - - Solar angles corresponding to the center of the granule - - - - - - - - - - - A percentage of degraded ancillary data is provided for each granule - - - - - A percentage of degraded MSI data is provided for each granule - - - - - - - - - - - - - - - - - - - - Detector identifier - - - - - - - - - - - - - - - - - - The granules identification and information - DATATION - INIT_LOC_INV - CLOUD_INV - INIT_LOC_PROD - GEO_S2 - - - - - - - The granules geometry - - - - - For each detector, list of the granules composing the datastrip - - - - - - - - - - - - - - - Position of the granule in the Group of Source Packets. This position is identified through the position of the scenes first lines in the datastrip and is expressed as number of 10m resolution images lines - - - - - - - - - - GPS date-time of the first line of the granule. The date-time is given with a precision of one nanosecond. - - - - DATATION - INIT_LOC_PROD - - - - - - - The granule footprint on ground : list of 5 (lat, lon, h) points. Altitude is provided over the geoid. This footprint is provided as a polygon counter-clockwise oriented. The polygon must be closed (the first and last vertices are the same). - - - - - The granule footprint in the QL display: list of 4 (l,c) points. Used for computing percentage of cloud coverage and degraded data per granule - - - - - Information provided for each granule, at the center of the granule - - - - - - The granule centre on ground : 1 (lat, lon, h) point. Altitude is provided over the geoid. - - - - - The granule centre in the QL display: 1 (l,c) point - - - - - Incidence angles corresponding to the center of the granule - - - - - Solar angles corresponding to the center of the granule - - - - - - - - - - - A percentage of degraded ancillary data is provided for each granule - - - - - A percentage of degraded MSI data is provided for each granule - - - - - - - - - - - - - - - - - - - - - Detector identifier - - - - - - - - - - - - - - - - - - The granules identification and information - DATATION - INIT_LOC_INV - CLOUD_INV - INIT_LOC_PROD - GEO_S2 - - - - - - - The granules geometry - - - - - For each detector, list of the granules composing the datastrip - - - - - - - - - - - - - - - Position of the granule in the Group of Source Packets. This position is identified through the position of the scenes first lines in the datastrip and is expressed as number of 10m resolution images lines - - - - - - - - - - The granule footprint on ground : list of 5 (lat, lon, h) points. Altitude is provided over the geoid. This footprint is provided as a polygon counter-clockwise oriented. The polygon must be closed (the first and last vertices are the same). - - - - - Information provided for each granule, given for a reference band, at the center of the granule - - - - - - - The granule centre on ground : 1 (lat, lon, h) point. Altitude is provided over the geoid. - - - - - Incidence angles corresponding to the center of the granule - - - - - Solar angles corresponding to the center of the granule - - - - - - - - - - - A percentage of degraded ancillary data is provided for each granule - - - - - A percentage of degraded MSI data is provided for each granule - - - - - - - - - - Granule identifier - - - - - - - - - - - - - - - Detector identifier - - - - - - - - - - - - - - - - - - The granules identification and information - RESAMPLE_S2 - - - - - - - - - - - mean value containing sun zenith and azimut angle average for all bands and detectors - - - - - Sun angles grid, containing sun zenith and azimut angles - - - - - List of masks produced for each tile by Resample_S2 and Mask_S2. Each mask is in the target geometry of the tile. Each mask is covering the tile size. The mask format is GML - - - - - - - - - - Mask type - - - - - - - - - - - - This information has to be consolidated from IAS Processing Reports for all tiles in the final Level-1C metadata file. - - - - - - A percentage of degraded ancillary data is provided for each tile - - - - - A percentage of degraded MSI data is provided for each tile - - - - - The percentage of cloudy pixels in the mask (if the file is a cloud mask) - - - - - The percentage of cirrus clouds in the mask (if the file is a cloud mask) - - - - - - - - List of mean values containing viewing incidence zenith and azimut angle average for each band and for all detectors - - - - - - mean value containing viewing incidence zenith and azimut angle average for all detectors - - - - - - - Band index for which mean viewing icidence angle is requested - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Grids for Viewing Incidence Angles. Grids are defined in the same projection as the tile. For each requested band and each detector intersecting the tile, two grids of viewing incidence angles θv and φv shall be computed, where θv is the zenith viewing angle and φv is the azimuth viewing angle - - - - - - TILE_IDENTIFIER from GIPP - - - - - - - - - - - - - - - Identification of the source datastrip acquisition. General informations - - - - - MSI Sensor configuration (Information from MSI telemetry) - - - - - Ancillary data - - - - - IERS bulletin. These data are provided for the start acquisition date. - - - - DATATION - - - - - - - - - - - - Identification of the source datastrip acquisition. General informations - - - - - MSI Sensor configuration (Information from MSI telemetry) - - - - - Ancillary data - - - - - IERS bulletin. These data are provided for the start acquisition date. - - - - DATATION - - - - - - - - - Considering the width of S2 swath, some data should be computed at the center, and the two borders of the swath. -Considering the length of the S2 segments, each datum should be computed at points, which are distributed along the segment. - - - - - - - - - Identification of the source datastrip acquisition. General informations - - - - - MSI Sensor configuration (Information from MSI telemetry) - - - - - Ancillary data - - - - - IERS bulletin. These data are provided for the start acquisition date. - - - - DATATION - - - - - - - - - Considering the width of S2 swath, some data should be computed at the center, and the two borders of the swath. -Considering the length of the S2 segments, each datum should be computed at points, which are distributed along the segment. - - - - - - - - - Identification of the source datastrip acquisition. General informations - - - - - MSI Sensor configuration (Information from MSI telemetry) - - - - - Ancillary data - - - - - IERS bulletin. These data are provided for the start acquisition date. - - - - DATATION - - - - - - - - - Considering the width of S2 swath, some data should be computed at the center, and the two borders of the swath. -Considering the length of the S2 segments, each datum should be computed at points, which are distributed along the segment. - - - - - - - - - Identification of the source datastrip acquisition. General informations - - - - - MSI Sensor configuration (Information from MSI telemetry) - - - - - Ancillary data - - - - - IERS bulletin. These data are provided for the start acquisition date. - - - - DATATION - - - - - - - - - Considering the width of S2 swath, some data should be computed at the center, and the two borders of the swath. -Considering the length of the S2 segments, each datum should be computed at points, which are distributed along the segment. - - - - - - - - - Identification of the source datastrip acquisition. General informations - - - - - MSI Sensor configuration (Information from MSI telemetry) - - - - - Ancillary data - - - - - IERS bulletin. These data are provided for the start acquisition date. - - - - DATATION - - - - - - - - - Considering the width of S2 swath, some data should be computed at the center, and the two borders of the swath. -Considering the length of the S2 segments, each datum should be computed at points, which are distributed along the segment. - - - - - - - - - Identification of the source datastrip acquisition. General informations - - - - - MSI Sensor configuration (Information from MSI telemetry) - - - - - Ancillary data - - - - - IERS bulletin. These data are provided for the start acquisition date. - - - - DATATION - - - - - - - - - Considering the width of S2 swath, some data should be computed at the center, and the two borders of the swath. -Considering the length of the S2 segments, each datum should be computed at points, which are distributed along the segment. - - - - - - - - - -
  • a space-separated list of 4096 percent values
  • -
  • the first (MIN) and last (MAX) indexes for significant percent values (i.e. > 0.0)
  • -
  • the mean and standard deviation values
  • -]]>
    -
    -
    -
    - - - - percent values (number depending on the STEP) - - - - - histogram step - - - - - first index of significant percent value (i.e. > 0.0) - - - - - last index of significant percent value (i.e. > 0.0) - - - - - Histogram mean value - - - - - Histogram standard deviation - - - -
    - - - - Position of the swath : left, center, right - - - - - - - - - - - - Information provided for the beginning and the end of the product. - -Information is provided on QL geometry or on the full resolution - - - - INIT_LOC_INV - INIT_LOC_PROD - - - - - - - - - - - - - - - - - - - Pointing angles in satellite reference frame - - - - - Pointing angles in focal plane referential - - - - - - - - Position of the swath. Indeed, data are computed for each line index and for col = first_col and last_col, defining the begin and the end of the swath. - - - - - - Track orientation. Also called "CAPE". The range of the angle is into [0,360°[ - - - - - Incidence angles - - - - - - Full resolution pixel sizes along and across track in meters - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Pollux zone identifier. - - - - - - - - - - - - - - - Local registration Statistics given for one Pollux zone. Units should be set according to product unit (i.e. meters or degrees) - - - - - - - Indicators allowing to evaluate the success of the correlation - - - - - Global registration Statistics. Units should be set according to product unit (i.e. meters or degrees) - - - - - Local registration Statistics list (given for every Pollux zone). - - - - - - - Technical quality assessment: A percentage of degraded MSI and ancillary data over the product is provided (consolidated from the metadata expressed at granule-level) - - - - - - - - - Quality assessement created by DATATION - - - - - - - - Degraded ancillary data - - - - - - - Frequency - - - - - - - - - - - - - - - - - - - - - - - - - - - - - INIT_LOC_INV - CLOUD_INV - INIT_LOC_PROD - RADIO_S2 - - - - - - - File name of the masks. L1A/L1B: mask file types for each band and detector. L1C: mask file types for each band and tile and mask file types band independent. The mask format is GML - - - - - - - Mask type - - - - - - - - - - - - - - - - - Identifier of the band - - - - - Identifier of the detector - - - - - - - - - - Mask is defined into quicklook geometry in the inventory process and is transformed into level1 full resolution geometry in production process. - - - - - - Quality assessement: percentage of cloudy pixels detected in the quicklook image - - - - - - Quality assessement created by GEO_S2 - - - - - Refining results. Should exist only if refining has been applied - - - - - - Indicators allowing to evaluate the success of the correlation - - - - - - - - Multi-temporal registration performance indicator - - - - - - - Measurement date=production date - - - - - - - - Multi-spectral registration performance - - - - - - Value for 10m bands - - - - - - - Measurement date=date provided by GIPP - - - - - - - - Value for 20m bands - - - - - - - Measurement date=date provided by GIPP - - - - - - - - Value for 60m bands - - - - - - - Measurement date=date provided by GIPP - - - - - - - - - - - - - - - Measurement date=production date - - - - - - - - - - - - - - Registration results. Should exist only if registration has been applied - - - - - - Indicators allowing to evaluate the success of the correlation - - - - - - - - Spatiotriangulation results. Should exist only if refining and/or registration have/has been applied. - - - - - - - Initial archiving station - - - - ARCHIVE_PRODUCT - L1A_PRODUCT - L1B_PRODUCT - L1C_PRODUCT - - - - - - - Date updated at the end of inventory process - - - - - Initial archiving station - - - - - - - Description of the coordinate reference system used in the dataset. Set to WGS84 by Init_Loc_Inv and updated accordingly to requested product by RESAMPLE_S2. - - - - - Identifier of the organization responsible for tables used for identifying coordinate sytem parameters. - - - - - Description of the horizontal coordinate reference system. - - - - - - - Description of the coordinate reference system used in the dataset. Set to WGS84 by Init_Loc_Prod and updated accordingly to requested product by RESAMPLE_S2. - - - - - Identifier of the organization responsible for tables used for identifying coordinate sytem parameters. - - - - - - - - - - - INIT_LOC_INV - INIT_LOC_PROD - GEO_S2 - - - - - - - Geolocation over WGS84 of the contour of the product (envelope of the L0 granule elements provided as a (lat, lon) polygon). The footprint is provided as a serie of vertices (lat, lon) counter-clockwise oriented. The polygon must be closed (the first and last vertices are the same). - - - - - - Global precise footprint of the cut segment. - - - - - Unitary footprint for each detector, each band of the product - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Pixel representation. Values is "POINT" for N0 and N1 levels. - - - - - - - - - - First pixel number (convention) - - - - - - - - - - - - - - - - INIT_LOC_INV - INIT_LOC_PROD - GEO_S2 - - - - - - - Geolocation over WGS84 of the contour of the product. The footprint is provided as a serie of vertices (lat, lon) counter-clockwise oriented. The polygon must be closed (the first and last vertices are the same). - - - - - - Global precise footprint of the cut segment. - - - - - Unitary footprint for each detector, each band of the product. This is not required for the Level-0 product. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Pixel representation. Values is "POINT" for L0 and L1 levels. - - - - - - - - - - First pixel number (convention) - - - - - - - - - - - - - - - - INIT_LOC_INV - INIT_LOC_PROD - GEO_S2 - - - - - - - Unitary footprint for each detector, each band of the product. This is not required for the Level-0 product. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Pixel representation. Values is "POINT" for L0 and L1 levels. - - - - - - - - - - First pixel number (convention) - - - - - - - - - - - - - - - Number of bands for the whole product. - - - - - - - - - - - Number of bits used to encode each band radiometric counts (before compression). - - - - - - - - - - - Product Compression - - - - - - - - - - - - - - - - Dimensions for each detector (by band) in the sensor geometry - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Dimensions for each detector (by band) in the sensor geometry - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Number of bands for the whole product. - - - - - - - - - - - Number of bits used to encode each band radiometric counts (before compression). - - - - - - - - - - - Product Compression - - - - - - - - - - - - - - - - Place name - - - - - Purpose of the product - - - - - Internal Reference - - - - - Commercial reference - - - - - Commercial Item within commercial reference - - - - - Other information - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Raster image file name - - - - - - - - - - - - - - - - Spacecraft name - - - - - Spectral information which provided by the GIPP ABSOLUTE_CALIBRATION - - - - - - - - - - - - - - - - - - - - - - - List of measures - - - - - - - - - - - - - - - - - - - - Spacecraft name - - - - - Processing level of the product - - - - - - - - This keyword is used to identify which file layout is used to store the actual data. Several schemes can be used : BAND_COMPOSITE : data is stored into a single file, BAND_SEPARATED : raster data is stored into separated files, one for each spectral band, This last is the scheme used for SENTINEL2 - - - - - - - - - - - - - - - - - - Defined for each blocks of archived product - - - - - - - - Spectral info. - - - - - - - - - - - - - - - - - - - - - - - List of measures - - - - - - - - - - - - - - - - - - - - Spacecraft name - - - - - Processing level of the product - - - - - - - - This keyword is used to identify which file layout is used to store the actual data. Several schemes can be used : BAND_COMPOSITE : data is stored into a single file, BAND_SEPARATED : raster data is stored into separated files, one for each spectral band, This last is the scheme used for SENTINEL2 - - - - - - - - - - - - - - - - - - Defined for each granule, tile or aggregation of granule/tile composing the product - - - - - Boolean flag: to aggregate or not several granules in a single file per band and per detector (concatenation of granules along the detectors). For Level 1C, aggregation is always FALSE - - - - - Special values encoding (NO_DATA, SATURATION) - - - - - - - - Relation between product image channels and on board spectral bands. - - - - - Spectral info. - - - - - - - - - - - - - - - - - - - - - - - List of measures - - - - - - - - - - - - - - - - - - Production information of a level 1 product - - - - L1A_PRODUCT - L1B_PRODUCT - L1C_PRODUCT - L1A_PRODUCT - L1B_PRODUCT - L1C_PRODUCT - - - - - - - Unitary IPRequest reference - - - - - Product Code from IPRequest - - - - - Name of the producer of the data (configuration parameter). - - - - - URL of the producer. href attribute may be used. (configuration parameter). - - - - - - - - - - - - Date and time of dataset production. - - - - - Information about GPP - - - - - - - - - - - - Provided with information from the IPRequest (if information exist). - - - - - - - Equalization parameters - - - - RADIO_S2 - L1B_PRODUCT - L1C_PRODUCT - - - - - - - List of equalized bands (if any) - - - - - - - - - Offset correction: A 'true' value indicates that offset correction has been done - - - - - Dark signal non uniformity correction: A 'true' value indicates that dark signal non uniformity correction has been done - - - - - - - - - - - - - - - - - A 'true' value indicates that equalization has been processed for, at least, one band - - - - - - Radiometric corrections applied - - - - - SWIR pixels re-arrangement (only for level 1A production): A 'true' value indicates that data extraction and SWIR pixels re-arrangement have been processed. - - - - - On ground equalization of the image using an optimized polynomed correction (only for level 1B production) - - - - - Optical crosstalk correction (only for level 1B production). A 'true' value indicates that optical crosstalk correction has been processed. - - - - - Electronic crosstalk correction (only for level 1B production). A 'true' value indicates that electronic crosstalk correction has been processed. - - - - - Blind pixel remonving (only for level 1B production). A 'true' value indicates that Blind pixel remonving has been processed. - - - - - Defective pixels processing. A 'true' value indicates that defective pixels have been detected and processed, a 'detection" value indicates that defective pixels have been only detected (only for level 1A production), a 'false" value indicates that defective pixels have been neither detected nor processed. - - - - - Restoration and levelling of the product to 12 bits (only for level 1B production) - - - - - Binning for 60m bands (only for level 1B production). A 'true' value indicates that binning for 60m bands has been processed. - - - - - Management of NO_DATA pixels. A 'true' value indicates that NO_DATA pixels have been detected and processed, a 'detection" value indicates that NO_DATA pixels have been only detected (only for level 1A production), a 'false" value indicates that NO_DATA pixels have been neither detected nor processed. - - - - - Management of saturated pixels. A 'true' value indicates that saturated pixels has been processed. - - - - - - - Radiometric corrections applied - - - - - Data extraction and SWIR pixels re-arrangement (only for level 1A production). A 'true' value indicates that data extraction and SWIR pixels re-arrangement have been processed. - - - - - On ground equalization of the image using an optimized polynomial correction (only for level 1B production) - - - - - Optical crosstalk correction (only for level 1B production). A 'true' value indicates that optical crosstalk correction has been processed. - - - - - Electronic crosstalk correction (only for level 1B production). A 'true' value indicates that electronic crosstalk correction has been processed. - - - - - Blind pixel remonving (only for level 1B production). A 'true' value indicates that Blind pixel remonving has been processed. - - - - - Defective pixels processing. A 'true' value indicates that defective pixels have been detected and processed, a 'detection" value indicates that defective pixels have been only detected (only for level 1A production), a 'false" value indicates that defective pixels have been neither detected nor processed. - - - - - Restoration and levelling of the product to 12 bits (only for level 1B production) - - - - - Binning for 60m bands (only for level 1B production). A 'true' value indicates that binning for 60m bands has been processed. - - - - - Management of NO_DATA pixels. A 'true' value indicates that NO_DATA pixels have been detected and processed, a 'detection" value indicates that NO_DATA pixels have been only detected (only for level 1A production), a 'false" value indicates that NO_DATA pixels have been neither detected nor processed. - - - - - Management of saturated pixels. A 'true' value indicates that saturated pixels has been processed. - - - - - - - Computed by anaTM - - - - - - - - - - - - - - Technical quality assessment: A percentage of degraded MSI and ancillary data over the product is provided (consolidated from the metadata expressed at granule-level) - - - - - - - - - - - - - - Technical quality assessment: A percentage of degraded MSI and ancillary data over the product is provided (consolidated from the metadata expressed at granule-level) - - - - - - - - - - - - - - Technical quality assessment: A percentage of degraded MSI and ancillary data over the product is provided (consolidated from the metadata expressed at granule-level) - - - - - - - - - - - - - - - - - - Technical quality assessment: A percentage of degraded MSI and ancillary data over the product is provided (consolidated from the metadata expressed at granule-level) - - - - - - - - - - - - - - - - - - Radiometric quality indicators for each band - - - - - - - - - Noise model parameters (α,β), allowing to estimate the noise as sigma*sigma = α*α+β*S , where S is the signal expressed as digital counts - - - - - - First coefficient of the noise (constant noise) - - - - - Second coefficient of the noise (signal noise) - - - - - - - - Absolute calibration accuracy (%) - - - - - Cross-band calibration accuracy (%) - - - - - Multi-temporal calibration accuracy (%) - - - - - - - - - - - - - - - - Technical quality assessment: A percentage of degraded MSI and ancillary data over the product is provided (consolidated from the metadata expressed at granule-level) - - - - - - - - - - - - - - - - - - Radiometric quality indicators for each band - - - - - - - - - Noise model parameters (α,β), allowing to estimate the noise as sigma*sigma = α*α+β*S , where S is the signal expressed as digital counts - - - - - - First coefficient of the noise (constant noise) - - - - - Second coefficient of the noise (signal noise) - - - - - - - - Absolute calibration accuracy (%) - - - - - Cross-band calibration accuracy (%) - - - - - Multi-temporal calibration accuracy (%) - - - - - - - - - - - - - - - - Technical quality assessment: A percentage of degraded MSI and ancillary data over the product is provided (consolidated from the metadata expressed at granule-level) - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Spacecraft position (expressed in meters) in the local spacecraft reference frame (EVG Euclidium state) - - - - - MSI state (EIF Euclidium state) - - - - - Focal plane state (EIM Euclidium state) - - - - - - - - - - - - - - - - - - - - - - - - - Radiometric quality indicators for each band - - - - - - - - - Noise model parameters (α,β), allowing to estimate the noise as sigma*sigma = α*α+β*S , where S is the signal expressed as digital counts - - - - - - First coefficient of the noise (constant noise) - - - - - Second coefficient of the noise (signal noise) - - - - - - - - Absolute calibration accuracy (%) - - - - - Cross-band calibration accuracy (%) - - - - - Multi-temporal calibration accuracy (%) - - - - - - - - - - - - - - - - - Technical quality assessment: A percentage of degraded MSI and ancillary data over the product is provided (consolidated from the metadata expressed at granule-level) - - - - - - - Geometric refining results. Created by GEO_S2. The refined geometric model can be updated by RESAMPLE_S2. - - - - GEO_S2 - - - - - - - Flag to identify if the Refined Geometric Model File is computed or obtained from a existing RGMF (reused) - - - - - Refining results. Should exist only if REFINING_TYPE= REFINING or REFINING_REGISTRATION - - - - - - Refining characteristics. Should exist only if flag = REFINED - - - - - - - Reference images used for geometric model refining processing - - - - - - Reference image name - - - - - - - The reference band is a spectral channel of the reference image. The geometric refining is performed using this channel. - - - - - - - - - - - - - - - - If the refining has not been performed or has not succeeded, the output product shall be flagged “not refined”. - - - - - - - - - - - - - Registration results. Should exist only if REFINING_TYPE= REGISTRATION or REFINING_REGISTRATION - - - - - - Registration characteristics. Should exist only if flag = VNIR_SWIR_REGISTERED - - - - - - - - - - - - If the VNIR/SWIR focal plane registration has not been performed, the output product shall be flagged “VNIR/SWIR not registered”. - - - - - - - - - - - - - Description of the refined corrections. If the refining has been processed by datastrip then, there are the refined corrections for each datastrip. These data are created by Geo_S2. Note : if the refining has been processed and, if a parameter does not need to be refined, then the GIPP PARAMETERS_TO_BE_REFINED does not contain this parameter. - - - - GEO_S2 - - - - - - - - For each datastrip, there is the time zone which is covered by the datastrip - - - - - - - - - - - - - - - - - - - - - - - - - Radiometric quality indicators for each band - - - - - - - - - Noise model parameters (α,β), allowing to estimate the noise as sigma*sigma = α*α+β*S , where S is the signal expressed as digital counts - - - - - - First coefficient of the noise (constant noise) - - - - - Second coefficient of the noise (signal noise) - - - - - - - - Absolute calibration accuracy (%) - - - - - Cross-band calibration accuracy (%) - - - - - Multi-temporal calibration accuracy (%) - - - - - - - - - - - - - - - - - Technical quality assessment: A percentage of degraded MSI and ancillary data over the product is provided (consolidated from the metadata expressed at granule-level) - - - - - - - - - - - - - Radiometric quality indicators for each band - - - - - - - - - Noise model parameters (α,β), allowing to estimate the noise as sigma*sigma = α*α+β*S , where S is the signal expressed as digital counts - - - - - - First coefficient of the noise (constant noise) - - - - - Second coefficient of the noise (signal noise) - - - - - - - - Absolute calibration accuracy (%) - - - - - Cross-band calibration accuracy (%) - - - - - Multi-temporal calibration accuracy (%) - - - - - - - - - - - - - - - - - Technical quality assessment: A percentage of degraded MSI and ancillary data over the product is provided (consolidated from the metadata expressed at granule-level) - - - - - - - - - - - GEO_S2 - RESAMPLE_S2 - - - - - - - - - - - Correction to take into account the Sun-Earth distance variation (this correction is computed using the acquisition date) - - - - - Reflectance parameters for each band - - - - - - Equivalent solar irradiance - - - - - - - - - - - - - - - - - - - Reflectance quantification value (in order to convert digit count into reflectance) - - - - - For each band, the parameters (α,β) of the Level 1B noise model corrected from the absolute calibration coefficient, the sun zenith angle and the equivalent sun irradiance - - - - - - - - - First coefficient of the noise (constant noise) - - - - - Second coefficient of the noise (signal noise) - - - - - - - - - - - - - - - - - - - - - - - - Radiometric quality indicators for each band - - - - - - - - - Noise model parameters (α,β), allowing to estimate the noise as sigma*sigma = α*α+β*S , where S is the signal expressed as digital counts - - - - - - First coefficient of the noise (constant noise) - - - - - Second coefficient of the noise (signal noise) - - - - - - - - Absolute calibration accuracy (%) - - - - - Cross-band calibration accuracy (%) - - - - - Multi-temporal calibration accuracy (%) - - - - - - - - - - - - - - - - - Technical quality assessment: A percentage of degraded MSI and ancillary data over the product is provided (consolidated from the metadata expressed at granule-level) - - - - - - - - - Undersamplig step in column - - - - - Undersamplig step in row - - - - - List of values by rows - - - - - - Rows of values stored in a 1D vector. Values are in float format - - - - - - - - - - - - Grids for Zenith Viewing Incidence Angle values. "NaN" value is used when an angle is not computed. - - - - - - Grids for Azimuth Viewing Incidence Angle values. "NaN" value is used when an angle is not computed. - - - - - - Band index for which incidence grids are requested - - - - - ID of Detector intersecting the tile - - - - - - - - Grids for Sun Zenith angles (θs) values - - - - - Grids for Sun Azimuth angles (φs) values - - - - - - - - - - - - - - - - - - - - - - Unique Identifier of the L0/L1A/L1B granule - - - - - - - - - - - - Detector Identifier - - - - - - - - - - - - - - - - - Unique Identifier of a Sentinel2 datastrip linked to a specific Granule - - - - - - - - - - - - - - - - - Downlink priority flag, can be set to NOMINAL, NRT or RT - - - - - - - - - - - - - Time stamp of the first line of the Granule - - - - - - - - - - - - Archiving centre and time - - - - - - - - - - - - Optional field reserved for production chain only (i.e. DPC and/or IPF) and not propagated to User Product - - - - - - - - - - - - DATATION - - - Initial archiving station - - - - - - - - DATATION - - - Processing/archiving date - - - - - - - - - - INIT_LOC_INV - INIT_LOC_PROD - GEO_S2 - - - - - - - Geolocation of the four corners of the granule envelope (Lat, Lon, H coordinates with horizontal CRS as WGS84 and altitude given over EGM96). The polygon must be closed (five points, the first and last vertices are the same). - - - - - - - - - - Pixel representation. Values is "POINT" for L0 and L1 levels. - - - - - - - - - - First pixel number (convention) - - - - - - - - - - - - - - - The granules identification and information - DATATION - INIT_LOC_INV - CLOUD_INV - INIT_LOC_PROD - GEO_S2 - - - - - - - Position of the granule in the Datatake. This position is identified through the position of the scenes first lines in the Datatake and is expressed as number of 10m resolution images lines, - - - - - - - - - - Information provided for each granule, at the center of the granule for a reference band - - - - - - The granule centre on ground : 1 (lat, lon, h) point. Altitude is provided over the geoid. - - - - - The granule centre in the QL display: 1 (r,c) point - - - - - Incidence angles corresponding to the center of the granule - - - - - Solar angles corresponding to the center of the granule - - - - - - - - Granule footprint in the QL display: list of 8 values, 4 (x,y) couples - - - - - - - Granule dimensions in terms of NROW and NCOL - - - - - Granule dimensions for each resolution band (10m, 20m and 60m) - - - - - - Number of rows - - - - - - - - - - Number of columns - - - - - - - - - - - - - - - - - - Local cloud coverage indicator: A percentage of cloud coverage is computed for each Level-0 granule (for the area covered by a reference band). - - - - - - - - - - A percentage of degraded MSI data - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - List of source packets - - - - - - - - - - - - - Sentinel-2 Spacecraft name - - - - - - - - - - - MSI operation mode - - - - - Imaging Start Time (Sensing start time of the Datatake) - - - - - Imaging Orbit Number - - - - DATATION - - - - - - - - - - - - - Acquisition orbit direction (descending, ascending). - - - - - - - - - - Imaging Stop Time (Sensing stop time of the Datatake) - - - - - - - - - - Sensing start time of the DataStrip - - - - - Sensing stop time of the DataStrip - - - - - - - - - - - - - - - - - - - - - - - - - - - Software/version/time-stamp information related to one process. Every process should append the list with a new Step element. - - - - - - - - - - - - Software associated to the attribute version - - - - - - - - - - - - - - - - - - - - Software/version/time-stamp information related to one process. Every process should append the list with a new Step element. - - - - - - - - - - - - Software associated to the attribute version - - - - - - - - - - - - - Station receiving the S2 data - - - - DATATION - - - - - - - - - - - - - - Identifier of the downlink orbit - - - - - - - - - Flag to indicate if compress mode is by passed - - - Flag to indicate if compress mode is by passed - - - - - - - - - - - - - - Flag to indicate if equalization is active - - - Flag to indicate if equalization is active - - - - - - - - - - - - - - In-flight Non Uniform Correction table ID defined by 10 bits. This ID is uniform for all transmitted bands. It identifies the correction coefficients table used in-flight - - - - - - - - - - - - On board active Detectors (in case of compression by-passed) - - - On board active Detectors (in case of compression by-passed) - - - - - - - - - - - - - On board TDI configuration - - - - - - For B3, B4, B11 and B12 only - - - - - - - - - - - - - - - - - - - - - - - - - - - DATATION - RADIO_S2 - - - - - - - - - - - - - - - - - - - - - - - - Compression rate - - - - - - - - - - - - - - - - Integration time - - - - - - - - - - - - - - - - - - - - - - - Source packet information - - - - - Datation model - - - - - - - - - - - - - - - - - - - - - Line period for the acquisition of line of 10 m full-resolution image data - - - - - Datation model : for each couple (band, detector) - - - - - - - - - Line number corresponding to the time stamp - - - Line number corresponding to the time stamp - DATATION - INIT_LOC_PROD - - - - - - - Time-stamp - - - - - - Detector identifier - - - - - - - - - - - - - - - Flag to indicate if MSI is synchronize with GPS time - - - - - Theoretical line period for the acquisition of line of 10 m full-resolution image data - - - - - Created when datation models are estimated through linear regression. - - - - - - - - - Global least square residual - - - - - - - - - - - - - - Least square residual for the GSP Rmoy(GSP) - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Information is provided on QL geometry or on the full resolution - - - - INIT_LOC_INV - INIT_LOC_PROD - - - - - - - - - - - - - - - - - - - Pointing angles in satellite reference frame - - - - - Pointing angles in focal plane referential - - - Pointing angles in focal plane referential - - - - - - - - - - Position of the swath. Indeed, data are computed for each line index and for col = first_col, centre_col, and last_col, defining the begin, the centre and the end of the swath. - - - - - - Track orientation. Also called "CAPE". The range of the angle is into [0,360°[ - - - - - Incidence angles - - - - - - Full resolution pixel sizes along and across track in meters - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Description of ephemeris data (filtered and raw) - - - - - - - - - - - Flag to indicate if POD (Precise Orbit Determination) data has been used for product generation - - - - - If applicable, reference to the file containing POD data used - - - - - - - - - - - - - - Description of attitudes data (filtered and raw) - - - - - Thermal data acquired at 1 Hz - - - - - - - - - - - - List of source packets lost / degraded - - - - - - - - - Type of degradation - - - - - Date of first packet before the error - - - - - Date of first packet after the error - - - - - - Process Identifier (PRID) of the lost source packet. - - - - - - - - - - - Packet Category (PCAT) of the lost source packet - - - - - - - - - - - Service of the lost source packet - - - - - - - - - - - Sub-service of the lost source packet - - - - - - - - - - - Structure Identifier (SID) of the lost source packet - - - - - - - - - - - - - Summary of all degradations (lost and degraded packets) for the whole data-take - - - - - - number of lost packets for the whole datatake - - - - - number of degraded packets for the whole datatake - - - - - - Percentage of lost or degraded packets for the datatake - - - - - - - - - - - - - - - - - Reference to the ANC_DATA folder containing the SAD raw data - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Description of ephemeris data (filtered and raw) - - - - - - - - - - Description of attitudes data (filtered and raw) - - - - - Thermal data acquired at 1 Hz - - - - - List of source packets lost / degraded - - - - - - - - - Type of degradation - - - - - - - - Structure Identifier (SID) of the lost source packet - - - - - - - - - - - Sub-service of the lost source packet - - - - - - - - - - - Service of the lost source packet - - - - - - - - - - - Packet Category (PCAT) of the lost source packet - - - - - - - - - - - Process Identifier (PRID) of the lost source packet. - - - - - - - - - - - - - - - - Reference to SAD raw - - - - - - - - - Reference to SAD raw - - - - - Radiometric corrections applied to a L1B product - - - - - - - - - - - - - - - - - - - - - - - - - Sampled at 1 Hz - - - - - - Navigation Solution Method - - - - - Time quality index - - - - - Time dilution of precision. This value is set in case of Kalman filtered navigation solution (NSM=ESTIMATED_WITH_KALMAN_FILTER) with fewer than 4 SVs available1 or propagated initial state vector (NSM=PROPAGATED). - - - - - Instrument measurement time representation of the synchronisation time stamp. - - - - - GPS time representation of the synchronisation time stamp. - - - - - UTC time representation of the synchronisation time stamp. - - - - - - - - - - - - If there is a loss of GPS and subsequent switch to the redundant unit no interruption of the image processing is required. Then, it is possible to have list of GPS number. - - - - - - Each GPS is covering an interval time. - - - - - - GPS time value - - - - - GPS time value - - - - - - Refers to GPSR-A or GPSR-B - - - - - - - - - - - - - - - - - - - - GPS ephemeris time stamped data (PVT, sampled at 1Hz) in WGS84 - - - - - - - - - Dated positions (X, Y, Z) from GPS in millimeters - - - - - Position errors (dX, dY, dZ) from GPS in millimeters - - - - - Dated velocities (Vx, Vy, Vz) from GPS in millimeters per seconds - - - - - Velocity errors (dVx, dVy, dVz) from GPS in millimeters per seconds - - - - - GPs Time value - - - - - Navigation Solution Method - - - - - Position quality index - - - - - Quality index (Geometrical dilution of precision) - - - - - Quality index (Position dilution of precision) - - - - - Quality index (Time dilution of precision) - - - - - The number of Space Vehiculess (SVs) the receiver was able to use for the Navigation Solution computation, i.e. SVs for which code and carrier phase measurements and Ephemeris data were -available. - - - - - - - - - - GNSS system time error - - - - - - - - - - - AOCS filtered ephemeris (sampled at 2Hz) in J2000 - - - - - - - - - When 1 : ephemeris is valid - - - ARCHIVE_PRODUCT - L1A_PRODUCT - L1B_PRODUCT - L1C_PRODUCT - - - - - - - 0: solution is valid / 1: solution propagated / 2: cyclic position update available - - - ARCHIVE_PRODUCT - L1A_PRODUCT - L1B_PRODUCT - L1C_PRODUCT - - - - - - - - - - - - - - Dated positions (X, Y, Z) from AOCS - - - ARCHIVE_PRODUCT - L1A_PRODUCT - L1B_PRODUCT - L1C_PRODUCT - - - - - - - Dated velocities (Vx, Vy, Vz) from AOCS - - - ARCHIVE_PRODUCT - L1A_PRODUCT - L1B_PRODUCT - L1C_PRODUCT - - - - - - - GPS time value - - - ARCHIVE_PRODUCT - L1A_PRODUCT - L1B_PRODUCT - L1C_PRODUCT - - - - - - - Orbit angle wrt WGS84 - - - ARCHIVE_PRODUCT - L1A_PRODUCT - L1B_PRODUCT - L1C_PRODUCT - - - - - - - - - - - - - - - - - Onboard Hybrid attitude (STR+IMU), provided at 10Hz, gives the PRF frame in the J2000. - - - - - - Only one sample for one GPS_TIME. - - - - - - Space separated list of 4 quaternion values ordered as Q0 Q1 Q2 Q3 (qv1 qv2 qv3 qs) - - - - - When 1 : quaternion is valid - - - - - GPS time value - - - - - List of 11 boolean flags separated by whitespace: STR1 STR2 STR3 GPSR-A GPSR-B VCU-A VCU-B IMU-1 IMU-2 IMU-3 IMU-4 - - - ARCHIVE_PRODUCT - L1A_PRODUCT - L1B_PRODUCT - L1C_PRODUCT - - - - - - - - - - AOCS Mode - - - ARCHIVE_PRODUCT - L1A_PRODUCT - L1B_PRODUCT - L1C_PRODUCT - - - - - - - - - - - - - - - - AOCS Submode - - - ARCHIVE_PRODUCT - L1A_PRODUCT - L1B_PRODUCT - L1C_PRODUCT - - - - - - - - - - - - - - - - - - Difference Between GSE filter estimate and first in-use STR measurement - - - ARCHIVE_PRODUCT - L1A_PRODUCT - L1B_PRODUCT - L1C_PRODUCT - - - - - - - Difference Between GSE filter estimate and second in-use STR measurement - - - ARCHIVE_PRODUCT - L1A_PRODUCT - L1B_PRODUCT - L1C_PRODUCT - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Raw attitudes - ARCHIVE_PRODUCT - L1A_PRODUCT - L1B_PRODUCT - L1C_PRODUCT - - - - - - - Startracker in the J2000 frame. There are 3 startrackers among which one in cold redundancy. - - - - - - - - - STR data at 10 Hz coming from Attitude Data Block - - - - - - - - - Space separated list of 4 quaternion values ordered as (Q0 Q1 Q2 Q3) = (qs qv1 qv2 qv3) (inertial attitude J2000). - - - - - Angular rate (X, Y, Z) in BRF in deg/s - - - - - Time stamp of the center of integration associated with the attitude (with a precision up to 2pow-16 seconds). This field is computed from the centerOfIntegrationTimeStamp value provided in the data block - - - - - Julian date used for precession correction (if enabled); specified in number of days since the epoch date of the built-in star catalog; day 0 corresponds to JD 2451545 - - - - - - - Navigation Solution Method: NO_ATTITUDE : No attitude available, A_PRIORI_ATTITUDE : Attitude based solely on user input, COARSE_ATTITUDE : Predicted from previous measurements, UNCONFIRMED_ATTITUDE : Calculated from current measurements but not yet confirmed, VALID_ATTITUDE : Like unconfirmed Attitude but additionally validated - - - Attitude Quality - - - - - - - - - - - - - - - - Rate quality: NO_RATE : No rate information available, COARSE_RATE : A-priori rate or rate derived from star coordinates, FINE_RATE : Rate derived from attitude, FILTERED_RATE : Rate derived from attitude and filtered - - - Rate Quality - - - - - - - - - - - - - if set to 1, the rate information is valid (i.e. derived from current measurements) - - - - - - - - - - - - - - - - - - STR status and health data block (at 1 Hz). - - - - - - - - - - - STR operating mode: BOOT : Boot mode, STANDBY : Standby mode, PHOTO : Photo mode, AADF : AAD mode with submode ‘full frame’, AADW : AAD mode with submode ‘window’, NAT : NAT mode - - - STR operating mode - - - - - - - - - - - - - - - - - Thermo electric cooler mode:COOLER_OFF : TEC switched off, COOLER_CONTROLLED : TEC operating in controlled mode to reach target temperature, COOLER_MAXIMUM : TEC operating at maximum power - - - Thermo electric cooler mode - - - - - - - - - - - - Target temperature for temperature control - - - - - Detector temperature - - - - - Optics temperature - - - - - Housing temperature - - - - - - - The source selected for external synchronization: NONE : no external synchronization, PRIMARY : external synchronization via primary line, SECONDARY : external synchronization via secondary line, ANY : external synchronization via XOR of both lines - - - The source selected for external synchronization - - - - - - - - - - - - - The number of seconds since the latest received time synchronization; saturates at 63 seconds - - - - - - - - - - - - Number of trackable stars - - - - - - - - - - Number of stars tracked - - - - - - - - - - Number of identified stars - - - - - - - - - - Number of stars used for attitude determination - - - - - - - - - - - - Last result of attitude determination:<br> - - NOT_ENOUGH_STARS : Not enough stars suitable for attitude determination <br> - - SUCCESS : Attitude calculated successfully <br> - - REFINED : Like attitudeSuccess but with additional a-posteriori refinement <br> - - NA : Attitude determination failed <br> - - - - Last result of attitude determination: - NOT_ENOUGH_STARS : Not enough stars suitable for attitude determination - SUCCESS : Attitude calculated successfully - REFINED : Like attitudeSuccess but with additional a-posteriori refinement - - - - - - - - - - - - - - - Last result of star identification error:<br> - - LDLE : Star identification not yet started <br> - - SUCCESS : Star identification succeeded <br> - - RUNNING : Star identification is running <br> - - NOT_ENOUGH_STARS : Not enough tracked stars for star identification <br> - - NA : Star identification failed <br> - - - - Last result of star identification error - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - IMU values are angle increment data in radians, around the rotation axis of the IMU. 4 IMU are in hot redundancy. - - - - - - Inertial Measurement Unit - - - - - - One sample for one GPS_TIME. - - - - - - IMU filtered data are angle increments - - - - - IMU raw data are angle increments - - - - - GPS time value - - - - - - - - Organiser temperature - - - - - Sagnac Interferometer Assembly temperature - - - - - Optical Source temperature - - - - - Board temperature - - - - - Temperature reference voltage offset - - - - - Temperature reference voltage - - - - - 0:not acquired, 1:acq failed, 2:acquired - - - ARCHIVE_PRODUCT - L1A_PRODUCT - L1B_PRODUCT - L1C_PRODUCT - - - - - - - - - - - - - - Acquisition validity flag - - - ARCHIVE_PRODUCT - L1A_PRODUCT - L1B_PRODUCT - L1C_PRODUCT - - - - - - - Time corresponding to the measurements - - - ARCHIVE_PRODUCT - L1A_PRODUCT - L1B_PRODUCT - L1C_PRODUCT - - - - - - - - - - 10PPS time corresponding to the measurements (provided by CSW) - - - - - 0:not acquired, 1:acq failed, 2:acquired - - - ARCHIVE_PRODUCT - L1A_PRODUCT - L1B_PRODUCT - L1C_PRODUCT - - - - - - - - - - - - - - Acquisition validity flag - - - ARCHIVE_PRODUCT - L1A_PRODUCT - L1B_PRODUCT - L1C_PRODUCT - - - - - - - 16 Bits (0/1) sequence as defined in the IMU interface - - - - - 1 when all health status validity flag are ok(0)/ 0 otherwise - - - ARCHIVE_PRODUCT - L1A_PRODUCT - L1B_PRODUCT - L1C_PRODUCT - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - FPA temperature information (thermal control and monitoring, relevant to the detector transmission VNIR or SWIR) - - - ARCHIVE_PRODUCT - L1A_PRODUCT - L1B_PRODUCT - L1C_PRODUCT - - - - - - - - - - - These data are acquired at 0.1 Hz - - - - - - - - - - - - - - - - - - - - - - - - - These data are acquired at 0.1 Hz - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - List of temperatures for each mirror - - - ARCHIVE_PRODUCT - L1A_PRODUCT - L1B_PRODUCT - L1C_PRODUCT - - - - - - - - - - - These data are acquired at 0.1 Hz - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - List of temperatures for each sensor on telescope - - - ARCHIVE_PRODUCT - L1A_PRODUCT - L1B_PRODUCT - L1C_PRODUCT - - - - - - - - - - - These data are acquired at 0.1 Hz - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - List of temperatures for each splitter - - - ARCHIVE_PRODUCT - L1A_PRODUCT - L1B_PRODUCT - L1C_PRODUCT - - - - - - - - - - - These data are acquired at 0.1 Hz - - - - - - - - - - - - - - - - - - - - - - - - - - - - - List of temperatures for each diffuser - - - ARCHIVE_PRODUCT - L1A_PRODUCT - L1B_PRODUCT - L1C_PRODUCT - - - - - - - - CSM-Diffuser temperature. These data are acquired at 0.1 Hz - - - ARCHIVE_PRODUCT - L1A_PRODUCT - L1B_PRODUCT - L1C_PRODUCT - - - - - - - - These data are acquired at 0.1 Hz - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Imu sensor plate temperatures. These data are acquired at 0.1 Hz - - - ARCHIVE_PRODUCT - L1A_PRODUCT - L1B_PRODUCT - L1C_PRODUCT - - - - - - - - - - - - - - - - List of temperatures for each STR sensorplate - - - ARCHIVE_PRODUCT - L1A_PRODUCT - L1B_PRODUCT - L1C_PRODUCT - - - - - - - - STR sensor plate temperatures - - - - - - These data are acquired at 0.1 Hz - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - STR base plate temperatures. These data are acquired at 0.1 Hz - - - ARCHIVE_PRODUCT - L1A_PRODUCT - L1B_PRODUCT - L1C_PRODUCT - - - - - - - - - - - - - - - - - - - STR back plate temperatures. These data are acquired at 0.1 Hz - - - ARCHIVE_PRODUCT - L1A_PRODUCT - L1B_PRODUCT - L1C_PRODUCT - - - - - - - - - - - - - - - - - - - - - - - - - - - Quality assessement created by INIT_LOC_INV : Absolute location performance for the datastrip - - - - - - Measurement date - - - - - - - Quality assessement created by INIT_LOC_INV : Planimetric stabililty performance for the datastrip - - - - - - Measurement date - - - - - - - Quality assessement created by INIT_LOC_INV : Ephemeris quality retrieved from GPS Dilution of precision (DOP) - - - - - - Ancillary Quality retrieved from GPS Dilution of precision (DOP) - - - - - - Description of the quicklook - - - - INIT_LOC_INV - ARCHIVE_PRODUCT - L1A_PRODUCT - L1B_PRODUCT - L1C_PRODUCT - - - - - - - Quicklook image size - - - - - Ground footprint of the QL image. The footprint is a closed (lat, lon) polygon defined by a list of vertices counter-clockwise oriented (for WFS compatibility). The polygon must be closed (the first and last vertices are the same). - - - - - QL display geometric model - - - - - - - - - Line number of the first line - - - - - - - - - - Date of the first line - - - - - Theoretical line period - - - - - - - - Particular viewing directions - - - - - The 12 detectors are assembled and resampled in a monolithic quicklook image. This block gives, in the quicklook geometry, the connection columns number (last column) for each detectors (the first 11 detectors for compressed mode and 4 for uncompressed mode). - - - - - - - - - - - - - - - - - - - - - - Spacecraft to MSI frame transformation - - - - - - - - Pointer to the folder (QI_DATA) containing the preliminary Quicklook files - - - - - - - - - UT1 –-UTC in [-0.9;0.9] seconds - - - - - - - - - - - - GPS_time – UTC = in number of seconds - - - - - GPS_time – TAI - - - - - - - - - - U angle pole motion (in arcsec) - - - - - V angle pole motion (in arcsec) - - - - - - - - - GIPP file name - - - - - - - - - - - - - - - - - - - - Identification of the source datastrip acquisition. General information. This is not optional at logical-product level whilst at user-product level it is discharged because replicated. - - - - - - - - - - - - - - - - - - - - - - - - Processing Baseline - - - - - Processing Center name - - - - - Represents the execution date of the first launch of the first IDP-SC of the processing chain at a specific level - - - - - - - - - - - - - - - - - - - - - - - - - - - - Optional field reserved for production chain only (i.e. DPC and/or IPF) and not propagated to User Product - - - - - - - Detector identification - - - - - - - - - - - - - - - - - - - - - - List of granules composing the whole datastrip. - - - - - - For each detector, list of the granules composing the datastrip - - - - - - - - - - - - - - - Position of the granule in the Group of Source Packets. This position is identified through the position of the scenes first lines in the datastrip and is expressed as number of 10m resolution images lines - - - - - - - - - - - Granule identifier - - - - - - - - - - - - - - - Detector identifier - - - - - - - - - - - - - - - - - - MSI Sensor configuration (Information from MSI telemetry) - - - - - - - - - - - - - - - - - - - - - - - - - - - Product Compression - - - - - - - - - - - - - - - - - - - - List of granules composing the whole datastrip - - - - - - For each detector, list of the granules composing the datastrip - - - - - - - - - - - - - - - Position of the granule in the Group of Source Packets. This position is identified through the position of the scenes first lines in the datastrip and is expressed as number of 10m resolution images lines - - - - - - - - - - - Granule identifier - - - - - - - - - - - Detector identifier - - - - - - - - - - - - - - MSI Sensor configuration (Information from MSI telemetry) - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - IERS bulletin. These data are provided for the start acquisition date - - - - DATATION - - - - - - - Reference to GIPP files used by L0 processing chain - - - - - DEM type used by the production process (GLOBE or SRTM) - - - - - - - - - - - - Reference to IERS Bullettin - - - - - Used Reference Band - - - - - - - - - - Unique Tile Identifier - - - - - - - - - - - - Unique Identifier of a Sentinel2 datastrip - - - - - - - - - - - - - - - - - Downlink priority flag, can be set to NOMINAL, NRT or RT - - - - - - - - - - - - TILE Start Time = DataStrip Start Time - - - - - - - - - - - - Centre/Time - - - - - - - - - - - - Optional field reserved for production chain only (i.e. DPC and/or IPF) and not propagated to User Product - - - - - - - Description of a tile in a given representation - - - - - - - Tile dimensions for each resolution band - - - - - - Number of rows - - - - - - - - - - Number of columns - - - - - - - - - - - - - - XDIM and YDIM for each resolution band - - - - - - Upper-left coordinate (X value) of the tile - - - - - Upper-left coordinate (Y value) of the tile - - - - - Horizontal pixel dimension - - - - - Vertical pixel dimension - - - - - - - - - - - - - Sun angles grid, containing sun zenith and azimut angles - - - - - Mean value containing sun zenith and azimut angle average for all bands and detectors - - - - - Grids for Viewing Incidence Angles. Grids are defined in the same projection as the tile. For each requested band and each detector intersecting the tile, two grids of viewing incidence angles θv and φv shall be computed, where θv is the zenith viewing angle and φv is the azimuth viewing angle - - - - - List of mean values containing viewing incidence zenith and azimut angle average for each band and for all detectors - - - - - - mean value containing viewing incidence zenith and azimut angle average for all detectors - - - - - - - Band index for which mean viewing icidence angle is requested - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Pointer to the Mask files contained in the QI_DATA folder - - - - - Reference to PVI contained in the QI_DATA folder - - - - - - - - - - - (From L0) IERS bulletin. These data are provided for the start acquisition date. - - - - DATATION - - - - - - - Reference to GIPP files used by L1C processing chain - - - - - Reference to ECMWF data - - - - - Reference to used DEM - - - - - Reference to IERS Bulletin - - - - - Reference to GRI data - - - - - - - - Radiometric corrections applied to L1B and L1C - - - - - SWIR pixels re-arrangement. A 'true' value indicates that data extraction and SWIR pixels re-arrangement have been processed. - - - - - Management of saturated pixels. A 'true' value indicates that saturated pixels has been processed. - - - - - Spectral information which provided by the GIPP ABSOLUTE_CALIBRATION - - - - - - - - - - - - - - - - - - - - - - - List of measures - - - - - - - - - - - - - - - - Relation between product image channels and on board spectral bands - - - - - Reflectance quantification value (in order to convert digit count into reflectance) - - - - - - - - Correction to take into account the Sun-Earth distance variation (this correction is computed using the acquisition date) - - - - - Reflectance parameters for each band - - - - - - Equivalent solar irradiance - - - - - - - - - - - - - - - - - - - - - Geometric refining results. Created by GEO_S2. The refined geometric model can be updated by RESAMPLE_S2. (Applicable to L1B and L1C) - - - - GEO_S2 - - - - - - - Flag to identify if the Refined Geometric Model file is computed or obtained from a existing RGM file (reused) - - - - - Refining results. Should exist only if REFINING_TYPE= REFINING or REFINING_REGISTRATION - - - - - - Refining characteristics. Should exist only if flag = REFINED - - - - - - reference band used for geometric refining/registration - - - - - Reference images used for geometric model refining processing - - - - - - Reference image name - - - - - - - The reference band is a spectral channel of the reference image. The geometric refining is performed using this channel. - - - - - - - - - - - - - - - - If the refining has not been performed or has not succeeded, the output product shall be flagged “not refined”. - - - - - - - - - - - - - Registration results. Should exist only if REFINING_TYPE= REGISTRATION or REFINING_REGISTRATION - - - - - - Registration characteristics. Should exist only if flag = VNIR_SWIR_REGISTERED - - - - - - - - - - - - If the VNIR/SWIR focal plane registration has not been performed, the output product shall be flagged “VNIR/SWIR not registered”. - - - - - - - - - - - - - Description of the refined corrections. If the refining has been processed by datastrip then, there are the refined corrections for each datastrip. These data are created by Geo_S2. - - - - GEO_S2 - - - - - - - - For each datastrip, there is the time zone which is covered by the datastrip - - - - - - - - - - - - - - - - List of the tiles composing the whole datastrip. - - - - - - - - - - - Tile Identifier - - - - - - - - - - - - - - - - - - MSI Sensor configuration (Information from MSI telemetry) - - - - - - - - - - - - - - - - - - - - - - - - - - Product Compression - - - - - - - - - - - - - - - - - - - - - Present only Level-1B and Level-1C - - - - - From GIPP data - - - - - - - Quality assessement created by GEO_S2 - - - - - Refining results. Should exist only if refining has been applied - - - - - - Indicators allowing to evaluate the success of the correlation - - - - - - - - Multi-temporal registration performance indicator - - - - - - - Measurement date=production date - - - - - - - - Multi-spectral registration performance - - - - - - Value for 10m bands - - - - - - - Measurement date=date provided by GIPP - - - - - - - - Value for 20m bands - - - - - - - Measurement date=date provided by GIPP - - - - - - - - Value for 60m bands - - - - - - - Measurement date=date provided by GIPP - - - - - - - - - - - - - - - Measurement date=production date - - - - - - - - - - - - - - Registration results. Should exist only if registration has been applied - - - - - - Indicators allowing to evaluate the success of the correlation - - - - - - - - Spatiotriangulation results. Should exist only if refining and/or registration have/has been applied. - - - - - - - - - Radiometric quality indicators for each band - - - - - - - - - Noise model parameters (α,β), allowing to estimate the noise as sigma*sigma = α*α+β*S , where S is the signal expressed as digital counts - - - - - - First coefficient of the noise (constant noise) - - - - - Second coefficient of the noise (signal noise) - - - - - - - - Absolute calibration accuracy (%) - - - - - Cross-band calibration accuracy (%) - - - - - Multi-temporal calibration accuracy (%) - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Percentage of degraded ancillary data - - - - - - - - General PDGS Product Information - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - General PDGS Product Information - - - - - Actual User Product start time defined as the Sensing Time of the first line of the first scene in the product - - - - - Actual User Product stop time defined as the Sensing Time of the first line of the last scene in the product - - - - - User-Product URI. This is the User-Product URI resolved and provided by ngEO - - - - - Processing level of the product - - - - - - - - - - Product type Identifier - - - - - - - - - - - - - - - DAG Generation Time - - - - - Link to the preview image URL - - - - - - - - - - Preview georeferencing information. Coordinate system / datum used for specifying the georeferencing information supplied with the Browse Image. -Examples: EPSG:4326, RAW - - - - - General information about the MSI datatake - - - - - - Logical map of the elements compounding the User Product - - - - - - - - - - - - - - - - - - General PDGS Product Information - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - General PDGS Product Information - - - - - User-Product URI. This is the User-Product URI resolved and provided by ngEO - - - - - Processing level of the product - - - - - - - - - - Product type Identifier - - - - - - - - - - - - - - - Link to the preview image URL - - - - - - - - - - Preview georeferencing information. Coordinate system / datum used for specifying the georeferencing information supplied with the Browse Image. -Examples: EPSG:4326, RAW - - - - - Datatake info - - - - - - Logical map of the elements compounding the User-Product - - - - - - List of the datastrips belonging to the product - - - - - - - - - - - - - - - - - List of granules/tiles belonging to the each datastrip (list of granule identifiers of all granules composing the product for a given DataStrip) - - - - - - In case of L1C, it refers to Tile - - - - - - Pointers to the granule/tile data files (links to the physical image data) - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - General PDGS Product Information - - - - - Common general Product Information - - - - - - - - Special values encoding (NO_DATA, SATURATION) - - - - - Relation between product image channels and on board spectral bands. - - - - - - Spectral information which provided by the GIPP ABSOLUTE_CALIBRATION - - - - - - - - - - - - - - - - - - - - - - - List of measures - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - General PDGS Product Information - - - - - Common general Product Information - - - - - - - - Special values encoding (NO_DATA, SATURATION) - - - - - Relation between product image channels and on board spectral bands. - - - - - - Spectral information which provided by the GIPP ABSOLUTE_CALIBRATION - - - - - - - - - - - - - - - - - - - - - - - List of measures - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - General PDGS Product Information - - - - - Common general Product Information - - - - - - - - Special values encoding (NO_DATA, SATURATION) - - - - - Relation between product image channels and on board spectral bands. - - - - - - Spectral information which provided by the GIPP ABSOLUTE_CALIBRATION - - - - - - - - - - - - - - - - - - - - - - - List of measures - - - - - - - - - - - - - - - - - - - - - General PDGS Product Information - - - - - Common general Product Information - - - - - - - - Special values encoding (NO_DATA, SATURATION) - - - - - Relation between product image channels and on board spectral bands. - - - - - Reflectance quantification value (in order to convert digit count into reflectance) - - - - - - - - Correction to take into account the Sun-Earth distance variation (this correction is computed using the acquisition date) - - - - - Reflectance parameters for each band - - - - - - Equivalent solar irradiance - - - - - - - - - - - - - - - - - - - Spectral information which provided by the GIPP ABSOLUTE_CALIBRATION - - - - - - - - - - - - - - - - - - - - - - - List of measures - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - General PDGS Product Information - - - - - Common general Product Information - - - - - - - - Special values encoding (NO_DATA, SATURATION) - - - - - Relation between product image channels and on board spectral bands. - - - - - Reflectance quantification value (in order to convert digit count into reflectance) - - - - - Spectral information which provided by the GIPP ABSOLUTE_CALIBRATION - - - - - - - - - - - - - - - - - - - - - - - List of measures - - - - - - - - - - - - - - - - - - - - - Product Download Options according to ngEO download options - - - - - Area Of Interest selected by the User - - - - - Option to extend the user selected area to the full MSI swath (L0/L1A/L1B) or the full Datatake (L0/L1A/L1B/L1C) - - - - - Option to include the Browse Image (if available) inside the User Product - - - - - Option to include in the User Product the image data corresponding to the Bands selected by the User - - - - - - Spectral Band name - - - - - - - - Option to select the metadata level (Brief/Standard/Expertise) to include in the User Product - - - - - - - - - - - - Option to include the auxiliary data in the User Product - - - - - - - - Level-0: GIPP, IERS. Level-1A: GIPP, IERS. Level-1B: GIPP, IERS. Level-1C: GIPP. ECMWF (raw): no embedding option. DEM: no embedding option GRI: no embedding option - - - - - - - - - - - - - - - Option to select the User Product format (SAFE/DIMAP) - - - - - Option to select Along-Track Aggregated Granules (L1A/L1B) and Consolidated Tiles (L1C) - - - - - - - - - Failed Report Name - - - - - - - - - - Failed Report Name - - - - - - - - - - - - - - - - Geolocation over WGS84 of the contour of the product. The footprint is provided as a serie of vertices (lat, lon) counter-clockwise oriented. The polygon must be closed (the first and last vertices are the same). This is computed by the DAG based on the singular granules footprint - - - - - Description of the horizontal coordinates reference system - - - - - - - - - Geolocation over WGS84 of the contour of the product. The footprint is provided as a serie of vertices (lat, lon) counter-clockwise oriented. The polygon must be closed (the first and last vertices are the same). This is computed by the DAG based on the singular granules footprint - - - - - Description of the horizontal coordinates reference system - - - - - - - - - - - - - - Reference to the used GIPPs - - - - - Reference to used DEM - - - - - Reference to IERS Bulletin - - - - - Reference to GRI data - - - - - Reference to ECMWF data - - - - - - - - - Percentage of cloud coverage of the product. - - - - - - - - - - - Computed as sythesis from granule data. - - - - - - - - - - - - - - - - - - - - - - - - - Only failed checks (at granule and datastip level) will be referenced here. In addition general flags summarising the performed inspections (at granule and datastrip level) are added. - - - - - - Synthesis of the OLQC checks. - - - - - Reference to OLQC reports containing FAILED inspections - - - - - - Failed Datastrip Report - - - - - Failed Granule Report - - - - - - - - - - - - - - - Percentage of cloud coverage of the product - - - - - - - - - - - Computed as sythesis from granule data - - - - - - - - - - - - - - - - - - - - - - - - - Only failed checks (OLQC reports at granule and datastip level) will be referenced here. In addition general flags summarising the performed inspections (for each checklist defined at granule and datastrip level) are added - - - - - - Synthesis of the OLQC checks - - - - - Reference to OLQC reports containing FAILED inspections - - - - - - Failed Datastrip Report - - - - - Failed Granule Report - - - - - - - - - - - - - - - Percentage of cloud coverage of the product. - - - - - - - - - - - Computed as sythesis from granule data - - - - - - - - - - - - - - - - - - - - - - - - - Only failed checks (OLQC reports at granule and datastip level) will be referenced here. In addition general flags summarising the performed inspections (for each checklist defined at granule and datastrip level) are added - - - - - - Synthesis of the OLQC checks - - - - - Reference to OLQC reports containing FAILED inspections - - - - - - Failed Datastrip Report - - - - - Failed Granule Report - - - - - - - - - - - - - - - - Pointer to the Mask files contained in the QI_DATA folder - - - - - - - - Radiometric corrections applied to L1A - - - - - SWIR pixels re-arrangement (only for level 1A production but SWIR rearrangement information shall be preserved in L1B and L1C): A 'true' value indicates that data extraction and SWIR pixels re-arrangement have been processed. - - - - - Defective pixels processing. A 'true' value indicates that defective pixels have been detected and processed, a 'detection" value indicates that defective pixels have been only detected (only for level 1A production), a 'false" value indicates that defective pixels have been neither detected nor processed. - - - - - Management of NO_DATA pixels. A 'true' value indicates that NO_DATA pixels have been detected and processed, a 'detection" value indicates that NO_DATA pixels have been only detected (only for level 1A production), a 'false" value indicates that NO_DATA pixels have been neither detected nor processed. - - - - - Management of saturated pixels. A 'true' value indicates that saturated pixels has been processed. - - - - - Spectral information which provided by the GIPP ABSOLUTE_CALIBRATION - - - - - - - - - - - - - - - - - - - - - - - List of measures - - - - - - - - - - - - - - - - Relation between product image channels and on board spectral bands - - - - - - - - - List of granules composing the whole datastrip. - - - - - - For each detector, list of the granules composing the datastrip - - - - - - - - - - - - - - - Position of the granule in the Group of Source Packets. This position is identified through the position of the scenes first lines in the datastrip and is expressed as number of 10m resolution images lines - - - - - - - - - - - Granule identifier - - - - - - - - - - - - - - - Detector identifier - - - - - - - - - - - - - - - - - - MSI Sensor configuration (Information from MSI telemetry) - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Product Compression - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Percentage of degraded ancillary data - - - - - - - - - - (From L0) IERS bulletin. These data are provided for the start acquisition date - - - - DATATION - - - - - - - Reference to GIPP files used by L1A processing chain - - - - - DEM type used by the production process (GLOBE or SRTM) - - - - - - - - - - - - Reference to IERS Bullettin - - - - - Used Reference Band - - - - - - - - Radiometric corrections applied to L1B and L1C - - - - - SWIR pixels re-arrangement. A 'true' value indicates that data extraction and SWIR pixels re-arrangement have been processed. - - - - - On ground equalization of the image using an optimized polynomed correction (only for level 1B production) - - - - - Optical crosstalk correction (only for level 1B production). A 'true' value indicates that optical crosstalk correction has been processed. - - - - - Electronic crosstalk correction (only for level 1B production). A 'true' value indicates that electronic crosstalk correction has been processed. - - - - - Blind pixel remonving (only for level 1B production). A 'true' value indicates that Blind pixel remonving has been processed. - - - - - Defective pixels processing. A 'true' value indicates that defective pixels have been detected and processed, a 'detection" value indicates that defective pixels have been only detected (only for level 1A production), a 'false" value indicates that defective pixels have been neither detected nor processed. - - - - - Restoration and levelling of the product to 12 bits (only for level 1B production) - - - - - Binning for 60m bands (only for level 1B production). A 'true' value indicates that binning for 60m bands has been processed. - - - - - Management of NO_DATA pixels. A 'true' value indicates that NO_DATA pixels have been detected and processed, a 'detection" value indicates that NO_DATA pixels have been only detected (only for level 1A production), a 'false" value indicates that NO_DATA pixels have been neither detected nor processed. - - - - - Management of saturated pixels. A 'true' value indicates that saturated pixels has been processed. - - - - - Spectral information which provided by the GIPP ABSOLUTE_CALIBRATION - - - - - - - - - - - - - - - - - - - - - - - List of measures - - - - - - - - - - - - - - - - Relation between product image channels and on board spectral bands - - - - - - - Equalization parameters - - - - RADIO_S2 - L1B_PRODUCT - L1C_PRODUCT - - - - - - - List of equalized bands (if any) - - - - - - - - - Offset correction: A 'true' value indicates that offset correction has been done - - - - - Dark signal non uniformity correction: A 'true' value indicates that dark signal non uniformity correction has been done - - - - - - - - - - - - - - - - - A 'true' value indicates that equalization has been processed for, at least, one band - - - - - - - - List of restored bands (if any) - - - List if restored bands (if any) - L1B_PRODUCT - L1C_PRODUCT - - - - - - - - - - - - - - - Minimum value - - - - - - - - - - Maximum value - - - - - - - - - - - - - - - - - - - - - - - - - A 'true' value indicates that restoration and levelling of the product to 12 bits has been processed. - - - - - - - - (From L0) IERS bulletin. These data are provided for the start acquisition date. - - - - DATATION - - - - - - - Reference to GIPP files used by L1B processing chain - - - - - DEM type used by the production process (GLOBE or SRTM) - - - - - - - - - - - - Reference to IERS Bullettin - - - - - Reference to GRI data - - - - - Used Reference Band - - - - - - - - - - - - - - - - - - - Geolocation over WGS84 of the contour of the product. The footprint is provided as a serie of vertices (lat, lon) counter-clockwise oriented. The polygon must be closed (the first and last vertices are the same). - - - - - Description of the horizontal coordinates reference system - - - - - - - - - - Granules footprint. The footprint is provided as a serie of vertices (lat, lon) counter-clockwise oriented. The polygon must be closed (the first and last vertices are the same). - - - - - Description of the horizontal coordinates reference system - - - - - - - - - - IERS bulletin. These data are provided for the start acquisition date. - - - - DATATION - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Reference to the AUX DATA items used for the processing - - - - - - Reference to GIPP files used by the processing - - - - - Reference to the used DEM - - - - - Reference to IERS Bullettin - - - - - Reference to GRI data - - - - - Reference to ECMWF data - - - - - - - - - - - - Reference to GIPP files used by the processing - - - - - Reference to used DEM - - - - - Reference to IERS Bullettin IERS bulletin provided for the start acquisition date - - - - - - - Synthesis of the OLQC checks - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Synthesis of the OLQC checks - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Synthesis of the OLQC checks - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Reference to GIPP files used by the processing - - - - - Reference to used DEM - - - - - Reference to IERS Bullettin - - - - - Reference to GRI data - - - - - - - DataStrip Identifier - - - - - - - - - Bounding Box (rectangle) Query Option - - - - - - Coordinates position (2D, Lat/Lon) of the minimal point (bottom right) within the envelope - - - - - Coordinates position (2D, Lat/Lon) of the maximal point (upper left) within the envelope - - - - - - - - Polygon Query Option - - - - - - List of coordinates position (2D, LAT/LON) of the exterior points describing the surface boundary of the polygon. The polygon must be closed (the first and last vertices are the same). - - - - - - - - Radius Query Option - - - - - - Center coordinates position (2D, Lat, Lon) - - - - - Radius expressed in meters - - - - - - - - -
    diff --git a/sen2cor/cfg/DICO/1.0/PDGS/dimap/dimap2A.xsd b/sen2cor/cfg/DICO/1.0/PDGS/dimap/dimap2A.xsd deleted file mode 100755 index 7c79c52..0000000 --- a/sen2cor/cfg/DICO/1.0/PDGS/dimap/dimap2A.xsd +++ /dev/null @@ -1,829 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - GIPP file name - - - - - - - - - - - - - - - General PDGS Product Information on Level 2A - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - General PDGS Product Information on Level 2A - - - - - Actual User Product start time defined as the Sensing Time of the first line of the first scene in the product - - - - - Actual User Product stop time defined as the Sensing Time of the first line of the last scene in the product - - - - - User-Product URI. This is the User-Product URI resolved and provided by ngEO - - - - - Processing level of the product - - - - - - - - - - Product type Identifier - - - - - - - - - - - - - - - DAG Generation Time - - - - - Link to the preview image URL - - - - - - - - - - Preview georeferencing information. Coordinate system / datum used for specifying the georeferencing information supplied with the Browse Image. -Examples: EPSG:4326, RAW - - - - - General information about the MSI datatake - - - - - - Logical map of the elements compounding the Level 2A User Product - - - - - - - - - - - - - - - - - - General PDGS Product Information - - - - - Common general Product Information - - - - - - - - Special values encoding (NO_DATA, SATURATION) for BOA reflectance image data - - - - - Relation between product image channels and on board spectral bands - - - - - A list of L1C, L2A quantification values for digital counts on pixel level - - - - - - - - Correction to take into account the Sun-Earth distance variation (this correction is computed using the acquisition date) - - - - - Reflectance parameters for each band - - - - - - Equivalent solar irradiance - - - - - - - - - - - - - - - - - - - Spectral information which provided by the GIPP ABSOLUTE_CALIBRATION - - - - - - - - - - - - - - - - - - - - - - - List of measures - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - A list of L2A Scene Classification IDs - - - - - L2A Scene Classification IDs encoding (SC_NODATA, SC_NODATA, SC_SATURATED_DEFECTIVE, SC_DARK_FEATURE_SHADOW, SC_CLOUD_SHADOW, SC_VEGETATION, SC_BARE_SOIL_DESERT, SC_WATER, SC_CLOUD_LOW_PROBA, SC_CLOUD_MEDIUM_PROBA, SC_CLOUD_HIGH_PROBA, SC_THIN_CIRRUS, SC_SNOW_ICE) - - - - - - - Pixel values assigned to L2A Scene Classification Image Data - - - - - - - - - - - - - - - - - - - - - - - - - - Auxiliary Data information L2A on product level - - - - - References to the AUX_DATA items - - - - - - Reference to used GIPPs for L2A processing - - - - - Reference to used DEM for L2A processing - - - - - Reference to used LibRadtran LUTs for L2A processing - - - - - Reference to used Snow Climatology for L2A processing - - - - - - - - - - Quality Indicators information on product level (L2A + L1C Technical assessment info) - - - - - Image content Quality Indicators (percentages of pixel type), inherited from L1 - - - - - - - List of L2A tiles + L1C Geometric and Radiometric info - - - - - List of the tiles composing the whole datastrip. - - - - - - - - - - - Tile Identifier - - - - - - - - - - - - - - - - - - MSI Sensor configuration (Information from MSI telemetry) - - - - - - - - - - - - - - - - - - - - - - - - - - Product Compression - - - - - - - - - - - - - - - - - - Quality Indicators information on datastrip level (L2A + L1C Geometric and Radiometric QI info) - - - - - - - - - - - - - - - Percentage of degraded ancillary data - - - - - - - - Auxiliary Data information on datastrip level (L2A and L1C reference) - - - - - IERS bulletin. These data are provided for the start acquisition date. - - - - DATATION - - - - - - - Used GIPP files for L1C processing - - - - - Reference to ECMWF data - - - - - Reference to used DEM - - - - - Reference to IERS Bulletin - - - - - Reference to GRI data - - - - - - - - General information on L2A Tile - - - - - Unique Tile Identifier - - - - - - - - - - - - Unique Identifier of a Sentinel2 datastrip - - - - - - - - - - - - - - - - - Downlink priority flag, can be set to NOMINAL, NRT or RT - - - - - - - - - - - - Inherited from Level-0 metadata. This is the sensing start time of the Datatake (with precision in seconds) - - - - - - - - - - - - - - - - - - - - - - - Quality Indicators information on L2A Tile and Pixel level - - - - - - - Pointer to the L1C Mask files contained in the QI_DATA folder - - - - - Pointer to the L2A Pixel Level QI files contained in the QI_DATA folder - - - - - Reference to PVI contained in the QI_DATA folder - - - - - - - - Image content Quality Indicators (percentages of pixel type) - - - - - Percentage of No Data (Missing data on projected tiles) pixels - - - - - - - - - - - Percentage of saturated or defective pixels - - - - - - - - - - - Percentage of pixels classified as dark features or shadows - - - - - - - - - - - Percentage of pixels classified as cloud shadow - - - - - - - - - - - Percentage of pixels classified as vegetation - - - - - - - - - - - Percentage of pixels classified as bare soils - - - - - - - - - - - Percentage of pixels classified as water - - - - - - - - - - - Percentage of pixels classified as low probability clouds - - - - - - - - - - - Percentage of pixels classified as medium probability clouds - - - - - - - - - - - Percentage of pixels classified as high probability clouds - - - - - - - - - - - Percentage of pixels classified as thin cirrus clouds - - - - - - - - - - - Percentage of pixels classified as snow or ice - - - - - - - - - - - Declared accuracy of the radiative transfer model. LibRadtran code achieves a relative accuracy of 5% - 10%. (B.Mayer) - - - - - - - - - - - APDS (Atmospherically Precorrected Differential Absorption) method achieves a typical relative accuracy of 5% - 10% except over very dark surfaces. (Sch?ler 1998, Chylel et al. 2003, Richter and Sch?ler 2008) - - - - - - - - - - - Declared accuracy of the Aerosol Optical Thickness - - - - - - - - - - - - - Filenames of L2A QI Masks (Cloud confidence map, Snow/Ice confidence map) - - - - - Filename of the Cloud Confidence raster mask at 60m resolution stored in the QI_DATA folder - - - - - Filename of the Snow/Ice Confidence raster mask at 60m resolution stored in the QI_DATA folder - - - - - - - A list of L1C, L2A quantification values for digital counts on pixel level - - - - - L1C TOA Reflectance quantification value (in order to convert digit count into Top-Of-Atmosphere reflectance, inherited from L1C) - - - - - L2A BOA Reflectance quantification value (in order to convert digit count into Bottom-Of-Atmosphere reflectance) - - - - - Aeorosol Optical Thickness Map quantification value (in order to convert digit count into Aeorosol Opthical Thickness physical units) - - - - - Water Vapor Map quantification value (in order to convert digit count into water vapor physical units) - - - - - diff --git a/sen2cor/cfg/DICO/1.0/PDGS/fileNaming/fileNaming.xsd b/sen2cor/cfg/DICO/1.0/PDGS/fileNaming/fileNaming.xsd deleted file mode 100755 index f7969ca..0000000 --- a/sen2cor/cfg/DICO/1.0/PDGS/fileNaming/fileNaming.xsd +++ /dev/null @@ -1,200 +0,0 @@ - - - - - - - - - Filename template and derived types - - - $Revision: 1.1 $ $Date: 2011/06/16 11:10:48 $ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Mission Id - - - - - - - - - UTC time yyyy-mm-ddThh:mm:ss - - - - diff --git a/sen2cor/cfg/DICO/1.0/PDGS/header/EOF_Header.xsd b/sen2cor/cfg/DICO/1.0/PDGS/header/EOF_Header.xsd deleted file mode 100755 index 902018a..0000000 --- a/sen2cor/cfg/DICO/1.0/PDGS/header/EOF_Header.xsd +++ /dev/null @@ -1,107 +0,0 @@ - - - - - - - - - - Earth Explorer Header data types - - - $Revision: 1.1 $ $Date: 2011/10/07 08:02:08 $ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/sen2cor/cfg/DICO/1.0/PDGS/logical_definitions/logical_definitions.xsd b/sen2cor/cfg/DICO/1.0/PDGS/logical_definitions/logical_definitions.xsd deleted file mode 100755 index 587d94d..0000000 --- a/sen2cor/cfg/DICO/1.0/PDGS/logical_definitions/logical_definitions.xsd +++ /dev/null @@ -1,9323 +0,0 @@ - - - - - - - - - - - - - - - - Quality assessement created by INIT_LOC_INV : Absolute location performance for the datastrip - - - - - - Measurement date - - - - - - - - - Flag to indicate if compress mode is by passed - - - Flag to indicate if compress mode is by passed - ARCHIVE_PRODUCT - L1A_PRODUCT - L1B_PRODUCT - L1C_PRODUCT - - - - - - - - - - - - - - Flag to indicate if equalization is active - - - Flag to indicate if equalization is active - ARCHIVE_PRODUCT - L1A_PRODUCT - L1B_PRODUCT - L1C_PRODUCT - - - - - - - - - - - - - - In-flight Non Uniform Correction table ID defined by 10 bits. This ID is uniform for all transmitted bands. It identifies the correction coefficients table used in-flight - - - - - - - - - - - - On board active Detectors (in case of compression by-passed) - - - On board active Detectors (in case of compression by-passed) - ARCHIVE_PRODUCT - L1A_PRODUCT - L1B_PRODUCT - L1C_PRODUCT - - - - - - - - - - - - - - - - - On board TDI configuration - - - - - - For B3, B4, B11 and B12 only - - - - - - - - - - - - - - - - - - - - - - - - - - Description of ephemeris data (filtered and raw) - - - - - Description of attitudes data (filtered and raw) - - - - - Thermal data acquired at 1 Hz - - - - - List of source packets lost / degraded - - - - - - - - - Type of degradation - - - - - - - - Structure Identifier (SID) of the lost source packet - - - - - - - - - - - Sub-service of the lost source packet - - - - - - - - - - - Service of the lost source packet - - - - - - - - - - - Packet Category (PCAT) of the lost source packet - - - - - - - - - - - Process Identifier (PRID) of the lost source packet. - - - - - - - - - - - - - - - - Reference to SAD raw - - - - - - - Ancillary Quality retrieved from GPS Dilution of precision (DOP) - - - - - - - - - - - DATATION - - - The starting point of the circulation data - - - - - - - - - - - - - - - - - - DATATION - - - Processing/archiving date - - - - - - - - - Onboard Hybrid attitude (STR+IMU), provided at 10Hz, gives the PRF frame in the J2000. - - - - - - Only one sample for one GPS_TIME. - - - - - - Space separated list of 4 quaternion values ordered as Q0 Q1 Q2 Q3 - - - - - - When 1 : quaternion is valid - - - - - Dated angular velocities - - - - - Velocity angular errors - - - - - GPS time value - - - - - List of 11 boolean flags separated by whitespace: STR1 STR2 STR3 GPSR-A GPSR-B VCU-A VCU-B IMU-1 IMU-2 IMU-3 IMU-4 - - - ARCHIVE_PRODUCT - L1A_PRODUCT - L1B_PRODUCT - L1C_PRODUCT - - - - - - - - - - AOCS Mode - - - ARCHIVE_PRODUCT - L1A_PRODUCT - L1B_PRODUCT - L1C_PRODUCT - - - - - - - - - - - - - - - - AOCS Submode - - - ARCHIVE_PRODUCT - L1A_PRODUCT - L1B_PRODUCT - L1C_PRODUCT - - - - - - - - - - - - - - - - - - Difference Between GSE filter estimate and first in-use STR measurement - - - ARCHIVE_PRODUCT - L1A_PRODUCT - L1B_PRODUCT - L1C_PRODUCT - - - - - - - Difference Between GSE filter estimate and second in-use STR measurement - - - ARCHIVE_PRODUCT - L1A_PRODUCT - L1B_PRODUCT - L1C_PRODUCT - - - - - - - - - - - - - - - - Description of the coordinate reference system used in the dataset. - - - - - Identifier of the organization responsible for tables used for identifying coordinate sytem parameters. - - - - - Description of the horizontal coordinate reference system. - - - - - - - Description of the coordinate reference system used in the dataset. Set to WGS84 by Init_Loc_Prod and updated accordingly to requested product by RESAMPLE_S2. - - - - - Identifier of the organization responsible for tables used for identifying coordinate sytem parameters. - - - - - - - - - - Sentinel-2 Spacecraft name - - - - DATATION - - - - - - - - - - - - MSI operation mode - - - - - Imaging Start Time (Sensing start time of the Datatake) - - - - - Imaging Orbit Number - - - - DATATION - - - - - - - - - - - - - Acquisition orbit direction (descending, ascending). - - - - - - - - - - - - - - - - - - - Present only Level-1B and Level-1C - - - - - - - - DataStrip generation information - - - - L1A_PRODUCT - L1B_PRODUCT - L1C_PRODUCT - L1A_PRODUCT - L1B_PRODUCT - L1C_PRODUCT - - - - - - - . - - - - - - - - - - - - Failed Report Name - - - - - - - - - - Station receiving the S2 data - - - - DATATION - - - - - - - - - - - - - - - Identifier of the downlink orbit - - - - - - - - - If there is a loss of GPS and subsequent switch to the redundant unit no interruption of the image processing is required. Then, it is possible to have list of GPS number. - - - - - - Each GPS is covering an interval time. - - - - - - GPS time value - - - - - GPS time value - - - - - - Refers to GPSR-A or GPSR-B - - - - - - - - - - - - - - - - - - - - GPS ephemeris time stamped data (PVT, sampled at 1Hz) in WGS84 - - - - - - - - - Dated positions (X, Y, Z) from GPS in millimeters - - - - - Position errors (dX, dY, dZ) from GPS in millimeters - - - - - Dated velocities (Vx, Vy, Vz) from GPS in millimeters per seconds - - - - - Velocity errors (dVx, dVy, dVz) from GPS in millimeters per seconds - - - - - GPs Time value - - - - - Navigation Solution Method - - - - - Position quality index - - - - - Quality index (Geometrical dilution of precision) - - - - - Quality index (Position dilution of precision) - - - - - Quality index (Time dilution of precision) - - - - - The number of Space Vehiculess (SVs) the receiver was able to use for the Navigation Solution computation, i.e. SVs for which code and carrier phase measurements and Ephemeris data were -available. - - - - - - - - - - GNSS system time error - - - - - - - - - - - AOCS filtered ephemeris (sampled at 2Hz) in J2000 - - - - - - - - - When 1 : ephemeris is valid - - - ARCHIVE_PRODUCT - L1A_PRODUCT - L1B_PRODUCT - L1C_PRODUCT - - - - - - - 0: solution is valid / 1: solution propagated / 2: cyclic position update available - - - ARCHIVE_PRODUCT - L1A_PRODUCT - L1B_PRODUCT - L1C_PRODUCT - - - - - - - - - - - - - - Dated positions (X, Y, Z) from AOCS - - - ARCHIVE_PRODUCT - L1A_PRODUCT - L1B_PRODUCT - L1C_PRODUCT - - - - - - - Dated velocities (Vx, Vy, Vz) from AOCS - - - ARCHIVE_PRODUCT - L1A_PRODUCT - L1B_PRODUCT - L1C_PRODUCT - - - - - - - GPS time value - - - ARCHIVE_PRODUCT - L1A_PRODUCT - L1B_PRODUCT - L1C_PRODUCT - - - - - - - Orbit angle wrt WGS84 - - - ARCHIVE_PRODUCT - L1A_PRODUCT - L1B_PRODUCT - L1C_PRODUCT - - - - - - - - - - - - - - - Quality assessement created by INIT_LOC_INV : Ephemeris quality retrieved from GPS Dilution of precision (DOP) - - - - - - Equalization parameters - - - - RADIO_S2 - L1B_PRODUCT - L1C_PRODUCT - - - - - - - List of equalized bands (if any) - - - - - - - - - Offset correction: A 'true' value indicates that offset correction has been done - - - - - Dark signal non uniformity correction: A 'true' value indicates that dark signal non uniformity correction has been done - - - - - - - - - - - - - - - - - A 'true' value indicates that equalization has been processed for, at least, one band - - - - - - - - - - - INIT_LOC_INV - INIT_LOC_PROD - - - Information provided for the beginning and the end of the product. - -Information is provided on QL geometry or on the full resolution - - - - - - - - - - - - - - - - - Pointing angles in satellite reference frame - - - - - Pointing angles in focal plane referential - - - - - - - - Position of the swath. Indeed, data are computed for each line index and for col = first_col and last_col, defining the begin and the end of the swath. - - - - - - Track orientation. Also called "CAPE". The range of the angle is into [0,360°[ - - - - - Incidence angles - - - - - - Full resolution pixel sizes along and across track in meters - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Unique Identifier of the L0/L1A/L1B granule - - - - - - - - - - - - Unique Identifier of a Sentinel2 datastrip linked to a specific Granule - - - - - - - - - - - - - - - - - Downlink priority flag, can be set to NOMINAL, NRT or RT - - - - - - - - - - - - Sensing start time of the Datatake (with precision in seconds) - - - - - - - - - - - - Archiving centre and time - - - - - - - - - - - - - - - - Unique Identifier of the L0/L1A/L1B granule - - - - - - - - - - Unique Identifier of a Sentinel2 datastrip linked to a specific Granule - - - - - - - - - - - - - - - Downlink priority flag, can be set to NOMINAL, NRT or RT - - - - - - - - - - Sensing start time of the Datatake (with precision in seconds) - - - - - - - - - - Archiving centre and time - - - - - - - - - - - - - - Unique Tile Identifier - - - - - - - - - - - - Unique Identifier of a Sentinel2 datastrip - - - - - - - - - - - - - - - - - Downlink priority flag, can be set to NOMINAL, NRT or RT - - - - - - - - - - - - Inherited from Level-0 metadata. This is the sensing start time of the Datatake (with precision in seconds) - - - - - - - - - - - - - - - - - - - - - - - Geometric refining results. Created by GEO_S2. The refined geometric model can be updated by RESAMPLE_S2. (Applicable to L1B and L1C) - - - - GEO_S2 - - - - - - - Flag to identify if the Refined Geometric Model File is computed or obtained from a existing RGMF (reused) - - - - - Refining results. Should exist only if REFINING_TYPE= REFINING or REFINING_REGISTRATION - - - - - - Refining characteristics. Should exist only if flag = REFINED - - - - - - reference band used for geometric refining/registration - - - - - Reference images used for geometric model refining processing - - - - - - Reference image name - - - - - - - The reference band is a spectral channel of the reference image. The geometric refining is performed using this channel. - - - - - - - - - - - - - - - - If the refining has not been performed or has not succeeded, the output product shall be flagged “not refined”. - - - - - - - - - - - - - Registration results. Should exist only if REFINING_TYPE= REGISTRATION or REFINING_REGISTRATION - - - - - - Registration characteristics. Should exist only if flag = VNIR_SWIR_REGISTERED - - - - - - - - - - - - If the VNIR/SWIR focal plane registration has not been performed, the output product shall be flagged “VNIR/SWIR not registered”. - - - - - - - - - - - - - Description of the refined corrections. If the refining has been processed by datastrip then, there are the refined corrections for each datastrip. These data are created by Geo_S2. - - - - GEO_S2 - - - - - - - - For each datastrip, there is the time zone which is covered by the datastrip - - - - - - - - - - - - - - - - Information is provided on QL geometry or on the full resolution - - - - INIT_LOC_INV - INIT_LOC_PROD - - - - - - - - - - - - - - - - - - - Pointing angles in satellite reference frame - - - - - Pointing angles in focal plane referential - - - Pointing angles in focal plane referential - ARCHIVE_PRODUCT - L1A_PRODUCT - L1B_PRODUCT - L1C_PRODUCT - - - - - - - - - - Position of the swath. Indeed, data are computed for each line index and for col = first_col, centre_col, and last_col, defining the begin, the centre and the end of the swath. - - - - - - Track orientation. Also called "CAPE". The range of the angle is into [0,360°[ - - - - - Incidence angles - - - - - - Full resolution pixel sizes along and across track in meters - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Quality assessement created by GEO_S2 - - - - - Refining results. Should exist only if refining has been applied - - - - - - Indicators allowing to evaluate the success of the correlation - - - - - - - - Multi-temporal registration performance indicator - - - - - - - Measurement date=production date - - - - - - - - Multi-spectral registration performance - - - - - - Value for 10m bands - - - - - - - Measurement date=date provided by GIPP - - - - - - - - Value for 20m bands - - - - - - - Measurement date=date provided by GIPP - - - - - - - - Value for 60m bands - - - - - - - Measurement date=date provided by GIPP - - - - - - - - - - - - - - - Measurement date=production date - - - - - - - - - - - - - - Registration results. Should exist only if registration has been applied - - - - - - Indicators allowing to evaluate the success of the correlation - - - - - - - - Spatiotriangulation results. Should exist only if refining and/or registration have/has been applied. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - GIPP file name - - - - - - - - - - - - - - - - - - - - - - - - - - - - - GIPP file name - - - - - - - - - - - - - - - - - - - - - - - - - - - - - GIPP file name - - - - - - - - - - - - - - - - - - - - - - - - - - - - - GIPP file name - - - - - - - - - - - - - - - - - - - - - - - - - - - - - GIPP file name - - - - - - - - - - - - - - - - - - - - - - - - - - - - - GIPP file name - - - - - - - - - - - - - - - - - - - - - - - - - - - - - GIPP file name - - - - - - - - - - - - - - - - - - - - - - - - - - - - - GIPP file name - - - - - - - - - - - - - - - - - - - - - - - - - - - - - GIPP file name - - - - - - - - - - - - - - - - - - - - - - - - - - - - - GIPP file name - - - - - - - - - - - - - - - - - - - - - - - - - - - - - GIPP file name - - - - - - - - - - - - - - - - - - - - - - - - - - - - - GIPP file name - - - - - - - - - - - - - - - - - - - - - - - - - - - - - GIPP file name - - - - - - - - - - - - - - - - - - - - - - - - - - - - - GIPP file name - - - - - - - - - - - - - - - - - - - - - - - - - - - - - GIPP file name - - - - - - - - - - - - - - - - - - - - - - - - - - - - - GIPP file name - - - - - - - - - - - - - - - - - - - - - - - - - - - - - GIPP file name - - - - - - - - - - - - - - - - - - - - - - - - - - - - - GIPP file name - - - - - - - - - - - - - - - - - - - - - - - - - - - - - GIPP file name - - - - - - - - - - - - - - - - - - - - - - - - - - - - - GIPP file name - - - - - - - - - - - - - - - - - - - - - - - - - - - - - GIPP file name - - - - - - - - - - - - - - - - - - - - - - - - - - - - - GIPP file name - - - - - - - - - - - - - - - - - - - - - - - - - - - - - GIPP file name - - - - - - - - - - - - - - - - - - - - - - - - - - - - - GIPP file name - - - - - - - - - - - - - - - - - - - - - - - - - - - - - GIPP file name - - - - - - - - - - - - - - - - - - - - - - - - - - - - - GIPP file name - - - - - - - - - - - - - - - - - - - - - - - - - - - - - GIPP file name - - - - - - - - - - - - - - - - - - - - - - - - - - - - - GIPP file name - - - - - - - - - - - - - - - - - - - - - - - - - - - - - GIPP file name - - - - - - - - - - - - - - - - - - - - - - - - - - - - - GIPP file name - - - - - - - - - - - - - - - - - - - - - - - - - - - - - GIPP file name - - - - - - - - - - - - - - - - - - - - - - - - - - - - - GIPP file name - - - - - - - - - - - - - - - - - - - - - - - - - - - - - GIPP file name - - - - - - - - - - - - - - - - - - - - - - - - - - - - - GIPP file name - - - - - - - - - - - - - - - - - - - - - - - - - - - - - GIPP file name - - - - - - - - - - - - - - - - - - - - - - - - - - - - - GIPP file name - - - - - - - - - - - - - - - - - - - - - - - - - - - - - GIPP file name - - - - - - - - - - - - - - - - - - - - - - - - - - - - - GIPP file name - - - - - - - - - - - - - - - - - - - - - - - - - - - - - GIPP file name - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Local cloud coverage indicator: A percentage of cloud coverage is computed for each Level-0 granule (for the area covered by a reference band). - - - - - - - - - - A percentage of degraded ancillary data - - - - - A percentage of degraded MSI data - - - - - - - - - Check on the consistency of product size - - - - - - Version of the On-Line Quality Control processor - - - - - - - - Granule dimensions in terms of NROW and NCOL - - - - - Granule dimensions for each resolution band (10m, 20m and 60m) - - - - - - Number of rows - - - - - - - - - - Number of columns - - - - - - - - - - - - - - - - - - - INIT_LOC_INV - INIT_LOC_PROD - GEO_S2 - - - - - - - Geolocation of the four corners of the granule envelope (Lat, Lon, H coordinates with horizontal CRS as WGS84 and altitude given over EGM96). The polygon must be closed (the first and last vertices are the same). - - - - - - Unitary footprint for one detector, each band of the granule. - - - - - - - - - - - - - - - - - - - - - - - - - - - - Pixel representation. Values is "POINT" for L0 and L1 levels. - - - - - - - - - - First pixel number (convention) - - - - - - - - - - - - - Check of acceptability performed versus a dedicated thresholds - - - - - Number of inconsistent source packets - - - - - Number of degraded source packets - - - - - Number of missing lines - - - - - Number of degraded SAD source packets - - - - - - - Check of acceptability performed versus a dedicated thresholds - - - - - Number of inconsistent source packets - - - - - Number of degraded source packets - - - - - - - - - The granules identification and information - DATATION - INIT_LOC_INV - CLOUD_INV - INIT_LOC_PROD - GEO_S2 - - - - - - - Position of the granule in the Datatake. This position is identified through the position of the scenes first lines in the Datatake and is expressed as number of 10m resolution images lines, - - - - - - - - - - Information provided for each granule, at the center of the granule for a reference band - - - - - - The granule centre on ground : 1 (lat, lon, h) point. Altitude is provided over the geoid. - - - - - The granule centre in the QL display: 1 (r,c) point - - - - - Incidence angles corresponding to the center of the granule - - - - - Solar angles corresponding to the center of the granule - - - - - - - - - - - - Failed Report Name - - - - - - - - - - - - - - - - UT1 –-UTC in [-0.9;0.9] seconds - - - - - - - - - - - - GPS_time – UTC = in number of seconds - - - - - GPS_time – TAI - - - - - - - - - - U angle pole motion (in arcsec) - - - - - V angle pole motion (in arcsec) - - - - - - - - - - INIT_LOC_INV - INIT_LOC_PROD - GEO_S2 - - - - - - - Geolocation over WGS84 of the contour of the product. The footprint is provided as a serie of vertices (lat, lon) counter-clockwise oriented. The polygon must be closed (the first and last vertices are the same). - - - - - - Global precise footprint of the cut segment. - - - - - Unitary footprint for each detector, each band of the product. This is not required for the Level-0 product. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Pixel representation. Values is "POINT" for L0 and L1 levels. - - - - - - - - - - First pixel number (convention) - - - - - - - - - - - - - - - Sun angles grid, containing sun zenith and azimut angles - - - - - Grids for Viewing Incidence Angles. Grids are defined in the same projection as the tile. For each requested band and each detector intersecting the tile, two grids of viewing incidence angles θv and φv shall be computed, where θv is the zenith viewing angle and φv is the azimuth viewing angle - - - - - - - - - - INIT_LOC_INV - CLOUD_INV - INIT_LOC_PROD - RADIO_S2 - - - Quality assessement masks - - - - - File name of the mask files. It is possible that there is a mask file type for each band and each detector. The mask format is GML - - - - - - - Mask type - - - - - Identifier of the band - - - - - Identifier of the detector - - - - - - - - - - Mask is defined into quicklook geometry in the inventory process and is transformed into level1 full resolution geometry in production process. - - - - - - - - - - - - - PDI Granule and Datastrip (L0/L1A/L1B) identification string - - - - - Level-0
    - - Level-1A
    - - Level-1B
    - It is defined as MMM_CCCC_TTTTTTTTTT_
    - = ____
    - For details refers to [PSD]
    -]]>
    -
    -
    -
    - - - -
    - - - PDI L1C Granule and Datastrip identification string - - - - It is defined as MMM_CCCC_TTTTTTTTTT_
    - = ____
    - For details refers to [PSD]
    -]]>
    -
    -
    -
    - - - -
    - - - - - - - - - - - - - - - Software/version/time-stamp information related to one process. Every process should append the list with a new Step element. - - - - - - - - - - - - Software associated to the attribute version - - - - - - - - - - - General PDGS Product Information - - - - - User-Product URI. This is the User-Product URI resolved and provided by ngEO - - - - - Processing level of the product - - - - - - - - - - Product type Identifier - - - - - - - - - - - - - - - DAG Generation Time - - - - - Link to the preview image URL - - - - - - - - - - Preview georeferencing information - - - - - - General information about the MSI datatake - - - - - - Logical map of the elements compounding the User-Product - - - - - - List of the datastrips belonging to the product - - - - - - - - - - - - - - - - List of granules/tiles belonging to the each datastrip (list of granule identifiers of all granules composing the product for a given DataStrip) - - - - - - In case of L1C, it refers to Tile - - - - - - Pointers to the Level-0 granule data files (links to the physical image data) - - - - - - - - - - - Granule identifier - - - - - - - - - - - - - - - - - - - Pointers to granule (tile) data files (links to the physical image data) - - - - - - List of the granule data files - - - - - - - - - - - Description of the quicklook - - - - INIT_LOC_INV - ARCHIVE_PRODUCT - L1A_PRODUCT - L1B_PRODUCT - L1C_PRODUCT - - - - - - - Quicklook image size - - - - - Ground footprint of the QL image. The footprint is a closed (lat, lon) polygon defined by a list of vertices counter-clockwise oriented (for WFS compatibility). The polygon must be closed (the first and last vertices are the same). - - - - - QL display geometric model - - - - - - - - - Line number of the first line - - - - - - - - - - Date of the first line - - - - - Theoretical line period - - - - - - - - Particular viewing directions - - - - - The 12 detectors are assembled and resampled in a monolithic quicklook image. This block gives, in the quicklook geometry, the connection columns number (last column) for each detectors (the first 11 detectors for compressed mode and 4 for uncompressed mode). - - - - - - - - - - - - - - - - - - - - - - Spacecraft to MSI frame transformation - - - - - - - - Pointer to the Quicklook image (optional) contained in QI_DATA folder - - - - - - - - - Radiometric quality indicators for each band - - - - - - - - - Noise model parameters (α,β), allowing to estimate the noise as sigma*sigma = α*α+β*S , where S is the signal expressed as digital counts - - - - - - First coefficient of the noise (constant noise) - - - - - Second coefficient of the noise (signal noise) - - - - - - - - Absolute calibration accuracy (%) - - - - - Cross-band calibration accuracy (%) - - - - - Multi-temporal calibration accuracy (%) - - - - - - - - - - - - - - - - - - - - - - - DATATION - ARCHIVE_PRODUCT - INIT_LOC_PROD - - - Not clear if ANA-TM is OK for PDGS as is, since PDGS needs to keep all ISPs. -Initial Comment:List of relative source packets for each couple (band ; detector). Created by ANA_TM, updated before archiving and by InitLoc Production for Level1 processing. - - - - - - - - - - - - First source packet counter. Updated by Init_Loc_Inv, Archive and Init_Loc_Prod. - - - - - - - - - - - - - - - Position of the first source packet in the on board scene - - - - - - - - - - - Number of source packets. Updated by Init_Loc_Inv, Archive and Init_Loc_Prod - - - - - - - - - - - - - - - - Detector identifier for source frame description - - - - - - - - Band identifier for source frame description - - - - - - - - - - - - - - - - - - List of source packets lost / degraded for each couple (band ; detector) - - - - - - Type of degradation - - - - - Type of error (from AnaTm specifications) - - - - - - - - - - - - - - - - - Date of the first line of the scene which contains the first lost / degraded source packet - - - - - Counter of the first source packet in error. This number is in [0;143] for 10m bands, [0;71] for 20m bands or [0;23] for 60m bands. - - - - - - - - - - - Number of lost or degraded source packet. This number is in [1;144] for 10m bands, [1;72] for 20m bands or [1;24] for 60m bands - - - - - - - - - - - - - - - - - Band identifier - - - - - - - - - - - - - - - - - - - - - - - - - Detector identifier - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Description of a tile in a given representation - - - - - - - Tile dimensions for each resolution band - - - - - - Number of rows - - - - - - - - - - Number of columns - - - - - - - - - - - - - - XDIM and YDIM for each resolution band - - - - - - Upper-left coordinate (X value) of the tile - - - - - Upper-left coordinate (Y value) of the tile - - - - - Horizontal pixel dimension - - - - - Vertical pixel dimension - - - - - - - - - - - Radiometric corrections applied to L1A - - - - - SWIR pixels re-arrangement (only for level 1A production but SWIR rearrangement information shall be preserved in L1B and L1C): A 'true' value indicates that data extraction and SWIR pixels re-arrangement have been processed. - - - - - Defective pixels processing. A 'true' value indicates that defective pixels have been detected and processed, a 'detection" value indicates that defective pixels have been only detected (only for level 1A production), a 'false" value indicates that defective pixels have been neither detected nor processed. - - - - - Management of NO_DATA pixels. A 'true' value indicates that NO_DATA pixels have been detected and processed, a 'detection" value indicates that NO_DATA pixels have been only detected (only for level 1A production), a 'false" value indicates that NO_DATA pixels have been neither detected nor processed. - - - - - Management of saturated pixels. A 'true' value indicates that saturated pixels has been processed. - - - - - - - Radiometric corrections applied to L1B and L1C - - - - - SWIR pixels re-arrangement. A 'true' value indicates that data extraction and SWIR pixels re-arrangement have been processed. - - - - - On ground equalization of the image using an optimized polynomed correction (only for level 1B production) - - - - - Optical crosstalk correction (only for level 1B production). A 'true' value indicates that optical crosstalk correction has been processed. - - - - - Electronic crosstalk correction (only for level 1B production). A 'true' value indicates that electronic crosstalk correction has been processed. - - - - - Blind pixel remonving (only for level 1B production). A 'true' value indicates that Blind pixel remonving has been processed. - - - - - Defective pixels processing. A 'true' value indicates that defective pixels have been detected and processed, a 'detection" value indicates that defective pixels have been only detected (only for level 1A production), a 'false" value indicates that defective pixels have been neither detected nor processed. - - - - - Restoration and levelling of the product to 12 bits (only for level 1B production) - - - - - Binning for 60m bands (only for level 1B production). A 'true' value indicates that binning for 60m bands has been processed. - - - - - Management of NO_DATA pixels. A 'true' value indicates that NO_DATA pixels have been detected and processed, a 'detection" value indicates that NO_DATA pixels have been only detected (only for level 1A production), a 'false" value indicates that NO_DATA pixels have been neither detected nor processed. - - - - - Management of saturated pixels. A 'true' value indicates that saturated pixels has been processed. - - - - - - - Radiometric corrections applied to L1B and L1C - - - - - SWIR pixels re-arrangement. A 'true' value indicates that data extraction and SWIR pixels re-arrangement have been processed. - - - - - Management of saturated pixels. A 'true' value indicates that saturated pixels has been processed. - - - - - - - - - List of restored bands (if any) - - - List if restored bands (if any) - L1B_PRODUCT - L1C_PRODUCT - - - - - - - - - - - - - - - Minimum value - - - - - - - - - - Maximum value - - - - - - - - - - - - - - - - - - - - - - - - - A 'true' value indicates that restoration and levelling of the product to 12 bits has been processed. - - - - - - - - Raw attitudes - ARCHIVE_PRODUCT - L1A_PRODUCT - L1B_PRODUCT - L1C_PRODUCT - - - - - - - Startracker in the J2000 frame. There are 3 startrackers among which one in cold redundancy. - - - - - - - - - STR data at 10 Hz coming from Attitude Data Block - - - - - - - - - Space separated list of 4 quaternion values ordered as (Q0 Q1 Q2 Q3) = (qs qv1 qv2 qv3) (inertial attitude J2000). - - - - - - - - - - Angular rate (X, Y, Z) in BRF in deg/s - - - - - Time stamp of the center of integration associated with the attitude (with a precision up to 2pow-16 seconds). This field is computed from the centerOfIntegrationTimeStamp value provided in the data block - - - - - Julian date used for precession correction (if enabled); specified in number of days since the epoch date of the built-in star catalog; day 0 corresponds to JD 2451545 - - - - - - - Navigation Solution Method: NO_ATTITUDE : No attitude available, A_PRIORI_ATTITUDE : Attitude based solely on user input, COARSE_ATTITUDE : Predicted from previous measurements, UNCONFIRMED_ATTITUDE : Calculated from current measurements but not yet confirmed, VALID_ATTITUDE : Like unconfirmed Attitude but additionally validated - - - Attitude Quality - - - - - - - - - - - - - - - Rate quality: NO_RATE : No rate information available, COARSE_RATE : A-priori rate or rate derived from star coordinates, FINE_RATE : Rate derived from attitude, FILTERED_RATE : Rate derived from attitude and filtered - - - Rate Quality - - - - - - - - - - - - - if set to 1, the rate information is valid (i.e. derived from current measurements) - - - - - - - - - - - - - - - - - - STR status and health data block (at 1 Hz). - - - - - - - - - - - STR operating mode: BOOT : Boot mode, STANDBY : Standby mode, PHOTO : Photo mode, AADF : AAD mode with submode ‘full frame’, AADW : AAD mode with submode ‘window’, NAT : NAT mode - - - STR operating mode - - - - - - - - - - - - - - - - - Thermo electric cooler mode:COOLER_OFF : TEC switched off, COOLER_CONTROLLED : TEC operating in controlled mode to reach target temperature, COOLER_MAXIMUM : TEC operating at maximum power - - - Thermo electric cooler mode - - - - - - - - - - - - Target temperature for temperature control - - - - - Detector temperature - - - - - Optics temperature - - - - - Housing temperature - - - - - - - The source selected for external synchronization: NONE : no external synchronization, PRIMARY : external synchronization via primary line, SECONDARY : external synchronization via secondary line, ANY : external synchronization via XOR of both lines - - - The source selected for external synchronization - - - - - - - - - - - - - The number of seconds since the latest received time synchronization; saturates at 63 seconds - - - - - - - - - - - - Number of trackable stars - - - - - - - - - - Number of stars tracked - - - - - - - - - - Number of identified stars - - - - - - - - - - Number of stars used for attitude determination - - - - - - - - - - - - Last result of attitude determination:<br> - - NOT_ENOUGH_STARS : Not enough stars suitable for attitude determination <br> - - SUCCESS : Attitude calculated successfully <br> - - REFINED : Like attitudeSuccess but with additional a-posteriori refinement <br> - - NA : Attitude determination failed <br> - - - - Last result of attitude determination - - - - - - - - - - - - - - - Last result of star identification error:<br> - - LDLE : Star identification not yet started <br> - - SUCCESS : Star identification succeeded <br> - - RUNNING : Star identification is running <br> - - NOT_ENOUGH_STARS : Not enough tracked stars for star identification <br> - - NA : Star identification failed <br> - - - - Last result of star identification error - - - - - - - - - - - - - - - - - - - - Flag to indicate if STR is synchronize with GPS time - - - - - - - - - - - - - - - - - - - - - - - - IMU values are angle increment data in radians, around the rotation axis of the IMU. 4 IMU are in hot redundancy. - - - - - - Inertial Measurement Unit - - - - - - One sample for one GPS_TIME. - - - - - - IMU filtered data are angle increments - - - - - IMU raw data are angle increments - - - - - GPS time value - - - - - 16 Bits (0/1) sequence as defined in the IMU interface - - - - - - - - Organiser temperature - - - - - Sagnac Interferometer Assembly temperature - - - - - Optical Source temperature - - - - - Board temperature - - - - - Temperature reference voltage offset - - - - - Temperature reference voltage - - - - - - - - 10PPS time corresponding to the measurements (provided by CSW) - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Product Download Options according to ngEO download options - - - - - According to ngEO metadatada catalogue. (TBC) - - - - - List of band mapped to ngEO download options - - - - - - Spectral Band name - - - - - - - - List of metadata levels - - - - - - List of metadata levels - - - - - - - - - - - - - - - - - - - - - - Link to used GIPP files - - - - - Link to used IERS Bullettin - - - - - Link to SAD files - - - - - ECMWF for L1C always embedded (no embedding option) - - - - - never downloaded (no embedding option) - - - - - never downloaded (no embedding option) - - - - - - - - - - - - - Selection of preview image of the User Product - - - - - List of metadata level - - - - - - SAFE/DIMAP - - - - - - - - Boolean flag: to aggregate or not several granules in a single file per band and per detector (concatenation of granules along the detectors). For Level-0, aggregation is always FALSE - - - - - - - - - - Source packet information - - - - - - - - - - - - Datation model - - - - - - - - - - - - - - - - - - - - - - - - - - DATATION - RADIO_S2 - - - - - - - - - - - - - - - - - - - - - - - - Compression rate - ARCHIVE_PRODUCT - L1A_PRODUCT - L1B_PRODUCT - L1C_PRODUCT - - - - - - - - - - - - - - - - Integration time - ARCHIVE_PRODUCT - L1A_PRODUCT - L1B_PRODUCT - L1C_PRODUCT - - - - - - - - - - - - - - - - - - - - - - Sampled at 1 Hz - - - - - - Navigation Solution Method - - - - - Time quality index - - - - - Time dilution of precision. This value is set in case of Kalman filtered navigation solution (NSM=ESTIMATED_WITH_KALMAN_FILTER) with fewer than 4 SVs available1 or propagated initial state vector (NSM=PROPAGATED). - - - - - Instrument measurement time representation of the synchronisation time stamp. - - - - - GPS time representation of the synchronisation time stamp. - - - - - UTC time representation of the synchronisation time stamp. - - - - - - - - - - - - Line period for the acquisition of line of 10 m full-resolution image data - - - - - Datation model : for each couple (band, detector) - - - - - - - - - Line number corresponding to the time stamp - - - Line number corresponding to the time stamp - DATATION - INIT_LOC_PROD - - - - - - - Time-stamp - - - - - - Detector identifier - - - - - - - - - - - - - - - Flag to indicate if MSI is synchronize with GPS time - - - - - Theoretical line period for the acquisition of line of 10 m full-resolution image data - - - - - Created when datation models are estimated through linear regression. - - - - - - - - - Global least square residual - - - - - - - - - - - - - - Least square residual for the GSP Rmoy(GSP) - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - FPA temperature information (thermal control and monitoring, relevant to the detector transmission VNIR or SWIR) - - - FPA temperature information (thermal control and monitoring, relevant to the detector transmission VNIR or SWIR) - ARCHIVE_PRODUCT - L1A_PRODUCT - L1B_PRODUCT - L1C_PRODUCT - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - List of temperatures for each mirror - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Splitter temperature (only one value) - - - - - - - - - - - CSM-Diffuser temperature (only one vaue) - - - - - - - - - - - - - Zenith and azimuth angles - - - - - - The range of the angle is into [0,360°[ - - - - - - - Pointing angles - - - - - Along lines - - - - - Along columns - - - - - - - Yaw, pitch, and roll angles - - - - - - - - - - Dataset identification - - - - - String that identifies a Sentinel2 dataset - - - - - - - - - - Unique Identifier of a Sentinel2 datastrip - - - - - - - - - - - - - - - - - - - - - Unique Identifier of a Sentinel2 datastrip - - - - - - - - - - - - - - - DATATION - - - - - - - MSI operation mode - - - - - - - - - DATATION - - - - - - - - - - DATATION - - - - - - - - - - DATATION - - - Processing/archiving date - - - - - Identifier of the downlink orbit - - - - - Imaging Orbit Number - - - - DATATION - - - - - - - - - - - - - Imaging Start Time - - - - - Acquisition orbit direction (descending, ascending) - - - - - - - - - Flag to indicate if compress mode is by passed - - - Flag to indicate if compress mode is by passed - ARCHIVE_PRODUCT - L1A_PRODUCT - L1B_PRODUCT - L1C_PRODUCT - - - - - - - Flag to indicate if equalization is active - - - Flag to indicate if equalization is active - ARCHIVE_PRODUCT - L1A_PRODUCT - L1B_PRODUCT - L1C_PRODUCT - - - - - - - On board active Detectors (in case of compression by-passed) - - - On board active Detectors (in case of compression by-passed) - ARCHIVE_PRODUCT - L1A_PRODUCT - L1B_PRODUCT - L1C_PRODUCT - - - - - - - - - - - - - - - - On board TDI configuration - - - - - - For B3, B4, B11 and B12 only - - - - - - - - - - - - - - - - - - - - - - - - - Source packet information - - - - - Datation model - - - - - - - - - - - - - - - - - - Onboard Hybrided attitude (STR+IMU), provided at 10Hz, gives the PRF frame in the J2000. - - - - - - Only one sample for one GPS_TIME. - - - - - - Space separated list of 4 quaternion values ordered as Q0 Q1 Q2 Q3 - - - - - - Dated angular velocities - - - - - Velocity angular errors - - - - - GPS time value - - - - - - - - - - - - - - - - - Description of ephemeris data (filtered and raw) - - - - - Description of attitudes data (filtered and raw) - - - - - These data are acquired at 1 Hz - - - - - List of source packets lost / degraded - - - - - - - - - Type of degradation - - - - - - - - - - - - - - - - - - - - - - - - - - - Description of ephemeris data (filtered and raw) - - - - - Description of attitudes data (filtered and raw) - - - - - These data are acquired at 1 Hz - - - - - List of source packets lost / degraded - - - - - - - - - Type of degradation - - - - - - - - - - - - - - - - - - - - - - - - - - - Description of ephemeris data (filtered and raw) - - - - - Description of attitudes data (filtered and raw) - - - - - These data are acquired at 1 Hz - - - - - List of source packets lost / degraded - - - - - - - - - Type of degradation - - - - - - - - - - - - - - - - - - - - - - - - - - - Description of ephemeris data (filtered and raw) - - - - - Description of attitudes data (filtered and raw) - - - - - These data are acquired at 1 Hz - - - - - List of source packets lost / degraded - - - - - - - - - Type of degradation - - - - - - - - - - - - - - - - - - - - - - Reference to folder containing SAD raw. This reference is empty in case of Level-0 User Product where SAD are available at product level. - - - - - - - - - - - - Created by DATATION, updated by RADIO_S2. - - - - DATATION - RADIO_S2 - - - - - - - - - - - - - - - - - - - - - - - Compression rate - ARCHIVE_PRODUCT - L1A_PRODUCT - L1B_PRODUCT - L1C_PRODUCT - - - - - - - - - Integration time - ARCHIVE_PRODUCT - L1A_PRODUCT - L1B_PRODUCT - L1C_PRODUCT - - - - - - - In-flight Non Uniform Correction table ID defined by 10 bits. This ID is uniform for all transmitted bands. It identifies the correction coefficients table used in-flight - - - In-filght Non Uniform Correction table ID defined by 10 bits. This ID is uniform for all transmitted bands. It identifies the correction coefficients table used in-flight - ARCHIVE_PRODUCT - L1A_PRODUCT - L1B_PRODUCT - L1C_PRODUCT - - - - - - - - - - - - - - - The granules identification and information - DATATION - INIT_LOC_INV - CLOUD_INV - INIT_LOC_PROD - GEO_S2 - - - - - - - The granules geometry - - - - - For each detector, list of the granules composing the datastrip - - - - - - - - - - - - - - - Position of the granule in the Group of Source Packets. This position is identified through the position of the scenes first lines in the datastrip and is expressed as number of 10m resolution images lines - - - - - - - - - - GPS date-time of the first line of the granule. The date-time is given with a precision of one nanosecond. - - - - DATATION - INIT_LOC_PROD - - - - - - - - Granule identifier - - - - - - - - - - - - - - - Detector identifier - - - - - - - - - - - - - - - - - - The granules identification and information - DATATION - INIT_LOC_INV - CLOUD_INV - INIT_LOC_PROD - GEO_S2 - - - - - - - The granules geometry - - - - - For each detector, list of the granules composing the datastrip - - - - - - - - - - - - - - - Position of the granule in the Group of Source Packets. This position is identified through the position of the scenes first lines in the datastrip and is expressed as number of 10m resolution images lines - - - - - - - - - - GPS date-time of the first line of the granule. The date-time is given with a precision of one nanosecond. - - - - DATATION - INIT_LOC_PROD - - - - - - - The granule footprint on ground : list of 5 (lat, lon, h) points. Altitude is provided over the geoid. This footprint is provided as a polygon counter-clockwise oriented. The polygon must be closed (the first and last vertices are the same). - - - - - The granule footprint in the QL display: list of 4 (l,c) points - - - - - Information provided for each granule, at the center of the granule - - - - - - The granule centre on ground : 1 (lat, lon, h) point. Altitude is provided over the geoid. - - - - - The granule centre in the QL display: 1 (l,c) point - - - - - Incidence angles corresponding to the center of the granule - - - - - Solar angles corresponding to the center of the granule - - - - - - - - - - - A percentage of degraded ancillary data is provided for each granule - - - - - A percentage of degraded MSI data is provided for each granule - - - - - - - - - Granule identifier - - - - - - - - - - - - - - - Detector identifier - - - - - - - - - - - - - - - - - - The granules identification and information - DATATION - INIT_LOC_INV - CLOUD_INV - INIT_LOC_PROD - GEO_S2 - - - - - - - The granules geometry - - - - - For each detector, list of the granules composing the datastrip - - - - - - - - - - - - - - - Position of the granule in the Group of Source Packets. This position is identified through the position of the scenes first lines in the datastrip and is expressed as number of 10m resolution images lines - - - - - - - - - - GPS date-time of the first line of the granule. The date-time is given with a precision of one nanosecond. - - - - DATATION - INIT_LOC_PROD - - - - - - - The granule footprint on ground : list of 5 (lat, lon, h) points. Altitude is provided over the geoid. This footprint is provided as a polygon counter-clockwise oriented. The polygon must be closed (the first and last vertices are the same). - - - - - The granule footprint in the QL display: list of 4 (l,c) points. Used for computing percentage of cloud coverage and degraded data per granule - - - - - Information provided for each granule, at the center of the granule - - - - - - The granule centre on ground : 1 (lat, lon, h) point. Altitude is provided over the geoid. - - - - - The granule centre in the QL display: 1 (l,c) point - - - - - Incidence angles corresponding to the center of the granule - - - - - Solar angles corresponding to the center of the granule - - - - - - - - - - - A percentage of degraded ancillary data is provided for each granule - - - - - A percentage of degraded MSI data is provided for each granule - - - - - - - - - - Granule identifier - - - - - - - - - - - - - - - Detector identifier - - - - - - - - - - - - - - - - - - The granules identification and information - DATATION - INIT_LOC_INV - CLOUD_INV - INIT_LOC_PROD - GEO_S2 - - - - - - - The granules geometry - - - - - For each detector, list of the granules composing the datastrip - - - - - - - - - - - - - - - Position of the granule in the Group of Source Packets. This position is identified through the position of the scenes first lines in the datastrip and is expressed as number of 10m resolution images lines - - - - - - - - - - The granule footprint on ground : list of 5 (lat, lon, h) points. Altitude is provided over the geoid. This footprint is provided as a polygon counter-clockwise oriented. The polygon must be closed (the first and last vertices are the same). - - - - - Information provided for each granule, given for a reference band, at the center of the granule - - - - - - - The granule centre on ground : 1 (lat, lon, h) point. Altitude is provided over the geoid. - - - - - Incidence angles corresponding to the center of the granule - - - - - Solar angles corresponding to the center of the granule - - - - - - - - - - - A percentage of degraded ancillary data is provided for each granule - - - - - A percentage of degraded MSI data is provided for each granule - - - - - - - - - - Granule identifier - - - - - - - - - - - - - - - Detector identifier - - - - - - - - - - - - - - - - - - The granules identification and information - RESAMPLE_S2 - - - - - - - - - - - Sun angles grid, containing sun zenith and azimut angles - - - - - List of masks produced for each tile by Resample_S2 and Mask_S2. Each mask is in the target geometry of the tile. Each mask is covering the tile size. The mask format is GML - - - - - - - - - - Mask type - - - - - - - - - - - - This information has to be consolidated from IAS Processing Reports for all tiles in the final Level-1C metadata file. - - - - - - A percentage of degraded ancillary data is provided for each tile - - - - - A percentage of degraded MSI data is provided for each tile - - - - - - - - Grids for Viewing Incidence Angles. Grids are defined in the same projection as the tile. For each requested band and each detector intersecting the tile, two grids of viewing incidence angles θv and φv shall be computed, where θv is the zenith viewing angle and φv is the azimuth viewing angle - - - - - - TILE_IDENTIFIER from GIPP - - - - - - - - - - - - - - - Identification of the source datastrip acquisition. General informations - - - - - MSI Sensor configuration (Information from MSI telemetry) - - - - - Ancillary data - - - - - IERS bulletin. These data are provided for the start acquisition date. - - - - DATATION - - - - - - - - - - - - Identification of the source datastrip acquisition. General informations - - - - - MSI Sensor configuration (Information from MSI telemetry) - - - - - Ancillary data - - - - - IERS bulletin. These data are provided for the start acquisition date. - - - - DATATION - - - - - - - - - Considering the width of S2 swath, some data should be computed at the center, and the two borders of the swath. -Considering the length of the S2 segments, each datum should be computed at points, which are distributed along the segment. - - - - - - - - - Identification of the source datastrip acquisition. General informations - - - - - MSI Sensor configuration (Information from MSI telemetry) - - - - - Ancillary data - - - - - IERS bulletin. These data are provided for the start acquisition date. - - - - DATATION - - - - - - - - - Considering the width of S2 swath, some data should be computed at the center, and the two borders of the swath. -Considering the length of the S2 segments, each datum should be computed at points, which are distributed along the segment. - - - - - - - - - Identification of the source datastrip acquisition. General informations - - - - - MSI Sensor configuration (Information from MSI telemetry) - - - - - Ancillary data - - - - - IERS bulletin. These data are provided for the start acquisition date. - - - - DATATION - - - - - - - - - Considering the width of S2 swath, some data should be computed at the center, and the two borders of the swath. -Considering the length of the S2 segments, each datum should be computed at points, which are distributed along the segment. - - - - - - - - - Identification of the source datastrip acquisition. General informations - - - - - MSI Sensor configuration (Information from MSI telemetry) - - - - - Ancillary data - - - - - IERS bulletin. These data are provided for the start acquisition date. - - - - DATATION - - - - - - - - - Considering the width of S2 swath, some data should be computed at the center, and the two borders of the swath. -Considering the length of the S2 segments, each datum should be computed at points, which are distributed along the segment. - - - - - - - - - Identification of the source datastrip acquisition. General informations - - - - - MSI Sensor configuration (Information from MSI telemetry) - - - - - Ancillary data - - - - - IERS bulletin. These data are provided for the start acquisition date. - - - - DATATION - - - - - - - - - Considering the width of S2 swath, some data should be computed at the center, and the two borders of the swath. -Considering the length of the S2 segments, each datum should be computed at points, which are distributed along the segment. - - - - - - - - - -
  • a space-separated list of 4096 percent values
  • -
  • the first (MIN) and last (MAX) indexes for significant percent values (i.e. > 0.0)
  • -
  • the mean and standard deviation values
  • -]]>
    -
    -
    -
    - - - - percent values (number depending on the STEP) - - - - - histogram step - - - - - first index of significant percent value (i.e. > 0.0) - - - - - last index of significant percent value (i.e. > 0.0) - - - - - Histogram mean value - - - - - Histogram standard deviation - - - -
    - - - Position of the swath : left, center, right - - - - - - - - - - - - - - - - - - - - Pollux zone identifier. - - - - - - - - - - - - - - - Local registration Statistics given for one Pollux zone. Units should be set according to product unit (i.e. meters or degrees) - - - - - - - Indicators allowing to evaluate the success of the correlation - - - - - Global registration Statistics. Units should be set according to product unit (i.e. meters or degrees) - - - - - Local registration Statistics list (given for every Pollux zone). - - - - - - - Technical quality assessment: A percentage of degraded MSI and ancillary data over the datastrip is provided (consolidated from the metadata expressed at granule-level) - - - - - - - - - Quality assessement created by DATATION - - - - - - - - Degraded ancillary data - - - - - - - Frequency - - - - - - - - - - - - - - - - - - - - - - - Quality assessement created by INIT_LOC_INV : Planimetric stabililty performance for the datastrip - - - - - - Measurement date - - - - - - - percentage of cloudy pixels detected - - - - - - Initial archiving station - - - - ARCHIVE_PRODUCT - L1A_PRODUCT - L1B_PRODUCT - L1C_PRODUCT - - - - - - - Date updated at the end of inventory process - - - - - Initial archiving station - - - - - - - Description of the coordinate reference system used in the dataset. Set to WGS84 by Init_Loc_Inv and updated accordingly to requested product by RESAMPLE_S2. - - - - - Identifier of the organization responsible for tables used for identifying coordinate sytem parameters. - - - - - Description of the horizontal coordinate reference system. - - - - - - - - - Number of bands for the whole product. - - - - - - - - - - - Number of bits used to encode each band radiometric counts (before compression). - - - - - - - - - - - Product Compression - - - - - - - - - - - - - - - - Dimensions for each detector (by band) in the sensor geometry - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Number of bands for the whole product. - - - - - - - - - - - Number of bits used to encode each band radiometric counts (before compression). - - - - - - - - - - - Product Compression - - - - - - - - - - - - - - - - Place name - - - - - Purpose of the product - - - - - Internal Reference - - - - - Commercial reference - - - - - Commercial Item within commercial reference - - - - - Other information - - - - - - - - - - - - - - - - - - - - - - - - - - - - Pointer to the Image Data - - - - - Raster image file name - - - - - - - - - - - - - - Equalization parameters - - - - RADIO_S2 - L1B_PRODUCT - L1C_PRODUCT - - - - - - - List of equalized bands (if any) - - - - - - - - - Offset correction: A 'true' value indicates that offset correction has been done - - - - - Dark signal non uniformity correction: A 'true' value indicates that dark signal non uniformity correction has been done - - - - - - - - - - - - - - - - - A 'true' value indicates that equalization has been processed for, at least, one band - - - - - - Radiometric corrections applied - - - - - Data extraction and SWIR pixels re-arrangement (only for level 1A production). A 'true' value indicates that data extraction and SWIR pixels re-arrangement have been processed. - - - - - On ground equalization of the image using an optimized polynomial correction (only for level 1B production) - - - - - Optical crosstalk correction (only for level 1B production). A 'true' value indicates that optical crosstalk correction has been processed. - - - - - Electronic crosstalk correction (only for level 1B production). A 'true' value indicates that electronic crosstalk correction has been processed. - - - - - Blind pixel remonving (only for level 1B production). A 'true' value indicates that Blind pixel remonving has been processed. - - - - - Defective pixels processing. A 'true' value indicates that defective pixels have been detected and processed, a 'detection" value indicates that defective pixels have been only detected (only for level 1A production), a 'false" value indicates that defective pixels have been neither detected nor processed. - - - - - Restoration and levelling of the product to 12 bits (only for level 1B production) - - - - - Binning for 60m bands (only for level 1B production). A 'true' value indicates that binning for 60m bands has been processed. - - - - - Management of NO_DATA pixels. A 'true' value indicates that NO_DATA pixels have been detected and processed, a 'detection" value indicates that NO_DATA pixels have been only detected (only for level 1A production), a 'false" value indicates that NO_DATA pixels have been neither detected nor processed. - - - - - Management of saturated pixels. A 'true' value indicates that saturated pixels has been processed. - - - - - - - Computed by anaTM - - - - - - - - - - - - - - - - - - - - - - - Technical quality assessment: A percentage of degraded MSI and ancillary data over the product is provided (consolidated from the metadata expressed at granule-level) - - - - - - - - - - - - - - - - - - Technical quality assessment: A percentage of degraded MSI and ancillary data over the product is provided (consolidated from the metadata expressed at granule-level) - - - - - - - - - - - - - - - - - - Radiometric quality indicators for each band - - - - - - - - - Noise model parameters (α,β), allowing to estimate the noise as sigma*sigma = α*α+β*S , where S is the signal expressed as digital counts - - - - - - First coefficient of the noise (constant noise) - - - - - Second coefficient of the noise (signal noise) - - - - - - - - Absolute calibration accuracy (%) - - - - - Cross-band calibration accuracy (%) - - - - - Multi-temporal calibration accuracy (%) - - - - - - - - - - - - - - - - Technical quality assessment: A percentage of degraded MSI and ancillary data over the product is provided (consolidated from the metadata expressed at granule-level) - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Spacecraft position (expressed in meters) in the local spacecraft reference frame (EVG Euclidium state) - - - - - MSI state (EIF Euclidium state) - - - - - Focal plane state (EIM Euclidium state) - - - - - - - - - - - - - - - - - - - - - - - - - Radiometric quality indicators for each band - - - - - - - - - Noise model parameters (α,β), allowing to estimate the noise as sigma*sigma = α*α+β*S , where S is the signal expressed as digital counts - - - - - - First coefficient of the noise (constant noise) - - - - - Second coefficient of the noise (signal noise) - - - - - - - - Absolute calibration accuracy (%) - - - - - Cross-band calibration accuracy (%) - - - - - Multi-temporal calibration accuracy (%) - - - - - - - - - - - - - - - - - Technical quality assessment: A percentage of degraded MSI and ancillary data over the product is provided (consolidated from the metadata expressed at granule-level) - - - - - - - - - - - - - - - - - - Radiometric quality indicators for each band - - - - - - - - - Noise model parameters (α,β), allowing to estimate the noise as sigma*sigma = α*α+β*S , where S is the signal expressed as digital counts - - - - - - First coefficient of the noise (constant noise) - - - - - Second coefficient of the noise (signal noise) - - - - - - - - Absolute calibration accuracy (%) - - - - - Cross-band calibration accuracy (%) - - - - - Multi-temporal calibration accuracy (%) - - - - - - - - - - - - - - - - - Technical quality assessment: A percentage of degraded MSI and ancillary data over the product is provided (consolidated from the metadata expressed at granule-level) - - - - - - - - - - - - - Radiometric quality indicators for each band - - - - - - - - - Noise model parameters (α,β), allowing to estimate the noise as sigma*sigma = α*α+β*S , where S is the signal expressed as digital counts - - - - - - First coefficient of the noise (constant noise) - - - - - Second coefficient of the noise (signal noise) - - - - - - - - Absolute calibration accuracy (%) - - - - - Cross-band calibration accuracy (%) - - - - - Multi-temporal calibration accuracy (%) - - - - - - - - - - - - - - - - - Technical quality assessment: A percentage of degraded MSI and ancillary data over the product is provided (consolidated from the metadata expressed at granule-level) - - - - - - - - - - - GEO_S2 - RESAMPLE_S2 - - - - - - - - - - - Correction to take into account the Sun-Earth distance variation (this correction is computed using the acquisition date) - - - - - Reflectance parameters for each band - - - - - - Equivalent solar irradiance - - - - - - - - - - - - - - - - - - - Reflectance quantification value (in order to convert digit count into reflectance) - - - - - For each band, the parameters (α,β) of the Level 1B noise model corrected from the absolute calibration coefficient, the sun zenith angle and the equivalent sun irradiance - - - - - - - - - First coefficient of the noise (constant noise) - - - - - Second coefficient of the noise (signal noise) - - - - - - - - - - - - - - - - - - - - - - - - Radiometric quality indicators for each band - - - - - - - - - Noise model parameters (α,β), allowing to estimate the noise as sigma*sigma = α*α+β*S , where S is the signal expressed as digital counts - - - - - - First coefficient of the noise (constant noise) - - - - - Second coefficient of the noise (signal noise) - - - - - - - - Absolute calibration accuracy (%) - - - - - Cross-band calibration accuracy (%) - - - - - Multi-temporal calibration accuracy (%) - - - - - - - - - - - - - - - - - Technical quality assessment: A percentage of degraded MSI and ancillary data over the product is provided (consolidated from the metadata expressed at granule-level) - - - - - - - - - Undersamplig step in column - - - - - Undersamplig step in row - - - - - List of values by rows - - - - - - Rows of values stored in a 1D vector. Values are in float format - - - - - - - - - - - - Grids for Zenith Viewing Incidence Angle values. "NaN" value is used when an angle is not computed. - - - - - - Grids for Azimuth Viewing Incidence Angle values. "NaN" value is used when an angle is not computed. - - - - - - Band index for which incidence grids are requested - - - - - ID of Detector intersecting the tile - - - - - - - - Grids for Sun Zenith angles (θs) values - - - - - Grids for Sun Azimuth angles (φs) values - - - - - - - - - Granule identification - - - - - - - - - - - - - - Detector identification - - - - - - - - - - - - - - - - - - - - - - -observation-id: L[pp]_S[SS]_[YYYYMMDDTHHMMSS]_[dd], rec-id: [RRR], where:
    -
      -
    • [pp] : identifies the processing level : “0_”, “1A”, “1B”, “1C” .
    • -
    • [SS] : identifies the Sentinel2 satellite : “2A” or “2B”.
    • -
    • [YYYYMMDDTHHMMSS] : identifies the first line date on the MSI-Scene (ex. 20121001T09575020) in UTC time
    • -
    • [dd] : 2 digits identifying the detector (from 01 to 12)
    • -
    • [RRR] : reception centre : “CGS1”, “CGS2”, “CGS3”, “PAC1”, “PAC2”
    • -
    ]]>
    -
    -
    - Granule identification -
    - -
    - - - Unique identification of a tile - - - - - - - - The granules identification and information - DATATION - INIT_LOC_INV - CLOUD_INV - INIT_LOC_PROD - GEO_S2 - - - - - - - The granule geometry - - - - - - - - - - - Position of the granule in the Group of Source Packets. This position is identified through the position of the scenes first lines in the datastrip and is expressed as number of 10m resolution images lines - - - - - - - - - - GPS date-time of the first line of the granule. The date-time is given with a precision of one nanosecond. - - - - DATATION - INIT_LOC_PROD - - - - - - - The granule footprint on ground : list of 5 (lat, lon, h) points. Altitude is provided over the geoid. This footprint is provided as a polygon counter-clockwise oriented. The polygon must be closed (the first and last vertices are the same). - - - - - The granule footprint in the QL display: list of 4 (l,c) points - - - - - Information provided for each granule, at the center of the granule - - - - - - The granule centre on ground : 1 (lat, lon, h) point. Altitude is provided over the geoid. - - - - - The granule centre in the QL display: 1 (l,c) point - - - - - Incidence angles corresponding to the center of the granule - - - - - Solar angles corresponding to the center of the granule - - - - - - - - - - - A percentage of degraded ancillary data is provided for each granule - - - - - A percentage of degraded MSI data is provided for each granule - - - - - - - - - Granule identifier - - - - - - - - Detector identifier - - - - - - - - - - - The granules identification and information - DATATION - INIT_LOC_INV - CLOUD_INV - INIT_LOC_PROD - GEO_S2 - - - - - - - List of the granules composing the datastrip - - - - - - - - - Datastrip identifier - - - - - - - - - - - - - - - - - - - - - - Radiometric quality indicators for each band - - - - - - - - - Noise model parameters (α,β), allowing to estimate the noise as sigma*sigma = α*α+β*S , where S is the signal expressed as digital counts - - - - - - First coefficient of the noise (constant noise) - - - - - Second coefficient of the noise (signal noise) - - - - - - - - Absolute calibration accuracy (%) - - - - - Cross-band calibration accuracy (%) - - - - - Multi-temporal calibration accuracy (%) - - - - - - - - - - - - - - - - Present only Level-1B and Level-1C - - - - - - - - - Cloud Pixel percentage computed for the granule - - - - - - - List of source packets lost / degraded for each couple (band ; detector) - - - - - - - - - Cloud Pixel percentage computed for the granule - - - - - - - List of source packets lost / degraded for each couple (band ; detector) - - - - - - - - - Cloud Pixel percentage computed for the granule - - - - - - - List of source packets lost / degraded for each couple (band ; detector) - - - - - - - - - Unique Identifier of a Sentinel2 datastrip - - - - - - - - - - - - - - Unique Identifier of a Sentinel2 datastrip - - - - - - - - - - - - Folder - - - - - XML Main Metadata File - - - - - - - Position of the granule in the origin Datatake - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - List of source packets lost / degraded for each couple (band ; detector) - - - - - - - - - - - - - - Image Folder - - - - - - This file comprises all the ISP grouped by band and within each band in the observation sequence. - - - - - - - - Folder - - - - - - OLQC XML formatted - - - - - - - - - - Folder - - - - - XML Main Metadata File - - - - - - - - - - - - Processing Baseline - - - - - - - - - - - - - - - - - - - - - - - - - - - - - List of granules composing the whole datastrip. - - - - - - For each detector, list of the granules composing the datastrip - - - - - - - - - - - - - - - Position of the granule in the Group of Source Packets. This position is identified through the position of the scenes first lines in the datastrip and is expressed as number of 10m resolution images lines - - - - - - - - - - - Granule identifier - - - - - - - - - - - Detector identifier - - - - - - - - - - - - - MSI Sensor configuration (Information from MSI telemetry) - - - - - - - - - - - - - - - Datastrip Level Decoded Ancillary Data - - - - - - - - - - - - - - - - - - - - - - Datastrip Auxiliary Data - - - - - - IERS bulletin. These data are provided for the start acquisition date. - - - - DATATION - - - - - - - Reference to the used GIPP files including DEM identifiers and versions - - - - - DEM type used by the production process (GLOBE or SRTM for example) - - - - - - - - - - - - - - - - - - - Folder - - - - - - One Jpeg File - - - - - OLQC XML formatted - - - - - - - - - - - Folder - - - - - XML Main Metadata File - - - - - - - Position of the granule in the origin datastrip - - - - - - - - - - - - - - - - Pointer to the Mask files contained in the QI_DATA folder - - - - - - - - - - - - Image Folder - - - - - - Image data in JPEG2000 format, one file per band. - - - - - - 4 Files - - - - - 6 Files - - - - - 3 Files - - - - - - - - - - - Folder - - - - - - OLQC XML formatted - - - - - - - - - - - Folder - - - - - XML Main Metadata File - - - - - - - - - Processing Baseline - - - - - - Processing Baseline - - - - - - - - - - - - - - - - - - - - - - - - - - - - - List of granules composing the whole datastrip. - - - - - - For each detector, list of the granules composing the datastrip - - - - - - - - - - - - - - - Position of the granule in the Group of Source Packets. This position is identified through the position of the scenes first lines in the datastrip and is expressed as number of 10m resolution images lines - - - - - - - - - - - Granule identifier - - - - - - - - - - - Detector identifier - - - - - - - - - - - - - MSI Sensor configuration (Information from MSI telemetry) - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Datastrip Level Decoded Ancillary Data. - - - - - - - - - - - - - - - - - - - - - - - - - - Datastrip Level Auxiliary Data - - - - - - IERS bulletin. These data are provided for the start acquisition date. - - - - DATATION - - - - - - - Reference to the GIPP used: DEM, etc. - - - - - DEM type used by the production process (GLOBE or SRTM for example) - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Folder - - - - - - One Jpeg File - - - - - OLQC XML formatted - - - - - - - - - - - Folder - - - - - XML Main Metadata File - - - - - - - Position of the granule in the origin datastrip. - - - - - - - - - - - - - - - - Pointer to the Mask files contained in the QI_DATA folder - - - - - - - - - - - - Image Folder - - - - - - Image data in JPEG2000 format, one file per band. - - - - - - 4 Files - - - - - 6 Files - - - - - 3 Files - - - - - - - - - - - Folder - - - - - - OLQC XML formatted - - - - - - - - - - - Folder - - - - - XML Main Metadata File - - - - - - - - - Processing Baseline - - - - - - Processing Baseline - - - - - - - - - - - - - - - - - - - - - - - - - - - - - List of granules composing the whole datastrip. - - - - - - For each detector, list of the granules composing the datastrip - - - - - - - - - - - - - - - Position of the granule in the Group of Source Packets. This position is identified through the position of the scenes first lines in the datastrip and is expressed as number of 10m resolution images lines - - - - - - - - - - - Granule identifier - - - - - - - - - - - Detector identifier - - - - - - - - - - - - - MSI Sensor configuration (Information from MSI telemetry) - - - - - - - - - - - - - - - - - - - - - - - Datastrip Level Decoded Ancillary Data - - - - - - - - - - - - - - - - - - - - - Datastrip Level Auxiliary Data - - - - - - IERS bulletin. These data are provided for the start acquisition date. - - - - DATATION - - - - - - - Reference to the GIPP used: DEM, etc. - - - - - DEM type used by the production process (GLOBE or SRTM for example) - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Folder - - - - - - One Jpeg File - - - - - OLQC XML formatted - - - - - - - - - - - Folder - - - - - XML Main Metadata File - - - - - - - Position of the granule in the origin datastrip. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Pointer to the Mask files contained in the QI_DATA folder - - - - - - - - - - - - Image Folder - - - - - - Image data in JPEG2000 format, one file per band. - - - - - - 4 Files - - - - - 6 Files - - - - - 3 Files - - - - - - - - - - - Folder - - - - - - OLQC XML formatted - - - - - - - - - - - Folder - - - - - XML Main Metadata File - - - - - - - - - Identification of the source datastrip acquisition. General information. - - - - - - - - - - - - Processing Baseline - - - - - - Processing Baseline - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - List of the tiles composing the whole datastrip. - - - - - - - - - - - TILE_IDENTIFIER - - - - - - - - - - - MSI Sensor configuration (Information from MSI telemetry) - - - - - - - - - - - - - - - - - - - - - - - - - - Datastrip Level Decoded Ancillary Data - - - - - - - - - - - - - - - - - - - - - - Datastrip Level Auxiliary Data - - - - - - IERS bulletin. These data are provided for the start acquisition date - - - - DATATION - - - - - - - Reference to the GIPP used - - - - - - - - - - - - Folder - - - - - - One Jpeg File - - - - - OLQC XML formatted - - - - - - - - - - - PDI identification string (granules, datastrip, SAD) - - - - - - - - - The archive latency (On-line / Off-line) - - - - - - - - - The list of MRFs used by a component. - - - - - - - - The MRF filename - - - - - The MRF Validity start time - - - - - The MRF Validity stop time - - - - - - - - - - The different type of GIPP - - - - - - - - - - - - - GIPP file name: it may be several files (BAND_ID, detectors ...) - - - - -
    diff --git a/sen2cor/cfg/DICO/1.0/PDGS/spacecraft/spacecraft.xsd b/sen2cor/cfg/DICO/1.0/PDGS/spacecraft/spacecraft.xsd deleted file mode 100755 index 75da09b..0000000 --- a/sen2cor/cfg/DICO/1.0/PDGS/spacecraft/spacecraft.xsd +++ /dev/null @@ -1,56 +0,0 @@ - - - - - - - S2*. - - - - - - - - Number of satellites (between 1 and 2) - - - - - - - - - S2 - - - - - - - - A, B - - - - - - - - - S2A-S2B - - - - - - - - - - - - - - - diff --git a/sen2cor/cfg/DICO/1.0/PDGS/station/StationUnavailability.xsd b/sen2cor/cfg/DICO/1.0/PDGS/station/StationUnavailability.xsd deleted file mode 100755 index db121a8..0000000 --- a/sen2cor/cfg/DICO/1.0/PDGS/station/StationUnavailability.xsd +++ /dev/null @@ -1,43 +0,0 @@ - - - - - - Details of unavailability - - - - - Enum type of unavailability : PLANNED or UNPLANNED - - - - - - - - - - - Type for Details of unavailability - - - - - Date/Time of unavailability start - - - - - Date/Time of unavailability end - - - - - Commented Reason for unavailability - - - - - - diff --git a/sen2cor/cfg/DICO/1.0/SY/date_time/date_time.xsd b/sen2cor/cfg/DICO/1.0/SY/date_time/date_time.xsd deleted file mode 100755 index 9a3bec4..0000000 --- a/sen2cor/cfg/DICO/1.0/SY/date_time/date_time.xsd +++ /dev/null @@ -1,275 +0,0 @@ - - - - - An non UTC date-time value with a precision of one microsecond - - - date-time value restricted to the yyyy-mm-ddThh:mm:ss.ssssss pattern - - - - - - - - - - An non UTC date-time value with a precision of one millisecond - - - date-time value restricted to the yyyy-mm-ddThh:mm:ss.ssssss pattern - - - - - - - - - - seconds by Ascending or Descending Node - - - - - - - - - A TAI date-time value - - - date-time value restricted to the - yyyy-mm-ddThh:mm:ss(.sss) pattern and excluding - thus a TimeZone definition. - - - - - - - - - - A GPS date-time value = TAI format - - - date-time value restricted to the - yyyy-mm-ddThh:mm:ss(.sss) pattern and excluding - thus a TimeZone definition. - - - - - - - - - - A GPS date-time value (= TAI format) with a precision of one nanosecond - - - date-time value restricted to the - yyyy-mm-ddThh:mm:ss(.sss) pattern and excluding - thus a TimeZone definition. - - - - - - - - - - An instrument measurement date-time value = TAI format - - - date-time value restricted to the - yyyy-mm-ddThh:mm:ss(.sss) pattern and excluding - thus a TimeZone definition. - - - - - - - - - - An UTC date-time value - - - date-time value restricted to the - yyyy-mm-ddThh:mm:ss(.sss)Z pattern and excluding - thus a TimeZone definition. - - - - - - - - - - An UTC date-time value - - - date-time value restricted to the - yyyy-mm-ddThh:mm:ss(.sss)Z pattern and excluding - thus a TimeZone definition. - - - - - - - - - - - An UTC date-time value with a precision of one microsecond - - - date-time value restricted to the yyyy-mm-ddThh:mm:ss.ssssssZ pattern - - - - - - - - - - An UTC date-time value with a precision of one millisecond - - - date-time value restricted to the yyyy-mm-ddThh:mm:ss.sssZ pattern - - - - - - - - - - An UTC date-time value with a precision of one second - - - -
      -
    • a fractional seconds definition (value has a precision of one second)
    • -
    • a TimeZone definition
    • -
    ]]>
    -
    -
    -
    - - - -
    - - - An UTC date-time value with a precision of one tenth-of-a-microsecond - - - date-time value restricted to the yyyy-mm-ddThh:mm:ss.sssssssZ pattern - - - - - - - - - - A non UTC (a TAI) date-time value with a precision of one tenth-of-a-microsecond - - - date-time value restricted to the yyyy-mm-ddThh:mm:ss.sssssssZ pattern - - - - - - - - - - Jour julien CNES - - - - - Julian Day - - - - - - - - - - Number of seconds (can be more than the number of seconds in a day). - - - - - - - - - - - - Time data types used in EOF Header - - - $Revision: 1.1 $ $Date: 2011/06/16 11:11:18 $ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - CNES Julian day without seconds - - - - - -
    diff --git a/sen2cor/cfg/DICO/1.0/SY/geographical/geographical.xsd b/sen2cor/cfg/DICO/1.0/SY/geographical/geographical.xsd deleted file mode 100755 index d447df2..0000000 --- a/sen2cor/cfg/DICO/1.0/SY/geographical/geographical.xsd +++ /dev/null @@ -1,160 +0,0 @@ - - - - - - A Lat/Lon coordinate - - - - - - - - - A polygon defined by n Lat/Lon points - - - - - - - - A -180/+180 degree longitude - - - - Degree - - - - - - - - - - - A -90/+90 degree latitude - - - - Degree - - - - - - - - - - - Altitude (m) - - - - - - List of 2D vertices counter-clockwise oriented (for WFS compatibility). The polygon must be closed (the first and last vertices are the same). - - - - - Point list. The coordinates of the points are entered as pairs of latitude and longitude values, or X and Y, or other - - - - - Point list. The coordinates of the points are entered as pairs of latitude and longitude values, or X and Y, or other - - - - - - - List of 3D vertices counter-clockwise oriented (for WFS compatibility). The polygon must be closed (the first and last vertices are the same). - - - - - Point list. The coordinates of the points are entered as triplets of latitude, longitude and altitude values, or X, Y and Z, or other - - - - - Point list. The coordinates of the points are entered as triplets of latitude, longitude and altitude values, or X, Y and Z, or other - - - - - - Geodetic data types - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/sen2cor/cfg/DICO/1.0/SY/image/image.xsd b/sen2cor/cfg/DICO/1.0/SY/image/image.xsd deleted file mode 100755 index 375350c..0000000 --- a/sen2cor/cfg/DICO/1.0/SY/image/image.xsd +++ /dev/null @@ -1,804 +0,0 @@ - - - - - Spectral band identification - - - - - - - - - - - - - - - Spectral band identification - - - - - - - - - - - - - - - - - - - Spectral band identification - - - - - - - - - - - - - Spacecraft name (Sentinel-2A/B/…) - - - Spacecraft name (Sentinel-2A/B/…) - - - - - - - - - - - Spectral band physical name - - - - - - - - - - - - - - - - - - - - Metadata level Brief/Standard/Expertise - - - - - - - - - - Spectral band index - - - - - - - - - - - - - - - - - - - - Spectral band index with TDI (B3, B4, B11 and B12) - - - - - - - - - - - - - - - List of the resolution of the bands - - - - - - - - - - Focal plane identifier : VNIR or SWIR - - - - - - - - - VNIR spectral band identification - - - - - - - - - Datastrip identification string - - - -GS[SS]_[YYYYMMDDTHHMMSS]_[RRR]_[TTTTT], where :
    -
      -
    • [SS] : identifies the Sentinel2 satellite : “2A” or “2B”.
    • -
    • [SS] : identifies the Sentinel2 satellite : “2A” or “2B”.
    • -
    • [YYYYMMDDTHHMMSS] : identifies the datastrip start date (example 20121001T09575020) in UTC time
    • -
    • [RRR] : Processing center, for GPP the value is “GPP”
    • -
    • [TTTTT] : Number of sources packets level 0, B2 band
    • -
    ]]>
    -
    -
    -
    - - - -
    - - - SWIR spectral band identification - - - - - - - - - - - -observation-id: L[pp]_S[SS]_[YYYYMMDDTHHMMSS]_[dd], rec-id: [RRR], where:
    -
      -
    • [pp] : identifies the processing level : “0_”, “1A”, “1B”, “1C” .
    • -
    • [SS] : identifies the Sentinel2 satellite : “2A” or “2B”.
    • -
    • [YYYYMMDDTHHMMSS] : identifies the first line date on the MSI-Scene (ex. 20121001T09575020) in UTC time
    • -
    • [dd] : 2 digits identifying the detector (from 01 to 12)
    • -
    • [RRR] : reception centre : “CGS1”, “CGS2”, “CGS3”, “PAC1”, “PAC2”
    • -
    ]]>
    -
    -
    - Granule identification -
    - -
    - - - Granule identification (L1A and L1B) - - - -GS[SS]_[YYYYMMDDTHHMMSS]_[RRR]_[TTTTT], where :
    -
      -
    • [SS] : identifies the Sentinel2 satellite : “2A” or “2B”.
    • -
    • [SS] : identifies the Sentinel2 satellite : “2A” or “2B”.
    • -
    • [YYYYMMDDTHHMMSS] : identifies the datastrip start date (example 20121001T09575020) in UTC time
    • -
    • [RRR] : Processing center, for GPP the value is “GPP”
    • -
    • [TTTTT] : Number of sources packets level 0, B2 band
    • -
    ]]>
    -
    -
    -
    - -
    - - - Detector identification - - - - - - - - - - - - - - - - - - - - Group of Source Packets identification string (without .bin extension) - - - -GS[SS]_[YYYYMMDDTHHMMSS]_[RRR]_[TTTTT], where :
    -
      -
    • [SS] : identifies the Sentinel2 satellite : “2A” or “2B”.
    • -
    • [SS] : identifies the Sentinel2 satellite : “2A” or “2B”.
    • -
    • [YYYYMMDDTHHMMSS] : identifies the datastrip start date (example 20121001T09575020) in UTC time
    • -
    • [RRR] : Processing center, for GPP the value is “GPP”
    • -
    • [TTTTT] : Number of sources packets level 0, B2 band
    • -
    ]]>
    -
    -
    -
    - - - -
    - - - Type of degradation of the source packet - - - - - - - - - The size (row and column) of an image - - - - - Number of columns - - - - - - - - - - Number of rows - - - - - - - - - - - - The size (row and column) of each resolution band of an image - - - - - Number of rows - - - - - - - - - - Number of columns - - - - - - - - - - Horizontal pixel dimension - - - - - Vertical pixel dimension - - - - - - - - - - GIPP identifier - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - JPEG_2000 compression type - - - - - - - - - QL geometry (inventory process) or full resolution geometry (production process) - - - - - - - - - Left or Right side of a detector - - - - - - - - - - - - - - - - - - - - Datatake identification string - - - -GS[SS]_[YYYYMMDDTHHMMSS]_[RRRRRR], where :
    -
      -
    • [SS] : identifies the Sentinel2 satellite : “2A” or “2B”.
    • -
    • [YYYYMMDDTHHMMSS] : identifies the datatake start date (Fourteen digits, date and time separated by the character T)
    • -
    • [RRRRRR] : identifies the sensing Absolute Orbit Number: 000001-999999
    • -
    ]]>
    -
    -
    -
    - - - -
    - - - Pixel managment : true (corrected), false (not detected and not corrected), detection (detected but not corrected) - - - - - - - - - - Type of refining - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Flag to identify if the Refined Geometric Model File is computed or obtained from a existing RGMF (reused) - - - - - - -
    diff --git a/sen2cor/cfg/DICO/1.0/SY/misc/misc.xsd b/sen2cor/cfg/DICO/1.0/SY/misc/misc.xsd deleted file mode 100755 index 003d9f2..0000000 --- a/sen2cor/cfg/DICO/1.0/SY/misc/misc.xsd +++ /dev/null @@ -1,820 +0,0 @@ - - - - - Ohm unit - - - - - - - - int value expresssed in Ohm ('Ohm' unit attribute) - - - - - - - - - - Email address. - - - - - - - - Adresse Ftp. - - - - - - List of floating point numbers - - - - - - Space separated list of 2 double values - - - - - - - - Space separated list of 3 double values - - - - - - - - Space separated list of 6 double values - - - - - - - - Space separated list of 8 double values - - - - - - - - Space separated list of 13 double values - - - - - - - - An unbounded list of doubles - - - - - - An unbounded list of int values - - - - - - Space separated list of 2 int values - - - - - - - - Space separated list of 8 int values - - - - - - - - - - - - - arcsec unit - - - - - - - - meter unit - - - - - - - - milli meter unit - - - - - - - - milli meter per second unit - - - - - - - - milli radian unit - - - - - - - - radian unit - - - - - - - - - - - - - - - - - - nanosecond unit - - - - - - - - - - - - - degree per second unit - - - - - - - - degree celsius unit - - - - - - - - pixel unit - - - - - - - - - - - - - - - - - - - Space separated list of 3 double values expressed in millimeters ('mm' unit attribute) - - - - - - - - - - Space separated list of 3 double values expressed in millimeters per seconds ('mm/s' unit attribute) - - - - - - - - - - Space separated list of 3 double values expressed in degree per seconds ('mm/s' unit attribute) - - - - - - - - - - - - - - - - - int value expressed in seconds ('s' unit attribute) - - - - - - - - - - int value expressed in meters ('m' unit attribute) - - - - - - - - - - int value expressed in pixels ('pixel' unit attribute) - - - - - - - - - - double value expressed in seconds ('s' unit attribute) - - - - - - - - - - double value expressed in milliseconds ('ms' unit attribute) - - - - - - - - - - double value expressed in seconds ('ns' unit attribute) - - - - - - - - - - double value expressed in degree ('deg' unit attribute) - - - - - - - - - - double value expressed in meters ('m' unit attribute) - - - - - - - - - - double value expressed in milliradians ('m/rad' unit attribute) - - - - - - - - - - - - - - double value expressed in radians ('rad' unit attribute) - - - - - - - - - - double value expressed in degree Celsius unit ('°C' unit attribute) - - - - - - - - - - double value expressed in nm - - - - - - - - - - double value expressed in meters ('arcsec' unit attribute) - - - - - - - - - - a 1 variable polynomial model ( z = P(x)) - - - A 1variable polynome must have (DEGREE+1) coefficients. <br> - The coefficients are written in the list by ascending order of their degree. <br> - For each degree the coefficients are ordered by the greatest degree of the first variable. <br> - Example of degree 3 polynome : <br> - P(x,y) = a + bx + cy + dx2 + exy + fy2 + gx3 + hx2y + ixy2 + jy3 <br> - coefficients list : [a,b,c,d,e,f,g,h,i,j] - - - - - - - - - - - - - - The length of the list must be DEGREE+1, first is constant coefficient - - - - - - - - - - - - - - - - - Describes a position in an array (raw_index, column_index) - - - The position in an array must be coherent with the origin of the array (count element start) - - - - - - - - - - - - - - - - - - - - - - - - - - - - - A 3*3 matrix (e.g. a rotation matrix). - - - - - - - - - - A 3*N matrix (double values) - - - - - - - - - - A 6*N matrix (double values) - - - - - - - - - - - - - - - - - - - - - - - First rotation (angles around an axis) - - - - - Second rotation (angles around an axis) - - - - - Third rotation (angles around an axis) - - - - - - - - - First rotation (angles around an axis) - - - - - Second rotation (angles around an axis) - - - - - Third rotation (angles around an axis) - - - - - A scale factor on Z axis (in order to model the focal length deformation) - - - - - The combination order between rotation and scale factor transformations - - - - - - - - - - - - - - - A 1variable polynome must have (DEGREE+1) coefficients. <br> - The coefficients are written in the list by ascending order of their degree. <br> - For each degree the coefficients are ordered by the greatest degree of the first variable. <br> - Example of degree 3 polynome : <br> - P(x,y) = a + bx + cy + dx2 + exy + fy2 + gx3 + hx2y + ixy2 + jy3 <br> - coefficients list : [a,b,c,d,e,f,g,h,i,j] - - - X,Y,Z uncertainties - - - - - - - - - - - - A 1variable polynome must have (DEGREE+1) coefficients. <br> - The coefficients are written in the list by ascending order of their degree. <br> - For each degree the coefficients are ordered by the greatest degree of the first variable. <br> - Example of degree 3 polynome : <br> - P(x,y) = a + bx + cy + dx2 + exy + fy2 + gx3 + hx2y + ixy2 + jy3 <br> - coefficients list : [a,b,c,d,e,f,g,h,i,j] - - - Rotation, translation and homothety transformation uncertainties (X,Y,Z uncertainties) - - - - - - - - - - - - - - - - A 1variable polynome must have (DEGREE+1) coefficients. <br> - The coefficients are written in the list by ascending order of their degree. <br> - For each degree the coefficients are ordered by the greatest degree of the first variable. <br> - Example of degree 3 polynome : <br> - P(x,y) = a + bx + cy + dx2 + exy + fy2 + gx3 + hx2y + ixy2 + jy3 <br> - coefficients list : [a,b,c,d,e,f,g,h,i,j] - - - Rotation, translation and homothety transformation uncertainties (X,Y,Z uncertainties) in lower case - - - - - - - - - - - - - - A relative position (-1, 0 or 1) - - - - - - - - - - An unbounded list of doubles relative position (-1, 0 or 1) - - - - - - Navigation Solution Method - - - - - - - - - - - - - milli volt unit - - - - - - - - double value expressed in milli Volt unit ("mV"' unit attribute) - - - - - - - - - - List of boolean values corresponding in flags values - - - - - - List of 11 boolean values - - - - - - - Basic data types - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - integer value expressed in seconds ('ns' unit attribute) - - - - - - - - - - Space separated list of 3 integer values expressed in millimeters ('mm' unit attribute) - - - - - - - - - - Space separated list of 3 long values - - - - - - - - An unbounded list of long values - - - - - - Space separated list of 3 integer values expressed in millimeters per seconds ('mm/s' unit attribute) - - - - - - - - - - Space separated list of 3 double values expressed in meters ('m' unit attribute) - - - - - - - - - - Space separated list of 3 double values expressed in meters per seconds ('m/s' unit attribute) - - - - - - - - - - meter per second unit - - - - - - diff --git a/sen2cor/cfg/DICO/1.0/SY/orbital/HeaderTypes_Orbit.xsd b/sen2cor/cfg/DICO/1.0/SY/orbital/HeaderTypes_Orbit.xsd deleted file mode 100755 index 6f635c7..0000000 --- a/sen2cor/cfg/DICO/1.0/SY/orbital/HeaderTypes_Orbit.xsd +++ /dev/null @@ -1,49 +0,0 @@ - - - - Orbit Data Types - - - $Revision: 1.2 $ $Date: 2011/07/26 13:12:15 $ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/sen2cor/cfg/DICO/1.0/SY/orbital/orbital.xsd b/sen2cor/cfg/DICO/1.0/SY/orbital/orbital.xsd deleted file mode 100755 index af71881..0000000 --- a/sen2cor/cfg/DICO/1.0/SY/orbital/orbital.xsd +++ /dev/null @@ -1,262 +0,0 @@ - - - - - - - - - - - Number of pixels - - - - - - - - - - List of Tangent Psi X in the image order (there is one data by pixel) - - - - - List of Tangent Psi Y in the image order (there is one data by pixel) - - - - - - - - - Number of pixels - - - - - - - - - - List of Tangent Psi X in the image order (there is one data by pixel) - - - - - List of Tangent Psi Y in the image order (there is one data by pixel) - - - - - - - orbit (ascending / descending) direction - - - - - - - - - Orbit number - - - - - - Cyclic orbit number - - - - - - - - - orbit type (predicted, restituted) - - - - - - - - Orbit Data Types used in Orbit definitions - - - $Revision: 1.2 $ $Date: 2011/07/26 13:12:15 $ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/sen2cor/cfg/DICO/1.0/SY/platform/platform.xsd b/sen2cor/cfg/DICO/1.0/SY/platform/platform.xsd deleted file mode 100755 index 0f282eb..0000000 --- a/sen2cor/cfg/DICO/1.0/SY/platform/platform.xsd +++ /dev/null @@ -1,41 +0,0 @@ - - - - - A list of quaternion values. - - - - - - Space separated list of 4 quaternion values ordered as Q0 Q1 Q2 Q3 - - - - - - - - - - - - - - - A double value between -1 and 1. - - - - - - - - - - - - - - - diff --git a/sen2cor/cfg/DICO/1.0/SY/representation/representation.xsd b/sen2cor/cfg/DICO/1.0/SY/representation/representation.xsd deleted file mode 100755 index 478c106..0000000 --- a/sen2cor/cfg/DICO/1.0/SY/representation/representation.xsd +++ /dev/null @@ -1,49 +0,0 @@ - - - - - - EPSG code : it should follow the 'EPSG:xxxx' pattern where xxxx is the unique identification code in the EPSG tables. - - - - - - - - - - - - - - Identifier of the organization responsible for tables used for identifying coordinate sytem parameters. - - - - - - - - - - - Horizontal coordinate reference system - - - - - - - Code of horizontal coordinate reference system. It should follow the 'EPSG:xxxx' pattern where xxxx is the unique identification code in the EPSG tables. - - - - - - - Projection Code - - - - diff --git a/sen2cor/cfg/DICO/1.0/SY/spatio/spatio.xsd b/sen2cor/cfg/DICO/1.0/SY/spatio/spatio.xsd deleted file mode 100755 index cc9769f..0000000 --- a/sen2cor/cfg/DICO/1.0/SY/spatio/spatio.xsd +++ /dev/null @@ -1,97 +0,0 @@ - - - - - - - Sigma quality report for spatiotriangulation - - - - - - - - Histogram for X, Y and Z - - - - - Value in meters - - - - - Value in meters - - - - - - - - - - - Histogram in line and column - - - - - Value in pixel - - - - - - - - - - The histogram defines : a space-separated list of percent values, the first (MIN) and last (MAX) indexes for significant percent values (i.e. sup 0.0), the mean and standard deviation values - - - - - - - - - - - - - - - - Percent values (number depending on the STEP) - - - - - Histogram step - - - - - First index of significant percent value (i.e. > 0.0) - - - - - Last index of significant percent value (i.e. > 0.0) - - - - - Histogram mean value - - - - - Histogram standard deviation - - - - - diff --git a/sen2cor/cfg/DICO/1.0/SY/tile/tile.xsd b/sen2cor/cfg/DICO/1.0/SY/tile/tile.xsd deleted file mode 100755 index a57b558..0000000 --- a/sen2cor/cfg/DICO/1.0/SY/tile/tile.xsd +++ /dev/null @@ -1,246 +0,0 @@ - - - - - - - - Description of a tile in a given representation - - - - - - EPSG code. It should follow the 'EPSG:xxxx' pattern where xxxx is the unique identification code in the EPSG tables. - - - - - Tile dimensions for each resolution band - - - - - - Number of rows - - - - - - - - - - Number of columns - - - - - - - - - - - - - - XDIM and YDIM for each resolution band - - - - - - Upper-left coordinate (X value) of the tile - - - - - Upper-left coordinate (Y value) of the tile - - - - - Horizontal pixel dimension - - - - - Vertical pixel dimension - - - - - - - - - - - Description of a tile with its bounding box in a given representation - - - - - - EPSG code. It should follow the 'EPSG:xxxx' pattern where xxxx is the unique identification code in the EPSG tables. - - - - - Measure unit of the upper-left coordinates of the tile. The measure unit corresponds with the final representation. - - - - - - - - - - - Upper-left coordinate (X value) of the tile (in UNIT measure unit) - - - - - Upper-left coordinate (Y value) of the tile (in UNIT measure unit) - - - - - Dimensions for 10, 20 and 60m bands - - - - - - Tile dimensions for each resolution band XDIM and YDIM (in UNIT measure unit) - - - - - - Number of rows - - - - - - - - - - Number of columns - - - - - - - - - - Horizontal pixel dimension - - - - - Vertical pixel dimension - - - - - - - - - - - - Bounding box coordinates of a tile. This bounding box lists the 4 corner points in lat/lon, clockwise defined, starting from upper left corner. - - - - - - - Unique identification of a tile - - - - - - Description of a tile in a given representation - - - - - - EPSG code. It should follow the 'EPSG:xxxx' pattern where xxxx is the unique identification code in the EPSG tables. - - - - - Tile dimensions for each resolution band - - - - - - Number of rows - - - - - - - - - - Number of columns - - - - - - - - - - - - - - XDIM and YDIM for each resolution band - - - - - - Upper-left coordinate (X value) of the tile - - - - - Upper-left coordinate (Y value) of the tile - - - - - Horizontal pixel dimension - - - - - Vertical pixel dimension - - - - - - - - - diff --git a/sen2cor/cfg/Inventory_Metadata.xsd b/sen2cor/cfg/Inventory_Metadata.xsd deleted file mode 100755 index 62e1744..0000000 --- a/sen2cor/cfg/Inventory_Metadata.xsd +++ /dev/null @@ -1,321 +0,0 @@ - - - - - - - - - - - PDI_ID (Applicable to Granule, Tile, Datastrip PDI) - - - - - - - - - - - - Datastrip PDI_ID (Applicable to Granule and Tile PDI linked to a Datastrip PDI) - - - - - - - - Label identifying all the PDIs that can be included in a User Product (Applicable to Granule, Tile and Datastrip PDI) (Applicable to Granule, Tile and Datastrip and PDI) - - - - - - - - Equal to File_ID metadata (Applicable to Granule, Tile, Datastrip PDI) - - - - - - - - - - - - Processing Baseline (Applicable to Granule, Tile and Datastrip PDI) - - - - - - - - - - System where the PDI is generated by DPC or MCC (Applicable to Granule, Tile, Datastrip PDI) - - - - - - - - - - - PDI generator processor name (Applicable to Granule, Tile, Datastrip PDI) - - - - - - - - - - Version of the core component ie version of DPC (Applicable to Granule, Tile, Datastrip PDI) - - - - - - - - - - PDI Generation Time (Applicable to Granule, Tile, Datastrip PDI) Template: UTC=2013-01-01T,5:11:10 - - - - - - - - - - Sensing Start Time or Validity Start Time (Applicable to Granule, Tile, Datastrip PDI) Template: UTC=2013-01-01T,5:11:10 - - - - - - - - - - - Sensing Stop Time or Validity Stop Time (Applicable to Granule, Tile, Datastrip PDI) Template: UTC=2013-01-01T,5:11:10 - - - - - - - - - - - Start Absolute Orbit number (Applicable to Granule, Tile, Datastrip PDI) - - - - - - - - - - Stop Absolute Orbit number will be the same of Start Absolute Orbit number (Applicable to Granule, Tile, Datastrip PDI) - - - - - - - - - - Granule/Tile/Datastrip footprint (Applicable to Granule, Tile and Datastrip PDI) - - - - - - - - - - - - - List of polygon vertex in term of (lat,lon) points, in counter-clockwise order - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Percentage for PDI Quality Indicator (Applicable to Granule, Tile, Datastrip PDI) - - - - - - - - - - - PDI Size defined in Mb (Applicable to Granule, Tile, Datastrip PDI) - - - - - PDI File Type (Applicable to Granule, Tile, Datastrip PDI) - - - - - - - - - - Detector ID (Applicable for Granule PDI) - - - - - - - - - - - Timeliness (Applicable to Granule, Tile and Datastrip PDI) - - - - - - - - - - - - - - - - MSI fixed string (Applicable to Granule, Tile, Datastrip PDI) - - - - - - - - MSI Image mode (Applicable to Granule, Tile and Datastrip PDI) - - - - - - - - - - - - - - - - - Acquisition Station Code (Applicable to Granule, Tile, Datastrip PDI) - - - - - - - - Processing Station Code, equal to System metadata (Applicable to Granule, Tile, Datastrip PDI) - - - - - - - - S2A or S2B. NIL if applicable to both satellites - - - - - - - - - - - - True if acquisition has been done during the ascending phase of the orbit (Applicable to Granule, Tile, Datastrip PDI) - - - - - - - - - - - Cloud coverage percentage (Applicable to Granule, Tile, Datastrip PDI) - - - - - - - - - - - - diff --git a/sen2cor/cfg/L2A_GIPP.xml b/sen2cor/cfg/L2A_GIPP.xml index 733cc23..d6b0440 100644 --- a/sen2cor/cfg/L2A_GIPP.xml +++ b/sen2cor/cfg/L2A_GIPP.xml @@ -1,153 +1,62 @@ - + - INFO + INFO + 1 + DEFAULT NONE - + http://data_public:GDdci@data.cgiar-csi.org/srtm/tiles/GeoTIFF/ - - S2_User_Product_Level-1C_Metadata.xsd - S2_User_Product_Level-2A_Metadata.xsd - S2_PDI_Level-1C_Tile_Metadata.xsd - S2_PDI_Level-2A_Tile_Metadata.xsd - S2_PDI_Level-1C_Datastrip_Metadata.xsd - S2_PDI_Level-2A_Datastrip_Metadata.xsd + + S2-PDGS-TAS-DI-PSD-V13.1_Schema/S2_User_Product_Level-1C_Metadata.xsd + S2-PDGS-TAS-DI-PSD-V13.1_Schema/S2_User_Product_Level-2A_Metadata.xsd + S2-PDGS-TAS-DI-PSD-V13.1_Schema/S2_PDI_Level-1C_Tile_Metadata.xsd + S2-PDGS-TAS-DI-PSD-V13.1_Schema/S2_PDI_Level-2A_Tile_Metadata.xsd + S2-PDGS-TAS-DI-PSD-V13.1_Schema/S2_PDI_Level-1C_Datastrip_Metadata.xsd + S2-PDGS-TAS-DI-PSD-V13.1_Schema/S2_PDI_Level-2A_Datastrip_Metadata.xsd + L2A_GIPP.xsd + L2A_CAL_SC_GIPP.xsd + L2A_CAL_AC_GIPP.xsd - GlobalSnowMap.tiff - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - - + 0 - - - 0.18 - 0.22 - 0.08 - 0.25 - 0.15 - 0.35 - 0.012 - 0.035 - 0.25 - 0.12 - 0.018 - 0.0 - 0.35 - 0.65 - -0.24 - -0.16 - 0.20 - 0.42 - 0.36 - 0.47 - 0.12 - 0.25 - 0.85 - 0.95 - 1.50 - 2.50 - 0.90 - 1.10 - -0.40 - 0.46 - 0.8 - 1.5 - 2.00 - 4.00 - 0.1 - -0.09 - 6.96000 - 5.26667 - 5.37708 - 7.52000 - 5.45000 - 2.55000 - 0.75 - + - lib h99000_wv20_rura.atm 1 + 1 1 0 + 0 + 0.22 + 0 1.000 - + 23.0 - - 0.000 + + 0.100 100.0 0.25 - - 1.0 + - - - - 0.442250 - 0.492225 - 0.560310 - 0.663085 - 0.703959 - 0.742381 - 0.781725 - 0.833331 - 0.865816 - 0.942251 - 1.373680 - 1.609431 - 2.193888 - - - - - 0.442250 - 0.492225 - 0.560310 - 0.663085 - 0.703959 - 0.742381 - 0.781725 - 0.833331 - - 0.865816 - - 0.942251 - 1.373680 - 1.609431 - 2.193888 - - - diff --git a/sen2cor/cfg/S2_PDI_Level-1C_Datastrip_Metadata.xsd b/sen2cor/cfg/S2_PDI_Level-1C_Datastrip_Metadata.xsd deleted file mode 100755 index 1aee746..0000000 --- a/sen2cor/cfg/S2_PDI_Level-1C_Datastrip_Metadata.xsd +++ /dev/null @@ -1,25 +0,0 @@ - - - - - - Instance of the Level-1C_DataStrip_ID - - - - - - - - - - - - - diff --git a/sen2cor/cfg/S2_PDI_Level-1C_Datastrip_Structure.xsd b/sen2cor/cfg/S2_PDI_Level-1C_Datastrip_Structure.xsd deleted file mode 100755 index c01ca1c..0000000 --- a/sen2cor/cfg/S2_PDI_Level-1C_Datastrip_Structure.xsd +++ /dev/null @@ -1,70 +0,0 @@ - - - - - Instance of the Datastrip_ID - - - - - Folder - - - - - XML Metadata File - - - - - - - - - - - - - - - - - - - - - - Folder - - - - - - OLQC reports XML formatted - - - - - - - - XML File - - - - - - XML File - - - - - - Folder - - - - - - - diff --git a/sen2cor/cfg/S2_PDI_Level-1C_Tile_Metadata.xsd b/sen2cor/cfg/S2_PDI_Level-1C_Tile_Metadata.xsd deleted file mode 100755 index bf0b0cf..0000000 --- a/sen2cor/cfg/S2_PDI_Level-1C_Tile_Metadata.xsd +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - - - - - - - diff --git a/sen2cor/cfg/S2_PDI_Level-1C_Tile_Structure.xsd b/sen2cor/cfg/S2_PDI_Level-1C_Tile_Structure.xsd deleted file mode 100755 index 7712fff..0000000 --- a/sen2cor/cfg/S2_PDI_Level-1C_Tile_Structure.xsd +++ /dev/null @@ -1,108 +0,0 @@ - - - - - - Folder - - - - - XML Metadata File - - - - - - - - - - - - - - - - Image Folder - - - - - - Image data in JPEG2000 format, one file per band. Image File naming convention = PDI_ID_BandIndex.JP2 - - - - - - 4 Files - - - - - 6 Files - - - - - 3 Files - - - - - - - - - - - Folder - - - - - - OLQC reports XML formatted - - - - - GML Quality Mask files - - - - - PVI Preview Image file - - - - - - - - Folder containing ECMWF data resampled in UTM projection - - - - - - XML File - - - - - - XML File - - - - - - Folder - - - - - - diff --git a/sen2cor/cfg/S2_PDI_Level-2A_Datastrip_Metadata.xsd b/sen2cor/cfg/S2_PDI_Level-2A_Datastrip_Metadata.xsd deleted file mode 100755 index 6051754..0000000 --- a/sen2cor/cfg/S2_PDI_Level-2A_Datastrip_Metadata.xsd +++ /dev/null @@ -1,25 +0,0 @@ - - - - - - Instance of the DIMAP_Level-2A_DataStrip_ID - - - - - - - - - - - - - diff --git a/sen2cor/cfg/S2_PDI_Level-2A_Datastrip_Structure.xsd b/sen2cor/cfg/S2_PDI_Level-2A_Datastrip_Structure.xsd deleted file mode 100755 index 2a41cd0..0000000 --- a/sen2cor/cfg/S2_PDI_Level-2A_Datastrip_Structure.xsd +++ /dev/null @@ -1,42 +0,0 @@ - - - - - Instance of the DataStrip_ID - - - - - Folder - - - - - XML Main Metadata File - - - - - - - - - - - - - - - - - - - - - - - diff --git a/sen2cor/cfg/S2_PDI_Level-2A_Tile_Metadata.xsd b/sen2cor/cfg/S2_PDI_Level-2A_Tile_Metadata.xsd deleted file mode 100755 index 537bba6..0000000 --- a/sen2cor/cfg/S2_PDI_Level-2A_Tile_Metadata.xsd +++ /dev/null @@ -1,18 +0,0 @@ - - - - - - - - - - - - diff --git a/sen2cor/cfg/S2_PDI_Level-2A_Tile_Structure.xsd b/sen2cor/cfg/S2_PDI_Level-2A_Tile_Structure.xsd deleted file mode 100755 index cc28900..0000000 --- a/sen2cor/cfg/S2_PDI_Level-2A_Tile_Structure.xsd +++ /dev/null @@ -1,156 +0,0 @@ - - - - - - Folder - - - - - XML Main Metadata File (DIMAP_S2_Level-2A_Tile.xsd) - - - - - - - - - - - - - - - - Image Folder. Surface reflectance Image data in JPEG2000 format, one file per band and per resolution. Image File naming convention = PDI_ID_BandIndex.JP2 - - - - - - - - - 4 channels (B2, B3, B4, B8) omitting the original 20m and 60m channels - - - - - 1 file: Aerosol Optical Thickness map (at 550nm) - - - - - 1 file: Scene-average Water Vapour map - - - - - - - - - - - 9 channels (B2, B3, B4, B5, B6, B7, B8a, B11, B12), omitting the original 60m channels - - - - - 1 file: Aerosol Optical Thickness map (at 550nm) - - - - - 1 file: Scene-average Water Vapour map - - - - - - - - - - - 11 channels (B1, B2, B3, B4, B5, B6, B7, B8a, B9, B11, B12) excluding the 1375 nm cirrus band B10, as it does not contains surface information - - - - - 1 file: Aerosol Optical Thickness map (at 550nm) - - - - - 1 file: Scene-average Water Vapour map - - - - - - - - Image data in JPEG2000 format, Scene Classification image provides an attribute to each pixel to indicate its type (cloud, snow, vegetation, land, water, etc...). Image File naming convention = PDI_ID_SC.JP2. Available at 20m and 60m resolution. - - - - - - - - Folder - - - - - - Raster mask values range from 0 for high confidence clear sky to 100 for high confidence cloudy. Unsigned Integer. JPEG2000. 8bit. available at 20m and 60m resolution. - - - - - Raster mask values range from 0 for high confidence NO snow/ice to 100 for high confidence snow/ice. Unsigned Integer. JPEG2000. 8bit. available at 20m and 60m resolution. - - - - - PVI Preview Image file - - - - - Level-1C Quality Indicators at pixel level - - - - - - These masks are derived from Level-1B processing and are provided for each band and tile (defective pixels mask, saturated pixels mask and no-data pixels mask). GML vector file - - - - - These L1C technical quality masks (MSI lost data, MSI degraded data, ancillary lost data, ancillary degraded data) are provided for each band and tile. GML vector file. - - - - - Mask providing the ground footprint of each detector within a tile. GMLvector file. - - - - - - - - - - - diff --git a/sen2cor/cfg/S2_User_Product_Level-1C_Metadata.xsd b/sen2cor/cfg/S2_User_Product_Level-1C_Metadata.xsd deleted file mode 100755 index 5d67580..0000000 --- a/sen2cor/cfg/S2_User_Product_Level-1C_Metadata.xsd +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - - - - - diff --git a/sen2cor/cfg/S2_User_Product_Level-1C_Structure.xsd b/sen2cor/cfg/S2_User_Product_Level-1C_Structure.xsd deleted file mode 100755 index f659e86..0000000 --- a/sen2cor/cfg/S2_User_Product_Level-1C_Structure.xsd +++ /dev/null @@ -1,75 +0,0 @@ - - - - - - - - XML Main Metadata File - - - - - - Folder containing the Tiles composing the product - - - - - - - - - - - - Folder containing ECMWF data resampled in UTM projection - - - - - - - - - - - - Folder containing the DataStrip composing the product - - - - - - Folder containing (if requested by the user, download option) all Auxiliary Data used for the processing - - - - - - Browse Image File (PNG) - - - - - XML manifest file (SAFE) - - - - - Folder (SAFE) - - - - - XML INSPIRE metadata file - - - - - Folder containing a product presentation file - - - - - diff --git a/sen2cor/cfg/S2_User_Product_Level-2A_Metadata.xsd b/sen2cor/cfg/S2_User_Product_Level-2A_Metadata.xsd deleted file mode 100755 index 25af26c..0000000 --- a/sen2cor/cfg/S2_User_Product_Level-2A_Metadata.xsd +++ /dev/null @@ -1,20 +0,0 @@ - - - - - - - - - - - - - - - diff --git a/sen2cor/cfg/S2_User_Product_Level-2A_Structure.xsd b/sen2cor/cfg/S2_User_Product_Level-2A_Structure.xsd deleted file mode 100755 index 68d21cd..0000000 --- a/sen2cor/cfg/S2_User_Product_Level-2A_Structure.xsd +++ /dev/null @@ -1,70 +0,0 @@ - - - - - - - - XML Main Metadata File - - - - - - Folder containing the Tiles composing the product - - - - - - - - - - - - Folder containing ECMWF data resampled in UTM projection - - - - - - - - - - - - Folder containing the Datastrip Metadata and Quality Indicators at Datastrip level - - - - - - Folder containing all Auxiliary Data used for Level-2A processing - - - - - - - - - - - Preview Image file. (JPEG) - - - - - XML file - - - - - diff --git a/sen2cor/cfg/manifest.safe b/sen2cor/cfg/manifest.safe index 0ecad41..0d6e6c0 100755 --- a/sen2cor/cfg/manifest.safe +++ b/sen2cor/cfg/manifest.safe @@ -6,7 +6,7 @@ GENERATOR_ID: $Id: ManifestBuilderS2.C,v 1.6 2014/08/05 14:31:35 enrcar Exp $ ================================================================================= --> - wJMaFv@6A5ztJ;-L?Qico`<&C$4gZu{#4-tfCvpG^ zj&P)a_=kQ7UO&b^ga!ZtymH(=!r^e=I|0C}f6IT62M+PJ9>?z($3lb;D*4y5^>_V$+XH_T zf80mhCqScyRz(8{{L!{M|H zY>c#YEc9?V6DJc3J39h_pk?IZ=HlRH<3Mm6-vokR3L}P5k&sYv(81|A{$;_{0XPZp zg#ajo3lP8|P&fqF1Q7VoQ6jvxzZr~g6F>>^R+5mCk>e+n(cs?}P$&W3emnvEs5gEb z5WFCV{zq|{ky znR6F^QbH@MsH$mS)zQ_{zh+=&e#_$a9ZM@GXBSsDcMs2i`+-5h4<3d@J&BHqje8oO z@FMMHdPZhec203gX<2ziWmR=UV^ecWYg>Cq-~0X#1A`xjh9{?{XJ+R<&o6vgU0dJS z+}hsR-8<%W%=1_IejIx<}><)U1k_*)iBj0YR0^jHGVBRa?vCFhbIM3W{Wwoe8-8jsDU zSI3g?__Nvd6;SW{%CEfxW}1cruWsj;nZZ=wK`ZPCky`zHA8_N%V4yb#BtQsDOyy!qn z@la@7Wg z&NN2#!2*^kci)>5c;sQpHq(;D_S(_s8F+Seye5J?zrq<_?WZSzf9|PRg(_c(1q{r^w^lLpR5l_YL&#(=++;I=Sa`gU#MGZ|WjjJ?i zBErWbZx6su7liTX@Eh(+twXcdSP>oBx&!fu2b-)q6-CzV$goBV6&;-#wkIPSDHOSn zydHVT);utOxVPkjJSwBN8*|q%(Ggd*n-iV!Lt4n>JT-_{r;|0el^ZXG zFh=bdYtJpLN32dIN!CWvR=tou`WiCP_Ti8kWB9CSYo-R{kkrD2DOX-e^d9&6bjW{D zZIR9MP4J$S(3H0CB^v>6eK{u_xEGNQoSgMc~8KL!HN4 zy|UNELzy*-Idd-OUd}{>0hrWN?tk98)H~FEsw^aCG!+O+uONvhN! zN-qfxs+A43e1@lI`8sMY%>*oN=e#=#&K#$=6ug@hV^6O5T%JHaAGo{F&sUgGrCKt- z=pRPvCuOktqG0c?mdOXZ6_wg#jx|fzB(<14vCAxQQeZ>T&odkmRokGZD<5g7Rx9&M zglbgHQ1_MC)sp84<{h=EDxr^{|BtI~q-BQJ$^K zb=uwP3VSYxyaX}_O1Yy$W$7P=Dj!zLnfia+pbQ(+M9^%e>>ibSdRgU@|?U|MmvUWna$t0kXlkUC{#ypQQi_^eT4-CjXd z$A;WQI{NsR*pxBp7bY-<#bqXJcgGRRWwn0GHukP}Pdc)FX4|AMDcA{zJ=>SpdVf+Rt`Wm0d}79hiMb1Pj%7V} zCoO29k1s7&cGf^lrFHrpaN!VNeUp}JWq0_@&B@Y~(TYpv!gzY2Cl091#DrAd>}OjO zzx={iqF~eGjG$8H$I_i3$3CUIxhJu8ZyV_qO(WAR=}C3=Tl?a5ZRU3UZLXWyo`Y_t zP*PJ2&kquNNP1Oq!GV?pTl>Lc-auJf-ram5=S1!^7l?Fr8yq@Zd7fufq0V%P&33Gv zkF5jy1I>9-BGr}p>5)D*b;R`?yD3!9J66YsB|=D_%Tgz}&HBmJChoH&477}?uG6QV zuONyX>Q#3iX7$_AHTx2~<#4k73}l)K&@SjMNiKRY!W9sf^~engNR?f+bVH8s>q1d& zMjszjSYe)*FwMtjMRtM@3K}D8r1$o86O0X1W=-SuUtM9%9Pm9IqB3xiC)TfR*pMw! zi+PY)lDx}zny+#n2LhGP7`5RujCtr4qRd(->(vNt)vavOU5}~aVRJ(ZGp^k<`IGjl zOPg6->*)eWbLuWyS1_H;?tKSppqGs0*Z1Oxo=MON72rcULgtEJA*;eiYu&^=QvFCo zgLx`Yykf;ulJV(wwOy)EL=rIUKTu9vus$(iL^6Yd>p7YA`?ck@AK0WsyOu|JJuD`) zeP$b+e{%RQkbYT`+=PoS?dzRZ>WoLSf}^o{0LYNR>XuJ7W7 zeps%(UVW>S)~fn$IojE@h;JQ%+*^SmB2chC916UcehQmod7EG>0&dz!wZSAiqI zE6;FjB(0)t{I-m|hr{4T7IuG+bRiJWnYuUD_t84Efk_zDkFYw4Vi@Zu5 z&F1B#skPM%RMu6R4w|3`$WK?d&aRDIVmfi2d2L^MTuMjtkk66*Z+ImuqzP~h- zh{(UQaP~PzQSEr~1nE0<04pd}tU~wQO{3pn-Sx z37IkRTw9CjSBfDs_t!j#2}aVoK2e)3T~cLdbrk2@l1`yku`XxO_lr{PM~I2p&!g(( zKlc^h9(0j$Vr?rtsFk>@*!{^mKIF@kKtw5b!Kp6H?I)X?*~3fRvuW@O$0X`W1(sDS zZOS9FPJLQ`MAqJR=CH|fl{j%zT3WfIMi17+p!29Fpl$6Siplvghei>-&NBVOQ=VHX zRB_q^F67s^D$g!(`*~b4vzs}$KVY;~;VtsOP`y27*MG%nLNbCo^w2UTGLZ$mvGBt1 z=sab86m&SxbXWK~ZFtoNDp&3ouO55$zeBr@4n%7z0lL46&x@Bc`MNtiHd2Ut)zGAL z(Lhs)?l-*7=6&Hy_Gc0M!A(tF4304ygi6w1FV;0YpRMEQdcW%&0UE0=&jPahd(gaH ze81=LKeS^!koIz=ueKvJ8q#bp-0N`L_{>mL>3ZjCg2w&q0AXT4$j& zOqV%S+_ECFO?<6Xka{gsDRog>My2%G_6-QqunNf$oDOdH>Yb6u*BT4y&NOOr3Y8U< zPuG@Z0XnDD6_I-(q}(%Wmb@thF^U#sY21kr<3t=FHQbT>2Zp}nO^~^WV4ZTV zRpNlnHEir1XkNG7Ar6mJ>63vf>rx6hy^)*M_br*;QrNw++}Jf>Pxd8yUxe;jb=3;dTTbD z{=1$|Nu!94*FGU&HFf2!@ijf?0S$!i5Fc!zV-p9+hM!EzQqVN#VVLX2S!hQ0Z-i`A z^Flj>j~H7mADXXHXc{h)8R(0kJ*i)}ALPshP6{!+vsjljI|)D_90*yPOt2 zdMMC$D_rJEE5AVMmpm~_Q)74K#zDfu_c#16IK5%|pt05rJTjXO4I2$IA3H}2d4@f- z(7$B$b9k^c_hmv8Zva}VOPh%pU18-

    s>J=|E0Hsco4>5ay{j29g1qYF>OZ+} zH#+T-ZL!*s>^PFXYgo`!<&zN>mw1_M@-*RNd4>P5F#kByWCZt;61Y9j3+3X-M zH7plwK^_0*!%ni-V2iPcQcUt8S#=06G_hhuIPeBCBa#)N7df(<@YZs2jA~$E*=FOJ z^sG-F7n?UsaYr|u4*!!`$3z#J(@2pL;eb&BH-rNY3NnPuqFpOyP;-MrH<#c^)q!UR!Rwbx3(V=%nbgk*mHiR$Ej)ve_7 zJ{_G|qKjRySz}FmQ_InYFgB&|W{XjUucUR|v&P@1ObF+PH%E+(Sf3U!0b@RIVi@dX iVS%mP{Vnrko@+^{vkk1f`0oYW(DxtWzstYof&T*SHGEzG diff --git a/sen2cor/setup.py b/sen2cor/setup.py index e84bef7..4af9de1 100755 --- a/sen2cor/setup.py +++ b/sen2cor/setup.py @@ -19,4 +19,4 @@ ) if __name__ == '__main__': - pass + pass diff --git a/setup.py b/setup.py index 38ade7c..efa8fdb 100755 --- a/setup.py +++ b/setup.py @@ -11,19 +11,17 @@ # 'python setup.py install' and follow the instructions ... # -from setuptools import setup, find_packages -from distutils.dir_util import mkpath, copy_tree +from setuptools import setup +from distutils.dir_util import mkpath from distutils.file_util import copy_file import os, sys, platform -import urllib -import zipfile, tarfile name = 'sen2cor' # # This needs to be changed with each new version: #------------------------------------------------ -version = '2.0.6' -longVersion = '02.00.06' +version = '2.1.2' +longVersion = '02.01.02' # # Do not change anything below: #---------------------------------------------------------------------------- @@ -134,6 +132,7 @@ def copyConfiguration(): except: sys.stderr.write('Cannot create the L2A_Process.bash script under:\n' + SEN2COR_HOME + '\n') return False + # create the glymur configuration file for OpenJPEG2: glymurrc = '[library]\n' glymurrc += 'openjp2: ' + libOpj2Target + '\n'