From 446254845d3078064c8e40b422712d8cc28b195e Mon Sep 17 00:00:00 2001 From: Eric Mandel Date: Tue, 29 Oct 2019 08:41:22 -0400 Subject: [PATCH] add config dialog box to analysis plots --- images/gears.png | Bin 0 -> 860 bytes js9-allinone.css | 7 + js9-allinone.js | 1013 ++++++++++++++++++++-------------------- js9.css | 7 + js9.js | 515 ++++++++++++++------ js9.min.js | 1011 +++++++++++++++++++-------------------- mkallinone | 2 +- params/plotconfig.html | 138 ++++++ 8 files changed, 1534 insertions(+), 1159 deletions(-) create mode 100644 images/gears.png create mode 100644 params/plotconfig.html diff --git a/images/gears.png b/images/gears.png new file mode 100644 index 0000000000000000000000000000000000000000..39c48795d973de9ba4c964bb7f0d375d08386719 GIT binary patch literal 860 zcmeAS@N?(olHy`uVBq!ia0vp^A|TAc1|)ksWqE-VV{wqX6T`Z5GB1G~&H|6fVg?3o zVGw3ym^DWNs30;kB%&n3*T*V3KUXg?B|j-uuOhbqsG5Pnrosxy%uOvxRH(?!$t$+1 zuvG%9umZ9{!um=IU?nBlwn`Dc0SeCfMX3s=dM0`XN_Jcd3JNwwDQQ+gE^bimK%T8q zMoCG5mA-y?dAVM>v0i>ry1t>MrKP@sk-m|UE>MMTab;dfVufyAu`tKo-FP#GNIXX$YJ0ilN>DdQcxEqi?8Zpbs}2sMQ7}YUN*) znF_QSWWJrD4Ok_L7}OpceURlyj)C|TEDH3h9hZ$hJlO2Gd=9Bc0t0!Dr;B5Vh2Y)E zd$rvYMUL0stBYgz+L+)lC5SCGXvP#H?b)q=nEx?Et}&8Y<7S*{II)$-j7!qR<6iB) z@0QEwz1y32^4XQ=me1!E&-*;*`O|4$j#>e!D-7=n-#K~X*bTl@D_gTPL{yI%ojNYA z<6s{H$Pc#z9BTX+-*yfL?c_bRv~v)ujCiz9XtsyGVJb5yf)in z%dT@izeHmG%z0L*AtvuSUo~}`t?vVwn$_9UBKp@EMW25mT=S6kjav85Mc*W^hBVAqB$-6e5*Ll}{F4AUm>`!*b_iyEDn!a$pITZY) z-lSSq_hMP`_BGe6A8X{cXBwdY}A+rONa?-b:b}},"es6","es3");$jscomp.polyfill("Math.sinh",function(a){if(a)return a;var c=Math.exp;return function(a){a=Number(a);return 0===a?a:(c(a)-c(-a))/2}},"es6","es3");$jscomp.polyfill("Object.is",function(a){return a?a:function(a,b){return a===b?0!==a||1/a===1/b:a!==a&&b!==b}},"es6","es3"); -$jscomp.polyfill("Array.prototype.includes",function(a){return a?a:function(a,b){var c=this;c instanceof String&&(c=String(c));var e=c.length;b=b||0;for(0>b&&(b=Math.max(b+e,0));bb&&(b=Math.max(b+e,0));b=g}},"es6","es3");$jscomp.polyfill("Math.log10",function(a){return a?a:function(a){return Math.log(a)/Math.LN10}},"es6","es3");$jscomp.polyfill("Number.parseFloat",function(a){return a||parseFloat},"es6","es3"); +$jscomp.polyfill("Number.isNaN",function(a){return a?a:function(a){return"number"===typeof a&&isNaN(a)}},"es6","es3");$jscomp.findInternal=function(a,c,b){a instanceof String&&(a=String(a));for(var d=a.length,e=0;e=f}},"es6","es3");$jscomp.polyfill("Number.parseFloat",function(a){return a||parseFloat},"es6","es3");$jscomp.polyfill("Math.log10",function(a){return a?a:function(a){return Math.log(a)/Math.LN10}},"es6","es3"); $jscomp.polyfill("Number.isFinite",function(a){return a?a:function(a){return"number"!==typeof a?!1:!isNaN(a)&&Infinity!==a&&-Infinity!==a}},"es6","es3");var Module;"object"!==typeof Module&&(Module={}); var JS9=function(){var a={NAME:"JS9",VERSION:"2.5",COPYRIGHT:"Copyright (c) 2012-2019 Smithsonian Institution",DEFID:"JS9",WIDTH:512,HEIGHT:512,ANON:"Anonymous",PREFSFILE:"js9Prefs.json",WORKERFILE:"js9worker.js",ZINDEX:0,SHAPEZINDEX:4,MESSZINDEX:80,BTNZINDEX:90,MENUZINDEX:1E3,COLORSIZE:1024,SCALESIZE:16384,INVSIZE:1024,HISTSIZE:16384,INSTALLDIR:"",TOROOT:"",PLUGINS:"",LIGHTWIN:"dhtml",ANTIALIAS:!1,SCALEIREG:!0,NOMOVE:3,DBLCLICK:300,TIMEOUT:250,SPINOUT:250,SUPERMENU:/^SUPERMENU_/,RESIZEDIST:20,RESIZEFUDGE:5, RAWID0:"raw0",RAWIDX:"alt",IDFMT:" (%s)",MINZOOM:.125,MAXZOOM:32,ADDZOOM:.1,CHROMEFILEWARNING:!0,CLIPBOARDERROR:"the local clipboard (which only holds data copied from within JS9) does not contain any content. Were you trying to paste something copied outside JS9?",CLIPBOARDERROR2:"the local clipboard (which only holds data copied from within JS9) does not contain any regions",URLEXP:/^(https?|ftp):\/\//};a.TOUCHSUPPORTED=window.hasOwnProperty("ontouchstart")||0parseInt(window.electronVersion,10))a.globalOpts.internalColorPicker=!1;a.hasNode="object"===typeof process&&"function"===typeof require;a.hasNode&&(a.localMount=require("os").hostname()||"localAccess");window.multiElectron&&(a.globalOpts.localStorage=!1)}a.Image=function(c,b,d){var e=this,g=null,f=0,h=0,k=function(b){b=b||{};a.isNull(b.scaleclipping)?"zscale"===e.params.scaleclipping?e.zscale(!0): -"zmax"===e.params.scaleclipping&&e.zscale("zmax"):"zscale"===b.scaleclipping?e.zscale(!0):"zmax"===b.scaleclipping&&e.zscale("zmax");a.notNull(b.scalemin)&&(e.params.scalemin=b.scalemin);a.notNull(b.scalemax)&&(e.params.scalemax=b.scalemax)},l=function(b){var c,d=a.globalOpts.imopts,f=a.globalOpts.imcmap,h=a.globalOpts.alerts;e.display.clearMessage();a.images.push(e);e.notifyHelper();e.showShapeLayer("regions",!0,{local:!0});g&&g.regions&&e.addShapes("regions",g.regions);a.globalOpts.alerts=!1;if(e.raw&& -e.raw.header&&e.raw.header[f]){try{var k=JSON.parse(e.raw.header[f])}catch(x){k=null}if(k)try{a.AddColormap(k)}catch(x){}}if(e.raw&&e.raw.header&&e.raw.header[f+"1"]){var l=1;for(c="";100>l;l++){var m=f+String(l);if(e.raw.header[m])c+=e.raw.header[m];else break}if(c){try{k=JSON.parse(c)}catch(x){k=null}if(k)try{a.AddColormap(k)}catch(x){}}}if(e.raw&&e.raw.header&&e.raw.header[d]){try{k=JSON.parse(e.raw.header[d])}catch(x){k=null}if(k)try{e.setParam("all",k)}catch(x){}}if(e.raw&&e.raw.header&&e.raw.header[d+ -"1"]){l=1;for(c="";100>l;l++)if(m=d+String(l),e.raw.header[m])c+=e.raw.header[m];else break;if(c){try{k=JSON.parse(c)}catch(x){k=null}if(k)try{e.setParam("all",k)}catch(x){}}}a.globalOpts.alerts=h;e.xeqPlugins("image","onimageload");e.updateshapes&&e.updateShapes("regions","all","update");e.setStatus("load","complete");a.waiting(!1);if(b)try{a.xeqByName(b,window,e)}catch(x){a.error("in image onload callback",x,!1)}c=e.proxyURL||e.file;b=c.replace(/\[.*\]/,"");if(a.preloadwaiting[c]||a.preloadwaiting[b])if(delete a.preloadwaiting[c], -delete a.preloadwaiting[b],!Object.keys(a.preloadwaiting).length&&a.notNull(a.globalOpts.onpreload))try{a.xeqByName(a.globalOpts.onpreload,window,e)}catch(x){a.error("in onpreload callback",x,!1)}g&&g.allext&&e.hdus&&0=g.length&&a.cleanupFITSFile(f,!0));f.altwcs&&this.freeWCS(f)}e.removeProxyFile();e.rgb=null;e.offscreen=null;e.raw=null;e.colorData=null;e.colorCells=null;e.psColors=null;e.psInverse=null;a.images.splice(b,1);break}if(d){for(b=d-=2;0<=b;b--)if(e= -a.images[b],this.display===e.display){e.displayImage("all");e.refreshLayers();d=a.images.length;break}for(b=a.images.length-1;b>d;b--)if(e=a.images[b],this.display===e.display){e.displayImage("all");e.refreshLayers();break}}};a.Image.prototype.mkOffScreenCanvas=function(){if(!this.png||!this.png.image)return this;this.offscreen={};this.offscreen.canvas=document.createElement("canvas");this.offscreen.canvas.setAttribute("width",this.png.image.width);this.offscreen.canvas.setAttribute("height",this.png.image.height); -this.offscreen.context=this.offscreen.canvas.getContext("2d");a.ANTIALIAS||(this.offscreen.context.imageSmoothingEnabled=!1,this.offscreen.context.webkitImageSmoothingEnabled=!1,this.offscreen.context.msImageSmoothingEnabled=!1);this.offscreen.context.drawImage(this.png.image,0,0);try{this.offscreen.img=this.offscreen.context.getImageData(0,0,this.png.image.width,this.png.image.height)}catch(c){a.CHROMEFILEWARNING&&"Chrome"===a.BROWSER[0]&&""===document.domain?alert("When using the file:// URI, Chrome must be run with the --allow-file-access-from-files switch to permit JS9 to access data."): -alert("could not read off-screen image data [same-origin policy violation?]")}return this};a.Image.prototype.initLCS=function(c){var b=[[0,0,0],[0,0,0],[0,0,0]];c=c||this.raw.header;var d=c.CRPIX1||1,e=c.CRPIX2||1;if(c.LCSROTA2&&c.CROTA2){var g=-c.CROTA2*Math.PI/180;var f=Math.sin(g);var h=Math.cos(g);g=[[0,0,0],[0,0,0],[0,0,0]];g[0][0]=h;g[0][1]=-f;g[0][2]=0;g[1][0]=f;g[1][1]=h;g[1][2]=0;(f=a.invertMatrix3(g))||(g=null)}b[0][0]=a.defNull(c.LTM1_1,1);b[1][0]=c.LTM2_1||0;b[0][1]=c.LTM1_2||0;b[1][1]= -a.defNull(c.LTM2_2,1);b[2][0]=c.LTV1||0;b[2][1]=c.LTV2||0;if("image"===this.imtab&&this.params.ltvbug){if(a.notNull(c.LTV1))for(h=0;2>h;h++){var k=Math.abs(b[0][h]);0k&&(b[2][0]+=.5*k)}if(a.notNull(c.LTV2))for(h=0;2>h;h++)k=Math.abs(b[1][h]),0k&&(b[2][1]+=.5*k)}this.lcs.physical={forward:$.extend(!0,[],b),reverse:a.invertMatrix3(b)};this.lcs.physical.reverse?g&&(this.lcs.physical.frot=$.extend(!0,[],g),this.lcs.physical.rrot=$.extend(!0,[],f),this.lcs.physical.cx=d-b[2][0]-1,this.lcs.physical.cy= -e-b[2][1]-1):delete this.lcs.physical;b[0][0]=a.defNull(c.DTM1_1,1);b[1][0]=c.DTM2_1||0;b[0][1]=c.DTM1_2||0;b[1][1]=a.defNull(c.DTM2_2,1);b[2][0]=c.DTV1||0;b[2][1]=c.DTV2||0;this.lcs.detector={forward:$.extend(!0,[],b),reverse:a.invertMatrix3(b)};this.lcs.detector.reverse?g&&(this.lcs.detector.frot=$.extend(!0,[],g),this.lcs.detector.rrot=$.extend(!0,[],f),this.lcs.detector.cx=d-b[2][0]-1,this.lcs.detector.cy=e-b[2][1]-1):delete this.lcs.detector;b[0][0]=a.defNull(c.ATM1_1,1);b[1][0]=c.ATM2_1||0; -b[0][1]=c.ATM1_2||0;b[1][1]=a.defNull(c.ATM2_2,1);b[2][0]=c.ATV1||0;b[2][1]=c.ATV2||0;this.lcs.amplifier={forward:$.extend(!0,[],b),reverse:a.invertMatrix3(b)};this.lcs.amplifier.reverse?g&&(this.lcs.amplifier.frot=$.extend(!0,[],g),this.lcs.amplifier.rrot=$.extend(!0,[],f),this.lcs.amplifier.cx=d-b[2][0]-1,this.lcs.amplifier.cy=e-b[2][1]-1):delete this.lcs.amplifier;this.params&&!this.lcs[this.params.lcs]&&(this.params.lcs="image");this.params&&!this.params.wcssys0&&(this.setWCSSys("physical"),this.params.wcssys0= -this.params.lcs);this.lcs.physical&&!this.lcs.ophysical&&(this.lcs.ophysical=$.extend(!0,{},this.lcs.physical));return this};a.Image.prototype.mkRawDataFromIMG=function(c){var b,d;if(c){var e=c.height;var g=c.width;var f=c.data;this.raws.push({from:"img"});this.raw=this.raws[this.raws.length-1];this.raw.id=a.RAWID0;this.raw.data=new Float32Array(e*g);for(d=c=0;dc||m)this.mkRawDataFromIMG(this.offscreen.img);else{c=g.join("");2l.naxis&&a.error("can't image a FITS file with less than 2 dimensions"); -if(this.raw){var m=this.raw;var n=this.raw.width;var q=this.raw.height;var p=this.raw.bitpix;var t=a.defNull(this.raw.header.LTM1_1,1);var r=this.params.wcssys;var u=this.params.wcsunits;this.freeWCS()}this.raws=this.raws||[];if(f=this.raws.length){b.rawid=b.rawid||a.RAWIDX;for(e=g=0;e]/);m=c=!1;e=0;for(b=!1;e< -v.length&&!b;e++)switch(v[e]){case "never":c=!1;b=!0;break;case "always":b=c=!0;break;case "heap":m=!0;break;case "auto":2>=this.raw.header.NAXIS&&(!this.hdus||1===this.hdus.length)?c=!0:(c=!1,b=!0);break;case "nocube":2>=this.raw.header.NAXIS?c=!0:(c=!1,b=!0);break;case "noext":this.hdus&&1!==this.hdus.length?(c=!1,b=!0):c=!0;break;case "size":v[e+1]?a.vsize(l.fits.vfile)>1E6*v[e+1]?c=!0:(c=!1,b=!0):(c=!1,b=!0)}c?(2d.x0&&(a.globalOpts.panWithinDisplay?d.x1-=d.x0:d.ix=d.x0*d.zoom,d.x0=0);0>d.y0&&(a.globalOpts.panWithinDisplay?d.y1-=d.y0:d.iy=d.y0*d.zoom,d.y0=0);d.x1>this.raw.width&&(a.globalOpts.panWithinDisplay?d.x0-=d.x1-this.raw.width:d.ix=(d.x1-this.raw.width)*d.zoom,d.x1=this.raw.width);d.y1>this.raw.height&&(a.globalOpts.panWithinDisplay?d.y0-=d.y1-this.raw.height:d.iy=(d.y1-this.raw.height)*d.zoom,d.y1=this.raw.height); -0d.ix&&d.x1d.iy&&d.y1=d.width||0>=d.height)b=sprintf("invalid image section: %s,%s [%s,%s, %s,%s, %s]",d.width,d.height,d.x0,d.y0,d.x1,d.y1,d.zoom),a.error(b);this.offscreenRGB=null;this.params.zoom=d.zoom;return this};a.Image.prototype.mkColorData=function(){var c,b=a.SCALESIZE,d=this.params.scalemin,e=this.params.scalemax,g=this.raw.width*this.raw.height,f=(b-1)/(e-d);if(!this.colorData||this.colorData.length=e?b-1:Math.floor((h-d)*f+.5)}return this};a.Image.prototype.calcContrastBias=function(c){var b=this.params.bias,d=a.COLORSIZE,e=this.params.contrast;if(1E-4>b-.5&&1E-4>e-1)return c;this.params.invert&&(b=1-b);c=Math.floor(((c/d-b)*e+.5)*d);return 0>c?0:c>=d?d-1:c};a.Image.prototype.mkColorCells=function(){var c,b=a.COLORSIZE;this.colorCells||(this.colorCells=[]);for(c=0;cb;b+=2,c++){var m="0123456789ABCDEF".indexOf(k.charAt(b));var n="0123456789ABCDEF".indexOf(k.charAt(b+1));l[c]=16*m+n}h[NaN]= -l}this.psInverse||(this.psInverse=[],this.psInverse[NaN]=0);k=this.params.scalemax-this.params.scalemin;b=this.params.scalemin;switch(this.params.scale){case "linear":for(h=0;h=d&&(c=d-1),this.psColors[h]=this.colorCells[c];for(h=0;h=d&&(c=d-1),this.psColors[h]=this.colorCells[c];for(h=0;h=d&&(c=d-1),this.psColors[h]=this.colorCells[c];for(h=0;h=d&&(c=d-1),this.psColors[h]=this.colorCells[c];for(h= -0;h=d&&(c=d-1),this.psColors[h]=this.colorCells[c];for(h=0;h=d&&(c=d-1),this.psColors[h]=this.colorCells[c];for(h=0;h=b&&l[h]<=p&&(n=Math.floor((l[h]-b)/k*f+.5),n=n&&l -d);n++);c=n/f;this.psInverse[h]=c*k+b}break;default:a.error("unknown scale '"+this.params.scale+"'")}return this};a.Image.prototype.mkRGBImage=function(){var c,b,d,e,g=null,f=null,h=null,k=!1;if(!this.rgb)return this;!a.globalOpts.rgb.active||this!==a.globalOpts.rgb.rim&&this!==a.globalOpts.rgb.gim&&this!==a.globalOpts.rgb.bim||(k=!0,a.globalOpts.rgb.rim&&(g=a.globalOpts.rgb.rim),a.globalOpts.rgb.gim&&(f=a.globalOpts.rgb.gim),a.globalOpts.rgb.bim&&(h=a.globalOpts.rgb.bim));var l=this.display.context; -var m=this.rgb;var n=m.sect;if(this.MakeRGBImage&&"function"===typeof this.MakeRGBImage&&this.MakeRGBImage()||this.MakePrimaryImage&&"function"===typeof this.MakePrimaryImage&&this.MakePrimaryImage())return this;if(this.rgbFile){var q=n.width/n.zoom;var p=n.height/n.zoom;var t=n.x0;var r=this.offscreen.canvas.height-1-(n.y0+p);r=this.offscreen.context.getImageData(t,r,q,p);if(1===n.zoom)m.img=r;else for(m.img=l.createImageData(n.width,n.height),m=m.img,d=c=0;c=n.y0;c-=B,d++)for(u=c*this.raw.width,v=d*E,l=Math.floor(n.x0),b=0;lh&&(h=a.pts[q].x),a.pts[q].xm&&(m=a.pts[q].y),a.pts[q].yparseInt(window.electronVersion,10))a.globalOpts.internalColorPicker=!1;a.hasNode="object"===typeof process&&"function"===typeof require;a.hasNode&&(a.localMount=require("os").hostname()|| +"localAccess");window.multiElectron&&(a.globalOpts.localStorage=!1)}a.Image=function(c,b,d){var e=this,f=null,g=0,h=0,l=function(b){b=b||{};a.isNull(b.scaleclipping)?"zscale"===e.params.scaleclipping?e.zscale(!0):"zmax"===e.params.scaleclipping&&e.zscale("zmax"):"zscale"===b.scaleclipping?e.zscale(!0):"zmax"===b.scaleclipping&&e.zscale("zmax");a.notNull(b.scalemin)&&(e.params.scalemin=b.scalemin);a.notNull(b.scalemax)&&(e.params.scalemax=b.scalemax)},k=function(b){var c,d=a.globalOpts.imopts,g=a.globalOpts.imcmap, +h=a.globalOpts.alerts;e.display.clearMessage();a.images.push(e);e.notifyHelper();e.showShapeLayer("regions",!0,{local:!0});f&&f.regions&&e.addShapes("regions",f.regions);a.globalOpts.alerts=!1;if(e.raw&&e.raw.header&&e.raw.header[g]){try{var l=JSON.parse(e.raw.header[g])}catch(x){l=null}if(l)try{a.AddColormap(l)}catch(x){}}if(e.raw&&e.raw.header&&e.raw.header[g+"1"]){var k=1;for(c="";100>k;k++){var m=g+String(k);if(e.raw.header[m])c+=e.raw.header[m];else break}if(c){try{l=JSON.parse(c)}catch(x){l= +null}if(l)try{a.AddColormap(l)}catch(x){}}}if(e.raw&&e.raw.header&&e.raw.header[d]){try{l=JSON.parse(e.raw.header[d])}catch(x){l=null}if(l)try{e.setParam("all",l)}catch(x){}}if(e.raw&&e.raw.header&&e.raw.header[d+"1"]){k=1;for(c="";100>k;k++)if(m=d+String(k),e.raw.header[m])c+=e.raw.header[m];else break;if(c){try{l=JSON.parse(c)}catch(x){l=null}if(l)try{e.setParam("all",l)}catch(x){}}}a.globalOpts.alerts=h;e.xeqPlugins("image","onimageload");e.updateshapes&&e.updateShapes("regions","all","update"); +e.setStatus("load","complete");a.waiting(!1);if(b)try{a.xeqByName(b,window,e)}catch(x){a.error("in image onload callback",x,!1)}c=e.proxyURL||e.file;b=c.replace(/\[.*\]/,"");if(a.preloadwaiting[c]||a.preloadwaiting[b])if(delete a.preloadwaiting[c],delete a.preloadwaiting[b],!Object.keys(a.preloadwaiting).length&&a.notNull(a.globalOpts.onpreload))try{a.xeqByName(a.globalOpts.onpreload,window,e)}catch(x){a.error("in onpreload callback",x,!1)}f&&f.allext&&e.hdus&&0=f.length&&a.cleanupFITSFile(g,!0));g.altwcs&&this.freeWCS(g)}e.removeProxyFile();e.rgb=null;e.offscreen=null;e.raw=null;e.colorData=null;e.colorCells=null;e.psColors=null;e.psInverse=null;a.images.splice(b,1);break}if(d){for(b=d-=2;0<=b;b--)if(e=a.images[b],this.display===e.display){e.displayImage("all");e.refreshLayers();d=a.images.length;break}for(b=a.images.length-1;b>d;b--)if(e=a.images[b],this.display===e.display){e.displayImage("all");e.refreshLayers();break}}};a.Image.prototype.mkOffScreenCanvas= +function(){if(!this.png||!this.png.image)return this;this.offscreen={};this.offscreen.canvas=document.createElement("canvas");this.offscreen.canvas.setAttribute("width",this.png.image.width);this.offscreen.canvas.setAttribute("height",this.png.image.height);this.offscreen.context=this.offscreen.canvas.getContext("2d");a.ANTIALIAS||(this.offscreen.context.imageSmoothingEnabled=!1,this.offscreen.context.webkitImageSmoothingEnabled=!1,this.offscreen.context.msImageSmoothingEnabled=!1);this.offscreen.context.drawImage(this.png.image, +0,0);try{this.offscreen.img=this.offscreen.context.getImageData(0,0,this.png.image.width,this.png.image.height)}catch(c){a.CHROMEFILEWARNING&&"Chrome"===a.BROWSER[0]&&""===document.domain?alert("When using the file:// URI, Chrome must be run with the --allow-file-access-from-files switch to permit JS9 to access data."):alert("could not read off-screen image data [same-origin policy violation?]")}return this};a.Image.prototype.initLCS=function(c){var b=[[0,0,0],[0,0,0],[0,0,0]];c=c||this.raw.header; +var d=c.CRPIX1||1,e=c.CRPIX2||1;if(c.LCSROTA2&&c.CROTA2){var f=-c.CROTA2*Math.PI/180;var g=Math.sin(f);var h=Math.cos(f);f=[[0,0,0],[0,0,0],[0,0,0]];f[0][0]=h;f[0][1]=-g;f[0][2]=0;f[1][0]=g;f[1][1]=h;f[1][2]=0;(g=a.invertMatrix3(f))||(f=null)}b[0][0]=a.defNull(c.LTM1_1,1);b[1][0]=c.LTM2_1||0;b[0][1]=c.LTM1_2||0;b[1][1]=a.defNull(c.LTM2_2,1);b[2][0]=c.LTV1||0;b[2][1]=c.LTV2||0;if("image"===this.imtab&&this.params.ltvbug){if(a.notNull(c.LTV1))for(h=0;2>h;h++){var l=Math.abs(b[0][h]);0l&&(b[2][0]+= +.5*l)}if(a.notNull(c.LTV2))for(h=0;2>h;h++)l=Math.abs(b[1][h]),0l&&(b[2][1]+=.5*l)}this.lcs.physical={forward:$.extend(!0,[],b),reverse:a.invertMatrix3(b)};this.lcs.physical.reverse?f&&(this.lcs.physical.frot=$.extend(!0,[],f),this.lcs.physical.rrot=$.extend(!0,[],g),this.lcs.physical.cx=d-b[2][0]-1,this.lcs.physical.cy=e-b[2][1]-1):delete this.lcs.physical;b[0][0]=a.defNull(c.DTM1_1,1);b[1][0]=c.DTM2_1||0;b[0][1]=c.DTM1_2||0;b[1][1]=a.defNull(c.DTM2_2,1);b[2][0]=c.DTV1||0;b[2][1]=c.DTV2||0; +this.lcs.detector={forward:$.extend(!0,[],b),reverse:a.invertMatrix3(b)};this.lcs.detector.reverse?f&&(this.lcs.detector.frot=$.extend(!0,[],f),this.lcs.detector.rrot=$.extend(!0,[],g),this.lcs.detector.cx=d-b[2][0]-1,this.lcs.detector.cy=e-b[2][1]-1):delete this.lcs.detector;b[0][0]=a.defNull(c.ATM1_1,1);b[1][0]=c.ATM2_1||0;b[0][1]=c.ATM1_2||0;b[1][1]=a.defNull(c.ATM2_2,1);b[2][0]=c.ATV1||0;b[2][1]=c.ATV2||0;this.lcs.amplifier={forward:$.extend(!0,[],b),reverse:a.invertMatrix3(b)};this.lcs.amplifier.reverse? +f&&(this.lcs.amplifier.frot=$.extend(!0,[],f),this.lcs.amplifier.rrot=$.extend(!0,[],g),this.lcs.amplifier.cx=d-b[2][0]-1,this.lcs.amplifier.cy=e-b[2][1]-1):delete this.lcs.amplifier;this.params&&!this.lcs[this.params.lcs]&&(this.params.lcs="image");this.params&&!this.params.wcssys0&&(this.setWCSSys("physical"),this.params.wcssys0=this.params.lcs);this.lcs.physical&&!this.lcs.ophysical&&(this.lcs.ophysical=$.extend(!0,{},this.lcs.physical));return this};a.Image.prototype.mkRawDataFromIMG=function(c){var b, +d;if(c){var e=c.height;var f=c.width;var g=c.data;this.raws.push({from:"img"});this.raw=this.raws[this.raws.length-1];this.raw.id=a.RAWID0;this.raw.data=new Float32Array(e*f);for(d=c=0;dc||m)this.mkRawDataFromIMG(this.offscreen.img); +else{c=f.join("");2k.naxis&&a.error("can't image a FITS file with less than 2 dimensions");if(this.raw){var m=this.raw;var n=this.raw.width;var q=this.raw.height;var p=this.raw.bitpix;var t=a.defNull(this.raw.header.LTM1_1,1);var r=this.params.wcssys;var u=this.params.wcsunits;this.freeWCS()}this.raws=this.raws|| +[];if(g=this.raws.length){b.rawid=b.rawid||a.RAWIDX;for(e=f=0;e]/);m=c=!1;e=0;for(b=!1;e=this.raw.header.NAXIS&&(!this.hdus||1===this.hdus.length)? +c=!0:(c=!1,b=!0);break;case "nocube":2>=this.raw.header.NAXIS?c=!0:(c=!1,b=!0);break;case "noext":this.hdus&&1!==this.hdus.length?(c=!1,b=!0):c=!0;break;case "size":v[e+1]?a.vsize(k.fits.vfile)>1E6*v[e+1]?c=!0:(c=!1,b=!0):(c=!1,b=!0)}c?(2d.x0&&(a.globalOpts.panWithinDisplay?d.x1-=d.x0:d.ix=d.x0*d.zoom,d.x0= +0);0>d.y0&&(a.globalOpts.panWithinDisplay?d.y1-=d.y0:d.iy=d.y0*d.zoom,d.y0=0);d.x1>this.raw.width&&(a.globalOpts.panWithinDisplay?d.x0-=d.x1-this.raw.width:d.ix=(d.x1-this.raw.width)*d.zoom,d.x1=this.raw.width);d.y1>this.raw.height&&(a.globalOpts.panWithinDisplay?d.y0-=d.y1-this.raw.height:d.iy=(d.y1-this.raw.height)*d.zoom,d.y1=this.raw.height);0d.ix&&d.x1d.iy&&d.y1=d.width||0>=d.height)b=sprintf("invalid image section: %s,%s [%s,%s, %s,%s, %s]", +d.width,d.height,d.x0,d.y0,d.x1,d.y1,d.zoom),a.error(b);this.offscreenRGB=null;this.params.zoom=d.zoom;return this};a.Image.prototype.mkColorData=function(){var c,b=a.SCALESIZE,d=this.params.scalemin,e=this.params.scalemax,f=this.raw.width*this.raw.height,g=(b-1)/(e-d);if(!this.colorData||this.colorData.length=e?b-1:Math.floor((h-d)*g+.5)}return this};a.Image.prototype.calcContrastBias=function(c){var b= +this.params.bias,d=a.COLORSIZE,e=this.params.contrast;if(1E-4>b-.5&&1E-4>e-1)return c;this.params.invert&&(b=1-b);c=Math.floor(((c/d-b)*e+.5)*d);return 0>c?0:c>=d?d-1:c};a.Image.prototype.mkColorCells=function(){var c,b=a.COLORSIZE;this.colorCells||(this.colorCells=[]);for(c=0;cb;b+=2,c++){var m="0123456789ABCDEF".indexOf(l.charAt(b));var n="0123456789ABCDEF".indexOf(l.charAt(b+1));k[c]=16*m+n}h[NaN]=k}this.psInverse||(this.psInverse=[],this.psInverse[NaN]=0);l=this.params.scalemax-this.params.scalemin;b=this.params.scalemin;switch(this.params.scale){case "linear":for(h=0;h=d&&(c=d-1),this.psColors[h]=this.colorCells[c];for(h=0;h=d&&(c=d-1),this.psColors[h]=this.colorCells[c];for(h=0;h=d&&(c=d-1),this.psColors[h]=this.colorCells[c];for(h=0;h=d&&(c=d-1),this.psColors[h]=this.colorCells[c];for(h=0;h=d&&(c=d-1),this.psColors[h]=this.colorCells[c];for(h=0;h=d&&(c=d-1),this.psColors[h]=this.colorCells[c];for(h=0;h=b&&k[h]<=p&&(n=Math.floor((k[h]- +b)/l*g+.5),n=n&&kd);n++);c=n/g;this.psInverse[h]=c*l+b}break;default:a.error("unknown scale '"+this.params.scale+"'")}return this};a.Image.prototype.mkRGBImage=function(){var c,b,d,e,f=null,g=null,h=null,l=!1;if(!this.rgb)return this; +!a.globalOpts.rgb.active||this!==a.globalOpts.rgb.rim&&this!==a.globalOpts.rgb.gim&&this!==a.globalOpts.rgb.bim||(l=!0,a.globalOpts.rgb.rim&&(f=a.globalOpts.rgb.rim),a.globalOpts.rgb.gim&&(g=a.globalOpts.rgb.gim),a.globalOpts.rgb.bim&&(h=a.globalOpts.rgb.bim));var k=this.display.context;var m=this.rgb;var n=m.sect;if(this.MakeRGBImage&&"function"===typeof this.MakeRGBImage&&this.MakeRGBImage()||this.MakePrimaryImage&&"function"===typeof this.MakePrimaryImage&&this.MakePrimaryImage())return this;if(this.rgbFile){var q= +n.width/n.zoom;var p=n.height/n.zoom;var t=n.x0;var r=this.offscreen.canvas.height-1-(n.y0+p);r=this.offscreen.context.getImageData(t,r,q,p);if(1===n.zoom)m.img=r;else for(m.img=k.createImageData(n.width,n.height),m=m.img,d=c=0;c=n.y0;c-=B,d++)for(u=c*this.raw.width,v=d*E,k=Math.floor(n.x0),b=0;kh&&(h=a.pts[r].x),a.pts[r].xm&&(m=a.pts[r].y),a.pts[r].ya;)a+=360;for(;360<=a;)a-=360;270===a&&(a=-90);return a},k=function(a,b){var c,d,e=a.data,f=b.data;b.width=a.height;b.height=a.width;for(d=0;dMath.abs(c.CD1_1)&&(c.CD1_1=0);1E-15>Math.abs(c.CD1_2)&&(c.CD1_2=0);1E-15>Math.abs(c.CD2_1)&&(c.CD2_1=0);1E-15>Math.abs(c.CD2_2)&&(c.CD2_2=0)}else a.notNull(f.CRPIX1)&&(e.raw.wcsinfo? +-b.CDELT2),a.notNull(b.CD1_2)&&(c.CD1_2=-b.CD1_2),a.notNull(b.CD2_2)&&(c.CD2_2=-b.CD2_2),c.LTV1=b.LTV1||0,c.LTV2=b.NAXIS2-(b.LTV2||0)+1,c.LTM1_1=a.defNull(b.LTM1_1,1),c.LTM1_2=-a.defNull(b.LTM1_2,0),c.LTM2_1=a.defNull(b.LTM2_1,0),c.LTM2_2=-a.defNull(b.LTM2_2,1)}};if("none"===b)return this;this&&this.raw&&this.raw.header||a.error("invalid image for flip");this.raw.header.CTYPE1&&this.raw.header.CTYPE1.match(/HPX/)&&a.error("support for flipping HEALPix is not yet available");f=f||{};if("string"=== +typeof f)try{f=JSON.parse(f)}catch(n){a.error("can't parse flip opts: "+f,n)}d=a.getRawCopy(g);switch(b.toLowerCase()){case "x":l(g,d);m(g,d,b);this.params.flip=h(b);break;case "y":k(g,d),m(g,d,b),this.params.flip=h(b)}this.raw=d;this.initWCS();this.initLCS();this.setPan();this.displayImage("all",f);this.refreshLayers();return this};a.Image.prototype.getRot90=function(){return this.params.rot90};a.Image.prototype.setRot90=function(c){for(var b=[],d=0;da;)a+=360;for(;360<=a;)a-=360;270===a&&(a=-90);return a},l=function(a,b){var c,d,e=a.data,f=b.data;b.width=a.height;b.height=a.width;for(d=0;dMath.abs(c.CD1_1)&&(c.CD1_1=0);1E-15>Math.abs(c.CD1_2)&&(c.CD1_2=0);1E-15>Math.abs(c.CD2_1)&&(c.CD2_1=0);1E-15>Math.abs(c.CD2_2)&&(c.CD2_2=0)}else a.notNull(f.CRPIX1)&&(e.raw.wcsinfo? (0>e.raw.wcsinfo.cdelt1&&0>e.raw.wcsinfo.cdelt2||0Math.abs(c.LTM1_1)&&(c.LTM1_1=0);1E-15>Math.abs(c.LTM1_2)&&(c.LTM1_2=0);1E-15>Math.abs(c.LTM2_1)&&(c.LTM2_1=0);1E-15>Math.abs(c.LTM2_2)&&(c.LTM2_2=0)},q=function(b,c,d){var f=b.header,g=c.header;switch(d){case 0:c.header=b.header;break;case 90:case -270:g.NAXIS1=f.NAXIS2;g.NAXIS2=f.NAXIS1;a.notNull(f.CRPIX1)&&a.notNull(f.CRPIX2)&&(g.CRPIX1=g.NAXIS1-f.CRPIX2+1,g.CRPIX2=f.CRPIX1,m(b,c,d));g.LTV1=g.NAXIS1-(f.LTV2||0)+1;g.LTV2= f.LTV1||0;n(b,c,d);break;case 270:case -90:g.NAXIS1=f.NAXIS2;g.NAXIS2=f.NAXIS1;a.notNull(f.CRPIX1)&&a.notNull(f.CRPIX2)&&(g.CRPIX1=f.CRPIX2,g.CRPIX2=g.NAXIS2-f.CRPIX1+1,m(b,c,d));g.LTV1=f.LTV2||0;g.LTV2=f.NAXIS1-(f.LTV1||0)+1;n(b,c,d);break;default:a.error("unknown rot90 type: "+e.params.rot90)}};if(!b)return this;this&&this.raw&&this.raw.header||a.error("invalid image for rot90");this.raw.header.CTYPE1&&this.raw.header.CTYPE1.match(/HPX/)&&a.error("support for rotating HEALPix is not yet available"); -g=g||{};if("string"===typeof g)try{g=JSON.parse(g)}catch(p){a.error("can't parse rot90 opts: "+g,p)}switch(b){case 1:b=90;break;case -1:b=-90;break;case 90:break;case -90:break;default:a.error("invalid rot90 value: "+b+" (use: +/1, +/90)")}d=a.getRawCopy(f);switch(b){case 90:k(f,d);q(f,d,90);this.params.rot90=h(90);break;case -90:l(f,d),q(f,d,-90),this.params.rot90=h(-90)}this.raw=d;this.initWCS();this.initLCS();this.setPan();this.displayImage("all",g);this.refreshLayers();return this};a.Image.prototype.reFlipRot90= -function(){var a=this.params.flip;var b=this.params.rot90;if("none"!==a){this.params.flip="none";var d=a.split("");for(a=0;athis.raw.bitpix?.5:1,void 0!==this.raw.header.TABMIN1&&(e=e-h+this.raw.header.TABMIN1),void 0!==this.raw.header.TABMIN2&&(g=g-h+this.raw.header.TABMIN2)));return{x:e,y:g,sys:c}};a.Image.prototype.logicalToImagePos=function(a,b){var c={x:a.x,y:a.y};var e=this.raw.header.CRPIX1||1;var g=this.raw.header.CRPIX2||1;b=b||this.params.lcs||"image";switch(b){case "ophysical":if(this.lcs.ophysical){var f= -this.lcs.ophysical.forward;var h=this.lcs.ophysical.frot}else this.lcs.physical&&(f=this.lcs.physical.forward,h=this.lcs.physical.frot);break;case "physical":this.lcs.physical&&(f=this.lcs.physical.forward,h=this.lcs.physical.frot);break;case "detector":this.lcs.detector&&(f=this.lcs.detector.forward,h=this.lcs.detector.frot);break;case "amplifier":this.lcs.amplifier&&(f=this.lcs.amplifier.forward,h=this.lcs.amplifier.frot)}f&&("table"===this.imtab&&(b=0>this.raw.bitpix?.5:1,void 0!==this.raw.header.TABMIN1&& -(a.x=a.x-this.raw.header.TABMIN1+b),void 0!==this.raw.header.TABMIN2&&(a.y=a.y-this.raw.header.TABMIN2+b)),c.x=a.x*f[0][0]+a.y*f[1][0]+f[2][0],c.y=a.x*f[0][1]+a.y*f[1][1]+f[2][1],h&&(a=e+(c.x-e)*h[0][0]+(c.y-g)*h[1][0]+h[2][0],h=g+(c.x-e)*h[0][1]+(c.y-g)*h[1][1]+h[2][1],c.x=a,c.y=h));return c};a.Image.prototype.displayToImagePos=function(a){var b=this.rgb.sect;return{x:(a.x-this.ix+.5)/b.zoom+b.x0+.5,y:(this.rgb.img.height-(a.y-this.iy+.5))/b.zoom+b.y0+.5}};a.Image.prototype.imageToDisplayPos=function(a){var b= +f=f||{};if("string"===typeof f)try{f=JSON.parse(f)}catch(p){a.error("can't parse rot90 opts: "+f,p)}switch(b){case 1:b=90;break;case -1:b=-90;break;case 90:break;case -90:break;default:a.error("invalid rot90 value: "+b+" (use: +/1, +/90)")}d=a.getRawCopy(g);switch(b){case 90:l(g,d);q(g,d,90);this.params.rot90=h(90);break;case -90:k(g,d),q(g,d,-90),this.params.rot90=h(-90)}this.raw=d;this.initWCS();this.initLCS();this.setPan();this.displayImage("all",f);this.refreshLayers();return this};a.Image.prototype.reFlipRot90= +function(){var a=this.params.flip;var b=this.params.rot90;if("none"!==a){this.params.flip="none";var d=a.split("");for(a=0;athis.raw.bitpix?.5:1,void 0!==this.raw.header.TABMIN1&&(e=e-h+this.raw.header.TABMIN1),void 0!==this.raw.header.TABMIN2&&(f=f-h+this.raw.header.TABMIN2)));return{x:e,y:f,sys:c}};a.Image.prototype.logicalToImagePos=function(a,b){var c={x:a.x,y:a.y};var e=this.raw.header.CRPIX1||1;var f=this.raw.header.CRPIX2||1;b=b||this.params.lcs||"image";switch(b){case "ophysical":if(this.lcs.ophysical){var g= +this.lcs.ophysical.forward;var h=this.lcs.ophysical.frot}else this.lcs.physical&&(g=this.lcs.physical.forward,h=this.lcs.physical.frot);break;case "physical":this.lcs.physical&&(g=this.lcs.physical.forward,h=this.lcs.physical.frot);break;case "detector":this.lcs.detector&&(g=this.lcs.detector.forward,h=this.lcs.detector.frot);break;case "amplifier":this.lcs.amplifier&&(g=this.lcs.amplifier.forward,h=this.lcs.amplifier.frot)}g&&("table"===this.imtab&&(b=0>this.raw.bitpix?.5:1,void 0!==this.raw.header.TABMIN1&& +(a.x=a.x-this.raw.header.TABMIN1+b),void 0!==this.raw.header.TABMIN2&&(a.y=a.y-this.raw.header.TABMIN2+b)),c.x=a.x*g[0][0]+a.y*g[1][0]+g[2][0],c.y=a.x*g[0][1]+a.y*g[1][1]+g[2][1],h&&(a=e+(c.x-e)*h[0][0]+(c.y-f)*h[1][0]+h[2][0],h=f+(c.x-e)*h[0][1]+(c.y-f)*h[1][1]+h[2][1],c.x=a,c.y=h));return c};a.Image.prototype.displayToImagePos=function(a){var b=this.rgb.sect;return{x:(a.x-this.ix+.5)/b.zoom+b.x0+.5,y:(this.rgb.img.height-(a.y-this.iy+.5))/b.zoom+b.y0+.5}};a.Image.prototype.imageToDisplayPos=function(a){var b= this.rgb.sect;return{x:(a.x-.5-b.x0)*b.zoom+this.ix-.5,y:(b.y0-(a.y-.5))*b.zoom+this.rgb.img.height+this.iy-.5}};a.Image.prototype.logicalToDisplayPos=function(a,b,d){return this.imageToDisplayPos(this.logicalToImagePos(a,b,d))};a.Image.prototype.displayToLogicalPos=function(a){return this.imageToLogicalPos(this.displayToImagePos(a))};a.Image.prototype.getWCSSys=function(){if(this.params.wcssys)return this.params.wcssys};a.Image.prototype.setWCSSys=function(c){if(!(0<=$.inArray("wcs",this.params.disable)))return"image"=== c?(this.params.wcssys="image",this.params.wcsunits="pixels",a.wcsunits.image="pixels"):"physical"===c?(this.params.wcssys="physical",this.params.wcsunits="pixels",a.globalOpts.wcsUnits.physical="pixels"):this.raw.wcs&&0=this.raw.altwcs[b].wcs&&a.error("invalid WCS for version: %s",c),this.raw.wcs=this.raw.altwcs[b].wcs,this.raw.wcsinfo=this.raw.altwcs[b].wcsinfo,c=this.raw.wcsinfo&&this.raw.wcsinfo.radecsys?this.raw.wcsinfo.radecsys:"native"!==this.params.wcssys?this.params.wcssys.trim():this.params.lcs,this.setWCSSys(c),this.params.wcssys0||(this.params.wcssys0=c),this.setWCSUnits(this.params.wcsunits),this}a.error("could not find WCS version: "+c)};a.Image.prototype.getWCSUnits=function(){return this.params.wcsunits? this.params.wcsunits:"pixels"};a.Image.prototype.setWCSUnits=function(c){if(!(0<=$.inArray("wcs",this.params.disable))){if("pixels"===c)this.params.wcssys="physical",this.params.wcsunits="pixels",a.globalOpts.wcsUnits[this.params.wcssys]="pixels";else if(this.raw.wcs&&0c.search(/ERROR:/i))a.log(c);else{k(c,a.analOpts.epattern);return}else if(n.errcode)if(c="ERROR: running "+g.name+" ["+n.errcode+"]",n.stdout)a.log(c);else{k(c,a.analOpts.epattern); -return}switch(g.rtype){case "text":case void 0:e.displayAnalysis("text",n.stdout,{divid:a.globalOpts.analysisDiv});break;case "plot":e.displayAnalysis("plot",n.stdout,{divid:a.globalOpts.analysisDiv});break;case "alert":n.stdout&&alert(n.stdout);break;case "fits":case "png":(l=n.stdout.split(/\s+/))&&l[0]&&(c=a.cleanPath(l[0]),"/"!==c.charAt(0)&&(c=a.InstallDir(c)),n={proxyFile:c},l[1]&&(l=a.cleanPath(l[1]),n.parentFile=l),n.fits2fits=!1,n.fixpath=!1,a.Load(c,n,{display:e.display}));break;case "regions":if((l= -n.stdout.split(/\s+/))&&l[0]){if(1c){var d=Math.max(b[a-1][1],b[a][1],b[a+1][1]);break}}else d=a.y;return{x:c,y:d}},m=function(a,b,c,d){switch(c){case "x":c=b.getAxes().xaxis;break;case "y":c=b.getAxes().yaxis}switch(d){case "linear":c.options.transform=null;c.options.inverseTransform=null;break;case "log":c.options.transform=h,c.options.inverseTransform=k}g[c]=d;b.setupGrid();b.draw()},n=function(b,c,d){var e,f=d.data,g=d.annotations.color||a.plotOpts.annotateColor; -b.find(".plotAnnotation").remove();for(e=0;ek.left||k.left>b.width()||(h=sprintf("
%s
",k.left,k.top+-25,g,"↓"+h.text),b.append(h))}},q=function(a,b,c,d){switch(c){case "x":var e={xaxis:{type:d,autorange:!0}};break;case "y":e={yaxis:{type:d,autorange:!0}}}Plotly.restyle(a.attr("id"), -e)},p=function(b){var c,d,e=b.data,f=b.annotations.color||a.plotOpts.annotateColor,g=[];for(c=0;c");if(e)e.html(b);else{t=t||f.textWin;var u=a.lightWin(d,"inline",b,r,t)}break;case "plot":if(b&&"string"===typeof b)try{var v=JSON.parse(b)}catch(z){a.error("can't plot return data: "+b,z)}else"object"===typeof b&&(v=b);if(!v)return;b="
";e?e.html(b):(t=t||f.plotWin,u=a.lightWin(d,"inline",b,r,t));var y=$("#"+d+" #"+d+"Plot");e&&(y.css("width",e.css("width")),y.css("height",e.css("height")),y.css("margin",0));if(v.data){switch(a.globalOpts.plotLibrary){case "plotly":var w=q;f=$.extend(!0,{},a.plotOpts,v.opts);v.label&&(f.title=v.label);b={x:[],y:[],type:"scatter"};3<=v.data[0].length&&(b.error_y={type:"data",array:[],visible:!0},v.points&&v.points.yerr&&v.points.yerr.color&& -(b.error_y.color=v.points.yerr.color));for(t=0;tg||1a&&(a=Math.abs(a),c="-");for(a=""+a;a.length=f||n>=f?(h="'",c*=60,n*=60):(h='"',c*=3600,n*=3600);k=this.rgb.sect;var q=this.binning.bin;f=((k.x1-k.x0)*c).toFixed(0);n=((k.y1-k.y0)*n).toFixed(0);d.wcsfov=f+h+" x "+n+h;f=a.floatFormattedString(c*q/k.zoom,e,3);d.wcspix=f+h+" / pixel";d.wcsfovpix=d.wcsfov+" ("+d.wcspix+")";c=a.pix2wcs(this.raw.wcs,(k.x1+k.x0)/2,(k.y1+k.y0)/2).trim().split(/\s+/);d.racen=c[0];d.deccen=c[1];d.wcscen=c[0]+"\t "+c[1]}d.vstrsmall=g+"    "+l;d.vstr=m;d.vstrmedium=m;d.vstrlarge= -m+"    "+this.file;b&&this.display.displayMessage("info",d,a.globalOpts.valposTarget)}return d};a.Image.prototype.toggleValpos=function(){this.params.valpos=!this.params.valpos;this.params.valpos||this.display.clearMessage()};a.Image.prototype.getColormap=function(){if(this.cmapObj)return{colormap:this.cmapObj.name,contrast:this.params.contrast,bias:this.params.bias}};a.Image.prototype.setColormap=function(c){for(var b=[],d=0;da&&this.params.disable.push(b[c]);return this.params.disable}if("enable"===a){$.isArray(b)||(b=[b]);for(c=0;cg.search(/(^| )-c/)&&(g+=" -c "+(this.raw.hdu.slice||1));if(f.reduce&&!this.parentFile&&(l=this.fileDimensions(),l=Math.floor(Math.max(l.xdim,l.ydim)/f.dim+.5),1b.radius2)&&a.error("radial profile source region must be an annulus"),b=[(b.radius1+b.radius2)/2,b.surfBrightness,b.surfError],h.data.push(b);return this.displayAnalysis("plot",h,{divid:a.globalOpts.analysisDiv})};a.Image.prototype.plot3d=function(c,b,d){var e,g,f=[];this.raw.header&&3===this.raw.header.NAXIS||a.error("plot3d requires a data cube with 3 dimensions"); -d=$.extend(!0,{},d,a.globalOpts.plot3d);d.cube=d.cube||"*:*:all";var h=d.cube.split(":");for(e=0;e=h.length&&a.cleanupFITSFile(f,!0)}this.raw=this.raws[0];if(f.current0&&f.current0.id)for(h=0;hf||d.alwaysCopy){h=$.extend(!0,{},g);h.current0=g;if(d.bitpix){switch(d.bitpix){case 8:h.data=new Uint8Array(g.height*g.width);break;case 16:h.data=new Int16Array(g.height* -g.width);break;case -16:h.data=new Uint16Array(g.height*g.width);break;case 32:h.data=new Int32Array(g.height*g.width);break;case -32:h.data=new Float32Array(g.height*g.width);break;case -64:h.data=new Float64Array(g.height*g.width)}var l=h.width*h.height;for(b=0;bthis.raw.bitpix&&0>e.argval.raw.bitpix?Math.min(this.raw.bitpix,e.argval.raw.bitpix):0>this.raw.bitpix&&0f||f>=a.height)){var g=0;var h=g+b.xoff;e=a.width;0>h&&(g-=h,e+=h,h=0);h+e>a.width&&(e-=h+e-a.width);if(0>=e)return!1;g=(c*a.width+g)*d;g=new Uint8Array(a.data.buffer,g,e*d);h=(f*a.width+h)*d;e=new Uint8Array(b.data.buffer,h,e*d);e.set(g)}}return!0});return this};a.Image.prototype.rotateData=function(c){for(var b=[],d=0;dg&&(g=-g);break;default:f=parseInt(f,10)}a.notNull(k.CD1_1)?(g=-(f*Math.PI/180),e=Math.sin(g),g=Math.cos(g),l.CD1_1=k.CD1_1*g+k.CD1_2*e,l.CD1_2=k.CD1_1*-e+k.CD1_2*g,l.CD2_1=k.CD2_1*g+k.CD2_2*e,l.CD2_2=k.CD2_1*-e+k.CD2_2*g):(l.CROTA2=f,l.CDELT1=e,l.CDELT2=g);h.lcsUseRota2=!0;d.wcsinfo&&(l.ptype=d.wcsinfo.ptype);this.xeqStashSave("rotateData",b,h.rawid);return this.reprojectData(l,h)};a.Image.prototype.reproject=function(c, -b){var d,e,g,f=!1;var h={};var k=/SIMPLE|BITPIX|NAXIS|NAXIS[1-4]|AMDX|AMDY|CD[1-2]_[1-2]|CDELT[1-4]|CNPIX[1-4]|CO1_[1-9][0-9]|CO2_[1-9][0-9]|CROTA[1-4]|CRPIX[1-4]|CRVAL[1-4]|CTYPE[1-4]|CUNIT[1-4]|DATE|DATE_OBS|DC-FLAG|DEC|DETSEC|DETSIZE|EPOCH|EQUINOX|EQUINOX[a-z]|IMAGEH|IMAGEW|LATPOLE|LONGPOLE|MJD-OBS|PC00[1-4]00[1-4]|PC[1-4]_[1-4]|PIXSCALE|PIXSCAL[1-2]|PLTDECH|PLTDECM|PLTDECS|PLTDECSN|PLTRAH|PLTRAM|PLTRAS|PPO|PROJP[1-9]|PROJR0|PV[1-3]_[1-3]|PV[1-4]_[1-4]|RA|RADECSYS|SECPIX|SECPIX|SECPIX[1-2]|UT|UTMID|VELOCITY|VSOURCE|WCSAXES|WCSDEP|WCSDIM|WCSNAME|XPIXSIZE|YPIXSIZE|ZSOURCE|LTM|LTV/; -var l=/TAN|SIN|ZEA|STG|ARC/,m=function(b,c){if(!c)return b;b=$.extend(!0,{},b);a.isNull(b.CRVAL1)&&!a.isNull(c.crval1)&&(b.CRVAL1=c.crval1);a.isNull(b.CRVAL2)&&!a.isNull(c.crval2)&&(b.CRVAL2=c.crval2);a.isNull(b.CRPIX1)&&!a.isNull(c.crpix1)&&(b.CRPIX1=c.crpix1);a.isNull(b.CRPIX2)&&!a.isNull(c.crpix2)&&(b.CRPIX2=c.crpix2);a.isNull(b.CDELT1)&&!a.isNull(c.cdelt1)&&(b.CDELT1=c.cdelt1);a.isNull(b.CDELT2)&&!a.isNull(c.cdelt2)&&(b.CDELT2=c.cdelt2);a.isNull(b.CROTA2)&&!a.isNull(c.crot)&&(b.CROTA2=c.crot); -return b};if(a.reproject&&c&&this!==c){this.raws&&this.raws[0]||a.error("no raw data for reprojection");var n=this.raws[0];n.header&&n.wcsinfo||a.error("no WCS info available for reprojection");b=b||{};var q=$.extend(!0,{},n.header);for(p in q)q.hasOwnProperty(p)&&k.test(p)&&delete q[p];if("object"===typeof c){c.raw&&c.raw.header?d=c.raw.header:c.BITPIX&&c.NAXIS1&&c.NAXIS2?d=c:a.error("invalid wcs object input to reproject()");for(p in d)d.hasOwnProperty(p)&&k.test(p)&&(h[p]=d[p]);var p=$.extend(!0, -{},h,q);if(!p.NAXIS||!p.NAXIS1||!p.NAXIS2)return;h=a.raw2FITS(p,{addcr:!0});q="wcs_"+a.uniqueID()+".txt";a.vfile(q,h);h=a.globalOpts.reproj.xdim||a.globalOpts.image.xdim;k=a.globalOpts.reproj.ydim||a.globalOpts.image.ydim;var t=h*k*32;(p.NAXIS1*p.NAXIS2*Math.abs(p.BITPIX)>t||n.header.NAXIS1*n.header.NAXIS2*Math.abs(n.header.BITPIX)>t)&&a.error("the max reproject size is "+h+" * "+k+" * 4 bytes/pixel. You can use the Bin/Filter/Section plugin to extract a section, then save it as FITS and reproject the smaller image.")}else q= -c;try{if(!l.test(n.wcsinfo.ptype)){var r=m(n.header,n.wcsinfo);var u="owcs_"+a.uniqueID()+".txt";a.vfile(u,a.raw2FITS(r,{addcr:!0}));var v="awcs_"+a.uniqueID()+".txt";var y=a.tanhdr(u,v,"");1 %s",u,v,y);a.vunlink(u);0<=y.search(/\[struct stat="OK"/)&&(b.cmdswitches=b.cmdswitches||"",b.cmdswitches+=" -i "+v)}if(c.raw&&!l.test(c.raw.wcsinfo.ptype)||c.ptype&&!l.test(c.ptype)){r=m(d,c.raw.wcsinfo);u="owcs_"+a.uniqueID()+".txt";a.vfile(u,a.raw2FITS(r,{addcr:!0})); +c.queried=!0))})}return this};a.Image.prototype.queryHelper=function(c){var b=this;c=c||"all";!a.helper.connected||"all"!==c&&"getAnalysis"!==c||this.analysisPackages||a.helper.send("getAnalysis",{fits:this.fitsFile},function(c){if(c)try{b.analysisPackages=JSON.parse(c)}catch(e){a.log("can't get analysis",e)}});return this};a.Image.prototype.expandMacro=function(c,b){var d=this,e;if(c)return c.replace(/\${?([a-zA-Z][a-zA-Z0-9_()]+)}?/g,function(c,g,h){h=function(a){var b=d.params.wcssys;if(a)switch(a){case "wcs":if("physical"=== +b||"image"===b)d.params.wcssys=d.params.wcssys0;break;case "physical":case "image":d.params.wcssys=a}return b};var f=function(a){var b;"table"===d.imtab?d.raw.hdu.table.filter&&!a.match(d.raw.hdu.table.filter)&&(a=a.match(/\]\[/)?a.slice(0,-1)+"&&"+d.raw.hdu.table.filter+"]":a+("["+d.raw.hdu.table.filter+"]")):"image"===d.imtab&&(b=d.file.match(/\[.*\]/))&&(a=a.match(/\[.*\]/)?a.replace(/\[.*\]/,b):a+b);return a},k=g.split("(");k[1]&&(k[1]=k[1].replace(/\)$/,""));switch(k[0]){case "id":var m=d.display.divjq.attr("id"); +break;case "image":case "png":m=d.id;break;case "filename":d.parentFile&&"this"!==k[1]?d.raw&&d.raw.filter?(m=d.parentFile,m.match(/\[.*\]/)||(m+="[EVENTS]"),m+="["+d.raw.filter+"]"):m=f(d.parentFile):d.fitsFile?m=f(d.fitsFile):a.error("no FITS file for "+d.id);break;case "fits":d.fitsFile||a.error("no FITS file for "+d.id);m=f(d.fitsFile);break;case "parent":d.parentFile||a.error("no parent FITS file for "+d.id);m=d.parentFile;break;case "ext":d.fitsFile?(m=d.fitsFile.match(/\[.*\]/),null===m&&(m= +"")):a.error("no FITS file for "+d.id);break;case "imcenter":m=d.displayToLogicalPos({x:d.display.width/2,y:d.display.height/2});m=m.x+","+m.y;break;case "wcscenter":m=d.displayToImagePos({x:d.display.width/2,y:d.display.height/2});m=a.pix2wcs(d.raw.wcs,m.x,m.y).replace(/\s+/g,",");break;case "sregions":c=h(k[1]);m=d.listRegions("source",{mode:0}).replace(/\s+/g,"");c&&(d.params.wcssys=c);break;case "bregions":c=h(k[1]);m=d.listRegions("background",{mode:0}).replace(/\s+/g,"");c&&(d.params.wcssys= +c);break;case "regions":c=h(k[1]);m=d.listRegions("all",{mode:0}).replace(/\s+/g,"");c&&(d.params.wcssys=c);break;default:if(b)for(e=b.length,h=0;hc.search(/ERROR:/i))a.log(c);else{l(c,a.analOpts.epattern);return}else if(n.errcode)if(c="ERROR: running "+f.name+" ["+n.errcode+"]",n.stdout)a.log(c);else{l(c,a.analOpts.epattern); +return}switch(f.rtype){case "text":case void 0:e.displayAnalysis("text",n.stdout,{divid:a.globalOpts.analysisDiv});break;case "plot":e.displayAnalysis("plot",n.stdout,{divid:a.globalOpts.analysisDiv});break;case "alert":n.stdout&&alert(n.stdout);break;case "fits":case "png":(k=n.stdout.split(/\s+/))&&k[0]&&(c=a.cleanPath(k[0]),"/"!==c.charAt(0)&&(c=a.InstallDir(c)),n={proxyFile:c},k[1]&&(k=a.cleanPath(k[1]),n.parentFile=k),n.fits2fits=!1,n.fixpath=!1,a.Load(c,n,{display:e.display}));break;case "regions":if((k= +n.stdout.split(/\s+/))&&k[0]){if(1");if(f)f.html(b);else{k=k||h.textWin;var n=a.lightWin(d,"inline",b,m,k)}break;case "plot":if(b&&"string"===typeof b)try{var q=JSON.parse(b)}catch(r){a.error("can't plot return data: "+b,r)}else"object"===typeof b&&(q=b);if(!q)return;q.curscale={x:"linear",y:"linear"};b="
"; +f?f.html(b):(k=k||h.plotWin,n=a.lightWin(d,"inline",b,m,k));var p=$("#"+d+" #"+d+"Plot");f&&(p.css("width",f.css("width")),p.css("height",f.css("height")),p.css("margin",0));if(q.data){switch(a.globalOpts.plotLibrary){case "plotly":h=$.extend(!0,{},a.Plot.opts,q.opts);q.label&&(h.title=q.label);b={x:[],y:[],type:"scatter"};3<=q.data[0].length&&(b.error_y={type:"data",array:[],visible:!0},q.points&&q.points.yerr&&q.points.yerr.color&&(b.error_y.color=q.points.yerr.color));for(k=0;k");k.on("click",l);b=$("
");b.append(k);p.append(b)}break;case "params":case "regions":case "textline":f?a.allinone?f.html(b):$.ajax({url:b,cache:!1,dataType:"text",success:function(a){f.html(a)}}):(k="params"=== +c?k||h.paramWin:"regions"===c?"small"===a.globalOpts.regionConfigSize?k||h.regWin0:k||h.regWin:k||h.dpathWin,n=a.allinone?"inline":"ajax",n=a.lightWin(d,n,b,m,k))}return n};a.Image.prototype.loadAuxFile=function(c,b){var d=this,e,f=a.auxFiles.length,g=[],h=function(){d.aux[n.name]=n;a.Image.prototype.mkOffScreenCanvas.call(p);a.Image.prototype.mkRawDataFromPNG.call(p);if(b)try{a.xeqByName(b,window,d,n)}catch(t){a.error("in aux mask onload callback",t)}a.DEBUG&&a.log("JS9 %s: %s dims(%d,%d) min/max(%d,%d)", +p.type,p.file,p.raw.width,p.raw.height,p.raw.dmin,p.raw.dmax)},l=function(c){d.aux[n.name]=n;n.regions=c;if(b)try{a.xeqByName(b,window,d,n)}catch(r){a.error("in aux region onload callback",r)}},k=function(c){d.aux[n.name]=n;n.text=c;if(b)try{a.xeqByName(b,window,d,n)}catch(r){a.error("in aux text onload callback",r)}},m=function(b,c,d){a.log("could not load auxiliary file: "+n.url+" ["+c+"]")};if(c&&f){for(e=0;ef||1a&&(a=Math.abs(a),c="-");for(a=""+a;a.length=g||n>=g?(h="'",c*=60,n*=60):(h='"',c*=3600,n*=3600);l=this.rgb.sect;var q=this.binning.bin;g=((l.x1-l.x0)*c).toFixed(0);n=((l.y1-l.y0)*n).toFixed(0);d.wcsfov=g+h+" x "+n+h;g=a.floatFormattedString(c*q/l.zoom,e,3);d.wcspix=g+h+" / pixel";d.wcsfovpix=d.wcsfov+ +" ("+d.wcspix+")";c=a.pix2wcs(this.raw.wcs,(l.x1+l.x0)/2,(l.y1+l.y0)/2).trim().split(/\s+/);d.racen=c[0];d.deccen=c[1];d.wcscen=c[0]+"\t "+c[1]}d.vstrsmall=f+"    "+k;d.vstr=m;d.vstrmedium=m;d.vstrlarge=m+"    "+this.file;b&&this.display.displayMessage("info",d,a.globalOpts.valposTarget)}return d};a.Image.prototype.toggleValpos=function(){this.params.valpos=!this.params.valpos;this.params.valpos||this.display.clearMessage()};a.Image.prototype.getColormap=function(){if(this.cmapObj)return{colormap:this.cmapObj.name, +contrast:this.params.contrast,bias:this.params.bias}};a.Image.prototype.setColormap=function(c){for(var b=[],d=0;da&&this.params.disable.push(b[c]);return this.params.disable}if("enable"===a){$.isArray(b)||(b=[b]);for(c=0;cf.search(/(^| )-c/)&&(f+=" -c "+(this.raw.hdu.slice||1));if(g.reduce&& +!this.parentFile&&(k=this.fileDimensions(),k=Math.floor(Math.max(k.xdim,k.ydim)/g.dim+.5),1b.radius2)&&a.error("radial profile source region must be an annulus"),b=[(b.radius1+b.radius2)/2,b.surfBrightness,b.surfError], +h.data.push(b);return this.displayAnalysis("plot",h,{divid:a.globalOpts.analysisDiv})};a.Image.prototype.plot3d=function(c,b,d){var e,f,g=[];this.raw.header&&3===this.raw.header.NAXIS||a.error("plot3d requires a data cube with 3 dimensions");d=$.extend(!0,{},d,a.globalOpts.plot3d);d.cube=d.cube||"*:*:all";var h=d.cube.split(":");for(e=0;e=h.length&&a.cleanupFITSFile(g,!0)}this.raw=this.raws[0];if(g.current0&& +g.current0.id)for(h=0;hg||d.alwaysCopy){h=$.extend(!0,{},f);h.current0=f;if(d.bitpix){switch(d.bitpix){case 8:h.data=new Uint8Array(f.height*f.width);break;case 16:h.data=new Int16Array(f.height*f.width);break;case -16:h.data=new Uint16Array(f.height*f.width);break;case 32:h.data=new Int32Array(f.height*f.width);break;case -32:h.data=new Float32Array(f.height*f.width);break;case -64:h.data=new Float64Array(f.height*f.width)}var k=h.width*h.height;for(b=0;bthis.raw.bitpix&&0>e.argval.raw.bitpix?Math.min(this.raw.bitpix,e.argval.raw.bitpix):0>this.raw.bitpix&&0f||f>=a.height)){var g=0;var h=g+b.xoff;e=a.width;0>h&&(g-=h,e+=h,h=0);h+e>a.width&&(e-=h+e-a.width);if(0>=e)return!1;g=(c*a.width+g)*d;g=new Uint8Array(a.data.buffer,g,e*d);h=(f*a.width+h)*d;e=new Uint8Array(b.data.buffer, +h,e*d);e.set(g)}}return!0});return this};a.Image.prototype.rotateData=function(c){for(var b=[],d=0;df&&(f=-f);break;default:g=parseInt(g,10)}a.notNull(l.CD1_1)?(f=-(g*Math.PI/180),e=Math.sin(f),f=Math.cos(f),k.CD1_1=l.CD1_1*f+l.CD1_2*e,k.CD1_2=l.CD1_1*-e+l.CD1_2*f,k.CD2_1=l.CD2_1*f+l.CD2_2* +e,k.CD2_2=l.CD2_1*-e+l.CD2_2*f):(k.CROTA2=g,k.CDELT1=e,k.CDELT2=f);h.lcsUseRota2=!0;d.wcsinfo&&(k.ptype=d.wcsinfo.ptype);this.xeqStashSave("rotateData",b,h.rawid);return this.reprojectData(k,h)};a.Image.prototype.reproject=function(c,b){var d,e,f,g=!1;var h={};var l=/SIMPLE|BITPIX|NAXIS|NAXIS[1-4]|AMDX|AMDY|CD[1-2]_[1-2]|CDELT[1-4]|CNPIX[1-4]|CO1_[1-9][0-9]|CO2_[1-9][0-9]|CROTA[1-4]|CRPIX[1-4]|CRVAL[1-4]|CTYPE[1-4]|CUNIT[1-4]|DATE|DATE_OBS|DC-FLAG|DEC|DETSEC|DETSIZE|EPOCH|EQUINOX|EQUINOX[a-z]|IMAGEH|IMAGEW|LATPOLE|LONGPOLE|MJD-OBS|PC00[1-4]00[1-4]|PC[1-4]_[1-4]|PIXSCALE|PIXSCAL[1-2]|PLTDECH|PLTDECM|PLTDECS|PLTDECSN|PLTRAH|PLTRAM|PLTRAS|PPO|PROJP[1-9]|PROJR0|PV[1-3]_[1-3]|PV[1-4]_[1-4]|RA|RADECSYS|SECPIX|SECPIX|SECPIX[1-2]|UT|UTMID|VELOCITY|VSOURCE|WCSAXES|WCSDEP|WCSDIM|WCSNAME|XPIXSIZE|YPIXSIZE|ZSOURCE|LTM|LTV/; +var k=/TAN|SIN|ZEA|STG|ARC/,m=function(b,c){if(!c)return b;b=$.extend(!0,{},b);a.isNull(b.CRVAL1)&&!a.isNull(c.crval1)&&(b.CRVAL1=c.crval1);a.isNull(b.CRVAL2)&&!a.isNull(c.crval2)&&(b.CRVAL2=c.crval2);a.isNull(b.CRPIX1)&&!a.isNull(c.crpix1)&&(b.CRPIX1=c.crpix1);a.isNull(b.CRPIX2)&&!a.isNull(c.crpix2)&&(b.CRPIX2=c.crpix2);a.isNull(b.CDELT1)&&!a.isNull(c.cdelt1)&&(b.CDELT1=c.cdelt1);a.isNull(b.CDELT2)&&!a.isNull(c.cdelt2)&&(b.CDELT2=c.cdelt2);a.isNull(b.CROTA2)&&!a.isNull(c.crot)&&(b.CROTA2=c.crot); +return b};if(a.reproject&&c&&this!==c){this.raws&&this.raws[0]||a.error("no raw data for reprojection");var n=this.raws[0];n.header&&n.wcsinfo||a.error("no WCS info available for reprojection");b=b||{};var q=$.extend(!0,{},n.header);for(p in q)q.hasOwnProperty(p)&&l.test(p)&&delete q[p];if("object"===typeof c){c.raw&&c.raw.header?d=c.raw.header:c.BITPIX&&c.NAXIS1&&c.NAXIS2?d=c:a.error("invalid wcs object input to reproject()");for(p in d)d.hasOwnProperty(p)&&l.test(p)&&(h[p]=d[p]);var p=$.extend(!0, +{},h,q);if(!p.NAXIS||!p.NAXIS1||!p.NAXIS2)return;h=a.raw2FITS(p,{addcr:!0});q="wcs_"+a.uniqueID()+".txt";a.vfile(q,h);h=a.globalOpts.reproj.xdim||a.globalOpts.image.xdim;l=a.globalOpts.reproj.ydim||a.globalOpts.image.ydim;var t=h*l*32;(p.NAXIS1*p.NAXIS2*Math.abs(p.BITPIX)>t||n.header.NAXIS1*n.header.NAXIS2*Math.abs(n.header.BITPIX)>t)&&a.error("the max reproject size is "+h+" * "+l+" * 4 bytes/pixel. You can use the Bin/Filter/Section plugin to extract a section, then save it as FITS and reproject the smaller image.")}else q= +c;try{if(!k.test(n.wcsinfo.ptype)){var r=m(n.header,n.wcsinfo);var u="owcs_"+a.uniqueID()+".txt";a.vfile(u,a.raw2FITS(r,{addcr:!0}));var v="awcs_"+a.uniqueID()+".txt";var y=a.tanhdr(u,v,"");1 %s",u,v,y);a.vunlink(u);0<=y.search(/\[struct stat="OK"/)&&(b.cmdswitches=b.cmdswitches||"",b.cmdswitches+=" -i "+v)}if(c.raw&&!k.test(c.raw.wcsinfo.ptype)||c.ptype&&!k.test(c.ptype)){r=m(d,c.raw.wcsinfo);u="owcs_"+a.uniqueID()+".txt";a.vfile(u,a.raw2FITS(r,{addcr:!0})); var w="awcs_"+a.uniqueID()+".txt";y=a.tanhdr(u,w,"");1 %s",u,w,y);a.vunlink(u);0<=y.search(/\[struct stat="OK"/)&&(a.vunlink(q),q=w)}}catch(B){}if(n.hdu&&n.hdu.fits.vfile)c=n.hdu.fits.vfile,n.hdu.fits.extname?c+="["+n.hdu.fits.extname+"]":n.hdu.fits.extnum&&0 %s",c,w,q,A,y);a.vunlink(e);a.vunlink(q);v&&a.vunlink(v);x&&a.vunlink(c);0>y.search(/\[struct stat="OK"/)&&(f=!0,(g=y.match(/msg="(.*)"/))&&g[1]?a.error(g[1]+" (from mProjectPP)"):a.error(y))}catch(B){if(f)return;a.vunlink(e);a.vunlink(q);y?a.error(y):a.error("WCS reproject failed",B)}return w}};a.Image.prototype.reprojectData=function(c){for(var b=[], -d=0;d %s",c,w,q,A,y);a.vunlink(e);a.vunlink(q);v&&a.vunlink(v);x&&a.vunlink(c);0>y.search(/\[struct stat="OK"/)&&(g=!0,(f=y.match(/msg="(.*)"/))&&f[1]?a.error(f[1]+" (from mProjectPP)"):a.error(y))}catch(B){if(g)return;a.vunlink(e);a.vunlink(q);y?a.error(y):a.error("WCS reproject failed",B)}return w}};a.Image.prototype.reprojectData=function(c){for(var b=[], +d=0;dh)for(g=c[0],f=new RegExp("^"+g,"i"),d=0;dh)for(g=c[0],f=new RegExp(".*"+g+".*","i"),d=0;dk&&a.error("can't find an RA column (see Preferences:catalogs)"); -var u=q(c,t,l,b.ycol);0>u&&a.error("can't find a Dec column (see Preferences:catalogs)");q=b.shape||h.shape||"circle";switch(q){case "box":var v=function(){return{width:b.width||h.width||7,height:b.height||h.height||7}};break;case "circle":v=function(){return{radius:b.radius||h.radius||3.5}};break;case "ellipse":v=function(){return{r1:b.r1||h.r1||3.5,r2:b.r2||h.r2||3.5}};break;default:v=function(){return{width:b.width||7,height:b.height||7}}}var y=this.getWCSSys();var w=b.wcssys?b.wcssys:h.wcssys? -h.wcssys:"ICRS";this.setWCSSys(w);for(l=c=0;cc;c++){var g=this.vertices[c];var f=g.length;for(b=0;be);b++);b=0===b?g[0][1]:b===f?g[f-1][1]:(f=(g[b][1]-g[b-1][1])/(g[b][0]-g[b-1][0]))?f*(e-g[b-1][0])+g[b- -1][1]:g[b][1];d[c]=255*b}break;case "lut":e=this.colors.length;c=Math.floor(c*e/b);0>c?(d[0]=255*this.colors[0][0],d[1]=255*this.colors[0][1],d[2]=255*this.colors[0][2]):ch)for(f=c[0],g=new RegExp("^"+f,"i"),d=0;dh)for(f=c[0],g=new RegExp(".*"+f+".*","i"),d=0;dl&&a.error("can't find an RA column (see Preferences:catalogs)"); +var u=q(c,t,k,b.ycol);0>u&&a.error("can't find a Dec column (see Preferences:catalogs)");q=b.shape||h.shape||"circle";switch(q){case "box":var v=function(){return{width:b.width||h.width||7,height:b.height||h.height||7}};break;case "circle":v=function(){return{radius:b.radius||h.radius||3.5}};break;case "ellipse":v=function(){return{r1:b.r1||h.r1||3.5,r2:b.r2||h.r2||3.5}};break;default:v=function(){return{width:b.width||7,height:b.height||7}}}var y=this.getWCSSys();var w=b.wcssys?b.wcssys:h.wcssys? +h.wcssys:"ICRS";this.setWCSSys(w);for(k=c=0;cc;c++){var f=this.vertices[c];var g=f.length;for(b=0;be);b++);b=0===b?f[0][1]:b===g?f[g-1][1]:(g=(f[b][1]-f[b-1][1])/(f[b][0]-f[b-1][0]))?g*(e-f[b-1][0])+f[b- +1][1]:f[b][1];d[c]=255*b}break;case "lut":e=this.colors.length;c=Math.floor(c*e/b);0>c?(d[0]=255*this.colors[0][0],d[1]=255*this.colors[0][1],d[2]=255*this.colors[0][2]):c").addClass("JS9Container").css("z-index",a.ZINDEX).attr("tabindex","0").append(this.canvasjq).appendTo(this.divjq);a.allinone||(this.iconjq=$("
").addClass("JS9Logo").css("display","none").css("z-index",a.ZINDEX+1).appendTo(this.divjq),this.iconimgjs=$("").addClass("JS9Logo").attr("src", a.InstallDir("images/js9logo.png")).attr("alt","js9").attr("title","js9").appendTo(this.iconjq),a.globalOpts.logoDisplay&&this.iconjq.css("display","block"));a.globalOpts.resizeHandle&&window.hasOwnProperty("ResizeSensor")&&(this.divjq.css("resize","both").css("overflow","hidden"),a.bugs.webkit_resize&&(this.owidth=parseInt(this.divjq.css("width"),10),this.oheight=parseInt(this.divjq.css("height"),10),this.divjq.css("width",this.width+a.RESIZEFUDGE).css("height",this.height+a.RESIZEFUDGE)),this.resizeSensor= @@ -4562,138 +4559,138 @@ new ResizeSensor(this.divjq,function(){var c=b.divjq.width(),e=b.divjq.height(); this.blendMode=!1;this.mouseActions=a.globalOpts.mouseActions.slice(0);this.touchActions=a.globalOpts.touchActions.slice(0);this.mousetouchZoom=a.globalOpts.mousetouchZoom;this.divjq.on("mouseenter",this,function(b){return a.mouseEnterCB(b)});this.divjq.on("mouseover",this,function(b){return a.mouseOverCB(b)});this.divjq.on("mousedown touchstart",this,function(b){return a.mouseDownCB(b)});this.divjq.on("mousemove touchmove",this,function(b){return a.mouseMoveCB(b)});this.divjq.on("mouseup touchend", this,function(b){return a.mouseUpCB(b)});this.divjq.on("mouseout",this,function(b){return a.mouseOutCB(b)});this.divjq.on("keypress",this,function(b){return a.keyPressCB(b)});this.divjq.on("keydown",this,function(b){return a.keyDownCB(b)});this.divjq.on("keyup",this,function(b){return a.keyUpCB(b)});this.divjq.on("wheel",this,function(b){return a.wheelCB(b)});this.divjq.on("dragenter",this,function(c){return a.dragenterCB(b.id,c)});this.divjq.on("dragover",this,function(c){return a.dragoverCB(b.id, c)});this.divjq.on("dragexit",this,function(c){return a.dragexitCB(b.id,c)});this.divjq.on("drop",this,function(c){return a.dragdropCB(b.id,c)});this.divjq.on("contextmenu",this,function(){return!1});this.addFileDialog("Load",a.globalOpts.imageTemplates);this.addFileDialog("RefreshImage",a.globalOpts.imageTemplates);this.addFileDialog("LoadRegions",a.globalOpts.regionTemplates);this.addFileDialog("LoadSession",a.globalOpts.sessionTemplates);this.addFileDialog("LoadColormap",a.globalOpts.colormapTemplates); -this.addFileDialog("LoadCatalog",a.globalOpts.catalogTemplates);a.displays.push(this);a.DEBUG&&a.log("JS9 display: %s",this.id)};a.Display.prototype.addFileDialog=function(c,b){var d=this;if(c&&a.publics[c]){var e="openLocal"+c+"-"+this.id;var g=$("
").css("visibility","hidden").css("position","relative").css("top",-50).css("left",-50).appendTo(this.divjq);g=$("").attr("type","file").attr("id",e).attr("multiple",!0).appendTo(g);b&&g.attr("accept",b);g.on("change",function(b){var e=b.currentTarget; +this.addFileDialog("LoadCatalog",a.globalOpts.catalogTemplates);a.displays.push(this);a.DEBUG&&a.log("JS9 display: %s",this.id)};a.Display.prototype.addFileDialog=function(c,b){var d=this;if(c&&a.publics[c]){var e="openLocal"+c+"-"+this.id;var f=$("
").css("visibility","hidden").css("position","relative").css("top",-50).css("left",-50).appendTo(this.divjq);f=$("").attr("type","file").attr("id",e).attr("multiple",!0).appendTo(f);b&&f.attr("accept",b);f.on("change",function(b){var e=b.currentTarget; if(e.files.length)switch(c){case "Load":case "RefreshImage":var f={localAccess:!0};a.waiting(!0,d)}for(b=0;b").addClass("JS9Container").css("z-index",a.MESSZINDEX).appendTo(this.divjq);this.infoArea=$("
").addClass("JS9Message").appendTo(this.messageContainer);this.regionsArea=$("
").addClass("JS9Message").appendTo(this.messageContainer); this.progressArea=$("
").addClass("JS9Progress").addClass("JS9Message").appendTo(this.messageContainer);this.progressBar=$("").addClass("JS9ProgressBar").attr("value",0).attr("max",100).attr("name","progress").appendTo(this.progressArea);try{this.messageContainer.draggable({start:function(c,b){this.oicb=a.globalOpts.internalContrastBias;a.globalOpts.internalContrastBias=!1},stop:function(c,b){a.globalOpts.internalContrastBias=this.oicb}})}catch(c){}return this};a.Display.prototype.displayPlugin= -function(c){var b=this,d;if("string"===typeof c)for(d=0;d").attr("id",e).css("display","none").appendTo($(this.divjq)); -$("
").addClass(c.name).attr("id",h).attr("data-js9id",this.divjq.attr("id")).css("height","100%").css("width","100%").appendTo(k)}k=c.opts.winDims[0]||a.WIDTH;var l=c.opts.winDims[1]||a.HEIGHT;var m=c.opts.winResize?"1":"0";f=sprintf(f.format,k,l,m);k=c.opts.toolbarHTML&&0<=c.opts.toolbarHTML.search(/\$title/)?"":c.opts.winTitle||"";k+=sprintf(a.IDFMT,this.id);e=a.lightWin(d,"div",e,k,f);d=$("#"+d+" #"+h);g=a.instantiatePlugin(d,c,e);g.winHandle.onclose=function(){g.winHandle.hide();g.status= -"inactive";if(c.opts.onpluginclose)try{c.opts.onpluginclose.call(g,b.image)}catch(n){a.log("onplugincloseCB: %s [%s]\n%s",c.name,n.message,a.strace(n))}return!1};g.status="active";if(c.opts.onplugindisplay)try{c.opts.onplugindisplay.call(g,this.image)}catch(n){a.log("onplugindisplayCB: %s [%s]\n%s",c.name,n.message,a.strace(n))}}else if("inactive"===g.status){if(g.winHandle&&(g.winHandle.show(),g.status="active",c.opts.onplugindisplay))try{c.opts.onplugindisplay.call(g,this.image)}catch(n){a.log("onplugindisplayCB: %s [%s]\n%s", -c.name,n.message,a.strace(n))}}else if("active"===g.status&&g.winHandle&&(g.winHandle.hide(),g.status="inactive",c.opts.onpluginclose))try{c.opts.onpluginclose.call(g,this.image)}catch(n){a.log("onplugincloseCB: %s [%s]\n%s",c.name,n.message,a.strace(n))}break;case "new":a.error("external window support for plugins not yet implemented")}};a.Display.prototype.resize=function(c,b,d){var e,g,f=function(a){a.left+=k;a.top+=l;a.setCoords()};a.globalOpts.resize||a.error("display resize not enabled");if(!c&& +function(c){var b=this,d;if("string"===typeof c)for(d=0;d").attr("id",e).css("display","none").appendTo($(this.divjq)); +$("
").addClass(c.name).attr("id",h).attr("data-js9id",this.divjq.attr("id")).css("height","100%").css("width","100%").appendTo(l)}l=c.opts.winDims[0]||a.WIDTH;var k=c.opts.winDims[1]||a.HEIGHT;var m=c.opts.winResize?"1":"0";g=sprintf(g.format,l,k,m);l=c.opts.toolbarHTML&&0<=c.opts.toolbarHTML.search(/\$title/)?"":c.opts.winTitle||"";l+=sprintf(a.IDFMT,this.id);e=a.lightWin(d,"div",e,l,g);d=$("#"+d+" #"+h);f=a.instantiatePlugin(d,c,e);f.winHandle.onclose=function(){f.winHandle.hide();f.status= +"inactive";if(c.opts.onpluginclose)try{c.opts.onpluginclose.call(f,b.image)}catch(n){a.log("onplugincloseCB: %s [%s]\n%s",c.name,n.message,a.strace(n))}return!1};f.status="active";if(c.opts.onplugindisplay)try{c.opts.onplugindisplay.call(f,this.image)}catch(n){a.log("onplugindisplayCB: %s [%s]\n%s",c.name,n.message,a.strace(n))}}else if("inactive"===f.status){if(f.winHandle&&(f.winHandle.show(),f.status="active",c.opts.onplugindisplay))try{c.opts.onplugindisplay.call(f,this.image)}catch(n){a.log("onplugindisplayCB: %s [%s]\n%s", +c.name,n.message,a.strace(n))}}else if("active"===f.status&&f.winHandle&&(f.winHandle.hide(),f.status="inactive",c.opts.onpluginclose))try{c.opts.onpluginclose.call(f,this.image)}catch(n){a.log("onplugincloseCB: %s [%s]\n%s",c.name,n.message,a.strace(n))}break;case "new":a.error("external window support for plugins not yet implemented")}};a.Display.prototype.resize=function(c,b,d){var e,f,g=function(a){a.left+=l;a.top+=k;a.setCoords()};a.globalOpts.resize||a.error("display resize not enabled");if(!c&& !b)return{width:this.width,height:this.height};if("full"===c){if(d=b,window.innerWidth&&(c=window.innerWidth),window.innerHeight)for(b=window.innerHeight,e=0;ec||10>b)&&a.error("invalid dimension(s) passed to display resize");if(c===this.width&&b===this.height)return this;d=d||{};e=c;c=b;var k=(e-this.width)/2;var l=(c-this.height)/2;this.width=e;this.height=c;this.divjq.css("width",e);this.divjq.css("height",c);this.canvasjq.attr("width",e);this.canvasjq.attr("height",c);a.bugs.webkit_resize&&!this.resizing&&(this.owidth=Math.min(this.owidth,e),this.oheight=Math.min(this.oheight,c));0<=$.inArray("JS9Menubar",a.globalOpts.resizeDivs)&& +b=b?Math.floor(b):c;(10>c||10>b)&&a.error("invalid dimension(s) passed to display resize");if(c===this.width&&b===this.height)return this;d=d||{};e=c;c=b;var l=(e-this.width)/2;var k=(c-this.height)/2;this.width=e;this.height=c;this.divjq.css("width",e);this.divjq.css("height",c);this.canvasjq.attr("width",e);this.canvasjq.attr("height",c);a.bugs.webkit_resize&&!this.resizing&&(this.owidth=Math.min(this.owidth,e),this.oheight=Math.min(this.oheight,c));0<=$.inArray("JS9Menubar",a.globalOpts.resizeDivs)&& (a.isNull(d.resizeMenubar)||d.resizeMenubar)&&(b=this.pluginInstances.JS9Menubar)&&$("#"+this.id+"Menubar").css("width",e);0<=$.inArray("JS9Toolbar",a.globalOpts.resizeDivs)&&(a.isNull(d.resizeToolbar)||d.resizeToolbar)&&(b=this.pluginInstances.JS9Toolbar)&&(b.divjq.attr("data-width",String(e)+"px"),a.Toolbar.init.call(b));0<=$.inArray("JS9Colorbar",a.globalOpts.resizeDivs)&&(a.isNull(d.resizeColorbar)||d.resizeColorbar)&&(b=this.pluginInstances.JS9Colorbar)&&(b.divjq.attr("data-width",String(e)+ -"px"),a.Colorbar.init.call(b));for(g in this.layers)this.layers.hasOwnProperty(g)&&(b=this.layers[g],"main"===b.dtype&&(b.divjq.css("width",e),b.divjq.css("height",c),b.canvasjq.attr("width",e),b.canvasjq.attr("height",c),b.canvas.setWidth(e),b.canvas.setHeight(c),b.canvas.calcOffset()));for(e=0;e=this.divjq.width()&&c.y+a.RESIZEDIST>= -this.divjq.height()?!0:!1};a.Display.prototype.center=function(){var c=this.divjq,b;var d=c.offset().top;var e=c.height(),g=$(window).height();var f=c.offset().left;c=c.width();var h=$(window).width();for(b=0;b=this.divjq.width()&&c.y+a.RESIZEDIST>= +this.divjq.height()?!0:!1};a.Display.prototype.center=function(){var c=this.divjq,b;var d=c.offset().top;var e=c.height(),f=$(window).height();var g=c.offset().left;c=c.width();var h=$(window).width();for(b=0;b
",b,t.width())); -u.isactive&&(c+=sprintf("
",b,t.width()));c+=sprintf("
",b,t.width()-C,t.height()-C);v.isactive&&(c+=sprintf("
",b,t.width()))}"auto"===l&&z+y*(h+.5)>window.innerWidth&&(f++,h=0);var d=sprintf("width=%s,height=%s,top=%s,left=%s,resize=1,scolling=1",y,w,x+(w+n+q)*f,z+(y+m+p)*h);"auto"===l|| -"horizontal"===l?h++:"vertical"===l&&f++}return{id:b,html:c,winopts:d}},G=function(f){var h;var l=g++;f.length>l?(l="number"===typeof f[l]?a.images[f[l]]:f[l])&&l.display===b?(l.displayImage("all"),void 0===d?(d=l.display.id,F(d,c),G(f)):(e="string"===typeof c.idbase?h=c.idbase+k++:d.replace(B,"")+"_sep"+a.uniqueID(),A[e]=l,$("#dhtmlwindowholder").arrive("#"+e,{onceOnly:!0},function(a){h=$(a).attr("id");window.setTimeout(function(){A[h].moveToDisplay(h);G(f)},0)}),l=D(d,e),h&&(l.id=h),a.LoadWindow(null, -{id:l.id},"light",l.html,l.winopts))):G(f):a.globalOpts.extendedPlugins&&b.image&&b.image.xeqPlugins("image","onseparatedisplay")};c=c||{};if("string"===typeof c)try{c=JSON.parse(c)}catch(H){a.error("can't parse separate opts: "+c,H)}G(c.images||a.images)};a.Display.prototype.nextImage=function(c){var b,d;c=c||1;if(this.image){var e=this.image.pos;for(b=0;b=a.images.length&&(d=0),0>d&&(d=a.images.length-1),a.images[d].display!==this);d+= -c);b!==d&&(c=a.images[d],c.displayImage("all"),c.refreshLayers(),c.display.clearMessage(),e&&(e=c.displayToImagePos(e),c.valpos=null,c.valpos=c.updateValpos(e,!0)));return this}};a.Display.prototype.loadSession=function(c,b){var d=this,e,g,f={},h=function(c){var e,h=function(){var b=u.canvas.getObjects();b&&"undefined"!==typeof b.length&&(c.layers[u.layerName].nshape=b.length+1);a.Fabric.updateChildren(u,null,"objects");c.refreshLayers()};var k=f[c.file]||{};k.blend&&(c.blend=$.extend(!0,{},k.blend)); -k.tmp&&(c.tmp=$.extend(!0,{},k.tmp));k.wcsim&&(c.wcsim=a.lookupImage(k.wcsim));if(k.layers&&k.layers.length)for(e=0;ec.search(/\[struct stat="OK"/)&&(a.waiting(!1),l(),(d=c.match(/msg="(.*)"/))&&d[1]?a.error(d[1]+" (from "+b+")"):a.error(c||"unknown "+b+" failure"))},n=function(b,c){c=c||{};var e=$.extend(!0,{},c);!1!==c.waiting&&a.waiting(!0,d);e.display=d.id;b=new a.Image(b,e);k.setStatus("createMosaic", +u.isactive&&(c+=sprintf("
",b,t.width()));c+=sprintf("
",b,t.width()-C,t.height()-C);v.isactive&&(c+=sprintf("
",b,t.width()))}"auto"===k&&z+y*(h+.5)>window.innerWidth&&(g++,h=0);var d=sprintf("width=%s,height=%s,top=%s,left=%s,resize=1,scolling=1",y,w,x+(w+n+q)*g,z+(y+m+p)*h);"auto"===k|| +"horizontal"===k?h++:"vertical"===k&&g++}return{id:b,html:c,winopts:d}},G=function(g){var h;var k=f++;g.length>k?(k="number"===typeof g[k]?a.images[g[k]]:g[k])&&k.display===b?(k.displayImage("all"),void 0===d?(d=k.display.id,F(d,c),G(g)):(e="string"===typeof c.idbase?h=c.idbase+l++:d.replace(B,"")+"_sep"+a.uniqueID(),A[e]=k,$("#dhtmlwindowholder").arrive("#"+e,{onceOnly:!0},function(a){h=$(a).attr("id");window.setTimeout(function(){A[h].moveToDisplay(h);G(g)},0)}),k=D(d,e),h&&(k.id=h),a.LoadWindow(null, +{id:k.id},"light",k.html,k.winopts))):G(g):a.globalOpts.extendedPlugins&&b.image&&b.image.xeqPlugins("image","onseparatedisplay")};c=c||{};if("string"===typeof c)try{c=JSON.parse(c)}catch(H){a.error("can't parse separate opts: "+c,H)}G(c.images||a.images)};a.Display.prototype.nextImage=function(c){var b,d;c=c||1;if(this.image){var e=this.image.pos;for(b=0;b=a.images.length&&(d=0),0>d&&(d=a.images.length-1),a.images[d].display!==this);d+= +c);b!==d&&(c=a.images[d],c.displayImage("all"),c.refreshLayers(),c.display.clearMessage(),e&&(e=c.displayToImagePos(e),c.valpos=null,c.valpos=c.updateValpos(e,!0)));return this}};a.Display.prototype.loadSession=function(c,b){var d=this,e,f,g={},h=function(c){var e,h=function(){var b=u.canvas.getObjects();b&&"undefined"!==typeof b.length&&(c.layers[u.layerName].nshape=b.length+1);a.Fabric.updateChildren(u,null,"objects");c.refreshLayers()};var l=g[c.file]||{};l.blend&&(c.blend=$.extend(!0,{},l.blend)); +l.tmp&&(c.tmp=$.extend(!0,{},l.tmp));l.wcsim&&(c.wcsim=a.lookupImage(l.wcsim));if(l.layers&&l.layers.length)for(e=0;ec.search(/\[struct stat="OK"/)&&(a.waiting(!1),k(),(d=c.match(/msg="(.*)"/))&&d[1]?a.error(d[1]+" (from "+b+")"):a.error(c||"unknown "+b+" failure"))},n=function(b,c){c=c||{};var e=$.extend(!0,{},c);!1!==c.waiting&&a.waiting(!0,d);e.display=d.id;b=new a.Image(b,e);l.setStatus("createMosaic", "complete");b.setStatus("createMosaic","complete");a.waiting(!1)},q=function(c){for(var d=[],e=0;e %s",k,v,w),k=a.reproject(k,w,A,y),m("mProjectPP",k));a.vfile(x,B);k=a.imgtbl(x,".",z,"");m("mImgtbl",k);a.vsize(z)||a.error("no FITS files were added to output table for mosaic");q("create mosaic: %s",g);k=a.madd(z,A,g,"");m("mAdd",k);l();x=$.extend(!0,{},a.fits.options,b);x.image={xdim:0,ydim:0};x.file=g;a.fits.handleFITSFile(g,x,n)},a.SPINOUT);return this};a.Command=function(c){for(var b in c)c.hasOwnProperty(b)&&(this[b]=c[b]);c.name||a.error("command has no name");c.get|| +this.id&&c.push(a.images[e]);else c=[c];else $.isArray(c)||a.error("unknown input type for createMosaic()");else c=this.image?[this.image]:[];c.length||a.error("no images specified for createMosaic()");for(e=0;e %s",l,v,w),l=a.reproject(l,w,A,y),m("mProjectPP",l));a.vfile(x,B);l=a.imgtbl(x,".",z,"");m("mImgtbl",l);a.vsize(z)||a.error("no FITS files were added to output table for mosaic");q("create mosaic: %s",f);l=a.madd(z,A,f,"");m("mAdd",l);k();x=$.extend(!0,{},a.fits.options,b);x.image={xdim:0,ydim:0};x.file=f;a.fits.handleFITSFile(f,x,n)},a.SPINOUT);return this};a.Command=function(c){for(var b in c)c.hasOwnProperty(b)&&(this[b]=c[b]);c.name||a.error("command has no name");c.get|| c.set||a.error("command requires get and/or set routine");a.commands.push(this);1").addClass("JS9Container").css("z-index",0).appendTo(d);f.canvasjq=$("").addClass("JS9Layer").attr("id",h).attr("width",d.css("width")).attr("height",d.css("height")).appendTo(f.divjq);a.bugs.webkit_resize&&"main"===f.dtype&&f.canvasjq.attr("width",this.width).attr("height",this.height);f.canvas=new fabric.Canvas(f.canvasjq[0]);f.canvas.renderOnAddRemove=!1;f.canvas.preserveObjectStacking=!0;f.opts.movable?(f.opts.lockMovementX=!1,f.opts.lockMovementY=!1,f.opts.selectable= -!0,f.opts.evented=!0):!1===f.opts.movable&&(f.opts.lockMovementX=!0,f.opts.lockMovementY=!0,f.opts.selectable=!1,f.opts.evented=!1);void 0===f.opts.changeable&&void 0!==f.opts.fixinplace&&(f.opts.changeable=!f.opts.fixinplace);f.opts.changeable?(f.opts.hasControls=!0,f.opts.hasRotatingPoint=!0,f.opts.hasBorders=!0,f.opts.lockMovementX=!1,f.opts.lockMovementY=!1,f.opts.lockRotation=!1,f.opts.lockScalingX=!1,f.opts.lockScalingY=!1,f.opts.lockUniScaling=!1,f.opts.selectable=!0,f.opts.evented=!0,f.opts.usekeyboard= -!0):!1===f.opts.changeable&&(f.opts.hasControls=!1,f.opts.hasRotatingPoint=!1,f.opts.hasBorders=!1,f.opts.lockMovementX=!0,f.opts.lockMovementY=!0,f.opts.lockRotation=!0,f.opts.lockScalingX=!0,f.opts.lockScalingY=!0,f.opts.lockUniScaling=!0,f.opts.selectable=!1,f.opts.evented=!1,f.opts.usekeyboard=!1);f.opts.selectable&&(f.opts.canvas.selection=!0);if(f.opts.onmousedown||f.opts.onmouseup||f.opts.onmousemove||f.opts.tooltip||f.opts.onmouseover||f.opts.onmouseout){f.opts.evented=!0;if(f.opts.onmousedown)f.canvas.on("mouse:down", -function(b){if(f.display.image&&b.target)"main"===f.dtype&&(f.display.image.clickInRegion=!0,f.display.image.clickInLayer=c),f.opts.onmousedown.call(f.canvas,f.display.image,b.target.pub,b.e,b.target);else if(f.canvas._selection=f.canvas.selection)f.canvas.selection=a.specialKey(b.e)});else f.canvas.on("mouse:down",function(b){if(f.canvas._selection=f.canvas.selection)f.canvas.selection=a.specialKey(b.e)});if(f.opts.onmouseup)f.canvas.on("mouse:up",function(a){f.display.image&&a.target&&f.opts.onmouseup.call(f.canvas, -f.display.image,a.target.pub,a.e,a.target);f.canvas.selection=f.canvas._selection||f.canvas.selection});else f.canvas.on("mouse:up",function(){f.canvas.selection=f.canvas._selection||f.canvas.selection});if(f.opts.onmousemove)f.canvas.on("mouse:move",function(a){f.display.image&&a.target&&f.opts.onmousemove.call(f.canvas,f.display.image,a.target.pub,a.e,a.target)});if(f.opts.onmouseover)f.canvas.on("mouse:over",function(a){f.display.image&&a.target&&f.opts.onmouseover.call(f.canvas,f.display.image, -a.target.pub,a.e,a.target)});if(f.opts.onmouseout)f.canvas.on("mouse:out",function(a){f.display.image&&a.target&&f.opts.onmouseout.call(f.canvas,f.display.image,a.target.pub,a.e,a.target)});f.opts.tooltip&&(f.canvas.on("mouse:over",function(b){f.display.image&&b.target&&a.tooltip(b.target.left+b.target.width+2,b.target.top+b.target.height+2,f.opts.tooltip,f.display.image,b.target.pub,b.e,b.target)}),f.canvas.on("mouse:out",function(b){f.display.image&&b.target&&a.tooltip(b.target.left,b.target.top, -null,f.display.image,b.target.pub,b.e,b.target)}))}else f.canvas.on("mouse:down",function(b){if(f.canvas._selection=f.canvas.selection)f.canvas.selection=a.specialKey(b.e)}),f.canvas.on("mouse:up",function(){f.canvas.selection=f.canvas._selection||f.canvas.selection});"function"===typeof f.opts.ongroupcreate&&(f.opts.canvas.selection=!0,f.opts.selectable=!0,f.canvas.on("selection:created",function(a){var b=[],c=[];f.display.image&&a.target&&"group"===a.target.type&&(a.target.forEachObject(function(a){a.pub&& -(c.push(a),b.push(a.pub))}),f.opts.ongroupcreate.call(f.canvas,f.display.image,b,a.e,c))}));f.canvas.on("object:modified",function(b){var c=[];if(b.target){var d=b.target;a.Fabric.updateChildren(f,d,"deltas");if(f.opts.sortOverlapping&&(d.setCoords(),f.canvas.forEachObject(function(a){a!==d&&d.intersectsWithObject(a)&&(1===fabric.major_version?(e=a.getWidth(),g=a.getHeight()):(e=a.getScaledWidth(),g=a.getScaledHeight()),c.push({obj:a,siz:e*g}))}),c.length)){if(1===fabric.major_version){var e=d.getWidth(); -var g=d.getHeight()}else e=d.getScaledWidth(),g=d.getScaledHeight();c.push({obj:d,siz:e*g});c.sort(function(a,b){return a.sizb.siz?1:0});var h=c.length;for(b=0;b$.inArray(k,e)&&d.addWithUpdate(k)}if(h.params.children)for(k=0;k$.inArray(p,e)&&d.addWithUpdate(p)}switch(h.type){case "polyline":case "polygon":a.Fabric.removePolygonAnchors(f,h)}h&&f.display.image&&f.display.image.updateShapes(c,h,"select")}}f.canvas.renderAll()}else g(f,d)}),f.canvas.on("before:selection:cleared",function(a){var b=f.canvas.getActiveObject();if("activeSelection"===b.type){var c= -f.canvas.getActiveObjects(a);for(a=0;a").addClass("JS9Container").css("z-index",0).appendTo(d);g.canvasjq=$("").addClass("JS9Layer").attr("id",h).attr("width",d.css("width")).attr("height",d.css("height")).appendTo(g.divjq);a.bugs.webkit_resize&&"main"===g.dtype&&g.canvasjq.attr("width",this.width).attr("height",this.height);g.canvas=new fabric.Canvas(g.canvasjq[0]);g.canvas.renderOnAddRemove=!1;g.canvas.preserveObjectStacking=!0;g.opts.movable?(g.opts.lockMovementX=!1,g.opts.lockMovementY=!1,g.opts.selectable= +!0,g.opts.evented=!0):!1===g.opts.movable&&(g.opts.lockMovementX=!0,g.opts.lockMovementY=!0,g.opts.selectable=!1,g.opts.evented=!1);void 0===g.opts.changeable&&void 0!==g.opts.fixinplace&&(g.opts.changeable=!g.opts.fixinplace);g.opts.changeable?(g.opts.hasControls=!0,g.opts.hasRotatingPoint=!0,g.opts.hasBorders=!0,g.opts.lockMovementX=!1,g.opts.lockMovementY=!1,g.opts.lockRotation=!1,g.opts.lockScalingX=!1,g.opts.lockScalingY=!1,g.opts.lockUniScaling=!1,g.opts.selectable=!0,g.opts.evented=!0,g.opts.usekeyboard= +!0):!1===g.opts.changeable&&(g.opts.hasControls=!1,g.opts.hasRotatingPoint=!1,g.opts.hasBorders=!1,g.opts.lockMovementX=!0,g.opts.lockMovementY=!0,g.opts.lockRotation=!0,g.opts.lockScalingX=!0,g.opts.lockScalingY=!0,g.opts.lockUniScaling=!0,g.opts.selectable=!1,g.opts.evented=!1,g.opts.usekeyboard=!1);g.opts.selectable&&(g.opts.canvas.selection=!0);if(g.opts.onmousedown||g.opts.onmouseup||g.opts.onmousemove||g.opts.tooltip||g.opts.onmouseover||g.opts.onmouseout){g.opts.evented=!0;if(g.opts.onmousedown)g.canvas.on("mouse:down", +function(b){if(g.display.image&&b.target)"main"===g.dtype&&(g.display.image.clickInRegion=!0,g.display.image.clickInLayer=c),g.opts.onmousedown.call(g.canvas,g.display.image,b.target.pub,b.e,b.target);else if(g.canvas._selection=g.canvas.selection)g.canvas.selection=a.specialKey(b.e)});else g.canvas.on("mouse:down",function(b){if(g.canvas._selection=g.canvas.selection)g.canvas.selection=a.specialKey(b.e)});if(g.opts.onmouseup)g.canvas.on("mouse:up",function(a){g.display.image&&a.target&&g.opts.onmouseup.call(g.canvas, +g.display.image,a.target.pub,a.e,a.target);g.canvas.selection=g.canvas._selection||g.canvas.selection});else g.canvas.on("mouse:up",function(){g.canvas.selection=g.canvas._selection||g.canvas.selection});if(g.opts.onmousemove)g.canvas.on("mouse:move",function(a){g.display.image&&a.target&&g.opts.onmousemove.call(g.canvas,g.display.image,a.target.pub,a.e,a.target)});if(g.opts.onmouseover)g.canvas.on("mouse:over",function(a){g.display.image&&a.target&&g.opts.onmouseover.call(g.canvas,g.display.image, +a.target.pub,a.e,a.target)});if(g.opts.onmouseout)g.canvas.on("mouse:out",function(a){g.display.image&&a.target&&g.opts.onmouseout.call(g.canvas,g.display.image,a.target.pub,a.e,a.target)});g.opts.tooltip&&(g.canvas.on("mouse:over",function(b){g.display.image&&b.target&&a.tooltip(b.target.left+b.target.width+2,b.target.top+b.target.height+2,g.opts.tooltip,g.display.image,b.target.pub,b.e,b.target)}),g.canvas.on("mouse:out",function(b){g.display.image&&b.target&&a.tooltip(b.target.left,b.target.top, +null,g.display.image,b.target.pub,b.e,b.target)}))}else g.canvas.on("mouse:down",function(b){if(g.canvas._selection=g.canvas.selection)g.canvas.selection=a.specialKey(b.e)}),g.canvas.on("mouse:up",function(){g.canvas.selection=g.canvas._selection||g.canvas.selection});"function"===typeof g.opts.ongroupcreate&&(g.opts.canvas.selection=!0,g.opts.selectable=!0,g.canvas.on("selection:created",function(a){var b=[],c=[];g.display.image&&a.target&&"group"===a.target.type&&(a.target.forEachObject(function(a){a.pub&& +(c.push(a),b.push(a.pub))}),g.opts.ongroupcreate.call(g.canvas,g.display.image,b,a.e,c))}));g.canvas.on("object:modified",function(b){var c=[];if(b.target){var d=b.target;a.Fabric.updateChildren(g,d,"deltas");if(g.opts.sortOverlapping&&(d.setCoords(),g.canvas.forEachObject(function(a){a!==d&&d.intersectsWithObject(a)&&(1===fabric.major_version?(e=a.getWidth(),f=a.getHeight()):(e=a.getScaledWidth(),f=a.getScaledHeight()),c.push({obj:a,siz:e*f}))}),c.length)){if(1===fabric.major_version){var e=d.getWidth(); +var f=d.getHeight()}else e=d.getScaledWidth(),f=d.getScaledHeight();c.push({obj:d,siz:e*f});c.sort(function(a,b){return a.sizb.siz?1:0});var h=c.length;for(b=0;b$.inArray(l,e)&&d.addWithUpdate(l)}if(h.params.children)for(l=0;l$.inArray(p,e)&&d.addWithUpdate(p)}switch(h.type){case "polyline":case "polygon":a.Fabric.removePolygonAnchors(g,h)}h&&g.display.image&&g.display.image.updateShapes(c,h,"select")}}g.canvas.renderAll()}else f(g,d)}),g.canvas.on("before:selection:cleared",function(a){var b=g.canvas.getActiveObject();if("activeSelection"===b.type){var c= +g.canvas.getActiveObjects(a);for(a=0;ag)&&(g=b.zindex,c=e));a=c}return a};a.Fabric._parseShapeOptions=function(c, -b,d){var e={},g={};var f="main"===this.display.layers[c].dtype?this.rgb.sect.zoom:1;if(b.remove)return{remove:b.remove};g.tags=[];var h=b.parent||d&&d.params&&d.params.parent;delete b.parent;b.restoreid||delete b.id;if(b.tags)if("string"===typeof b.tags){var k=b.tags.toLowerCase().split(",");for(c=0;cthis.raw.wcsinfo.cdelt1&&0>this.raw.wcsinfo.cdelt2||0f)&&(f=b.zindex,c=e));a=c}return a};a.Fabric._parseShapeOptions=function(c, +b,d){var e={},f={};var g="main"===this.display.layers[c].dtype?this.rgb.sect.zoom:1;if(b.remove)return{remove:b.remove};f.tags=[];var h=b.parent||d&&d.params&&d.params.parent;delete b.parent;b.restoreid||delete b.id;if(b.tags)if("string"===typeof b.tags){var l=b.tags.toLowerCase().split(",");for(c=0;cthis.raw.wcsinfo.cdelt1&&0>this.raw.wcsinfo.cdelt2||0Math.abs(b.angle)?{x:b.left,y:b.top-e}:a.rotatePoint({x:b.left,y:b.top-e},b.angle,{x:b.left,y:b.top});var g=this.displayToImagePos(e);e={x:g.x,y:g.y,angle:-b.angle,color:b.stroke,text:d.text,parent:"TBD",rtn:"object"};d.textOpts&&(e=$.extend(!0,{},e,d.textOpts)); -var f=a.Fabric.addShapes.call(this,c,"text",e);f.params.parent={id:b.params.id,obj:b,dleft:b.left-f.left,dtop:b.top-f.top,lastscalex:b.scaleX,lastscaley:b.scaleY,lastangle:b.angle,textheight:12};a.Fabric._updateShape.call(this,c,f,null,"child",f.params);void 0!==d.strokeWidth&&(f.params.parent.strokeWidth=d.strokeWidth);if(g.x!==e.x||g.y!==e.y)f.params.parent.moved=!0;d.textOpts&&void 0!==d.textOpts.ra&&void 0!==d.textOpts.dec&&(f.params.hasTextOpts=!0);b.params.children.push({id:f.params.id,obj:f}); -a.Fabric._updateShape.call(this,c,b,null,"addchild",b.params)}else if(b.params.children&&(d.text||d.textOpts))for(f=0;f -this.raw.wcsinfo.cdelt1&&0>this.raw.wcsinfo.cdelt2||0f.angle;)f.angle+=360;for(;360<= -f.angle;)f.angle-=360;n=b.scaleX/l;u=b.scaleY/l;d.group&&(n*=d.group.scaleX,u*=d.group.scaleY);switch(f.shape){case "annulus":f.shape="annulus";f.radii=[];"image"!==f.imsys&&(f.lcs.radii=[]);f.imstr="annulus("+k(q)+", "+k(p)+", ";var v="annulus "+f.x+" "+f.y+" ";var y=b.getObjects();r=y.length;for(d=0;da.globalOpts.unremoveReg&&(this.regstack=this.regstack.slice(0,a.globalOpts.unremoveReg)));this.selectShapes(c,b,function(b,d){if(!1!==b.params.removable){a.Fabric._updateShape.call(e,c,b,d,"remove");b.params.winid&&b.params.winid.close();if(b.params.parent){var f=b.params.parent.obj;for(d=f.params.children.length- -1;0<=d;d--)if(b===f.params.children[d].obj){f.params.children.splice(d,1);break}}for(d=0;dMath.abs(b.angle)?{x:b.left,y:b.top-e}:a.rotatePoint({x:b.left,y:b.top-e},b.angle,{x:b.left,y:b.top});var f=this.displayToImagePos(e);e={x:f.x,y:f.y,angle:-b.angle,color:b.stroke,text:d.text,parent:"TBD",rtn:"object"};d.textOpts&&(e=$.extend(!0,{},e,d.textOpts)); +var g=a.Fabric.addShapes.call(this,c,"text",e);g.params.parent={id:b.params.id,obj:b,dleft:b.left-g.left,dtop:b.top-g.top,lastscalex:b.scaleX,lastscaley:b.scaleY,lastangle:b.angle,textheight:12};a.Fabric._updateShape.call(this,c,g,null,"child",g.params);void 0!==d.strokeWidth&&(g.params.parent.strokeWidth=d.strokeWidth);if(f.x!==e.x||f.y!==e.y)g.params.parent.moved=!0;d.textOpts&&void 0!==d.textOpts.ra&&void 0!==d.textOpts.dec&&(g.params.hasTextOpts=!0);b.params.children.push({id:g.params.id,obj:g}); +a.Fabric._updateShape.call(this,c,b,null,"addchild",b.params)}else if(b.params.children&&(d.text||d.textOpts))for(g=0;g +this.raw.wcsinfo.cdelt1&&0>this.raw.wcsinfo.cdelt2||0g.angle;)g.angle+=360;for(;360<= +g.angle;)g.angle-=360;n=b.scaleX/k;u=b.scaleY/k;d.group&&(n*=d.group.scaleX,u*=d.group.scaleY);switch(g.shape){case "annulus":g.shape="annulus";g.radii=[];"image"!==g.imsys&&(g.lcs.radii=[]);g.imstr="annulus("+l(q)+", "+l(p)+", ";var v="annulus "+g.x+" "+g.y+" ";var y=b.getObjects();r=y.length;for(d=0;da.globalOpts.unremoveReg&&(this.regstack=this.regstack.slice(0,a.globalOpts.unremoveReg)));this.selectShapes(c,b,function(b,d){if(!1!==b.params.removable){a.Fabric._updateShape.call(e,c,b,d,"remove");b.params.winid&&b.params.winid.close();if(b.params.parent){var g=b.params.parent.obj;for(d=g.params.children.length- +1;0<=d;d--)if(b===g.params.children[d].obj){g.params.children.splice(d,1);break}}for(d=0;d2*Math.PI;)f-=2*Math.PI;d=Math.cos(f)*g-Math.sin(f)*h;h=Math.sin(f)*g+Math.cos(f)*h;g=b.points;for(f=0;fl.x?k.x:l.x;var p=k.y>l.y?k.y:l.y;var t=k.x-l.x;k=k.y-l.y;var r=Math.sqrt(t*t+k*k);0!==r&&(t/=r,k/=r);r=d-l.x;var u=h-l.y;r=r*t+u*k;t=l.x+t*r;l=l.y+k*r;tq&&(t=q);lp&&(l=p);m=(t-d)*(t-d)+(l-h)*(l-h);if(m=e.length||"polyline"===d.type&&2>=e.length)){var g=b.polyparams.point;delete b.polyparams.point;c=this.getShapeLayer(c);a.Fabric.removePolygonAnchors(c.dlayer,d);e.splice(g,1);a.resetPolygonCenter(d);c.canvas.setActiveObject(d)}}};a.Fabric.addPolygonAnchors= -function(c,b){var d,e={},g=c.canvas,f=function(b){b=b.target;var d=b.polyparams.polygon,f=b.polyparams.point,h=d.get("points"),k=c.display.image;void 0!==f&&!1!==d.params.changeable&&(d.angle?e=a.rotatePoint({x:b.left,y:b.top},-d.angle,{x:d.left,y:d.top}):(e.x=b.left,e.y=b.top),h[f].x=(e.x-d.left)/d.scaleX,h[f].y=(e.y-d.top)/d.scaleY,a.resetPolygonCenter(d),a.Fabric._updateShape.call(k,d.params.layerName,d,null,"update"),k&&(k.params.listonchange||d.params.listonchange)&&k.listRegions(d,{mode:2}), -g.renderAll())},h=function(b){var c,d={};for(c=0;cg;)g+=360;for(;360<=g;)g-=360;var l=g-h.lastangle;var m=a.rotatePoint({x:k.left, -y:k.top},l,{x:b.left,y:b.top});k.left=m.x;k.top=m.y;h.dleft=b.left-k.left;h.dtop=b.top-k.top;for(k.angle+=l;0>k.angle;)k.angle+=360;for(;360<=k.angle;)k.angle-=360;h.lastangle=g;break;case "scaling":h.dleft*=b.scaleX/h.lastscalex,h.dtop=b.scaleY/h.lastscaley*(h.dtop-h.textheight)+h.textheight,h.lastscalex=b.scaleX,h.lastscaley=b.scaleY,h.moved=!0,k.left=b.left-h.dleft,k.top=b.top-h.dtop}k.setCoords();c.display.image&&c.display.image.updateShapes(c.layerName,k,"updatechild")}};a.resetPolygonCenter= -function(c){var b={};if(1===fabric.major_version){c._calcDimensions();var d=(c.minX+c.width/2)*c.scaleX;var e=(c.minY+c.height/2)*c.scaleY}else e=c._calcDimensions(),d=(e.left+e.width/2)*c.scaleX,e=(e.top+e.height/2)*c.scaleY;c.angle?b=a.rotatePoint({x:c.left+d,y:c.top+e},c.angle,{x:c.left,y:c.top}):(b.x=c.left+d,b.y=c.top+e);if(1",0,g);k+=l+"
";for(b in this.layers)this.layers.hasOwnProperty(b)&&(h=this.layers[b],"main"===h.dlayer.dtype&&h.show&&(k+=""+l+h.dlayer.canvas.toSVG()+"
"));(void 0===c.colorbar||c.colorbar)&&(c=this.display.pluginInstances.JS9Colorbar)&&c.isActive()&&(g+=2,h=c.colorbarjq[0].toDataURL("image/png"),g+=this.display.height,l=sprintf("
",0,g),k+=l+"
",c.textjq&&c.textjq[0]&&(h=c.textjq[0].toDataURL("image/png"),g+=c.colorbarjq.height()+1,l=sprintf("
",0,g),k+=l+"
"));k+="";window.isElectron&&(e="data:text/html,