LINUX.ORG.RU
ФорумTalks

Файлы XPS в смысле метод материаловедения

 , ,


0

1

У меня некая машина Quantera Phi выплёвывает файлы в очень смешном формате - сначала в виде ascii условия съёмки, а потом бинарная каша - собсна данные. Формат файлов, насколько я понимаю, более-менее общепринят в отрасли, некий .spe, но вот чем бы мне это посмотреть, как эту кашу декодить, не знает никто?

Плюс, подозреваю, может существовать специализированная софтина с базой данных и лаборантками, но гугль при попытке искать xps выдаёт или научные статьи или сами знаете что про принтеры.

Ответ на: комментарий от Slesarev

Небольшой заголовок и 1101 значение. Сжатия незаметно.

Чтобы с этим что-то делать неплохо бы понимать чего вообще в этом файле может быть.

frob ★★★★★
()
Ответ на: комментарий от frob

Там спектр, то есть то ли 2 столба с парами x-y, то ли один столбец y а x подразумевается.

По x значения то ли номера каналов, то ли энергия, численно - float от 0 до гдето 1200, по y - чонить порядка 0 - 1E5

Вряд ли они ещё чего туда жмут, вроде в заголовке всё есть.

Slesarev
() автор топика
Ответ на: комментарий от frob

Вот что-нибудь в таком духе там зашифровано, по идее, спектр похож, только диапазон съёмки побольше ну и там по мелочи другое, а основная форма где-то такая же должна быть.

http://www.acsmaterial.com/upload//XPS-Carboxyl graphene(1).jpg

Slesarev
() автор топика
Ответ на: комментарий от Slesarev

Если считать всё это игреками, то значения получаются от 60к до почти 200к и в самом хвосте одно значение ~6к.

frob ★★★★★
()
Ответ на: комментарий от frob

Да, похоже. Так что же это, просто флоаты как они есть, с 40 означающим +E00? по 8 байт на цифру? Дамп как он есть по умолчанию, но сдвинутый на 2 байта из-за наличия невыравненного заголовка? Я идиот и не заметил сразу?

Вот что значит долго заниматься синтезом транзисторов, тупеешь, однако. Спасибо за наводку.

Но, надо отдать должное, запутали они таки. Значения приведены в обратном порядке, плюс есть сдвиг какой-то по x, но на сдвиг наплевать, в самом методе получается сдвиг, так что всё равно надо прибавить константу, из общих соображений его не определить. Не построил бы - не заметил бы. А вот когда в школе учился, знал, что повторяющаяся буква - это мантисса, начинай строить. Нет, мне стыдно, право слово.

И да, я очень правильно выложил этот файл, потому что он простой, в нём только один скан от начала до конца через 1 эВ, а сам-то я пытался ковырять детальные съёмки участков этой кривой через хз сколько, наверное, 0.2 эВ, теперь я вижу, что они там натворили, ещё немного разобраться и можно кушать.

Но тред не совсем закрыт, тем не менее, программа с базой данных не найдена, а жаль кстати. Неужто нету? Может, написать стоит? Есть ещё заинтересованное лицо хоть одно?

Slesarev
() автор топика
Ответ на: комментарий от Slesarev

Я сделал вот как:
1. ищем «EOFH\x0d\x0a», пропускаем эти 6 байт и ещё 8
2. читаем uint32le («размер заголовка»), пропускаем эти четыре байта и столько сколько получилось в прочитаном uint32le
3. пропускаем ещё 16 байт
4. читаем по 4 до предпоследнего байта, трактуем как C-шный float (на питоне «<f»)

Если в №2 пропустить 28 (включая прочитаный «размер заголовка»), то следующий uint32le — число точек.
Последние 4 байта пропущенные в №2  — размер блока данных, если надо.
Первый uint32le в №3 в выложенном файле равен 112, не знаю не годится ли это для чего-нибудь вроде смещения шкалы Х.

В «заголовке» есть ещё кое-какие числа, которые возможно для чего-то пригодятся, например, если в файле будет несколько сканов.

frob ★★★★★
()

Ты бы хоть сказал, для чего эта машина.

Quasar ★★★★★
()

Если что - советую потыкаться в программе, которая файлы сохраняет повнимательнее. Там должен быть экспорт в текстовый формат с таблицей, разделённой пробелами. По крайней мере всё программно-аппаратные комплексы для подобных задач, которые мне встречались, умеют это делать.

Quasar ★★★★★
()
Ответ на: комментарий от Quasar

Да есть там экспорт, конечно, но это на машине. Собственно, вопрос был - нет ли свободного софта для этих файлов, написанного людьми а не гумункулами. Чтобы можно было конвертнуть сотню файлов одним скриптом. Чтобы я дома мог почитать присланный мне в этом формате файл. Ну короче чтобы оно на самом деле работало.

А для чего машина я ж написал - это XPS, ни прибавить, ни убавить. http://en.wikipedia.org/wiki/X-ray_photoelectron_spectroscopy

Slesarev
() автор топика
Ответ на: комментарий от frob

Сегодня попробовал скрипт запустить. Версия питона не сошлась, я добавил скобки, стал дебажить дальше, но, поскольку питона почти не знаю, застрял на функции декода при вызове input.read

File «/usr/lib/python3.2/codecs.py», line 300, in decode (result, consumed) = self._buffer_decode(data, self.errors, final)

UnicodeDecodeError: 'utf-8' codec can't decode byte 0xe7 in position 4561: invalid continuation byte

Slesarev
() автор топика
Ответ на: комментарий от Slesarev

Ок, ок, это пофиксил, сделал его ISO-latin каким-то, позаменял буквы соответственно, другой косяк вылез. Говорит, что str гн поддерживает буферный интерфейс.

Давай-ка я сам всё же напишу на чёмнить знакомом, по образу так сказать и подобию. А потом взботну питона получше на будущее, как будет вдохновение.

Slesarev
() автор топика
Ответ на: комментарий от frob

Да, очень странно сделали этот переход версий. Я пока искал столько странных отличий нашёл - те же скобки, ну зачем вот это всё? идиотизм какой-то, уж лучше бы сразу сказали, что запиливают новый язык и новый синтаксис, ну или там принципиально новую либу.

Slesarev
() автор топика
Ответ на: комментарий от Slesarev

Ну, по большому счёту в этих нескольких строчках кода тебе могут быть интересны только смещения и «форматы» «<I» — для Uint32LE и «<f» — четырёхбайтный float.

(Я бы предложил colupatr, в качестве разведовательного средства, но поскольку даже простой питонобыдлокод на твоей системе не работает, то pygtk-шный думаю тем более не заведётся.)

frob ★★★★★
()
Ответ на: комментарий от frob

Заинтриговал, я поднял зад и поставил второго питона за компанию. Прикольная софтина, пожалуй, вспомню молодость и хакну все форматы файлов какие есть в лабе, чтобы не отупеть.

Заодно и твой скрипт запустился лол. Ну кстати и на сях это не намного длиннее выходило.

Slesarev
() автор топика
Ответ на: комментарий от frob

Ну да. Мелочь, а приятно. Хотя я почему-то был уверен, что есть какой-то плагин к эдитору в mc который это же всё делает только ещё круче как-то, но не могу его найти сейчас что-то.

Slesarev
() автор топика
Ответ на: комментарий от Slesarev

Если найдёшь, скажи — я не видел гляделки с переменной длиной строки.

В справке не написаны подробности, а в питонокоде тебе видимо глядеть не с руки, т.ч. напишу несколько «подсказок» здесь:
- мышью или стрелками с зажатым Shift можно выделять интересующий кусок дампа, повыделяй и посмотри в строку состояния — «настройки» по Ctrl+T;
- Ctrl+пробел перебрасывает фокус между основным окном и строкой ввода;
- в строке ввода есть «история», прокручивается стрелками вверх/вниз, если зажать Alt, то стрелки вместо прокрутки истории будут перемещать курсор в основном окне;
- 'Enter' в середине строки переносит хвост в следующую строку, в начале строки вставляет линию разрыва;
- «i» и Ins показывают строчку для ввода комментария, цепляют его к текущему выделению или к позиции курсора, если ничего не выделено (один комментарий на строку);
- команда 'fmt n1 n2 n3 <и т.д.>' переформатирует строки начиная с текущей так, чтобы их длина была n1, n2, n3, <и т.д.> (десятичные значения); можно добавить после значений «*n4» — повторит 'n4' раз, если 'n4' не написать — повторит до конца (пример: «fmt 20*» переразобьёт от текущей строки до конца на строки по 20 байт);
- Ctrl+v позволяет вставить из буфера обмена кусок дампа (например, можно выделить интересный кусок в одном окне и влепить его в новое);
- 'Tab' переформатирует текущую строку по длине предыдущей и переходит на следующую; полезно если у тебя файл или его часть выглядит как набор записей одинаковой длины — подогнал enter/del/backspace-ом длину строки, перешёл в следующую, зажал таб и дальше «оно само»;
- в справке два примера команд: первый читает от текущей позиции курсора два байта как int16be, форматирует строку по прочитанному значению + 2 и переходит к следующей строке — полезно если надо побить дамп на строки, длина которых прямо в дампе, «>h» и прочее можно поменять по обстоятельствам; второй пример это «Таб с конца», меняет длину текущей строки по следующей и переходит к предыдущей — полезно, если углядел, что кусок файла бьётся на похожие строки по N байт, начал разбивать и обнаружил остаток, так что надо переразбить по N, но со сдвигом — выравниваешь последнюю строку, переходишь к предыдущей, вводишь пример и давишь enter.

Начиная со вчера, «run» без параметров открывает простое окошко для ввода текста, введённое можно запустить как питонокод.

frob ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.