diff --git a/corgidrp/data/filter_curves/transmission_ID-01_1F_v0.csv b/corgidrp/data/filter_curves/transmission_ID-01_1F_v0.csv new file mode 100644 index 00000000..0b3b972a --- /dev/null +++ b/corgidrp/data/filter_curves/transmission_ID-01_1F_v0.csv @@ -0,0 +1,126 @@ +# Filter transmission curve produced by Materion. +#Truncated at T<1% due to measurement noise. +#True CGI curve may differ slightly (TBD) due to difference in f/number in Materion test setup and vacuum vs. air. +lambda_nm,%T +543.5,2.62223506 +544,7.046983242 +544.5,16.13804245 +545,31.6402874 +545.5,51.54069519 +546,72.01272583 +546.5,87.10562897 +547,93.03697205 +547.5,92.91194916 +548,91.69495392 +548.5,92.05001068 +549,93.96981812 +549.5,95.96953583 +550,96.82724762 +550.5,95.89777374 +551,93.58200836 +551.5,90.82911682 +552,89.20240784 +552.5,89.50035858 +553,91.77245331 +553.5,94.73375702 +554,96.91140747 +554.5,97.46907043 +555,96.67098999 +555.5,95.39193726 +556,94.60858154 +556.5,94.81651306 +557,95.95736694 +557.5,97.15691376 +558,97.69484711 +558.5,97.13855743 +559,95.89714813 +559.5,94.83798981 +560,94.58621979 +560.5,95.27588654 +561,96.56955719 +561.5,97.75156403 +562,98.31775665 +562.5,98.13916016 +563,97.43697357 +563.5,96.77692413 +564,96.50816345 +564.5,96.80419159 +565,97.41926575 +565.5,97.71026611 +566,97.06268311 +566.5,95.39664459 +567,93.243927 +567.5,91.69695282 +568,91.51848602 +568.5,92.79511261 +569,94.72873688 +569.5,96.70283508 +570,98.0776825 +570.5,98.77159882 +571,98.89006042 +571.5,98.67003632 +572,98.45578766 +572.5,98.40923309 +573,98.3951416 +573.5,98.15956116 +574,97.20458221 +574.5,95.2546463 +575,92.63168335 +575.5,90.20106506 +576,88.72252655 +576.5,88.90052795 +577,90.50936127 +577.5,93.09736633 +578,95.49654388 +578.5,97.18186188 +579,97.8999939 +579.5,97.96646118 +580,97.92380524 +580.5,97.92311859 +581,98.21533203 +581.5,98.57277679 +582,98.84672546 +582.5,98.90722656 +583,98.81912231 +583.5,98.35873413 +584,97.63378906 +584.5,96.69090271 +585,95.74626923 +585.5,95.11701202 +586,95.18188477 +586.5,95.79512787 +587,96.62108612 +587.5,97.26956177 +588,97.47356415 +588.5,97.34996796 +589,97.287323 +589.5,97.48419952 +590,97.67388916 +590.5,97.20954895 +591,95.73603821 +591.5,93.51905823 +592,91.41559601 +592.5,90.4797287 +593,90.99110413 +593.5,92.51161194 +594,94.18556976 +594.5,95.41777039 +595,96.0429306 +595.5,96.33422089 +596,96.60414124 +596.5,96.88964844 +597,97.0973053 +597.5,96.75981903 +598,95.75063324 +598.5,94.19282532 +599,92.8374176 +599.5,92.18450165 +600,92.00694275 +600.5,90.4809494 +601,83.8256073 +601.5,69.58136749 +602,49.08872223 +602.5,27.68443489 +603,12.29771996 +603.5,4.186101437 +604,1.29500711 diff --git a/corgidrp/data/filter_curves/transmission_ID-02_2F_v0.csv b/corgidrp/data/filter_curves/transmission_ID-02_2F_v0.csv new file mode 100644 index 00000000..5d5e7ca8 --- /dev/null +++ b/corgidrp/data/filter_curves/transmission_ID-02_2F_v0.csv @@ -0,0 +1,238 @@ +# Filter transmission curve produced by Materion. +#Truncated at T<1% due to measurement noise. +#True CGI curve may differ slightly (TBD) due to difference in f/number in Materion test setup and vacuum vs. air. +lambda_nm,%T +601,1.3001729483352324 +601.5,3.386690123889491 +602,7.382010418293351 +602.5,14.143447378912114 +603,24.47849782223457 +603.5,37.60763624851235 +604,52.6092456880712 +604.5,67.66246276009122 +605,80.23156714506919 +605.5,89.205462697482 +606,94.03010681772564 +606.5,95.52692660102736 +607,94.88472386874645 +607.5,93.36145451407988 +608,91.93339904067327 +608.5,91.25706634026977 +609,91.3150857575214 +609.5,91.74774762740232 +610,91.95353617342089 +610.5,91.6544213534837 +611,90.82009428087063 +611.5,90.03100125983079 +612,89.7703342303015 +612.5,90.22675563200285 +613,91.26946959680629 +613.5,92.50005884467764 +614,93.5415118503144 +614.5,94.14578646142174 +615,94.32266464999611 +615.5,94.23483310694074 +616,94.17341293134776 +616.5,94.40520016455143 +617,95.00900860591135 +617.5,95.88234135208589 +618,96.84187020577428 +618.5,97.54262731010886 +619,97.84107725793542 +619.5,97.58261117986831 +620,96.86838091940989 +620.5,95.89573043758745 +621,95.01713987683206 +621.5,94.48594741793865 +622,94.5151099672162 +622.5,95.08491834774534 +623,96.02552518116649 +623.5,97.00800350170519 +624,97.78508302815108 +624.5,98.11751774122393 +625,97.9056078061507 +625.5,97.3771436007209 +626,96.73876959262634 +626.5,96.169190475579 +627,95.92881342445746 +627.5,96.03319792512362 +628,96.40203997560293 +628.5,96.8350915974096 +629,97.08959903398177 +629.5,97.01020445316738 +630,96.61910837908378 +630.5,95.94676490132736 +631,95.19437725621358 +631.5,94.63437378604915 +632,94.4347601085386 +632.5,94.7057746460185 +633,95.39682617614481 +633.5,96.39578867925644 +634,97.44055838262904 +634.5,98.28010506592047 +635,98.91782947745531 +635.5,99.17881747385577 +636,99.27607947093452 +636.5,99.26779534433692 +637,99.18593234467608 +637.5,99.18721623219427 +638,99.20454105087275 +638.5,99.205236484102 +639,99.1349743087746 +639.5,98.9189452337457 +640,98.64336068214718 +640.5,98.19792873215553 +641,97.76066626700383 +641.5,97.32273129697441 +642,97.08540347620443 +642.5,97.12084025018001 +643,97.3819658066729 +643.5,97.86628879848512 +644,98.31856814189605 +644.5,98.69878939601084 +645,98.9117310167522 +645.5,98.86941628823872 +646,98.70412362841336 +646.5,98.47387247456122 +647,98.35603009332216 +647.5,98.33983631650177 +648,98.49007388414869 +648.5,98.79794664321479 +649,99.13404960204679 +649.5,99.43079534931074 +650,99.69519939963699 +650.5,99.84717938176573 +651,99.90514529953045 +651.5,99.90905045155522 +652,99.9297913241595 +652.5,99.90625341303699 +653,99.8872014654444 +653.5,99.86798902940784 +654,99.84721759568494 +654.5,99.79480754103744 +655,99.64524248828502 +655.5,99.35863027105755 +656,98.96031234721335 +656.5,98.42985352545163 +657,97.91098025247243 +657.5,97.55269205509074 +658,97.45719540084535 +658.5,97.67387406241717 +659,98.11975689658858 +659.5,98.70044773987037 +660,99.15507323761976 +660.5,99.41421182056459 +661,99.55784654384172 +661.5,99.5456267041007 +662,99.51456125189738 +662.5,99.4945846075937 +663,99.5501126676306 +663.5,99.56590140695752 +664,99.48607886029814 +664.5,99.30176482401554 +665,99.01914182943513 +665.5,98.70856373524018 +666,98.56666378366101 +666.5,98.59616259539419 +667,98.7884550569374 +667.5,99.08121159157105 +668,99.35107980162518 +668.5,99.5131703754221 +669,99.469434199298 +669.5,99.33047648911334 +670,99.16439669266934 +670.5,99.02578287770739 +671,99.06343588871282 +671.5,99.23549186131844 +672,99.47181091475507 +672.5,99.7081299681917 +673,99.89902391047579 +673.5,99.95397116902433 +674,99.99109686801158 +674.5,100 +675,99.88684228465401 +675.5,99.67318993509896 +676,99.27681311808301 +676.5,98.68679117696779 +677,97.98009611039082 +677.5,97.31589154633897 +678,96.80093871095224 +678.5,96.58514654218901 +679,96.63253568852132 +679.5,96.89523553828496 +680,97.24286289361196 +680.5,97.61924777073982 +681,97.87264709380543 +681.5,98.12999741558214 +682,98.35372215290292 +682.5,98.58253659361023 +683,98.87076895079477 +683.5,99.17582938577496 +684,99.4058589289459 +684.5,99.57324553124288 +685,99.5442969698962 +685.5,99.32369023796481 +686,98.78045370332526 +686.5,98.08163771583568 +687,97.24208339977719 +687.5,96.42401887902236 +688,95.75649761723467 +688.5,95.38388033203917 +689,95.30031312179896 +689.5,95.46734054330557 +690,95.88172996944539 +690.5,96.40926947816413 +691,96.9745842623963 +691.5,97.51062186561002 +692,97.99827685074251 +692.5,98.44117159683312 +693,98.82422045058475 +693.5,99.10322869889293 +694,99.20733044660713 +694.5,99.17587524247803 +695,98.92816169983823 +695.5,98.44826352928514 +696,97.82995024613327 +696.5,97.10272829488291 +697,96.36951487188648 +697.5,95.75879026206947 +698,95.39436540008221 +698.5,95.15342283304 +699,95.05489987679456 +699.5,95.01100321222648 +700,94.96555518273918 +700.5,94.85655481125131 +701,94.7602251636842 +701.5,94.75974370836906 +702,94.97536009310389 +702.5,95.33645297178765 +703,95.84299177328494 +703.5,96.35861712356616 +704,96.81387691227404 +704.5,97.12206300544423 +705,97.32700327257344 +705.5,97.40993618183838 +706,97.47573532198743 +706.5,97.45698906571506 +707,97.29898705072165 +707.5,96.87577091041507 +708,95.90615437337648 +708.5,94.47820588892692 +709,92.65242857873216 +709.5,90.79612841391992 +710,89.35471441613036 +710.5,88.64135537292961 +711,88.73922873261535 +711.5,89.2588662238784 +712,89.49126483972256 +712.5,88.61816136704658 +713,85.59181327993123 +713.5,79.81629122612077 +714,71.000183720804 +714.5,59.15154560706325 +715,45.90814897468326 +715.5,32.432903976845594 +716,20.174933645999253 +716.5,11.063804657540823 +717,5.166467734836327 +717.5,1.9176504905695853 diff --git a/corgidrp/data/filter_curves/transmission_ID-03_3F_v0.csv b/corgidrp/data/filter_curves/transmission_ID-03_3F_v0.csv new file mode 100644 index 00000000..e6af616e --- /dev/null +++ b/corgidrp/data/filter_curves/transmission_ID-03_3F_v0.csv @@ -0,0 +1,259 @@ +# Filter transmission curve produced by Materion. +#Truncated at T<1% due to measurement noise. +#True CGI curve may differ slightly (TBD) due to difference in f/number in Materion test setup and vacuum vs. air. +lambda_nm,%T +666.5,1.074771643 +667,3.167236328 +667.5,9.418622017 +668,23.36450386 +668.5,45.54508591 +669,69.83283997 +669.5,87.22862244 +670,95.46642303 +670.5,97.4548111 +671,97.50283051 +671.5,97.08765411 +672,96.43386841 +672.5,95.95307922 +673,95.96282196 +673.5,96.51925659 +674,97.26030731 +674.5,97.78868103 +675,98.0076828 +675.5,98.41462708 +676,98.71331787 +676.5,98.80234528 +677,98.40351868 +677.5,97.58331299 +678,97.12963104 +678.5,97.03231049 +679,97.5760498 +679.5,98.290802 +680,98.65039825 +680.5,98.48930359 +681,97.89055634 +681.5,97.14070892 +682,97.09299469 +682.5,97.59227753 +683,97.92131805 +683.5,97.87980652 +684,97.22177124 +684.5,95.76123047 +685,94.38211823 +685.5,94.06650543 +686,94.57991028000001 +686.5,95.86216736 +687,97.35877228 +687.5,98.18286133 +688,98.18283844 +688.5,97.4990921 +689,97.09774017 +689.5,97.22727203 +690,97.84292603 +690.5,98.5025177 +691,98.21131134 +691.5,96.72081757 +692,94.52426147 +692.5,92.32913208 +693,91.31292725 +693.5,91.41236877 +694,92.62239075 +694.5,94.65657806 +695,96.22335815 +695.5,97.17272949 +696,97.38144684 +696.5,97.10403442 +697,96.63903809 +697.5,96.16997528 +698,95.41682434 +698.5,94.87506866 +699,93.55324554 +699.5,92.60647583 +700,92.19068909 +700.5,92.51579285 +701,93.79833221 +701.5,95.71259308 +702,97.1543045 +702.5,97.81784058 +703,97.00537872 +703.5,95.49311066 +704,93.62508392 +704.5,92.49376678 +705,92.27981567 +705.5,93.52000427 +706,95.21501923 +706.5,96.84896851 +707,98.34132385 +707.5,98.33589172 +708,97.41610718 +708.5,96.15274048 +709,94.93564606 +709.5,94.22542572 +710,94.40536499 +710.5,95.17276001 +711,96.41345978 +711.5,97.63631439 +712,98.3645401 +712.5,98.76622772 +713,98.83857727 +713.5,98.59922028 +714,98.56375885 +714.5,98.43694305 +715,98.69271851 +715.5,98.70114136 +716,99.1073761 +716.5,98.89421082 +717,98.67140961 +717.5,98.36181641 +718,98.36425781 +718.5,98.38733673 +719,98.49157715 +719.5,98.43535614 +720,97.97961426 +720.5,97.68770599 +721,96.84619141 +721.5,96.08642578 +722,95.93739319 +722.5,96.02684021 +723,96.61627197 +723.5,97.46370697 +724,98.45738983 +724.5,98.51200867 +725,98.26969147 +725.5,97.54436493 +726,96.58948517 +726.5,95.65851593 +727,95.41732025 +727.5,95.78085327 +728,96.18370819 +728.5,97.00123596 +729,97.58006287 +729.5,97.37598419 +730,97.47728729 +730.5,97.32858276 +731,96.85647583 +731.5,97.16051483 +732,97.06370544 +732.5,97.30647278000001 +733,97.66939545 +733.5,97.2485199 +734,96.53100586 +734.5,95.99850464 +735,96.00070953 +735.5,95.89662933 +736,96.23082733 +736.5,96.72091675 +737,96.97782135 +737.5,96.98600006 +738,96.44591522 +738.5,94.98120117 +739,93.58158875 +739.5,92.59606171 +740,91.93250275 +740.5,92.33233643 +741,93.49472809 +741.5,94.59004211 +742,95.32366943 +742.5,96.2127533 +743,95.83169556 +743.5,95.08282471 +744,94.22571564 +744.5,93.51841736 +745,93.30796051 +745.5,94.07875061 +746,95.09494781 +746.5,95.99009705 +747,97.00227356 +747.5,97.90049744 +748,98.28401184 +748.5,97.61830139 +749,97.37159729 +749.5,97.2593689 +750,97.4930954 +750.5,97.70272064 +751,97.84299469 +751.5,97.85762024 +752,97.37683868 +752.5,96.52940369 +753,95.9841156 +753.5,95.73191833 +754,95.27902985 +754.5,95.44335938 +755,96.15307617 +755.5,97.00532532 +756,97.79270935 +756.5,98.50984955 +757,98.3453598 +757.5,98.2101593 +758,97.63716125 +758.5,97.39398193 +759,97.17584229 +759.5,96.91340637 +760,97.3819809 +760.5,97.78051758 +761,97.92136383 +761.5,97.9393692 +762,97.62387848 +762.5,97.22895813 +763,96.38275909 +763.5,95.73005676 +764,95.05382538 +764.5,94.78968048 +765,94.32489777 +765.5,93.96659851 +766,94.42705536 +766.5,94.83333588 +767,95.28948975 +767.5,95.68229675 +768,96.40258026 +768.5,96.86225891 +769,96.93479919 +769.5,97.25769043 +770,97.17481995 +770.5,96.39574432 +771,96.48906708 +771.5,96.15790558 +772,95.74002075 +772.5,96.11358643 +773,96.38831329 +773.5,97.16799164 +774,98.29249573 +774.5,97.99868011 +775,98.31827545 +775.5,98.19773865 +776,97.26448059 +776.5,96.62248993 +777,96.83501434 +777.5,96.22483063 +778,95.96892548 +778.5,96.28366089 +779,96.56807709 +779.5,97.34089661 +780,97.06061554 +780.5,97.50209808 +781,97.19377136 +781.5,97.731987 +782,97.76856995 +782.5,97.84587096999999 +783,97.68737793 +783.5,97.36869812 +784,97.07810211 +784.5,96.85930634 +785,97.28977966 +785.5,97.59962463 +786,97.63251495 +786.5,97.97173309 +787,97.90291595 +787.5,97.70092773 +788,97.30383301 +788.5,97.70261383 +789,96.56854248 +789.5,93.95090485 +790,85.30145264 +790.5,67.80437469 +791,43.88753891 +791.5,22.9462471 +792,10.36684227 +792.5,4.11921978 +793,1.691660881 +793.5,1.166493893 diff --git a/corgidrp/data/filter_curves/transmission_ID-04_4F_v0.csv b/corgidrp/data/filter_curves/transmission_ID-04_4F_v0.csv new file mode 100644 index 00000000..a1be2103 --- /dev/null +++ b/corgidrp/data/filter_curves/transmission_ID-04_4F_v0.csv @@ -0,0 +1,208 @@ +# Filter transmission curve produced by Materion. +#Truncated at T<1% due to measurement noise. +#True CGI curve may differ slightly (TBD) due to difference in f/number in Materion test setup and vacuum vs. air. +lambda_nm,%T +774.5,2.607397318 +775,6.119506836 +775.5,12.29881001 +776,21.22951508 +776.5,32.43777084 +777,46.04741669 +777.5,60.5358429 +778,74.46871185 +778.5,86.31536865 +779,93.76290131 +779.5,97.21960449 +780,98.1055603 +780.5,98.16951752 +781,97.9030304 +781.5,97.70967865 +782,97.68265533 +782.5,97.79682922 +783,98.03553009 +783.5,98.31847382 +784,98.6043396 +784.5,98.87443542 +785,99.02718353 +785.5,99.18736267 +786,99.26405334 +786.5,99.20742798 +787,99.14316559 +787.5,98.94221497 +788,98.65193939 +788.5,98.55516052 +789,98.4324646 +789.5,98.27626038 +790,98.33323669 +790.5,98.40023804 +791,98.5348587 +791.5,98.67603302 +792,98.91829681 +792.5,99.10044861 +793,99.17909241 +793.5,99.26438141 +794,99.34832764 +794.5,99.31990051 +795,99.27350616 +795.5,99.26464081 +796,99.24629211 +796.5,99.10198212 +797,98.99059296 +797.5,98.85362244 +798,98.67990875 +798.5,98.63317871 +799,98.70613098 +799.5,98.72871399 +800,98.85072327 +800.5,98.92288208 +801,99.03604126 +801.5,99.20272064 +802,99.20328522 +802.5,99.17562866 +803,99.16133881 +803.5,99.24816895 +804,99.17129517 +804.5,99.10821533 +805,99.05590057 +805.5,98.95515442 +806,98.60359192 +806.5,98.35285187 +807,97.93200684 +807.5,97.71168518 +808,97.57345581 +808.5,97.64571381 +809,97.75281525 +809.5,98.09890747 +810,98.38904572 +810.5,98.56027222 +811,98.7377243 +811.5,98.72770691 +812,98.56394196 +812.5,98.46011353 +813,98.34515381 +813.5,98.29756927 +814,98.27790833 +814.5,98.25579071 +815,98.30797577 +815.5,98.3145752 +816,98.15906525 +816.5,98.05577087 +817,97.84544373 +817.5,97.71379089 +818,97.63305664 +818.5,97.63643646 +819,97.71598816 +819.5,97.62771606 +820,97.70117188 +820.5,97.74869537 +821,97.9016037 +821.5,97.90232849 +822,98.03433228 +822.5,98.12084961 +823,98.08516693 +823.5,98.11482239 +824,98.11250305 +824.5,98.03469086 +825,97.94036102 +825.5,98.0965271 +826,98.27873993 +826.5,98.46389008 +827,98.69721985 +827.5,98.85894012 +828,98.93021393 +828.5,98.89567566 +829,98.63631439 +829.5,98.49500275 +830,98.43567657 +830.5,98.29528809 +831,98.02468109 +831.5,97.80431366 +832,97.33279419 +832.5,96.59515381 +833,95.84128571 +833.5,94.99229431 +834,94.33330536 +834.5,94.02957916 +835,94.16448212 +835.5,94.6627655 +836,95.39266205 +836.5,96.19602203 +837,97.05699921 +837.5,97.79457092 +838,98.29811096 +838.5,98.43067169 +839,98.3783493 +839.5,98.31827545 +840,98.05306244 +840.5,97.87277222 +841,97.73587036 +841.5,97.70256042 +842,97.73091125 +842.5,98.06996918 +843,98.33365631 +843.5,98.55279541 +844,98.77254486 +844.5,98.78225708 +845,98.85475922 +845.5,98.68682861 +846,98.35428619 +846.5,98.2307663 +847,98.06269836 +847.5,98.02948761 +848,98.01639557 +848.5,98.34991455 +849,98.62162018 +849.5,98.81937408 +850,98.93099213 +850.5,99.03549194 +851,98.93656158 +851.5,98.81784821 +852,98.66210175 +852.5,98.34527588 +853,98.11716461 +853.5,97.81734467 +854,97.65375519 +854.5,97.69297028 +855,97.68740845 +855.5,97.98963928 +856,98.20220947 +856.5,98.46676636 +857,98.51070404 +857.5,98.62549591 +858,98.43197632 +858.5,98.22462463 +859,97.92352295 +859.5,97.40486145 +860,97.13057709 +860.5,96.77129364 +861,96.77594757 +861.5,96.79536438 +862,97.08629608 +862.5,97.19421387 +863,96.92913818 +863.5,96.76654053 +864,96.02629852 +864.5,95.32683563 +865,94.68447876 +865.5,94.47962952 +866,94.56920624 +866.5,95.06407928 +867,95.39228821 +867.5,95.73034668 +868,95.45861816 +868.5,95.16710663 +869,94.95645142 +869.5,95.12712096999999 +870,95.11745453 +870.5,95.14229584 +871,94.99565125 +871.5,93.28001404 +872,90.44902039 +872.5,85.44277954 +873,76.62340546 +873.5,63.92355728 +874,48.34553528 +874.5,32.72177124 +875,18.56053543 +875.5,8.367739677 +876,2.870337009 diff --git a/corgidrp/data/filter_curves/transmission_ID-05_1A_v0.csv b/corgidrp/data/filter_curves/transmission_ID-05_1A_v0.csv new file mode 100644 index 00000000..a368566b --- /dev/null +++ b/corgidrp/data/filter_curves/transmission_ID-05_1A_v0.csv @@ -0,0 +1,51 @@ +# Filter transmission curve produced by Materion. +#Truncated at T<1% due to measurement noise. +#True CGI curve may differ slightly (TBD) due to difference in f/number in Materion test setup and vacuum vs. air. +lambda_nm,%T +543,1.148140907 +543.5,3.164474249 +544,7.365199089 +544.5,15.11584377 +545,26.38548851 +545.5,40.78945923 +546,57.00786209 +546.5,71.64466858 +547,82.86642456 +547.5,89.76339722 +548,92.97943115 +548.5,94.11235046 +549,94.53853607 +549.5,94.97335815 +550,95.40241241 +550.5,95.5278244 +551,95.27069855 +551.5,94.67111969 +552,94.10951996 +552.5,93.82350159 +553,93.96655273 +553.5,94.22510529 +554,94.30596924 +554.5,93.95028687 +555,93.22734833 +555.5,92.43160248 +556,91.85984802 +556.5,91.59857178 +557,91.46416473 +557.5,91.15903473 +558,90.62069702 +558.5,89.95900726 +559,89.48021698 +559.5,89.27760315 +560,89.16210175 +560.5,88.74117279 +561,87.78595734 +561.5,85.9458313 +562,82.51617432 +562.5,76.75866699 +563,67.63407898 +563.5,54.81229401 +564,40.4200058 +564.5,26.35173798 +565,14.67542362 +565.5,6.932487488 +566,2.652906179 diff --git a/corgidrp/data/filter_curves/transmission_ID-06_1B_v0.csv b/corgidrp/data/filter_curves/transmission_ID-06_1B_v0.csv new file mode 100644 index 00000000..15311dd5 --- /dev/null +++ b/corgidrp/data/filter_curves/transmission_ID-06_1B_v0.csv @@ -0,0 +1,48 @@ +# Filter transmission curve produced by Materion. +#Truncated at T<1% due to measurement noise. +#True CGI curve may differ slightly (TBD) due to difference in f/number in Materion test setup and vacuum vs. air. +lambda_nm,%T +563.5,1.451493979 +564,4.515580654 +564.5,11.76853561 +565,25.17383194 +565.5,45.41886902 +566,67.71577454 +566.5,84.98130035 +567,92.03194427 +567.5,92.51402283 +568,91.65807343 +568.5,91.73574829 +569,92.72997284 +569.5,94.11154938 +570,95.14994049 +570.5,95.72999573 +571,95.99905396 +571.5,95.8134613 +572,95.31806946 +572.5,94.67775726 +573,94.37583923 +573.5,94.60755157 +574,95.20894623 +574.5,95.70319366 +575,95.7898941 +575.5,95.45360565 +576,95.04876709 +576.5,94.85934448 +577,94.85010529 +577.5,94.80921936 +578,94.26318359 +578.5,93.04077148 +579,91.59568787 +579.5,90.74327087 +580,90.9562149 +580.5,91.92352295 +581,92.78236389 +581.5,92.55296326 +582,90.2035141 +582.5,83.81760406 +583,70.45198059 +583.5,50.35218048 +584,27.84416008 +584.5,10.93383026 +585,3.046211004 diff --git a/corgidrp/data/filter_curves/transmission_ID-07_1C_v0.csv b/corgidrp/data/filter_curves/transmission_ID-07_1C_v0.csv new file mode 100644 index 00000000..c40b33de --- /dev/null +++ b/corgidrp/data/filter_curves/transmission_ID-07_1C_v0.csv @@ -0,0 +1,49 @@ +# Filter transmission curve produced by Materion. +#Truncated at T<1% due to measurement noise. +#True CGI curve may differ slightly (TBD) due to difference in f/number in Materion test setup and vacuum vs. air. +lambda_nm,%T +583.5,1.561838031 +584,5.457098484 +584.5,16.34264946 +585,40.28140259 +585.5,74.82595825 +586,93.52374268 +586.5,94.68582916 +587,93.90279388 +587.5,92.87062836 +588,92.6352005 +588.5,94.1960144 +589,96.23678589 +589.5,97.15402222 +590,96.92851257 +590.5,95.53081512 +591,93.58590698 +591.5,92.25596619 +592,92.45136261 +592.5,93.88538361 +593,95.20861816 +593.5,95.76273346 +594,95.31964111 +594.5,93.58731079 +595,90.53212738 +595.5,87.55470276 +596,86.60009766 +596.5,88.40273285 +597,91.7831192 +597.5,94.45657349 +598,94.8568573 +598.5,93.220047 +599,91.03125 +599.5,89.73204803 +600,89.68844604 +600.5,90.78850555 +601,91.87247467 +601.5,91.84210968 +602,90.63880157 +602.5,89.06274414 +603,86.11582947 +603.5,77.70343781 +604,55.62945175 +604.5,23.51212692 +605,6.581247807 +605.5,1.783726215 diff --git a/corgidrp/data/filter_curves/transmission_ID-08_2A_v0.csv b/corgidrp/data/filter_curves/transmission_ID-08_2A_v0.csv new file mode 100644 index 00000000..cb2fa12b --- /dev/null +++ b/corgidrp/data/filter_curves/transmission_ID-08_2A_v0.csv @@ -0,0 +1,55 @@ +# Filter transmission curve produced by Materion. +#Truncated at T<1% due to measurement noise. +#True CGI curve may differ slightly (TBD) due to difference in f/number in Materion test setup and vacuum vs. air. +lambda_nm,%T +602,4.636655807 +602.5,18.44475937 +603,45.6701355 +603.5,75.24854279 +604,92.82148743 +604.5,97.49591064 +605,97.62587738 +605.5,96.6824646 +606,95.59482574 +606.5,95.42743683 +607,96.27185822 +607.5,97.14804077 +608,97.52832031 +608.5,98.03383636 +609,98.03119659 +609.5,98.21874237 +610,98.08547211 +610.5,98.17147827 +611,98.26211548 +611.5,97.99932098 +612,97.80449677 +612.5,98.08492279 +613,96.95513153 +613.5,96.17997742 +614,94.90947723 +614.5,95.20867157 +615,95.95687103 +615.5,97.11621094 +616,97.18592072 +616.5,96.20800781 +617,94.65257263 +617.5,94.21311951 +618,94.76306152 +618.5,96.14246368 +619,97.43959045 +619.5,98.14369202 +620,97.23971558 +620.5,96.76680756 +621,96.37485504 +621.5,97.25893402 +622,97.24951172 +622.5,96.31407928 +623,95.02629852 +623.5,93.1809845 +624,81.7776947 +624.5,56.93593597 +625,29.34465027 +625.5,12.46787262 +626,5.478643417 +626.5,2.291638136 +627,1.327066422 diff --git a/corgidrp/data/filter_curves/transmission_ID-09_2B_v0.csv b/corgidrp/data/filter_curves/transmission_ID-09_2B_v0.csv new file mode 100644 index 00000000..f70a7cfb --- /dev/null +++ b/corgidrp/data/filter_curves/transmission_ID-09_2B_v0.csv @@ -0,0 +1,42 @@ +# Filter transmission curve produced by Materion. +#Truncated at T<1% due to measurement noise. +#True CGI curve may differ slightly (TBD) due to difference in f/number in Materion test setup and vacuum vs. air. +lambda_nm,%T +630,2.553656578 +630.5,8.19055748 +631,19.72608948 +631.5,38.37952423 +632,59.34857178 +632.5,77.00325775 +633,88.63591003 +633.5,93.0453186 +634,92.14408875 +634.5,88.56638336 +635,85.49575043 +635.5,84.28400421 +636,84.51153564 +636.5,85.26911163 +637,87.07287598 +637.5,90.13430023 +638,93.22301483 +638.5,94.39846802 +639,93.27830505 +639.5,90.47745514 +640,86.89321136 +640.5,84.13012695 +641,83.66394806 +641.5,85.64718628 +642,88.91687775 +642.5,92.02707672 +643,94.17041779 +643.5,95.04003906 +644,94.95652008 +644.5,94.36031342 +645,92.5362854 +645.5,87.32347107 +646,76.77319336 +646.5,60.79568863 +647,41.72370911 +647.5,22.73674202 +648,8.722807884 +648.5,2.175623178 diff --git a/corgidrp/data/filter_curves/transmission_ID-10_2C_v0.csv b/corgidrp/data/filter_curves/transmission_ID-10_2C_v0.csv new file mode 100644 index 00000000..3816980e --- /dev/null +++ b/corgidrp/data/filter_curves/transmission_ID-10_2C_v0.csv @@ -0,0 +1,23 @@ +# Filter transmission curve produced by Materion. +#Truncated at T<1% due to measurement noise. +#True CGI curve may differ slightly (TBD) due to difference in f/number in Materion test setup and vacuum vs. air. +lambda_nm,%T +651.5,4.113111973 +652,12.86722851 +652.5,26.67666435 +653,43.87610245 +653.5,62.79453659 +654,78.4229126 +654.5,87.15448761 +655,90.04803467 +655.5,90.97179413 +656,91.26333618 +656.5,90.92850494 +657,89.92632294 +657.5,87.68118286 +658,81.8968811 +658.5,70.61357117 +659,54.88114929 +659.5,36.73434448 +660,18.66839027 +660.5,6.087434769 diff --git a/corgidrp/data/filter_curves/transmission_ID-11_3A_v0.csv b/corgidrp/data/filter_curves/transmission_ID-11_3A_v0.csv new file mode 100644 index 00000000..ce4461ff --- /dev/null +++ b/corgidrp/data/filter_curves/transmission_ID-11_3A_v0.csv @@ -0,0 +1,64 @@ +# Filter transmission curve produced by Materion. +#Truncated at T<1% due to measurement noise. +#True CGI curve may differ slightly (TBD) due to difference in f/number in Materion test setup and vacuum vs. air. +lambda_nm,%T +665.5,1.134022355 +666,3.027052641 +666.5,7.560984612 +667,16.21899223 +667.5,29.89443016 +668,46.38880157 +668.5,63.80021667 +669,79.69788361 +669.5,90.42789459 +670,95.97458649 +670.5,97.93623352 +671,98.5001297 +671.5,98.79405212 +672,99.01778412 +672.5,99.14266205 +673,99.12802887 +673.5,99.03844452 +674,98.95560455 +674.5,98.72371674 +675,98.53421783 +675.5,98.23595428 +676,97.87637329 +676.5,97.49089813 +677,97.24849701 +677.5,97.21984863 +678,97.39849091 +678.5,97.6439743 +679,97.81321716 +679.5,97.78489685 +680,97.55740356 +680.5,97.41259003 +681,97.40080261 +681.5,97.60211182 +682,97.93234253 +682.5,98.24222565 +683,98.38591003 +683.5,98.33356476 +684,98.1483078 +684.5,97.78238678 +685,97.47267151 +685.5,97.15261841 +686,96.98886871 +686.5,97.0112915 +687,97.21164703 +687.5,97.3359375 +688,97.24887085 +688.5,96.73415375 +689,96.3131485 +689.5,96.21191406 +690,96.43402863 +690.5,96.80392456 +691,96.23623657 +691.5,92.87851715 +692,84.25907135 +692.5,68.98257446 +693,48.39720917 +693.5,28.64116669 +694,13.55405903 +694.5,5.081246853 +695,1.736072421 diff --git a/corgidrp/data/filter_curves/transmission_ID-12_3B_v0.csv b/corgidrp/data/filter_curves/transmission_ID-12_3B_v0.csv new file mode 100644 index 00000000..3357eaf2 --- /dev/null +++ b/corgidrp/data/filter_curves/transmission_ID-12_3B_v0.csv @@ -0,0 +1,60 @@ +# Filter transmission curve produced by Materion. +#Truncated at T<1% due to measurement noise. +#True CGI curve may differ slightly (TBD) due to difference in f/number in Materion test setup and vacuum vs. air. +lambda_nm,%T +688.5,1.946741581 +689,5.350462914 +689.5,12.53374386 +690,24.29236221 +690.5,39.639328 +691,57.11380386 +691.5,73.82277679 +692,85.60559845 +692.5,91.84492493 +693,94.04990387 +693.5,94.42072296 +694,94.35018921 +694.5,94.35779572 +695,94.6394043 +695.5,95.1210022 +696,95.76455688 +696.5,96.58153534 +697,97.3102417 +697.5,97.84294128 +698,97.95516968 +698.5,97.83664703 +699,97.59008789 +699.5,97.38980865 +700,97.29090881 +700.5,97.38381958 +701,97.67137146 +701.5,97.94834137 +702,98.11876678 +702.5,97.9318161 +703,97.42292023 +703.5,96.77307892 +704,96.20483398 +704.5,95.9181366 +705,95.98274994 +705.5,96.45253754 +706,97.0042038 +706.5,97.55940247 +707,97.92317963 +707.5,98.04290771 +708,97.94683075 +708.5,97.6178894 +709,97.1673584 +709.5,96.65142059 +710,96.3724823 +710.5,96.27614594 +711,95.8735199 +711.5,94.50344849 +712,91.33155823 +712.5,84.94326019 +713,73.58865356 +713.5,57.71269226 +714,39.10775375 +714.5,21.52568245 +715,9.603467941 +715.5,3.545237064 +716,1.264983535 diff --git a/corgidrp/data/filter_curves/transmission_ID-14_3D_v0.csv b/corgidrp/data/filter_curves/transmission_ID-14_3D_v0.csv new file mode 100644 index 00000000..86f5a4a4 --- /dev/null +++ b/corgidrp/data/filter_curves/transmission_ID-14_3D_v0.csv @@ -0,0 +1,28 @@ +# Filter transmission curve produced by Materion. +#Truncated at T<1% due to measurement noise. +#True CGI curve may differ slightly (TBD) due to difference in f/number in Materion test setup and vacuum vs. air. +lambda_nm,%T +747.5,2.082982779 +748,6.220796585 +748.5,13.98272705 +749,25.13321304 +749.5,38.15190887 +750,52.07556915 +750.5,65.96637726 +751,78.72642517 +751.5,88.97520447 +752,94.90507507 +752.5,97.04955292 +753,97.49756622 +753.5,97.547966 +754,97.27757263 +754.5,96.06228638 +755,93.07421112 +755.5,87.17158508 +756,77.40446471999999 +756.5,64.99837494 +757,51.04321671 +757.5,36.78225708 +758,23.18589783 +758.5,11.5986948 +759,4.058616161 diff --git a/corgidrp/data/filter_curves/transmission_ID-15_3E_v0.csv b/corgidrp/data/filter_curves/transmission_ID-15_3E_v0.csv new file mode 100644 index 00000000..8ac2039f --- /dev/null +++ b/corgidrp/data/filter_curves/transmission_ID-15_3E_v0.csv @@ -0,0 +1,68 @@ +# Filter transmission curve produced by Materion. +#Truncated at T<1% due to measurement noise. +#True CGI curve may differ slightly (TBD) due to difference in f/number in Materion test setup and vacuum vs. air. +lambda_nm,%T +761,2.356164455 +761.5,6.102582932 +762,12.89969349 +762.5,22.58228874 +763,35.16889954 +763.5,49.91805649 +764,65.02502441 +764.5,78.116539 +765,86.63567352 +765.5,90.95330811 +766,92.7857132 +766.5,94.0993042 +767,95.08213043 +767.5,95.8321991 +768,96.0512085 +768.5,95.70610809 +769,94.94276428 +769.5,94.02412415 +770,93.29965973 +770.5,92.91426849 +771,92.78328705 +771.5,93.03421021 +772,93.47348785 +772.5,94.21273804 +773,95.0075531 +773.5,95.58717346 +774,95.59059143 +774.5,94.84735107 +775,93.72834778000001 +775.5,92.77915192 +776,92.27439117 +776.5,92.52194214 +777,93.43658447 +777.5,94.39068604 +778,95.19042206 +778.5,95.69364929 +779,95.81039429 +779.5,95.61376953 +780,95.1807785 +780.5,94.71299744 +781,94.05731201 +781.5,93.27639008 +782,92.81617737 +782.5,92.99130249 +783,93.38832855 +783.5,94.04758453 +784,94.16904449 +784.5,93.63576508 +785,92.43721008 +785.5,91.27432251 +786,90.8195343 +786.5,91.18838501 +787,92.0947113 +787.5,92.65519714 +788,92.28235626 +788.5,90.53547668 +789,87.04727173 +789.5,80.42462158 +790,68.45227814 +790.5,50.90424347 +791,31.63632965 +791.5,14.98308945 +792,5.034407616 +792.5,1.26908803 diff --git a/corgidrp/data/filter_curves/transmission_ID-16_4A_v0.csv b/corgidrp/data/filter_curves/transmission_ID-16_4A_v0.csv new file mode 100644 index 00000000..d62f3084 --- /dev/null +++ b/corgidrp/data/filter_curves/transmission_ID-16_4A_v0.csv @@ -0,0 +1,74 @@ +# Filter transmission curve produced by Materion. +#Truncated at T<1% due to measurement noise. +#True CGI curve may differ slightly (TBD) due to difference in f/number in Materion test setup and vacuum vs. air. +lambda_nm,%T +774,1.503393054 +774.5,3.779611826 +775,8.309972763 +775.5,15.65544415 +776,25.70594215 +776.5,37.66309738 +777,51.50606537 +777.5,65.68690491 +778,78.5421524 +778.5,88.55155945 +779,94.18572235 +779.5,96.49324036 +780,97.04647064 +780.5,97.10809326 +781,97.26959991 +781.5,97.21054077 +782,97.16724396 +782.5,97.19725037 +783,97.15886688 +783.5,97.07201385 +784,96.92201233 +784.5,96.7592392 +785,96.54304504 +785.5,96.44905853 +786,96.46020508 +786.5,96.50248718 +787,96.73768616 +787.5,97.0883255 +788,97.42559814 +788.5,97.68354034 +789,97.79048157 +789.5,97.73381042 +790,97.48413849 +790.5,97.00508118 +791,96.44545746 +791.5,95.81676483 +792,95.3844223 +792.5,95.07421875 +793,94.90450287 +793.5,94.97158051 +794,95.10639954 +794.5,95.36252594 +795,95.45411682 +795.5,95.37888336 +796,95.01003265 +796.5,94.66210938 +797,94.37471008 +797.5,94.11423492 +798,94.25786591 +798.5,94.52485657 +799,94.89575958 +799.5,95.07430267 +800,94.94374847 +800.5,94.28076935 +801,93.53063965 +801.5,92.86895752 +802,92.53860474 +802.5,92.74726868 +803,93.31552124 +803.5,93.34109497 +804,92.45952606 +804.5,90.18874359 +805,86.55696106 +805.5,80.10902405 +806,69.63167572 +806.5,54.95596695 +807,38.22042465 +807.5,22.58443069 +808,10.41745663 +808.5,3.631387949 diff --git a/corgidrp/data/filter_curves/transmission_ID-17_4B_v0.csv b/corgidrp/data/filter_curves/transmission_ID-17_4B_v0.csv new file mode 100644 index 00000000..df57ed59 --- /dev/null +++ b/corgidrp/data/filter_curves/transmission_ID-17_4B_v0.csv @@ -0,0 +1,71 @@ +# Filter transmission curve produced by Materion. +#Truncated at T<1% due to measurement noise. +#True CGI curve may differ slightly (TBD) due to difference in f/number in Materion test setup and vacuum vs. air. +lambda_nm,%T +807,1.204182625 +807.5,3.162686825 +808,7.343564034 +808.5,14.45257187 +809,24.60978889 +809.5,37.52537155 +810,52.61500549 +810.5,67.94036102 +811,80.70885468 +811.5,88.80978394 +812,92.34494019 +812.5,93.37674713 +813,94.07345581 +813.5,94.54816437 +814,94.99471283 +814.5,95.1005249 +815,94.73417664 +815.5,94.10783386 +816,93.57420349 +816.5,93.02722931 +817,92.77297974 +817.5,93.06060028 +818,93.31785583 +818.5,93.69159698 +819,94.25982666 +819.5,94.65058136 +820,95.08589172 +820.5,95.60163879 +821,95.60066986 +821.5,95.23110199 +822,94.70072937 +822.5,93.72721863 +823,92.96554565 +823.5,92.28098297 +824,92.15089417 +824.5,92.54603577 +825,93.4567337 +825.5,94.09523773 +826,95.0124054 +826.5,95.68981171 +827,95.94650269 +827.5,95.79462433 +828,95.30389404 +828.5,94.60430908 +829,93.90944672 +829.5,93.71763611 +830,93.37611389 +830.5,93.89476013 +831,94.08364105 +831.5,94.21252441 +832,93.97090912 +832.5,93.44459534 +833,92.98474884 +833.5,92.70753479 +834,92.84369659 +834.5,93.07475281 +835,93.07562256 +835.5,92.08370209 +836,89.60687256 +836.5,84.52487183 +837,75.20609283 +837.5,60.84946823 +838,43.11647797 +838.5,25.54709625 +839,11.75564098 +839.5,4.041862488 +840,1.16523838 diff --git a/corgidrp/data/filter_curves/transmission_ID-18_4C_v0.csv b/corgidrp/data/filter_curves/transmission_ID-18_4C_v0.csv new file mode 100644 index 00000000..c52a80f8 --- /dev/null +++ b/corgidrp/data/filter_curves/transmission_ID-18_4C_v0.csv @@ -0,0 +1,75 @@ +# Filter transmission curve produced by Materion. +#Truncated at T<1% due to measurement noise. +#True CGI curve may differ slightly (TBD) due to difference in f/number in Materion test setup and vacuum vs. air. +lambda_nm,%T +838.5,2.281103373 +839,5.318284988 +839.5,10.84360409 +840,18.93813515 +840.5,29.8079319 +841,43.190513609999996 +841.5,57.94519806 +842,72.30450439 +842.5,83.36347961 +843,89.83574677 +843.5,92.38195801 +844,93.4364624 +844.5,93.9568634 +845,94.56826782 +845.5,94.81633759 +846,94.91538239 +846.5,94.56040955 +847,93.67848969 +847.5,92.65696716 +848,91.74810028 +848.5,90.90318298 +849,90.3300705 +849.5,90.33866119 +850,91.06642151 +850.5,92.27986145 +851,93.69274902 +851.5,94.80098724 +852,95.55825043 +852.5,95.9524765 +853,95.79483032 +853.5,95.19686127 +854,93.69874573 +854.5,92.26284027 +855,90.83835602 +855.5,89.50224304 +856,88.82529449 +856.5,89.07236481 +857,89.94302368 +857.5,90.75970459 +858,91.42999268 +858.5,91.76212311 +859,91.50287628 +859.5,91.2424469 +860,91.27848816 +860.5,91.71116638 +861,92.62174225 +861.5,93.36694336 +862,94.41060638 +862.5,94.79428864 +863,94.81108856 +863.5,94.24248505 +864,92.94239044 +864.5,91.71135712 +865,90.43691254 +865.5,89.32411957 +866,89.05238342 +866.5,89.22154999 +867,89.72057343 +867.5,89.97161865 +868,89.86342621 +868.5,89.53034973 +869,88.51000214 +869.5,86.52971649 +870,82.41040039 +870.5,74.24715424 +871,60.69789505 +871.5,44.2693634 +872,26.7557354 +872.5,12.78135014 +873,4.538541794 +873.5,1.315397739 diff --git a/corgidrp/data/filter_curves/transmission_ID-21_3C_v0.csv b/corgidrp/data/filter_curves/transmission_ID-21_3C_v0.csv new file mode 100644 index 00000000..accef367 --- /dev/null +++ b/corgidrp/data/filter_curves/transmission_ID-21_3C_v0.csv @@ -0,0 +1,55 @@ +# Filter transmission curve produced by Materion. +#Truncated at T<1% due to measurement noise. +#True CGI curve may differ slightly (TBD) due to difference in f/number in Materion test setup and vacuum vs. air. +lambda_nm,%T +713,1.47617805 +713.5,3.800706148 +714,8.461511612 +714.5,15.99529362 +715,26.27761459 +715.5,39.15308762 +716,53.45459747 +716.5,68.07023621 +717,80.80206299 +717.5,89.79665375 +718,94.92982483 +718.5,96.85245514 +719,97.3427887 +719.5,97.51346588 +720,97.77384949 +720.5,98.13366699 +721,98.47615051 +721.5,98.74281311 +722,98.84688568 +722.5,98.83795166 +723,98.7329483 +723.5,98.51490784 +724,98.29811859 +724.5,98.11035156 +725,97.94398499 +725.5,97.75770569 +726,97.49851227 +726.5,97.2520752 +727,96.88398743 +727.5,96.65181732 +728,96.62328339 +728.5,96.77813721 +729,97.02037811 +729.5,97.28778839 +730,97.53518677 +730.5,97.68135834 +731,97.77599335 +731.5,97.74250031 +732,97.49845123 +732.5,97.13707733 +733,96.41797638 +733.5,95.20082855 +734,92.67784119 +734.5,87.44489288 +735,77.77334595 +735.5,62.90353012 +736,45.57038879 +736.5,28.51318932 +737,14.28209877 +737.5,5.899062634 +738,2.08187151 diff --git a/corgidrp/data/filter_curves/transmission_ID-22_3G_v0.csv b/corgidrp/data/filter_curves/transmission_ID-22_3G_v0.csv new file mode 100644 index 00000000..5ecf8e77 --- /dev/null +++ b/corgidrp/data/filter_curves/transmission_ID-22_3G_v0.csv @@ -0,0 +1,63 @@ +# Filter transmission curve produced by Materion. +#Truncated at T<1% due to measurement noise. +#True CGI curve may differ slightly (TBD) due to difference in f/number in Materion test setup and vacuum vs. air. +lambda_nm,%T +737.5,1.878973484 +738,4.320493698 +738.5,8.791771889 +739,15.50291634 +739.5,24.63331795 +740,36.67280197 +740.5,49.93404007 +741,63.84884644 +741.5,77.20352173 +742,86.7252655 +742.5,92.26239014 +743,94.60433197 +743.5,95.33828735 +744,95.35644531 +744.5,94.82652283 +745,93.70857239 +745.5,92.05451202 +746,90.39134216 +746.5,89.09729767 +747,88.72369385 +747.5,89.42905426 +748,90.93803406 +748.5,92.62509918 +749,94.11195374 +749.5,95.42094421 +750,96.17150116 +750.5,96.28593445 +751,95.47412109 +751.5,94.05625916 +752,92.43273163 +752.5,91.48441315 +753,91.69833374 +753.5,93.05688477 +754,94.55892181 +754.5,95.50753784 +755,95.5157547 +755.5,94.72205353 +756,93.7824707 +756.5,93.04434967 +757,92.60745239 +757.5,92.17529297 +758,91.8886261 +758.5,91.84381104 +759,92.21255493 +759.5,92.73954773 +760,93.11281586 +760.5,93.15596771 +761,92.77539063 +761.5,92.40364075 +762,91.91220093 +762.5,91.22557068 +763,88.26169586 +763.5,81.0640564 +764,67.62430573 +764.5,49.36477661 +765,29.80702209 +765.5,13.75210094 +766,5.071521759 +766.5,1.623491526 diff --git a/corgidrp/fluxcal.py b/corgidrp/fluxcal.py new file mode 100644 index 00000000..c7fdb729 --- /dev/null +++ b/corgidrp/fluxcal.py @@ -0,0 +1,223 @@ +# This module is written to do an absolute flux calibration observing a standard star having CALSPEC data. +import glob +import os +import numpy as np +from astropy.io import fits, ascii +from scipy import integrate +import urllib +import corgidrp + +# Dictionary of anticipated bright and dim CASLPEC standard star names and corresponding fits names +calspec_names= { +# bright standards +'109 Vir': '109vir_stis_005.fits', +'Vega': 'alpha_lyr_stis_011.fits', +'Eta Uma': 'etauma_stis_008.fits', +'Lam Lep': 'lamlep_stis_008.fits', +'KSI2 CETI': 'ksi2ceti_stis_008.fits', +# dim standards +'TYC 4433-1800-1': '1808347_stiswfc_006.fits', +'TYC 4205-1677-1': '1812095_stisnic_008.fits', +'TYC 4212-455-1': '1757132_stiswfc_006.fits', +'TYC 4209-1396-1': '1805292_stisnic_008.fits', +'TYC 4413-304-1': 'p041c_stisnic_010.fits', +'UCAC3 313-62260': 'kf08t3_stisnic_005.fits', +'BPS BS 17447-0067': '1802271_stiswfcnic_006.fits', +'TYC 4424-1286-1': '1732526_stisnic_009.fits', +'GSC 02581-02323': 'p330e_stiswfcnic_007.fits', +'TYC 4207-219-1': '1740346_stisnic_005.fits' +} + +calspec_url = 'https://archive.stsci.edu/hlsps/reference-atlases/cdbs/current_calspec/' + +def get_calspec_file(star_name): + """ + download the corresponding CALSPEC fits file and return the file path + + Args: + star_name (str): + + Returns: + str: file path + """ + if star_name not in calspec_names: + raise ValueError('{0} is not in list of anticipated standard stars {1}, please check naming'.format(star_name, calspec_names.keys()) ) + fits_name = calspec_names.get(star_name) + # TODO: be flexible with the version of the calspec fits file, so essentially, the number in the name should not matter + fits_url = calspec_url + fits_name + try: + calspec_dir = os.path.join(os.path.dirname(corgidrp.config_filepath), "calspec_data") + if not os.path.exists(calspec_dir): + os.mkdir(calspec_dir) + file_name, headers = urllib.request.urlretrieve(fits_url, filename = os.path.join(calspec_dir, fits_name)) + except: + raise Exception("cannot access CALSPEC archive web page and/or download {0}".format(fits_name)) + return file_name + +def get_filter_name(dataset): + """ + return the name of the transmission curve csv file of used color filter + + Args: + dataset (corgidrp.Dataset): dataset of the observed calstar + + Returns: + str: filepath of the selected filter curve + """ + datadir = os.path.join(os.path.dirname(__file__), "data", "filter_curves") + filters = os.path.join(datadir, "*.csv") + filter = dataset[0].ext_hdr['CFAMNAME'] + filter_names = os.listdir(datadir) + + filter_name = [name for name in filter_names if filter in name] + if filter_name == []: + raise ValueError("there is no filter available with name {0}".format(filter)) + else: + return os.path.join(datadir,filter_name[0]) + +def read_filter_curve(filter_filename): + """ + read the transmission curve csv file of the color filters + + Args: + filter_filename (str): file name of the transmission curve data + + Returns: + lambda_nm (np.array): wavelength in unit Angstroem + transmission (np.array): transmission of the filter < 1 + """ + tab = ascii.read(filter_filename, format='csv', header_start = 3, data_start = 4) + lambda_nm = tab['lambda_nm'].data #unit nm + transmission = tab['%T'].data + return lambda_nm * 10 , transmission/100. + +def read_cal_spec(calspec_filename, filter_wavelength): + """ + read the calspec flux density data interpolated on the wavelength grid of the transmission curve + + Args: + calspec_filename (str): file name of the CALSPEC fits file + filter_wavelength (np.array): wavelength grid of the transmission curve in unit Angstroem + + Returns: + np.array: flux density in Jy interpolated on the wavelength grid of the transmission curve + in CALSPEC units erg/(s * cm^2 * AA) + """ + hdulist = fits.open(calspec_filename) + data = hdulist[1].data + hdulist.close() + w = data['WAVELENGTH'] #wavelength in Angstroem + flux = data['FLUX'] + flux = flux[(w<=filter_wavelength[-1]) & (w>=filter_wavelength[0])] #erg/(s*cm^2*AA) + w = w[(w<=filter_wavelength[-1]) & (w>=filter_wavelength[0])] + + #interpolate on transmission curve wavelengths + flux_inter = np.interp(filter_wavelength, w, flux) + + return flux_inter + +def calculate_band_flux(filter_curve, calspec_flux, filter_wavelength): + """ + calculate the average band flux of a calspec source in the filter band, see convention A in Gordon et al. (2022) + TBC if needed at all + + Args: + filter_curve (np.array): filter transmission curve over the filter_wavelength + calspec_flux (np.array): converted flux in units of erg/(s*cm^2*AA) of the calpec source in the filter band + filter_wavelength (np.array): wavelengths in units Angstroem in the filter band + + Returns: + float: average band flux of the calspec star in unit erg/(s*cm^2*AA) + """ + multi_flux = calspec_flux * filter_curve * filter_wavelength + multi_band = filter_curve * filter_wavelength + aver_flux = integrate.simpson(multi_flux, x=filter_wavelength)/integrate.simpson(multi_band, x=filter_wavelength) + + return aver_flux + +def calculate_effective_lambda(filter_curve, calspec_flux, filter_wavelength): + """ + calculate the effective wavelength of a calspec source in the filter band, see convention A in Gordon et al. (2022) + TBC if needed at all + + Args: + filter_curve (np.array): filter transmission curve over the filter_wavelength + calspec_flux (np.array): converted flux in units of the calpec source in the filter band + filter_wavelength (np.array): wavelengths in units nm in the filter band + + Returns: + float: effective wavelength in unit Angstroem + """ + multi_flux = calspec_flux * filter_curve * np.square(filter_wavelength) + multi_band = calspec_flux * filter_curve * filter_wavelength + eff_lambda = integrate.simpson(multi_flux, x=filter_wavelength)/integrate.simpson(multi_band, x=filter_wavelength) + + return eff_lambda + +def calculate_pivot_lambda(filter_curve, filter_wavelength): + """ + calculate the reference pivot wavelength of the filter band, see convention B in Gordon et al. (2022) + + Args: + filter_curve (np.array): filter transmission curve over the filter_wavelength + filter_wavelength (np.array): wavelengths in unit Angstroem in the filter band + + Returns: + float: pivot wavelength in unit Angstroem + """ + multi_flux = filter_curve * filter_wavelength + multi_band = filter_curve / filter_wavelength + piv_lambda = np.sqrt(integrate.simpson(multi_flux, x=filter_wavelength)/integrate.simpson(multi_band, x=filter_wavelength)) + + return piv_lambda + +def calculate_flux_ref(filter_wavelength, calspec_flux, wave_ref): + """ + calculate the flux at the reference wavelength of the filter band + + Args: + filter_wavelength (np.array): wavelengths in unit Angstroem in the filter band + calspec_flux (np.array): converted flux in units of the calpec source in the filter band + wave_ref (float): reference wavelength in unit Angstroem + + Returns: + float: flux at reference wavelength in unit erg/(s*cm^2*AA) + """ + + flux_ref = np.interp(wave_ref, filter_wavelength, calspec_flux) + return flux_ref + + +def compute_color_cor(filter_curve, filter_wavelength , flux_ref, wave_ref, flux_source): + """ + Compute the color correction factor K given the filter bandpass, reference spectrum (CALSPEC), + and source spectrum model. To use this color correction, divide the flux density + for a band by K. Such color corrections are needed to compute the correct + flux density at the reference wavelength for a source with the flux_source + spectral shape in the photometric convention that provides the flux density + at a reference wavelength (convention B, see Gordon et al. 2022, The Astronomical Journal 163:267, for details). + Thus the flux density value found by applying the calibration factor on the found detected electrons + of an arbitrary source should be divided by K (for the appropriate filter and spectral shape) + to produce the flux density at the reference wavelength of the filter. + The color correction adjusts the calibration factor to align the reference spectral shape + with the current source, which results in the correct flux density at the reference wavelength. + + Args: + filter_curve (np.array): transmission of the filter bandpass + filter_wavelength (np.array): the wavelengths of the filter bandpass, flux_ref, and flux_source in unit Angstroem + flux_ref (np.array): reference flux density F(lambda) as a function of wavelength + wave_ref (float): reference wavelength in unit Angstroem + flux_source (np.array): source flux density F(lambda) as a function of wavelength in CALSPEC unit erg/(s * cm^2 * AA) + + Returns: + float: color correction factor K + """ + # get the flux densities at the reference wavelength + flux_source_lambda_ref = calculate_flux_ref(filter_wavelength, flux_source, wave_ref) + flux_ref_lambda_ref = calculate_flux_ref(filter_wavelength, flux_ref, wave_ref) + + # compute the top and bottom integrals + int_source = integrate.simpson(filter_wavelength * filter_curve * flux_source / flux_source_lambda_ref, x=filter_wavelength) + int_ref = integrate.simpson(filter_wavelength * filter_curve * flux_ref / flux_ref_lambda_ref, x=filter_wavelength) + + return int_source / int_ref diff --git a/corgidrp/l4_to_tda.py b/corgidrp/l4_to_tda.py new file mode 100644 index 00000000..c48c859d --- /dev/null +++ b/corgidrp/l4_to_tda.py @@ -0,0 +1,85 @@ +# A file that holds the functions that transmogrify l4 data to TDA (Technical Demo Analysis) data +import corgidrp.fluxcal as fluxcal + +def determine_color_cor(input_dataset, ref_star, source_star): + """ + determine the color correction factor of the observed source + at the reference wavelength of the used filter band and put it into the header. + We assume that each frame in the dataset was observed with the same color filter. + + Args: + input_dataset (corgidrp.data.Dataset): a dataset of Images (L2b-level) + ref_star (str): either the fits file path of the known reference flux (usually CALSPEC), + or the (SIMBAD) name of a CALSPEC star + source_star (str): either the fits file path of the flux model of the observed source in + CALSPEC units (erg/(s * cm^2 * AA) and format or the (SIMBAD) name of a CALSPEC star + + Returns: + corgidrp.data.Dataset: a version of the input dataset with updated header including + the reference wavelength and the color correction factor + """ + color_dataset = input_dataset.copy() + # get the filter name from the header keyword 'CFAMNAME' + filter_name = fluxcal.get_filter_name(color_dataset) + # read the transmission curve from the color filter file + wave, filter_trans = fluxcal.read_filter_curve(filter_name) + # calculate the reference wavelength of the color filter + lambda_ref = fluxcal.calculate_pivot_lambda(filter_trans, wave) + + # ref_star/source_star is either the star name or the file path to fits file + if ref_star.split(".")[-1] == "fits": + calspec_filepath = ref_star + else: + calspec_filepath = fluxcal.get_calspec_file(ref_star) + if source_star.split(".")[-1] == "fits": + source_filepath = source_star + else: + source_filepath = fluxcal.get_calspec_file(source_star) + + # calculate the flux from the user given CALSPEC file binned on the wavelength grid of the filter + flux_ref = fluxcal.read_cal_spec(calspec_filepath, wave) + # we assume that the source spectrum is a calspec standard or its + # model data is in a file with the same format and unit as the calspec data + source_sed = fluxcal.read_cal_spec(source_filepath, wave) + #Calculate the color correction factor + k = fluxcal.compute_color_cor(filter_trans, wave, flux_ref, lambda_ref, source_sed) + + # write the reference wavelength and the color correction factor to the header (keyword names tbd) + history_msg = "the color correction is calculated and added to the header {0}".format(str(k)) + # update the header of the output dataset and update the history + color_dataset.update_after_processing_step(history_msg, header_entries = {"LAM_REF": lambda_ref, "COL_COR": k}) + + return color_dataset + +def update_to_tda(input_dataset): + """ + Updates the data level to TDA (Technical Demo Analysis). Only works on L4 data. + + Currently only checks that data is at the L4 level + + Args: + input_dataset (corgidrp.data.Dataset): a dataset of Images (L4-level) + + Returns: + corgidrp.data.Dataset: same dataset now at TDA-level + """ + # check that we are running this on L1 data + for orig_frame in input_dataset: + if orig_frame.ext_hdr['DATA_LEVEL'] != "L4": + err_msg = "{0} needs to be L4 data, but it is {1} data instead".format(orig_frame.filename, orig_frame.ext_hdr['DATA_LEVEL']) + raise ValueError(err_msg) + + # we aren't altering the data + updated_dataset = input_dataset.copy(copy_data=False) + + for frame in updated_dataset: + # update header + frame.ext_hdr['DATA_LEVEL'] = "TDA" + # update filename convention. The file convention should be + # "CGI_[datalevel_*]" so we should be same just replacing the just instance of L1 + frame.filename = frame.filename.replace("_L4_", "_TDA_", 1) + + history_msg = "Updated Data Level to TDA" + updated_dataset.update_after_processing_step(history_msg) + + return updated_dataset \ No newline at end of file diff --git a/tests/test_data/bd_75d325_stis_006.fits b/tests/test_data/bd_75d325_stis_006.fits new file mode 100644 index 00000000..b0627aa2 --- /dev/null +++ b/tests/test_data/bd_75d325_stis_006.fits @@ -0,0 +1,232 @@ +SIMPLE = T / BITPIX = 16 / NAXIS = 0 / EXTEND = T /FITS extensions present? TARGETID= 'BD75 ' / DBTABLE = 'CRSPECTRUM' / MAPKEY = 'calspec ' / AIRMASS = 0.00000 /Mean airmass of the observation DESCRIP = 'Standard star flux with an HST/STIS calibration------' / SOURCE = 'Flux scale of Bohlin, et al.2020, AJ, 160, 21' / USEAFTER= 'Jan 01 2000 00:00:00' / COMMENT = 'HST Flux scale is based on TMAP AND TLUSTY WD NLTE MODELS' / PEDIGREE= 'INFLIGHT 1997 to 2022' / HISTORY FILE WRITTEN BY stismrg.PRO ON 23-Sep-2022 08:45:55.00 HISTORY FILE WRITTEN BY STISREDUCE.PRO ON 23-Sep-2022 08:45:54.00 HISTORY coadd lst for G230LB from dir=dat/: HISTORY o4a506010 o3wy02010 oa8b01040 oa8b010k0 oa8b11030 HISTORY EPOCH: 1997.138:16:45:45-2009.215:06:37:35 HISTORY gwidth for G230LB flux cal=11 w/ /Users/bohlin/stisidl/scal/sens11_g230lHISTORY SYS-ERROR is the broadband ~1% SYSTEMATIC UNCERTAINTY of STIS fluxes. HISTORY Bohlin(2014,PASP,126,711). BOTH THE STAT-ERR AND SYS-ERR ARE 1-SIGMA.HISTORY Net & Flux corr for time(2019,AJ,158,211)&CTE loss(2022, CTE update, in HISTORY coadd lst for G430L from dir=dat/: HISTORY o3wy02030 o4a5050k0 oeju01010 oeju01020 oeju02010 oeju02020 oeju03010 HISTORY oeju03020 HISTORY EPOCH: 1997.138:16:58:53-2022.103:07:47:15 HISTORY gwidth for G430L flux cal=11 w/ /Users/bohlin/stisidl/scal/sens11_g430l.HISTORY Net and Flux corr for time(2019,AJ,158,211)&CTE loss(2022, CTE update, iHISTORY MERGE POINT = 3065.0 HISTORY coadd lst for G750L from dir=dat/: HISTORY o4a505010 o49x03020 oeju01070 oeju02070 oeju03070 HISTORY EPOCH: 1997.268:20:55:21-2022.103:08:44:47 HISTORY gwidth for G750L flux cal=11 w/ /Users/bohlin/stisidl/scal/sens11_g750l.HISTORY MERGE POINT = 5450.0 HISTORY HISTORY HISTORY HISTORY Units: Angstroms(A) and erg s-1 cm-2 A-1 HISTORY Written by MAKE_STIS_CALSPEC.pro 25-Oct-2022 HISTORY Sources for this spectrum: HISTORY ---------------- ---------------------- ---------- HISTORY WAVELENGTH RANGE SOURCE FILE HISTORY ---------------- ---------------------- ---------- HISTORY 1140 1785 FOS BLUE BD_75D325_FOS_003 HISTORY 1785 10237 STIS bd_75d325.mrg HISTORY All wavelengths are in vacuum w/ model adjusted for radial vel= -54.0 HISTORY CHANGES from previous version: HISTORY CTE update: STIS ISR 2022-07 HISTORY For details see: HISTORY http://www.stsci.edu/hst/instrumentation/reference- HISTORY data-for-calibration-and-tools/astronomical- HISTORY catalogs/calspec FILENAME= 'bd_75d325_stis_006.fits' / WMIN = 1140.59997559 /Minimum Wavelength WMAX = 10237.6640620 /Maximum Wavelength END XTENSION= 'BINTABLE' /Written by IDL: Tue Oct 25 10:50:06 2022 BITPIX = 8 / NAXIS = 2 /Binary table NAXIS1 = 30 /Number of bytes per row NAXIS2 = 3359 /Number of rows PCOUNT = 0 /Random parameter count GCOUNT = 1 /Group count TFIELDS = 7 /Number of columns EXTNAME = 'SCI ' / EXTVER = 1 / INHERIT = T / TFORM1 = '1D ' /Real*8 (double precision) TTYPE1 = 'WAVELENGTH' /Label for column 1 TUNIT1 = 'ANGSTROMS' /Units of column 1 TDISP1 = 'G10.4 ' /Display format for column 1 TFORM2 = '1E ' /Real*4 (floating point) TTYPE2 = 'FLUX ' /Absolutely calibrated net spectrum TUNIT2 = 'FLAM ' /Units of column 2 TDISP2 = 'E12.4 ' /Display format for column 2 TFORM3 = '1E ' /Real*4 (floating point) TTYPE3 = 'STATERROR' /Statistical flux error TUNIT3 = 'FLAM ' /Units of column 3 TDISP3 = 'E12.4 ' /Display format for column 3 TFORM4 = '1E ' /Real*4 (floating point) TTYPE4 = 'SYSERROR' /Systematic flux error=0.01*FLAM TUNIT4 = 'FLAM ' /Units of column 4 TDISP4 = 'E12.4 ' /Display format for column 4 TFORM5 = '1E ' /Real*4 (floating point) TTYPE5 = 'FWHM ' /FWHM spectral resolution TUNIT5 = 'ANGSTROMS' /Units of column 5 TDISP5 = 'G6.2 ' /Display format for column 5 TFORM6 = '1I ' /Integer*2 (short integer) TTYPE6 = 'DATAQUAL' /Data quality: 1=good, 0=bad TUNIT6 = 'NONE ' /Units of column 6 TDISP6 = 'I2 ' /Display format for column 6 TFORM7 = '1E ' /Real*4 (floating point) TTYPE7 = 'TOTEXP ' /Total exposure time TUNIT7 = 'SEC ' /Units of column 7 TDISP7 = 'G10.2 ' /Display format for column 7 END @f`.7E,,&|,?@f`.,,+=?@f`.Y_,@,%?@f`.[,*-,?@f`.,,r?@f`.[,,`,VU?@f`.U,8,'4,?@f`.p%,Z,?@f`.,,E?@.,O,c?h@.p,#,ձ?@.8',t,/?@.<,,!?@.,u,?@ +.߭/,o5,ð?@.ݻv,g,z?@@.s,`?,?4@.-,W,w?4@.;,P:a, 2+?@.p,L#+,?@".H,^_/,?@&.;8,_,H?@*.Р,XC,po?@..,Vq,?@2. +,Nɰ,?4@7.{,6j_,?0@;.q,-,?@?.c,'dc, ?@C.» ,j,wx?@G.",u+c?@K. ,(,i?@O3@.Iw,,?h@S3@.U>,t,?@W3@.t,,j?@[3@.B,+?@_3@.,g+j?@c3@.h,>+*?@g3@.~,[,b?@kL.,CB,g?4@of`.,+t?0@sf`.,v,c?@wf`.˪*+,?@{f`.EL+Aj+`?@f`.++-?@. +j+?4@.y+IW+?4@.p++-8?@.c+a^+>q?@.+Zd+h?@.+P+슷?@.:+ک+J?@@.;+R+?4@.i+߿+Jx?4@.tV+#+ ?@.լ+Te+?@.++?@.+C+?@.R++4y?4@.m+Cr+r?0@.wN++?@.r+U:+z?@.+E+ѿ\?@.gR++?@.p5+ib+ɒ?@3@.;++L?h@3@.++3?@3@.~++ڪ?@3@.~+c+\?@3@.h^++?@L.++֭?4@f`.s+H+SN?0@f`. ++c?@f`.R+#+?@f`.Iz+h=+?@f`-i6+-+o?@-ǰ+*ܼ?4@.*$+KZ+]?4@.++ ?@ .Bl+,+h;?@.Ϣ+:+)?@.vT+~)+>?@.+]+$.?h@.u'+P+߾]?@ .+f+?@$.EB+>+?@(.K+:+-?@,.qD++J?@1.=C+TV+}?d@5.+o+ٕ>?@9.zQ+=+d?@=. ++/A+ؙ?@A.pg+@+!m?@E.P++L1?4@I3@.8++%?4@M3@.V++?@Q3@.9+D+?@U3@.+s{+w?@Y3@.hJ+Y%+?@]L.j<+Xm+D?4@af`.+mV+?0@ef`. +g+Y?@if`.bM+Q|+$?@mf`.i+S&+?@q.+eU:+0?4@u.lw+k+h?4@y.+w +?@}.{+r+k4?@.+o<+]?@.~+ng+?@. +hb+?h@.o+l]+w+?@.{6+e+?@.u+^.+C?@.e=+e4+C|?@.+nG+ ?4@.P+i+?0@.+g+g?@.l+f +?@.r+c@+P?@.B+Z+ZG?@3@.+^+i?h@3@.|+k{+?@3@.F+k-+?@3@.f+h+z$?@3@.+e8f+??@f`.+_m+/?d@f`.3+[+>?@f`.+]:+1?@f`.8+[:+C?@f`. +Z6+o?@ހ. +W+[X+:?4@♠.+Y+?4@晠.P+[`+4?@Ꙡ.y$+bN+c?@.i+f+ϙ?@@. +{+\9+?4@..9+c]++?4@.T+aV+[?@.+[C+?@.+^B+cO?@.\++\+´*?@ .+Y1+?d@.%D+T+?@.-+Wu+?@.x+]j+?@.!+Z#+?@3@.$ +S!+6?h@#3@.q+[B+-p?@'3@.+kd+q?@+3@.Ht+u5+{?@/3@.X+wD+Ԑy?@33@.@+v+0?@7f`.+w+ث?d@;f`.+f+֟?@?f`.j+X{+ƐZ?@Cf`.3i+U(U+r5?@Gf`.wB+[}+u?@K.+`+-!?h@O.+\+c?@S.+Mq+?@W.]+K+?@[.3 +Mx+xt?@_@.~+Qw+?4@c.s+?@.E+=X+?@.+Dr+]?@3@.D+E&+cn?h@3@.+:t+F+=by+[ ?@3@.+?Xw+?@ 3@.+<2+?@ 3@.+;+&?@f`.+:+?d@f`.+8S+]V?@f`.y+1+?@f`.+5_+?@!f`.0 +: +?@%.+=w"+v?4@).h+>+7?4@-.i>+5ql+?@1.T+1 +n?@5.x+9+~?@9.|?+@|+3?@=@.x+?+?4@A.kl+D+:?4@E.n+=+{?@I.e+,U1+d?@M.ga9+)Z+?@Q.xD+/2e+?@V.l=+*b+;?d@Z.+4+ ?@^.+7Z+Kk?@b.+8E+W?@f.r+6t+ ?@j.z+/A[+< ?@n3@.fj+'!+W?h@r3@.t+,]+f?@v3@.h#++1+M?@z3@._T+1+?@~3@.n+9T+?@3@.q_+:n~+5,?@f`.x +<+z?d@f`.n+,}+?@f`.q++y+ ?@f`.j+3A0+F?@f`.+9+t!?@f`.&+:`+&h?@.9+7A;+^(?4@.tbS+1`+?4@.nЬ+-Ջ+?@.f+$}W+MZ?@.W=++v?@.^++Z?@.zG++?+0?@.M+.+{?h@.[+/ ++?@.vv+(+p?@.e$k+!h3+Y;?@.a+ 1h+ ?@.w+(+?@.p%+&+cA?4@.gR+"9+?0@.{++MY+?@.+*r+?@.p+$H+?@.nM+#Z-+2?@.]2+g+&?@.q*+%o+g?4@3@.v+&k+ ?4@3@.v+%+q]?@3@.[++?@3@.U++b+?@3@.O++i?@3@.J+d+g?@ 3@.lN+!+]?@f.o+#>+?h@f.o+++ ?@f.~+'6+*?@f.iS+F+'?@f.gA++?@#f.fϣ+L+]?@'f.h++?@+.`S+N+7?h@/.POr+H+?@3.Q+?+t?@7.g+x+i?@;.i+B+ ?@?.rha+!t+%?@C.l+V+?@G.b+X+?@K@.`B+L+dk?0@O.[4+il+?4@S.a+%+?@W.M+1.+I?@[.O+i+ ?@_._\++?@c.d+e+d?@g.jz+*+y?@k`.h]++V?0@p.i`+?++p?4@t.f#++D?@x.V5+%+ ?@|.Sc++e?@.PM+]+7a?@.H++?@.Y+e+3?@.VW.+jq+?@._+r+Θ?@3@.W+ց+9?h@3@.Jʴ++g?@3@.L++?@3@.S+T+C?@3@.F+ e+{?@3@.IJ+ V+?@3@.P+ w+?@3@.H?+ +?@3@.? + 5+vv?@3@.H+ +r?@f`.F+ o+s?d@f`.E_+ 3+}?@f`.Sv+t+?@f`.T+@+A?@f`.O7L+r+9?@f`.D!+ +g+|B{?@f`.I+ B+?@f`.TU++{?@f`.T(++G?@f`.U~++?@h.; +-+q?@l.5Sa+ =+i<?@p.> +J+t?@t.Eo+ܶ+}ۯ?@x.9Y+ K+na?@|.=({+ 98+sA?@.;Z++q?@.Hg+ +?@.Q!++(?@.N[+;+ ?d@.O++d?@.V+"[+'?@.R-+ +c?@.Jq+/+>?@.IF5++_?@.L+\+?@.L+u+0?@.M+"+?@.H_++$?@.G3+ +o+j?@.L`+ %+Y?@.A{+)+x?@.?+H+v?@.I+ at+{?@.Qj+ ++?@.O+ +_?@.B0E++y?@.+/+r?@.2V*+eX?@.99V*b+n'?@.BaI++yq?@.:Z*+o?@.>m+S+t?@.2ݺ+W+f?@.**'+[N?y@.4L+Xu+g0?y@.>I7++t{?@.Ff++m?@.Di+:+|v?@.?n&+ /+vl?@ .< *+q?@.E++}?@.E+ YO+~i_?@.=+ ݲ+sJ?@..W+0+_r?@ .0_+T+b?@$.6G+f"+k ?@(.+h?@D.3Bg*'+f|?@H.6S*+jI?@L.6>+{+jN?@P@.9+R_+nu?y@T.5D++i++g?@-T* +@v?@@-)*3(+C?@.8*H++.]?@ .*6+:?@L.w*~+C`?@3@.UZ*͙+H?@.n*+H?@.og*!+H+=8?@.(*ʌt+@!M?@ .*:,+@V?@.*+@??@.\*+B?@@.1*n+E^?@.$*N+B?@ .;*+?8?@L.ө*m2+6?@ 3@. *n+5(?@&.h*+;g4?@, .S*_+B8?@1.*{++B,M?@7.bN*M+Is;?@=@. +*;)+I ?@C.Э*'+BR?@If`.vU* +Dn?@OL.*s+F?@UL.P*+B?@[.V*w+:?@a .F*+;<=?@f.:*K++=?@l@.*++@?@r.*+A`V?@x.IB*3+;? ?@~ .j*+7?@L. X*+5!?@3@. *+/}?@.*+/OE?@ . +n*S{+2"?@. *%+5 +?@. *B+5Q?@@.*+6x.?@. l *w+5.?@f`.*[+6E?@L. 4*J-+4?@L. c*+2~?@. *?0+2?@ . +b*+1".?@.7*`+&8j?@-V*-+o?@ܳ@-\n*+n?@-*+!v?@ .*G*z+$ ?@L.W*+%4?@3@.e*+'?@3@.pr*U8+*ͻ?@.`\* +,v?@.*+&q?@ .2*+a+'?@@.P*Xw+-3x?@@. +L*p+1?@. +;*>+0?@#f`. @y*Y+/?@)L.F*[+-:?@/3@.*+,?@5."*wq++G?@; .%*o+.7;?@@. +~*)+1F?@F@.P*+.|V?@L.d*+'?@R.K*4+)VS?@X . *+'2?@^L-*&+"?@d3@.,*+*v?@j3@.6* ++ ?@p."*a+*i]?@u.*+*I?@{.I*7+)S,?@@.*d\+' +?@@.a*~+&?@.I*+( ?@f`.1*+%^?@L.*(A+$*?@3@.7*/0+%eP?@.IN*w+( _?@ .*+'U|?@.*+(I?@@.>-*$+'}?@@.*+'-?@™.K{*+%V?@Ȁ .t*+&?@L.g*2+%E?@L.o*+$V?@3@- :*+#;b?@- *6+#b?@伮.R)*7s@/Cf@'.2)3*k@/Cf@|w6.)*O @/Cf@i.)*@/Cf@w1.Rb)U@*@}@/Cf@?-)*Q@/Cf@q`4P-W)L*`@/Cf@ +˰-z)|*@/Cf@k~-Z)*%@/Cf@B-F)*-@/Cf@f@ -A)O*q[@/Cf@ -^c)Th*@/Cf@&`>- )*oc@/Cf@+ -B)p;* @/Cf@1[_B-)*@/Cf@6ؠ #-e). +*GK@/Cf@--t)v*_@/Cf@]F-e)*h@/Cf@bÀ-')*-|@/Cf@h@H-!)+j*@/Cf@m_;-I)V *@/Cf@s;6-&)@8*@/Cf@x?^W-0)G*hp@/Cf@~6 -z)s *@/Cf@-~u)*@/Cf@1e-O)}(*(@/Cf@ !-)|L*@/Cf@,/+-A)|Ap*ß@/Cf@ r~--B)|*@/Cf@'-S)|*f@/Cf@@%N-){*c@/Cf@"h-()y*@/Cf@_-)w!*Oj@/Cf@ q-)ts*"@/Cf@-))r*2@/Cf@L-馏)qY*Q@/Cf@Ŗ -馏)p*Q@/Cf@_'-)o*@/Cf@Б-)lF*C@/Cf@'-)i*m@/Cf@ۍ?_-)j@*F@/Cf@ +j-B)j|*@/Cf@戠 #-:)i,*X@/Cf@@ -j)gnU*@/Cf@9-)eY*1@/Cf@ o-*G)e8?*@/Cf@-Ȝ)e6*@/Cf@OU-)d*@/Cf@z"-K6)cA*@/Cf@ #-s)c*5@/Cf@v-Ṱ)`ω*v@/Cf@?-E)_Q*@/Cf@q-Du)`_*U@/Cf@" o-)a*@/Cf@(m]-T)a+*@/Cf@--)^*@/Cf@3i?^W-d)\Ed*^@/Cf@8y-NN)[*@/Cf@>e :-π)Z*@/Cf@C-ޥ)X*~p@/Cf@I`>-)W**@/Cf@Nޟ˰-5)Wk*ڬ@/Cf@T\!-#)W!*@/Cf@Y` -)Wk*#@/Cf@_X`f-P)V*f@/Cf@d@ -)U B*@/Cf@jT-A)RV *q@/Cf@o-?)O1*m@/Cf@uPH +-)O+*@/Cf@z -Z)P/*@/Cf@L-K|)P(*D@/Cf@*s-Nq)P#l*@/Cf@Gr-޳)Np*@/Cf@Ս-Ս)Og*@@/Cf@D-m)M߀*@/Cf@-;)LW*:@/Cf@@H +-y])KA*y@/Cf@?-)J$*@/Cf@<@W -Q)HV*d@/Cf@` -C)H+*s@/Cf@8`f- )GTN*@/Cf@-)F%*?@/Cf@4-o)D*2@/Cf@Dzh-՘t)C]*~@/Cf@0H-)A@*-@/Cf@Ү- )AH*R@/Cf@-OU-ժx)AE*@/Cf@ݫ?-3)At*@/Cf@)_a-Ց)A*+@/Cf@觟-ԧ)@*J@/Cf@%Ex-Ԍ)?*6@/Cf@9-Ӷ)=w*@/Cf@"-,);*s@/Cf@_-ˌ)9X|*E@/Cf@˰-/)9e+*Q@/Cf@ @-):_*@/Cf@-'L):5*۶@/Cf@_a-ug)9WU*i@/Cf@-{t)8X*@/Cf@덂-͗Q)7 +0* @/Cf@%-k)5k*_@/Cf@*_t-)6(7*0@/Cf@0>-)6Oj*.@/Cf@5-)5e*7@/Cf@; ?_-ɐ)4ȓ*X +@/Cf@@-g)3y*@/Cf@F +*s-˞)2V*Q:@/Cf@K@-.)2?{*&@/Cf@QY-e)3dS*tV@/Cf@V :-͒)3 +e*)@/Cf@\`-ʿ)0)*@/Cf@a o-ǁ).<:*]@/Cf@gH +-Ƈ)-x;*~@/Cf@l~-)..*|@/Cf@qJ-ȆH)-W*U@/Cf@w{_B-Ġ)+y*@/Cf@|~-.v)+r*@/Cf@x@-Dž)**cL@/Cf@Y-))*}@/Cf@u D-9)(P*|s@/Cf@- +)(Y*|6}@/Cf@q-Ĺ)'*{ι@/Cf@ )-5Z)'*|m@@/Cf@n-/M)'$*}0@/Cf@CR-AQ)'QW*}?@/Cf@l-%)&j*|Y@/Cf@J-\)%5*z$@/Cf@hB-`)$N*yn@/Cf@Q-:)$*y@/Cf@eՍ-()$*yͬ@/Cf@-<)$G*y@/Cf@c @-7)#t*xD@/Cf@ o-)"*w6@/Cf@`?-J)!*v" @/Cf@[-)*uG@/Cf@]`H- )$*u@/Cf@-{n)ؿ*u@/Cf@Z-Z)u*t @/Cf@?^W-m7)*s@/Cf@W*-I).7*r@/Cf@ր-)*qj@/Cf@U D-R)#*qJ@/Cf@ ӿ-)*qSL@/Cf@R_t-۰)Ƕ*pu]@/Cf@\1-w)*o@/Cf@O o-Ƹ)*o@/Cf@!_;-w)*mQ@/Cf@'LJ-?)Da*ne@/Cf@,6-,)*n@/Cf@2JJ-Xa)J2*n@/Cf@7L-))*o@/Cf@=G*- +E)*oiO@/Cf@BƠY-G)6*ot@/Cf@HE@%N-);O*m#@/Cf@M9-pr)]*m\@/Cf@SBh-)*l6@/Cf@X +|[-x +)*j@/Cf@^@?-3)*jD@/Cf@c-Z)^*i@/Cf@i= q-p)*i@/Cf@n/+- )@.*i@/Cf@t;_B-!) b*i @/Cf@y r~-Q) T*i]@/Cf@8B-Q) э*i]@/Cf@-ٶ) c*hĿ@/Cf@6Y-o) 4*h=H@/Cf@_mY-) I*h)@/Cf@4?-.) +fn*g@/Cf@ @-') z*fw@/Cf@1Tz-8l)1*ef@/Cf@>-)*c@/Cf@/'-@)FN*bN@/Cf@-$)n*b@/Cf@-`H-;)*bۊ@/Cf@@W -.)P*b?@/Cf@+-s)_*c#@/Cf@ƪ*s-y)#*a@/Cf@(8-)*^L5@/Cf@ѧ*-)*[7@/Cf@& -r)V*\@/Cf@ܥm-))I*]T@/Cf@$-)*^@/Cf@磀-R)l*^@/Cf@"伮-(a*]@/Cf@`4P-()*\@/Cf@ _-W(*b*[G@/Cf@`-(3*Zf@/Cf@y-/(x*Y@/Cf@N˰-2(<*Z@/Cf@ -(r*Y:@/Cf@ ͟m-:`( *X@/Cf@ D-(D*Xe@/Cf@L/+-(*W@/Cf@ -G/(*WeZ@/Cf@˟`- +b(H*W@/Cf@ @-](*W-@/Cf@J-l(H*VM@/Cf@ +-͹(B6*R@/Cf@ɠe-#(*MV@/Cf@"?^W-U(*K @/Cf@%H>--(y*N)@/Cf@(?-+(W*NLt@/Cf@* o- (A*PSD@/Cf@-?-$(*R@/Cf@0F-u(*R@/Cf@3_;-|(&*S@/Cf@5 q-(WS*R@/Cf@8c-(*S8@/Cf@;E :-N( *Q@/Cf@>/+-lS(p*MWu@/Cf@@ -(+*JS@/Cf@C`- +(U*K@/Cf@FC@ -HL(5*M)W@/Cf@Iڲ-)(:*M@/Cf@K` -(7t*M@/Cf@NTz-(53*M@/Cf@QA +|[-γ(ƒ*L@/Cf@TL-+(%)*LY@/Cf@V #-(z*L4X@/Cf@Y?-(ك*Kh@/Cf@\?-p (*L@/Cf@^_ -J(Ԝ*K+@/Cf@a1- (֊*Jg-@/Cf@d~˰-(0*H@/Cf@g> -!(ӔA*Gn?@/Cf@iEx-S(*<*E@/Cf@l_mY-(*I*D@/Cf@o} :- Q(*C@/Cf@r(5*D'@/Cf@z{`-H(*E{@/Cf@}:j-4( w*FP@/Cf@-b(C*E}@/Cf@@-(Q*C4@/Cf@yTz-ӝ(̒N*A@/Cf@9 +|[-(f*Am@/Cf@L-(y&*B@/Cf@>--(Ǿ`*Bk@/Cf@x_-(ƒ*A@/Cf@8-J@(*@_ @/Cf@'-SB(Š*@j@/Cf@?-bQ(ħx*?6*@/Cf@v-p(Ë*>i@/Cf@6-}V(d*?X@/Cf@?-#([n*?@/Cf@ q-(M*?@/Cf@uc-](*=@/Cf@5 D-B($K*;6@/Cf@w6-"(*9@/Cf@!-ڤ(*9i@/Cf@t - (wh*:@/Cf@3-2(*<@/Cf@`-|(T*>+@/Cf@ @-((*>v@/Cf@rڲ-(W *>*@/Cf@2` -Q("%*<@/Cf@-(Q*8f_@/Cf@ı o-(*3@/Cf@q +|[-XO(>*1@/Cf@1L-,(*/@/Cf@>--(*1K@/Cf@ϰ- (M*5@/Cf@pH +-n(g*9@/Cf@/-`3(f*;\k@/Cf@Q-(*;@/Cf@گ?-(؝*:k@/Cf@n-uO(ط*8@/Cf@.˰-(&*5+&@/Cf@?-$(*1X@/Cf@c|-;(*.a@/Cf@mEx-֮( **@/Cf@-_mY-s(Z[*)@/Cf@ D-O(--~( *#-:@/Cf@X #-{(*!@[@/Cf@_-yQ(*@/Cf@?-xf( *!@/Cf@-xg(*6@/Cf@W o-yQ(~*@/Cf@'-yl (>!*M@/Cf@_ -x'(*@/Cf@?-uD(k*8}@/Cf@W1-r,(u*@/Cf@ -m$(*$@/Cf@֟˰-kP&(*@/Cf@_;-gH(*@/Cf@V?-`(*Ҍ@/Cf@c|-Vh(z* Su@/Cf@ q-H@y(q|*)D@/Cf@m-:_"(h~k)A@/Cf@U_mY-:c(g9)@/Cf@ @%N-E(n)j@/Cf@ :-Q(u_*F[@/Cf@@-\*(z* @/Cf@T/+-c(~*@/Cf@!-gp(P*_@/Cf@@W -ii(e*bh@/Cf@9-h*(*@/Cf@S-e(}*@/Cf@`-g(~O,*9@/Cf@!Ӏ-jJ('*@/Cf@$@ -j(~*1@/Cf@'S @-l(H4*`@/Cf@*"-nM()*d@/Cf@,ҿڲ-nM(*d@/Cf@/J-nT(1%*s@/Cf@2R@-m(}*!@/Cf@5-m(}h* @/Cf@7Tz-ml(|*@/Cf@: o-l({_*f@/Cf@=Q +|[-iG(z*|*p@/Cf@@`4P-j}(za*@/Cf@BL-lb(z*I@/Cf@E8-kD(zOa*@/Cf@HP>--j(y@*/ @/Cf@K-h(x*@/Cf@M_-c(tO*Q@/Cf@PH +-`?b(r=X*@/Cf@SP-c(tf*@/Cf@V o-fܽ(u{r*y@/Cf@XQ-g(u'*@/Cf@[_ -e(s)*@/Cf@^Oy-c(r*0@/Cf@a1-da(r3**@/Cf@c -d(r*iz@/Cf@f-dK(r*[@/Cf@iN_;-c(qC*0@/Cf@l -aԵ(pF*"@/Cf@nc|-`(oB*@/Cf@qEx-`s(oܙ*@/Cf@tMc-`q(o|*@/Cf@w _mY-_(n*`@/Cf@y D-]&(lH* q@/Cf@|@-ZE(kn * 6@/Cf@Lw6-Y(jgB* +@/Cf@ !-Y(jk* k@/Cf@@W -ZZ(jo* '@/Cf@ -X(i* +)@/Cf@K-V(g* @/Cf@ `-Sp(f*Ri@/Cf@ˀ-S:(e*/@/Cf@@ -P(dK*@/Cf@Jj-Ld(b*^@/Cf@ +"-F2(^()@/Cf@ʠ-<\ (XL)@/Cf@` --NP(O)@/Cf@J@-$X-(I9)\c@/Cf@ -(F)?@/Cf@ o-#(H){@/Cf@ +|[-/=(Ou)N@/Cf@I`4P-9 (U)@/Cf@ L-A;(YxF)Vs@/Cf@8-Ef([J)@/Cf@>--Ge(\T)ӵ@/Cf@H-Ie5(]*@/Cf@?-J(]K*I~@/Cf@-JW(]K*L`@/Cf@ o-IB(]\f* @/Cf@G'-J(]su*3@/Cf@_ -Jz(]*@/Cf@y-J߃(]M*ֺ@/Cf@Ɇ-Lt(^~*"@/Cf@F˰-Mu(^*~m@/Cf@-LP(^5&*@/Cf@?-K(]%*>}@/Cf@Ԇc|-J(\Z%*3@/Cf@EEx-IB([J* @/Cf@c-F#(YƬ)4@/Cf@@%N-F:(YW)@/Cf@߅ :-H(Z͊*]%@/Cf@D@-J(\,*3@/Cf@/+-K([*@/Cf@`-I([S* +@/Cf@ -HI{(Z9*/@/Cf@C-F(X)#\@/Cf@`-Ek(Xc)@/Cf@`-Ep(X>)@/Cf@ @-Fܱ(Y +) @/Cf@B"-G-(X)@/Cf@-Fʭ(Xz)t@/Cf@` -D9&(X)*o@/Cf@-C (Vą)q@/Cf@ATz-D0%(V)@/Cf@e-Ek(WE)@/Cf@`4P-F((W)W>@/Cf@ L-F(WT)/@/Cf@@8-F*(W)b@/Cf@ #-F(X)]@/Cf@_-E(WJB)@/Cf@H +-E(W.)@@/Cf@?-D(Vg)@/Cf@Q-Ck(U&)@/Cf@?-B3(T)Y@/Cf@!1-BM(TK)D@/Cf@$> -C i(U)4@/Cf@&-B(T-)F5@/Cf@)?-BX(T)@q@/Cf@,~c|-B(T,p)v@/Cf@/=m-@p(S}2) +@/Cf@1_mY-?(S )@/Cf@4 D-?U&(R)@/Cf@7|@-?1(RL)- @/Cf@:<!-?@(R)H@/Cf@<@W -A(R)(U@/Cf@?-A.(Rĺ)E(@/Cf@B{-@:(R:`) @/Cf@E;`->X(Q*I)@/Cf@G @-@/Cf@RTz-<#(O)@/Cf@Ue-=w(PHP)@/Cf@Xy`4P-<à(O0)=@/Cf@[8B-:*(NC)^@/Cf@]>--:*(NC)^@/Cf@`_-;g(O)8@/Cf@cxH +-;(N)c@/Cf@f7 o-:q&(M­)O@/Cf@hQ-:-(M})N@/Cf@ky-:;(Me)`#@/Cf@nv-:(M),A@/Cf@q6-9~(M3)o@/Cf@s?-8(LV[)M@/Cf@v q-8P7(L(=)@/Cf@yuc-7T(K8)@/Cf@|5@%N-5(K]S)G@/Cf@~@-53(J)u@/Cf@/+-5[(J)#W@/Cf@t@W -5 (I)W@/Cf@3-4Q(I&):@/Cf@-3U(Hde)i@/Cf@@ -10A(GO)!@/Cf@r"-.P^(Et)1@/Cf@2J-*[(C/)@/Cf@-%(@)6@/Cf@Tz-m](;)Ɂ@/Cf@q +|[-(5)@/Cf@1L-w(.8)@/Cf@>--(*&)@/Cf@_- +˚(/)s@/Cf@p-(6)?@/Cf@/ o-5(;\)9@/Cf@_ -!"(=4)@@/Cf@1-%w(@ /))@/Cf@n˰-*h(Bo)@/Cf@.?-,(C@)LB@/Cf@ q--3(D$ +)ݲ@/Cf@c--k"(Dw )@/Cf@m D-/(Ekx)@/Cf@,w6-0&(Edz)y@/Cf@`-/6(E)E@/Cf@ë-.p(D)H@/Cf@k--,(C@)3k@/Cf@+ @-.(D;)q@/Cf@ڲ-/(Dr)@/Cf@Ϊ` -/(E).@/Cf@i-/H(D) @/Cf@) +|[-.G(C)=@/Cf@L-.(C1)޾X@/Cf@٨>--.(Cy)^@/Cf@h_--U(CB)@/Cf@'--/(C!)Jz@/Cf@Q-,(Bm)AN@/Cf@y-+۪(B$$)s@/Cf@f˰-+ Y(AK)>@/Cf@&?-+h(A)gt@/Cf@Ex-+C(A)ۨ@/Cf@_mY-+(A])@/Cf@e :-*U(@ܶ)<@/Cf@$!-)E(@P)ـX@/Cf@ -*7(@) @/Cf@`-)I(?)K@/Cf@c@ -)((?)@/Cf@"ڲ-)C(@)t@/Cf@@-)9(?)ؚ@/Cf@Tz-'(>ӗ)@/Cf@a`4P-&*(@ /)f@/Cf@ 8-&[(=,)o@/Cf@ -&(>)լ\@/Cf@-&g(> J)@/Cf@_Q-%W(=&)Ӣ@/Cf@y-& d(=))ԤW@/Cf@ޟ˰-&&?(=)ԫ@/Cf@ -&(=)ԑ@/Cf@]m-%V(={)Ӣ@/Cf@! D-$(--j(.3)O@/Cf@@H +- (+)@/Cf@Q-Y(-J) @/Cf@ -(/)E@/Cf@~ -(0m)E@/Cf@=_mY-((0n)@/Cf@w6-k(0)@/Cf@-(07)@/Cf@{`-(0>)E@/Cf@:-(/0)!@/Cf@-U(/)+@/Cf@ȹ?^W-(. +l)B@/Cf@x #-R(,.),@@/Cf@7-(-)'@/Cf@y-(,)d@/Cf@Ӷ-U(-s)w@/Cf@uEx-i&(-)؃@/Cf@5 :-(-5)<@/Cf@@W -f(-4)&@/Cf@޳-(-9)@/Cf@rڲ-k(-)@/Cf@1-w(,)@/Cf@?^W-r(,U)@/Cf@鰀- K(+t)@/Cf@o o- +v()*)<@/Cf@/1- ɚ(*)@/Cf@?-&p(,9)@/Cf@c-fc(+h)E@/Cf@lw6-(+)@/Cf@,- D(+||)@/Cf@ @- d(*z;)s@/Cf@` - f())n,@/Cf@ie- j())s@/Cf@(>-- 4W(*p)v1@/Cf@- ^(*#)c@/Cf@ +?- tJ(*.) @/Cf@ f_;- R(*K)=@/Cf@%m- }~()M)&@/Cf@w6- W(()[@/Cf@9- dF(+Gs)k@/Cf@c @- f()w)@/Cf@"@- t()bM)@/Cf@ +|[- +[(([o)@/Cf@ #- ('g)v@/Cf@#_ o- (')dz@/Cf@&- >b(')@/Cf@( -1(&)@/Cf@+@%N-e(&D)@/Cf@.\`-(%c)՞@/Cf@1-,(%h)@/Cf@3ڠ-X($4)@/Cf@6 o-($ݰ)U@/Cf@9X8-($k)j@/Cf@<-E(#̭)@/Cf@>y-B(#1C)J@/Cf@A -(")@/Cf@DU@%N-(">)]@/Cf@G`-(!1)@/Cf@IӀ-&(Q)@/Cf@LJ,(r)@/Cf@OQe,A()~>@/Cf@R>-,Z()DT@/Cf@T o,2(G)|@/Cf@W,()k@/Cf@ZM q,( +t)v@/Cf@] :,Š( sy)|s@/Cf@_,()d@/Cf@bj,Ҷ(f)*@/Cf@eJ,(")@/Cf@h L,7()@/Cf@jH +, (O)c@/Cf@m?,HR(~)u@/Cf@pF?,()$@/Cf@s@%N,K(8)@@/Cf@u@W ,X(ރ)l@/Cf@x@ ,X()@/Cf@{B@-f()@/Cf@~?^W-(-_)Z@/Cf@?- (O )H@/Cf@?-*(()9@/Cf@>?-xp(t)q3@/Cf@ D,ڍ(2)@/Cf@ ,{E(L_)A@/Cf@{ @,x()@/Cf@9,g()W@/Cf@B,e( Y)k@/Cf@,z(F)4%@/Cf@v,(v)@/Cf@5 q,Y(x<){@/Cf@w6,/() +@/Cf@,2()@/Cf@r,'(W)a6@/Cf@1 +|[,T(r)!@/Cf@,()@/Cf@_ ,(d)@/Cf@n?,oq(X)GS@/Cf@- D,D()9@/Cf@,(0)o@/Cf@",(h),@/Cf@i o,;( z)O@/Cf@( #,(&)@/Cf@Q,(q)@/Cf@¦_;,<.(9)P@/Cf@e@%N,(tW)@/Cf@$ ,(.) N@/Cf@",<(Y/)+@/Cf@͡ o,Hz(+)@/Cf@` #,,(6)Z@/Cf@_ ,+()m@/Cf@?,-(x)@/Cf@؝ D,ٟT( )G@@/Cf@[,!w(|)k@/Cf@,($)P@/Cf@ـ +|[,S>(z)S@/Cf@?,7f()@/Cf@Wy,P( [)\@/Cf@ q,Z(k)s@/Cf@ԟ/+,M@();@/Cf@`,Y(^i))/@/Cf@R,()}@/Cf@8,(<)@/Cf@Ϡ',()@/Cf@_;,()A@/Cf@M D,(>!)@/Cf@ ,(>!)@/Cf@ʠ,(l)@/Cf@`4P,O(:)=i@/Cf@H,()H@/Cf@ + ,?(Sr)G@/Cf@ c,|()ƶ@/Cf@ ,M()e@/Cf@B",&()@/Cf@ +|[,y(5)l5@/Cf@?,V(5)@/Cf@~,J<(.)N;@/Cf@=m,i()@/Cf@@W ,(4)Oo@/Cf@"",(6) @/Cf@%y +|[,( |)ۑ@/Cf@(8H +,@( ê)@/Cf@*,T( ,) $@/Cf@-c,( N)U@/Cf@0t ,榲( )@/Cf@32ڲ,M( )e@/Cf@5?^W,( )@/Cf@8,4( _)@/Cf@;n,Ϟ( )pe@/Cf@>- D,5( )g,@/Cf@@,( E)@/Cf@C@,O( &)@/Cf@Fh8,( +)BU@/Cf@I'_ ,n( +#)@/Cf@Kc|,( +7)_4@/Cf@N!,N( +<<)@/Cf@Qc @,˴( +)^@/Cf@T!e,U( r)6@/Cf@VH +,U( -)#@/Cf@Y ,(W)@/Cf@\]@%N,()@/Cf@_,@(,)(@/Cf@a@,zS(3)b@/Cf@d>-,ݚ ():@/Cf@gW?,((<)@/Cf@jEx,ިB()*@/Cf@l@W ,N0(S)F@/Cf@oڲ,ݩ[()@/Cf@rQL,ݯ()@/Cf@u',(:)rb@/Cf@w ,(Tl)`@/Cf@z!,](()@/Cf@}Jj,L()@/Cf@ `4P,W()@/Cf@,O\()p;@/Cf@?,ِ(u)@/Cf@Dw6,s()%@/Cf@ @,w(؅)@/Cf@ +|[,ּ()n@/Cf@,(s)9@/Cf@>_;,Խ!()'@/Cf@w6,()u@/Cf@ @,()@/Cf@y +|[,5Q(d),]@/Cf@7,r(f)@/Cf@ ,ъ`')@/Cf@!,')A+@/Cf@r",9'9)l@/Cf@1?^W,9')/?@/Cf@Q, '3)@/Cf@ q,R' )>I@/Cf@l ,1'8)օ@/Cf@*J,@'x)@/Cf@>-,ѯN'ش)2@/Cf@y,ј';)$X@/Cf@e_mY,q')O@/Cf@#`,$'P)@/Cf@Tz,'))@/Cf@ĠH +, +';)%@/Cf@^_;,N9'ye)P@/Cf@w6,'N )@/Cf@",z'[x),w@/Cf@ϙL,϶'l)@/Cf@W_ ,>'x)@/Cf@m,I'A)@/Cf@,a')u@/Cf@ڑ,='AW)ˬ@/Cf@P?,7')a@/Cf@,͕'Ѽ).@/Cf@̟/+,ۄ'h.)@/Cf@势ڲ,') p@/Cf@HB,̗')@/Cf@y,' )ô@/Cf@@%N,,w')L@/Cf@,'D)%-@/Cf@Ae, + +'-)N@/Cf@ o,ɳ'М)@/Cf@ q,\4'a)@/Cf@|,')F@/Cf@:,DŽ9':_)a@/Cf@?,Ƈ't)~@/Cf@?,ł')|g@/Cf@t`,'T)}q@/Cf@ 2J,Ũ'8)}@/Cf@ ,'o)z@/Cf@˰,9Y' )y@/Cf@lw6,ç<'D)zo@/Cf@*ڲ,V+' )z@/Cf@>-,L')yL@/Cf@,s')yJ@/Cf@d@,'0 )w@/Cf@"",'8)v@/Cf@!8,p'/4)v +@/Cf@$,#8')w7R@/Cf@'\@,!')w@/Cf@*",e'dJ)x@/Cf@,8,"' )x}@/Cf@/,'0:)w'.@/Cf@2T@,('I)w>=@/{Cf@5ڲ,',!)v@/|Cf@7>-,'!)v@/Cf@: ,U'W)v0t@/{Cf@=L/+,$'-,'R )l}@/pCf@,'|'T)lW@/pCf@@W ,*'ץ)l=@/pCf@Q,@'|)k1@/lCf@','׋)k@/lCf@_mY,/'o')kJ@/pCf@ @,';)k@/lCf@H>-,<'֎)j@/kCf@,]7')im@/lCf@ ,'`)i @/hCf@ o,$' +)hW8@/kCf@?Q,.'Н)g@/lCf@ D,:H'ԉ)g@/hCf@ڲ, ?'1 )g @/gCf@x_,2_' +)f@/hCf@6c|,%' +)g@/hCf@`,'x)gO4@/gCf@?^W,'a)f9Y@/dCf@n ,')e%@/dCf@,`,'ѫj)d@/gCf@,r'Ѷ{)ds@/cCf@Q,?'n)d@/dCf@e D,'џl)d*@/dCf@",J.'9 )d5@/cCf@?,'ЛS)c#@/cCf@ÝEx,.t'd)b@/`Cf@[@ ,F'ώ)a^@/`Cf@>-,'6a)`@/_Cf@?,T')`lb@/cCf@Γ,c'Π +)`@/_Cf@Q?^W,8'kw)`@/\Cf@ ,t3'Ε)`@/`Cf@@W ,q'@)`G@/_Cf@ى o,>(')`O@/_Cf@G?,*W'1)`62@/[Cf@/+,/'-B)^@/[Cf@, '&e)]K@/[Cf@Q,b'˦0)\d@/\Cf@= :,a'ˌ])\<@/\Cf@` ,'r)]@/XCf@ o,b')\d@/XCf@u D,'zn)[@?tCf@`,'M )^L5@Da@1L, ')]`@Da@1,(l')[@Da@,w6,B'o`)Y@Da@,U'!)YE@Da@(,' )X%@Da@?,Gp'=)X\@Da@$ ,'w)Y)@Da@,o'~v)X>@Da@$ ,'|)W@Da@) q,ی'{)V۔@Da@/,,'yA")TT@Da@4 o,'xl)TE@Da@:',xx'y`)V\@Da@?m,'x1)Un@Da@E,x'vĸ)S +@Da@J +|[,!}'u#)S^@Da@PQ,i't)R>@Da@Uc,k'sg)Q-@Da@[ ,['qS)Oѐ@Da@` +|[,'qm)Pr@Da@fQ,_!'qk)Q@Da@kc,;'o)O@K@Da@q`,G'n+)Np@Da@ve,'n3)N@Da@{ o,*'mb)N5@Da@}Ex,A'k)M @Da@,'j١)Lx@Da@y,)'jB])K@Da@,$'h)Jl]@Da@v ,u'gC)I@Da@@W ,'f)H@Da@rJ,'e3)Hw@Da@ #,:'c͉)G@Da@n ,V'b)F|@Da@@,'a)F>t@Da@k @,']%)E<@Da@?^W,2'^)()E_@Da@gQ,ME'^)()D9@Da@m,J'\(V)A@Da@c, 'ZD)?@Da@,'Y)@!@Da@`_,'Yp)Am@Da@ޟ˰,x'W)?@Da@\@,b'VL)=)@Da@ @,f'T))(ż@Da@͟m,Q'H)1 @Da@L,D'I)4@Da@ ` ,]'Iގ)6n@Da@&H>-,'IJ)6I@Da@+y,7'I)6@Da@1Ec,Dj'Ho)7a@Da@6,U'G)7w@Da@-,.'E5)5@Da@G?y,U'Ej)60I@Da@Lm,x'E&K)6]@@Da@R<, 'Dw )5@Da@WJ,'Cl)4@Da@]8B,&.'B8)4@Da@bQ,0'A)4@Da@h6c|,)'A<)3g@Da@m`,&'@)38@Da@s2j,Ѷ'@-w)2@Da@x +|[,''?)1@Da@~0, 'A)0@Da@,'=])0@Da@- :,'=c)0@Da@`,';A)/LQ@Da@*,y ';m).@Da@>-,/';]9)/ @Da@'?,u';^).@Da@ q,':Q)-J@Da@$!,j'9')-T}@Da@ @,p'9Z),@Da@!e,'8n),5j@Da@?,'7)+@Da@,'6)+ @Da@ŝc,Oa'6\)* @Da@@W ,cc'5))t@Da@К",#'4j)(@Da@ +|[,_'4K)'v<@Da@ۘH +,o}'3)&@Da@, '3)'@Da@c,k'2 +7)&@Da@@W ,p'1Up)&@Da@j,'19)&@Da@e,%'1)%O#@Da@_,'/)$~u@Da@y,~P'.)#@Da@ q,}"'.Q)"p@Da@ /+,|'-F)! @Da@`,}'-)"e2@Da@ +,{.e'+%) @Da@8,y9'+)@Da@#',yE'+c)@Da@(_;,yT'*[)@Da@.@%N,xY'))Y@Da@39,v8a'(J_)@Da@9",ut'(n)@Da@>e,vZ''Ŏ)}@Da@D,tii'&g)ll@Da@I?,r'&e9)B@Da@N ,r!'%)@Da@T} :,skh'%)@Da@Y,rm'$)8@Da@_z,r'$m)G@Da@d +|[,rx7'$8!).7@Da@jx_,q'# +)P@Da@o?,ql'#0W)@Da@uv?,qG'"*)k_@Da@z D,p'!ӳ)@Da@s9,nO' )@Da@",m'+)b@Da@qTz,l&')"@Da@>-,l~'`) @Da@o o,kG$'u)@Da@˰,jE')@Da@mm,i;'nr)@Da@!,i0'>|)w)@Da@k,ix,'p)k@Da@J,i<')@Da@i +|[,h<'>)@Da@,gMT'?)@Da@gQ,f.'z!)Q7@Da@,f')A@Da@ec,e_')̡@Da@!,dq')@Da@c,c~'p)@Da@J,bY'/)@Da@a +|[,a&'W)W"@Da@ #,`'j)@Da@_',^j'd3)@Da@ ,_I}';)Z@Da@]Ex,_ ' )@Da@@,^+')@Da@[,^o')[@Da@ j,\'h) 2e@Da@Z,Z'z) %@Da@L,[AC') R@Da@X?,Z'6) %@Da@_ ,Zb'/) *@Da@%V,XkH') +@Da@*՟m,TH '\5)/@Da@0Tw6,R')z<@Da@5,PD')s_@Da@;Rj,P')H@Da@a D,R)'j)@Da@gL`,R87' )a@Da@lˀ,QX' )j@Da@rJڲ,Q{' )R@Da@w,PU' )@@Da@}IL,O' FG)@Da@_,Ov ' )o@Da@G',O ' ʯ)B@Da@,M' )@Da@F ,L[' +/)@Da@_mY,L' +GM)'a@Da@D/+,L' +<<)@Da@,K' +_H)O@Da@C @,K' )_@Da@` ,J' )@Da@Ae,IL' ))@Da@8,ID'')@Da@@H +,I +'5)@Da@ĿQ,Hp6')G@Da@> ,G T'!(b@Da@Ͼ ,F'Ӵ(@Da@=_mY,Fw'}( @Da@ڼ/+,E'A(]@Da@<,EU'ĉ(J@Da@@ ,Dx3'Z({#@Da@:,C'PR(T@Da@,Cfb'k(@Da@9?^W,CY'֓( @Da@ #,B7'#(z@Da@8,A'Q(1@Da@_ ,BP'H(@Da@ 6 ,A|''(?W@Da@c|,A:'7(i@Da@5_mY,?'a({@Da@w6,?c'>}(Q@Da@"4 ,?c' (Q@Da@',>'(@Da@-2",='( @Da@2` ,<@':(p@Da@81 o,<<'qR(M@Da@=L,< '2(Y@Da@C0,<'F(@Da@H,<&(@Da@N/_ ,:&4l(ռ@Da@S ,9ۡ&٠(@Da@Y. ,9&(@Da@^m,9y&>(H@Da@d- :,8_&m(e@Da@i!,8A&_(h@Da@o+,7-&)'(@Da@t`,6؝&t`( @Da@z*",6h&(@Da@@,5k&I(Ӽ@Da@) o,5*&w>(@Da@?^W,4^&t(=@Da@( #,4l&p($@Da@H +,3&L(@Da@'',3^&(@Da@y,2%&(@Da@&˰,2y&ϕ(s@Da@c|,1&J(w@Da@%c,1Y&#(c@Da@ :,1oN&t(@Da@$!,0&!](>*@Da@9,/e&Kb()w@Da@#`,/[&n(@Da@̣ @,.5&4m(@Da@",.-=&HO(:@Da@ע,-&(ރ@Da@!e,-&(u@Da@L,,1&(g@Da@ >-,,i&(ܯv@Da@?,+6&ŋ('w@Da@ o,*T&[($@Da@?,)L&)( @Da@,)`&qN(ͤ@Da@_;,(&P(@Da@ c|,(&()@Da@c,(R&o (@Da@ D,(]&U9(:@Da@/+,'&(֛@Da@@W ,'!&ޯ(@Da@$,(N&ߧ(o'@Da@*`,'&(@Da@/",&Z&h(դJ@Da@5J,&45&۬(Խ@Da@:,%S&4n(ӝz@Da@@e,$|&٫(ҋ@Da@E?^W,#?&F(A@Da@K8,"y&"(%@Da@P,"E&W(@Da@V,"^l&Յd(@Da@[',"&))(F@Da@a?,"Z&m(a@Da@f,!O&[(@Da@l,! &҂Q(#@Da@q , Z&E (@Da@wEx,&o( @Da@|_mY,V&?(4@Da@ :,&(̧@Da@/+,&+(H@Da@@W ,L&ͮc(@Da@,~&E(?Y@Da@,I&˭(ʛ@Da@ @,]&a(m@Da@ڲ,=&ȁ(-@Da@` ,&٣(T[@Da@,0&ǒ(~@Da@ o,&݇(4@Da@`4P,&(:@Da@B,M&-(O@Da@ #,&T(;@Da@ɐ?,p3&R(ŮV@Da@,& ((@Da@ԏ',u&K(&e@Da@?,I(&<(R@Da@ߏ1, &(1@Da@˰,W&(@Da@?,R*&(@Da@c|,&j(@Da@m,|&3(@Da@ _mY,R&R(!@Da@ :,9U&(@Da@ /+,G&*('@Da@ `,`&(4o@Da@ ,[&o(-@Da@,o`&c(F@Da@ `,t&*0(@Da@! @,I&<(@Da@' +ڲ,7&:a(@Da@,J,f&(@Da@2 +@,s_&(@Da@7Tz,Ģ&(@Da@= e,& (a@Da@B?^W,&/(@Da@HB,&j(@Da@M>-,Q&X(@Da@S_,w&a(U@Da@XH +,̞&(y@Da@^, KN&(@Da@cQ, +&i(@Da@i?, W&(@Da@n1, `&H(@Da@t˰, &0(g@Da@y_;,e&(E +@Da@ ,,&(|a@Da@ q,1&X(+@Da@c, &H(lJ@Da@@%N, [S&L(@Da@ :, &(Q@Da@w6, &B(UV@Da@!, +&t(@Da@ , & >(l@Da@, "v&e9(E@Da@`, ++E&H(:@Da@`, +&(l@Da@ @, +I&l(m@Da@ڲ, k&uj(8@Da@ƂJ, a&(@Da@@, s&(@Da@с, & +l(@Da@ o, &()@Da@܁ +|[,0& (H@Da@?^W,JI&c(s@Da@B,8&(Ʈ@Da@ #,&O(h@Da@_, &0(@Da@H +,2=&U(@Da@+&<;(s@Da@'+p&v(3@Da@_ +&D(@Da@ y+&](<@Da@~,&H(@Da@˰,&(@Da@~_;,k&(7@Da@# ,2&d(@@Da@)} q,IE&(S@Da@.c,&r(q@Da@4}@%N,KD&|b(k@Da@9 :, &Ll(@Da@?|w6,= &4(@Da@D!,X&(@Da@J|@W ,[&&(P@Da@O,XD&#(@Da@U{,,&<(@Da@Z+H&R(a@Da@`{@ +x&(@Da@ej+&s(@Da@kzڲ+&(@Da@pJ+~&0(?@Da@vz@+=&m8(yO@Da@{+P&(\@Da@y o+Y&6(@Da@ +|[+&_(@Da@yL+&(3@Da@8+&ѧ(@Da@x #+&(#@Da@_+,&P(@Da@xH ++&(g@Da@+/&a((@Da@w'+;3&q(%@Da@_ +ڃ&4r(}@Da@wy+&( @Da@+"&ԅ(*@Da@v˰+z&(:@Da@?+&{(ט@Da@vc|+&Z(tq@Da@Ex+{&(n@Da@uc+#'&+(?u@Da@@%N+C&(( @Da@u :+ɫ&H(@Da@w6+@&(U@Da@t`+$&\(t@Da@ +7&ʹ(8@Da@s+.&(P@Da@`+@&c((@Da@e+:&0(B@Da@yc+48&K(π@Da@9_mY+I&( @Da@ +@%N+ۦ%&)(K@Da@ D+ޞ&(y@Da@xB+&(4d@Da@88+,&b(@Da@>-+[&@(x@Da@!+(&D(8@Da@x`+&(@Da@8@W +ã&Q(?@Da@ H ++ &Q(m@Da@#+%N& +(6@Da@&w+IU&A(M@Da@)7+&(#@Da@++.&M(2 @Da@.`+3&>(@Da@1w?+様&(v@Da@47y+4&9(d@Da@61+ &.(9@Da@9ڲ+֡&(@Da@-+i&߷(9@Da@`4/++Ҏ&(@Da@b`+V6&~ (Ɖ@Da@e@W +&zf(~}J@Da@htH ++&x(z@Da@k3+&y{(|OF@Da@m+~&{(@Da@p`+̗&}h( +@Da@ss`+'&(#@Da@v3?+&_(S @Da@x1+8&_(.@Da@{"+M&+(;@Da@~rڲ+(&C(\C@Da@2J+M&+(;@Da@_;+c&F(z@Da@ +)&P(>.@Da@q+"&#(g@Da@1 o+48&H_(π@Da@e+[&d +(@Da@_mY+W&Vd(@Da@q@%N+Ӡ&0d(p@Da@0B+&~ԋ(W@Da@8+&~'(@Da@/++cs&~( @Da@p!+ыG&~(@Da@0@W +14&}( @Da@H ++В&|p(|@Da@+N9&~n(P@Da@o`+&|X(@Da@/+n&{Y(@Da@?+C&zh(o@Da@y+]&yy('@Da@n"+&x.(+@Da@.+&x)(+@Da@J+Vh&w5("@Da@?+=b&w<(n@Da@nc|+9&vfF(@Da@- o+J&uj(T@Da@e+&t!(~@Da@ȭ_mY+Ǹw&s;(p@Da@m D+2&t$( @Da@,8+S&sՑ(#O@Da@>-++&sQ(~@Da@Ӭ!+t5&rP(~b@Da@l@W +"&rH(}@Da@,+M&p(|@Da@+:&p ({,@Da@ޫ`+£&p>(y#@Da@k`+-S&m(u@Da@+y+`Y&k;(rf@Da@"+v&i(n:@Da@骠+&g(jc@Da@j_;+&d3](d@Da@* +a&` (]N@Da@Tz+&[Y(U7@Da@e+ *&YK(Q@Da@i_mY+ԉ&\(U@Da@) D+&_f(]W@Da@8+7D&c"Z(d@Da@/++:&gK(i@@Da@h`+&f(lb@Da@(H ++V!&g;(n@Da@+&g(ow$@Da@ +`+v&g(o[y@Da@ g`+s&f(oDj@Da@'1+&gr(o`@Da@ڲ+G&g6p(o@Da@J+&f/(o?@Da@f?+ +&e(m_@Da@&c|+[&d(l/@Da@ o+9&d(k@Da@ _mY+&g(m@Da@#e D+9&dfG(mf@Da@&$8+$&c(kM@Da@(!+g&c\(k;e@Da@+@W +&c(kW@Da@.d+D&c(k@Da@1#`+&b[ (k(@Da@3`+&bW(k-@Da@6y+0&aCy(i@Da@9bڲ+ƙ&ai(i@Da@<"J+)&a؆(ig@Da@> +&a(hu2@Da@ATz+&_(hg\@Da@Dac+ r&_(g@Da@G!@%N+_&_](gIp@Da@I8+Z&^-(f@Da@L/++&^+(f"J@Da@O`@W +bN&]K(e@Da@R +&]@\(d@Da@Tߟ`+IH&\pH(d4@Da@W?+&\[(c\@Da@Z_1+&\3(c2@Da@]+_&[.(c @Da@_?+ l&Z(aW@Da@bc|+&Z(_ @Da@e]e+nI&Y8(]@Da@h@%N+1<&Xa\(\g@Da@j8+Q&W/([J@Da@m/++&&W([ݡ@Da@p\@W +&W([=@Da@s+3&V(Y@Da@uۀ+ +&Sx(T@Da@xy+S&P(O3@Da@{Zڲ+S9&RP(RV @Da@~_;+L&T_(V.@Da@+du&TН(W@Da@e+&TJR(V@Da@Y@%N+н&Sc(V;@Da@8+&S(V@Da@!+&S(V@Da@H ++&Sh(Vl@Da@W+$&SXM(U@Da@`+&Rҿ(U7@Da@1+~&S$(UE@Da@+&S^(UX3@Da@V?+(&R2(Tm@Da@ o+e=&Q@(Rm@Da@_mY+Y&P(PS@Da@B+&O(O<@Da@T/++C&PS(P@Da@H ++&P(P@Da@ӿ+&Npr(Me@Da@`+&M(KF@Da@R"+Q/&Kb(H@Da@J+&Is2(CO@Da@+&F(>@Da@e+&Cx(8e8@Da@Q D+6&?(1y@Da@>-+ &>u(0@Da@@W +,&B|(6|a@Da@ŏ+}&E(<;@Da@O`+9&H=J(@}@Da@1+Ӭ&Hƈ(CL@Da@΀J+&J(F{@Da@Ўc|+F`&J(H)@Da@Me+T&K +(H@Da@ D+&Ky(IF@Da@̟/++%&LI(Jm@Da@یH ++y&Kv(I*@Da@K+&K(J@Da@ ?+D&KU(I@Da@ʿڲ+F.&J(IO@Da@?+I&K(Hh@Da@I o+o&Jz(Hde@Da@ @%N+&J[(HV@Da@>-+&J[(G @Da@@W +&I>(FR @Da@G+&Iz(F:@Da@?+j&I4(E@Da@ƿڲ+&Hׁ(E&K@Da@?+&Gg(CT@Da@E o+ &F~$(@a@Da@@%N+&Fn(@@Da@ğ/++&G$(A&@Da@H ++U&G; (Av@Da@ +C`+g&H(A̅@Da@ y+vc&F(@@Da@€J+ &FVK(@@Da@+`&F(?4o@Da@Ac+a)&Dk(=@Da@8+V&D(<@Da@`+&D(= @Da@+&EA(=@Da@ ??+ߧ&D>(;@Da@"+&D(;}@Da@% +z&DSC(<$s@Da@(}c++P&D2(<`g@Da@+x8+o&Bv(6@Da@A8@W +j&@}(4@@Da@C`+*1&>(8(0@Da@F1+q;&;(,@Da@Iv_;+ B&7($T@Da@L5 o+oH&1%($g@Da@N D+f &,7(b@Da@Q!+o&1n( @Da@Ts+&7(#@Da@W3?+mv&;q(*ɍ@Da@Y+&&='(.E@Da@\Tz+U&>,(0@Da@_q@%N+&?(1դ@Da@b0/++c&?[(1j@Da@d+r&?UE(1r~@Da@g?+*&?(2"2@Da@jn+&?f>(1֐@Da@m.c|+\o&?(2a@Da@o@%N+ZF&?|(2_@Da@r/++&@]n(2@Da@uk+;&AH(2U@Da@x+?+:&?c(26@Da@zJ+A&?(2?@Da@}Tz+q+&? +(14@Da@i D+&>(1N@Da@(`+33&>`(0`@Da@+$&>'(0Jl@Da@1+52&>*(/@@Da@f?+&>}(/e8@Da@%c+L&>r(/@Da@8+n&=(/Z'@Da@H ++J&=z(.t@Da@c`+&=(-Z@Da@"+-+}&5J(!I@Da@ +{3&4( Ĉ@Da@1+y&3(@Da@ +wb&3$(S@Da@I@%N+sF&1¤(@Da@`+n3v&/B(r@Da@ǀ+iW&-(V@Da@+`.&*( @Da@Ee+U&%V(@Da@>-+M^&"(o@Da@+O&#S(6@Da@"+Xh&''H( +}@Da@A+a&)(@Da@B+gw&,(#G@Da@ H ++kl@&-S(@Da@ y+n &/XO(fg@Da@>?+p6&/e(-@Da@@%N+r&/(@Da@@W +rp&/()`@Da@{`+rL&/(0@Da@:_;+rV&0#(Q@Da@_mY+r@^&/`l( +z@Da@`+q8&/9Q(a@Da@"w`+qCr&/g(h@Da@%6_;+p&/?8(@Da@'_mY+pB3&/(@Da@*`+o &.(@Da@-s`+oWK&.(-@Da@02_;+o&.a(d@Da@2_mY+o&.+B(@Da@5`+n &-Z(fg@Da@8o?+lֳ&-u(@Da@;.?+kD&,(@Da@=@%N+l &,(@Da@@H ++kb&,2(@Da@Cky+le&,(K?@Da@F* +l&&,(# @Da@HB+j&,,(&@Da@K+j&,>\(8c@Da@Nf"+j&+(@Da@Q% o+ik&+9'(0@Da@S>-+j U&+(@Da@V`+j&+J(ö@Da@YbJ+j&+9(@@Da@\!_mY+i&*j(-_@Da@^@W +i&*o(@Da@ay+h&*a(@Da@d^ +g&* ](0@Da@gB+g=&)(`'@Da@iۿ+fX&)]:(@Da@l+f%&)4(Ks@Da@oYc+e&((@Da@r`+et&(&(@Da@t?+d'&(((@Da@w +c6&((`@Da@zT8+cc&(7( @Da@}+c_g&'ע(@Da@ҀJ+c,&'d(I@Da@_mY+a&'(c@Da@PH ++a&'3(i@Da@1+a&&r(G@Da@ o+`&&~O(@Da@/++`&&(@Da@K`+`|&&mW(@Da@ + +_c&%L(@Da@8+]b&$( @Da@+\v&$( R7@Da@FJ+\&$k( o@Da@@%N+]~&$&( @Da@+]N&$( @Da@ڲ+[{&#&( @Da@Ac+\&$( e @Da@H ++\=w&$=( #@Da@"+[.&#( F@Da@}e+[r&${( r@Da@<`+Z1&"( @Da@1+X&"j9( +@Da@ o+Y[&"( @Da@x!+Y&"٤( +@Da@7y+WT&!( @Da@Tz+V&!m( `@Da@!+T& j(_@Da@sy+Ub&!%(1@Da@1Tz+V^X&!F( 2$@Da@!+VGI&![( #b@Da@̯y+UV& (Z@Da@m o+T& (<@Da@,`+T& (@Da@1+T}& =(@Da@שe+S& =(@Da@h@W +ST&(@@Da@&"+Rd+&F(@Da@c+Q&x(e@Da@H ++R5U&=(@Da@bڲ+Qp&(-+M&!(h@Da@W?+N&*(@Da@ o+L5&($@Da@@W +Lj&Ae(@Da@"+L&(W@Da@Q_mY+K&(^@Da@ +J`&Ll(@Da@ _;+J&j(@Da@8+J&O(@Da@K`+J^&('@Da@ Tz+I&v(p@Da@@W +IP&Ĩ(@Da@ڲ+H3&(!@Da@E@%N+Ga&'@Da@`+G& s'@Da@! +G]&1'w@Da@$/++G&'L@Da@'?1+G]&2'09@Da@)c+F"&'=@Da@,+F &'|@Da@/z?+E&A'"}@Da@28/++Dz&&'@Da@4y+E &U2'R@Da@7c+D&:'p@Da@:s+Dz&R'@Da@=2?+CiD&R' W@Da@?/++CiD&' W@Da@B1+C~)&';@Da@Em_mY+B&'%@Da@H+`+B4&\'@Da@J+A+&E'@Da@M`+@]&'0@Da@Pfڲ+?&'p@Da@S$B+>߲&B'Q@Da@U`+=p&'{@Da@Xe+>n&'i@Da@[`+@2^&y'@Da@^?+@&E'J@Da@`!+>&'٠@Da@cڲ+=&'@Da@fY D+=&' @Da@i`+=J&'}@Da@kՠe+=&E'}@Da@n+=&'@Da@qR +=p&'R@Da@t`+=&'@Da@vΠ+<|&vG'Cc@Da@y>-+;H&1'{>@Da@|K1+;&'q@Da@ @%N+9&q'A@Da@`+:+&'LN@Da@e+:(&}'G@Da@C+9!&'@Da@+8&'`@Da@H ++8S&5'-@Da@~?+8_&f'F@Da@<!+8D&"'@Da@+8]&<'*@Da@>-+7;U&0'c@Da@v"+7 & ?'-+L& 'b +@kDa@._;+x& F'q@kDa@1DH ++,& $'8@lDa@4 o+& Q'M@lDa@6+& g''ˌ]@lDa@9} D+&k'al@gDa@<:ڲ+ &'͔@kDa@>!+!K&'u@lDa@A + }&p'l@gDa@Ds+ &'͖h@gDa@G1_mY+ i&'S@hDa@I1+ &'@Da@N?+%'0!AD@S@%N+%?'&AD@X`+G%K'AD@]g+M1%$'ʠ?AD@bFJ+%.'ɾFAD@g%e+%&+' CAD@l>-+i%h~'5[AD@p+ %7'Ǿ`AD@u1+(% 'jqAD@z?+6%'ƬqAD@_mY+%-M' AD@`!+L%J' +AD@?+C\%1'-CAD@1+8%h?'mAD@?+]%'ïAD@c+ % '*AD@>-+!%X'9AD@+%'[AD@{?+U%3'AD@Z+A%'T4AD@9Tz+B%p'AD@@%N+]%'nAD@!+h^%5!';AD@+%Q'AD@÷?+_%=5'ZAD@Ȗ+I%'AD@vc|+%5 'AD@Uc+B%;'ʓAD@48+l%='$AD@`+ G%°'' AD@+%g'8oAD@?+;%'gAD@겿ڲ+W%?'M=AD@?+%S'AD@q o+%Ħ'FAD@Q@%N+I%' %AD@0>-+ q%' ^AD@@W + ei%V'AD@+ y%'AD@ `+ !%'^AD@1+ %'iAD@+ +%y'AD@n?+ +R%'_AD@ MTz+ +!%'AD@%-c+ "%'}AD@* D+ %R'AD@.>-+A%Ë'@TAD@3`+Gh%Q'oAD@8H ++<%E'b AD@=+B%'AD@Bk+ۄ%g'AD@GK?+i%_'AD@L+1+ %S'AD@Q +ڲ+-+%f*'AD@h/++%d'AD@H/++b%+"'UAD@(!*B&%']AD@!*%ƴ'\4AD@!*%o'^AD@`*%eN' AD@`*%'"AD@`* %'nAD@h`*%R 'AD@H!*i%t'nXAD@(!*%l'%{AD@!*7E%0'۱AD@/+*%8' AD@ȟ/+*|%%'gAD@Ԩ>-*5+%4'JAD@و8*%i|'$AD@hB*<%"'^AD@I D*Ɨ%zj'AD@)@%N*%ُ'AD@ _mY*%',AD@c*#%'N+AD@ɠe*G%P<'LAD@Tz*,%3'AD@*G%_'ۗAD@j?*ث%'8AD@ +JJ*%_'AD@*ڲ*%'nAD@ 1*"%'|.AD@?*鋠%:'xAD@ˀ*B!%u!'I AD@"*Z%'XAD@'*%'{\A +D@,l`*%M'CA +D@1L/+*(%k'A +D@6,B*%L'=(A +D@; @%N*.%'PA +D@?e*6%'A D@Dc|*T%f',A D@I_;*%T'/lA D@Nڲ* %*'MA D@Soy*%'A D@XO*%Y'_A D@]/*[$%'AD@b`*\%7'AD@f>-*\%tE'AD@k@%N*&%yd'"AD@pe*f%%'UAD@u *%D'tAD@zr*(%q<'݊AD@Sy*k@%sh'AD@3`*R%">'AD@H +*QP%A;')AD@/+*%'bvAD@ D*أ%='MAD@ o*rS%'AD@?*Ma%y'nAD@v"*%'AD@W`*6%&' AD@8*w%O'AD@/+*%'AD@@%N*E%'ڒAD@Tz* %J'AD@J*K%H^'AD@Ûy*4%`'AD@{*wL%'kAD@\`*Ϸ%'fAD@= D*ςM%0'FAD@ o*F%F'xAD@J*Δ%y'6AD@y*{|%';AD@*%'AAD@ꠟ/+*̞%7F'AD@_mY*%f'AD@a*~%Ы'gAD@B"*M%'IAD@#`*;%'n AD@`*%;'DAD@ D* L%'ZAD@ Tz*C%Ж'+9AD@ڲ*Ǡ%Y 'AD@*TN%m'$;AD@h`*Ɩ%'~0AD@ I@%N*9% +'}`IAD@%* *} %Z'|AD@* +"*Q%XF'|3AD@.*Į%C'{-* %z,%'\7A*D@ *[9%zx'[V A*D@`*v%x'ZSA'D@ +|/+*J%wa'Y_A'D@]Tz*w%v'Y2A*D@??*%v'YA*D@ !*w%w'YXA*D@Tz*%uW'WA*D@"y*%v9'XB^A*D@'!*7%u6'WPA,D@,Tz*=%uz'VbA,D@1?*5%t'VA,D@6h/+*%ur'VA,D@;I*%>%s''U:A,D@@+`*i%sAB'UlA,D@E >-*G%r&'T*A,D@I *|%r'S A,D@Nπ*|%r 'R9A,D@S8*%q'R%A.D@X_;*"9%q|'RTA.D@]s*8%pɤ'P}A.D@bU@%N*%p'PQA.D@g6*q%oמ'N4A.D@lH +*%o'MA0D@pe* %n'L3A.D@u1*r%m'J5A.D@z!*%l_9'HA0D@c|*%kO'GWA0D@*>%k'FA/D@`B*߈%kΚ'Fz A/D@c*%b('8GA2D@y*1e%]ɚ'0A2D@ȟ/+*%\|'.A0D@ *%`1'3[A2D@*&%da'9A2D@m@%N*7,%g'>A2D@N"*y%iB'AA4D@0!*!%j'Cx|A2D@*e%kF'DYA2D@`*<'%j|'D$ +A4D@@%N*%l$2'E>A4D@Ͷ"*'%kL'DzA4D@Ҙ!*6d%kp''DA4D@z *\%j'CA4D@[* +%ka'CA4D@=_mY*܃%j'BaA4D@1*8%izg'B A4D@/+*%h'ARA4D@?*ZI%h '@sA6D@*%f-'>,A6D@e*a%f'=A6D@`*%f'=p}A5D@hB*%e!'<A5D@Jڲ*%d';A6D@ ,`*%c'9A6D@ *A%b('8@SA8D@*/%b'7GKA8D@Ѡe*%bz'6vA5D@ ?*x%a'5\A5D@%B*m%%bZ'6NCA8D@*vڲ*%`׿'6nA8D@/X!*%`'6dA8D@4:?*o%a'7vA:D@9H +*4%a}'7LA:D@=Tz*EQ%ar'7bA8D@Bߟ`*$%a0J'6˳A8D@G_mY*%a'6A:D@L?*%`G'6~9A:D@QB*%`'6zA:D@Vf"*J%`׿'6xA:D@[H/+*@x%` $'6A:D@`*J*5%_'52/A:D@e @W *%^'4iA:D@i *ψ%^n'4^%['0A<D@y*W%[%'0A<D@B*%[4y'0A<D@"*%["'/TA<D@>-*u%[=S'.A>D@ڲ*%Zt'.A=D@/+*%Ye'-A<D@fJ*%YMz'-A>D@H!*x%XŶ',\A=D@*_;*{%X',#mA>D@ `*%X'+1A>D@?*uc%X'*ӲA>D@@W *%X#a'*A>D@Ʋ * %V~'(A=D@˔H +*%U\''A@D@v *%V*''#9A@D@XH +*%Vq'%ļA=D@9*Wa%S'$FA>D@*:%S%c'#XA@D@c|*|3%QJ'!hA@D@*z%Q' j$A?D@*y7%P'A@D@*{3%Q' ĈA@D@c|*|%R?,'!YA@D@h*}HN%R6Q'"ABD@J *}%Q.'! ABD@,H +*}9%Q'"A@D@  *}Ҩ%RM'"rWA@D@H +*|%Q'!ABD@?*}9%R'"ABD@@W *|O%RP'!ABD@_;*|ƚ%R9E'!ABD@#x`*|g|%QB'!ABD@(ZJ*{8%QG?' 8ABD@-<!*{n%Q' ABD@2*{#%P' ADD@7>-*z%Q' ABD@;ڲ*y%QV'ˀABD@@8*y%%Qj'jADD@E1*x%PC'0ADD@J D*w%s%O',sACD@Ok?*w\7%Oě'OACD@TM_mY*v %N'yADD@Y/*u**%N 'ADD@^e*tk%M^'n ACD@b*s޳%L'ACD@gTz*rZ%L8'=ADD@l*r%M'4qADD@q *r%M'bADD@v|@W *qj%L]'DAFD@{^J*p%K8'AED@@/+*o?%J'IACD@"ڲ*n^%J8'ADD@8*l%I'AFD@y*l%JM'jAFD@@%N*k %IR'oEAFD@*h%H`'PAFD@e*is%I'AFD@o*j%I'd3AHD@R *jc%H1{'oAFD@4@W *i,%GZ';5AFD@J*hH%Ge'zAHD@>-*h=H%HI'AED@"*f%G'AFD@ D*fJ%GG'AHD@ğ`*e%G{'"hAHD@Ɂe*d%EŬ'jAHD@c*d%F'f@AHD@F *b{%E'@AHD@(`*b%Ea'$AHD@ +*b^%E'AHD@8*aS%Ea'5xAHD@y*`J`%Ex'AHD@_mY*_XB%E)>'AHD@`*]E%C' cAHD@uTz*[*%BAx' DoAHD@XH +*Y%A' +AHD@:_;*V%@'CAJD@>-*S%?'_AJD@1*Q"%? 'AHD@ @%N*Q%@ 'EAJD@ß`*SC%A@'5xAJD@Tz*U'%A'k`AJD@@W *V[%B6' |cAJD@!jJ*W%B)' \AHD@&L>-*X];%B=' +yAJD@+/y*X%C' +AKD@0c*X%C' +AJD@4*X%Cޭ' +AJD@9 *XI%Dr@' +l2AJD@>`*WeZ%Dm' wAJD@Cڲ*W:%DӦ' ALD@H} D*W%E' ALD@M_*V(M%C"' AJD@RA o*T!%B'F{AJD@W$H +*Tlm%B'yALD@\J*S%B't1ALD@`8*S%C'AKD@e?*T*"%D' ALD@je*St%E,2'TAJD@o*R%Dz'qAJD@tr?*R+%E'AKD@yT/+*Qg%C'ALD@~71*P%F*'ALD@_mY*P%B''AND@*O%C'AND@?*OL%C-'%AKD@/+*N%CO'rALD@1*N`%Du4'ALD@_mY*M%Dif'JAKD@g*M)W%Da'MAND@J?*L%D'&AND@,/+*L.%D"',ALD@1*K:%C'sALD@_mY*J%B'AND@*KVh%C$'"AND@?*J$%C8'_IAKD@˜/+*I%C'<-*@8%?%&APD@g?*@P%@ +&)APD@$I o*?{W%?&AND@),H +*?*%@&tAND@.*>F%@i<&APD@2 D*>!w%@&^ APD@7ӟ`*=h%@}&APD@< *=%?ې&&APD@A/+*<1%>8t&wAPD@F{y*;%=&APD@K]e*;\%=LV&v8APD@P@H +*:/%>&&APD@U"*:]%? +&APD@Z D*:m0%?W&=APD@^`*:M{%?&wAPD@c *9R%>J)&6APD@h/+*8I%<:&CAPD@my*7|%;q%&QAPD@rqe*71%;3*&}eAPD@wTH +*6%%;&APD@|6*5D%;hK&_APD@ D*4%-*1IJ%<a&!APD@?*/%:)&ణAPD@ o*-5\%8NX&ݴAPD@h@W **G%6&APD@Jڲ*&%3v&ձAQD@-_mY*%<%3j&ӀARD@*%j%5I&ӻAPD@_;*'%8 i&֥)AQD@B**+$%9&ARD@*+%:L&ѣAPD@*,T%9U&ܕ,APD@|!*,ʷ%8&,pARD@_y*,%7ɇ&MARD@Ae*-%8&A#APD@$H +*-2{%8*&ݱAAQD@ڲ*,l%8.&UARD@@%N*,%9߿&`APD@˿*,!%;w &>AQD@_;*,?%=f&;2ARD@8*,%> &ARD@s*+%=&۩ARD@Vc|*+|^%= &ۀyAPD@8!*+v%<&yAQD@y**%; &$ARD@e*)%8&'ARD@ @W *)$%8&؁AQD@¿ڲ*(%8"&FAQD@_mY*(%:&ARD@*(%p&&JAQD@"LB*'b%?w6&AQD@'/`*'T%?c&|ARD@, *'%@.4&j"ARD@0>-*'%@&­AQD@5?*&%>G6&՛AQD@:Tz*%%;\|&ARD@?`*%1)%:&r ARD@D1*$~u%:M&ҍcAQD@Iac*$%=& AQD@NDH +*$g%>/&oARD@S&*$D%@7&CARD@X @%N*#I%@u +&xAQD@\*#I%@&xAQD@a_;*"%?n\&АBATD@fB*"$%={&ϊPARD@k*!<%;&&ARD@pv *!z%:D&ΰAQD@uX/+* %9[&|AQD@z;?* k%;&͉~ARD@ o* /%=&ԷARD@`* .%@+&^ATD@1*%Bm&ZAQD@c* %C &gAQD@H +*%A&gxARD@*xm%@Ļ&זARD@m@%N*2%>"&AQD@O*%=5&wAQD@2_;*%;&ATD@B*q%;P&?ARD@*%p&?LAQD@_;*V%?B&HAQD@xB*89%? &ARD@[*%A=&>zARD@> *u%A&IAQD@ /+*@%DoM&AQD@?*%D.^&ZATD@Tz*:%D&؝ARD@ `*)I%F&4ARD@1*Q%F& %AQD@c*K%F.&?AQD@pH +*%G0&cARD@ R*j%E(&@ARD@%5@%N*K%DT&AQD@**J%C&$?APD@iB*%B>&0AQD@n{`*%B&EARD@s^ * %C &b%ARD@x@>-* D%E&AQD@}#?* S%G?v&rVAPD@ o* %IjW&)ARD@`* ^5%Jd&wAQD@"* 5%I/O&vAQD@c* %F)& ARD@* 6%D`&&APD@;!)I%K&/APD@=ڲ)Oa%Lq&2AKD@@Tz)h%Kq&:ALD@Buy)5%IF&J_APD@D`)p%G &APD@GW`)%F&tdAKD@Iȿڲ)%EU&ALD@L:)0t%E&APD@N@%N) %E#&yALD@Q`)%FVK&AKD@S`)#%H&?APD@U8)W%JA&a APD@Xp )e%Kt&,ALD@Z@%N)%L&`AKD@]R!)޳%M&AKD@_ß`) x%M3&ALD@b48)%M&APD@d )%Lc&gALD@g@%N){%Kt&AKD@i!)%J$H&AKD@k`)8%I&ALD@nj8)a/%HN&ALD@p)qn%EO&ALD@sM@%N)^%Dif& 2ALD@u`)1%Bv&AKD@x/`)#%BL&AKD@zڲ)퐜%A& +ALD@})%A&ALD@y)%C&qALD@`)*'%E{&݊ALD@e)d%G.&!AKD@ֿڲ)괁%Jx&6AKD@GTz)릞%L:& AHD@B)D%L8&QALD@*?)T%I&UALD@_mY))%Gh&AHD@ !)9%C[&5CALD@} o)p%A+&!ALD@8)|*%@&&AHD@`)%?&hAHD@y)敕%?&ALD@B`)冥%@&ALD@)q%=[&4rAHD@$)⪊%>&AHD@ o)?%?&ALD@1)%BS.& ALD@x )a%D(w&>AHD@@%N){%F&:AHD@Z`)%Gw&AHD@ˀ)y%F&MsAHD@<)g%E(&BbAHD@ o):;%E &nAHD@8)U%A&#ALD@ )<%?؝&BALD@@%N)O%=C{&FAHD@r`)%;Y&AAHD@)C%:6&?AHD@T)K%9L,&AHD@ o)%:L&AHD@68)x%;&v=ACD@ͧTz)J%=&ACD@B)ڰ%@&8AHD@Ҋ )zz%Ck&wXAHD@@%N)J%Da&AHD@l`)&]%E&AHD@݀)ؑ%Cn&PAHD@N)A%Bj& 5ACD@޿`)O%A&pACD@0ڲ)4%>&zAHD@Tz)֠%<<&\AHD@1)3%9C&AHD@ )׺%9xr&ACD@y)%9/&#ACD@f?)կ>%9f&AHD@_mY)%;V&UADD@H`)Ԕ3%>)& ADD@)r1%?w&)AHD@*):%@&ACD@`)ӡ%?B&qACD@ ڲ)g%>AO&ADD@} o)%;&2ADD@8)ĭ%8&ACD@_Tz)t%5& ACD@B)Њ%5.~&wnADD@B)w%7>&rADD@ +y)%:8J&yADD@ $ )j%=4&TADD@@%N)w%>m&ACD@?)}s%=~&'TA@D@w@%N)|Y%= g&ADD@`)E%&pMA8D@S_mY)%2&pL4A8D@?)7%1K&o;A<D@5@%N)m%1:#&nA<D@ )|%0&lA8D@1)M%2&lA4D@)%*l&h^SA8D@a)<%)6&fA8D@`)?n%(&eoA8D@C@%N)%)<&eВA8D@ )%*.&dA4D@$8)%.&eQ%!!&VSA,D@y)v%!&UA,D@=Tz)A%#&SA0D@)%&&SLA0D@_mY)%+/&SޘA,D@)V%1K&SA,D@ ڲ)%5+&TE(A0D@ q)B%5uT&RA,D@ )|%4$&R,A,D@R8)%1&Q}A,D@À)%/&S'A,D@4?)i%,&RrA,D@8) +%)K&QTA(D@)t"%&i&Q8~A,D@?)A%!&P]A,D@ 8)Z% 1&NKA(D@#g)<%!&O +A,D@%?)4%$D&OA,D@(H8)b%)&N A(D@*)t%1:&PlA(D@-* )z %4&MiA'D@/ڲ)=%6<&KA'D@2 _mY)'%6&GA,D@4| )L%3p&E A,D@6ڲ)K2%0 &BA'D@9]_mY)|%.F&@uA$D@;Tz)2%+AE&=lA$D@>>!)˔%'ma&9VA(D@@y)%$?&7nA(D@C o)%"(&9A(D@E`)-% ;&;A'D@HB)(% q&?A$D@Jq)ú% 2&BB5A$D@L )%~&CNA'D@ORڲ)C%!&CA$D@Q@%N)-%##n&EXxA$D@T3Tz)%&6&D޸A'D@V!)x%* &DA$D@YB)}%/&F!A$D@[`)n%46&FCA$D@] )%8&EA D@`f)%;M&DHA$D@b@%N)%< &E! A$D@eG o)%;&CAD@g?)gq%9G&CA$D@j(8)a%8G&C A$D@l_mY)K%6&D#AD@o Tz)*%4)&EUA D@qz`)%0&DͿA D@s8)U%*B&CmAD@v[_mY)"%&]&COAD@xTz).l%#)U&AA D@{<`)KL%"&@`aA D@}8)`%%n&?3TAD@€_mY),%,?&>AD@‚Tz)'%4n&>HA D@„`)7%;&>A D@‡n8)@e%?e&? +AD@‰_mY)n%?&>1AD@ŒO o)@e%>|V&? +AD@Ž?)ѷ%<&>}AD@‘0ڲ)<%:&=elAD@“y)/'%9"&=AD@–`)v%70&>~AD@˜)%3&<AD@š!)*%00&<^AD@b8)%,S&;̤AD@Ÿ_mY)@%'Ԯ&9;3AD@¢C o)=%%&8AD@¤ )%' &9|AD@§$)%*`&9:vAD@©B)=2%/&8?AD@¬_mY)&%68 &8yAD@®u o)P%=&8AD@° )S%C&8IAD@³V!)oX%H&8qAD@µ8)#%Es&78+AD@¸7@%N)V%CW&7yAD@º`)%B&8!AD@½)S%?؝&8JAD@¿`)%;&9AD@ڲ)`%5I&7 +AD@iy)%1T&7#AD@_mY)%-&5}rAD@I o) %%.7&5AD@˺ )%0&5; AD@*`)9P%7_F&4=AD@Кڲ)(%?qO&2{AD@ y)D%F&2CAD@{_mY)%J\\&3)AD@ o)qU%I9&2|AD@\)yZ%H&3ΈAD@?)%E&2AD@<)%@Љ&4XAD@8)%:Ը&4(AD@y)%4&2 AD@_mY)5%1ӝ&1YAD@`)m%1&/AD@n) %5Q&0pAD@?)B%%Nbm&/mAD@/1).%W&/A D@y)6%X>&.Z{A D@_mY) +Z%Z&, AD@`)Q%R\&,WrAD@Tz)`%P&,tAD@` )d%Qj&-MA D@?)%SfR&,7A D@@!)%T_&*A D@)0%L=&*{A D@ 8)%K&*A D@ B)#%G&)ݞA D@@%N).?%CW&)0A D@q_mY)%C&)A D@`)f%A&)A D@Q o)%=^ &(AD@Tz)&%<&)']AD@2)|%=j&(LA D@?)8%B&)>=A D@!`) g%H;&'AD@#!)K%Q&(S)bH%L7&%AD@@ß`).%I&%ZAD@C3`)q%K&%qAD@E o)l"%P&$asAD@H o)|%X=&!AD@J o)~%a&"AD@LTz)~$%h &"AD@OcTz)~;%n`&"AD@QTz)%ri&#lAD@TCTz) %t-`&#AD@VTz)~%t9.&"AD@Y#Tz){%s&!/AD@[Tz){%tG& tAD@^Tz)x%t&4AD@`sTz)wv%uE&`xAD@bTz){e;%u +& AD@eSTz)xh%sAB&$AD@g o)z]6%r& ;AD@j3 o)vs%o& AD@l o)x%nc&! AD@o`)yO%l4&3AD@q`)wv%i-&AD@s)w%h/&AD@vc)u%e&HAD@x_mY)t%eP&AD@{C@%N)tp%dq&AD@}@%N)u2%f &RAD@À#y)u%hGs&>|AD@Â1)t%i&&<;AD@Å8)s/%jo&AD@Çrڲ)r%o;&\AD@É)s i%w,&$AD@ÌR!)r%&kjAD@Î`)qF%c#&ĨAD@Ñ2?)p@%l&#AD@Ó )m\%[&mAD@Ö)l%&,AD@Ø o)l :%&AD@Ú`)k%&AD@Ýa)jc%&WIAD@ß@%N)h-%&#AD@âAy)gl%&-AD@ä8)h%wX&AD@ç ڲ)eg%&ќAD@é!)g%&TAD@ì?)jq%.,& IAD@îp )hT%&:AD@ðTz)e%*&6AD@óO`)c2%_h&hAD@õ_mY)e%k&$AD@ø/y)dN4% &AD@ú8)a+%&AD@ý)\v%& AD@ÿ~`)Z%Lc& DAD@ )V%& gAD@] o)T%A&OVAD@̀)R,%-&AD@=@%N)Qҝ%W&IZAD@ˬ8)V%& XAD@)Vp%& wAD@Ќ?)[%z& 9]AD@)_-%La&#AD@k`)_0%h& AD@_mY)_%d&,4AD@K1)^%F&nAD@ܺ)[%& GAD@*?)[{%& xAD@Tz)_Nv%~&AD@ )^%%&AAD@yy)`%6&!AD@ڲ)_ %:M&HAD@X`)^%R&AD@)]su%& AD@7`)^%ng&YAD@y)^O%&AD@ڲ)_%Rr&nAD@`)^ +%&AD@Tz)`2%U0&IAD@e)Uz%<&AD(@B)U_&W&\AD( \ No newline at end of file diff --git a/tests/test_fluxcal.py b/tests/test_fluxcal.py new file mode 100644 index 00000000..3b2e159a --- /dev/null +++ b/tests/test_fluxcal.py @@ -0,0 +1,110 @@ +import pytest +import os +import numpy as np +from corgidrp.mocks import create_default_headers +from corgidrp.data import Image, Dataset +import corgidrp.fluxcal as fluxcal +import corgidrp.l4_to_tda as l4_to_tda +from astropy.modeling.models import BlackBody +import astropy.units as u + +data = np.ones([1024,1024]) * 2 +err = np.ones([1,1024,1024]) * 0.5 +prhd, exthd = create_default_headers() +exthd["CFAMNAME"] = '3C' +image1 = Image(data,pri_hdr = prhd, ext_hdr = exthd, err = err) +image2 = image1.copy() +dataset=Dataset([image1, image2]) +calspec_filepath = os.path.join(os.path.dirname(__file__), "test_data", "bd_75d325_stis_006.fits") + +def test_get_filter_name(): + """ + test that the correct filter curve file is selected + """ + global wave + global transmission + filepath = fluxcal.get_filter_name(dataset) + assert filepath.split("/")[-1] == 'transmission_ID-21_3C_v0.csv' + + wave, transmission = fluxcal.read_filter_curve(filepath) + + assert np.any(wave>=7130) + assert np.any(transmission < 1.) + + #test a wrong filter name + image3 = image1.copy() + image3.ext_hdr["CFAMNAME"] = '5C' + dataset2 = Dataset([image3, image3]) + with pytest.raises(ValueError): + filepath = fluxcal.get_filter_name(dataset2) + pass + + +def test_flux_calc(): + """ + test that the calspec data is read correctly + """ + calspec_flux = fluxcal.read_cal_spec(calspec_filepath, wave) + assert calspec_flux[0] == pytest.approx(2e-13, 1e-15) + + band_flux = fluxcal.calculate_band_flux(transmission, calspec_flux, wave) + eff_lambda = fluxcal.calculate_effective_lambda(transmission, calspec_flux, wave) + assert eff_lambda == pytest.approx((wave[0]+wave[-1])/2., 3) + +def test_colorcor(): + """ + test that the pivot reference wavelengths is close to the center of the bandpass + """ + + lambda_piv = fluxcal.calculate_pivot_lambda(transmission, wave) + assert lambda_piv == pytest.approx((wave[0]+wave[-1])/2., 0.3) + + calspec_flux = fluxcal.read_cal_spec(calspec_filepath, wave) + ## BB of an O5 star + bbscale = 1.e-21 * u.erg/(u.s * u.cm**2 * u.AA * u.steradian) + flux_source = BlackBody(scale = bbscale, temperature=54000.0 * u.K) + K_bb = fluxcal.compute_color_cor(transmission, wave, calspec_flux, lambda_piv, flux_source(wave)) + assert K_bb == pytest.approx(1., 0.01) + + flux_source = BlackBody(scale = bbscale, temperature=100. * u.K) + K_bb = fluxcal.compute_color_cor(transmission, wave, calspec_flux, lambda_piv, flux_source(wave)) + assert K_bb > 2 + # sanity check + K = fluxcal.compute_color_cor(transmission, wave, calspec_flux, lambda_piv, calspec_flux) + assert K == 1 + + # test the corresponding pipeline step + output_dataset = l4_to_tda.determine_color_cor(dataset, calspec_filepath, calspec_filepath) + assert output_dataset[0].ext_hdr['LAM_REF'] == lambda_piv + assert output_dataset[0].ext_hdr['COL_COR'] == K + # test it with star names + calspec_name = 'Vega' + source_name = 'TYC 4424-1286-1' + output_dataset = l4_to_tda.determine_color_cor(dataset, calspec_name, source_name) + assert output_dataset[0].ext_hdr['LAM_REF'] == lambda_piv + assert output_dataset[0].ext_hdr['COL_COR'] == pytest.approx(1,1e-2) + +def test_calspec_download(): + """ + test the download of a calspec fits file + """ + filepath = fluxcal.get_calspec_file('Vega') + assert os.path.exists(filepath) + os.remove(filepath) + filepath = fluxcal.get_calspec_file('TYC 4424-1286-1') + assert os.path.exists(filepath) + os.remove(filepath) + + with pytest.raises(ValueError): + filepath = fluxcal.get_calspec_file('Todesstern') + + +if __name__ == '__main__': + test_get_filter_name() + test_flux_calc() + test_colorcor() + test_calspec_download() + + + +