الفلك

مجموعة ثلاثية الأبعاد في بيانات FITS

مجموعة ثلاثية الأبعاد في بيانات FITS


We are searching data for your request:

Forums and discussions:
Manuals and reference books:
Data from registers:
Wait the end of the search in all databases.
Upon completion, a link will appear to access the found materials.

أنا عالم فلك هاوٍ أعمل حاليًا على مجموعة بيانات تلسكوب سبيتزر باستخدام الثعبان (علم الفلك و aplpy). من الأمثلة الموجودة على موقع Astropy على الويب ، فهمت أن بيانات FITS هي طريقة لتمثيل بيانات الصورة برؤوس يمكن للبشر قراءتها. ومع ذلك ، لدي الآن صورة مناسبة (SPITZER_I2_46469632_0000_0000_2_bcd.fits) وهي مجموعة ثلاثية الأبعاد من الأبعاد (64 ، 32 ، 32). أعتقد أن الإحداثيين الثاني والثالث هما طول الصورة وارتفاعها بالبكسل. ماذا عن البعد الأول؟ كيف أفسر مثل هذه الصور ونق في البيانات؟


يبدو لي أن إطار Spizter الكامل يجب أن يكون عادة 256 × 256 ولكن ، إذا كنت تراقب مصدرًا ساطعًا للغاية أو عندما تتطلب دقة زمنية عالية ، يتم تنفيذ وضع مراقبة مختلف حيث تتم قراءة 32 × 32 بكسل فقط من CCD. ومع ذلك ، ما يحدث هو أن أوقات التعرض قصيرة ويتم ملاحظة إجمالي 64 إطارًا ، مما يؤدي إلى إنشاء مكعب بيانات بحجم 64 × 32 × 32. إذا كنت ترغب في ذلك ، يمكنك معاملة كل إطار فردي بحجم 32 × 32 على أنه صورته الخاصة ، أو تكديسهم جميعًا معًا للحصول على الصورة الكاملة.

التفاصيل الكاملة يمكن العثور عليها هنا.


Sklearn.pre المعالجة.

يتم إعادة قياس كل عينة (أي كل صف من مصفوفة البيانات) مع مكون واحد غير صفري على الأقل بشكل مستقل عن العينات الأخرى بحيث يكون معيارها (l1 أو l2 أو inf) يساوي واحدًا.

هذا المحول قادر على العمل مع مصفوفة scipy.sparse كثيفة ومصفوفة scipy.sparse (استخدم تنسيق CSR إذا كنت تريد تجنب عبء النسخ / التحويل).

يعد قياس المدخلات إلى معايير الوحدة عملية شائعة لتصنيف النص أو التجميع على سبيل المثال. على سبيل المثال ، المنتج النقطي لمتجهي TF-IDF المعيارين من المستوى الثاني هو تشابه جيب التمام للمتجهات وهو مقياس التشابه الأساسي لنموذج فضاء المتجهات الذي يشيع استخدامه من قبل مجتمع استرداد المعلومات.

المعلمات معيار <"l1" ، "l2" ، "max"> ، افتراضي = "l2"

القاعدة المستخدمة لتطبيع كل عينة غير صفرية. إذا تم استخدام معيار = "max" ، فسيتم إعادة قياس القيم بأقصى القيم المطلقة.

ينسخ منطقي ، افتراضي = صحيح

اضبط على False لأداء تسوية الصف الداخلية وتجنب النسخ (إذا كان الإدخال عبارة عن مصفوفة numpy أو مصفوفة CSR scipy.sparse)

دالة مكافئة بدون مقدر API.

هذا المقدّر عديم الحالة (إلى جانب معلمات المُنشئ) ، والطريقة الملائمة لا تفعل شيئًا ولكنها مفيدة عند استخدامها في خط الأنابيب.

للمقارنة بين مختلف أدوات القياس والمحولات والمعايرة ، راجع الأمثلة / المعالجة المسبقة / plot_all_scaling.py.

لا تفعل شيئًا وأعد المقدر دون تغيير

تناسب البيانات ، ثم قم بتحويلها.

احصل على معلمات لهذا المقدّر.

اضبط معلمات هذا المقدّر.

مقياس كل صف غير صفري من X إلى معيار الوحدة

لا تفعل شيئًا وأعد المقدر دون تغيير

هذه الطريقة موجودة فقط لتنفيذ واجهة برمجة التطبيقات المعتادة وبالتالي العمل في خطوط الأنابيب.

المعلمات X من الشكل (n_samples، n_features)

البيانات لتقدير معلمات التسوية.

عائدات الذات موضوع

تناسب البيانات ، ثم قم بتحويلها.

يلائم المحول إلى X و y مع المعلمات الاختيارية fit_params ويعيد نسخة محولة من X.

المعلمات X صفيف يشبه الشكل (n_samples ، n_features)

ذ مصفوفة تشبه الشكل (n_samples،) أو (n_samples، n_outputs) ، افتراضي = لا شيء

القيم المستهدفة (لا شيء للتحولات غير الخاضعة للرقابة).

** fit_params قاموس

معلمات ملائمة إضافية.

عائدات X_new مصفوفة أشكال ndarray (n_samples، n_features_new)

احصل على معلمات لهذا المقدّر.

المعلمات عميق منطقي ، افتراضي = صحيح

إذا كان صحيحًا ، سيتم إرجاع معلمات هذا المقدّر والكائنات الفرعية المحتواة التي تعتبر مقدرات.

عائدات بارامز قاموس

تعيين أسماء المعلمات لقيمها.

اضبط معلمات هذا المقدّر.

تعمل الطريقة على المقدرات البسيطة وكذلك على الكائنات المتداخلة (مثل خط الأنابيب). يحتوي الأخير على معلمات من النموذج & ltcomponent & gt __ & ltparameter & gt بحيث يكون من الممكن تحديث كل مكون لكائن متداخل.

المعلمات ** بارامس قاموس

عائدات الذات مثيل مقدر

مقياس كل صف غير صفري من X إلى معيار الوحدة

المعلمات X من الشكل (n_samples، n_features)

البيانات المطلوب تسويتها ، صفًا تلو الآخر. يجب أن تكون مصفوفات scipy.sparse بتنسيق CSR لتجنب نسخة غير ضرورية.

ينسخ منطقي ، افتراضي = لا شيء

عائدات X_tr من الشكل (n_samples، n_features)


مخطط الحل:

لأخذ عينات من محورين: X و Y ، تحتاج إلى أخذ عينة من كل المحور Y لكل عينة على المحور X.

سينتج عن أخذ العينات الكامل على كلا المحورين نطاقات ، واحدة على المحور السيني وواحدة على المحور ص.

عند الانتهاء ، تحتاج إلى إنشاء مجال على المحور Z ، ويمكن القيام بذلك عن طريق حساب مسافات العينات (X ، Y).

يمكن بعد ذلك تشغيل المجال Z من خلال دالة Gaussian لإنتاج النطاق Gaussian فوق المحور Z.

يمكن بعد ذلك إنشاء رسام ثلاثي الأبعاد للاستفادة من النطاقات الثلاثة لإنتاج سطح ثلاثي الأبعاد.


Scipy.optimize.leastsq

توفر Scipy طريقة تسمى lesssq كجزء من حزمة التحسين الخاصة بها. ومع ذلك ، هناك مشكلتان:

  • هذه الطريقة غير موثقة جيدًا (لا توجد أمثلة سهلة).
  • تقديرات الخطأ / التغاير على معلمات الملاءمة ليست مباشرة للحصول عليها.

داخليا ، يستخدم lesssq طريقة التدرج Levenburg-Marquardt (خوارزمية الجشع) لتقليل وظيفة النتيجة.

الخطوة الأولى هي إعلان الوظيفة الموضوعية التي يجب تصغيرها:

يجب الآن تقديم بيانات اللعبة بطريقة أكثر تعقيدًا:

الآن ، يمكننا استخدام طريقة المربعات الصغرى:

لاحظ الوسيطة args ، وهي ضرورية لتمرير البيانات إلى الوظيفة.

يوفر هذا فقط تقديرات المعلمات (أ = 0.02857143 ، ب = 0.98857143).


مصفوفة ثلاثية الأبعاد في بيانات FITS - علم الفلك

مؤلف: صموئيل فارينز
سنة: 2018
إصدار: 5.0
البريد الإلكتروني: [email protected]
الموقع: sfarrens.github.io
الورقة المرجعية: arXiv: 1703.02305

يحتوي هذا المستودع على كود Python المصمم لتفكيك وتحليل PSF.

يحتوي الدليل lib على العديد من الوظائف والفئات الأساسية ، ولكن يتم توفير غالبية أدوات التحسين والتحليل في sf_tools.

بعد تنزيل المستودع أو استنساخه ، ما عليك سوى تشغيل:

لتشغيل sf_deconvolve ، يجب تثبيت الحزم التالية:

بايثون [تم الاختبار باستخدام الإصدار 2.7.11 و 3.6.3]

يتطلب التنفيذ الحالي لتحويلات المويجات بالإضافة إلى ذلك البرنامج النصي mr_transform.cc C ++ من مكتبة Sparse2D (https://github.com/CosmoStat/Sparse2D). ستحتاج نصوص C ++ هذه إلى التحويل البرمجي من أجل التشغيل. ملحوظة: يمكن تشغيل طريقة التقريب ذات الرتبة المنخفضة تمامًا في Python بدون الثنائيات Sparse2D.

الكود الأساسي هو برنامج نصي قابل للتنفيذ يسمى sf_deconvolve.py وهو مصمم لأخذ ملاحظة (بمعنى آخر. مع تأثيرات وضوضاء PSF) كومة من صور المجرات و PSF المعروف ، ومحاولة إعادة بناء الصور الأصلية. تنسيق الإدخال هو ملفات Numpy الثنائية (.npy) أو ملفات صور FITS (.fits).

يجب أن يكون لملفات الإدخال التنسيق التالي:

إدخال الصور: يجب أن يكون هذا إما ملف Numpy ثنائي أو ملف FITS يحتوي على مصفوفة ثلاثية الأبعاد من صور المجرات. على سبيل المثال لعينة من 10 صور ، كل منها بحجم 41 × 41 ، يجب أن يكون شكل المصفوفة [10 ، 41 ، 41].

إدخال PSF (s): يجب أن يكون هذا إما ملف Numpy ثنائي أو ملف FITS يحتوي على صفيف ثنائي الأبعاد (لـ PSF ثابت) أو مصفوفة ثلاثية الأبعاد (لـ PSF متغير مكانيًا) لصور PSF. بالنسبة للحالة المتغيرة مكانيًا ، يجب أن يتطابق عدد صور PSF مع عدد صور المجرات المقابلة. على سبيل المثال لعينة من 10 صور ، تتوقع الرموز 10 PSFs.

راجع الملفات المتوفرة في دليل الأمثلة للرجوع إليها.

تشغيل البرنامج النصي القابل للتنفيذ

يمكن تشغيل الكود في محطة طرفية (وليس في جلسة بايثون) على النحو التالي:

حيث يشير INPUT_IMAGES.npy إلى ملف Numpy الثنائي الذي يحتوي على مجموعة صور المجرات المرصودة ، يشير PSF.npy إلى PSF المقابل لكل صورة مجرة ​​ويحدد OUTPUT_NAME مسار الإخراج واسم الملف.

بدلاً من ذلك ، يمكن تخزين وسائط التعليمات البرمجية في ملف تكوين (بأي اسم) ويمكن تشغيل الكود من خلال توفير اسم الملف مسبوقًا بـ @.

يتم توفير مثال لملف التكوين في دليل الأمثلة.

تشغيل الكود في جلسة بايثون

يمكن تشغيل الكود في جلسة بايثون نشطة بطريقتين. لأي من الطريقتين ، قم أولاً باستيراد sf_deconvolve:

الطريقة الأولى تقوم ببساطة بتشغيل البرنامج النصي الكامل حيث يمكن تمرير وسيطات سطر الأوامر كقائمة من السلاسل:

يفترض الأسلوب الثاني أن المستخدم قد قرأ بالفعل الصور و PSF (s) في الذاكرة ويرغب في إعادة نتائج deconvolution إلى الذاكرة:

حيث INPUT_IMAGES و INPUT_PSFS كلاهما مصفوفتان Numpy. سيتم حفظ الصور الناتجة المفككة في المتغير primal_res.

في كلتا الحالتين من الممكن قراءة ملف التكوين المحدد مسبقًا.

يمكن تشغيل المثال التالي على بيانات العينة المتوفرة في دليل الأمثلة.

يأخذ هذا المثال عينة من 100 صورة مجرة ​​(مع تأثيرات PSF والضوضاء المضافة) و PSFs المقابلة ، ويستعيد الصور الأصلية باستخدام تقريب منخفض المرتبة عبر تحسين Condat-Vu.

يمكن أيضًا تشغيل المثال باستخدام ملف التكوين المتوفر.

ستكون النتيجة ملفين ثنائيين Numpy يسمى example_output_primal.npy و example_output_dual.npy يتوافقان مع المتغيرات الأولية والثنائية في خوارزمية التقسيم. ستكون الصور المعاد بناؤها في ملف example_output_primal.npy.

يمكن أيضًا تشغيل المثال باستخدام ملفات FITS المتوفرة.

-i INPUT ، - إدخال المدخلات: إدخال اسم ملف البيانات. يجب أن يكون الملف عبارة عن ملف ثنائي Numpy يحتوي على مجموعة من صور المجرات الصاخبة مع تأثيرات PSF (بمعنى آخر. مجموعة ثلاثية الأبعاد).

-p PSF ، --psf PSF: اسم ملف PSF. يجب أن يكون الملف عبارة عن ملف ثنائي Numpy يحتوي إما على: (أ) PSF واحد (بمعنى آخر. مجموعة ثنائية الأبعاد لـ مثبت تنسيق) أو (ب) كومة من PSFs المقابلة لكل صورة من صور المجرة (بمعنى آخر. مجموعة ثلاثية الأبعاد لـ obj_var صيغة).

-h ، - مساعدة: إظهار رسالة المساعدة والخروج.

-v ، - الإصدار: إظهار رقم إصدار البرنامج والخروج.

-q ، - هادئ: قم بإلغاء الإسهاب لكل تكرار.

-o ، - الإخراج: ضع اسم الملف. إذا لم يتم تحديد ملفات الإخراج سيتم وضعها في مسار ملف الإدخال.

--تنسيق الإخراج تنسيق ملف الإخراج [npy or fits].

-k، --_current_res: اسم ملف نتائج deconvolution الحالي (بمعنى آخر. الملف الذي يحتوي على النتائج الأولية من تشغيل سابق).

- ضوضاء_يست: التقدير الأولي للانحراف المعياري للضوضاء في صور المجرات المرصودة. إذا لم يتم تحديد هذه الكمية ، فسيتم حسابها تلقائيًا باستخدام متوسط ​​الانحراف المطلق لصورة (صور) الإدخال.

-m ، - الوضع : خيار لتحديد وضع التحسين [الكل ، متفرق ، منخفض أو غراد]. الكل ينفذ التحسين باستخدام كل من التقريب منخفض الرتبة والتناثر ، متناثر باستخدام القليل فقط ، lowr يستخدم فقط الرتبة المنخفضة و غراد يستخدم فقط النسب المتدرج. (افتراضي: lowr)

--opt_type : خيار لتحديد طريقة التحسين المراد تنفيذها [condat أو fwbw أو gfwbw]. condat يطبق طريقة التقسيم القريب Condat-Vu ، fwbw تنفذ التقسيم الأمامي والخلفي مع تسريع FISTA و gfwbw يطبق طريقة التقسيم الأمامي والخلفي المعممة. (افتراضي: condat)

- n_iter: عدد التكرارات. (افتراضي: 150)

--cost_window: نافذة لقياس دالة التكلفة (بمعنى آخر. فترة التكرارات التي يجب حساب التكلفة من أجلها). (افتراضي: 1)

- التقارب: تقارب التسامح. (افتراضي: 0.0001)

- no_pos: خيار لإيقاف قيد الإيجابية.

- نوع_رابط: خيار لتحديد نوع التدرج اللوني [psf_known ، psf_unknown ، لا شيء]. psf_known تنفذ deconvolution مع PSFs المقدمة ، psf_unknown يحسن PSF في وقت واحد أثناء أداء deconvolution ، لا أحد تنفذ deconvolution دون نزول متدرج (لأغراض الاختبار فقط). (افتراضي: psf_known)

--lowr_thresh_factor: عامل عتبة الرتبة المنخفضة. (افتراضي: 1)

- lowr_type: نوع التنظيم منخفض الرتبة [قياسي أو ngole]. (افتراضي: قياسي)

- lowr_thresh_type: نوع عتبة الرتبة المنخفضة [لينة أو صلبة]. (افتراضي: صعب)

--wavelet_type: نوع Wavelet المراد استخدامه (انظر وثائق iSap). (افتراضي: 1)

--wave_thresh_factor: عامل عتبة المويجة. (افتراضي: [3.0 ، 3.0 ، 4.0])

--n_reweights: عدد إعادة الوزن. (افتراضي: 1)

  • --lambda_psf: معلمة التحكم في التنظيم لتقدير PSF. (افتراضي: 1.0)
  • - beta_psf: خطوة التدرج لتقدير PSF. (افتراضي: 1.0)

--يستريح: معامل الاسترخاء (rho_n في طريقة Condat-Vu). (الافتراضي: 0.8)

--condat_sigma: Condat المعلمة المزدوجة القريبة. إذا تم توفير الخيار بدون أي قيمة ، فسيتم حساب القيمة المناسبة تلقائيًا. (الافتراضي: 0.5)

--condat_tau: Condat المعلمة الأولية القريبة. إذا تم توفير الخيار بدون أي قيمة ، فسيتم حساب القيمة المناسبة تلقائيًا. (الافتراضي: 0.5)

-c، --clean_data: تنظيف اسم ملف البيانات.

-r ، - بذور عشوائية: البذور عشوائي. استخدم هذا الخيار إذا كانت بيانات الإدخال عبارة عن مجموعة فرعية تم اختيارها عشوائيًا (ببذور معروفة) من العينة الكاملة للبيانات النظيفة.

- true_psf: اسم ملف PSFs صحيح.

- نواة: الانحراف المعياري للبكسل لنواة غاوسي. سيضاعف هذا الخيار نتائج deconvolution بنواة غاوسي.

--قياس: قياس متوسط ​​الأخطاء [وسيط أو متوسط]. (افتراضي: متوسط)

خطأ: حصلت svd () على وسيطة غير متوقعة للكلمة الرئيسية "lapack_driver"

قم بتحديث تثبيتات Numpy و Scipy


0. نموذج لوصف البيانات¶

سوف نستخدم بيانات عينة واحدة في جميع أنحاء هذا المنشور. بيانات العينة ذات صلة بصناعة النفط والغاز. أصله من الدكتور مايكل بيركز ، أستاذ هندسة البترول في جامعة تكساس في أوستن. يمكن العثور على البيانات الأصلية من مستودع جيثب الخاص به. يمكنك أيضًا استخدام التنزيل المباشر ، أو الوصول إليه مباشرةً باستخدام عنوان url للباندا كما هو موضح أدناه:

نحن سوف بور موج الشعر بإستمرار منظمة العفو الدولية هش جدول المحتويات VR همز
0 1 12.08 2.92 2.80 81.40 1.16 2.31 4165.196191
1 2 12.38 3.53 3.22 46.17 0.89 1.88 3561.146205
2 3 14.02 2.59 4.01 72.80 0.89 2.72 4284.348574
3 4 17.67 6.75 2.63 39.81 1.08 1.88 5098.680869
4 5 17.52 4.57 3.18 10.94 1.51 1.90 3406.132832
5 6 14.53 4.81 2.69 53.60 0.94 1.67 4395.763259
6 7 13.49 3.60 2.93 63.71 0.80 1.85 4104.400989
7 8 11.58 3.03 3.25 53.00 0.69 1.93 3496.742701
8 9 12.52 2.72 2.43 65.77 0.95 1.98 4025.851153
9 10 13.25 3.94 3.71 66.20 1.14 2.65 4285.026122

وصف الرؤوس

  1. نحن سوف : مؤشر جيد
  2. بور : جيد متوسط ​​المسامية (٪)
  3. موج الشعر بإستمرار : نفاذية (mD)
  4. منظمة العفو الدولية : المعاوقة الصوتية (kg / m2s * 10 ^ 6)
  5. هش : نسبة هشاشة (٪)
  6. جدول المحتويات : الكربون العضوي الكلي (٪)
  7. VR : انعكاس فيترينيت (٪)
  8. همز : إنتاج الغاز في اليوم (MCFD) - متغير استجابة

لدينا ست ميزات (بور ، بيرم ، منظمة العفو الدولية ، هش ، جدول المحتويات ، VR) للتنبؤ بمتغير الاستجابة (همز). استنادًا إلى أهمية ميزة التقليب الموضحة في الشكل (1) ، بور هي أهم ميزة ، و هش هي ثاني أهم ميزة.

ترتيب ميزة التقليب خارج نطاق هذا المنشور ، ولن تتم مناقشته بالتفصيل. يتم الحصول على عناصر استيراد الميزات من مكتبة rfpimp python. لمزيد من المعلومات حول ترتيب ميزة التبديل ، ارجع إلى هذه المقالة: احذر من أهمية الغابات العشوائية الافتراضية

الشكل 1: ترتيب ميزة التقليب


المركز الوطني للملاحة الجوية وإدارة الفضاء

يستخدم تنسيق ملف FITS (نظام نقل الصور المرن) على نطاق واسع في المجتمع الفلكي. لكن تعقيدها يجعل من الصعب جدًا على المستخدمين العاديين التفاعل مع البيانات بتنسيق FITS.

توفر واجهات FORTRAN و C الحالية لـ FITS - FITSIO / CFITSIO ، التي طورها HEASARC (مركز أبحاث أرشيف علوم الفيزياء الفلكية عالية الطاقة) في مركز جودارد لرحلات الفضاء التابع لناسا - وظائف قوية جدًا وقوية للتفاعل مع ملفات FITS. ومع ذلك ، يتطلب استخدام FITSIO / CFITSIO بعض مهارات برمجة FORTRAN / C الأساسية ، وغالبًا ما تكون هذه المكتبة منخفضة المستوى أكثر قوة ، وبالتالي أكثر تعقيدًا ، من احتياجات المستخدم العامة.

لتزويد المستخدمين العاديين بواجهة بسيطة لقراءة / كتابة ملف FITS ، قمنا بتطوير fitsTcl ، وهو امتداد للغة النص البسيطة والفعالة TCL / TK ، والتي تستخدم مكتبة CFITSIO. تم تطوير fitsTcl لـ ص المشروع ويتم توزيعه كجزء من ص، والتي يمكن الحصول عليها من خلال زيارة ص موقع الكتروني. يمكن أيضًا تنزيل fitsTcl بشكل منفصل عن صفحة الويب fitsTcl. يعمل fitsTcl ضمن أنظمة التشغيل Unix و Windows و Mac OS.

يتم تصنيف fitsTcl كمكتبة ديناميكية يمكن تحميلها كملحق TCL. لتحميل fitsTcl ، اكتب الأمر التالي في غلاف Tcl (أي tclsh): إذا لم يتم العثور على المكتبة ، فقد تحتاج إلى تعيين متغير البيئة LD_LIBRARY_PATH (يونكس فقط) إلى الدليل الذي يحتوي على libfitstcl.so أو تضمين مسار واضح للملف.

في fitsTcl ، يتم التعامل مع كل ملف FITS كملف يناسب الملف موضوع. تصف الأقسام التالية كيفية الإنشاء يناسب الملف الأشياء وجميع الطرق في أ يناسب الملف موضوع.

معالجة يناسب الملف شاء

يناسب الفتح وضع اسم الملف؟ objName؟ إنشاء يناسب الملف الكائن ، افتح الملف واقرأ رأس HDU الحالي. (اقرأ صفحات الويب أو وثائق CFITSIO للتعرف على "بناء جملة اسم الملف الموسع".) الوضع يمكن أن يكون 0 (للقراءة فقط) أو 1 (قراءة وكتابة). إذا كان الجواب لا objName سيتم تعيين الاسم تلقائيًا. يمكن إنشاء ملف FITS فارغ جديد عن طريق الإعداد الوضع إلى 2. في هذه الحالة ، إذا كان الملف المسمى موجودًا ، فسيتم الكتابة فوقه. عائدات objName والتي سيتم استخدامها في معظم الطرق كمعامل للكائن. يناسب المعلومات ؟ objName. قم بإرجاع قائمة بكافة الكائنات الموجودة ، أو الكائنات المسماة (يدعم التعبيرات العادية) ، مع المعلومات التالية:

أين CHDU هو HDU الحالي (1 - مجموعة أساسية ، 2 - الامتداد الأول.) و hduType هو نوع HDU (0 صورة ، جدول 1-ASCII ، 2-جدول ثنائي). objName يتحرك ?+/-?ن إذا ن عليها علامة `` +/- '' ، ثم تحرك ن وحدات بالنسبة إلى CHDU ، وإلا انتقل إلى نعشر HDU. قم بإرجاع نوع امتداد HDU الجديد: 0 صورة ، جدول 1-ASCII ، 2-جدول ثنائي. objName قريب حذف الكائن objName. يناسب وثيق احذف جميع الكائنات الموجودة.

الحصول على معلومات حول CHDU

objName معلومات chdu أعد CHDU. 1 = أساسي ، 2 = امتداد أول ، إلخ. objName معلومات ملف قم بإرجاع حجم الملف (بوحدات 2880 بايت). objName معلومات hdutype إرجاع `` المصفوفة الأساسية '' أو `` امتداد الصورة '' أو `` الجدول الثنائي '' أو `` جدول ASCII ''. objName معلومات imgType أعد نوع الصورة إذا كانت CHDU عبارة عن امتداد للصورة. -> objName معلومات imgdim أعد أبعاد الصورة إذا كانت CHDU هي امتداد للصورة. objName معلومات ncols قم بإرجاع عدد الأعمدة في الجدول إذا كانت CHDU هي امتداد للجدول. objName معلومات nrows قم بإرجاع عدد الصفوف في الجدول إذا كانت CHDU هي امتداد للجدول. objName معلومات nkwds قم بإرجاع عدد الكلمات الأساسية في رأس CHDU. objName عمود المعلومات ?-دقيقة? ؟ colList؟ بدون أي وسيطات ، قم بإرجاع قائمة بجميع أسماء الأعمدة في الجدول إذا كانت CHDU هي امتداد جدول. إذا كولليست موجود ، يتم إرجاع معلومات مفصلة حول الأعمدة المدرجة ، باستخدام مقارنات اسم التعبير العادي ، في شكل:

أين

اسم اسم العمود (كلمة TTYPE)
يكتب نوع العمود (TFORM الكلمة الأساسية)
وحدة وحدة العمود (كلمة TUNIT)
تنسيق العرض تنسيق للعرض (كلمة TDISP)
تنسيق افتراضي التنسيق الافتراضي للعرض (في حالة عدم وجود كلمة TDISP الأساسية)
عرض العمود عرض العمود (بوحدات الأحرف).
isOffset 0 = بدون إزاحة (بدون كلمة رئيسية TZERO) ، 1 = الإزاحة.
متدرج 0 = غير متدرج (لا توجد كلمة أساسية TSCALE) ، 1 = مقياس.
افتراضي القيمة الافتراضية NULL (الكلمة الأساسية TNULL)
ال -دقيقة الخيار لإيقاف تشغيل مطابقة التعبير العادي.

قراءة البيانات من ملف FITS

objName أحمق ?-s / -e / -l؟ قم بإرجاع كافة سجلات الكلمات الأساسية في الرأس الحالي. تتحكم الخيارات التالية في كيفية تنسيق المعلومات:

لا أحد قائمة العودة لجميع البطاقات في رأس الصفحة
إرجاع ثلاث قوائم:الكلمات الدالة> <القيم> <تعليقات>
-e إرجاع سلسلة واحدة تحتوي على قائمة مفصولة بأسطر جديدة لجميع سجلات الرأس
إرجاع جميع أسماء الكلمات الرئيسية
objName الحصول على الكلمات الرئيسية ؟ keyList؟ قم بإرجاع قائمة <تعليق قيمة الكلمة الرئيسية> لجميع الكلمات الرئيسية في keyList (يدعم التعبيرات العادية). إذا كان الجواب لا keyList معطى ، قم بإرجاع قائمة الإدخالات لجميع الكلمات الأساسية في CHDU. الترتيب الذي يتم به سرد الكلمات الرئيسية غير محدد. (الكلمات الرئيسية للتاريخ والتعليق هي مطلقا عاد.) objName الحصول على الكلمة الرئيسية -num ن قم بإرجاع قائمة <تعليق قيمة الكلمة الرئيسية> من نالكلمة الرئيسية ال. objName الحصول على wcs ؟ راكول ديكول؟ قم بإرجاع قائمة معلمات WCS - <xrval yrval xrpix yrpix xinc yinc rot ctype> - لـ CHDU. إذا كان HDU الحالي عبارة عن جدول ، فقم بتوفير ملف راكول و ديكول معلمات تحدد العمودين (كأسماء أو أرقام أعمدة) تحتوي على بيانات WCS. استخدام الإعدادات الافتراضية لأي كلمات مفتاحية WCS مفقودة: 1.0 لـ زينك / ينك `` لا شيء '' لأجل النوع و 0.0 أو كل الآخرين. إذا كانت هوية RA / Dec للأعمدة (أو محاور الصورة) غير معروفة ، فإن معلمة WCS إضافية - wcs - يمكن الحصول عليها والتي ، عند تشغيلها ، تشير إلى أن معلمات X هي لـ Dec بدلاً من RA. قم بتشغيل هذا الخيار باستخدام الخيار fits wcsSwap 1. objName الحصول على wcs -m ؟ Col1. على غرار ما ورد أعلاه ، ولكن يتم إرجاع المعلومات بتنسيق نمط جديد ، مما يسمح بتحويلات مصفوفة عشوائية. قيمة الإرجاع هي حيث يحتوي كل عنصر (باستثناء المصفوفة) على قائمة بالمعلومات المقدمة لكل بُعد صورة أو عمود جدول مصفوفة هو الدوران ، المقياس ، الانحراف ، مصفوفة تحويل NxN المعطاة كـ <cd11 .. cd1N cd21 .. cd2N .. cdNN>. خيار wcsSwap ليس له أي تأثير على هذا الأمر ، يجب على المرء التحقق من أنواع القيم لمعرفة ما إذا كانت تحويلات RA و Dec مرتبطة بالمحورين الأول والثاني ، على التوالي ، للصورة (كما هو الحال عادةً) أو تم عكسهما. objName احصل على الصورة ؟ FirstElem؟ ؟ numElem؟ اقرأ عناصر البيانات من امتداد IMAGE الحالي وأعدها في قائمة. بدون أي معلمات ، سيتم إرجاع الصورة بأكملها. فقط لو أول إليم معطى ، إرجاع عنصر واحد فقط. objName احصل على طاولة ?? ?-نوفورمات? ؟ colList؟ ؟ صفوف؟ قراءة كتلة من الجدول وإرجاع قائمة (قوائم) البيانات. تم تعيين نطاق الكتلة في
كولليست قائمة بجميع الأعمدة التي يريد المرء قراءتها. اقرأ جميع الأعمدة إذا كانت مفقودة أو كانت `` * ''.
صفوف قائمة مفصولة بفواصل من نطاقات الصفوف للنموذج بداية النهاية (على سبيل المثال ، "3-5،7،9-")
إرجاع البيانات من كل عمود كقائمة منفصلة
-نوفورمات لا تقم بتنسيق النتائج وفقًا لتنسيق TDISPn أو تنسيق افتراضي
objName الحصول على vtable ؟ -نوفورمات؟ colName n؟ rows؟ قم بإرجاع قائمة البيانات الموجودة في ملف نالعنصر المتجه عشر في العمود colName من المعطى صفوف. يقوم الخيار -noformat بإيقاف تشغيل أي تنسيق TDISPn.

تحميل البيانات في الذاكرة أو إلى صفيف TCL

عند تحميل البيانات في الذاكرة ، سيعود fitsTcl بشكل طبيعي عنوان البيانات اكتب عدد العناصر أين هؤلاء:

عنوان عنوان ذاكرة البيانات. يمكن استعادتها في C بواسطة
sscanf (عنوان، "٪ p"، & قاعدة بيانات)
مع * بيانات باطلة
نوع البيانات
0 - BYTE_DATA 1 بايت البيانات
1 - SHORTINT_DATA 2 بايت عدد صحيح
2 - INT_DATA 4 بايت عدد صحيح
3 - FLOAT_DATA 4 بايت النقطة العائمة
4 - DOUBLE_DATA 8 بايت النقطة العائمة
العدد عدد عناصر البيانات في المصفوفة

objName تحميل الصورة ؟شريحة؟ ؟استدارة؟ قم بتحميل صورة ثنائية الأبعاد كاملة في CHDU في الذاكرة وأعد العنوان عنوان (أنظر فوق). شريحة يشير إلى الإطار المطلوب استخدامه إذا كانت الصورة ثلاثية الأبعاد. استدارة يشير إلى عدد التدويرات بزاوية 90 درجة عكس اتجاه عقارب الساعة المطلوب إجراؤها على الصورة (0-3). objName تحميل iblock arrayName firstRow numRows firstCol numCols؟ شريحة؟ قم بتحميل كتلة (تبدأ من أولا, السطر الاول مع الحجم عدد x عدد الصفوف) من بيانات الصورة إلى صفيف TCL ثنائي الأبعاد اسم الصفيف أو الذاكرة إذا اسم الصفيف هو "-". مؤشرات متغير المصفوفة هي (firstCol-1 . firstCol + numCols-1, firstRow-1. firstRow + numRows-1). ستتم معاملة الصورة أحادية الأبعاد إما بصفتها صفًا أو عمودًا واحدًا ، بناءً على معلمات الصف / العمود المتوفرة. للحصول على صورة ثلاثية الأبعاد ، شريحة يشير إلى الإطار المطلوب استخدامه. إذا اسم الصفيف هي "- '' ، اقرأ كتلة البيانات في الذاكرة وأعد معلومات المؤشر: عنوان البيانات اكتب عدد العناصر. objName تحميل irows firstRow lastRow؟ شريحة؟ objName تحميل icols firstCol lastCol؟ شريحة؟ اقرأ ومتوسط ​​مجموعة من الصفوف أو الأعمدة في صورة ما. عائدات عنوان البيانات اكتب عدد العناصر. نوع البيانات ستكون 3 لجميع أنواع بيانات الصور باستثناء النوع المزدوج نوع البيانات 4. objName عمود التحميل colName؟ defaultNull؟ ؟ العنصر الاول؟ قم بتحميل عمود من الجدول في الذاكرة وقم بإرجاعه عنوان البيانات اكتب عدد العناصر. استخدم قيمة افتراضي للقيم NULL ، أو القيم الافتراضية الداخلية (عادةً القيمة القصوى لنوع البيانات) إذا كانت `` NULL '' أو غائبة. إذا colName هو عمود متجه ، اقرأ ملف العنصر الاول-العنصر. يمكن للمرء فقط تحميل الأعمدة العددية. objName صفيف تحميل colName rowNumber numberElement؟ defaultNull؟ ؟ العنصر الاول؟ تحميل صف من الجدول في الذاكرة والعودة عنوان البيانات اكتب عدد العناصر. استخدم قيمة افتراضي للقيم NULL ، أو القيم الافتراضية الداخلية (عادةً القيمة القصوى لنوع البيانات) إذا كانت `` NULL '' أو غائبة. إذا colName هو عمود متجه ، اقرأ ملف العنصر الاول-العنصر. رقم الصف هو رقم الصف المقصود. رقم العنصر هو عدد العناصر في صف لاستخراجها (استخدم طول الصف كقيمة افتراضية). يمكن للمرء فقط تحميل الأعمدة العددية. -> objName تحميل vtable colName قم بتحميل جميع عناصر عمود المتجه colName والعودة عنوان البيانات اكتب عدد العناصر. objName تحميل tblock؟ arrayName colList firstRow numRows colIndex؟ firstElem؟ قم بتحميل كتلة من بيانات الجدول إلى صفيف TCL ثنائي الأبعاد اسم الصفيف. فهرس هو (تقريبًا) فهرس العمود الخاص بالصفيف الذي سيتم استخدامه لقراءة العمود الأول. مؤشر البيانات الأول هو في الواقع (كما في الصور) (فهرس-1,السطر الاول-1). لأعمدة قشارة ، أول إليم = 1. بدون علامة -noformat ، سيتم إرجاع القيم كسلاسل منسقة وفقًا لكلمة TDISP أو التنسيق الافتراضي بناءً على نوع البيانات. objName إكسبر ?-صفوف صفوف? التعبير؟ defaultNull؟ قيم الحساب التعبير في كل صف (أو مجموعة فرعية من الصفوف التي قدمها صفوف) من جدول CHDU والعودة عنوان البيانات اكتب عدد العناصر، استخدام افتراضي كقيمة خالية لأي نتائج NULL. objName تحميل الكلمة تحميل الكلمات الرئيسية في جدول التجزئة الداخلي لـ fitsTcl. لن يحتاج المرء عادة إلى استدعاء هذا الروتين. objName تحميل chdu أعد تحميل المعلومات حول HDU الحالي. لن يحتاج المرء عادة إلى استدعاء هذا الروتين.

objName إدراج صورة naxis naxis bitpix قائمة objName إدراج الصورة -p ؟ bitpix naxis naxisList؟ أدخل صورة فارغة HDU (العنوان الأساسي مع -p) بعد HDU الحالي (أو في بداية الملف للصفيف الأساسي). معلمات الصورة - naxis naxis bitpix قائمة - يمكن تركه عند إنشاء مصفوفة أساسية صفرية الطول. objName إدراج الجدول عدد الصفوف ? اسم الامتداد؟ objName إدراج الجدول -ascii عدد الصفوف ? extensionName rowWidth؟ أدخل BINARY فارغًا (افتراضيًا) أو ASCII (بعلامة -ascii) جدول HDU بعد HDU الحالي. ال أسماء و تنسيق ColFormats يجب أن تكون القائمتان متساويتين في الطول (ربما تكون كلاهما فارغتين) يمكن أن تكون كل معلمات اختيارية فارغة إذا أراد المرء استخدام القيم الافتراضية / الفارغة. objName أدخل الكلمة الأساسية سجل الفهرس؟ formatFlag؟ أدخل ملف سجل في ال فهرسالكلمة الرئيسية. إذا التنسيق هي 0 ، اكتب السجل كما تم تمريره تمامًا ، وإلا قم بتحليله كنموذج حر تعليق قيمة keyname وإعادة تنسيقه إلى معيار KEYNAME = VALUE / COMMENT (إفتراضي). objName ضع الكلمة الرئيسية ?-عدد فهرس؟ سجل؟ formatFlag؟ اكتب سجل الكلمة إما في الموضع فهرس موضع كلمة رئيسية موجودة مسبقًا بنفس الاسم أو إلحاقها في حالة عدم وجود مثل هذه الكلمة الرئيسية. انظر أعلاه للحصول على شكل / معنى سجل و التنسيق. objName ضع التاريخ التاريخ اكتب كلمة رئيسية تاريخية مع المحتوى التاريخ objName إدراج العمود فهرس colName colFormat أدخل عمودًا فارغًا بتنسيق تنسيق ColFormat قبل فهرسالعمود. تنسيق ColFormat يحدد تنسيق العمود ، على سبيل المثال:
جدول ASCII: A15 ، I10 ، E12.5 ، D20.10 ، F14.6.
الجدول الثنائي: 15A ، 1I ، 1J ، 1E ، 1D ، 1L ، 1X ، 1B ، 1C ، 1M objName أضف العمود colName colFormat؟ التعبير؟ بدون التعبير، قم بإلحاق عمود فارغ بجدول CHDU لإرجاع أي شيء. نظرا للحساب التعبيرعلى الرغم من ذلك ، سيتم ملء العمود المشار إليه (جديد أو قديم) بنتائج التعبير الذي تم تقييمه لكل صف في الجدول. إذا colName غير موجود في ملحق الجدول الحالي ، سيتم إنشاء ملحق جديد بالتنسيق تنسيق ColFormat (أنظر فوق). إذا تنسيق ColFormat هو `` افتراضي '' ، سيتم إنشاء العمود بناءً على نوع بيانات النتيجة. قم بإرجاع 1 أو 0 للإشارة إلى ما إذا كان قد تم إنشاء عمود جديد (1) أم لا (0). التعبير يمكن أن يكون بتنسيق C أو Fortran مع أعمدة الجدول والكلمات الرئيسية المشار إليها بأسمائها. هنا بعض التعبير العينات:

تعبير نتيجة
17.2 17.2 لكل صف
17 + 4 * (PHI & GT 32) 17 أو 21 ، اعتمادًا على ما إذا كان هذا الصف من عمود PHI أكبر من 32
الجذر التربيعي ((X-X0) ^ 2 + (Y-Y0) ^ 2) مسافة إحداثيات العمود (س ، ص) من قيم الكلمات الأساسية (س 0 ، ص 0)
راجع صفحات الويب CFITSIO والوثائق لمزيد من التفاصيل. objName الصف إدراج فهرس numRows أدخل رقم عدد الصفوف صفوف بعد فهرس-رمي. objName اضف سطر عدد الصفوف يضيف عدد الصفوف صفوف في نهاية جدول CHDU. objName ضع الصورة قائمة البيانات الأولى اكتب كتلة من البيانات على صورة CHDU. البيكسل الأول من الصورة به أول إليم = 1 وليس صفرًا. objName ضع الجدول اسم أول عنصر صف قائمة البيانات اكتب قائمة البيانات إلى أول إليمالعنصر -th من العمود colName في جدول CHDU. (للأعمدة العددية أول إليم هو 1.) RowSpan هو نطاق من صف واحد من الشكل بداية النهاية مع "- '' تشير إلى جميع الصفوف.

حذف البيانات من ملف FITS

objName حذف الكلمات الرئيسية keyList حذف الكلمات الأساسية المدرجة ، حيث keyList يمكن أن يكون مزيجًا من أسماء الكلمات الرئيسية وأرقام الفهرس. يتم حذف الكلمات الرئيسية بشكل فردي بالتسلسل ، مما يتسبب في تغيير مواضع الكلمات الرئيسية بعد كل حذف ، لذا كن حذرًا عند حذف عدة كلمات رئيسية حسب الفهرس. objName حذف العواميد كولليست حذف الأعمدة المدرجة في ملحق الجدول. objName حذف الصفوف firstRow numRows حذف كتلة من الصفوف. objName حذف الصفوف -expr التعبير حذف الصفوف باستخدام التعبير والتي يجب تقييمها إلى قيمة منطقية. الصفوف التي التعبير بتقييم إلى TRUE يتم حذفها. objName حذف chdu احذف HDU الحالي. سيصبح HDU الذي يلي المحذوف مباشرةً (أو الذي يسبقه إذا كان HDU الحالي آخر ملف) هو HDU الحالي الجديد. إرجاع نوع امتداد HDU الجديد: 0 صورة ، جدول 1-ASCII ، 2-جدول ثنائي.

objName فرز ?-دمج? colList؟ تصاعديالأعلام؟ فرز صفوف الجدول باستخدام الأعمدة في كولليست. متي -دمج موجود ، إذا كانت هناك صفوف متعددة تحتوي على مفاتيح فرز متطابقة ، فسيتم حذف جميع الصفوف باستثناء صف واحد. إذا كان موجودا، تصاعدي يحتوي على قائمة من 1 و 0 تشير إلى ما إذا كان سيتم فرز هذا العمود بترتيب تصاعدي (1 ، الافتراضي) أو تنازلي (0). objName العمود -stat colName؟ firstElem؟ ؟ صفوف؟ قم بإرجاع الإحصائيات الخاصة بـ أول إليم-العنصر (1 للأعمدة العددية) للعمود colName بالترتيب min firstMinRow max firstMaxRow يعني رقم البيانات القياسي القياسي. objName العمود-minmax colName؟ firstElem؟ ؟ صفوف؟ إرجاع الحد الأدنى والحد الأقصى لقيم أول إليم-العنصر (1 للأعمدة العددية) للعمود colName. objName الرسم البياني ?-وزن colName | القيمة? ?-معكوس? ?-صفوف صفوف? اسم الملف ? . قم بإنشاء رسم بياني 1D - 4D من أعمدة في الجدول الحالي. يتم إعطاء معلمات binning بواسطة بن أكسيس المعلمات التي هي قوائم النموذج colName min max binSize حيث يمكن أن تكون العناصر الثلاثة الأخيرة "- '' ، مما يشير إلى القيم الافتراضية. في حالة وجود TLMINn و / أو TLMAXn و / أو TDBIN ، فسيتم استخدام هذه القيم للافتراضيات. خلاف ذلك ، ل دقيقة و الأعلى القيم الافتراضية هي القيم الفعلية الدنيا / القصوى لبيانات بن الحجم سيتم تحديد نطاق البيانات الأصغر من عُشر واحد أو 1.0. يمكن الإشارة إلى قيمة الترجيح بـ -وزن اختيار. يمكن أن يكون هذا إما عمودًا آخر أو ثابتًا رقميًا. ال -معكوس يشير الخيار إلى أن الوزن يجب أن يكون 1.0 / وزن بدلاً من قيمة الترجيح نفسها. يمكن أن يقتصر المدرج التكراري على نطاقات صفوف معينة باستخدام -صفوف اختيار. objName خلق 1dhisto اسم الملف ؟ rowSpan؟ objName إنشاء 2dhisto اسم الملف ؟ rowSpan؟ قم بإنشاء رسم بياني ثنائي الأبعاد أو ثنائي الأبعاد من البيانات الموجودة في الأعمدة كولليست. العمود الثاني أو الثالث اختياري ، على التوالي ، بتنسيق كولليست يمكن استخدامه كوزن. يتم تحديد الحدود وحجم binning بواسطة قائمة العناصر الثلاثة binParams الذي يحمل الحد الأدنى للحجم الأقصى للصندوق المعلمات. إذا دقيقة أو الأعلى هو "- '' ، سيتم استخدام قيم min / max الحقيقية للعمود (الأعمدة). يمكن الإشارة إلى نطاق واحد من الصفوف عبر الخيار الاختياري RowSpan معامل. سيتم كتابة الرسم البياني الناتج في الصفيف الأساسي لملف جديد اسم الملف. ستتم كتابة الكلمات الأساسية WCS في ملف الإخراج لتسجيل مقاييس binning والإزاحات. -> objName ناعم ملف؟ inPrimary؟ قم بسلاسة امتداد الصورة الحالي باستخدام وظيفة أبعاد العربة الصندوقية العرض بواسطة ارتفاع بكسل. يجب أن تكون الأبعاد أعداد صحيحة فردية. سيتم وضع الصورة الناتجة في ملحق جديد ملحق بالملف ملف. إذا ملف غير موجود ، سيتم وضع الصورة إما في الامتداد الأساسي أو في الامتداد الأول ، اعتمادًا على قيمة في الأساس العلم الافتراضي هو وضعه في ملحق.

راجع صفحات الويب CFITSIO والوثائق للحصول على تفاصيل حول التعبير بناء الجملة. One can also read the fv online help file on expression syntax, noting that vexpr can only handle numerical input and output.

fits free addressList Free the memory occupied by the data generated by one of the load, lst2ptr، و vexpr أوامر.

objName copy filename Copy the CHDU to a new FITS file. If the CHDU is not an image array, then an empty primary array is inserted. objName sascii table filename fileMode firstRow numRows colList widthList Write the listed columns into an ASCII file. In the output file, each column has the width listed in widthList. fileMode indicates how to write the data to filename: 0-create new file and write column headings 1-append to old file and write column headings 2-append to old file, but don't write any headings. objName sascii image filename fileMode firstRow numRows firstCol numCols cellSize ?slice? Write a block of the image data to an ASCII file. In the output file, the data has width of cellSize. Use frame slice for 3D image data. objName flush ?clear؟ Flush any dirty buffers to the disk. مع clear, free the buffers, too. objName append filename Append current HDU to another FITS file. objName checksum update|verify Update or Verify the checksum keywords in the current HDU. If none exist, update will create them. ل verify, the return values are 1 for valid values, 0 if either keyword (CHECKSUM or DATASUM) is missing, and -1 for invalid values. objName info expr expression Get information on the result of the supplied arithmetic expression. Return value is cDataType numElements where cDataType is the CFITSIO datatype (not fitsTcl's): TDOUBLE, TSTRING, etc numElements is the number of elements in the result and naxesList contains the vector dimensions of the result ( <1>for scalar result). An expression which evaluates to a constant (no dependency on the contents of the table) will be indicated by a negative number of elements. range count rangeStr maxElem Count the number of elements (esp. rows) contained within the comma-separated list of ranges in rangeStr (eg, 1-4,5,7-). To support ranges of the form "7-" which specifies a range from element 7 through the final element, maxElem is passed with the maximum element number. fits option ?option? ?value? Modify fitsTcl's default behavior. With no options, this returns a list of all the current fitsTcl options and their values. With the option parameter, return the value of that parameter. When both option و value are supplied, set the parameter to the given value. Current options: wcsSwap (0). fits version Get version numbers for fitsTcl and underlying cfitsio. Pages maintained by Bryan Irby Send bug reports or feature requests via the FTOOLS help desk. HEASARC Home | Observatories | Archive | Calibration | Software | Tools | Students/Teachers/Public

The HEASARC is hiring! - Applications are now being accepted for a scientist with significant experience and interest in the technical aspects of astrophysics research, to work in the HEASARC at NASA Goddard Space Flight Center (GSFC) in Greenbelt, MD. Refer to the AAS Job register for full details.


3D array in FITS data - Astronomy

This section lists and describes the clump identification algorithms which are implemented within the CUPID FINDCLUMPS command.

Note, it is assumed that any background extended emission has been removed from the data before using FINDCLUMPS. This can be done using the FINDBACK command.

2.1 FellWalker

This algorithm was developed specifically for CUPID to address some of the problems associated with ClumpFind. It is fully described in Berry (2015, Astronomy & Computing, vol. 10,p22-31).

It is most simply described assuming the data array is 2-dimensional, although it applies in a similar manner to 3-dimensional data. Its name was chosen to suggest a parallel between a contour map of a 2D astronomical data array, and the height contours seen in a geographical map of a hilly area, such as used by most fell-walkers. The algorithm used to assign a data pixel to a clump of emission can be compared to that of a fell-walker ascending a hill by following the line of steepest ascent (not perhaps the most sensible way to ascend a hill in practise but one which lends some verisimilitude to the present algorithm!).

The algorithm considers every data pixel in the supplied array in turn as a potential start for a “walk” to a neighbouring peak. Pixels which are below a nominated background level (specified by configuration parameter FellWalker.Noise ) are ignored and are flagged as not belonging to any emission clump. These are skipped over, as are pixels which have already been assigned to a clump. Once a pixel is found that has not yet been assigned to a clump and is above the background level, the algorithm proceeds to trace out a route from this pixel to a neighbouring peak. It does this in a series of steps (comparable to the steps of a fell-walker). At each step the algorithm looks at the 3 × 3 square of neighbouring pixels (a 3 × 3 × 3 cube for 3D data), and selects the neighbour which would produce the highest gradient for the next step. The algorithm then moves to that pixel and proceeds with the next step.

Eventually, this algorithm will reach a local maximum a point from which all routes go down-hill. But this may be merely a noise spike, rather than a significant peak, and so a check is made over a more extended neighbourhood to see if a pixel with a higher data value than the current pixel can be found (the extent of this extended neighbourhood is specified by the configuration parameter FellWalker.MaxJump ). If so, the algorithm “jumps” to the pixel with the highest value in the extended neighbourhood, and then proceeds as before to walk up-hill. If no pixel with a higher value is found within the extended neighbourhood, the pixel is designated as a significant peak, and is assigned a unique integer identifier. This integer is used to identify all pixels which are within the clump of emission containing the peak, and all pixels which were visited along the walk are assigned this identifier.

If, in the process of walking up-hill, a pixel is visited which has already been assigned to a clump, then the walk is terminated at that point and all the pixels so far visited are assigned to the same clump.

In some cases, the initial part of a walk may be over very flat “terrain”. The significant part of a walk is considered to start when the average gradient (taken over a 4 step length) first reaches the value of configuration parameter FlatSlope . Any pixels visited prior to this point are deemed not to be in any clump. However, this only applies if the walk starts at or close to “sea level”. For walks which start from a higher level (i.e. from a pixel which has a data value greater than the selected background level plus twice the RMS noise level), the entire length of the walk is used, including any initial flat section.

Once all pixels in the data array have been considered as potential starts for such a walk, an array will have been created which holds an integer clump identifier for every data pixel. To reduce the effect of noise on the boundaries between clumps, a cellular automata can be used to smooth the boundaries. This replaces each clump identifier by the most commonly occurring value within a 3 × 3 square (or 3 × 3 × 3 cube for 3D data) of neighbours. The number of times which this cleaning process should be applied is specified by configuration parameter CleanIter .

If the high data values in a clump form a plateau with slight undulations, then the above algorithm may create a separate clump for each undulation. This is probably inappropriate, especially if the dips between the undulations are less than or are comparable to the noise level in the data. This situation can arise for instance if the pixel-to-pixel noise is correlated on a scale equal to or larger than the value of the MaxJump configuration parameter. To avoid this, adjoining clumps are merged together if the dip between them is less than a specified value. Specifically, if two clumps with peak values PEAK1 و PEAK2، أين PEAK1 is less than PEAK2, are adjacent to each other, and if the pixels along the interface between the two clumps all have data values which are larger than “PEAK1 - MinDip” (where MinDip is the value of the MinDip configuration parameter), then the two clumps are merged together.

The results of this merging process are the final clump allocations for every data pixel, from which the catalogue of clump parameters is produced.

2.2 GaussClumps

This is based on the algorithm described by Stutzki & Gusten (1990, ApJ 356, 513). This algorithm proceeds by fitting a Gaussian profile to the brightest peak in the data. It then subtracts the fit from the data and iterates, fitting a new ellipse to the brightest peak in the residuals. This continues until any one of the “termination criteria” described below is satisfied. Each fitted ellipse is taken to be a single clump and is added to the output catalogue. In this algorithm, clumps may overlap, and for this reason each input pixel cannot simply be assigned to a single clump (as can be done for algorithms such as FellWalker or ClumpFind). Therefore, when using GassClumps, the primary output NDF from FINDCLUMPS does not hold the clump index at each input pixel. Instead it holds the sum of all the fitted Gaussian that contribute to each input pixel position.

Any input variance component is used to scale the weight associated with each pixel value when performing the Gaussian fit. The most significant configuration parameters for this algorithm are: GaussClumps.FwhmBeam and GaussClumps.VeloRes which determine the minimum clump size, and GaussClumps.Thresh which (together with the ADAM parameter RMS) determine the third of the termination criteria listed below.

  • The Gaussian fitting is based on the SUMSL module (algorithm 611) from the TOMS library available from http://www.netlib.org/.
  • Any available variance information is used to weight the pixels when doing the Gaussian fit. This is in addition to the Gaussian weighting function implied by configuration parameters GaussClumps.Wwidth and GaussClumps.Wmin .
  • The termination criteria are different. FINDCLUMPS stops finding further clumps if any one of the following criteria is met. (1) the total data sum in the fitted Gaussians is equal to or exceeds the total data sum in the supplied input data (this is the original termination criterion used by Stutzki & Gusten). (2) The number of clumps already found equals the value of configuration parameter GaussClumps.MaxClumps . (3) The number of consecutive fitted peaks with peak value below the value of configuration parameter GaussClumps.Thresh reaches the value of configuration parameter GaussClumps.NPad (the final group of NPad clumps are not included in the returned list of usable clumps). (4) The number of failed attempts to fit consecutive clumps reaches the value of configuration parameter GaussClumps.MaxSkip .
  • A clump will be ignored if its fitted peak value is a long way above or below the peak value of the previously fitted clump. The definition of 𠇊 long way” is more than GaussClumps.NSigma times the standard deviation of the previous GaussClumps.NPeak fitted peaks. This restriction is only imposed once GaussClumps.NPeak peaks have been fitted.
  • In certain situations the chi-squared value that is minimised when fitting a Gaussian clump to a peak in the data array may be dominated by pixels that are largely unaffected by changes in the parameters of the Gaussian clumps 1 . This can result in a very poor fit to the clump. To avoid this, an attempt is made to identify such pixels and to lower the weight associated with them.

2.3 ClumpFind

This algorithm was developed by Jonathan Williams and had been described fully in Williams, de Geus & Blitz (1994, ApJ 428, 693).

Briefly, it contours the data array at many different levels, starting at a value close to the peak value in the array and working down to a specified minimum contour level. At each contour level, all contiguous areas of pixels that are above the contour level are found and considered in turn. If such a set of pixels includes no pixels that have already been assigned to a clump (i.e. have already been identified at a higher contour level), then the set is marked as a new clump. If the set includes some pixels that have already been assigned to a clump, then, if all such pixels belong to the same clump, that clump is extended to include all the pixels in the set. If the set includes pixels that have already been assigned to two or more clumps, then the new pixels in the set are shared out between the two or more existing clumps. This sharing is done by assigning each new pixel to the closest clump. Note, this is based on the distance to the nearest pixel already assigned to the clump, not the distance to the central or peak pixel in the clump. The above paper refers to this as a 𠇏riends-of-friends” algorithm.

This process continues down to the lowest specified contour level, except that new clumps found at the lowest contour level are ignored. However, clumps found at higher contour levels are followed down to the lowest specified contour level.

2.3.1 Comparing CUPID ClumpFind with other Implementations

The CUPID implementation of ClumpFind is a completely independent and total re-write, based on the description of the algorithm in the 1994 Williams, de Geus & Blitz paper. Consequently, it differs slightly from other implementations such as the IDL implementation available from Williams own web page at http://www.ifa.hawaii.edu/

  • ClumpFind.FwhmBeam = 0
  • ClumpFind.MaxBad = 1.0
  • ClumpFind.MinPix = 6 (for 3D data - use 20 for 2D data)
  • ClumpFind.VeloRes = 0
  • ClumpFind.IDLAlg = 1
  • ClumpFind.AllowEdge = 1

You should also note that the pixel co-ordinate system used by the two implementations differ, and consequently the positions reported for the clump peaks will also differ. The IDL implementation of ClumpFind uses a pixel coordinate system in which the first pixel (i.e the bottom left pixel of a 2D image displayed “normally”) is centred at (0,0). This differs from both the FITS and NDF definition of pixel co-ordinates. In FITS, the centre of the first pixel in the array has a value of 1.0 on every pixel axis. In NDF, the centre of the first pixel has a value of L B N D ( I ) − 0 . 5 on axis I , where L B N D ( I ) is an attribute of the NDF known as the “pixel origin”. For an NDF which has been derived from a FITS file and which has been subjected to no geometric transformations, the pixel origin will be 1.0 on every pixel axis, resulting in the centre of the first pixel having a value of 0.5 on every pixel axis.

Some implementations of ClumpFind do not conform exactly to the description in the published paper. Specifically: (1) the way in which areas containing merged clumps are divided up between individual clumps can differ slightly (2) the restriction that all peaks must extend at least as far as the second contour level is sometimes omitted (3) the restriction on the minimum number of pixels contained within a clump is sometimes varied in value

CUPID provides an option to use either the published algorithm, or the algorithm implemented by the IDL package available from Jonathan Williams WWW site (as available at 28th April 2006). Setting the configuration parameter ClumpFind.IDLAlg to a non-zero value will cause the IDL implementation to be used. The default value of zero causes the published algorithm to be used.

2.4 Reinhold

This algorithm was developed by Kim Reinhold whilst working at the Joint Astronomy Centre in Hilo, Hawaii. Its overall strategy is first to identify pixels within the data array which mark the edges of clumps of emission. This typically produces a set of rings (in 2D), or shells (in 3D), outlining the clumps. However, these structures can be badly affected by noise in the data and so need to be cleaned up. This is done using a sequence of cellular automata which first dilate the rings or shells, and then erodes them. After cleaning, all pixels within each ring or shell are assumed to belong to a single clump.

2.4.1 Identifying the Clump Edges

The initial identification of the edges is done by considering a set of 1-dimensional profiles through the data array. Each such profile can be represented by a plot of data value against distance (in pixels) along the profile. For each such profile, the algorithm proceeds as follows. (1) Find the highest remaining (i.e. unused) data value in the profile. (2) If this value is less than a specified background level (given by the configuration parameter Reinhold.Noise ), then there are no remaining significant peaks in the profile so continue with the next profile. (3) Work out away from the peak position along the profile in both directions to find the edges of the peak. A peak ends when it either i) meets a pixel which has already been included within another peak, or ii) two adjacent pixels are both below the background level, or iii) the average gradient of the profile over three adjacent pixel drops below a minimum value specified by the configuration parameter Reinhold.FlatSlope , or iv) the end of the profile is reached. (4) If the peak was not truncated by reaching either end of the profile, and if the peak spans sufficient pixels, the positions of the two edges of the peak are marked in a mask array which is the same shape and size as the 2D or 3D data array. The minimum number of pixels spanned by a peak in order for the peak to be usable is given by the configuration parameter Reinhold.MinPix . (5) The position of the peak itself is also marked so long as its peak value is above a specified minimum value (given by configuration parameter Reinhold.Thresh ). (6) The pixels within the 1D profile which fall between the upper and lower edges of the peak are marked as “used”, and the algorithm loops back to the start (i.e. step 1 above).

This algorithm is applied to each 1D profile in turn. These profiles are divided into groups of parallel profiles the first group contains profiles which are parallel to the first pixel axis, the second group contains profiles which are parallel to the second pixel axis, etc. There are also groups which contain parallel profiles which proceed diagonally through the data array. Thus there is a group of parallel profiles for every pixel axis and for every possible diagonal direction. Within each group, there are sufficient profiles to ensure that every element in the data array is included in a profile within the group.

Once all profiles have been processed, a 2 or 3D array is available that identifies both the edges of the peaks and also the peak positions themselves. Pixels which are flagged as peaks are only retained if the pixel was found to be a peak in every profile group. That is, pixels which appear as a peak when profiled in one direction but not when profiled in another are discarded.

2.4.2 Cleaning the Clump Edges

The initial identification of clumps edges results in a mask array in which each data pixel is marked as either an edge pixel or a peak pixel or neither. Usually, the edge pixels can be seen to follow the outline of the visible clumps, but will often be badly affected by noise in the data. For instance, there may be holes in the edges surrounding a peak, or spurious pixels may have been marked as edge pixels. Before continuing, it is necessary to reduce the effect of this noise. This is done in two steps described below. (1) The edge regions are 𠇍ilated” (i.e. thickened) using a cellular automata algorithm which proceeds as follows: if a pixel is marked as an edge pixel, then all immediate neighbours of the pixel are also marked as edge pixels. Each pixel is considered to be the central pixel in a square of 3 × 3 neighbouring pixels for 2D data, or the central pixel in a cube of 3 × 3 × 3 neighbouring pixels for 3D data. (2) The thickened edge regions are then 𠇎roded” (i.e. made thinner) using another cellular automata algorithm which proceeds as follows. If the number of neighbouring edge pixels surrounding a central pixel is greater than a specified threshold value (given by the configuration parameter Reinhold.CAThresh ), the central pixel is marked as an edge pixel. If the number of neighbouring edge pixels is equal to or below this threshold, the central pixel is not marked as an edge pixel. This transformation can be applied repeatedly to increase the amount of erosion by setting a value greater than one for the configuration parameter Reinhold.CAIterations .

2.4.3 Filling the Clump Edges

Once the edges have been cleaned up, the volume contained within the edges can be filled with an integer which identifies the associated peak. This algorithm proceeds as follows. (1) The mask array is scanned for pixels which are marked as peaks. Recall that only those pixels which are seen to be peaks when profiled in all directions have been retained. Each of these pixels thus represents a local maximum in the data value, and has a significantly higher data value than any of the surrounding pixels. Each such peak is given a unique integer identifier. This identifier is used within the following steps to label all pixels in the clump of emission surrounding the peak. (2) A line of pixels parallel to the first pixel axis, and which passes through the peak, is then considered. The line is followed away from the peak, in both directions, until pixels are encountered which are flagged as edge pixels. All the pixels along this line between the two edge pixels are assigned the clump identifier associated with the central peak. (3) For each such pixel, another line of pixels parallel to the second pixel axis and passing through the pixel is considered. The line is followed away from the pixel, in both directions, until edge pixels are encountered. All the pixels along this line between the two edge pixels are also assigned the clump identifier associated with the central peak. (4) For each such pixel, another line of pixels parallel to the third pixel axis and passing through the pixel is considered. The line is followed away from the pixel, in both directions, until edge pixels are encountered. All the pixels along this line between the two edge pixels are also assigned the clump identifier associated with the central peak.

The above process will fill the volume between the edges, but may miss some pixels (على سبيل المثال if the initial line parallel to the first pixel axis spans the clump at an unusually narrow point). In order to alleviate this effect, the above process is repeated, but scanning the pixels axes in a different order (2,3,1 instead of 1,2,3). For 3D data, it is repeated a third time using the axis order (3,1,2).

Even so, it should be recognised that this filling algorithm will fail to fill certain shapes entirely. For instance, “S”-shaped clumps could not be filled completely using this algorithm.

2.4.4 Cleaning up the Filled Clumps

The use of cellular automata to clean up the edges reduces the likelihood of “holes” within the clump edges, but does not eliminate this risk entirely. When the clump-filling algorithm described above encounters a hole in the edges surrounding a peak, the clump identifier value will “leak out” through the hole into the surrounding areas. This is where the limitations of the filling algorithm have a positive benefit, in that they prevent the leak from spreading round corners without limit. Instead, such leaks will tend to produce straight features radiating out from a clump parallel to a pixel axis, which will terminate as soon as they meet another edge.

It is thus possible for the two or more clumps to 𠇌laim” a given pixel. This will happen if there are holes in the edges surrounding the peaks which allow the filling process to leak out. In this case, each pixel is assigned to the clump associated with the nearest peak.

Another cellular automata is used once the filling process has been completed to reduce the artifacts created by these leaks. This cellular automata replaces each clump identifier by the most commonly occurring clump identifier within a 3 × 3 × 3 cube (or 3 × 3 square for 2D data) of neighbours. This process can be repeated to increase the degree of cleaning, by assigning a value greater than one to the configuration parameter Reinhold.FixClumpsIterations .

The results of this cleaning process are the final clump allocations for every data pixel, from which the catalogue of clump parameters is produced.

1 This can happen for instance when neighbouring peaks are present within the area of pixels used to fit a central peak.


3D array in FITS data - Astronomy

MeerKAT in South Africa (Meer = More Karoo Array Telescope) will require software to help visualize, interpret and interact with multidimensional data. While visualization of multi-dimensional data is a well explored topic, little work has been published on the design of intuitive interfaces to such systems. More specifically, the use of non-traditional interfaces (such as motion tracking and multi-touch) has not been widely investigated within the context of visualizing astronomy data. We hypothesize that a natural user interface would allow for easier data exploration which would in turn lead to certain kinds of visualizations (volumetric, multidimensional). To this end, we have developed a multi-platform scientific visualization system for FITS spectral data cubes using VTK (Visualization Toolkit) and a natural user interface to explore the interaction between a gesture input device and multidimensional data space. Our system supports visual transformations (translation, rotation and scaling) as well as sub-volume extraction and arbitrary slicing of 3D volumetric data. These tasks were implemented across three prototypes aimed at exploring different interaction strategies: standard (mouse/keyboard) interaction, volumetric gesture tracking (Leap Motion controller) and multi-touch interaction (multi-touch monitor). A Heuristic Evaluation revealed that the volumetric gesture tracking prototype shows great promise for interfacing with the depth component (z-axis) of 3D volumetric space across multiple transformations. However, this is limited by users needing to remember the required gestures. In comparison, the touch-based gesture navigation is typically more familiar to users as these gestures were engineered from standard multi-touch actions. Future work will address a complete usability test to evaluate and compare the different interaction modalities against the different visualization tasks.


3.3.1. Introduction and concepts¶

Images are NumPy’s arrays np.ndarray

image: np.ndarray
pixels:array values: a[2, 3]
channels:array dimensions
image encoding: dtype ( np.uint8 , np.uint16 , np.float )
filters:functions ( numpy , skimage , scipy )

3.3.1.1. scikit-image and the SciPy ecosystem¶

Recent versions of scikit-image is packaged in most Scientific Python distributions, such as Anaconda or Enthought Canopy. It is also packaged for Ubuntu/Debian.

Most scikit-image functions take NumPy ndarrays as arguments

Other Python packages are available for image processing and work with NumPy arrays:

Also, powerful image processing libraries have Python bindings:

(but they are less Pythonic and NumPy friendly, to a variable extent).

3.3.1.2. What’s to be found in scikit-image¶

Different kinds of functions, from boilerplate utility functions to high-level recent algorithms.

  • Filters: functions transforming images into other images.

Data reduction functions: computation of image histogram, position of local maxima, of corners, etc.