Гнуплот: примерка разных кривых - PullRequest
0 голосов
/ 02 октября 2019

Я пытаюсь разместить некоторые данные в gnuplot. Данные разные кривые. У меня есть три .gnp файла: один для математической процедуры, один для вызова файла для анализа и один для запуска в gnuplot.

Я получаю эту ошибку, но не знаю, как ее исправить.

gnuplot> load '0-one_fit.gnp'

gnuplot> id = $0
           ^

"0-one_fit.gnp" строка 5: колонка () вызвана из недопустимого контекста

Этот файл должен хранить порядковый номер от 0 до идентификатора переменной. Порядковый номер передается в этот скрипт извне loop.gnp при вызове команды.

В файле написано:

    id = $0
    filename = sprintf("FeCoBSiNbCu%04d.chi",id)
    fit [26:35.6] f110(x) filename u 1:2 via x110,A110,w110,a0,a1
    fit [42.3:45.1] f200(x) filename u 1:2 via x200,A200,w200,b0,b1
    fit [48:56.1] f23(x) filename u 1:2 via x2,A2,w2,x211,A211,w211,c0,c1


    entry1 = sprintf("%d\t%.3f\t%.3f\t%.1f\t%.1f\t%.3f\t%.3f\t",id,x110,x110_err,A110,A110_err,w110,w110_err)
    entry2 = sprintf("%.3f\t%.3f\t%.1f\t%.1f\t%.3f\t%.3f\t",x200,x200_err,A200,A200_err,w200,w200_err)
    entry3 = sprintf("%.3f\t%.3f\t%.1f\t%.1f\t%.3f\t%.3f\t",x2,x2_err,A2,A2_err,w2,w2_err)
    entry4 = sprintf("%.3f\t%.3f\t%.1f\t%.1f\t%.3f\t%.3f",x211,x211_err,A211,A211_err,w211,w211_err)
print entry1, entry2, entry3, entry4

Обновление: я изменил в файле с id=ARG1, но теперь он дает мне другую ошибку

gnuplot> call '0-one_fit.gnp' 0
     "0-one_fit.gnp" line 8: f_sprintf: attempt to print string value with numeric format

Если я изменю сейчасс int(id) он говорит:

load '0-one_fit.gnp'
     "0-one_fit.gnp" line 8: Non-numeric string found where a numeric expression was expected

ОБНОВЛЕНИЕ Я попытался сначала запустить файл с именем 0-in-situ.gnp, который содержит функции для пиковой подгонки:

#### First peak: (110)

bg110(x) = a0 + a1*x

k110(x) = (x-x110)/w110

Gauss110(x) = A110*exp(-log(2)*k110(x)**2)
Cauchy110(x) = A110/(1 + k110(x)**2)

pV110(x) = alpha*Gauss110(x) + (1-alpha)*Cauchy110(x)

f110(x) = pV110(x) + bg110(x)


#### Second peak: (200)

bg200(x) = b0 + b1*x

k200(x) = (x-x200)/w200

Gauss200(x) = A200*exp(-log(2)*k200(x)**2)
Cauchy200(x) = A200/(1 + k200(x)**2)

pV200(x) = beta*Gauss200(x) + (1-beta)*Cauchy200(x)

f200(x) = pV200(x) + bg200(x)


#### Third peak & deconvolution (Q2 & 211):

bg(x) = c0 + c1*x

k2(x) = (x-x2)/w2
k211(x) = (x-x211)/w211

Gauss2(x) = A2*exp(-log(2)*k2(x)**2)
Cauchy2(x) = A2/(1 + k2(x)**2)
pV2(x) = gamma*Gauss2(x) + (1-gamma)*Cauchy2(x)

Gauss211(x) = A211*exp(-log(2)*k211(x)**2)
Cauchy211(x) = A211/(1 + k211(x)**2)
pV211(x) = delta*Gauss211(x) + (1-delta)*Cauchy211(x)

f23(x) = pV2(x) + pV211(x) + bg(x)

alpha = 0
beta = 0
gamma = 1
delta = 0

A110 = 15574
x110 = 31.1
w110 = 2.4 
a0 = 1760 
a1 = 6

A200 = 4153
x200 = 52.2
w200 = 3
b0 = 1500
b1 = 15

A2 = 1800
x2 = 51.6
w2 = 3
A211 = 1897
x211 = 76.6
w211 = 0.3
c0 = 1830
c1 = -2

#### Loop through all XRD patterns: 
load "0-loop.gnp"

Программа идет, но когда я открываю файл .dat, который должен содержать данные, по-видимому, он анализирует не все кривые, а только первые. Это проблема цикла ниже?

call "0-one_fit.gnp" 447
call "0-one_fit.gnp" 448
call "0-one_fit.gnp" 449
call "0-one_fit.gnp" 450
call "0-one_fit.gnp" 451
call "0-one_fit.gnp" 452

1 Ответ

0 голосов
/ 02 октября 2019

Вы можете использовать $0 или column(0) в команде заговора или функцию, которая используется в команде заговора. В другом месте, я думаю, это «недопустимый контекст». Проверьте следующий пример:

Также проверьте help using, help column, help pseudocolumns.

reset session

$Data <<EOD
11 12 13 14 15
21 22 23 24 25
31 32 33 34 35
41 42 43 44 45
EOD

# id = $0            # does not work, invalid context
# id = column(0)     # does not work, invalid context
id(n) = column(n)    # within a function, works

plot $Data u           0:1 w lp    # works
plot $Data u        ($0):1 w lp    # works
plot $Data u (column(0)):1 w lp    # works
plot $Data u     (id(0)):1 w lp    # works

Редактировать:

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

Если вы хотите передать параметр в подпрограмму gnuplot, вы можете call файл gnuplot с параметрами (вместо load).

call '0-one_fit.gnp' 123

В пределах 0-one_fit.gnp вы можете получить доступ к этому значению через id = ARG1. В более ранних версиях gnuplot («по старому стилю») это было id=$0.

Check help call и help call old-style (gnuplot 5.2)

...