嗨,我对使用Igor Pro非常陌生。我正在寻找一些关于为任务编写过程的帮助。
我有4个wave,两个是文本wave,两个是数值wave(其中一个还没有数据)。我需要写一个函数来比较两个文本波,如果它们相等,让igor从其中一个数值波中提取数据,并将其放在正确的点上,以匹配它所耦合的文本波。
使其在视觉上具有概念性
twave1 twave2
nwave1 nwave2twave1是所有同位素的列表,但它们没有顺序,而nwave1是它们相应的质量值。(都在table1上)
twave2是相同的同位素列表,但顺序正确(即1H,2H,3H,4H...3He,4He...ect),nwave2为空(都在table2上)
因此,我们的目标是创建一个函数,它将通过twave1和twave2进行排序,如果它们匹配,则将数据从nwave1提取到nwave2中,以便质量与table2上的正确同位素匹配。因此,table2将在正确的位置拥有正确排序的同位素,现在还有大量数据。
任何帮助都将不胜感激;这就是我到目前为止所得到的
function assignMEf()
wave ME, ME_FRIB
wave isotope_FRIB, isotope
variable len = numpnts(ME)
variable i, j
variable ME_current, iso_current
for(i=0; i<len; i+=1)
ME_current = ME[i]
iso_current = isotope[i]
for(j=0; j<4254; j+=1)
if(iso_current == isotope_frib[j])
ME_frib = ME[i]
endif
endfor
endfor
end发布于 2020-05-30 13:17:06
如果我没记错的话,最后你想要的两个wave是isotope和ME。您的代码已接近正常工作,但是当您声明一个文本波时,您需要使用/t标志来告诉Igor它是一个文本波。我进一步简化了代码:
function assignMEf()
wave ME, ME_FRIB
wave/t isotope, isotope_FRIB
variable len = numpnts(ME)
variable i, j
for(i = 0; i < len; i += 1)
for(j = 0; j < len; j += 1)
if(stringmatch(isotope[i],isotope_frib[j]))
ME[i] = ME_FRIB[j]
endif
endfor
endfor
end这段代码不是很健壮,但可以满足您的需要。
为了测试代码,下面是我的MWE:
•Make/O/N=(10) ME_FRIB = p
•Make/O/N=(10) ME = NaN
•Make/O/N=(10)/T isotope_FRIB = "iso" + num2str(10 - p)
•Duplicate/O isotope_FRIB,isotope
•Sort isotope,isotope
•Edit isotope_FRIB,ME_FRIB,isotope,ME
•assignmef()发布于 2020-06-01 19:26:25
我不认为stringmatch是正确的选择。它使用通配符匹配,但是OP AFAIU想要匹配/不匹配,所以!cmpstr是更好的选择。
https://stackoverflow.com/questions/62077645
复制相似问题