From 9ec1740d9c2dff9d212f30dc7ce13bf4148d314c Mon Sep 17 00:00:00 2001 From: Dominik Neise Date: Mon, 19 Mar 2018 16:40:34 +0100 Subject: [PATCH 1/4] add a NectarCam example file --- .../resources/example_9evts_NectarCAM.fits.fz | 579 ++++++++++++++++++ 1 file changed, 579 insertions(+) create mode 100644 protozfits/tests/resources/example_9evts_NectarCAM.fits.fz diff --git a/protozfits/tests/resources/example_9evts_NectarCAM.fits.fz b/protozfits/tests/resources/example_9evts_NectarCAM.fits.fz new file mode 100644 index 0000000..3a1aa64 --- /dev/null +++ b/protozfits/tests/resources/example_9evts_NectarCAM.fits.fz @@ -0,0 +1,579 @@ +SIMPLE = T / file does conform to FITS standard BITPIX = 8 / number of bits per data pixel NAXIS = 0 / number of data axes EXTEND = T / FITS dataset may contain extensions CHECKSUM= '4AcB48bA4AbA45bA' / Checksum for the whole HDU DATASUM = ' 0' / Checksum for the data block COMMENT FITS (Flexible Image Transport System) format is defined in 'AstronomyCOMMENT and Astrophysics', volume 376, page 359; bibcode: 2001A&A...376..359H END XTENSION= 'BINTABLE' / binary table extension BITPIX = 8 / 8-bit bytes NAXIS = 2 / 2-dimensional binary table NAXIS1 = 128 / width of table in bytes NAXIS2 = 1 / number of rows in table PCOUNT = 128144 / size of special data area GCOUNT = 1 / one data group (required keyword) TFIELDS = 8 / number of fields in each row EXTNAME = 'RunHeader' / name of extension table CHECKSUM= 'WJZlZGWkWGWkWGWk' / Checksum for the whole HDU DATASUM = '3388386835' / Checksum for the data block ZTABLE = T / Table is compressed ZNAXIS1 = 32 / Width of uncompressed rows ZNAXIS2 = 1 / Number of uncompressed rows ZPCOUNT = 0 ZHEAPPTR= 128128 ZTILELEN= 1000 / Number of rows per tile THEAP = 128 RAWSUM = '0' / Checksum of raw little endian data ZRATIO = 0.222222223877907 / Compression ratio ZSHRINK = 1 / Catalog shrink factor PBFHEAD = 'DataModel.CameraRunHeader' / Written message name CREATOR = 'N4ACTL2IO14ProtobufZOFitsE' / Class that wrote this file COMPILED= 'Mar 15 2018 15:31:13' / Compile time ORIGIN = 'CTA' / Institution that wrote the file WORKPKG = 'ACTL' / Workpackage that wrote the file TIMESYS = 'UTC' / Time system REVISION= 31098 / SVN revision MAJORV = 0 / Major ACTL release MINORV = 3 / Minor ACTL release DATE = '2018-03-19T13:37:06' / File creation date DATEEND = '2018-03-19T13:37:06' / File closing date TFORM1 = '1QB' / format of telescopeID [var. Length] TTYPE1 = 'telescopeID' ZFORM1 = '1J' / format of telescopeID [4-byte INT] ZCTYP1 = 'CTA' / Custom CTA compression TPBID1 = '1' / Protobuf ID TFORM2 = '1QB' / format of runNumber [var. Length] TTYPE2 = 'runNumber' TZERO2 = 2147483648 / Offset for uint32 ZFORM2 = '1J' / format of runNumber [4-byte INT] ZCTYP2 = 'CTA' / Custom CTA compression TPBID2 = '2' / Protobuf ID TFORM3 = '1QB' / format of dateMJD [var. Length] TTYPE3 = 'dateMJD' TZERO3 = 2147483648 / Offset for uint32 ZFORM3 = '1J' / format of dateMJD [4-byte INT] ZCTYP3 = 'CTA' / Custom CTA compression TPBID3 = '3' / Protobuf ID TFORM4 = '1QB' / format of imgReducMode [var. Length] TTYPE4 = 'imgReducMode' ZFORM4 = '1J' / format of imgReducMode [4-byte INT] ZCTYP4 = 'CTA' / Custom CTA compression TPBID4 = '5' / Protobuf ID TFORM5 = '1QB' / format of evtsReducMode [var. Length] TTYPE5 = 'evtsReducMode' ZFORM5 = '1J' / format of evtsReducMode [4-byte INT] ZCTYP5 = 'CTA' / Custom CTA compression TPBID5 = '6' / Protobuf ID TFORM6 = '1QB' / format of numTraces [var. Length] TTYPE6 = 'numTraces' ZFORM6 = '1J' / format of numTraces [4-byte INT] ZCTYP6 = 'CTA' / Custom CTA compression TPBID6 = '7' / Protobuf ID TFORM7 = '1QB' / format of numGainChannels [var. Length] TTYPE7 = 'numGainChannels' ZFORM7 = '1J' / format of numGainChannels [4-byte INT] ZCTYP7 = 'CTA' / Custom CTA compression TPBID7 = '8' / Protobuf ID TFORM8 = '1QB' / format of integWindowSize [var. Length] TTYPE8 = 'integWindowSize' ZFORM8 = '1J' / format of integWindowSize [4-byte INT] ZCTYP8 = 'CTA' / Custom CTA compression TPBID8 = '9' / Protobuf ID END  0@P`pTILECCC_ +CCC<CC<XTENSION= 'BINTABLE' / binary table extension BITPIX = 8 / 8-bit bytes NAXIS = 2 / 2-dimensional binary table NAXIS1 = 288 / width of table in bytes NAXIS2 = 1 / number of rows in table PCOUNT = 475848 / size of special data area GCOUNT = 1 / one data group (required keyword) TFIELDS = 18 / number of fields in each row EXTNAME = 'Events' / name of extension table CHECKSUM= '9ajFEZg99agECWg9' / Checksum for the whole HDU DATASUM = '469210095' / Checksum for the data block ZTABLE = T / Table is compressed ZNAXIS1 = 20805 / Width of uncompressed rows ZNAXIS2 = 9 / Number of uncompressed rows ZPCOUNT = 0 ZHEAPPTR= 288288 ZTILELEN= 1000 / Number of rows per tile THEAP = 288 RAWSUM = '0' / Checksum of raw little endian data ZRATIO = 0.998876750469208 / Compression ratio ZSHRINK = 1 / Catalog shrink factor TARGET = 'NectarCAM' / Current Target PBFHEAD = 'DataModel.CameraEvent' / Written message name CREATOR = 'N4ACTL2IO14ProtobufZOFitsE' / Class that wrote this file COMPILED= 'Mar 15 2018 15:31:13' / Compile time ORIGIN = 'CTA' / Institution that wrote the file WORKPKG = 'ACTL' / Workpackage that wrote the file TIMESYS = 'UTC' / Time system REVISION= 31098 / SVN revision MAJORV = 0 / Major ACTL release MINORV = 3 / Minor ACTL release DATE = '2018-03-19T13:37:54' / File creation date DATEEND = '2018-03-19T13:38:40' / File closing date TFORM1 = '1QB' / format of eventType [var. Length] TTYPE1 = 'eventType' ZFORM1 = '1J' / format of eventType [4-byte INT] ZCTYP1 = 'CTA' / Custom CTA compression TPBID1 = '3' / Protobuf ID TFORM2 = '1QB' / format of eventNumber [var. Length] TTYPE2 = 'eventNumber' TZERO2 = 2147483648 / Offset for uint32 ZFORM2 = '1J' / format of eventNumber [4-byte INT] ZCTYP2 = 'CTA' / Custom CTA compression TPBID2 = '4' / Protobuf ID TFORM3 = '1QB' TTYPE3 = 'hiGain_waveforms_samples' TZERO3 = 32678 / Offset for uint16 ZFORM3 = '5040I' / format of hiGain_waveforms_samples [2-byte INT]ZCTYP3 = 'CTA' / Custom CTA compression TPBID3 = '6.1.1' / Protobuf ID TFORM4 = '1QB' TTYPE4 = 'hiGain_waveforms_num_samples' TZERO4 = 2147483648 / Offset for uint32 ZFORM4 = '1J' ZCTYP4 = 'CTA' / Custom CTA compression TPBID4 = '6.1.4' / Protobuf ID TFORM5 = '1QB' / format of hiGain_integrals_gains [var. Length] TTYPE5 = 'hiGain_integrals_gains' TZERO5 = 32678 / Offset for uint16 ZFORM5 = '84I' / format of hiGain_integrals_gains [2-byte INT] ZCTYP5 = 'CTA' / Custom CTA compression TPBID5 = '6.2.1' / Protobuf ID TFORM6 = '1QB' TTYPE6 = 'loGain_waveforms_samples' TZERO6 = 32678 / Offset for uint16 ZFORM6 = '5040I' / format of loGain_waveforms_samples [2-byte INT]ZCTYP6 = 'CTA' / Custom CTA compression TPBID6 = '7.1.1' / Protobuf ID TFORM7 = '1QB' TTYPE7 = 'loGain_waveforms_num_samples' TZERO7 = 2147483648 / Offset for uint32 ZFORM7 = '1J' ZCTYP7 = 'CTA' / Custom CTA compression TPBID7 = '7.1.4' / Protobuf ID TFORM8 = '1QB' / format of loGain_integrals_gains [var. Length] TTYPE8 = 'loGain_integrals_gains' TZERO8 = 32678 / Offset for uint16 ZFORM8 = '84I' / format of loGain_integrals_gains [2-byte INT] ZCTYP8 = 'CTA' / Custom CTA compression TPBID8 = '7.2.1' / Protobuf ID TFORM9 = '1QB' / format of cameraCounters_counters [var. Length]TTYPE9 = 'cameraCounters_counters' TZERO9 = 32678 / Offset for uint16 ZFORM9 = '96I' / format of cameraCounters_counters [2-byte INT] ZCTYP9 = 'CTA' / Custom CTA compression TPBID9 = '14.1' / Protobuf ID TFORM10 = '1QB' / format of moduleStatus_status [var. Length] TTYPE10 = 'moduleStatus_status' TZERO10 = -128 / Offset for signed chars ZFORM10 = '12B' / format of moduleStatus_status [1-byte BOOL] ZCTYP10 = 'CTA' / Custom CTA compression TPBID10 = '15.1' / Protobuf ID TFORM11 = '1QB' / format of pixelPresence_presence [var. Length] TTYPE11 = 'pixelPresence_presence' TZERO11 = 2147483648 / Offset for uint32 ZFORM11 = '3J' / format of pixelPresence_presence [4-byte INT] ZCTYP11 = 'CTA' / Custom CTA compression TPBID11 = '16.1' / Protobuf ID TFORM12 = '1QB' / format of acquisitionMode [var. Length] TTYPE12 = 'acquisitionMode' ZFORM12 = '1J' / format of acquisitionMode [4-byte INT] ZCTYP12 = 'CTA' / Custom CTA compression TPBID12 = '17' / Protobuf ID TFORM13 = '1QB' / format of uctsDataPresence [var. Length] TTYPE13 = 'uctsDataPresence' ZFORM13 = '1L' / format of uctsDataPresence [1-byte BOOL] ZCTYP13 = 'CTA' / Custom CTA compression TPBID13 = '18' / Protobuf ID TFORM14 = '1QB' / format of uctsData_data [var. Length] TTYPE14 = 'uctsData_data' TZERO14 = -128 / Offset for signed chars ZFORM14 = '31B' / format of uctsData_data [1-byte BOOL] ZCTYP14 = 'CTA' / Custom CTA compression TPBID14 = '19.1' / Protobuf ID TFORM15 = '1QB' / format of tibDataPresence [var. Length] TTYPE15 = 'tibDataPresence' ZFORM15 = '1L' / format of tibDataPresence [1-byte BOOL] ZCTYP15 = 'CTA' / Custom CTA compression TPBID15 = '20' / Protobuf ID TFORM16 = '1QB' / format of tibData_data [var. Length] TTYPE16 = 'tibData_data' TZERO16 = -128 / Offset for signed chars ZFORM16 = '12B' / format of tibData_data [1-byte BOOL] ZCTYP16 = 'CTA' / Custom CTA compression TPBID16 = '21.1' / Protobuf ID TFORM17 = '1QB' / format of swatDataPresence [var. Length] TTYPE17 = 'swatDataPresence' ZFORM17 = '1L' / format of swatDataPresence [1-byte BOOL] ZCTYP17 = 'CTA' / Custom CTA compression TPBID17 = '22' / Protobuf ID TFORM18 = '1QB' / format of swatData_data [var. Length] TTYPE18 = 'swatData_data' TZERO18 = -128 / Offset for signed chars ZFORM18 = '27B' / format of swatData_data [1-byte BOOL] ZCTYP18 = 'CTA' / Custom CTA compression TPBID18 = '23.1' / Protobuf ID END 00@bp0cc0biH0 ٬0HxHڐ܌$ܤTILE 0C0C bC`'00GX @,?S @3 xK io}0-!}goa`abc_```bb`d`de^cfaatB<L0 }jli]^`X]\^ba_^`\\cZX]a]pjhimlmrpojjkrvqmoqmto#Lz{xwgslhilknogffclqig'Hd:  g5yJFH7=~6 1>\<h.)tbu_;g|-" +56 4; * p nBlJ +ofjomhkjhkleilnlkjnpsjG +4lsmslgngbggahkkiefieh_fe`dfbfec`e``b`]]dhaBr> wmhgc][^\[_d_[a]\a__]_b`[]b`]^]`__c^Z_jgc/T[#gmqg``_`_\YX\d_^_``c`b##%$$(%$#%)$ $(##"0}d_w=>M,-8,$!'%!#$$!! IvG+/kW:=`/J6 -W{P#;2l TJ 0$;}l4b !O@(# #$!"'""# +b4C`wH7=KZ@*.##@# + 9 X'E+I%  /?HA ommrprsoorrstswroopplqRKk){~quvokfmphhpfgmmkv\ 2TX-$(@7<8;;68868:::77626<<AV Lbs`rSDUmc;4M@,:=39>:2243054PLLPOUSMLNQRRQIIONNR_EEk i% }{t]OSVMLLFHFHKLOIPZ^SKSa *@  !Fu +k<e >5" +  1=_ R!" Q8 X8tyImssqrtuvsvyvzxxxpmqqt} + .)~~xuz{uksxtmmwwsts@! ""G7!nH;760'"!"#caX_da_b]`cdd``_Y[cg[W +TfvbYj[\hYWiaYa[Ta_Z_``\@+ A mU,;. O$=9a +|=8!pv T}^$ 3AABC>D??BDEADHFB@AAGMo"SUT@~n[HFICEJB>==9:DB>=>??CABqi Q;mHT} + c W9Q=  C2>!.;m NS8$l -*G: |||~- 9$|L{wtut}}|yuuy{usuxwv}xPs,$&{{s}vnt{w|{u{|uxxvzz|~ AeYf~|x{{y}zPM m<R\L2Njw^!Z +Km w3.@zyHyi.! H.{[~=;)B 9C ?g.05k + aO\PN ='3 }|*C4wW\[Uc JS$_G74 0,0M\9 ?w* + ~_S(<aU}~}~TrY +I6zxzysy|y~y|{w|||~{{zy w.@%,S}xsyvu{zux}zzxyU g +4A!  +w<u n|+# -3[{Na-B IK0} z _T"ro/wpsqussrxsoqprtuurqrzk+9{qwymqvsuuoopwmqwq    +  +   +   d d$^$+!"0&    +   <Q-+~5 ?Q)Jy^$ AFamY9V ac&qr9k^Muo y?Aoxwm lc5  H +@N c4jp> y o7Y`'ABuV aB+' <(@VqG%+'0'  mS 8mfK7<`_^_b\[adedhda__ad`_h3V|sg]ai^[b^Ua_W]aYYfcX\imhkpmlhllkpsnnnfgghhm0km;+,|nxwgaglmghkeeifhts! `aQB"2// sm +f j`Sc()OzaSN +6HP"'(igc.G-=%\ +==.'_ +928Y~% +yC$ efihieikljjlldihjihilr>y +>zwxmnmc]kheeheghiehj^d`^`_acb``da``a`a__dc|@hgnabja]`\\c`Y\`^be`]_\_`\ah_\hc^^dc^`]_\`np<#|j^ficlg]\]]SScaeobVdf"&" '$%$#$# !$""2iY; + { +x7q(L4+'#)$"  $!'d~ef Q|O^SV=\ jM[|4h,0J^ z 4<jG %Iv$##  #'$"&E%& +pF_}xfJ3+"%4/$  ^x + +>YT{1\? jI m`nrnhoomhnnhnupnpoomklwr{~p}poklkopokkkjollkfmjos&e\~"x~, 6:>98:98;>838?:>677:@MG cd A5m[NRH>:9:713;:8:57785852MPNKFKMKIGKJLKNNKOIJR[ _t]hn[PRROJNPJJKMHKKKMLe 5W" +-rt<G- +U>o +*DF Isvtxuvswtu{xvxuttsqlp|6 i a.;|wtwtrprmnqpwpqts $"%@<x@ _>J48>-(""V_[Y_]X]d][`aefYX`^]_b>~welma^`Z[`aZ[]X[X[U\b_81SJ2XOH,A=H km<yv3@7 @Ti!iT8EIDEC@EHBELECAHHIF>AOoA qa w`PR\\IEPJ<AFCFFA=B@CFHFDRE +U[ W s M?[=4`v)C/*k"|5  0,~9^F#1"(ygKw[zzAyxwz{yzwvyy{xvxyzxtuvwR\ V/}{q|yottpvtrtyrv}|||y~~}{ty~]@a?~~}yzz}wuz{oou2 &+Oe1,;k ]ps$g-yx]:l8  g9g;,  + sog!9{}9>[ 6#\C0~|y} O@  DgWe4$O~ +q+*;a ID@T5? + 2xz,- }}{(: T{}6 ExbI0wszyx~z}~{wzyuxxy;V +d |y{}|z{z~zxxuzz~h  +ZF3"F]' +A'KEP1s mhw'QPy9 +R8 +hf U16| rdrTusouuuyzqqnttprvwtwyv/Wlnt~qn|nqxtpzpkuyrtrr  +  +            +  -^)X *P 8MQN+!         57 rADC  X rX;93 d m2KFPR+ Zb |X..&yV_S qcy/|fD# 1Oq @8D-,e2Vr>M +p_qZ#O<%`':` pP$gza1C(#7A38'  D=_T[_b__b\___dc]^ad_`]\ap,ijuyvblv^aja]aa[VXba]Z\krmniqplldiqrirpheellu2,}jrxegojlmaeoljlokl9K & ) &&pZ~M5  N[wD~eE_Qm+=v T~DeY#';0~ ]h+s i|$u<)[?^MdB!$)hhknqkinkiglkggnmjhkkku4 L$nrinoeglcaikcdeaeieggd^`cd^[`^_bcad^]a`[]cfihFh{xi`cb]fg]__\da]`__\\^\\abc_^egdbb]X_cd`___^f{PF%7) |ZgiTai]\a\X^a_X[`]\`%#"!!"! !  'M T#w|F@SO:######!& qz|?|W-(Lh )M-zD!0< 3  F~ +"-1U +L ++9s! !$!!"!#%! " "#I x&A`_ID<'))(&)'&" Z +5S/*   _9 +_g1lkopplklijopontposohhmp x'`x=||rtyplniiolcgljho3g/Y,I9=877:524986:>::7954=B`VlLYCND:>@9857226876MNOMILPPMMOPQPPPOOPJGV\5:O&upbSNPYMCQSGKSJLLFMSNIEj!5{ +sjmPS@DX1%6 om6c/: +.1fRurwzyvuzwpuzwwsvuqt{{{f +\ %N3Syvpm|vrvoqzxpsspqxp" !  $!*B{ xokfb\Q1))'! aZ]_cc`W^fh``cdcbZ`\]z q, wSjejgfbV`d``ca]\\X``][ ~ uR !c}}N  7][yL8V[<  +`lj$    BHC?HLHCADEHKGFIDAAHJW, + +qjdfjr[\RBGN?CG@BF@?E<>CC@=tz*oC$ PitG.!PGiK),h@hu':|{~~x}z~9YkmHupxwy{y{vz}|{}{}ut{us dx)yutzzyuwuzyzyqyxpxy}~~u{}z :^K/yy{|~{~TC:t)/x;@z9% _Z+(&Yx +9#V%yG ,G' >#GwHo' ,M=J#.% 1X<BCU +iJCSXD}{}~|~R .ths` RSK! &yx!pBG +*\ 0(JH 6#3M i h)~8&+}}}} /H-}~}]r {+L{vvxtvxvv~vvvwxvxuxJ ^<aw-}yyxt|xr~~vxyvwy &T"kV/    =4lvI"c7Q/y R_Mxx),U'8eK(psousvsppsrpnrnppmwxpv_ V8{r}ttpotrpslllnmrop          + I3 v[i5:=(       +     +  p()'7 )0F3A'&& +8Qpyjm9 T2;TLmW/p? 1:BN:4J8 +GZf95D|` 9\c / mihrd`' |C+M"%o0>/) wAuQ_h'%  | "n.Z__]]Zbadcdab]_b]\\_atzrtlblc^d^`bZ\aZab[W``X]`]hflkkhnppmmmijjqidkfh~ +. B+^ zorxqkhdjpddopilkimkbJ% {;8hW +`G]]/eE7>1V pyO3/GfzGZ0 &g[Zp+!xeK== sf y\U`HiGnkgicilkfipmjihjokohfj}nu=>wqwmgijcfjgfgcagoceebca_^b]agd[ce]]cd^ab_csA7rnk`\_adaXbb\a`X^Zaa\Y^^`\]_`^__XaaV\_``[Y\hv[B /@iwm`abc_V^`W\e\^toX\g$&&### #"" (%>G1 #,|$eJ*/4:#(,* $ ! /-3Y>4l5` + +5m)+!k Pq>&C, +) iK +ak'$~] + ![}>#'$$#&&  "%7h 4j?_JOD#/*'&&#&!#2( nl^?vL##  jiikmprqrqpkomlrilnmmqt fOi0xtyroonppomjsqopokhk( _f#-#322269:662.8<?626765:Dql= +jbppF=H82;6:=21964<5-,9;;<6IJJLKMOGGLOLMPMIEJNPMZ'e hUPXLFTOCPKEIOHEJIJHGHw,Ls ]ID!4 * +C  & 60kA  |ytxwux|zvxy|yyvrutv|^ +B X@/ywx{us{xu{{nr{ru}x "#"# 4@W {G"WicSU7"+"&"(/ZZS]_[`b_``Y_^``^W`\[ut +Rqt`[iYT`[U`bUacVT```_`ZDhmae'|D5% +?cM}}$ aa<l +P .aAQ;A?BDEGB>FHECDGIFEB>DNY2u +W :k|{gResZLCBBDBBD>>CDAGH> +D c4(0  ]w%M2. 4& xln #6 },;DO3g g`1x||{wv{}z{{|}|x~~}5 ^?Y>yw|xvzurv{wwux~{}|{}SC W`|o{}v}zyzzw[5h\.s&679cx>% 6@ ]NacbgeGS( +{ 48& +z]kv +G<NQo l+[G |~}{D +jK\%~= B'FD=2|S  $|/>M +GZ G77^ IrwE-1 +{}}{~s0 ,T0}}{|| ut9twxwvvyzwxz~~z||{|jv0^:}{{|vuvzw}~}j <G984 +MCQd<$xj ?%AVK05$y1 ` uqusvqpopnqptnnosjqoqstxctlE,yxopqsltunnnjqsvn  +           A qy<QJ&     +    +5nN2,$Wj-[d4* C }$r yaJqh^# "Fl-NM &9~xE +#U g#G8] S ir>r6M +[& $MwpH &O>.x+?!`'B'@ + +cJf.#  +/>$}u45  + { +  +v_bac^]_e`^`\\Z`f`dffk%X~o|Ygk^`]]d^Uba_ecV\f^_ke]jplljlmjgmponrorqminx Z_Gsjnpkpnhokfgjgejhi P*^J`Y@!*+ x2$?9K3J0i' 6$ \U)~\-tk xY}rnPkC +Sv2 + +5.Ighhfgjhiieehhhkgbknedva&~ 8osohmhkmdcgfhgc_egddiec\_]`_acdfeddb^^`aa]]g.^FB2Iq8~~bkjYafYV`^_a]Y\^\Z^\^_a^^^_eb]`d`cc\[]]_^kwAUowgm +]sXigb`cc^Y[Z]^^]Y`c`]]#!"!!#%($%'&% !"$($2(3tkR]O72/+&&#"&"%(E NE:*kK;WA 9.G/? +p 0 XP + F|&2l aP.  o\ +~ +?#ih#$  !$!$ "#! "#&Ns~ k]WtadpmC%EJ400%&! % #vR$ 8(xYOXklooriinlrsuoqtqmjjpoowj SJ~^spwlmrnkoojimjppV8879;:38:=<=;7?=:9748:A` 9 +c _{lX<BG:;8487/5?87846:85ONMONLNNRJOPONOMOJLMLSp !}6C_=j^_VXRHPNJOPIIQMHIGIQRL!/'`_`  %[PPP2# nn!|7z - jyOvtvvtz}vu|x|~zrvuwxx|z6 +~0ki~~xtz}tyxxvusttty""""$(OB _@tUL;0%#'#!  ][Z^_^[ZU_a_\ad\Y_`\^e,Vh* +r'Ogqiaf[We\\X]^\\VY]`Y G@+ R '<)d +. O;NTDs  KXI!DDC@BACBDDBBFD?@@>ABJa  +cJFKGFKH=?A@>FB;<DAFH=>LRc +x C?:UGadZmMQ? +L1Gv7&PBiyF4~ |h x~~plR#vvzrr}|ytx||{{x{|xxxtz)8<@D#.~}xuuq||wywuwxrx{~~~}}|QI?=+~z{{|~|~yT 90\u,6B02rkJ  +,OM^+15+@R  !n7"$E +S Eg0#a m;8nTM{|# O pi +".i w"%%p@zl2\d"UJLf6DS2#" ~|}~b2 l!3! |||}|}~ lpRz:ywu}}xtxyuy{xt}wr{zz{}w  -Y@0zuzuxww{vzzxz} +^[Ci@  + B nUE4rqTD9eu${3 Ja% +&u ()gmlmptqprqsnnouqmnqpsszbC2zx|wvtmpsmnttintupr            +    +%p  eAHQ'("       P{.w7R=F+ LPce-72/)x2rhV(lwb|B!O h0im9 m~qE=$EPPC7-Ak. XMm3s)  O?`'m>  +B^`3  >Y[#uP#-    Q[`]\^a`b_aa^]de^^[YY]aq:Jts{s]_cea_ed\V\YYb\T]h[\`]Ykbecmmplllklijlqmhkmoy.<R|{kikkkkhjvmhnnclljilhY/)A/` +o,<F CsE, + R1'[vM ^x34rV775H0 9{,rD!2 . cUnE@'gjikiiikiiihjeljgcgjlt$<o%"ohnichjdihfhidgdghb_]acaaffcac^^dd^]afeiy u@\?vbikdfea_`]^db\`^_`a`\`]^d_Y]X[^dh`_`cki}& SP5mau~del^[d_Z^W_e]XY^"$ &!$ ''!%"%&#7}hNAO;XHKO,#/)"&!*"%"#! !dw6?z}plH_pZ' +r$ge$ZC1iF" + LX$!#  #($!&$$D(V Sd$tjj5)4"!%84 $ $?>  +$/L\5. %78Fn=nkijpnnntpoopsqvnjkklo|u 'vz|yoroglunlroilmlso 6, + )t3658:9644869:8779656=FpQvfm7({hh|fH>>B;920064227132/08DKMKHNNONMMMIPMJGIFLR\<<+knkQNYOFMHELSGHKHIKFE24upP5 t +`fa|[#  ]$v Ap; uuy~vw~}zwvtx|yyuruvx~h`U 0zzvxw{zprvuvtuwwxt "##%!#""'+gu  =lbbK81&& \]cc\\_Y]`\[^\Z][\a_Yi?3Bvxvd]g\XY`^YY[U[_[W^\Xc#t&' 7{|} ,  +*yk-=i8$] + s72$0@FEDA@FGCECCEFGB?HFEEQb  W) tgbLHNEBIIB<CDFDA?HADKDfmoZ;|?/G 1AQ), +d +n~E*~l3* D^cQ5 DM%I:xzxw~zx{~www{yxty~y}a<yyxuxuxtuxxvwy}zutwt~}~w{}~}|icaeZ1}}z|{}vxx{tyu}  YS&oM <|f  k6w"_W(<KA4%`! I!\5 O {X> +$ JC4 _d%~||E < QknM|z}|~|v|}R A1PE*,w >_YWm) SM3(SHVd%Nj@ v4 ~}|QUP/}{}l/6$0y{|}{|}||z~~xz{z||y||Z2 +%#ytv~ytzztzyx|xuz\+ + C{H +  JMl%_IsF +Z#`CIt{V md:Qz q3*nrmqqskptmlpoqpsorlmu|GSQ:twxklvpkspjspjlooqoq +     +  +    QQ @zI1q+7C^Z ( +     N&"PZ>['PQ4?^h/ +/!D B hfqN 2-MJX9^t . 1  M +DRNS aC  xX1^d b,h +&/#[|Z`'B +m s +O!>0E + Q{O#$LxF + +[X]_^]c_Z]bd`^\_]]`bfty;Y]k{xVdf\fc\_WYb^^geWX\^ba`Zjhrojlqigjmsnflmieros;p F&=O9"}mvnglg`hpjnnjegiikhg,wvx8hsI6bK&ge\w80;JoVdXA^cK "94!k+ xPyW*|\q`.bjjiighkllnjmlkhcggiikpJ('7neqnhkcegehfcgihgdaaafi`_da^ca_gdaabbcbefr$}{_is\_iYXdb[cg[^a[de`_`a`]_a_^ddb__da`dmi+_kXya{rqkhc]dbZ`cXUaXVac ##" # !!!"'M4L>H:>30* ("+%" SG3 $1JVU~D ptdf }|xB 2$dO2y   Nf~Do{`goP" '$!$$! $D3O}1LdvgEQ\;&3,###Nl + +}WY{~K!  +  r7TNijoloqnrtooprmkpjflklo<3+<mtxpnnjjkonionlhjwO71C:tI7#:789:63898>>99:?8:568:U, KDy\_TWQ<9G@797:95864;;2/<8JNLMMRUMJKIORLJPMHNNKQq(R~+#yQU`MNTMLOIIULIHJGIIG1d4 JaAN p*g$2@4  +</fR~ \%~QZ,|vrwvuz}xyyvx}x|yruz| W(oo|r~ptrmvyqqwutvqjwzs!!" "# (Q(x =aueZ>A422$#!""\]]]\X_\XWV]_]``X[\_ctBTh/*odm`[\WS\`_aXT\`X\_WXIHLhqg!=E +W s>|U& n>R>6 +V`" AABBDHG?EIACEBBDEGJEI\ee  Afdg^YLDKH=@>@II>@D@<AACA8 A9H3BS `6=`$/~f)9F~~  V~|'- s\P)w{{zw{wrw{~{{|z{~w|9'Fc@m~|xz|xxzyxwttuvy~}y||{z}||{|u,.}z~xyzv}uz, 7<kkvK(c%"bAcE1!DIkG|Ml4$/ Xu# - If%"!x7|5 VT;C9~?g9 +E)wT}|~A  1 Ha<3rR.#]Z_ya*uxfGY On8 | JtJrB5{y}hF wa>{|~~Y9q*|zvuvwzyvx{z{yw}{xy}}yn) M\?~v~{z}vw~zt{ws||c v +`.:(# + 0gO  k^U1 =pBD37 X 1C7VH )D(Xerqorlkptrpoqrrtqsonmx.`XT"mmtsprkpooqwlruurxq       +  + + +   EU^ h H`G82>(        O`4,H|&8CJII y1&-V. h@Z4 0 e 7jUF2>? fg +wuy5 k_;!51s +Y|nZG5i= ""Zp qL&`' L +! +0-IW!$wd+30*)  ,3 +_\`dY]__b]\_dabb]^_Z`pzh`tl_jdYd]Wd`[_\W^_[_`[Wmhlpkjimimqqilmhdijkl}&.])snopkfnmdhfbhjecifjln#M?y MsFj&&yY LA S4/r{MK!kvyQJ;M +  u JdJ*)-(uD+egfgjgeeklgefecgchggjmP-c;xyriijjkhjfjegha^kif_dc`\\bceabb_aZ```\_dq<m^k8f>~kohba`b^Z`\W[_[Y\\Ya^]a_\^`_`_]`d\db_ZbghUbD h_gf`X]__\`_]\Y`\\Z!&&#%'! #$!"%&""$#(1X~st9A9#:<!)' #!(* $'$#<6 + Q- +? ! & +uI2q% +kn/a? mu?[C* ;)}k#[Y +"!##  !&'"   "$.p{7qPwf>'1'(4$  !#!!! Ag + @o'L?SMRXG  +L omlolmilmmqrppnpkimmiiuiSQRz|vnqmpkdghjlkjfikfkkBzF +l d}x)49855;:9;<>8688<A;96<Dl5Yu!73rND<7A<-36.19:497+377HGHORNNSPOPNOQOMLPRONX8~.r^us[OYRNKHIKQQJHOLPOLJ`raJT +AzULR> { yB`3n Y +(}@7qqxwuvvpqxtuvtqpsstxt}$Y + +%yvtjw{ouqosuprtptvo&##!!(FqSdSQCD4+.6-"$ ^W[e`X`bYZ^``c]_ZXX\[f;iqphW}F)weo{{jYbfXdh\[e\W[Z[]``_$rGj?/ +pN\Iz- `xyr8P8 | naCXe +8?BBEEAA@EE@DDBC><BKPp'4?| +  +p_n[HEKCBBD?>HI@AHD@B@D4b "g|7N Yw +o-,No]rQWW>/a2 +iK, /^zHwz}zy|{wzw|xz}xzwwxxx6X\+ (nd{t{usxsnw~sutpq|wz|{||{}|{}z{z|:-||z{x|~z~zz = =i]-80yRK8'\C+8 >$w` {qp$  Jk]s-G:  ')?nboH=%X@ + Z\AY'~Iz/!akH|# 11 pl}B@5$ 3sH0N5WqOV +( y, +r |t{/40|~{~zqGT".~}~~U~ W(}~xz~yvwxvws~wy}}yx{zz +#H +{y~}uxtyzsz}xxyobQ D*@lI +LU2sH&)   / h@T@,r PLE_#?r? +6yq;Zq:lonmpqqpoqqsvmptsnrsuu+u'N]vzuqxrphnpyvonmmtspp          j2&yQ+7EM5      +8Ol.N Tkb(Ei7   +jv 3 kS\' M'"i{y. + DWM2 ! GMzkFv ^5}Q <^1PI&! c }~[\K8'UzW#`'>`s , +x7/:JPx{>0  + +p P +bZY_^^\be^a^X]aZ^d`a`]][d{b\ +vnfeaa_^\\\`^\Y[W]_WZklkljhgihokononjplnrp2<DZ<,utpihpneheemkcmri*93qp0&o1szrB9?bCM:@ $X&s+ e^\</P.kfSd= lB 5x1on%3a`BT&bWx|-# hcdhmkfmhfjokjhhiggdiqx!U) phrcctg_jiahheehekiie^bbaffecdbchb`_gd_\`hpOABp~ykkoc^b][``_a^__\Z_\ZX_d`\a``c]_`d`^^^^`nF < &sbsi]_[acYad\]a^Y^Z]_\Y #$)$ %&!$#"'!,G(Y,o]FB#)$$!# $!>5O'! ) WjQ(! + . `?h.%  @U,A 1jJ" C5KbX  "'&"3m %cqrII4'&#"!qO +1 0@-!/ p@ Ttoiklopmnpvqqprollmkjt-__Hw|yrsoijminronkljkp`XR'8<>339513864568=55306<LxS9iX>QE+::(1;8058657116:LPPLOSMNOONMLJOUMONIJY~TRm}~hYXNPRJKOJKTLHQQKMSO ~8P4x|  BIQf + 1k<[:H 9y16_I +kd&)rsuwutxwvsouxxuvvquttv-H ,p}yxysuxsosxvopy{prv"#!! !$&0~Ka]7{MOI@3'')!#ZW^_ca]_gg``bch`W`dbj}> +@ WLst[dk^dbXY`\^g^UVUZ^\^ |_$>{28n.$QtI%zy~:k +U #bnV Es:9& @AEFEGD@FGCFJGID?@EHHb + -PivjKOXFDIC>DFDC?<>>ADAE4O + 3vq\b@ _RNYYE'(&?>wn SPsOu:" V1eY*~z,K3#huzx{{|{x~x{|}zuw}UO U`Ax}|y|uxtwrsx}~xuwv|~{}yzyz]GV4w}|{~z~z~~/aXIrWhoW: aEs W3V6P- "K.yNi%  ,(4e+GB -{|-/8}2j2{}y*k +3_AJUSx||~;8Z$AW ;bbV11^taBy6<RdY  $8"X$p2~}}~|,R2Ix{{zh_ +-]`dNyy|wtwzzvvvzwuy{wy}}}I_{z+!vrr|p}wzzs|.~. + +K69   :](Qz%i 0P + ?&XqGix3zLJ* p4oTI rqnotqpopqpltqonnout~c| +2|J|xzwkwrnpumuruvmnxspr             !)~vk(/*   + l$m*% D\B:)&'[8tSK#7 l?[{>J"p ikc* {gq{L%%%d |`T\N b>[?G0t `=yR8 0C<<<<<<<<<C:`ZM[3?]YCJNVDYU<5;({KEFFXMld(kL%?zZ::Jd"H=R_h8C^FW|^fpSdGIFM,CGNQS*V6St^MGPZ EQ\hh9H4m1H~CC.K0]Nj7iL?Wz=%8H_`FP~(bd;WuH Z\sZ<_FFA(JYDCFV,VVUNWwOGPO\#BW]a\NQL7GZR>^M^YQV:VgU;O\RQ`\G0>&YXCCESKRGEQV;_9+7)MDBF9W%TeeM?U6i9 H +dI8Zag=_]EV`Mx7OcDHKEQLCA|KEW!UWRh\GJPZA)X^FQCq_NS~Q`NAI=cJ`"[Z+XxVOY[\I\=K6?XRIJJQ REPV?;:,GMEnKJ[R:g+gDQ?|W4=4B`DY$kJAaY+H$Sa uP aEI?KCElHSM R&QQbGlKLZ`OCVS[DS@Q_BZQM>O>C`#L3[}[vUX%]Rv]|TfWO6m;$UTWGIPKC>Ya <;:)L K JKM[S#h fPBS?a6^BbF?oZg>;\ +IUK`r#V][IGDiB4JU?z'guLj]XT[]cMhZTfZ L_86U Y-OQNPTGS ]8<?#J$HHLZOec;L?\G39%BnhDV|}i:WCVbrSQ[ELI@6FbBBK}RqRR3OarGcFvP]EVQ^AI<@O`UPGkB#KL>cF +^W=Vx]WzRx\Yab]K6ATUV{KETQLKSVu8V94z*JzDJJ3[KenbkP:AU7O9CrbFYSi|e9TCT`;{T_FB? +J+C@lLVUbTURYJaFJPUEVYGKB4fLX&OJGLB-e+LC]XXY6\O`T&b_]QRf4O1@5bJo\X{X[ZK\Yb]{PE6AZS`KIPQOIQW99u;w<){IFHNYMXjlPC9V14KcCX͂Tg/@VkBUB^wUV^]IBDDKFBDPRVR3]H KVO_BVZ"BR?YcXWIDH4A`-M@\:V[\\XR_\bC`'OsC        !D{Y@2/      +      +  8M*>qZ2#YM'     + +   +   NS/&     + +  )G0=/%_|W( +  +         /koI.+           94C_=$ 2fmPB6 #*M5(@ ' :0-* ;G7F ?mnS0    )\P50    +     +    +  +     +  + (bkG.%      +        +  &EHG@>EHDFFDJJDABBEGFAFHOxv|WTNMIECCD?DDCFECDDBFFAAC?BGFB ;qnV;..!)#&%$#&$$''(*''$$ ##(AnaKA61/+*&%#  $!$!$('%&)(!#8K6_qT;.&" @?CCBBA@CEGDCEDDB?CA?BFUy~ikGKNOFIEBD;=E?DH@;=<?BAABCBBEF +   :]8?! + +      MW#0eqC1337662166954353137215;EiifKC7667833411-1502/175/222,1/0KHIBAFHLEBCFJDJJIEEFDFFNjz`_SMKJHHCBEA@CECGDEFAB@FBCBAAD4b5F_4 =<8i$Tz\("YqO4$ Ua3)xwM%)ow9opooopnlqrtrrskpommkkwyxvrmnnknojlmllmoqpliihhkjjlV-       AeA%)    +  +';^%RM& +=dX<( 0dx]4  +             *XhD43       + + +         Awb@& .^O!8=91jhfegdflhjmolijjhhdfoqxxtmjghmkgfgfjeabflhejjkkgejhiA!upmjmjkihkhllkkjijjhnlo}{tqopnorqnnmllllpnnoqljknnno}}~}}}~ *            + + + +)WwO6)!       +       +  ;xxxwyvuuwsuqvywrusrxuvw~||~||}zyzxurtvxuvurpqrtruv \PC7352.0/4/,/.0152.0231404;PoPR<>?75/1322131/21,1--103+,012"R? ~}}\X7Kk={|z~||z|~}~~}}z}~~~~yy{|}~~|}~y* +   !DzL2/   +   +GIKGGCEGIFECEGHCACDADGFLhmhcKJKHEELGDFEBCAECACEHICBBDDFE2/1101306825121.0/31763:Owv`WD<9<445/3475225341+/45435415F<C]7$ad9 $WE`'K^;       #GkH43  +      Gi4!M]=* +-SC           +  +OU8%-    ;U!KT&.dT8    +   <eycA+&  +    +   + + +   + +1 'jyI&(  +   2kqP?3    4 KS"K2 +Ly2 DLk7#  2(nhE+       JvP:3   +   + +  +              CYD8           D/ACADEGDFGFEGGGGCA?@FEEG]kySOHJKMGEFGG?DCECDDFDFCDBA@EC?(GqXGC&% !%&$##!!" !"%#$#"!! !3UaKJ44,( "' #$   $ #"  4I'TqQ/,!  AA?B@?@CCAFAADCEDDIHCDEWx_dTTJIJF@@AA?DA?B?B==BBA>?E?<?>   1iX=)"    + +      +RhL),gb6*+-450./0-06516621,///14DpyZWFA=954123/35..01.2.1230-0.01CBDKEIHDFFEDCGIDC@DDABFBNi|fSNJHFICEGEACFEJD@BEFBBB@AEGD1LR`3D?aU'Y\+ +kxS9,  [}F+hL l~Flpopppkrrnppoqssrsnllpz~zthjnnmmmjkjospoonnkmnkkllro-;     1[wN7    /#O2#M/  .byS=%  ?R,  +   +        AvW9)$  +    + +    !QdJ'?1QR@)lhlgciihjnomjgmklpjjio|zpkjmklihkigjhjmjfghliiljkjlh D'nlqqmkjjnklljmqjjjooruvxsrqljjklikhinoonhnjjnnloolj~}~}~31  + +      +           +._jR4*               5vvrsuttxvtwrqxyxxuwutxu}xy{|xxswuutrrrtuwutwy|zyrt_}KG-..1.030,,-*+,0--10.+/4=R{eZE?:14013/,11-./000202+,1/,..0*V9 0rx> *PZ'{z~~xy|{}}zw{{{}|{z~|~ ||}yvz}|||}}{~|}~{+        "UtK,.  +EACEDACHG?CBBAEAA?BEACIGNjvg[RMKICEFDAHCBDFEHHFDEGDGEEIE21,/.0./-/0542112524-2;B`mWU@=:630201461.022551358234324=. KQ35kd0;0`'Ak[.       8jsM7/      G#/_T, WN* + +   +  +   .cxR=' +     +#N''=4o^9     +   HsK12     + +    +   A3 (_R,-  +_UC;*"*HF@./B 8$KzrA/@ 9vvS<     + S~G-$)    + +  +        +      +  +  (VO9B#    + +  + + + +     +) D@BDBDBDFBFGECHGJGCFGCEJdpgUPOLNJECFDBEBDGACB@@CD?CBCDF0ejK68'*  $#)( !$%"#$!"!## !"/G}tH9<,'&! ##!$ !#%" #"!%" :%Ia:5%  +  D@GEABAIC@B@FIDBCCB=?BDIdwagNRNG@EIHCEFED>BBC@?ACB?GEA@@        *`bG1(#               +6ruE$$pj: +.,15504303840023/(11/06@b^lLC6<69423231144/45120--3314-4ACHHCBDIDCGJCFIKHJHHHLILhf\URLEHLICB?BGFCAGA><?DDEBEECD'^. O{G- I5 GE"#a}_EoK01 "biI'Eq8!1kc6 pqqqppnomqoqrkkmikoomq~ywtvruronollmonpputosqooknqp/R%  + + +   JY>,( +    B.#K@ )\d6+ A}xV8 +        +?z`<**  + +   +  +      +-euT/\U%%.Q@deghhlkikhgcdekkhihihpw|vmhjhjmklhefdhjkhfhmlhiklhig1%jjjkgeijlokgkmmimoiimjo||~zsnpsrpmhiikikjpopopjilllmn9           +   !?[=2      +          L:usuxssttwwtputsvwqvxtvv~ ~|y}yuttssxvrsptsstvrwptw=g]*.-01./.3-.120.-34.,/,/3CirV\F=231*242/42/1,.-/443/611,/21"gK@T1 &  H|sJ(}{y|{||zzzxx~~~|| yz}|zz|zxyx{||| ;       +:tg?-,     + DBGGCEFFIHEBEGBBAEHFEFHQ]maQONOIJIIEEECFE@FBEGJGFBB?DII,1124//2.841442511,02/4:IouV\CA991432./41342202.13110132/+73`M5t|C'`e4`'"XO(     /_}Q<8&      .^1 ?t3 Xf3   +     +   +5lyL7)    +   +    A#$O=,wB)     + +    +=xxY:-     +     + + CGQ~W4    +%IxfI;5!%/ +EB#KH 5a#=)!VgC+ +NI ?~dA      +'Xb? ,   +                   +  %\[9/       +         KDEGD?EGIGEC?@ECEBB@>@?DCd}\TQOKKGCFEA=?C?=?@CDDBDHECDCB !4c}[90'(# #!##"#  #!"#"$ ,VmLJ30'%(%$$ %! %#  #"9     'HeL25!      =@BHCDB@FCEEBAFF?>?B@BBJczd\NOMHHIGDC@?=?>AEDCA=BD>>=7<>B   +     + + 2i}W=00      +   + + GsR" 'ye25241.146431035<44111/6Ch\cHEA>97771/0/43322110/0,/12377>GFFGDCHGEJIGDDHFEDDDFHHcln^WNFFDHHFFJF@DB@CEDDDCDCGCE@aP>vwI+N67WaY" Gj=%  2y0XZ+  ?lW5nononmolppnnpnlomnnoopy|zwrooooosqsolkmkmlmlgnillln)0   +    &VM>!' + + +'"-]1H0!PvL/!  +/\Y6   +    + +    +   +   :h[5$#          +    + +   ,emN/7vT+ 3;X;rpmoheijjkjkgjkklgjijjquxphlomjhhhgghkljgeijiihhgkig^>ikmmoikjloilpmojoomkjmq}vusoqrqjjginnjjmlokjlmliooq}~      + +  +     + +.]fP=,          +         P1 xtpossxwwtywputrtvvsust ~ywvwvuruswxuuwvuvurvxxtvxTxE$6//2551342*-240204*/02//8PtZMD7358500///11,.***1//2211/02+WA]i?# :zrB#|{{}|~|}||xz~yw|||{}}{ |~~yw}~vx}}ww}zwz +     2ki@<-  BC@AAFDFDEFHCBBEAFA@BGGIPtvcnTOJMFIEEEF?CFDDC@@?AEFFHJECF25/1022//60482/4063421/1@`oaOE><404222232521450/0120,/10=_:(hd3?|Z5 K9`'dc/     0^i9*+   +    Ak7 H{^/L7  +   ;s`9#&        +  .S$A=Jw[0 +      +  +c^B+"     +    / 4sfB" IVD>!#QZG64Z06F/;; F[<#% +)R&>hC +       "QjL,-     +  +       +       +  +  K_>2      +     +  +BDA@?CD?CCDFFFFIJCCCC@DBD`{_\TPJEFCCDDCDFB?DFDFDEAC@BEC@+Yt`H9*(&$"  "#" "$$"$$"!# %!!!"-HhHB8.((+"$" '"$# $""$%#"  ! +N4 3f}cI-  + DA?BABB@DABFA;<?A??AC@ADUu\cKOLEFE@=C?@@>?@<DA;@?=<?E?AD    +    &OeD2B +          QV2X{104464/2333584247500230-5L`\MA:<<831/.+24123306521/36733DFCFIJKEE?EGGCCHA=CHK@@HSqzn[UMDCFGID>DHFDIHEHC@@CDFCEHHL-$\fN. + 'Y; +RI bpD) V~U42%  +=B@bD h>prmplknoopkklmlmnlhpnku~zyupsooqqnplpqptlnqopmimlmolpT6  +  8oiA0% +  +# 3=i>"SyS' + H}qG'   +     +    + +  ,PX<'+             4{Q- +RM&  ?jefkhigjkjorngkgjnokfen vtrolkhgjmgcdgfjhkplhjefghhge*8klnlknomknniimlnnomlmlw}wpnoqpmkklmiikilnkiinoponkoo}| |~~ +       +  + +    +   'dfK4$        +   +   += {zwtuwvsyrptrxvrtqsrwzs}{zxrvwsprswsttqrrpttvwqstFa*1,/312-.-1..-.0-/,/0/,.8P}p]TD>:1./210/-/.*.,,,./12/.0//0:@# Eb):zR6~{y}~~xz~~{~~|||{x|~}|z}{zy{}z}}~{}~}!    +KyQ5-   +  +IFBEHEFHDHDDBEEBAEDDECEJOewh\UUOIHMIIOMKH=ECEFJGGABAGJDGI2;36762158201.120423435?Ry[WE@;:21442344230//24434222412UJ5YG"Vye8" L?`'(tF        Dm`C30!          >\# ]e2 B7   ?}Z4+    +    2a44fP"HL4  + +  + +   +4mpQ5(           +       9, +   #In9  '^bK</" >' 9("J/<4) 5,n^E)  +J3"dvP3 +    FjI+, + +       +    + <X;< +   + +      +  + + 5?B@DCCDHI@CFDB@@<@=7>CHS|kgSNOEGIE@CFB?EF@DDCGC@?G@CEDDC)RqV99+'%""!"$#"#%'!#%#    %#0\tLK00-'$ #""$"  !!! $#! *Q~\=/$$      B@AFFEGC>@?@CBDGA><=:>DI`l`SLNHFCCDC=>ADCC@>@A>FE@AAAB@G     0xnU8)            +:eP1%]k; 6442014.1/1302385024153<WgNLG>@CA74/174111-011371-/00023CFHEDDCGHFB?B@DIGFLJFDGH]inYWPNJIHEFFGCEFDDBC@E?CFDEAEG*@/sB+F7^%E{n<%]rL.# JuX,8rO%  Ew6mlmoorolnsmqoputjlmqst}|wtssmnnlkijpllqnknopmkplmihm5    +  + +    BvoI2"#  +  +1)5+R<6ge2&  Yj6 +  +        +  +   GreB5##         + +     + + +   /^cA$ Qa=0#%Aceeifijihgikhhmhkhgigp~}}tpklhghimligfhnjknhkionnnmie?!jnqphjlnogfeigknljoldkq}wnjmlnnljminpppljgigijkjohlg}~}~}~"0   + +             IkK23   +   +      +  .ruuuwtsuutturrqrpxuswww|v|yvurxrttuwvuxuxxurtowwuCtY0  -(,((..41143/1521/+241)3AkoTSC>5500,2,0333251/-/.,022.0415)}1`D0OpC"{}}~}|~|z}}}|x}}yx~~}{|~xx{|~|~z|} +    2oY20   +F@BCCB@?EEGDEFFGGBEED@IHV|{di[RMKCBGJIGGFFME@G?@A?CFCGFD@12214342103-14222380085>NujgL><922453322342-.35232-22382+H!,s].A}O% GW1 `'gpC +     ?qxJ5+   +         0d:VW+3eL     + +        ?x[8--  +  +     +JN^4<xa,             +    +  "MdK0+    + +     5 1p[@/   7oY>6)&1)I2 ER>)V{[7. O1 6yjD +   +      + + UmM-!   + +         +        +    CmP2.     +  +     5ICDEAC?CEGEDGDBCACC??BCUyfeRONGKOOHGDIGHICDGEC@BCBBF?>?B !" -[yX9-#*###$'## #$  $%% "# (.>ptOC@/+,&&''($! # ##!!7$ =tZ?41"     A?BCB@ACBGGGGICEDABBCCFM\q`fPH@CEJEGCDGED@>DAA<<<?ADCDB?     #H{S50#            + *\{O  ?tc;:5414134532352184/24585Cg\UHB:8886653/1.0442202322321//0DIHHFFHCHEEDHGIKBADKEDFQlxhZSMGHKIHCGGDGDCBCEFDLHEF@B>B?P# 3hc4*0?>XX  +enD4%  <{F,`]!YH' nlppopnsppmjnojnonnnqqtyqssrmnopmomlprmijlmlknsrpmno2.   + '^zB2+   +#I:8Z=.^sJ%& InaK4     +   +      +    >kd5*#           +   6wi<!+VR8/ O5 cdijjmmhekqojkheffnqqlrsswuokkijghhhihijnmjjggfhjfhhmdjfijpomokmjfilllpmoqs{~uvpmkmnhghhkmpnnlnljlljnomo~1    +        +  >kJ7   + +     + +  *7 +uwuuxrrqpqvwpp|vooswtpzzxvt|{xwrvwuxvvsrsvsxwwv}{1H 7(1.0++--,//..*/026-0/03;]mQQA:7//-//131132-/0/2234///.2357G'}~}!~!eP% '7\3wy|xx{{|z}{~z||{{ |}|}|||{   + + + LxR.,  +   +  + GCFGBEGCBFFDBIACBEEEADGQhueaOMIFELIIEEAAAGCFIBFGDCFIFGGE10200251023233443//2515?Zx]TF>999911.4511315/322523045:1$bL@gK&qq3">0`'^L        KaL6%         Q{@H|P&LD$    + +      !MiG47  + +  "DTLXuX, +              *ezW>3!     +  GV>oC"   $McE03"%. +B!GA&U*5-Fq<+ &&c^?        +3ld?!       + +    +       +  *Z~YC1   +      +  ,FC?EDBCEC@KGFCCE?BAEB?FYkr\UPINDGHKFHIEBEEDFC>BCDA?<CEG'F^F@&"%"$ !#!$ #$$%$#!"#!$3ec?E-(0)&%#!$! " " !!"#!$  B   )WrP,.BA@=?@@DEADB@?FCAB@@AA@Hl{jaUQIDGDB??>>A=<?AA>>@???<CAABB      +    6meE,*!       + +  K^" +u^' 207533354289//.0/,3786>GoT[H?=@<2530.-2532024/54323/020/HEBCCDEHEDFDFB@DFADFFFFHQsvd[QKHIGBFDDHCFECCDDBEDCBEDCEDF$S[6 LD_N "\pJ + +(\U1+ 4r{G ji3  f|? popqrupjmmspppnpnjliimp|xxwsqtpkilkkplljjnmnqtqnppmn1+  + :hL*,   .;1)`O BcT+;imG+ +     +        +  @tS?-)     +  +   +       )UmE*B`EE0/lilkdgejkkghhhgdifiigmh|ttsnkmoiechihhimmlijkeejhilli%4mlokkomonhhgipokomlmnsu{ytplprokljhilijkjopnmhjhsnmp} %A +     +            +FW34         +  +     +  ?3qptxtrowvxqsutquxuxtpww||zvqwyztvyworqsvtvxv{uwrqtu.m_;)/.+-.4/-//./1/.*.*-1/1/2Ao|YY?;77./.12/+.3,+(00/5--+132.5WO~~3rb)& 8o|]( }zx}zwyvyz}~}~ {}}|zx}|}|}y|{ 'YlE+&        A>E?DBACAE@EIE??GBBACFHMXziiTSTHFEEEFDAGCFIIBAHEHEEFGFGD2400.-.272200-0.05505135Hw]aID=7;552.233414314246492/125;`+SK)?|{M.?K( `' +R^/   :pvR5( +     Fy9 LkV-PR&       +   LgM4.    +   +  + A4^? +<vb3 +       GkO3"       +,  + +VgB2    0dVB3)! (-A3F& 0$B  +=UD-4< >{`I%$    +    He<(6   +   +           +  DxH/8     + +        +     >*@?CKFAFB?DHHGIE>DDGDBDKj|`WUKDGKKGGC?CCEC?EEIGFGFCD@?GD1ku^=/$%!&%"#! "  ! $$ $"#$ ! '@rsM?<3++)&%  !#""#!$" !##"1  8jrR63  ?BA?@@BA?D?@@?BD@DB@BAHdkbVLIGGFCBDCA@@B<?@=@ACBDHFAA@>    +     +  IoR30       +    (ht3KxA5011/.12/32454282,342/0:PoPQE9:62541/.531263401132/10345EHJHHGKIGHHOHFHEEEBCHIKL\oYSNLJJHIDBFCFDCABACFHIID?@DDCH[ -e{L,'?*\9DsQ$ "\xF$% 4I#@i[.TU$nqnmompupsqorrpoknpqpsu~xwxutljiopljpqsuropppkjlmrpm D:  +  + +1htN9&% + +=#V)*G 2]h9*GxnA       + #GT=%%   +   +    +        +0ioE% 9\? &5 E:ecgiljgghgifljghecdghly~ywrhmpifegmpjggggmkilehmjhhee=#kihgiemljoolmhkikmjfgnuuytqotrkinlnnrjjggimlptnnnppn~~ '    +   +    )XuN34    +       T<vqsvxyzrrsxomrvvxvvtytv{~wz{{{wux|{wtqquvsvswvtzyzdT*#.+..01*(+/1.0),0+-//0+,<NmUQE@<360..//4021015321./.01242/B!~VD#&ZR9|}y}~{}~}|~z}|~|~~~~}z~z}|~yw|y   +  NvM*/    + + ABAFCDEFC?DBFBEGFDEGFEBCRovjdXTNJDMHGAIACAFFIFHADFHFGJID400125322202//0-03/1034>]s\\F@;6/0841325200101011/022445XN^qC 7yd-#)`U-0C<<<<<<<<<C5jA0:B2@.%2,9)@%0>2C)/0'o/*<\(;!@A*;O(DL$F(B N%B88JN.B<,,7t>V9`77s-?(.2=<@L;1'z'@' %@*KV3#J/!1#9c$@NHJP.2:14A0:32@.L2o8?/?:B)/0'/*A<(;f@;A*NC$)F (BMAb88JN.;,"-o6?9W77Q<-?(.>2A><-@:V1W''w'!%7A*T3#IR/!1k$9$@3N2J.@3;04A/:)2@.18y@X/?BK)/0K'/* 9977b-?(.2=<@g;1&'#H'!%MA:+8.3"IS/!1Q$X:[$d@N5J-A3:14A0;R22@%.y2,9@/>B)00'e/*< );p@A*NDh$Fl'BMA588JN.;-,6>868[ -?(.2=n<|@[;2&''!%jA[+23/#I/!1]$9#$G@NRJ.3;05XA0;2?.28M@/>LCI*/0'B/*<);7@AF*N]Dj$8FO(QBTMA88C9KN4.;&-:-6>u967-?(7.2=<'A;1''x' %jA&+Cb3s"It/!2D$[:$"@:NJp.?3:125A,0:1?.29R@B/C?B)I/0o(.*<);?3A>*9NC$F/'BxMSBO89QJN-;c,K-6S>8618J,v?(.2=<@<&2&'^&!%A*334#|I#/!1$R:$6@NJ.3";0 5A0: 2y@.i28W@/>B)/0s'Z/*<(; @@*N`D>$cF'BCMA88JaN-;,-6>G9G77.-? )v.3=<@.;1'A'j' &EA+i3##IM/!1$:.$9@aNJA.:3;W145A0;|2@0.28f@/6?B)B/0'#/*<(; @.A5+`O!D$F'SBNA88|JN*.;~,*-z6'?x96%8Zq-?)).h2=<@l;1&'h'!%wA;+ :3E#Ji/k!0$$: $@NJ.^3B;1C +LAJ +BJ +RAJ +AJ +~?J +?J +@J +AJ +BJ +AJ +@J +?J SaJ bJ ZaJ aJ _J `J `J aJ bJ aJ `J _J XJ !J aJ J J  +J J J  J J J $J ]J &J eJ J J J ǠJ J J J J )JaJ,JiJJJJJJJJJ.JhJ2JoJJJJJJJJJ2JoK7KvKKJ!KKK"KKK6Jt!K="K|!K "KK' K K!K)"K!K!K>K {AK DBK AK BK ?K .@K @K AK /BK AK  AK D?KC         C 0CCHC +PUb  SUb V"a$Ub  XS+_Ub 6[UUb]UbU`Ub b3T)NUb  uehʼnUbCC  +P  S  V  X 7[ ] W` b weCP$C \ No newline at end of file From 2e31802c0e610ed13592e5dadca41cd459bd2657 Mon Sep 17 00:00:00 2001 From: Dominik Neise Date: Mon, 19 Mar 2018 16:41:18 +0100 Subject: [PATCH 2/4] bump version --- protozfits/VERSION | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/protozfits/VERSION b/protozfits/VERSION index 3777077..a8b3d5c 100644 --- a/protozfits/VERSION +++ b/protozfits/VERSION @@ -1 +1 @@ -0.44.3 +0.44.4 From 69f6a2dfc91df87e5eec9d76e89a3d0a7c3560e1 Mon Sep 17 00:00:00 2001 From: Dominik Neise Date: Mon, 19 Mar 2018 16:54:36 +0100 Subject: [PATCH 3/4] add docu how to read the RunHeader ... move less interesting stuff down --- README.md | 84 ++++++++++++++++++++++++++++++++++--------------------- 1 file changed, 52 insertions(+), 32 deletions(-) diff --git a/README.md b/README.md index 266d784..2535461 100644 --- a/README.md +++ b/README.md @@ -10,49 +10,35 @@ If you are just starting with proto-z-fits files and would like to explore the f ### Open a file ```python >>> from protozfits import SimpleFile ->>> example_path = 'protozfits/tests/resources/example_100evts.fits.fz' +>>> example_path = 'protozfits/tests/resources/example_9evts_NectarCAM.fits.fz' >>> file = SimpleFile(example_path) >>> file -File({'Events': Table(100xCameraEvent)}) +File({ + 'RunHeader': Table(1xCameraRunHeader), + 'Events': Table(9xCameraEvent) +}) ``` From this we learn, the `file` contains a single `Table` named `Events` which contains 100 rows of type `CameraEvent`. There might be more tables with other types of rows in other files. -### Table header +### RunHeader + +Even though there is usually **only one** run header per file, technically +this single run header is stored in a Table. This table could contain multiple +"rows" and to me it is not clear what this would mean... but technically it is +possible. + +At the moment I would recommend getting the run header out of the file +we opened above like this: -`fits.fz` files are still normal [FITS files](https://fits.gsfc.nasa.gov/) and -each Table in the file corresponds to a so called "BINTABLE" extension, which has a -header. You can access this header like this: ```python ->>> file.Events -Table(100xCameraEvent) ->>> file.Events.header -# this is just a sulection of all the contents of the header -XTENSION= 'BINTABLE' / binary table extension -BITPIX = 8 / 8-bit bytes -NAXIS = 2 / 2-dimensional binary table -NAXIS1 = 192 / width of table in bytes -NAXIS2 = 1 / number of rows in table -TFIELDS = 12 / number of fields in each row -EXTNAME = 'Events' / name of extension table -CHECKSUM= 'BnaGDmS9BmYGBmY9' / Checksum for the whole HDU -DATASUM = '1046602664' / Checksum for the data block -DATE = '2017-10-31T02:04:55' / File creation date -ORIGIN = 'CTA' / Institution that wrote the file -WORKPKG = 'ACTL' / Workpackage that wrote the file -DATEEND = '1970-01-01T00:00:00' / File closing date -PBFHEAD = 'DataModel.CameraEvent' / Written message name -CREATOR = 'N4ACTL2IO14ProtobufZOFitsE' / Class that wrote this file -COMPILED= 'Oct 26 2017 16:02:50' / Compile time -TIMESYS = 'UTC' / Time system ->>> file.Events.header['DATE'] -'2017-10-31T02:04:55' ->>> type(file.Events.header) - +>>> # because we do not know what to do, if there are 2 run headers +>>> assert len(file.RunHeader) == 1 +>>> # Tables need to be iterated over ... next gives the next row ... +>>> header = next(file.RunHeader) ``` -The header is provided by [`astropy`](http://docs.astropy.org/en/stable/io/fits/#working-with-fits-headers). ### Getting an event @@ -110,6 +96,40 @@ CameraEvent( # [...] ``` +### Table header + +`fits.fz` files are still normal [FITS files](https://fits.gsfc.nasa.gov/) and +each Table in the file corresponds to a so called "BINTABLE" extension, which has a +header. You can access this header like this: +```python +>>> file.Events +Table(100xCameraEvent) +>>> file.Events.header +# this is just a sulection of all the contents of the header +XTENSION= 'BINTABLE' / binary table extension +BITPIX = 8 / 8-bit bytes +NAXIS = 2 / 2-dimensional binary table +NAXIS1 = 192 / width of table in bytes +NAXIS2 = 1 / number of rows in table +TFIELDS = 12 / number of fields in each row +EXTNAME = 'Events' / name of extension table +CHECKSUM= 'BnaGDmS9BmYGBmY9' / Checksum for the whole HDU +DATASUM = '1046602664' / Checksum for the data block +DATE = '2017-10-31T02:04:55' / File creation date +ORIGIN = 'CTA' / Institution that wrote the file +WORKPKG = 'ACTL' / Workpackage that wrote the file +DATEEND = '1970-01-01T00:00:00' / File closing date +PBFHEAD = 'DataModel.CameraEvent' / Written message name +CREATOR = 'N4ACTL2IO14ProtobufZOFitsE' / Class that wrote this file +COMPILED= 'Oct 26 2017 16:02:50' / Compile time +TIMESYS = 'UTC' / Time system +>>> file.Events.header['DATE'] +'2017-10-31T02:04:55' +>>> type(file.Events.header) + +``` +The header is provided by [`astropy`](http://docs.astropy.org/en/stable/io/fits/#working-with-fits-headers). + ### Isn't this a little slow? Well, indeed, converting the original google protobuf instances into namedtuples full of From a35afbe552a9edabb158526fdcdc0f42b8ae13fc Mon Sep 17 00:00:00 2001 From: Dominik Neise Date: Mon, 19 Mar 2018 17:02:11 +0100 Subject: [PATCH 4/4] give new version to users. --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 2535461..472ec0c 100644 --- a/README.md +++ b/README.md @@ -177,11 +177,11 @@ You do not have to use a [conda environment](https://conda.io/docs/user-guide/ta ### Linux (with anaconda) - pip install https://github.com/cta-sst-1m/protozfitsreader/archive/v0.44.3.tar.gz + pip install https://github.com/cta-sst-1m/protozfitsreader/archive/v0.44.4.tar.gz ### OSX (with anaconda) - pip install https://github.com/cta-sst-1m/protozfitsreader/archive/v0.44.3.tar.gz + pip install https://github.com/cta-sst-1m/protozfitsreader/archive/v0.44.4.tar.gz To use it you'll have to find your `site-packages` folder, e.g. like this: