// $Id: comppowspec.hoc,v 1.11 2011/02/22 21:02:34 samn Exp $ // performs comparisons of experimental to simulation power spectra {colW=colH=3 mytstop=1e3} //strdef strrcs //strrcs="nqsnet.hoc,65,network.hoc,125,params.hoc,112,run.hoc,53,nload.hoc,182" //rcsopen(strrcs) // load sim from RCS mytstop=htmax=tstop=20e3 rcsopen("load.hoc",88) if(g==nil)gg() objref nqe // experimental data power spectra nqe=new NQS("/u/samn/ibohk/data/10sep24_sal-j6-0611-2.bpf_matfftpow_smooth.nqs") //nqe=new NQS("/u/samn/ibohk/data/10sep24_sal-j6-0611-2.bpf_matfftpow_raw.nqs") declare("sixcut",0) // do a six Hz cutoff objref nqe2 nqe2=new NQS() nqe.select("f","<=",100) // 209716 nqe2.cp(nqe.out) objref nqe2rs // resample power spectra to have same size as nqf200 (or nqpmtm) strdef strpow strpow="nqf200" proc mknqe2rs () { {nqsdel(nqe2rs) nqe2rs=new NQS("f","pow")} if(!strcmp(strpow,"nqf200")) nsz=2048 else nsz=2049 for i=0,1 { // do the resampling nqe2rs.v[i].copy(nqe2.v[i]) resample(nqe2rs.v[i],nsz) } mx=nqe2rs.v[1].max // peak amplitude in experimental data } objref nqn,vfctr {vfctr=new Vector() vfctr.indgen(0.05,1,0.05)} fctr=1 //* mknqn - make an nqs with error to find optimal matches proc mknqn () { local sc {mknqe2rs() nqsdel(nqn) nqn=new NQS("sidx","SIMTYP","col","err","fctr","DISCONCOL")} for i=0,nqbatch.v.size-1 { print i nq=nqbatch.get(strpow,i).o sidx=nqbatch.get("sidx",i).x SIMTYP=nqbatch.get("SIMTYP",i).x DISCONCOL=nqbatch.get("DISCONCOL",i).x for j=0,numcols-1 { {sprint(tstr,"C%dintraE",j) vec.resize(0) vec.copy(nq.v[nq.fi(tstr)])} if(sixcut) vec.fill(0,0,62*2) if(!strcmp(strpow,"nqpmtm")) boxfilt(vec,201) for vtr(&fctr,vfctr) { vec0.copy(vec) if(sixcut) vec0.fill(0,0,62) if(mx>vec0.max) sc=fctr*mx/vec0.max else sc=fctr*vec0.max/mx vec0.mul(sc) nqn.append(sidx,SIMTYP,j,vec0.meansqerr(nqe2rs.v[1]),fctr,DISCONCOL) } } } } objref myv[5] //* drit(exclude disconcol) - draw the best matches proc drit () { local skipdiscon if(numarg()>0)skipdiscon=$1 else skipdiscon=1 nqe2.gr("pow","f",0,1,1) for case(&SIMTYP,0,18,20,-18,&i) { myv[i]=new Vector() if(skipdiscon) nqn.select("SIMTYP",SIMTYP) else nqn.select("SIMTYP",SIMTYP,"DISCONCOL",0) err=nqn.getcol("err").min nqn.select("SIMTYP",SIMTYP,"err",err) nq=nqbatch.get(strpow,nqn.fetch("sidx")).o vec.resize(0) sprint(tstr,"C%dintraE",nqn.fetch("col")) vec.copy(nq.v[nq.fi(tstr)]) fctr=nqn.fetch("fctr") if(sixcut) vec.fill(0,0,62*2) if(!strcmp(strpow,"nqpmtm")) boxfilt(vec,201) {myv[i].copy(vec) myv[i].mul(fctr*mx/myv[i].max)} myv[i].plot(g,nq.v,i+2,1) print SIMTYP,err } } //* drbad(exclude disconcol) - draw the worst matches proc drbad () { local skipdiscon,idx if(numarg()>0)skipdiscon=$1 else skipdiscon=1 nqe2.gr("pow","f",0,1,1) for case(&SIMTYP,0,18,20,-18,&i) { myv[i]=new Vector() if(skipdiscon) nqn.select("SIMTYP",SIMTYP) else nqn.select("SIMTYP",SIMTYP,"DISCONCOL",0) err=nqn.getcol("err").max nqn.select("SIMTYP",SIMTYP,"err",err) // print nqn.select("SIMTYP",SIMTYP,"err",">=",err*.9) // for vtr(&idx,nq nq=nqbatch.get(strpow,nqn.fetch("sidx")).o vec.resize(0) sprint(tstr,"C%dintraE",nqn.fetch("col")) vec.copy(nq.v[nq.fi(tstr)]) fctr=nqn.fetch("fctr") if(sixcut) vec.fill(0,0,62*2) if(!strcmp(strpow,"nqpmtm")) boxfilt(vec,201) {myv[i].copy(vec) myv[i].mul(fctr*mx/myv[i].max)} myv[i].plot(g,nq.v,i+2,1) print SIMTYP,err } }