Емельянов Эдуард Владимирович (eddy_em) wrote,
Емельянов Эдуард Владимирович
eddy_em

Category:

Еще раз о зависимости фокуса БТА от температуры

Так как в прошлый раз использовались все данные, т.е. было очень много точек с явными выбросами, решено было хорошенько их проредить: теперь брались лишь те фитсы, которые были получены непосредственно после процедуры фокусировки. И опять получилось то же самое — две явные группы точек:
Temp_vs_foc_LR_corr
Зависимость отсчетов фокуса БТА от температуры трубы


Аппроксимация прямой дала значение F = -0.15*T + 39.80 — практически то же самое, что и было раньше. Стандартное отклонение от прямой составляет 1.68 — в общем случае многовато, однако, похоже, что если сделать интерполяцию по группам, то получится лучше. Но уж очень смущает положительный наклон кривой в области отрицательных температур. Явно здесь что-то не так. Чтобы получить более точные значения надо вешать на стакан лазерный дальномер и снимать показания каждый день. Может быть, тогда будет хоть что-то понятно...


Данные по фокусам брались из базы ASPID. Для начала я посмотрел, на каких дисках архива лежат результаты наблюдений за 2012 год, затем скопировал это к себе (извне такого доступа нет: все данные как минимум 3 года "наружу" не выставляются). После этого долго писал скрипты для разбора данных: дело в том, что фитсы хранятся в архивах, архивы — в директориях (одна директория == 1 наблюдательная ночь), а эти директории с ночами наблюдений собраны в директории ≤4.4ГБ (для записи на болванки). И ладно бы, имена файлов были нормальными: я замучился с тем, что имена имеют то верхний, то нижний регистр; количество цифр в номере ночи тоже сначала было равно семи, потом внезапно стало 8! В общем, проблема решилась так: сначала я рекурсивно (моим скриптиком file2lower) перевел все имена файлов в нижний регистр, а затем после распаковки архивов с данными по нужной ночи тоже переводил их имена в нижний регистр. Хорошо хоть, что в логах имена файлов были в нижнем регистре!

Все-таки, поражаюсь я этой безграмотности псевдооперационной системы с ласковым названием "вантуз": ну вот что за идиотизм делать имена файлов регистронезависимыми? Постоянно при распаковке архивов или перемещении данных на vfat сталкиваюсь с тем, что файлы с одинаковыми именами, но в разных регистрах (есть за мной такой грешок) начинают конфликтовать.


Итак, сами скрипты.
Во-первых, для цветной подсветки вывода я сделал такое общее для остальных скриптов макроопределение (его, конечно, можно было бы оставить лишь в основном скрипте, но на стадии тестирования отдельных скриптиков это было неудобно):
RED="\033[1;31;40m"
GREEN="\033[1;32;40m"
NORM="\033[0m"


Основной скрипт просто заполняет шапку файла отчета и рекурсивно проходит по всем директориям (можно было, конечно, реализовать весь функционал одним скриптом, а "подскрипты" сделать функциями, но в данном случае так было удобней на этапе тестирования):
#!/bin/bash
. ./colors

echo -e "DATE_OBS\tSTART\tFOCUS" > focuses.log

for DIR in cd*; do
	echo -e "\n${RED}Processing directory $DIR${NORM}\n"
	for D in $(ls $DIR | grep 's\([[:digit:]]\)\{3,\}'); do
		echo -e "${GREEN}Archive directory $D$NORM"
		./get_filenames $DIR/$D || exit 1
	done
done


Скрипт get_filenames занимается следующим: из файла логов SCORPIO выбираются строчки, следующие за текстом "focussing TELESCOPE" (т.е. сведения об изображениях, полученных явно после фокусировки телескопа). К этим записам "пришпиливаются" суффиксы fts (почему-то фитсы со скорпио имеют суффикс не fits, а такой — видимо, наследие DOS'а, хотя было-то это черт-те сколько лет назад!), чтобы получить нужные нам имена файлов. А еще из этих имен "выдираются" две последние цифры и "пришпиливается" суффикс zip, чтобы получить соответствующие имена архивов. Все нужные архивы распаковываются в текущую директорию, имена файлов приводятся к нижнему регистру, а затем уже обрабатываются сами файлы: из них "выдираются" FITS-шапки, а из шапок выбираются нужные данные.
#!/bin/bash
DIR="./"
[ $# = "1" ] && DIR="$1/"

echo "DIR: $DIR"

NAMES=$(grep -A1 "focussing TELESCOPE" ${DIR}/log.txt | grep "s[[:digit:]]\{7\}"|awk  '{print $2"="}')
echo "$NAMES"
FILENAMES=$(echo $NAMES | sed 's/=/.FTS\n/g' | sed -e 's/[[:space:]]*//g' | tr [[:upper:]] [[:lower:]])
ARCHNAMES=$(echo $NAMES | sed "s|[[:space:]]*\(s[[:digit:]]\{5,\}\)[[:digit:]]\{2\}=[[:space:]]*|$DIR\1.zip\n|g" |sort -u)

H=$(mktemp -u "header-XXXXXXX")

echo -e "files: $FILENAMES\narchives: $ARCHNAMES"
for AR in $ARCHNAMES; do
	unzip $AR
done
file2lower *
for F in $FILENAMES; do
	if [ ! -e $F ]; then
		echo -e "\n${RED}File $F not found!$NORM\n"
		continue
	fi
	echo -e "${GREEN}Process file $F$NORM"
	./make_header $F $H || exit 1
	./parce_header $H || exit 1
	rm -f $H
done

rm -f *.fts


Следующий скрипт просто выдергивает FITS-шапку (ставится ограничение на 80 записей, но, судя по данным со SCORPIO, этого за глаза хватает). Здесь я тоже столкнулся со сложностью: за год шапка изменилась (в последних фитсах она почему-то стала короче). Поэтому-то пришлось добавлять "обрезание" полученных данных по слову END, сигнализирующему окончание фитс-шапки.
#!/bin/bash
head -c 6400 $1 | tr -d "\n" | sed -e 's/END.*//' -e "s/\(.\{80\}\)/\1\n/g" | sed  's|\([^/]\) /.*|\1|'  | grep --binary-files=text -vi history | grep --binary-files=text  -vi comment > $2


Ну и последний скрипт просто выдергивает из шапки данные о дате получения файла и значении отсчета фокуса БТА. Заодно происходит проверка: было ли изображение получено на SCORPIO и было ли это изображение снимком объекта (т.к. для калибровок значение фокуса можно установить каким угодно).
#!/bin/bash
eval $(awk  -F'=' '{gsub(/\047/, "", $2); for (i=1;i<=NF;i++){gsub(/^ */,"", $i); gsub(/ *$/,"", $i);}; gsub(/-/,"_", $1);  print $1 "=\"" $2 "\""}' $1) || exit 1
[ $INSTRUME != "SCORPIO" -o $IMAGETYP != obj ] && exit
echo -e "instr: $INSTRUME\nim. type: $IMAGETYP\ndate: $DATE_OBS\nfoc: $FOCUS\ntime: $START"
echo -e "$DATE_OBS\t$START\t$FOCUS" >> focuses.log


Сама обработка данных практически такая же, как в прошлый раз, разве что файл со значениями фокуса не нужно обрабатывать, т.к. он уже имеет нормальный вид, а данные из него обрабатывались так:
[date time F] = textread('2012-focuses_correct.log', "%s %s %f", 30000, 'headerlines', 1);
L=size(date,1);
for i=1:L; Ftime(i) = mktime(strptime([date{i} " " time{i}], "%Y/%d/%m %X")); endfor


Вчера я сохранил все данные в бинарный файл (т.к. файл с температурами очень большой, считывается он крайне долго, поэтому хотелось ускорить процесс), но, к сожалению, почему-то октава сегфолтится при попытке загрузки этих данных. В общем, точное значение коэффициента корреляции не скажу, но помню, что было что-то около -0.69.


P.S. В среду, выйдя после отпуска на работу, я обнаружил на столе посылочку с элементами (терморезисторы, макетка на STM32F4 с ethernet на борту, АЦП, набор всяких разных пустых макеток). Как только смогу, займусь. Для начала надо будет научиться работать по SPI с АЦП, напаять терморезисторов, подключить два термодатчика с I2C и оставить это все на долговременный мониторинг, тем временем пытаясь поднять стек TCP/IP на новой макетке с STM32.
Tags: octave, БТА, фокусировка
Subscribe

  • Новый кикад - просто ужас!

    Пока маюсь дурью под Звенигородом, решил было поработать. Но оказалось, что кикад я давно не пересобирал и после последнего обновления системы он не…

  • Хочется взять, и…

    Что-то последнее время чем дальше в лес все больше и больше падает грамотность интернет-пользователей. Похоже, из-за появления дешевых…

  • Мусорка в Зеленчукской

    Вот так выглядит мусорка недалеко от моей квартиры в Зеленчукской (центр станицы, если что): Квартиру сдаем, поэтому появляемся там достаточно…

promo eddy_em august 17, 2019 12:33 3
Buy for 10 tokens
Юра намедни напечатал корпус для хронометра. Для первого блина получилось неплохо: И еще немного фотографий:
  • Post a new comment

    Error

    Anonymous comments are disabled in this journal

    default userpic
  • 0 comments