Tumgik
hemmy-ibr · 6 years
Text
データを間引きするマクロ
グラフの点数が多すぎる場合に、データを間引くマクロ。
最前面のグラフのすべてのウェーブに対して実行される。
Tumblr media
//NaNやINFが含まれる場合は正しく計算できない可能性があるので注意。
Macro Decimate(n, prefix, suffix) Variable n String prefix, suffix Prompt n,"interbal length n; 1/n=output points/input points" silent 1 pauseupdate
Variable i, j, k, Nout String inp, outname
i=0 do inp=Wavename("",i,1) //最前面のグラフのi番目のウェーブに対して以下の操作を行う
if(strlen(inp)==0)  break endif
Wavestats/Q $inp Nout=trunc(V_npnts/n) //outdammyの点数を決める make/N=(Nout)/O outdammy
j=0 //入力ウェーブのポイント k=0 //出力ウェーブのポイント do  if(mod(j, n)==0)   outdammy[k]=$inp[j]   k+=1  endif  j+=1 while(k<=Nout-1)
outname=prefix+inp+suffix Rename outdammy, $outname //出力ウェーブの名前を変更 Setscale/P x, pnt2x($inp,0), deltax($inp)*n, $outname//出力ウェーブのスケールを修正
i+=1 while(1)
End
0 notes
hemmy-ibr · 6 years
Text
XYデータを連続で読み込むマクロ
このマクロでは、連続した番号のxyデータを読み込む。 たとえばref01.csv, ref02.csv, ref03.csv, ...といったファイルを一度に読み込むことができる。
ここで共有するマクロは、1列目にx軸の値、2列目にy軸の値を含む.csvファイルを読み込むように書かれている。
Tumblr media
読み込んだ結果をウェーブにする方式は二つあり、
①yウェーブのStartおよびDeltaにx軸の情報を取り込む
 (これはx軸が等間隔な場合のみ有効)
②yウェーブと別にxウェーブを作成する
マクロ実行時に要求されるflagというパラメーターを0または1で入力することでこれを切り替えられる(0の場合は①, 1の場合は②)。
元のデータ名は"接頭辞+数字(2桁)+.csv"である必要がある。
マクロ中の”.csv”という部分を書き換えれば.txtなども読み込める。
Macro Load_MultiXYData(Header, startrun, lastrun, flag) String Header, filename, wavname, xwave Variable i, startrun, lastrun, flag
silent 1 pauseupdate
if(exists("betaX0")!=0) Abort "You have to kill or rename 'betaX0.'" endif
if(exists("betaY0")!=0) Abort "You have to kill or rename 'betaY0.'" endif
if(flag!=0)  if(flag!=1)   Abort "flag is required to be 0 or 1."  endif endif
NewPath/Q/O DataFolder
i=0
do if(i+startrun<=9) //指定したデータ番号が一桁の場合、頭に0をつける(ex. 2→02)  wavname = Header+"0"+num2istr(i+startrun) else  wavname = Header+num2istr(i+startrun) endif
filename = wavname+".csv"   LoadWave/J/D/Q/O/K=0/A=betaX/L={0,14,0,0,1}/P=DataFolder filename LoadWave/J/D/Q/O/K=0/A=betaY/L={0,14,0,1,1}/P=DataFolder filename
if(flag==0)//①の場合  Rename betaY0, $wavname  Wavestats/Q/R=[0,1] 'betaX0'  Setscale/P x, V_min, V_max-V_min, $wavname  Killwaves 'betaX0'
else  if(flag==1)//②の場合   xwave= "x_"+wavname   Rename betaX0, $xwave   Rename betaY0, $wavname   endif endif
i=i+1 while(i+startrun<=lastrun)
End
0 notes
hemmy-ibr · 6 years
Text
複素数ウェーブを分解する
最前面のグラフのすべてのウェーブから、実部と虚部のウェーブを新たに生成するマクロ
Macro Divide_Complex()  string w_inp Variable n
silent 1 PauseUpdate
String w_real, w_imag
n=0 do w_inp=WaveName("", n, 1)
if(strlen(w_inp)==0)  break endif
w_real="Re_"+w_inp w_imag="Im_"+w_inp Duplicate/O $w_inp, $w_real, $w_imag Redimension/R $w_real, $w_imag $w_real = real($w_inp) $w_imag = imag($w_inp)
n+=1 while(1)
End
0 notes
hemmy-ibr · 6 years
Text
異なるx軸を持つ複数のyウェーブを同じグラフに表示するマクロ
異なるx軸ウェーブを持つ、複数のウェーブを同じグラフに描くには、ひとつひとつ組み合わせを指定しなければならない。
ここではすべてのウェーブが通し番号で管理されている前提で、個々のウェーブを、対応するx軸を指定したうえでまとめてグラフに表示するマクロを紹介する。
Macro MakeGraph_xy(startnum,endnum)
Variable startnum, endnum
String ywave,xwave
silent 1
pauseupdate
if(startnum>endnum)
 Abort "startnum is required to be smaller than endnum."
endif
Variable n=startnum
do
 ywave="Int"+num2str(n) //y軸に使いたいデータをwave名で指定する
 xwave="freq_"+num2str(n) //x軸に使いたいデータをwave名で指定する
 if(n==startnum)
  Display $ywave vs $xwave
 else
  AppendToGraph $ywave vs $xwave
 endif
 n+=1
while(n<=endnum)
ModifyGraph tick=2,mirror=1,standoff=0 //作成するグラフのスタイルを編集する
ModifyGraph gFont="Times New Roman"
End
たとえばstartnum=3, endnum=5の場合、
上記のマクロは、
Display Int3 vs freq_3
AppendToGraph Int4 vs freq_4
AppendToGraph Int5 vs freq_5
と手入力することに等しい。
0 notes
hemmy-ibr · 6 years
Text
ウェーブ名の頭とお尻を修飾するマクロ
このマクロを使うと、複数のwaveに対して同時に接頭辞と接尾辞をつけることができます。
ただし、waveの名前が31文字を超えるとエラーになってしまうので気をつけましょう。
Macro AddPrefixSuffix(prfx, sffx) String prfx, sffx Prompt prfx, "prefix" Prompt sffx, "suffix"
String oldname String newname Variable i
silent 1 pauseupdate
i=0 do oldname=Wavename("",i,1) if(strlen(oldname)==0)  break else newname=prfx+oldname+sffx Rename $oldname, $newname endif i+=1 while(1)
Endmacro
1 note · View note