├── README.md ├── index.html ├── app.css ├── data.csv └── app.js /README.md: -------------------------------------------------------------------------------- 1 | Port of an ipython notebook to D3.js, to be published on a scientific paper (astronomy). 2 | 3 | Baldwin, Phillips & Terlevich Diagnostic Diagram (with Kewley-Kauffman demarcations) for dual active galactic nuclei. 4 | -------------------------------------------------------------------------------- /index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Dual AGN Interactive BPT 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 |
16 |
17 |
18 | 19 |
20 |
21 |
22 | 23 |
24 |
25 | 26 |
27 |
28 |
29 |
30 |
31 | 32 |
33 |
34 | 35 |
36 |
37 |
38 |
39 | 40 |
41 |
42 | 43 |
44 |
45 | 46 | 47 | 48 | 49 | -------------------------------------------------------------------------------- /app.css: -------------------------------------------------------------------------------- 1 | *, 2 | *:before, 3 | *:after { 4 | margin: 0px; 5 | padding: 0px; 6 | font-size: 14px; 7 | font-family: Helvetica, Times, serif; 8 | font-weight: 200; 9 | line-height: 1.2; 10 | color: #333333; 11 | -webkit-box-sizing: border-box; 12 | -moz-box-sizing: border-box; 13 | box-sizing: border-box; 14 | } 15 | html, 16 | body { 17 | width: 100%; 18 | height: 100%; 19 | margin: 0px; 20 | padding: 0px; 21 | } 22 | body { 23 | background-color: white; 24 | } 25 | #filters { 26 | height: 32px; 27 | padding: 8px 6px; 28 | margin-left: 60px; 29 | margin-right: 60px; 30 | } 31 | #filters div { 32 | float: left; 33 | } 34 | #filters div div.label { 35 | height: 100%; 36 | margin-right: 5px; 37 | display: table; 38 | font-weight: bold; 39 | } 40 | #filters div div.label span { 41 | display: table-cell; 42 | vertical-align: middle; 43 | text-transform: capitalize; 44 | font-weight: inherit; 45 | } 46 | #filters div div.value { 47 | height: 100%; 48 | } 49 | #filters div div.value span { 50 | width: 30px; 51 | padding: 5px; 52 | text-align: center; 53 | } 54 | #filters div div.value span.single { 55 | background-color: #F8F8F8; 56 | border: solid 1px #C5C5C5; 57 | pointer-events: none; 58 | } 59 | #filters div div.value span.button { 60 | background-color: #f1f1f1; 61 | background-image: linear-gradient(#f8f8f8, #d3d3d3); 62 | color: #ff6464; 63 | border: solid 1px #C5C5C5; 64 | -moz-user-select: none; 65 | -khtml-user-select: none; 66 | -webkit-user-select: none; 67 | -o-user-select: none; 68 | user-select: none; 69 | pointer-events: auto; 70 | cursor: pointer; 71 | } 72 | #filters div div.value span.button.pressed { 73 | background-color: #f1f1f1; 74 | background-image: none; 75 | color: black; 76 | font-weight: lighter; 77 | box-shadow: inset 0px 3px 5px rgba(0, 0, 0, 0.125); 78 | } 79 | #filters div div.value:last-child { 80 | margin-right: 15px; 81 | } 82 | #focus { 83 | height: 26px; 84 | padding: 6px 6px; 85 | margin-left: 60px; 86 | margin-right: 60px; 87 | } 88 | #focus span { 89 | font-style: italic; 90 | padding: 4px; 91 | } 92 | #focus span.focus { 93 | background-color: #e34ba1; 94 | color: white; 95 | font-weight: 500; 96 | } 97 | #focus span.dimmed { 98 | color: grey; 99 | opacity: 0.5; 100 | } 101 | #viz { 102 | width: 100%; 103 | height: 95%; 104 | } 105 | svg { 106 | font: 10px sans-serif; 107 | } 108 | text { 109 | font-size: 12px; 110 | font-family: Helvetica, "Helvetica Neue", Arial, sans-serif; 111 | } 112 | .axis { 113 | shape-rendering: crispEdges; 114 | } 115 | .axis path { 116 | fill: none; 117 | stroke: black; 118 | stroke-width: 1; 119 | shape-rendering: crispEdges; 120 | } 121 | .axis .tick line { 122 | stroke: grey; 123 | stroke-opacity: 0.5; 124 | stroke-width: 1; 125 | shape-rendering: crispEdges; 126 | } 127 | .axis.noticksvalue text { 128 | display: none; 129 | } 130 | .curve { 131 | fill: none; 132 | stroke: black; 133 | stroke-width: 1; 134 | shape-rendering: geometricPrecision; 135 | } 136 | .curve.eps { 137 | stroke-dasharray: 6 6; 138 | } 139 | .curve.kauff { 140 | stroke: grey; 141 | stroke-width: 0.5; 142 | stroke-dasharray: 2 2; 143 | } 144 | .curve.stravinska { 145 | stroke: grey; 146 | stroke-width: 0.5; 147 | stroke-dasharray: 6 3 1 3; 148 | } 149 | .area { 150 | fill: #919191; 151 | fill-opacity: 0.45; 152 | stroke: none; 153 | shape-rendering: geometricPrecision; 154 | } 155 | .dot { 156 | fill: #6D6D6D; 157 | stroke: black; 158 | stroke-width: 1; 159 | } 160 | .dot.below_stravinska { 161 | fill: lightgrey; 162 | } 163 | .dot.below_kauffmann { 164 | fill: #5e5e5e; 165 | } 166 | .dot.below_predicted { 167 | fill: #6633ff; 168 | } 169 | .dot.above_predicted { 170 | fill: black; 171 | } 172 | .dot.focused { 173 | fill: #c41e7c; 174 | stroke: black; 175 | } 176 | .dot.dimmed { 177 | opacity: 0.5; 178 | } 179 | .dot.hidden { 180 | display: none; 181 | } 182 | #plot1 { 183 | width: calc(30px + (100% - 30px)/3); 184 | height: calc(100% - 58px); 185 | float: left; 186 | padding: 5px; 187 | } 188 | #plot1 > :first-child { 189 | width: 30px; 190 | height: calc(100% - 30px); 191 | float: left; 192 | } 193 | #plot1 > :first-child span { 194 | display: inline-block; 195 | position: relative; 196 | top: 50%; 197 | left: 50%; 198 | transform: translate(-50%, -50%) rotate(-90deg); 199 | -webkit-transform: translate(-50%, -50%) rotate(-90deg); 200 | -moz-transform: translate(-50%, -50%) rotate(-90deg); 201 | -o-transform: translate(-50%, -50%) rotate(-90deg); 202 | -ms-transform: translate(-50%, -50%) rotate(-90deg); 203 | white-space: nowrap; 204 | vertical-align: middle; 205 | text-align: center; 206 | } 207 | #plot1 > :last-child { 208 | width: calc(100% - 30px); 209 | height: 100%; 210 | float: right; 211 | } 212 | #plot1 > :last-child > :first-child { 213 | width: 100%; 214 | height: calc(100% - 30px); 215 | } 216 | #plot1 > :last-child > :first-child svg { 217 | width: 100%; 218 | height: 100%; 219 | } 220 | #plot1 > :last-child > :last-child { 221 | width: 100%; 222 | height: 30px; 223 | } 224 | #plot1 > :last-child > :last-child span { 225 | display: inline-block; 226 | width: 100%; 227 | position: relative; 228 | top: 50%; 229 | left: 50%; 230 | transform: translate(-50%, -50%); 231 | -webkit-transform: translate(-50%, -50%); 232 | -moz-transform: translate(-50%, -50%); 233 | -o-transform: translate(-50%, -50%); 234 | -ms-transform: translate(-50%, -50%); 235 | transform: translate(-50%, -50%) rotate(0deg); 236 | -webkit-transform: translate(-50%, -50%) rotate(0deg); 237 | -moz-transform: translate(-50%, -50%) rotate(0deg); 238 | -o-transform: translate(-50%, -50%) rotate(0deg); 239 | -ms-transform: translate(-50%, -50%) rotate(0deg); 240 | white-space: nowrap; 241 | vertical-align: middle; 242 | text-align: center; 243 | } 244 | #plot2 { 245 | width: calc((100% - 30px)/3); 246 | height: calc(100% - 58px); 247 | float: left; 248 | padding: 5px; 249 | } 250 | #plot2 > :first-child { 251 | width: 100%; 252 | height: calc(100% - 30px); 253 | } 254 | #plot2 > :first-child svg { 255 | width: 100%; 256 | height: 100%; 257 | } 258 | #plot2 > :last-child { 259 | width: 100%; 260 | height: 30px; 261 | } 262 | #plot2 > :last-child span { 263 | display: inline-block; 264 | width: 100%; 265 | position: relative; 266 | top: 50%; 267 | left: 50%; 268 | transform: translate(-50%, -50%); 269 | -webkit-transform: translate(-50%, -50%); 270 | -moz-transform: translate(-50%, -50%); 271 | -o-transform: translate(-50%, -50%); 272 | -ms-transform: translate(-50%, -50%); 273 | transform: translate(-50%, -50%) rotate(0deg); 274 | -webkit-transform: translate(-50%, -50%) rotate(0deg); 275 | -moz-transform: translate(-50%, -50%) rotate(0deg); 276 | -o-transform: translate(-50%, -50%) rotate(0deg); 277 | -ms-transform: translate(-50%, -50%) rotate(0deg); 278 | white-space: nowrap; 279 | vertical-align: middle; 280 | text-align: center; 281 | } 282 | #plot3 { 283 | width: calc((100% - 30px)/3); 284 | height: calc(100% - 58px); 285 | float: left; 286 | padding: 5px; 287 | } 288 | #plot3 > :first-child { 289 | width: 100%; 290 | height: calc(100% - 30px); 291 | } 292 | #plot3 > :first-child svg { 293 | width: 100%; 294 | height: 100%; 295 | background-color: white; 296 | } 297 | #plot3 > :last-child { 298 | width: 100%; 299 | height: 30px; 300 | } 301 | #plot3 > :last-child span { 302 | display: inline-block; 303 | width: 100%; 304 | position: relative; 305 | top: 50%; 306 | left: 50%; 307 | transform: translate(-50%, -50%); 308 | -webkit-transform: translate(-50%, -50%); 309 | -moz-transform: translate(-50%, -50%); 310 | -o-transform: translate(-50%, -50%); 311 | -ms-transform: translate(-50%, -50%); 312 | transform: translate(-50%, -50%) rotate(0deg); 313 | -webkit-transform: translate(-50%, -50%) rotate(0deg); 314 | -moz-transform: translate(-50%, -50%) rotate(0deg); 315 | -o-transform: translate(-50%, -50%) rotate(0deg); 316 | -ms-transform: translate(-50%, -50%) rotate(0deg); 317 | white-space: nowrap; 318 | vertical-align: middle; 319 | text-align: center; 320 | } 321 | -------------------------------------------------------------------------------- /data.csv: -------------------------------------------------------------------------------- 1 | J130424.65+362847.9,as,None,0.02307,2,0.26514,-0.06612,-0.2182,-0.8062,391.787 2 | J143110.59+043644.1,as,None,0.11882,2,-0.08573,-0.24706,-0.58717,-1.22877,167.846 3 | J100711.07+164355.7,as,None,0.1448,2,0.0623,-0.22182,-0.35706,-0.78621,156.557 4 | J112703.82+103635.3,as,None,0.1106,2,-0.34502,-0.19393,-0.54657,-1.21894,143.243 5 | J080650.80+523507.3,as,None,0.08318,2,-0.24939,-0.31592,-0.51682,-1.15549,135.168 6 | J100602.14+071131.0,pp,2,0.12143,2,0.32413,-0.26265,-0.20615,-0.65497,122.251 7 | J142414.55+270205.3,as,A,0.17338,2,0.86812,-0.2923,-0.29712,-0.75527,117.803 8 | J134739.18+154404.1,as,None,0.1181,2,0.09143,-0.34724,-0.50691,-1.22254,114.651 9 | J122958.05+403322.9,pp,None,0.08218,2,-0.40032,-0.29194,-0.39937,-1.07069,109.859 10 | J015344.33-085715.0,as,None,0.16276,2,0.58786,-0.3876,-0.45002,-0.90303,106.053 11 | J141710.53+050911.1,as,None,0.17303,2,0.35514,-0.38348,-0.46565,-0.97088,101.015 12 | J100717.66+215046.5,as,None,0.18826,2,-0.2891,-0.20759,-0.57109,-1.29826,89.706 13 | J010917.87+144741.7,as,None,0.09271,2,0.00987,-0.32554,-0.4958,-1.29018,89.592 14 | J013758.27-083430.4,pp,None,0.18912,2,0.00462,-0.18579,-0.56692,-1.14791,89.501 15 | J101354.34+035332.8,pp,None,0.14846,2,-0.43539,-0.33264,-0.51113,-1.30057,89.185 16 | J104711.72+385444.8,as,None,0.16781,2,0.35928,-0.32427,-0.46177,-1.12321,75.822 17 | J232901.19-085650.1,as,None,0.09505,2,-0.03281,-0.26228,-0.47223,-0.97437,74.149 18 | J143943.92+170329.5,pp,None,0.17043,2,-0.03679,-0.22934,-0.34676,-1.00533,72.124 19 | J221232.09-073334.0,as,None,0.14253,2,-0.33025,-0.26342,-0.53813,-1.34892,72.057 20 | J154715.19+054337.3,pp,None,0.11675,2,-0.20489,-0.26569,-0.44471,-1.10921,71.516 21 | J142818.07+633400.5,as,None,0.12611,2,0.4203,-0.06097,-0.3026,-0.93152,70.472 22 | J123128.37+631204.7,as,None,0.16272,2,0.00098,-0.37318,-0.46137,-1.04081,69.993 23 | J091011.26+582107.8,as,None,0.17243,2,-0.40552,-0.27173,-0.48071,-1.2657,69.831 24 | J145608.54+171834.4,as,None,0.10346,2,-0.1022,-0.06725,-0.42118,-1.07459,69.115 25 | J115524.61+373741.6,pp,None,0.16563,2,0.47011,-0.24047,-0.24303,-0.86301,66.129 26 | J120815.58+031500.9,as,None,0.13309,2,-0.35833,-0.30458,-0.55312,-1.29668,64.8 27 | J095253.29+093115.6,as,None,0.16559,2,-0.17254,-0.26989,-0.46215,-1.14332,63.81 28 | J104455.10+005655.6,as,None,0.11497,2,-0.01706,-0.25954,-0.08497,-0.47895,63.524 29 | J083650.12+441610.8,as,None,0.04326,2,-0.47969,-0.10612,-0.4985,-1.15649,62.751 30 | J090325.55+162256.1,as,A,0.18244,2,0.00395,-0.20763,-0.51714,-1.12029,62.636 31 | J142239.97+220455.6,as,None,0.1887,2,-0.04334,-0.32694,-0.54483,-1.12218,62.052 32 | J090206.13+430609.8,as,None,0.11525,2,-0.25944,-0.28778,-0.46513,-0.93821,61.632 33 | J090007.20+600458.1,as,None,0.03901,2,-0.6139,-0.24466,-0.58528,-1.40004,61.402 34 | J151134.24+200418.1,as,None,0.07367,2,-0.32331,-0.12695,-0.41291,-0.97356,58.987 35 | J100743.91-000820.9,as,None,0.06782,2,-0.34628,-0.24852,-0.53043,-1.22877,58.17 36 | J103316.05+052206.4,as,None,0.14008,2,-0.05731,-0.38653,-0.49319,-1.34246,58.146 37 | J114050.50+561335.2,as,None,0.10647,2,-0.10144,-0.33809,-0.46103,-1.04199,57.984 38 | J100654.44+111750.1,pp,None,0.16349,2,-0.07082,-0.2647,-0.3093,-0.88558,57.357 39 | J105157.34+164849.1,as,A,0.1878,2,0.1494,-0.22296,-0.36519,-1.10346,56.951 40 | J233232.85+000525.4,pp,None,0.19371,2,0.02883,-0.29526,-0.63184,-1.28837,56.497 41 | J005357.14-092123.1,pp,A,0.09776,2,0.58442,0.16117,-0.05083,-0.44961,56.076 42 | J092544.50+331253.9,as,None,0.16352,2,-0.15921,-0.222,-0.27856,-0.70849,55.471 43 | J073939.04+233713.7,as,None,0.14099,2,0.00481,-0.17074,-0.4683,-1.06103,55.406 44 | J210505.43+105400.9,as,None,0.10722,2,-0.25538,-0.20471,-0.50327,-1.25895,54.66 45 | J101433.67+581120.4,pp,None,0.19177,2,-0.08761,-0.39544,-0.55369,-1.20074,54.565 46 | J013037.24+001151.1,as,A,0.17858,2,0.25656,-0.25106,-0.48726,-1.41024,54.368 47 | J105211.57+522424.2,as,None,0.14973,2,-0.18132,-0.26999,-0.4806,-1.26857,54.188 48 | J090754.67+392419.8,as,None,0.09408,2,0.05981,-0.29993,-0.23712,-0.81182,54.121 49 | J123429.58+325337.4,as,None,0.08813,2,-0.40995,-0.24235,-0.51269,-1.2614,52.968 50 | J075934.81+274930.3,as,None,0.1248,2,-0.10655,-0.29023,-0.50021,-1.28904,52.174 51 | J135234.95+383330.8,as,None,0.19358,2,-0.18245,-0.25877,-0.49975,-1.12882,51.84 52 | J105358.47+123625.3,as,None,0.07859,2,-0.23392,-0.2955,-0.39386,-1.08232,50.684 53 | J142322.48+223256.6,as,None,0.07057,2,-0.18826,-0.20723,-0.45799,-0.92141,49.78 54 | J083137.59+221440.6,as,None,0.19366,2,-0.32437,-0.24914,-0.51301,-1.2175,49.254 55 | J080615.96+202331.0,as,None,0.18344,2,-0.29677,-0.24849,-0.50711,-1.15737,49.043 56 | J145449.84+490511.8,as,None,0.09092,2,-0.1251,-0.30119,-0.50739,-1.24765,48.99 57 | J130511.07-033637.2,pp,None,0.16115,2,-0.10194,-0.14965,-0.26928,-0.73797,48.905 58 | J151606.60-022029.6,as,A,0.0993,2,-0.17438,-0.21858,-0.53773,-1.30257,48.822 59 | J094644.57+291336.1,as,None,0.13854,2,-0.03062,-0.28962,-0.55564,-1.41063,48.685 60 | J121114.84+443514.5,as,None,0.13301,2,0.57714,-0.28574,-0.41723,-0.90548,48.407 61 | J123626.09+571512.7,as,None,0.08838,2,-0.1642,-0.35074,-0.37791,-1.11986,48.226 62 | J010938.05+150459.0,as,None,0.13502,2,-0.19802,-0.20515,-0.39682,-1.06396,47.68 63 | J160522.77+294502.6,as,None,0.18495,2,-0.65878,-0.21501,-0.30326,-0.8888,47.189 64 | J161915.62+150710.9,as,None,0.08168,2,-0.26185,-0.21502,-0.45465,-1.03563,46.745 65 | J220617.46+133704.1,as,None,0.14297,2,0.03193,-0.21811,-0.51466,-1.18165,45.292 66 | J084049.49+620952.5,as,None,0.06912,2,-0.31105,-0.24109,-0.5733,-0.62737,45.092 67 | J123444.76+433918.4,as,None,0.17134,2,-0.30154,-0.21286,-0.50665,-1.06301,44.673 68 | J082436.75+332434.9,pp,None,0.16296,2,0.3036,-0.29121,-0.08567,-0.46433,44.309 69 | J143404.96+045814.1,as,None,0.08753,2,0.02648,-0.24012,-0.45015,-1.05835,44.027 70 | J104646.73+481521.8,as,None,0.15674,2,-0.18257,-0.04275,-0.28582,-0.6387,43.044 71 | J095109.32+005526.8,pp,None,0.14165,2,-0.08573,-0.24206,-0.62537,-1.62216,42.552 72 | J150002.24+044354.3,as,None,0.11203,2,-0.13172,-0.23028,-0.54827,-1.09748,42.353 73 | J111346.88+430634.3,as,2,0.06067,2,-0.16934,-0.29875,-0.46263,-1.145,42.312 74 | J111820.52+613844.2,as,None,0.13967,2,-0.06211,-0.35072,-0.54208,-1.22299,42.14 75 | J132802.51+130600.0,as,None,0.14457,2,0.0803,-0.31188,-0.53723,-1.28368,41.581 76 | J114209.44+251758.3,pp,A,0.18075,2,0.83557,0.25668,0.05436,-0.34296,41.459 77 | J120959.25+584736.2,as,None,0.17776,2,0.4707,-0.30119,-0.48223,-1.01635,41.422 78 | J120414.18+034145.8,as,None,0.13117,2,-0.45931,-0.25116,-0.63084,-1.29496,41.393 79 | J093800.66+165407.5,as,None,0.14896,2,-0.4564,0.16689,-0.30692,-0.81843,41.229 80 | J145250.20+562017.2,as,None,0.14939,2,0.57299,-0.26983,-0.53131,-1.56601,41.159 81 | J112225.29+492112.1,as,None,0.1111,2,-0.18035,-0.28551,-0.5099,-1.13971,40.977 82 | J092116.77+291829.1,as,A,0.12031,2,0.11181,-0.27104,-0.50869,-1.23558,40.864 83 | J132224.63+321441.7,pp,None,0.18739,2,0.3027,-0.46767,-0.38904,-1.00435,40.843 84 | J151859.45+140332.1,pp,None,0.13913,2,0.15607,-0.20696,-2.07012,-1.12081,40.731 85 | J162513.20+340649.3,as,None,0.18096,2,-0.0204,-0.2488,-0.49206,-1.22021,40.695 86 | J115549.01+190401.5,pp,A,0.15001,2,0.34319,-0.17214,-0.5516,-1.07001,40.409 87 | J152617.76+271100.7,as,2,0.12222,2,0.1732,-0.01468,-0.33839,-1.00323,40.292 88 | J161550.51+061956.0,as,None,0.09766,2,-0.32575,-0.29705,-0.45766,-1.05754,40.093 89 | J114145.45-032902.5,as,None,0.14154,2,-0.23861,-0.33697,-0.55406,-1.32077,39.808 90 | J082315.74+524247.5,as,None,0.08589,2,-0.50463,-0.27928,-0.48808,-1.16631,39.389 91 | J230521.80+141402.1,as,None,0.19603,2,0.7507,-0.04212,-0.22351,-0.83868,39.311 92 | J092647.80+151231.9,pp,None,0.12487,2,-0.18465,-0.31152,-0.56128,-1.37051,39.175 93 | J090942.75+303118.9,as,None,0.18198,2,-0.46683,-0.26191,-0.53404,-1.2865,38.859 94 | J120838.57+202559.7,pp,None,0.17472,2,-0.18182,-0.27975,-0.53031,-1.22938,38.721 95 | J141155.09+051620.4,pp,None,0.09264,2,-0.16722,-0.126,-0.42748,-0.44281,38.371 96 | J154037.20+101128.1,as,None,0.17882,2,0.13144,-0.32887,-0.45801,-1.23556,38.204 97 | J142016.91+624854.3,as,None,0.10889,2,-0.14771,-0.29647,-0.37209,-0.95482,37.898 98 | J142621.28-023411.0,as,None,0.17598,2,-0.15664,-0.24659,-0.54493,-1.27127,37.884 99 | J091445.54+413714.4,as,None,0.1405,2,0.68881,0.42564,0.1507,-0.19341,37.76 100 | J132241.48+212557.5,as,None,0.08195,2,-0.04209,-0.28659,-0.52035,-1.24508,37.704 101 | J122926.06+094641.2,as,None,0.11149,2,-0.43513,-0.28892,-0.49597,-1.11619,37.682 102 | J113649.46+491023.3,as,None,0.15077,2,-0.14497,-0.23334,-0.41114,-1.08014,37.536 103 | J150600.78-022551.6,as,None,0.18139,2,-0.09064,-0.32127,-0.53424,-1.33245,37.282 104 | J161938.41+394338.1,as,None,0.13592,2,0.47224,-0.47958,-0.4135,-1.04824,37.17 105 | J101635.81+395716.5,as,None,0.15025,2,-0.29336,-0.29924,-0.50489,-1.263,37.152 106 | J133010.57+173634.1,as,None,0.19409,2,-0.3937,-0.19523,-0.65278,-1.15255,37.074 107 | J091413.80+032201.3,as,None,0.14531,2,0.4032,-0.06508,-0.50726,-1.2038,36.829 108 | J114106.58+554012.3,as,2,0.15133,2,0.0826,-0.35076,-0.53015,-1.26841,36.65 109 | J140710.22+345153.0,as,None,0.19759,2,0.31398,-0.26307,-0.52644,-1.18891,36.534 110 | J134330.05+090614.6,as,2,0.13658,2,0.52453,-0.20556,-0.20213,-0.7043,36.226 111 | J154140.50+131548.8,as,None,0.0432,2,-0.32289,-0.27703,-0.58841,-1.51168,36.006 112 | J111134.73+105218.5,pp,None,0.16793,2,-0.1678,-0.01313,-0.22564,-0.65532,36.005 113 | J111410.62+171355.4,as,None,0.18309,2,-0.35076,-0.24755,-0.51385,-1.17758,35.874 114 | J092115.69-001609.9,as,None,0.1528,2,-0.1977,-0.22673,-0.57293,-1.40672,35.497 115 | J102130.33+611328.9,as,None,0.09328,2,-0.42451,-0.26717,-0.49369,-1.24685,35.161 116 | J075150.04+254028.4,pp,None,0.09116,2,-0.09741,-0.30649,-0.4064,-1.0797,35.133 117 | J113015.39+582056.1,as,None,0.19489,2,-0.14338,-0.34996,-0.476,-0.84089,34.967 118 | J160845.30+164533.2,pp,None,0.03542,2,-0.48152,-0.26708,-0.56241,-1.26483,34.917 119 | J123651.33+565013.6,pp,A,0.14437,2,0.07676,-0.19035,-0.42508,-1.1694,34.746 120 | J080831.98+455332.0,as,None,0.14323,2,0.04729,-0.20908,-0.57788,-0.87882,34.672 121 | J104838.24+450951.9,as,A,0.10148,2,0.21913,-0.22645,-0.38678,-1.08385,34.303 122 | J141702.88+223341.7,as,None,0.19102,2,0.05473,-0.25753,-0.4096,-1.26673,34.077 123 | J162657.02+374908.7,as,None,0.15362,2,-0.18433,-0.27095,-0.45255,-0.85148,34.063 124 | J100115.10+035024.1,as,None,0.14093,2,0.01481,-0.12677,-0.37087,-1.03505,33.96 125 | J115817.25+004602.2,as,None,0.07803,2,0.14371,-0.22807,-0.51316,-1.26492,33.842 126 | J010606.66-004602.9,as,None,0.13852,2,-0.07058,-0.35796,-0.53492,-1.28845,33.551 127 | J093805.81+270456.7,as,None,0.09022,2,0.33091,-0.32709,-0.40569,-0.90872,33.522 128 | J121116.56+324356.7,as,None,0.13255,2,-0.08123,-0.33937,-0.41817,-1.17984,33.453 129 | J121411.86+264001.0,as,None,0.1629,2,-0.03631,-0.28054,-0.33403,-0.90319,32.65 130 | J111956.52+133756.0,as,None,0.12749,2,-0.32379,-0.13784,-0.48164,-1.34633,32.501 131 | J114130.52+135525.1,as,A,0.17423,2,0.12019,-0.1937,-0.55008,-1.45241,32.41 132 | J122736.27+044941.0,as,None,0.12617,2,-0.09597,-0.13766,-0.45342,-1.08887,32.389 133 | J152748.85+102746.4,as,None,0.07483,2,-0.42439,-0.27393,-0.48059,-1.32826,32.24 134 | J083545.56+101831.5,as,None,0.11607,2,-0.20953,-0.34002,-0.50342,-1.23625,32.151 135 | J110725.92+322057.8,as,A,0.11483,2,0.79339,-0.05415,-0.26235,-0.86009,31.959 136 | J075903.98+304725.3,as,None,0.18545,2,-0.25311,-0.17855,-0.43118,-1.05379,31.957 137 | J122309.77+014237.9,as,None,0.14912,2,-0.15232,-0.19863,-0.3974,-0.93224,31.905 138 | J100813.69+431119.5,as,None,0.15357,2,0.22815,-0.1853,-0.44799,-1.13402,31.879 139 | J113917.74+355147.9,pp,A,0.11878,2,0.35307,-0.25853,-0.37431,-0.96239,31.75 140 | J083841.24+235555.2,as,None,0.11829,2,-0.19273,-0.33025,-0.4697,-0.84748,31.617 141 | J134137.60+345004.8,pp,None,0.19562,2,-0.08438,-0.17529,-0.48928,-1.22493,31.604 142 | J150552.72+192909.2,as,A,0.15685,2,0.34992,-0.09427,-0.48258,-1.13689,31.52 143 | J081625.77+203910.8,as,None,0.07869,2,-0.48273,-0.20418,-0.60812,-1.29644,31.431 144 | J142909.34+102612.3,pp,None,0.15845,2,-0.23033,-0.17636,-0.38691,-0.85666,31.393 145 | J121936.28+011602.1,as,None,0.15051,2,0.49347,-0.21368,-0.44215,-1.06269,31.387 146 | J114057.48+604538.5,as,None,0.16917,2,-0.36821,-0.21855,-0.56536,-1.34572,31.362 147 | J101800.33+392835.8,as,None,0.18434,2,-0.06368,-0.36003,-0.56361,-1.25528,31.219 148 | J093856.65+411340.3,as,None,0.16529,2,-0.06121,-0.27625,-0.45145,-1.52507,30.902 149 | J011837.32+150927.6,as,None,0.17391,2,-0.07688,-0.22856,-0.59617,-1.51483,30.641 150 | J082748.81+150903.5,pp,None,0.14086,2,0.00999,-0.20726,-0.24863,-0.84255,30.422 151 | J125510.66+641552.4,as,None,0.06864,2,-0.41121,-0.26303,-0.44483,-1.19916,30.368 152 | J150046.35+285823.4,as,None,0.14368,2,0.17007,-0.03733,-0.17667,-0.78357,30.267 153 | J221021.68+003033.5,as,None,0.19326,2,-0.19928,-0.33384,-0.55297,-1.70122,30.23 154 | J080534.22+523101.9,as,None,0.19662,2,0.2916,-0.2234,-0.51881,-1.34924,30.214 155 | J134341.65+262647.5,as,None,0.19242,2,-0.23377,-0.21534,-0.38339,-1.12723,29.959 156 | J103801.87+371643.2,pp,2,0.11899,2,-0.16308,-0.26037,-0.5324,-1.31004,29.887 157 | J152805.90+065104.5,pp,None,0.18677,2,0.01601,-0.18927,-0.54193,-1.33442,29.883 158 | J154628.57-012827.9,as,None,0.098,2,-0.40966,-0.26568,-0.48186,-1.11007,29.701 159 | J100400.30+031328.4,as,None,0.17153,2,-0.13247,-0.26118,-0.41503,-0.98181,29.677 160 | J124143.83+132411.2,as,None,0.19472,2,-0.32406,-0.30784,-0.50345,-0.97902,29.605 161 | J121840.38-034425.6,as,A,0.07327,2,0.44209,-0.19896,-0.42783,-1.10612,29.557 162 | J144853.74+043313.6,as,None,0.11518,2,-0.041,-0.21257,-0.45208,-1.01513,29.526 163 | J150344.27+171708.7,as,None,0.16482,2,-0.41723,-0.27919,-0.5179,-1.31108,29.403 164 | J130624.66+233919.8,as,None,0.176,2,0.19418,-0.43224,-0.59734,-1.12459,29.381 165 | J091259.21+263719.6,as,None,0.15447,2,-0.46568,-0.25993,-0.53373,-1.23468,29.274 166 | J151645.34+155653.9,as,None,0.09631,2,-0.22253,-0.15591,-0.48114,-1.15097,29.121 167 | J081810.01+473502.8,as,None,0.1225,2,-0.00735,-0.07398,-0.49929,-1.21193,28.996 168 | J112413.41+383336.7,as,None,0.15033,2,0.06469,-0.16566,-0.38735,-1.0264,28.968 169 | J135409.59+615636.0,pp,None,0.10169,2,-0.33755,-0.2851,-0.5489,-1.26334,28.875 170 | J083017.76+275208.8,as,None,0.1786,2,-0.05101,-0.17828,-0.55448,-1.443,28.843 171 | J100154.73+191046.3,as,None,0.1561,2,-0.24524,-0.2438,-0.44737,-0.99779,28.687 172 | J154925.70+063116.3,as,2,0.11931,2,0.03391,-0.35035,-0.50181,-1.27308,28.449 173 | J074817.60+174006.2,pp,None,0.17079,2,-0.25035,-0.23225,-0.38866,-1.09664,28.443 174 | J091614.55+265819.3,pp,None,0.18398,2,0.27421,-0.35436,-0.4882,-1.31998,28.416 175 | J102209.20-005937.1,as,None,0.16926,2,-0.09799,-0.28709,-0.59574,-1.33603,28.334 176 | J120231.13+163741.8,as,None,0.11924,2,0.30575,-0.04946,-0.13782,-0.58378,28.26 177 | J025045.48+004828.8,as,None,0.1985,2,-0.25331,-0.25183,-0.50476,-1.14425,28.113 178 | J125105.62+343911.2,as,None,0.13733,2,-0.1049,-0.10317,-0.2814,-0.827,27.867 179 | J124143.01+275131.3,as,None,0.05476,2,0.18634,-0.27508,-0.43703,-1.23815,27.75 180 | J130652.22+134454.7,as,None,0.14235,2,-0.31614,-0.32172,-0.47167,-1.17315,27.722 181 | J140844.79+294010.9,pp,None,0.19339,2,0.54521,-0.16991,-0.38841,-1.10854,27.704 182 | J090308.54+272639.1,pp,None,0.13475,2,0.17288,-0.23902,-0.52776,-1.2987,27.676 183 | J161050.03+324000.6,as,None,0.14032,2,0.20061,-0.17563,-0.44239,-1.39846,27.54 184 | J100900.92+002143.2,as,None,0.18426,2,-0.03881,-0.29576,-0.53214,-1.37793,27.481 185 | J234549.73+004323.7,as,A,0.14094,2,0.71186,-0.3245,-0.33486,-0.83077,27.442 186 | J085447.68+354706.6,as,None,0.12857,2,0.01824,0.08529,-0.2959,-0.90818,27.409 187 | J075544.77+503550.4,as,None,0.13419,2,-0.37419,-0.15661,-0.43049,-1.19578,27.304 188 | J133834.12+582303.2,as,None,0.17466,2,0.49264,-0.09532,-0.4335,-1.19763,27.187 189 | J141924.85+085745.4,as,None,0.0629,2,-0.2106,-0.31438,-0.42847,-1.0303,27.126 190 | J100610.52+354545.0,as,None,0.1566,2,-0.1544,-0.21855,-0.52209,-1.16275,27.052 191 | J220326.50+114823.8,pp,None,0.19067,2,-0.38996,-0.14174,-0.36425,-1.14591,26.924 192 | J100928.59+475253.3,as,None,0.15175,2,-0.10396,-0.09595,-0.17104,-0.67716,26.921 193 | J121010.34+622615.4,as,None,0.11987,2,-0.35648,-0.31596,-0.4596,-1.30119,26.86 194 | J133730.30-002525.4,as,A,0.17208,2,0.51178,-0.20697,-0.43321,-1.1226,26.731 195 | J085040.10+195943.6,pp,A,0.12491,2,0.42356,-0.11427,-0.33105,-0.91136,26.607 196 | J073746.30+465706.4,pp,None,0.12718,2,-0.21097,-0.2255,-0.31374,-0.99381,26.597 197 | J131235.97+500415.9,pp,None,0.11576,2,0.4762,-0.25935,-0.17425,-0.51457,26.589 198 | J113309.53+154018.5,as,None,0.17443,2,-0.37071,-0.25493,-0.69193,-2.19928,26.449 199 | J090923.08+130918.8,as,None,0.18001,2,-0.31445,-0.24602,-0.42148,-0.98361,26.434 200 | J120621.32+641613.6,pp,None,0.16055,2,-0.09574,-0.29099,-0.47264,-1.31793,26.351 201 | J084206.55+275757.0,pp,None,0.12433,2,0.10608,-0.22874,-0.56058,-1.14664,26.289 202 | J205725.11-054912.1,as,None,0.1782,2,0.21517,-0.23309,-0.51228,-1.31714,26.083 203 | J091239.43+285305.9,as,None,0.12698,2,0.09317,-0.17887,-0.28765,-0.83789,26.027 204 | J132547.95+545019.6,pp,None,0.14188,2,0.84152,0.03782,-0.11294,-0.58178,26.01 205 | J090019.66+131339.0,as,None,0.11631,2,-0.12684,-0.25397,-0.42823,-1.1068,25.984 206 | J133754.13+050116.5,as,None,0.1348,2,-0.19078,-0.35776,-0.49084,-1.3573,25.918 207 | J112528.34+402509.3,pp,None,0.19416,2,0.14879,-0.44493,-0.3566,-0.91488,25.81 208 | J163125.95+200957.2,as,None,0.10423,2,-0.33542,-0.24307,-0.44915,-1.19203,25.776 209 | J110250.94+073908.9,pp,None,0.07402,2,0.3678,-0.48489,-0.40856,-1.11944,25.717 210 | J100322.27+193739.2,pp,None,0.17145,2,-0.07006,-0.18581,-0.59602,-1.58344,25.689 211 | J162456.34+071432.5,as,None,0.1556,2,-0.22369,-0.27191,-0.6656,-1.42356,25.679 212 | J111710.07+333950.4,pp,None,0.12772,2,0.38896,-0.09125,-0.06856,-0.36023,25.436 213 | J131325.85+433214.8,as,A,0.0575,2,0.49296,-0.07689,-0.50736,-1.17453,25.429 214 | J100441.94+025828.2,as,None,0.10361,2,0.07828,0.0871,0.0006,-0.29453,25.326 215 | J121346.11+024841.4,as,A2,0.07297,2,0.16039,-0.30191,-0.31877,-0.80189,25.324 216 | J120930.42+612604.8,pp,None,0.10185,2,-0.46833,-0.28934,-0.48125,-1.05666,25.232 217 | J235256.62+001155.2,pp,A,0.16682,2,0.79229,-0.09615,-0.2527,-0.84986,25.132 218 | J134651.09+074719.0,as,None,0.13497,2,-0.44055,-0.24335,-0.51009,-1.21567,25.129 219 | J091954.54+325559.8,pp,A2,0.04922,2,-0.02301,-0.22959,-0.38172,-1.09514,25.057 220 | J085700.93+051221.8,as,None,0.06788,2,-0.35345,-0.27774,-0.52714,-1.28481,25.014 221 | J140500.15+073014.2,pp,None,0.13498,2,0.08251,-0.16147,0.06272,-0.29353,24.997 222 | J124135.93+332623.6,as,None,0.14299,2,0.23752,-0.21894,-0.42354,-1.06063,24.942 223 | J131047.70+502834.6,as,None,0.18967,2,0.31507,-0.18488,-0.44668,-1.22862,24.929 224 | J152314.55+354834.0,pp,None,0.11876,2,-0.29142,-0.24656,-0.44771,-1.08404,24.919 225 | J213950.83+114050.7,as,None,0.1928,2,0.33053,-0.10181,-0.46067,-1.28021,24.904 226 | J161932.03+113340.1,as,A,0.14172,2,0.3023,-0.32365,-0.53441,-1.27134,24.901 227 | J135712.70+052239.5,as,None,0.13807,2,-0.07593,-0.34138,-0.56398,-1.4469,24.888 228 | J111440.21+372239.2,as,None,0.10421,2,-0.1774,-0.30811,-0.47837,-1.19024,24.847 229 | J110320.63+093346.7,as,A,0.12617,2,0.22691,-0.27486,-0.50111,-1.28603,24.841 230 | J143550.02+322331.9,as,None,0.15933,2,-0.17825,-0.34752,-0.60144,-1.37599,24.782 231 | J152807.16+151803.7,as,2,0.13168,2,-0.3703,-0.19415,-0.40462,-0.87798,24.773 232 | J142650.81+584414.6,as,None,0.16537,2,-0.15036,-0.24116,-0.48822,-1.22203,24.752 233 | J225252.94+002928.4,pp,None,0.1527,2,0.65368,0.12328,0.08104,-0.46825,24.741 234 | J131005.87-030903.9,as,None,0.14481,2,0.88299,-0.09312,-0.16748,-0.90653,24.726 235 | J154501.04+382041.3,as,None,0.16865,2,0.15866,-0.33639,-0.5694,-1.1596,24.701 236 | J011834.13-001341.7,as,None,0.04742,2,-0.34943,-0.17225,-0.44058,-1.16982,24.547 237 | J100156.40+295834.9,pp,None,0.16203,2,0.30474,-0.44297,-0.44509,-0.72717,24.496 238 | J142642.92-030712.7,as,A,0.12862,2,-0.01475,-0.24597,-0.47205,-1.13252,24.328 239 | J140233.61+070023.6,as,None,0.18186,2,-0.61359,-0.19346,-0.55742,-1.14757,24.245 240 | J210842.70+010930.3,as,None,0.17808,2,-0.42266,-0.24331,-0.61429,-1.3499,24.158 241 | J082107.89+502115.8,as,None,0.09529,2,0.58923,-0.10773,-0.26233,-0.75469,24.087 242 | J082506.35+241215.7,as,None,0.15699,2,-0.52311,-0.24082,-0.47791,-0.93405,24.022 243 | J140042.77+095303.3,as,None,0.07872,2,0.19769,-0.26427,-0.77838,-0.99345,24.004 244 | J092609.38+670407.9,as,2,0.12115,2,-0.31182,-0.19334,-0.43034,-1.08191,23.958 245 | J223937.59-093158.2,as,A,0.07349,2,0.34564,-0.22145,-0.47086,-1.12642,23.947 246 | J130830.67+460157.6,as,None,0.09396,2,-0.10171,-0.30054,-0.47611,-1.12827,23.812 247 | J032523.44-060047.8,as,None,0.10289,2,0.07818,-0.28781,-0.35353,-0.853,23.742 248 | J091650.06+512522.8,pp,None,0.19898,2,0.12525,-0.15835,-0.54846,-1.50894,23.74 249 | J104428.63+282759.5,as,None,0.14458,2,0.10994,-0.24997,-0.52091,-1.50781,23.719 250 | J083102.41+043228.3,as,None,0.17317,2,-0.12877,-0.31091,-0.49102,-1.25109,23.668 251 | J015541.16-100658.9,as,None,0.16364,2,0.12954,-0.24969,-0.47387,-1.2154,23.619 252 | J144236.73+224100.3,as,None,0.15279,2,-0.33545,-0.21392,-0.56139,-1.34843,23.607 253 | J101958.18+631100.4,as,None,0.15135,2,0.06432,-0.18704,-0.49585,-1.24658,23.549 254 | J130457.31+133359.1,pp,None,0.14197,2,-0.04468,-0.27126,-0.56519,-1.31986,23.516 255 | J112110.63+471131.4,as,None,0.16624,2,-0.30363,-0.21518,-0.51681,-1.17283,23.484 256 | J090013.93+092517.2,as,None,0.19517,2,-0.05907,-0.29733,-0.41903,-0.96682,23.408 257 | J081921.19+423441.4,as,None,0.1541,2,0.0245,-0.28054,-0.21766,-0.5966,23.393 258 | J162112.03+373745.2,as,None,0.18564,2,0.3186,-0.00162,-0.28038,-0.984,23.388 259 | J140038.96+210339.9,as,None,0.17529,2,0.63987,-0.29668,-0.48168,-1.04956,23.382 260 | J162904.33+470853.0,as,None,0.12872,2,0.17415,-0.2445,-0.44188,-1.15598,23.331 261 | J150547.26+370950.9,as,None,0.18734,2,0.04294,-0.31018,-0.31863,-0.89671,23.316 262 | J141201.95+251917.0,as,None,0.15642,2,0.12454,-0.26903,-0.62767,-1.18766,23.31 263 | J091220.79+275547.2,as,None,0.15804,2,0.36401,0.18895,0.02186,-0.27009,23.242 264 | J103554.15+110243.2,as,None,0.10465,2,0.29668,-0.28262,-0.55052,-1.23712,23.157 265 | J100518.39+553520.2,as,None,0.17224,2,0.09981,-0.29417,-0.48177,-1.202,23.131 266 | J085035.63+351558.9,pp,None,0.19611,2,-0.28872,-0.22255,-0.614,-0.87957,23.128 267 | J124450.64+241419.8,as,None,0.08647,2,-0.12651,-0.26244,-0.49666,-1.35122,23.108 268 | J080240.68+182316.3,as,None,0.14384,2,-0.06698,-0.20324,-0.43894,-1.67363,23.074 269 | J010156.59+154753.1,pp,None,0.17999,2,0.10192,-0.30458,-0.23107,-0.92011,23.056 270 | J115649.98+032153.1,as,None,0.13234,2,0.06725,-0.25383,-0.25146,-0.45867,23.031 271 | J132227.06+031930.3,as,None,0.13829,2,0.08373,-0.20108,-0.35038,-0.92119,22.979 272 | J010919.41+142433.5,as,None,0.05973,2,-0.32473,-0.25054,-0.55345,-0.97679,22.879 273 | J152345.62+132340.6,pp,None,0.1664,2,-0.21422,-0.3197,-0.35616,-1.19737,22.799 274 | J092632.03+084955.0,as,None,0.1798,2,-0.0572,-0.25543,-0.44478,-1.03344,22.788 275 | J102048.22+331030.3,as,None,0.11214,2,-0.21837,-0.1083,-0.2891,-0.70132,22.766 276 | J133038.03+014934.8,as,2,0.15452,2,0.5469,0.03825,-0.07369,-0.67249,22.74 277 | J104529.55+105041.5,as,None,0.09115,2,-0.6476,-0.25131,-0.55062,-1.2141,22.722 278 | J115926.85+211334.0,as,None,0.16564,2,-0.46381,-0.27503,-0.62092,-1.27133,22.716 279 | J231024.35+150533.9,pp,None,0.16596,2,0.15037,-0.07374,-0.18396,-0.37669,22.566 280 | J131700.82+004505.7,as,None,0.1384,2,0.3629,-0.25232,-0.4513,-1.11429,22.537 281 | J082949.64+154458.5,as,None,0.1524,2,0.02396,-0.20365,-0.46454,-1.27267,22.512 282 | J142928.98+061604.0,as,None,0.16059,2,-0.41779,-0.24259,-0.47143,-1.26368,22.466 283 | J141148.89+015204.4,as,None,0.14911,2,-0.45913,-0.28011,-0.45203,-1.01634,22.361 284 | J235744.10-001029.7,as,None,0.07549,2,-0.16508,0.01634,-0.0937,-0.65119,22.358 285 | J074523.37+191033.6,as,None,0.15412,2,-0.45153,-0.24781,-0.66118,-1.3205,22.336 286 | J165308.15+214022.8,as,None,0.15458,2,0.47231,-0.16846,-0.10781,-0.76083,22.289 287 | J081035.38+495347.7,as,None,0.18883,2,0.25685,-0.11406,-0.39024,-1.01086,22.288 288 | J125025.48+321959.3,as,None,0.19154,2,-0.06966,-0.29351,-0.6081,-1.23021,22.269 289 | J151345.60+314538.4,as,None,0.17587,2,-0.31647,-0.20457,-0.48607,-1.10931,22.261 290 | J120903.00+570547.3,pp,None,0.14565,2,-0.27334,-0.2317,-0.39395,-1.1593,22.181 291 | J143520.64+185842.7,as,2,0.18055,2,0.07292,-0.16422,-0.49767,-1.24903,21.944 292 | J170046.25+204312.5,as,None,0.17897,2,0.09506,-0.31742,-0.6013,-1.43579,21.938 293 | J123656.65+254129.8,as,2,0.08706,2,-1.26887,-0.22649,-0.1667,-1.99115,21.917 294 | J134322.28+181114.1,pp,None,0.17809,2,-0.53672,-0.34102,-0.56621,-1.25579,21.837 295 | J125428.55+620000.0,as,None,0.11917,2,0.47404,-0.30937,-0.41727,-1.10316,21.814 296 | J123920.53+061855.2,as,None,0.1034,2,-0.46544,-0.26041,-0.59558,-1.31507,21.718 297 | J115710.51+631133.4,as,None,0.11028,2,-0.22593,-0.31058,-0.55044,-1.34733,21.716 298 | J081423.00+033628.3,pp,2,0.17071,2,0.47025,-0.31261,-0.41328,-0.94902,21.637 299 | J095207.39+305058.0,as,None,0.15397,2,-0.37694,-0.29746,-0.43962,-0.64889,21.628 300 | J160959.98+203940.1,as,None,0.14153,2,-0.21051,-0.31865,-0.5686,-1.48884,21.619 301 | J121557.98+133744.0,pp,None,0.15657,2,-0.45187,-0.16816,-0.41894,-1.11209,21.578 302 | J103159.30+471926.6,as,None,0.06311,2,-0.27748,-0.18052,-0.54074,-1.94529,21.542 303 | J094040.86+120651.3,as,None,0.11973,2,-0.28406,-0.20411,-0.58968,-1.14965,21.504 304 | J142141.96+114532.9,as,None,0.16092,2,-0.02905,-0.22768,-0.54574,-1.1958,21.444 305 | J150452.35+321414.9,as,None,0.11246,2,0.61722,-0.07982,-0.40686,-1.03053,21.437 306 | J090023.65+534619.3,as,None,0.0941,2,0.07296,-0.23665,-0.3576,-0.9805,21.38 307 | J084240.12+134854.8,as,None,0.19759,2,0.27483,-0.24172,-0.54676,-1.33754,21.312 308 | J162450.37+092413.2,as,None,0.17072,2,0.79418,0.1717,-0.36815,-0.53657,21.264 309 | J130521.42+550450.8,as,None,0.14263,2,-0.25961,-0.03484,-0.56367,-1.01753,21.207 310 | J112855.16+204305.8,as,None,0.17076,2,-0.0673,-0.25023,-0.54306,-1.36994,21.178 311 | J102331.13+274348.5,as,None,0.16924,2,0.50189,-0.19486,-0.37031,-0.99482,21.119 312 | J025600.63+004734.6,pp,None,0.19422,2,0.01425,-0.29308,-0.56393,-0.98427,21.107 313 | J092816.51+311057.3,as,None,0.07969,2,-0.12912,-0.25038,-0.41699,-0.93866,21.053 314 | J132700.45+511459.8,as,None,0.17511,2,-0.19435,-0.29499,-0.5219,-1.19087,20.915 315 | J143309.37+144612.4,pp,None,0.12337,2,-0.21945,-0.16458,-0.45328,-1.06694,20.846 316 | J104846.60+632430.0,as,A,0.13448,2,0.30053,-0.13033,-0.45928,-1.03017,20.772 317 | J014752.51-084910.7,as,None,0.1663,2,-0.0503,-0.24209,-0.43581,-1.00676,20.75 318 | J090114.43+134454.6,as,None,0.06826,2,-0.38252,-0.14058,-0.48039,-1.01984,20.521 319 | J101202.09+005252.1,pp,None,0.12317,2,0.09767,-0.26428,-0.47782,-1.25715,20.509 320 | J231134.12+143558.1,as,None,0.14993,2,-0.24641,-0.22345,-0.62289,-1.40829,20.435 321 | J091435.05+405454.4,as,None,0.0835,2,-0.03945,-0.37392,-0.47447,-1.19035,20.404 322 | J133029.05+315438.7,as,None,0.13695,2,-0.26667,-0.23656,-0.57948,-0.99433,20.39 323 | J131659.75+550456.6,as,None,0.06586,2,-0.06484,-0.38718,-0.40848,-1.08445,20.379 324 | J074131.43+320255.8,as,None,0.15681,2,-0.05432,-0.26431,-0.51403,-0.97939,20.276 325 | J151956.91+330217.9,pp,None,0.13832,2,0.20239,-0.2394,-0.16335,-0.50922,20.242 326 | J131458.60+445319.2,as,None,0.17134,2,0.15842,-0.28619,-0.66994,-1.81327,20.212 327 | J083611.53+311929.3,as,None,0.07003,2,-0.31328,-0.26682,-0.48043,-1.16932,20.209 328 | J161510.79+350212.0,as,None,0.18756,2,-0.02939,-0.20363,-0.35274,-1.19351,20.205 329 | J144017.34+563503.8,pp,None,0.17994,2,0.13597,-0.10584,-0.49065,-1.17216,20.151 330 | J090557.44+174812.6,as,None,0.0967,2,-0.021,-0.20995,-0.65888,-0.87019,20.13 331 | J162738.08+445342.1,pp,A,0.17875,2,0.67165,0.06119,-0.47083,-1.12031,20.069 332 | J151936.76+033258.1,as,None,0.17156,2,-0.23007,-0.23035,-0.51766,-1.28012,20.054 333 | J103320.68+405128.3,as,A,0.10633,2,0.31821,-0.34618,-0.35657,-1.10701,20.033 334 | J114204.69+081915.4,as,None,0.15128,2,-0.39272,-0.29115,-0.60099,-2.04614,20.011 335 | J102536.39+011124.2,as,None,0.17687,2,0.70982,-0.05211,-0.31632,-0.91362,20.003 336 | -------------------------------------------------------------------------------- /app.js: -------------------------------------------------------------------------------- 1 | 2 | var data, filters; 3 | var plot2, plot3; 4 | 5 | var div_filters, div_focus; 6 | var plot1_svg, plot1_g, plot1_xlabel, plot1_ylabel; 7 | var plot2_svg, plot2_g, plot2_xlabel, plot2_ylabel; 8 | var plot3_svg, plot3_g, plot3_xlabel, plot3_ylabel; 9 | 10 | var extents; 11 | var HAS_ADAPTIVE_RANGES = false; 12 | var RANGE_X = [-2.5, 1.5]; 13 | var RANGE_Y = [-2.0, 2.5]; 14 | var RANGE_STEP = 0.5; 15 | 16 | init(); 17 | 18 | 19 | function init() { 20 | d3.text('data.csv', function(err, text) { 21 | if (err) { 22 | console.log('d3.text error: ', err); 23 | return; 24 | } 25 | data = d3.csv.parseRows(text); 26 | data_transform(); 27 | 28 | filters_init(); 29 | focus_init(); 30 | plots_init(); 31 | plot_1(); 32 | plot_2(); 33 | plot_3(); 34 | }); 35 | } 36 | 37 | 38 | function data_transform() { 39 | // 0 1 2 3 4 5 6 7 8 9 40 | // SDSSID Classification Peculiarity Redshift Type logOIII_Hb logNII_Ha logSII_Ha logOI_Ha SFR 41 | // string pp | as | ? None | 2 | A | A2 | ? number 2 | ? number number number number number 42 | 43 | filters = { 44 | classification: {}, 45 | peculiarity: {}, 46 | type: {}, 47 | }; 48 | 49 | if (HAS_ADAPTIVE_RANGES) { 50 | extents = { 51 | redshift: [], 52 | log_OIII_Hb: [], 53 | log_NII_Ha: [], 54 | log_SII_Ha: [], 55 | log_OI_Ha: [], 56 | SFR: [] 57 | }; 58 | } 59 | data = 60 | _.chain(data) 61 | .map(function(row) { 62 | var obj = { 63 | SDSS_ID: row[0], 64 | classification: row[1], 65 | peculiarity: row[2], 66 | redshift: +row[3], 67 | type: row[4], 68 | log_OIII_Hb: +row[5], 69 | log_NII_Ha: +row[6], 70 | log_SII_Ha: +row[7], 71 | log_OI_Ha: +row[8], 72 | SFR: +row[9], 73 | band: undefined 74 | }; 75 | 76 | var x = obj.log_NII_Ha; 77 | var y = obj.log_OIII_Hb; 78 | if (y < stravinska_NII(x)) { 79 | obj.band = 'below_stravinska'; 80 | } else if (y < kauffmann(x)) { 81 | obj.band = 'below_kauffmann'; 82 | } else if (y < log_OIII_Hb_NII(x)) { 83 | obj.band = 'below_predicted'; 84 | } else { 85 | obj.band = 'above_predicted'; 86 | } 87 | 88 | if (HAS_ADAPTIVE_RANGES) { 89 | _.each(extents, function(value, key, _extents) { 90 | _extents[key].push(obj[key]); 91 | }); 92 | } 93 | _.each(filters, function(value, key, _filters) { 94 | // true = button pressed, values filtered in 95 | _filters[key][obj[key]] = true; 96 | }); 97 | 98 | return obj; 99 | }) 100 | .sortBy(function(item) { 101 | return -item.SFR; 102 | }) 103 | .value() 104 | ; 105 | 106 | if (HAS_ADAPTIVE_RANGES) { 107 | _.each(extents, function(value, key, _extents) { 108 | _extents[key] = d3.extent(value); 109 | }); 110 | } 111 | } 112 | 113 | 114 | function filters_init() { 115 | 116 | div_filters = d3.select('#filters'); 117 | 118 | // filters = { 119 | // classification: {'pp': true, 'as': true}, 120 | // peculiarity: {'2': true, 'A': true}, 121 | // type: {'2': true}, 122 | // }; 123 | 124 | var filtersData = 125 | _.map(filters, function(values, key) { 126 | return _.chain(values) 127 | .map(function(value, _key) { 128 | return {filter: key, name: _key}; 129 | }) 130 | .sortBy(function(item) { 131 | return item.name; 132 | }) 133 | .value() 134 | ; 135 | }); 136 | 137 | // [ 138 | // [{"filter":"classification","name":"pp"},{"filter":"classification","name":"as"}], 139 | // [{"filter":"peculiarity","name":"2"},{"filter":"peculiarity","name":"A"}], 140 | // [{"filter":"type","name":"2"}] 141 | // ] 142 | 143 | var filter_div = 144 | div_filters.selectAll('.filter') 145 | .data(filtersData) 146 | .enter() 147 | .append('div') 148 | .classed('filter', true); 149 | 150 | filter_div.append('div') 151 | .classed('label', true) 152 | .append('span') 153 | .text(function(d, i) { return d[0].filter }); 154 | 155 | filter_div.selectAll('.value') 156 | .data(function(d, i) { return d }) 157 | .enter() 158 | .append('div') 159 | .classed('value', true) 160 | .append('span') 161 | .attr('class', function(d, i) { 162 | var _class; 163 | var options = filters[d.filter]; 164 | if (_.size(options) > 1) { 165 | _class = ['button']; 166 | if (options[d.name]) {_class.push('pressed');} 167 | _class = _class.join(' '); 168 | } else { 169 | _class = 'single' 170 | } 171 | return _class; 172 | }) 173 | .text(function(d) { return d.name }) 174 | .on('click', filterClick) 175 | ; 176 | 177 | // todo simplify: select buttons and singles, onclick only on buttons 178 | }; 179 | 180 | 181 | //=============== 182 | // plot 1 183 | //=============== 184 | 185 | function plots_init() { 186 | plot1_svg = d3.select('#plot1 svg'); 187 | plot1_g = plot1_svg.append('g'); 188 | plot1_xlabel = d3.select('#plot1>:last-child>:last-child span'); 189 | plot1_ylabel = d3.select('#plot1>:first-child span'); 190 | 191 | plot2_svg = d3.select('#plot2 svg'); 192 | plot2_g = plot2_svg.append('g'); 193 | plot2_xlabel = d3.select('#plot2>:last-child span'); 194 | 195 | plot3_svg = d3.select('#plot3 svg'); 196 | plot3_g = plot3_svg.append('g'); 197 | plot3_xlabel = d3.select('#plot3>:last-child span'); 198 | } 199 | 200 | function plot_1() { 201 | 202 | // geometry 203 | 204 | var svg_css = getComputedStyle(plot1_svg.node(), null); 205 | var svg_width = parseInt(svg_css.width); 206 | var svg_height = parseInt(svg_css.height); 207 | var padding = {left: 30, right: 10, top: 10, bottom: 20}; 208 | 209 | var g_width = svg_width - padding.left - padding.right; 210 | var g_height = svg_height - padding.top - padding.bottom; 211 | 212 | // plot1_svg 213 | // .attr('width', svg_width) 214 | // .attr('height', svg_height) 215 | // .attr('viewBox', "0 0 " + svg_width + "px " + svg_height + "px") 216 | // ; 217 | 218 | plot1_g.attr('transform', 'translate(' + padding.left + ',' + padding.top + ')'); 219 | 220 | 221 | // scales 222 | 223 | var xPlotDomain, yPlotDomain; 224 | 225 | if (HAS_ADAPTIVE_RANGES) { 226 | 227 | var delta; 228 | 229 | delta = (extents.log_NII_Ha[1] - extents.log_NII_Ha[0]) / 10; 230 | xPlotDomain = [extents.log_NII_Ha[0] - delta, extents.log_NII_Ha[1] + delta]; 231 | 232 | delta = (extents.log_OIII_Hb[1] - extents.log_OIII_Hb[0]) / 10; 233 | yPlotDomain = [extents.log_OIII_Hb[0] - delta, extents.log_OIII_Hb[1] + delta]; 234 | 235 | } else { 236 | xPlotDomain = RANGE_X; 237 | yPlotDomain = RANGE_Y; 238 | } 239 | 240 | var x = 241 | d3.scale.linear() 242 | .domain(xPlotDomain) 243 | .range([0, g_width]); 244 | 245 | var y = 246 | d3.scale.linear() 247 | .domain(yPlotDomain) 248 | .range([g_height, 0]); 249 | 250 | 251 | // generators 252 | 253 | var line = 254 | d3.svg.line() 255 | .interpolate('basis') 256 | .x(function(d) { return x(d.x); }) 257 | .y(function(d) { return y(d.y); }); 258 | 259 | 260 | // axis 261 | 262 | var xAxis = 263 | d3.svg.axis() 264 | .scale(x) 265 | .innerTickSize(-6) 266 | .outerTickSize(-g_height) 267 | .tickValues(d3.range(xPlotDomain[0], xPlotDomain[1], RANGE_STEP).concat([xPlotDomain[1]])) 268 | ; 269 | 270 | // top 271 | plot1_g.append('g') 272 | .attr('class', 'x axis noticksvalue') 273 | .call(xAxis.orient('top')); 274 | 275 | // bottom 276 | plot1_g.append('g') 277 | .attr('class', 'x axis') 278 | .attr('transform', 'translate(0,' + g_height + ')') 279 | .call(xAxis.orient('bottom')) 280 | .selectAll('.tick text') 281 | .attr('dy', '1em') 282 | ; 283 | 284 | plot1_xlabel.text('log([N II] λ6584Å/Hα)'); 285 | 286 | var yAxis = 287 | d3.svg.axis() 288 | .scale(y) 289 | .innerTickSize(-6) 290 | .outerTickSize(-g_width) 291 | .tickValues(d3.range(yPlotDomain[0], yPlotDomain[1], RANGE_STEP).concat([yPlotDomain[1]])) 292 | ; 293 | 294 | // left 295 | plot1_g.append('g') 296 | .attr('class', 'y axis') 297 | .call(yAxis.orient('left')) 298 | .selectAll('.tick text') 299 | .attr('dx', '-0.25em'); 300 | 301 | // right 302 | plot1_g.append('g') 303 | .attr('class', 'y axis noticksvalue') 304 | .attr('transform', 'translate(' + g_width + ',0)') 305 | .call(yAxis.orient('right')); 306 | 307 | plot1_ylabel.text('log([O III] λ5007Å/Hβ)'); 308 | 309 | 310 | // graphics 311 | 312 | var g1 = plot1_g.append('g'); 313 | 314 | 315 | // eps curves 316 | 317 | _.each([-0.1, 0, 0.1], function(eps) { 318 | var xDomain = [ 319 | xPlotDomain[0], 320 | _.min([xPlotDomain[1], log_OIII_Hb_NII_inverse(yPlotDomain[0], eps)]) 321 | ]; 322 | 323 | var step = (xDomain[1] - xDomain[0]) / 50; 324 | var xRange = d3.range(xDomain[0], xDomain[1], step).concat([xDomain[1]]); 325 | 326 | var curvePoints = 327 | _.chain(xRange) 328 | .map(function(x) { return {x: x, y: log_OIII_Hb_NII(x, eps)} }) 329 | .filter(function(point) { return point.y <= yPlotDomain[1]; }) 330 | .value(); 331 | 332 | g1 333 | .append('path') 334 | .classed({curve: true, eps: eps}) 335 | .datum( curvePoints ) 336 | .attr('d', line) 337 | ; 338 | }); 339 | 340 | 341 | // kauffman curve 342 | 343 | var xDomainKauffmann = [ 344 | _.max([log_OIII_Hb_NII_kauffmann_intersection_X(0), xPlotDomain[0]]), 345 | kauffmann_inverse(yPlotDomain[0]) 346 | ]; 347 | var stepKauffmann = (xDomainKauffmann[1] - xDomainKauffmann[0]) / 50; 348 | var xRangeKauffmann = d3.range(xDomainKauffmann[0], xDomainKauffmann[1], stepKauffmann); 349 | xRangeKauffmann.push(xDomainKauffmann[1]); 350 | 351 | g1 352 | .append('path') 353 | .classed({curve: true, kauff: true}) 354 | .datum( _.map(xRangeKauffmann, function(x) { return {x: x, y: kauffmann(x)} }) ) 355 | .attr('d', line); 356 | 357 | 358 | // fill area 359 | 360 | var xDomainEps0 = [ 361 | log_OIII_Hb_NII_inverse(yPlotDomain[0]), 362 | _.max([log_OIII_Hb_NII_kauffmann_intersection_X(0), xPlotDomain[0]]), 363 | ]; 364 | var step = (xDomainEps0[1] - xDomainEps0[0]) / 50; 365 | var xRangeEps0 = d3.range(xDomainEps0[0], xDomainEps0[1], step); 366 | xRangeEps0.push(xDomainEps0[1]); 367 | 368 | var path_d = line( _.map(xRangeKauffmann, function(x) { return {x: x, y: kauffmann(x)} }) ); 369 | path_d += ' L' + x(log_OIII_Hb_NII_inverse(yPlotDomain[0])) + ',' + y(yPlotDomain[0]); 370 | path_d += line( _.map(xRangeEps0, function(x) { return {x: x, y: log_OIII_Hb_NII(x)} }) ); 371 | path_d += ' L' + x(xRangeKauffmann[0]) + ',' + y(kauffmann(xRangeKauffmann[0])); 372 | path_d += 'Z'; 373 | 374 | g1.insert('path', ":first-child") 375 | .classed({area: true}) 376 | .attr('d', path_d); 377 | 378 | 379 | // stravinska_NII curve 380 | 381 | var xDomainStravinska = [ 382 | xPlotDomain[0], 383 | find_stravinska_NII_intersection_X(yPlotDomain[0], xPlotDomain[0]) 384 | ]; 385 | var stepStravinska = (xDomainStravinska[1] - xDomainStravinska[0]) / 50; 386 | var xRangeStravinska = d3.range(xDomainStravinska[0], xDomainStravinska[1], stepStravinska); 387 | xRangeStravinska.push(xDomainStravinska[1]); 388 | 389 | g1 390 | .append('path') 391 | .classed({curve: true, stravinska: true}) 392 | .datum( _.map(xRangeStravinska, function(x) { return {x: x, y: stravinska_NII(x)} }) ) 393 | .attr('d', line); 394 | 395 | 396 | // dots 397 | 398 | g1.selectAll('circle') 399 | .data(data) 400 | .enter() 401 | .append('circle') 402 | // .attr('r', 2) 403 | .attr('r', function(d) { return 1 + d.SFR / 20 }) 404 | .attr('cx', function(d) { return x(d.log_NII_Ha) }) 405 | .attr('cy', function(d) { return y(d.log_OIII_Hb) }) 406 | .attr('class', function(d) { return d.band }) 407 | .classed({dot: true}) 408 | .on('mouseover', mouseover) 409 | .on('mouseout', mouseout) 410 | ; 411 | } 412 | 413 | 414 | 415 | // =============== 416 | // plot 2 417 | // =============== 418 | 419 | function plot_2() { 420 | 421 | // geometry 422 | 423 | var svg_css = getComputedStyle(plot2_svg.node(), null); 424 | var svg_width = parseInt(svg_css.width); 425 | var svg_height = parseInt(svg_css.height); 426 | var padding = {left: 10, right: 10, top: 10, bottom: 20}; 427 | 428 | var g_width = svg_width - padding.left - padding.right; 429 | var g_height = svg_height - padding.top - padding.bottom; 430 | 431 | // plot2_svg 432 | // .attr('width', svg_width) 433 | // .attr('height', svg_height) 434 | // .attr('viewBox', "0 0 " + svg_width + "px " + svg_height + "px") 435 | // ; 436 | 437 | plot2_g.attr('transform', 'translate(' + padding.left + ',' + padding.top + ')'); 438 | 439 | 440 | // scales 441 | 442 | var xPlotDomain, yPlotDomain; 443 | 444 | if (HAS_ADAPTIVE_RANGES) { 445 | 446 | var delta; 447 | 448 | delta = (extents.log_SII_Ha[1] - extents.log_SII_Ha[0]) / 10; 449 | xPlotDomain = [extents.log_SII_Ha[0] - delta, extents.log_SII_Ha[1] + delta]; 450 | 451 | delta = (extents.log_OIII_Hb[1] - extents.log_OIII_Hb[0]) / 10; 452 | yPlotDomain = [extents.log_OIII_Hb[0] - delta, extents.log_OIII_Hb[1] + delta]; 453 | 454 | } else { 455 | xPlotDomain = RANGE_X; 456 | yPlotDomain = RANGE_Y; 457 | } 458 | 459 | var x = 460 | d3.scale.linear() 461 | .domain(xPlotDomain) 462 | .range([0, g_width]); 463 | 464 | var y = 465 | d3.scale.linear() 466 | .domain(yPlotDomain) 467 | .range([g_height, 0]); 468 | 469 | 470 | // generators 471 | 472 | var line = 473 | d3.svg.line() 474 | .interpolate('basis') 475 | .x(function(d) { return x(d.x); }) 476 | .y(function(d) { return y(d.y); }); 477 | 478 | 479 | // axis 480 | 481 | var xAxis = 482 | d3.svg.axis() 483 | .scale(x) 484 | .innerTickSize(-6) 485 | .outerTickSize(-g_height) 486 | .tickValues(d3.range(xPlotDomain[0], xPlotDomain[1], RANGE_STEP).concat([xPlotDomain[1]])) 487 | ; 488 | 489 | plot2_g.append('g') 490 | .attr('class', 'x axis noticksvalue') 491 | .call(xAxis.orient('top')); 492 | 493 | plot2_g.append('g') 494 | .attr('class', 'x axis') 495 | .attr('transform', 'translate(0,' + g_height + ')') 496 | .call(xAxis.orient('bottom')) 497 | .selectAll('.tick text') 498 | .attr('dy', '1em') 499 | ; 500 | 501 | plot2_xlabel.text('log([S II] λλ6716Å,6731Å/Hα)'); 502 | 503 | var yAxis = 504 | d3.svg.axis() 505 | .scale(y) 506 | .innerTickSize(-6) 507 | .outerTickSize(-g_width) 508 | .tickValues(d3.range(yPlotDomain[0], yPlotDomain[1], RANGE_STEP).concat([yPlotDomain[1]])) 509 | ; 510 | 511 | plot2_g.append('g') 512 | .attr('class', 'y axis noticksvalue') 513 | .call(yAxis.orient('left')); 514 | 515 | plot2_g.append('g') 516 | .attr('class', 'y axis noticksvalue') 517 | .attr('transform', 'translate(' + g_width + ',0)') 518 | .call(yAxis.orient('right')); 519 | 520 | 521 | // graphics 522 | 523 | var g2 = plot2_g.append('g'); 524 | 525 | 526 | // eps curves 527 | 528 | _.each([-0.1, 0, 0.1], function(eps) { 529 | var xDomain = [ 530 | xPlotDomain[0], 531 | _.min([xPlotDomain[1], log_OIII_Hb_SII_inverse(yPlotDomain[0], eps)]) 532 | ]; 533 | 534 | var step = (xDomain[1] - xDomain[0]) / 50; 535 | var xRange = d3.range(xDomain[0], xDomain[1], step).concat([xDomain[1]]); 536 | 537 | var curvePoints = 538 | _.chain(xRange) 539 | .map(function(x) { return {x: x, y: log_OIII_Hb_SII(x, eps)} }) 540 | .filter(function(point) { return point.y <= yPlotDomain[1]; }) 541 | .value(); 542 | 543 | g2 544 | .append('path') 545 | .classed({curve: true, eps: eps}) 546 | .datum( curvePoints ) 547 | .attr('d', line) 548 | ; 549 | }); 550 | 551 | 552 | // stravinska_SII curve 553 | var xDomainStravinska = [ 554 | _.min([stravinska_SII_inverse(yPlotDomain[0]), xPlotDomain[1]]), 555 | xPlotDomain[0], 556 | ]; 557 | var stepStravinska = (xDomainStravinska[1] - xDomainStravinska[0]) / 50; 558 | var xRangeStravinska = d3.range(xDomainStravinska[0], xDomainStravinska[1], stepStravinska); 559 | xRangeStravinska.push(xDomainStravinska[1]); 560 | 561 | g2 562 | .append('path') 563 | .classed({curve: true, stravinska: true}) 564 | .datum( _.map(xRangeStravinska, function(x) { return {x: x, y: stravinska_SII(x)} }) ) 565 | .attr('d', line); 566 | 567 | 568 | // fill area 569 | 570 | var xDomainEps0 = [ 571 | xPlotDomain[0], 572 | _.min([xPlotDomain[1], log_OIII_Hb_SII_inverse(yPlotDomain[0])]) 573 | ]; 574 | var step = (xDomainEps0[1] - xDomainEps0[0]) / 50; 575 | var xRangeEps0 = d3.range(xDomainEps0[0], xDomainEps0[1], step); 576 | xRangeEps0.push(xDomainEps0[1]); 577 | 578 | var path_d = line( _.map(xRangeEps0, function(x) { return {x: x, y: log_OIII_Hb_SII(x)} }) ); 579 | if (xDomainEps0[1] < log_OIII_Hb_SII_inverse(yPlotDomain[0])) { 580 | path_d += ' L' + x(xPlotDomain[1]) + ',' + y(yPlotDomain[0]); 581 | } 582 | path_d += ' L' + x(stravinska_SII_inverse(yPlotDomain[0])) + ',' + y(yPlotDomain[0]); 583 | path_d += line( _.map(xRangeStravinska, function(x) { return {x: x, y: stravinska_SII(x)} }) ); 584 | path_d += ' L' + x(xPlotDomain[0]) + ',' + y(log_OIII_Hb_SII(xPlotDomain[0])); 585 | path_d += 'Z'; 586 | 587 | g2.insert('path', ":first-child") 588 | .classed({area: true}) 589 | .attr('d', path_d); 590 | 591 | // dots 592 | 593 | g2.selectAll('circle') 594 | .data(data) 595 | .enter() 596 | .append('circle') 597 | .attr('r', function(d) { return 1 + d.SFR / 20 }) 598 | .attr('cx', function(d) { return x(d.log_SII_Ha) }) 599 | .attr('cy', function(d) { return y(d.log_OIII_Hb) }) 600 | .attr('class', function(d) { return d.band }) 601 | .classed({dot: true}) 602 | .on('mouseover', mouseover) 603 | .on('mouseout', mouseout) 604 | ; 605 | } 606 | 607 | // =============== 608 | // plot 3 609 | // =============== 610 | 611 | function plot_3() { 612 | 613 | // geometry 614 | 615 | var svg_css = getComputedStyle(plot3_svg.node(), null); 616 | var svg_width = parseInt(svg_css.width); 617 | var svg_height = parseInt(svg_css.height); 618 | var padding = {left: 10, right: 10, top: 10, bottom: 20}; 619 | 620 | var g_width = svg_width - padding.left - padding.right; 621 | var g_height = svg_height - padding.top - padding.bottom; 622 | 623 | // plot3_svg 624 | // .attr('width', svg_width) 625 | // .attr('height', svg_height) 626 | // .attr('viewBox', "0 0 " + svg_width + "px " + svg_height + "px") 627 | // ; 628 | 629 | plot3_g.attr('transform', 'translate(' + padding.left + ',' + padding.top + ')'); 630 | 631 | // scales 632 | 633 | var xPlotDomain, yPlotDomain; 634 | 635 | if (HAS_ADAPTIVE_RANGES) { 636 | 637 | var delta; 638 | 639 | delta = (extents.log_OI_Ha[1] - extents.log_OI_Ha[0]) / 10; 640 | xPlotDomain = [extents.log_OI_Ha[0] - delta, extents.log_OI_Ha[1] + delta]; 641 | 642 | delta = (extents.log_OIII_Hb[1] - extents.log_OIII_Hb[0]) / 10; 643 | yPlotDomain = [extents.log_OIII_Hb[0] - delta, extents.log_OIII_Hb[1] + delta]; 644 | 645 | } else { 646 | xPlotDomain = RANGE_X; 647 | yPlotDomain = RANGE_Y; 648 | } 649 | 650 | var x = 651 | d3.scale.linear() 652 | .domain(xPlotDomain) 653 | .range([0, g_width]); 654 | 655 | var y = 656 | d3.scale.linear() 657 | .domain(yPlotDomain) 658 | .range([g_height, 0]); 659 | 660 | 661 | // generators 662 | 663 | var line = 664 | d3.svg.line() 665 | .interpolate('basis') 666 | .x(function(d) { return x(d.x); }) 667 | .y(function(d) { return y(d.y); }); 668 | 669 | 670 | // axis 671 | 672 | var xAxis = 673 | d3.svg.axis() 674 | .scale(x) 675 | .innerTickSize(-6) 676 | .outerTickSize(-g_height) 677 | .tickValues(d3.range(xPlotDomain[0], xPlotDomain[1], RANGE_STEP).concat([xPlotDomain[1]])) 678 | ; 679 | 680 | plot3_g.append('g') 681 | .attr('class', 'x axis noticksvalue') 682 | .call(xAxis.orient('top')); 683 | 684 | plot3_g.append('g') 685 | .attr('class', 'x axis') 686 | .attr('transform', 'translate(0,' + g_height + ')') 687 | .call(xAxis.orient('bottom')) 688 | .selectAll('.tick text') 689 | .attr('dy', '1em') 690 | ; 691 | 692 | plot3_xlabel.text('log([O I] λ6300Å/Hα)'); 693 | 694 | var yAxis = 695 | d3.svg.axis() 696 | .scale(y) 697 | .innerTickSize(-6) 698 | .outerTickSize(-g_width) 699 | .tickValues(d3.range(yPlotDomain[0], yPlotDomain[1], RANGE_STEP).concat([yPlotDomain[1]])) 700 | ; 701 | 702 | plot3_g.append('g') 703 | .attr('class', 'y axis noticksvalue') 704 | .call(yAxis.orient('left')); 705 | 706 | plot3_g.append('g') 707 | .attr('class', 'y axis noticksvalue') 708 | .attr('transform', 'translate(' + g_width + ',0)') 709 | .call(yAxis.orient('right')); 710 | 711 | 712 | // graphics 713 | 714 | var g3 = plot3_g.append('g'); 715 | 716 | // eps curves 717 | 718 | _.each([-0.1, 0, 0.1], function(eps) { 719 | var xDomain = [ 720 | xPlotDomain[0], 721 | _.min([xPlotDomain[1], log_OIII_Hb_OI_inverse(yPlotDomain[0], eps)]) 722 | ]; 723 | 724 | var step = (xDomain[1] - xDomain[0]) / 50; 725 | var xRange = d3.range(xDomain[0], xDomain[1], step).concat([xDomain[1]]); 726 | 727 | var curvePoints = 728 | _.chain(xRange) 729 | .map(function(x) { return {x: x, y: log_OIII_Hb_OI(x, eps)} }) 730 | .filter(function(point) { return point.y <= yPlotDomain[1]; }) 731 | .value(); 732 | 733 | g3 734 | .append('path') 735 | .classed({curve: true, eps: eps}) 736 | .datum( curvePoints ) 737 | .attr('d', line) 738 | ; 739 | }); 740 | 741 | 742 | // dots 743 | 744 | g3.selectAll('circle') 745 | .data(data) 746 | .enter() 747 | .append('circle') 748 | .attr('r', function(d) { return 1 + d.SFR / 20 }) 749 | .attr('cx', function(d) { return x(d.log_OI_Ha) }) 750 | .attr('cy', function(d) { return y(d.log_OIII_Hb) }) 751 | .attr('class', function(d) { return d.band }) 752 | .classed({dot: true}) 753 | .on('mouseover', mouseover) 754 | .on('mouseout', mouseout) 755 | ; 756 | } 757 | 758 | //=============== 759 | // interaction 760 | //=============== 761 | 762 | 763 | function filterClick(d, i) { 764 | 765 | // toggle 766 | filters[d.filter][d.name] = !filters[d.filter][d.name]; 767 | d3.select(this).classed('pressed', filters[d.filter][d.name]); 768 | 769 | _.each([plot1_g, plot2_g, plot3_g], function(plot_g) { 770 | plot_g.selectAll('circle') 771 | .classed({ 772 | hidden: function(_d) { 773 | var is_shown = true; 774 | _.each(filters, function(value, filter) { 775 | is_shown = is_shown && filters[filter][_d[filter]]; 776 | }); 777 | return !is_shown; 778 | }, 779 | }) 780 | ; 781 | }); 782 | } 783 | 784 | 785 | function focus_init() { 786 | div_focus = d3.select('#focus'); 787 | focus_showmessage(); 788 | } 789 | 790 | 791 | function focus_showdata(d) { 792 | div_focus 793 | .selectAll('*') 794 | .remove(); 795 | 796 | div_focus 797 | .append('span') 798 | .classed('focus', true) 799 | .text(d.SDSS_ID); 800 | 801 | div_focus 802 | .append('span') 803 | .text(' (z = ' + d.redshift + ', SFR: ' + d.SFR + ' M'); 804 | 805 | div_focus.append('sub') 806 | .text('⨀'); // http://en.wikipedia.org/wiki/Solar_mass 807 | 808 | div_focus.append('span') 809 | .text('/yr)'); 810 | } 811 | 812 | 813 | function focus_showmessage() { 814 | div_focus 815 | .selectAll('*') 816 | .remove(); 817 | 818 | div_focus 819 | .append('span') 820 | .classed('dimmed', true) 821 | .text('Please hover the items to show their SDSSID, redshift and SFR'); 822 | } 823 | 824 | 825 | function mouseover(d, i) { 826 | focus_showdata(d); 827 | 828 | _.each([plot1_g, plot2_g, plot3_g], function(plot_g) { 829 | plot_g.selectAll('circle') 830 | .classed({ 831 | focused: function(_d) { 832 | return _d.SDSS_ID === d.SDSS_ID; 833 | }, 834 | dimmed: function(_d) { 835 | return _d.SDSS_ID != d.SDSS_ID; 836 | }, 837 | }) 838 | ; 839 | }); 840 | } 841 | 842 | function mouseout(d, i) { 843 | focus_showmessage(); 844 | 845 | _.each([plot1_g, plot2_g, plot3_g], function(plot_g) { 846 | plot_g.selectAll('circle') 847 | .classed({focused: false, dimmed: false}) 848 | ; 849 | }); 850 | } 851 | 852 | 853 | //================= 854 | // graph 1 curves 855 | //================= 856 | 857 | function log_OIII_Hb_NII(n, eps) { 858 | eps = _.isUndefined(eps) ? 0 : eps; 859 | return 1.19 + eps + 0.61 / (n - eps - 0.47); 860 | }; 861 | 862 | function log_OIII_Hb_NII_inverse(y, eps) { 863 | eps = _.isUndefined(eps) ? 0 : eps; 864 | return 0.47 + eps + 0.61 / (y - eps - 1.19); 865 | }; 866 | 867 | 868 | function kauffmann(n, eps) { 869 | eps = _.isUndefined(eps) ? 0 : eps; 870 | var result = 1.3 + eps + 0.61 /(n - eps - 0.05); 871 | return n > eps + 0.05 ? -2 : result; 872 | }; 873 | 874 | function kauffmann_inverse(y, eps) { 875 | eps = _.isUndefined(eps) ? 0 : eps; 876 | return 0.05 + eps + 0.61 /(y - eps - 1.3); 877 | }; 878 | 879 | function log_OIII_Hb_NII_kauffmann_intersection_X(eps) { 880 | /* 881 | log_OIII_Hb_NII 882 | y = (1.19 + eps) + 0.61 / (n - (eps + 0.47)); 883 | y = a + b / (n - c ); 884 | kauffmann 885 | y = (1.30 + eps) + 0.61 / (n - (eps + 0.05)); 886 | y = d + e / (n - f ); 887 | */ 888 | var a = 1.19 + eps; 889 | var b = 0.61; 890 | var c = 0.47 + eps; 891 | var d = 1.30 + eps; 892 | var e = 0.61; 893 | var f = 0.05 + eps; 894 | 895 | var A = a - d; 896 | var B = b - e - (c + f) * (a - d); 897 | var C = e * c - b * f + c * f * (a - d); 898 | 899 | var xIntersection = (-B + Math.sqrt(Math.pow(B, 2) - 4 * A * C)) / (2 * A); 900 | 901 | return xIntersection 902 | }; 903 | 904 | //https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/tanh#Polyfill 905 | function tanh(x) { 906 | if(x === Infinity) { 907 | return 1; 908 | } else if (x === -Infinity) { 909 | return -1; 910 | } else { 911 | var y = Math.exp(2 * x); 912 | return (y - 1) / (y + 1); 913 | } 914 | } 915 | 916 | function stravinska_NII(n) { 917 | return ( (-30.787 + 1.1358 * n + 0.27297 * Math.pow(n, 2)) * tanh(5.7409 * n) ) - 31.093; 918 | }; 919 | 920 | 921 | function find_stravinska_NII_intersection_X(y1, x0) { 922 | var deltaX = 0.1; 923 | var errY = 0.1; 924 | 925 | var y0 = stravinska_NII(x0); 926 | var x, y; 927 | var x_ = x0; 928 | var y_ = y0; 929 | 930 | var pre; 931 | 932 | // reach 933 | 934 | y = stravinska_NII(x0); 935 | while (Math.abs(y - y1) > errY) { 936 | x = x_ + deltaX; 937 | y = stravinska_NII(x); 938 | 939 | if (Math.abs(y - y_) >= errY) { 940 | while (Math.abs(y - y_) >= errY) { 941 | deltaX *= 0.9; 942 | x = x_ + deltaX; 943 | y = stravinska_NII(x); 944 | } 945 | } else { 946 | while (Math.abs(y - y_) < errY) { 947 | deltaX *= 1.1; 948 | x = x_ + deltaX; 949 | y = stravinska_NII(x); 950 | } 951 | } 952 | 953 | x_ = x; 954 | y_ = y; 955 | 956 | if (y > y1) { 957 | pre = {x: x_, y: y_}; 958 | } 959 | } 960 | 961 | // refine 962 | 963 | errY /= 20; 964 | deltaX /= 10; 965 | 966 | x_ = pre.x; 967 | y_ = pre.y; 968 | y = pre.y; 969 | 970 | while (Math.abs(y - y1) > errY) { 971 | x = x_ + deltaX; 972 | y = stravinska_NII(x); 973 | 974 | if (Math.abs(y - y_) >= errY) { 975 | while (Math.abs(y - y_) >= errY) { 976 | deltaX *= 0.9; 977 | x = x_ + deltaX; 978 | y = stravinska_NII(x); 979 | } 980 | } else { 981 | while (Math.abs(y - y_) < errY) { 982 | deltaX *= 1.1; 983 | x = x_ + deltaX; 984 | y = stravinska_NII(x); 985 | } 986 | } 987 | 988 | x_ = x; 989 | y_ = y; 990 | 991 | if (y > y1) { 992 | pre = {x: x_, y: y_}; 993 | } 994 | } 995 | 996 | return pre.x; 997 | } 998 | 999 | 1000 | //================= 1001 | // graph 2 curves 1002 | //================= 1003 | 1004 | function log_OIII_Hb_SII(n, eps) { 1005 | eps = _.isUndefined(eps) ? 0 : eps; 1006 | return 1.30 + eps + 0.72 / (n - eps - 0.32); 1007 | }; 1008 | 1009 | function log_OIII_Hb_SII_inverse(y, eps) { 1010 | eps = _.isUndefined(eps) ? 0 : eps; 1011 | return 0.32 + eps + 0.72 / (y - eps - 1.3); 1012 | }; 1013 | 1014 | function stravinska_SII(n, eps) { 1015 | eps = _.isUndefined(eps) ? 0 : eps; 1016 | return 1.2 + eps + 0.61 / (n - eps + 0.2) 1017 | }; 1018 | 1019 | 1020 | function stravinska_SII_inverse(y, eps) { 1021 | eps = _.isUndefined(eps) ? 0 : eps; 1022 | return -0.2 + eps + 0.61 / (y - eps - 1.2); 1023 | }; 1024 | 1025 | 1026 | //================= 1027 | // graph 3 curves 1028 | //================= 1029 | 1030 | function log_OIII_Hb_OI(n, eps) { 1031 | eps = _.isUndefined(eps) ? 0 : eps; 1032 | return 1.33 + eps + 0.73 / (n - eps + 0.59); 1033 | }; 1034 | 1035 | function log_OIII_Hb_OI_inverse(y, eps) { 1036 | eps = _.isUndefined(eps) ? 0 : eps; 1037 | return -0.59 + eps + 0.73 / (y - eps - 1.33); 1038 | }; 1039 | --------------------------------------------------------------------------------