Как поместить волны в функции в процедурах в Igor64

Я написал процедуру создания одной волны из другой с некоторыми вычислениями. Порядок действий выглядит так:

Function elipticity_calculation(rotation, elipticity, energy, calculated_elipticity)
    Wave rotation, elipticity, energy
    String calculated_elipticity

    Wave lambda
    lambda = 1240/energy
    Wave KK
    KK = lambda*lambda
    Wave w
    w = 1 - 93.33/KK
    Wave Q
    Q = 1/(w*w*lambda*sqrt(1+135/w))
    Wave delta
    delta = (Q*1.6*100000+2)*pi/180

    Duplicate/O rotation, $calculated_elipticity
    WAVE wOut = $calculated_elipticity
    wOut = (elipticity-rotation*cos(delta)/sin(delta))
End

Однако когда я помещаю функцию в командное окно (см. Ниже), я получаю синтаксическую ошибку:

ожидаемое название волны.

elipticity_calculation(wave1, wave2, wave3, "calculated_elipticity")

Где я не прав?

Спасибо

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

Я тоже пробовал это:

Function elipticity_calculation(rotation, elipticity, energy,     calculated_elipticity)
    Wave rotation, elipticity, energy
    String calculated_elipticity

    Make $"lambda"/WAVE=lambda;
    lambda = 1240/energy
    Make $"KK"/WAVE=KK;
    KK = lambda*lambda
    Make $"w"/WAVE=w;
    w = 1 - 93.0665/KK

    Make $"Q"/WAVE=Q;
    Q = 1/(w*w*lambda*sqrt(1+136.24/w))
    Make $"delta"/WAVE=delta;
    delta = (Q*1.69508759865*100000+2.884488929)*pi/180

    Duplicate/O rotation, $calculated_elipticity
   WAVE wOut  = $calculated_elipticity
   wOut = (elipticity-rotation*cos(delta))/sin(delta)
End

Однако этот код создает новые волны для каждой расчетной точки, а также создает пустую волну.

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

Я пробовал это. Однако. Это не работает:

Function elipticity_calculation(rotation, elipticity, energy, calculated_elipticity)
Wave rotation, elipticity, energy
String calculated_elipticity

Make/FREE lambda 
lambda = 1240/energy
Make/FREE KK
KK = lambda*lambda
Make/FREE w
w = 1 - 93.0665/KK
Make/FREE kve
kve = 1/(w*w*lambda*sqrt(1+136.24/w))
Make/FREE delta
delta = (kve*1.69508759865*100000+2.884488929)*pi/180

Duplicate/O rotation, $calculated_elipticity
Make wOut = (elipticity-rotation*cos(delta))/sin(delta)

End

Можно ли переписать волну после некоторых расчетов? Как в Excel?

2 ответа

Решение

Я решил это так:

Function elipticity_calculation(rotation, elipticity, energy, calculated_elipticity)

Wave rotation, elipticity, energy
String calculated_elipticity

Duplicate/O elipticity, $calculated_elipticity
Wave calc_elipticity = $calculated_elipticity

Duplicate/FREE energy, lambda
lambda = ...
Duplicate/FREE energy, KK
KK = ...
Duplicate/FREE energy, w
w = ...
Duplicate/FREE energy, Q_1
Q_1 = ...
Duplicate/FREE energy, delta
delta = ...


calc_elipticity = ((elipticity-rotation*cos(delta))/sin(delta))

End

Делай волны lambda/KK/w/Q/delta существуют в текущей папке данных?

Прошедшие волны wave1/wave2/wave3 также должны существовать в текущей папке данных.

Вы можете включить отладку и отладку при ошибке, чтобы Igor Pro появлялся в отладчике при возникновении ошибки.

Другие вопросы по тегам