;Written by SRM 2000. Use with caution. pro newjoin,linearize,ll1a,fl1a,nl1a,cl1a,ls1a,fs1a,ns1a,cs1a,ll1b,fl1b,nl1b,cl1b,ls1b,fs1b,ns1b,cs1b,ll2a,fl2a,nl2a,cl2a,ls2a,fs2a,ns2a,cs2a,ll2b,fl2b,nl2b,cl2b,ls2b,fs2b,ns2b,cs2b,ftot,ntot,ctot,shifts sec=1. dlin=round(100.*(linearize(1)-linearize(0)))/100. ;to prevent single prec error ;linearize fl1alin=interpol(fl1a,ll1a,linearize) nl1alin=interpol(nl1a,ll1a,linearize) cl1alin=interpol(cl1a,ll1a,linearize) ; fs1alin=interpol(fs1a,ls1a,linearize) ns1alin=interpol(ns1a,ls1a,linearize) cs1alin=interpol(cs1a,ls1a,linearize) ; fl1blin=interpol(fl1b,ll1b,linearize) nl1blin=interpol(nl1b,ll1b,linearize) cl1blin=interpol(cl1b,ll1b,linearize) ; fs1blin=interpol(fs1b,ls1b,linearize) ns1blin=interpol(ns1b,ls1b,linearize) cs1blin=interpol(cs1b,ls1b,linearize) ; fl2alin=interpol(fl2a,ll2a,linearize) nl2alin=interpol(nl2a,ll2a,linearize) cl2alin=interpol(cl2a,ll2a,linearize) ; fs2alin=interpol(fs2a,ls2a,linearize) ns2alin=interpol(ns2a,ls2a,linearize) cs2alin=interpol(cs2a,ls2a,linearize) ; fl2blin=interpol(fl2b,ll2b,linearize) nl2blin=interpol(nl2b,ll2b,linearize) cl2blin=interpol(cl2b,ll2b,linearize) ; fs2blin=interpol(fs2b,ls2b,linearize) ns2blin=interpol(ns2b,ls2b,linearize) cs2blin=interpol(cs2b,ls2b,linearize) ; ;The shift range for the convolution calculation shf=100 !p.multi=[0,3,4] ;overlap for l1a to l2b ioverlap=where(abs(linearize-1050) lt 20) convolute,fl1alin(ioverlap),fl2blin(ioverlap),shf,con,yfit,xcon,aa,xl1al2b,noplot=0 plot,linearize,fl1alin,color=255,xr=minmax(linearize(ioverlap)),xs=1 oplot,linearize+(xl1al2b-shf)*dlin,fl2blin,color=60000 wait,sec ;overlap for l1b to l2a ioverlap=where(abs(linearize-1140) lt 20) convolute,fl1blin(ioverlap),fl2alin(ioverlap),shf,con,yfit,xcon,aa,xl1bl2a,noplot=0 plot,linearize,fl1blin,color=255,xr=minmax(linearize(ioverlap)),xs=1 oplot,linearize+(xl1bl2a-shf)*dlin,fl2alin,color=60000 wait,sec ;overlap for s1a to s2b ioverlap=where(abs(linearize-1050) lt 20) convolute,fs1alin(ioverlap),fs2blin(ioverlap),shf,con,yfit,xcon,aa,xs1as2b,noplot=0 plot,linearize,fs1alin,color=255,xr=minmax(linearize(ioverlap)),xs=1 oplot,linearize+(xs1as2b-shf)*dlin,fs2blin,color=60000 wait,sec ;overlap for s1b to s2a ioverlap=where(abs(linearize-950) lt 30) convolute,fs1blin(ioverlap),fs2alin(ioverlap),shf,con,yfit,xcon,aa,xs1bs2a,noplot=0 plot,linearize,fs1blin,color=255,xr=minmax(linearize(ioverlap)),xs=1 oplot,linearize+(xs1bs2a-shf)*dlin,fs2alin,color=60000 wait,sec print,'xl1al2b,xl1bl2a,xs1as2b,xs1bs2a',[xl1al2b,xl1bl2a,xs1as2b,xs1bs2a]-shf ;stop ;overlap region for l1a to s1a ioverlap=where(abs(linearize-1050) lt 20) convolute,fl1alin(ioverlap),fs1alin(ioverlap),shf,con,yfit,xcon,aa,xl1as1a,noplot=0 plot,linearize,fl1alin,color=255,xr=minmax(linearize(ioverlap)),xs=1 oplot,linearize+(xl1as1a-shf)*dlin,fs1alin,color=60000 wait,sec ;overlap for l1a to s2b convolute,fl1alin(ioverlap),fs2blin(ioverlap),shf,con,yfit,xcon,aa,xl1as2b,noplot=0 plot,linearize,fl1alin,color=255,xr=minmax(linearize(ioverlap)),xs=1 oplot,linearize+(xl1as2b-shf)*dlin,fs2blin,color=60000 wait,sec print,'xl1as1a,xl1as2b',[xl1as1a,xl1as2b]-shf ;stop ;overlap region for l2b to s1a ioverlap=where(abs(linearize-1050) lt 20) convolute,fl2blin(ioverlap),fs1alin(ioverlap),shf,con,yfit,xcon,aa,xl2bs1a,noplot=0 plot,linearize,fl2blin,color=255,xr=minmax(linearize(ioverlap)),xs=1 oplot,linearize+(xl2bs1a-shf)*dlin,fs1alin,color=60000 wait,sec ;overlap for l2b to s2b convolute,fl2blin(ioverlap),fs2blin(ioverlap),shf,con,yfit,xcon,aa,xl2bs2b,noplot=0 plot,linearize,fl2blin,color=255,xr=minmax(linearize(ioverlap)),xs=1 oplot,linearize+(xl2bs2b-shf)*dlin,fs2blin,color=60000 wait,sec print,'xl2bs1a,xl2bs2b',[xl2bs1a,xl2bs2b]-shf ;stop ;shifts and checks !p.multi=[0,2,3] ;shift for l2b to l1a fl2blin=shift(fl2blin,xl1al2b-shf) nl2blin=shift(nl2blin,xl1al2b-shf) cl2blin=shift(cl2blin,xl1al2b-shf) plot,linearize,fl1alin,color=255,xr=[-10,10]+1050,title='l2b to l1a' oplot,linearize,fl2blin,color=60000 wait,sec ;shift for l2a to l1b (assuming l1b is same a l1a -- it seems to be close) ;this should be shifted by just xl1al2b but ;there is an offset from the l2b solution ;it seems to be systematic so for now use xl1bl2a fl2alin=shift(fl2alin,xl1bl2a-shf) nl2alin=shift(nl2alin,xl1bl2a-shf) cl2alin=shift(cl2alin,xl1bl2a-shf) plot,linearize,fl2alin,color=255,xr=[-10,10]*2+1130,title='l2a to l1b (assumes l1b solution is always lined to l1a)' oplot,linearize,fl1blin,color=60000 ; ;shift for s1a to l1a fs1alin=shift(fs1alin,xl1as1a-shf) ns1alin=shift(ns1alin,xl1as1a-shf) cs1alin=shift(cs1alin,xl1as1a-shf) plot,linearize,fl1alin,color=255,xr=[-10,10]+1050,title='s1a to l1a' oplot,linearize,fs1alin,color=60000 wait,sec ; ;shift for s1b to l1a (assuming s1b is same as s1a - is very close) fs1blin=shift(fs1blin,xl1as1a-shf) ns1blin=shift(ns1blin,xl1as1a-shf) cs1blin=shift(cs1blin,xl1as1a-shf) plot,linearize,fl1alin,color=255,xr=[-10,10]+1050,title='s1a to l1a' oplot,linearize,fs1alin,color=60000 wait,sec ; ;shift for s2b to l1a fs2blin=shift(fs2blin,xl1as2b-shf) ns2blin=shift(ns2blin,xl1as2b-shf) cs2blin=shift(cs2blin,xl1as2b-shf) plot,linearize,fl1alin,color=255,xr=[-10,10]+1050,title='s2b to l1a' oplot,linearize,fs2blin,color=60000 wait,sec ; ;shift for s2a to l1a (assuming s2a is same as s2b - is very close) fs2alin=shift(fs2alin,xl1as2b-shf) ns2alin=shift(ns2alin,xl1as2b-shf) cs2alin=shift(cs2alin,xl1as2b-shf) plot,linearize,fs1blin,color=255,xr=[-10,10]+955,title='s2a to l1a' oplot,linearize,fs2alin,color=60000 wait,sec ;stop ; shifts={shift:([xl1al2b,xl1bl2a,xs1as2b,xs1bs2a,xl1as1a,xl1as2b,xl2bs1a,xl2bs2b]-shf),label:['xl1al2b','xl1bl2a','xs1as2b','xs1bs2a','xl1as1a','xl1as2b','xl2bs1a','xl2bs2b']} ; ;the total counts ctot=cl1alin+cs1alin+cl1blin+cs1blin+cl2alin+cs2alin+cl2blin+cs2blin ;The weighted shifted average of all the data ftot=(fl1alin*cl1alin+fs1alin*cs1alin+fl1blin*cl1blin+fs1blin*cs1blin+fl2alin*cl2alin+fs2alin*cs2alin+fl2blin*cl2blin+fs2blin*cs2blin)/ctot ntot=sqrt((nl1alin*cl1alin/ctot)^2+(ns1alin*cs1alin/ctot)^2+(nl1blin*cl1blin/ctot)^2+(ns1blin*cs1blin/ctot)^2+(nl2alin*cl2alin/ctot)^2+(ns2alin*cs2alin/ctot)^2+(nl2blin*cl2blin/ctot)^2+(ns2blin*cs2blin/ctot)^2) return end