تصحيح الغلاف الجوي لملاحظات لون المحيط الملوث ببريق الشمس
فرانسوا شتاينميتز
بيير إيف ديشامب
ديدييه رامون
هيجيوس
هذا هو تطبيق python/cython لخوارزمية تصحيح البوليمر الجوي. http://www.opticsinfobase.org/oe/abstract.cfm?uri=oe-19-10-9783
البوليمر مكتوب بلغة python3. يوصى بشدة باستخدام أناكوندا لتثبيت جميع التبعيات المطلوبة. نسخة miniconda كافية. يمكن استخدام الملف environment.yml
لتثبيت التبعيات، إما في بيئة anaconda الحالية أو في بيئة جديدة.
لإنشاء بيئة أناكوندا جديدة (تثبيت بيثون مستقل) مع تبعيات البوليمر:
conda create -n polymer -c conda-forge mamba conda activate polymer mamba env update -f environment.yml
يمكن تنزيل البيانات المساعدة باستخدام الأمر التالي:
$ make auxdata_all
ملفات pyx هي ملفات cython التي تحتاج إلى تحويلها إلى لغة C، ثم تجميعها. يتم توفير ملف makefile، لذلك فقط اكتب:
$ make
ملاحظة: سيقوم الأمر make all
بتنزيل الملفات المساعدة والمتابعة إلى التجميع.
هناك واجهة سطر أوامر أضيق الحدود polymer_cli.py
./polymer_cli.py <level1> <level2>
أين يوجد ملف أو دليل المستوى 1 لأي من أجهزة الاستشعار المدعومة، وما هي النتيجة التي سيتم إنشاؤها.
راجع ./polymer_cli.py -h
لمزيد من المساعدة
تتوفر المزيد من الخيارات عن طريق تشغيل البوليمر مباشرة من برنامج بايثون النصي الخاص بك.
من بوليمر.الاستيراد الرئيسي run_atm_corrمن بوليمر.المستوى 1 استيراد المستوى 1 من البوليمر.المستوى 2 استيراد Level2run_atm_corr(Level1('MER_RR__1PRACR20050501_092849_000026372036_00480_16566_0000.N1'، <وسائط المستوى 1 الاختيارية الأخرى>)، Level2('output.nc'، <وسائط المستوى2 الاختيارية الأخرى>)، <وسائط البوليمر الاختيارية>)
راجع example.py
لمزيد من التفاصيل...
المعالجة المتعددة
أحد الخيارات هو multiprocessing
، والتي تتحكم في عدد الخيوط المتاحة لمعالجة البوليمر (افتراضيًا، يتم تعطيل المعالجة المتعددة). لتنشيط المعالجة على عدد من الخيوط يساوي عدد النوى الموجودة على وحدة المعالجة المركزية، قم بتمرير القيمة -1
:
run_atm_corr(..., multiprocessing=-1)
يتحكم هذا الخيار في توازي معالجة البوليمر الأساسية. ومع ذلك، يعتمد البوليمر على numpy، والذي يمكنه أيضًا استخدام المعالجة المتوازية، وينتج عنه استخدام معتدل للنوى المتعددة. لإلغاء تنشيط المعالجة المتعددة numpy أيضًا، يمكنك تمرير متغير البيئة OMP_NUM_THREADS=1
(أو استخدام مكتبة Threadpoolctl)
يجب توفير بيانات الاعتماد للوصول إلى البيانات الإضافية لناسا في ملف ~/.netrc الخاص بك:
cd ~ touch .netrc echo "machine urs.earthdata.nasa.gov login uid_goes_here password password_goes_here" > .netrc chmod 0600 .netrc
مزيد من المعلومات هنا: https://urs.earthdata.nasa.gov/documentation/for_users/data_access/curl_and_wget
يمكن توفير البيانات المساعدة (عمود الأوزون الإجمالي، سرعة الرياح، الضغط السطحي) إلى فئة المستوى 1 من خلال فئة Ancillary_NASA (ملفات ناسا بتنسيق hdf4):
من بوليمر.ancillary استيراد Ancillary_NASA Level1(<اسم الملف>، ancillary=Ancillary_NASA())
ملاحظة : تحتوي فئة Ancillary_NASA
على خيارات افتراضية للتنزيل تلقائيًا وتحديد أقرب مجموعة بيانات متاحة، في المجلد ANCILLARY/METEO/
تتم تهيئة هذا المجلد باستخدام الأمر make ancillary
أو make all
.
لمزيد من المعلومات حول المعلمات الاختيارية، يرجى الاطلاع على مساعدة Ancillary_NASA
.
اختياريًا، يمكن توفير البيانات الإضافية (عمود الأوزون الإجمالي، وسرعة الرياح، والضغط السطحي) من خلال إعادة التحليل العالمي ERA-Interim الخاص بـ ECMWF.
راجع https://www.ecmwf.int/en/forecasts/datasets/reanalogy-datasets/era-interim
تعد وحدات python التالية ضرورية لواجهة Polymer مع ERA-Interim: * عميل ecmwf python api (لتنزيل ملفات ERA-Interim بسرعة) يعد مفتاح ECMWF ضروريًا. راجع https://software.ecmwf.int/wiki/display/WEBAPI/Access+ECMWF+Public+Datasets * pygrib، لقراءة ملفات ERA-Interim بتنسيق grib.
يتم استخدام البيانات المساعدة ERA-Interim عن طريق تمرير الفئة Ancillary_ERA إلى المعلمة المساعدة للمستوى 1.
من Polymer.ancillary_era استيراد Ancillary_ERA Level1(<اسم الملف>، ancillary=Ancillary_ERA())
افتراضيًا، يتم استخدام البيانات الأقرب في الوقت تلقائيًا، ويتم تنزيلها سريعًا إذا لزم الأمر. لمزيد من المعلومات، يرجى الاطلاع على مستندات Ancillary_ERA.
يمكن أيضًا توفير البيانات الإضافية من خلال مجموعة بيانات ERA5 الخاصة بـ ECMWF: https://www.ecmwf.int/en/forecasts/datasets/reanalogy-datasets/era5
وحدات بايثون التالية مطلوبة:
com.cdsapi. مطلوب مفتاح CDS API. يرجى الاطلاع على https://cds.climate.copernicus.eu/api-how-to لمزيد من التفاصيل.
الأشعة السينية
من Polymer.ancillary_era5 استيراد Ancillary_ERA5 Level1(<اسم الملف>، ancillary=Ancillary_ERA5())
يوفر هذا القسم معلومات حول تنسيقات الملفات وأجهزة الاستشعار المدعومة.
ملاحظة : تقوم الفئة Level1
( from polymer.level1 import Level1
) بالكشف التلقائي عن تنسيق الملف وإرجاع كائن المستوى 1 المحدد المناسب (Level1_MERIS، وLevel1_OLCI، وما إلى ذلك).
يتم دعم كل من FF (دقة منخفضة) وFR (دقة كاملة).
مثال:
frompolymer.level1_meris import Level1_MERISLevel1_MERIS('MER_RR__1PRACR20050501_092849_000026372036_00480_16566_0000.N1') # الوسائط الاختيارية: sline، eline، ancillary
يتم دعم كل من RR وFR. اسم المنتج Level1 هو اسم الدليل.
مثال:
منpolymer.level1_olci import Level1_OLCILevel1_OLCI('S3A_OL_1_EFR____20170123T102747_20170123T103047_20170124T155459_0179_013_279_2160_LN1_O_NT_002.SEN3') # الوسائط الاختيارية: sline، eline، scol، ecol، ancillary
يتطلب MODIS وSeaWiFS وVIIRS ملفات Level1C كمدخل. راجع القسم التالي حول ملفات المستوى 1C لمزيد من المعلومات.
مثال:
frompolymer.level1_nasa import *Level1_MODIS('A2010120124000.L1C')Level1_SeaWiFS('S2000116121145.L1C')Level1_VIIRS('V2013339115400.L1C') # الوسائط الاختيارية: sline، eline، scol، إيكول، المساعدة
يشير اسم منتج المستوى 1 إلى المسار إلى الحبيبة (في الدليل "GRANULE/").
مثال:
من بوليمر.level1_msi استيراد Level1_MSILevel1_MSI('S2A_OPER_PRD_MSIL1C_PDMC_20160504T225644_R094_V20160504T105917_2016 0504T105917.SAFE/GRANULE/S2A_OPER_MSI_L1C_TL_SGS__20160504T163055_A004524_T30TXR_N02.02 ') # الوسائط الاختيارية: sline، eline، المساعدة
يدعم البوليمر إدخال بيانات ascii (CSV) من أجهزة استشعار متعددة من خلال فئة المستوى 1 Level1_ASCII.
يمكن استخدام Level1_NETCDF لقراءة منتجات MERIS أو OLCI أو Sentinel2 بتنسيق netCDF4، المكتوب بواسطة SNAP، خاصة عند استخدامه للإعدادات الفرعية.
لا يتضمن NASA OBPG L1A وL1B جميع التصحيحات الإشعاعية اللازمة. وبالتالي فمن الضروري تطبيق l2gen
مع خيارات مخصصة لكتابة انعكاسات TOA في ما نسميه منتج "Level1C".
سطر الأوامر عادة ما يكون:
l2gen ifile=<level1a> ofile=<level1c> gain="1 1 1 1 1 1 1 1" oformat="netcdf4" l2prod="rhot_nnn polcor_nnn sena senz sola solz latitude longitude"
راجع tools/make_L1C.py
، وهو برنامج نصي مساعد لإنشاء منتجات المستوى 1 ج.
يمكن أن تكون ملفات الإخراج بتنسيق hdf4 أو netcdf. وهي تحتوي على انعكاس الماء (عديم الأبعاد، ومقيس بالكامل للشمس ومستشعر عند النظير) ومعلمات أخرى لا تحتاج إلى شرح.
أعلام البوليمر هي كما يلي:
--------------------------------------------------------------------------------- | Flag name | Flag value | Description | |--------------------|-------------|--------------------------------------------| | LAND | 1 | Land mask | | CLOUD_BASE | 2 | Polymer's basic cloud mask | | L1_INVALID | 4 | Invalid level1 pixel | | NEGATIVE_BB | 8 | (deprecated flag) | | OUT_OF_BOUNDS | 16 | Retrieved marine parameters are outside | | | | valid bounds | | EXCEPTION | 32 | A processing error was encountered | | THICK_AEROSOL | 64 | Thick aerosol flag | | HIGH_AIR_MASS | 128 | Air mass exceeds 5 | | EXTERNAL_MASK | 512 | Pixel was masked using external mask | | CASE2 | 1024 | Pixel was processed in "case2" mode | | INCONSISTENCY | 2048 | Inconsistent result was detected | | | | (atmospheric reflectance out of bounds | | ANOMALY_RWMOD_BLUE | 4096 | Excessive difference was found at 412nm | | | | between Rw and Rwmod | --------------------------------------------------------------------------------|
العلامات الموصى بها لوحدات البكسل الناتجة هي كما يلي (يمثل '&' معامل البت AND):
------------------------------------------------------------------------------ | Sensor | Recommended flagging | Notes | | | (valid pixels) | | |----------|------------------------------|----------------------------------| | OLCI | bitmask & 1023 == 0 | | | | | | | MSI | bitmask & 1023 == 0 | | | | | | | MERIS | bitmask & 1023 == 0 | | | | | | | VIIRS | bitmask & 1023 == 0 | Sun glint and bright (cloudy) | | | and (Rnir<0.1) | pixels are discarded | | | and (Rgli<0.1) | | | | | | | SeaWiFS | bitmask & 1023+2048 == 0 | The INCONSISTENCY flag | | | | cleans up most noisy pixels | | | | | | MODIS | bitmask & 1023+4096 == 0 | The ANOMALY_RWMOD_BLUE removes | | | | outliers appearing on MODIS | | | | results at high SZA | -----------------------------------------------------------------------------|
ملاحظة: يوصى باستخدام إخفاء سحابي إضافي باستخدام IdePix (https://github.com/bcdev/snap-idepix).
يتوفر هذا البرنامج بموجب ترخيص Polymer v2.0، المتوفر في ملف LICENCE.TXT.
عند الاعتراف باستخدام البوليمر في الأوراق العلمية والتقارير وغيرها يرجى ذكر المرجع التالي:
فرانسوا شتاينميتز، بيير إيف ديشان، وديدييه رامون، "تصحيح الغلاف الجوي في ظل وجود بريق الشمس: التطبيق على MERIS"، Opt. اكسبريس 19، 9783-9800 (2011)، http://dx.doi.org/10.1364/OE.19.009783
فرانسوا ستاينميتز وديدييه رامون "Sentinel-2 MSI وSentinel-3 OLCI منتجات ألوان المحيط المتسقة باستخدام POLYMER"، Proc. SPIE 10778، الاستشعار عن بعد للمحيطات المفتوحة والساحلية والمياه الداخلية، 107780E (30 أكتوبر 2018)؛ https://doi.org/10.1117/12.2500232