From cc77e2ab532ce35a3a9698515268daeb18e33efe Mon Sep 17 00:00:00 2001 From: Andreas Suter Date: Wed, 15 Apr 2026 14:34:32 +0200 Subject: [PATCH] MusrRoot: XML-schema evaluation files are moved to https://doi.org/10.5281/zenodo.19593555. to have a DOI and not be depend on a shaky URL --- src/external/MusrRoot/MusrRoot.xsd | 198 --------------- src/external/MusrRoot/MusrRootLEM.xsd | 225 ------------------ .../MusrRoot/MusrRootValidationScheme.odp | Bin 13434 -> 0 bytes src/external/MusrRoot/README.md | 4 + 4 files changed, 4 insertions(+), 423 deletions(-) delete mode 100644 src/external/MusrRoot/MusrRoot.xsd delete mode 100644 src/external/MusrRoot/MusrRootLEM.xsd delete mode 100644 src/external/MusrRoot/MusrRootValidationScheme.odp create mode 100644 src/external/MusrRoot/README.md diff --git a/src/external/MusrRoot/MusrRoot.xsd b/src/external/MusrRoot/MusrRoot.xsd deleted file mode 100644 index 87e89b7fe..000000000 --- a/src/external/MusrRoot/MusrRoot.xsd +++ /dev/null @@ -1,198 +0,0 @@ - - - - - This XSD document describes the muSR file structure for CERN/ROOT based files. - In the following it will be called MusrRoot. - It is currently the default standard for writting muSR data files at the - Paul Scherrer Institute. - - Author: Andreas Suter, andreas.suter@psi.ch - - - - - - - - - - - - - - - - - - - The histos folder is containing potentially various subfolders. - At least two subfolders, called DecayAnaModule, and SlowControlAnaModule, - which holds the muSR decay histograms, must be present. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/src/external/MusrRoot/MusrRootLEM.xsd b/src/external/MusrRoot/MusrRootLEM.xsd deleted file mode 100644 index 96f3119a8..000000000 --- a/src/external/MusrRoot/MusrRootLEM.xsd +++ /dev/null @@ -1,225 +0,0 @@ - - - - - This XSD document describes the muSR file structure of CERN/ROOT based files for LEM. - In the following it will be called MusrRootLEM. - It is an extension of MusrRoot.xsd and describes the additional LEM specific entries. - - Author: Andreas Suter, andreas.suter@psi.ch - - - - - - - - - - - - - - - - - - - The histos folder is containing potentially various subfolders. - At least two subfolders, called DecayAnaModule, and SlowControlAnaModule, - which holds the muSR decay histograms, must be present. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/src/external/MusrRoot/MusrRootValidationScheme.odp b/src/external/MusrRoot/MusrRootValidationScheme.odp deleted file mode 100644 index 3b1256618ef3f94199a85778c8522741559004cf..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 13434 zcmb7r1y~$Q);7U|y96H~xVu{*xVr@#2s*&v8r)2(7_yJ!{lUR!U!@1n}Zoawm=&bkg=mR(8ht$)*c9cIR21P`~eCN5B~%7 z0q0){@!`xEWaIFt;bLudpgSMA{vO?PL<3$MTJp`d=ps<|3eW*im}vG(kz(#6(8;m3 zmdOzwaB}wsMBTJ|NQE{jCtCM6ABH!ZZFShhsF_R^BWkg89JP55D+6Wl6kdB30v1)V zV_&k%pH5}mMvZvSKwfgcF?-H}_(p+uir@EK>Q_6hJ%N3}fpTaNBRf#5BSTBssGB38{*SuxN{ z+MKGypvbQkV}@0(wd^fB0!?PbEBCQL--gI zDN)JUxr<+r=R7IsDl3Ph-&P@A7SmE{SSJ0d@0ec7Oy|jK1#X7nxVduD*Dv3G^k++d zvA}^xLrupA#jwQ$$s9IiSj$**?tp;V%CHmKeWIj{*2_tnA;LOV|8&l?5JkQ4EE1oX zdy|#SoS=fpE*H&}5njfhksF(_7)Uq>XCoaJ(506UZF>FPhAww98S|3Jq-^jThED8xrpz0-n-gb|#3dd3KFWgpSD(`w_V)GgMN} zL(~`cZLg0|(B5dBa<7VqUR5HEE7LQWNz(3orhFZu;uVVK5%3xqTgL|J5C}cS(^9s# zIwf86oI7)L|9SkYs+gKGJjQ9MNlx745ILiZ>?v75b9Zt#5j%2Nc&IR<5mmtPusMpo z2C~s7*mXl|IjvJfY^B0gb}f;vZ!N39>ID)En{F2+g+xj;n*&<_HT!Wh(Mm?yG!Std zW;e>}-ntmno_*V5avo9(@xipr+-HL!e`RzzWlHD*S~KS@xt{ucfuU@FHGhaakvUvO zGX)M`brVPmS1Z;T$u!>48ad;26U3`6n3Ex9cYv(l#No0~44MFi+SuvF|DrwTYeUsG=^0 zYNj)eGtbBI1QnZQiu35%9f|of=XIy^XI9d7OJJ!x4r3WxU%hy08dpIs;g`zDETV6D z+oUj;!nuXl1eAfkSi8-&Dc5#!1$nBw@?$7C>U+ISGME>)8Mn*#-=}$j(q#;yj#dd=-J|KasKf-n&dysBjRbM7v#jDm4g~+gIdi zJk5);rSVE8r4F)cbA6f+c_e;s3u|KE1=xYRsc03$fpNS?Own+K6l#-dW zOL=_TTRoFFbFk&`Pv=T4{745l=R9L)t$>aB+JsRzxoA}w5eL^T*GnF8wdki?ve;fa zKw~$niK{N>12-aRUAo`qQ97KI<_C*%AqSSGNpiAaGpSuA4eyzGPrB|?Qqx;LO&lLg z@;Q?t5P{q#OSuJ?>g};O7f|nj3+MDATRJYMnBiOYA=_g8Nu%4P-=!;)6H{i;N~7KT z9J{c$cvo3-`ZUFW$Rq5svRDQWF*#{%rlAh%@D-|cVle6T^@Kv!-uKTh#GzpNXV$3R zYU-e;#$do=D+e!gewPs8RAIqJbTvJjTdQUgMu45-8P-^=dc~!xbeDLY4ZnGX{M7(2 z|DH3!n?^`IlA~Idd{tUvA=OgUa@@Z#VsqORMA~l=X~GT{zAYsIcKq~|A{W0MW?8L? zOj{(b?`)kR^r=@ej(ZaC=8gkyHit#Ia)7m6$%6?d+y$H1F|$)k-BSV*M# zf`~>F1ApVoYN~feJ6PyYT&{Ck_*rbT#MO{Nr2G(pMgs;{IoX)ZtLP zxwy@qntD88+;JsvO&gJ_Lbj4J4Nw&3#KM~?!vIt~-su;vGmHW^$%kyCcA6MD_8&i= zlTjZf2yN67ZV|BPgPpfV0OE#ttaQ{Lt%RO`KRy2LSdee2<^B0YKme&=99`6&l(7G0 z@6bIt!$#dI(?BYOsxh5hW6&|w97|<&w>d@>oZGDJWlU$;a_!I}ZitJ?&UAS6ePJaM zCK>SWPdWSvkQ*~y!|No94flx+#Aa)Nt`J3F59 zU@fgL20yQ=XIp3GJoQj5S@(jM1V`1ZNf6gOBUiHy#=sPKP2zz)7 z<3iRuF@#d4I2|5lI!lp_^~I*fk)|ofAlS_JR7nItqnb<!Z;bTsfEn z-?vc9`y2u&)}br2g?n}kNM1`(^uDQ(pR)en18OlH~H{ z#ne%Y#6ka z{*ETyu!@W{gEAbPHK7x?MDo4QppErpgHNVX;&ukz`H_oo-D97Wh>w1wRoFTRPda@P zcxXORydr9;PFJ$yt8&+C_6|7TRueI{O&jGt@$O%^M^%)8gCBf9JMr}?1Vp$51jIjc zMuZ2>2zGF_0)l@~Mm?FRTuF?!ql!vAxn-AixG6n>)WtDrI>!j@-IUfsGV2Ls3TfNM z5{0j*mz6T3v8F;;g?ICzIFu#b71(1r}%`0&Mjy9b8FWqKJ1c5 zMra-9jAw_6kn0|!8M2}! zR=UYV5t9TZ?iQHt@>oN&jV1_5)74;saw)qq-af%E;-7;47$1#hSFG>U9L-;l_bO^{ z`18ekn>Taw5DQu(cy?N9R_)Ctvu*sGkaGpAH;m_SSj?F7HxOd%{q;-4;K8lQM z$;vZCy@bau8-L$Y?2&D>2z`wEyD!A>t&nzDQ$7;gvKfj+$1x=y zWX@Rr8Trp^k)vKwyeV3_MRePC5xalCY9J!jlFsd7}a%y35rXhV!iz}}> znu*15vdTzCWp$nEg*fz5mM#@(2D}dd1WyTT`@kpd7dYd?+DT)p;ytnB0BDu4gs8b0 zI!Sq98@1DC%nr!D{65h6U7B1dKI&$zd!{Ukq=@Eu9D=u>OXv534~ul|M&V8a{+e(2 zXh&X+O|%-xhKB%Ut^69|Xb4mCfdVOQ?*#b1efqH(^(?L z%B|4wSVJ-!SX=mpAaNu1X%94SBjo#92aZFJa&R1zt>ux*atfoH^mATTGeAi!#vHm+ zBIi)}y9!m^D(V@*_YFjwavxW>1j*A>qZOl{_HT%lnSN@q4Cosm?h?$q71MBa!XAJ> zgHcdO$(O_2m&NjUlyjKbaC3yov4KMS>00{4@`}ds$iWxHu{GS3!IuRi=CHZ66|VQ0 z#v#6}8JM=y0T}RyXKhDmEiZ#(oWC7h@lF?oAg)d*tzj7xz|c~siqlG31kk#1b-dLS zpAquXxZKrBecPx%Fp)6t!wyx2T3OM;9MTQaDo)`bn?Ux=oe?oy0XKJ~1s8mEpyX;P znxv2aPUUx}@;ufP(1P(Y2d`+(;dR|Id0fJ+jz?f3e4nfhzP$S$Y=ti~Jq5Kkg1p|$ znK~UO8OF*)tFJWulU6@-xgCMLNXh}$Cajr@0NaGIOldfjX@cUQ^`<9+U|h)M!WtzD z)sO%M!vevC0D5P^8K+GE1JW&t>wBv(G+6VwSdyYZSsV-nz?ZIFdxAjbv}5_t@;K}P z_h0mAFOZHB?(eRa1Bj(?=SpLjOt?@Z)^KwmUS;M|A|wcMCd~7g-Lj>TSa+VIP4P;r z3I;Mb?_$JW5Rb!g>DbyB%u)^bNqr(il5zL9IL zu&nrlM=q(;(;Sv%ig=wHiM$2%eUTSzVU|{;B%o(KBV`F>xRrfyRMuU!P&VVjwL{y; zVMK|O-FW?+c-AunYI!0?Sk4Gu4s$^y=wF#}0hb-~_L;WOodVJ~`r&7^PirZU4T(8R z;!LTSM=Gc`pA7b)s8SM)C&Q$gKv&Q;b#}z?rL2W5RjbB+V1T};N>q4_X%e@*LLS_a z%ItXfM#e8)+`A?ZnL?JwAl?dMhE>aM))wg_M7ae!g1|J5Dv?jJ_t!@1ZZG}do9qpZ zZD2DgIcMriA4@SI*JJDz09=VW0IExYHR;%!Z8pl1?h8g(dp&dpH6 zCvo>&B63Vzc4|YI7PN9kbcGS%<-M)nU#838ATPI1-q%NQB`?nIOS-rQ9@KD+*>9Gr zMd1oD!PMj{ujQ$gMiku%DIhSaYp{zBAu^qTGrUOIZV%~gU%gMg~kd9g0bY8IMDXs=DKKl^LSdxSI+PpqC!dxAVBu8x1oD&wV5{ zy$~+Lu&|0~Q2!X;3*aPzWii9+x;2?*3YfLR>nZ@jRoyTL4=te>g&CrywG(wM7^3O4 zJn0%gsIKn;e>g`0W&2`w`P@prbR!)M8_D@_^|4$k+jsE<-tS-AUjJtJOT33IT_}l- z*zi~#Jg|-q`>@S8`ai+^7Ox@An@xsHSR-gWZ8muO4NWVHgrySnzc=Z=R9Q;6w~&8qB$FJ%5XvkEBbQ~Mrid|Exi{+?*d1|cK|}c z$0>){n~@p!I8IaSwL1=pT$^wuC4r`MIc+EG#IikB6vF;=GbWydnow<am%d^6=NRaXaH-iC1_TVHF$mT5JF4nqY zx`wT6P4Li$ErKwlkslh$W!6&eGQmgEXu4c!$yVq$bGQ&gjszo1B@P>KcB;Ig6Rnp5 zKw*n9+Z&c*Dqkh!2*GQqjXUoXamfN_7zul0O8;gdY>D^$GX9>a_ch8%&Q^dkyRext^MHRBZV&P5np2*+dVoYllE^L^+KwcR_k@{8_Sn+cW>3 z$0M=Iu<^i6HGBlk7R$zhz{bL%f=;fG!0p6eJI@68i0|jy3Q>RU>aHi;j1z*lgN0M8 zq7IMM6Mdd`uvzD5EZlGQ;~$2ceTE!R^lU$$N<(3HJuQxzBlQZBde;v=Uc7sLV>7`odGa1(@gw#fP4tlTEdd)a+^Ri%P(7q&Kd^ z%|~Hx?CYD_PjS~YelcMpzB(3H)Qz4Xy?=y(pbtMD?`?&+mJaTj!4L@HNe)i2|FA7W zgx&t)ZH?4-#Y^0YtIBl97!K|i1^HU)xXGccQG$|ML6X=S_z3iS%C{y%wKPnDWny8t zv*~%N-!RNR>|7+25YZKn7ggAtEZtp49d+&t+@CG-x@U<|p`VMyMSS8kF+lRIgp-Wi zWGoYl-b`H`q>Q#2TF{VEj(!p8UES`i?*+su?Qqp%MIN&2;+aW$e~Wj&OV z%AxQ@v_XjNcIvCl@t&i+_@M=SduX-Bm4sUwx#2V)hUr`kwH9*9`O4k5!{B7_5IY^m zKqO}k4l70KUOaZEZK0g0?D43o0fWaP6jULX&IxY7lK0%MYGZ#~y>7GkapUITmYgr5 z;4m346B?mOhckOGC!O%?a`Sqc53)7a4f1f{7}~w>QjFs@6IU zJe`_fx@_<VMxF`-wYZ8;_>?JGu|Ocu zzl?tDkDuN3!*o_=W_G5Z`CnFptJwh!?hBP-yal^WWZTmP>xkFq}^ zMt=gB*_)U=81mnP@?bL?lNpnVp@SiVlR40t{FmiF+wp(5mgirs{VC1+$A!lVApKD( zuY$kO2t( zx@I2-SCIe55F6VAf3%e0!F-?~D>Dl#12Y=~D~~D*GcN}RFAEnx)8EMb)CHQDJ3QPJ z3?`2DKQIIpRhgM3nYrcIIaU5r`!A7y*EDuDewaTI7C>VMCN@@PYZe{~ zQAcwt69yg*<_F{-4gL-Ivx0x!=itX+BG|#)nDmDn$mkK~;i7Z2aS#A-Z~~YF`TrVI z-baDoxql)2DE{Y(CA^1;CDqrC)aN`JmL$&!Wwb^}we)2Y z;R6)MOZTa?c;|q~p41ZcRV^Rm1=A?@o91xCdj%ju9l-*+SHr z9fmjPX*E1iz$kB`r+3Fjp$RvTxdQc)RfK`;SW~><5sy<537f<1XrNrAR zkV;jseL|QpO|^MA?5DfT?{Yizzh2zFl3B?=sA^FX2>K9<4@5ZF?W??f8k;4o4@n^& z1H?(Jw?}K|F&NXmJLkBS|Vt9;|E|-%9a2NsQ`%b~? z<77{~?Arjs`@Av8lq`0l(>JflCsn}1QL69DcbX^eu{a`n3;rF8x8pujo!Lb zk$1q<*CRac4iqt)d&xQSnZF5nLAk{EGwAvn83z2laGzc57D@unGJmaBwgxNYY@u%1 z{k5ODO*jwwaykT3c zUJi_AAI~e$Q38={#FjJ%wbj|HgvcJ$}*f2y-kt+pzwNiu`y!X~d+uqfG4FR_mb;O=e5^>StGG+wteGeY*Pa z^#E>P3v^B{4on=w-Z-r63RiJA)Srp6%GGj2o}@Tk9ADON(oB51a3ZjAcPQlhFv*^6 zeG512QBXc;hO2n%{pvF^j zD0X!O@$#9bC^m9{xEnkgd88@i!X61@>+0T77G<`f#&MhX1ME5NmhHbCS z7}jZi*h0q^+o{?I&|!**hOg1w3ew#STn*be>!|&~hpO&uSj|yb3Q8&L;o5gt$Bxh; zs6kOPcsb>)^xser(^98qAnsDdi}|emF8V*nWkp9$WWq-D3m?q5;gGEzXicUp^3D0v zEIQug-Bly)^(NCNU%NCR86Dw5Mp1h!Cb{i-o=f5QZngv76PDbY%ZdHw!`?RnneVbo%nYK$I^p)?<;?O&vFB4-g zl`t@6pRAX>ZyL1scaN3rR7Szzxv$mX!3=iE^<$>jAdCrBQ^ zu$S?hAaLo3NENn)6x!wjtv9q=QqBN(12;V% zSguSBM>MoYan4fH9&7iz#eNm8Ld1HeVD2~lGlc+@eb;w{vLCniI!b#R)byJ|zs!QO zs0$k!DF?{ZD8E2Hvx!}LTE9IPDYXTvB#8nsGftaBMa9dulDcOj6VHZc9kN!D>~F_-*`C35kxFWK@24m!5L`e&1_ za+$stTp3ND_~RPr&@~9o2n}ztb!(P2-)G`Z9p|%~CoA*>(_AJ&cxUDy?KHrqOF5*w7l9=%t zV{@V9nXjH!DxAKu3FawXKmE+Q*nhk}?>Rc@CUrTibJo%1cIu(3v4FM;IzAgDNA4^?ZoA6`8BN{=SeQvvILWBWf(}aAp9MVUZm>NvjUdCcVt)d*oI*+5v;E zvuWpsD3vzXOu%#uCzdDwq;>N>pT$Sca30SQ;>_2A#VN0B)g@*cz*Jusl&kZoHY*SB zxG$c8wbuO@zatmAg?cI=C z7v@+S(}4yADBq2T6R@*9)$rD4GS#D`hMJ~^&tT^?vhUd3QHqoCx9acaBIp^~HK$;E zzY(|aMhE>p2J}XyUVp#f`4%`-?u*Q*@XTC=^~9>snpEO(^Xd9kg|M|-0*Ujv8hc*m3=LBa(U=PPrY7-vp%5_Mor(A{TVaI{I_UEzo2} zTfbUzBnygAF&4Rg3j5UG3)la|tNbE6Grl}DnYQra&=^Xk-FD*J5U>=&sQ5est%w-^ zt-V1KOl6^$=@Y-1CNDUOzV&J7_I&3y&liTh;Vu#?I}0lJu9Q%rZusNOo#cNfZNG$Skj`G zd&JMKwuwa>XE#qK3>O&s&MLh4c->rXj^McDo2|qC(I59BL)2j1g<@`%8(nTeQa74cZR2F5XnMJC zn<~^b76ZZVm?ytpSBdK#Zxcd1aD7&fQaVm?+^RxDwvB6`ttlW9d+05qt4Ct{l_2@H z)*KoSJ1W_jPRB|HOLE(N=g|-n<%=Q30cmV@p8$0#5_BP)_dL|gXoX8X-Dvk_+$Nq~ zn65*dMNcPrzXv(rXK|eTd%}mqf5JWxdb5YceqbX*d!~QZd?eTZscC8jdT@UJFRf>Pqh$-Sb+mnOvK{|F zYkO4r|F_Wr1hV?SwMhQP#s@dn3R0oVxlHHUn3nNhml`-xrNMju)#~kG_>S?40MKA=zViqxgihQ`wRlT{nZz^3+=xP`* zRM(QCY*(Y7HL?|S7AJ;fc(=W_mXj%{Cl>)Di7c*4Ys=F)#F17jcuIr(DTm$+RQ|H7 zZq&5H-ne+BH=@Vf^XA^7KAf8F6L53dBixAL%-_>l{b8*leRxW9&0fB0#V4<-L;;oQ zzz{FpNGD1Rh zVXwj@b#wXO;KJ888e~?KIYiWRRZ)|(41VoMOjdqs{ZxN`HX#3*H#+CZWZWB36J6yaNSvPUyj@K#G z^{&LW$QHfWWK!RdX&`+}gFhUSNzhP#=i8fS6H_GR&`)39mQ)#C%<6pL$VK0H(SbGx z5UBSdRwNQj+DeKXeug~1xNqO6s8kU3L~Hv)LxciFdX`fin$c?AUcR?r{k{pl1#WSl zw|MH4TLrWh2I)KNBEEgg`Sc<@P2db#&Tc+o&X1NaD@&h$*f z@X1c*Xn4o1kXJwp#8=F=>#a@fgZ%lJ*L1SAIPT%M3dSx(xYkU#GO!# zbm(yN_$<%f5c;}&aBYiasF4HHOME2HR}<-~H!qN19QRTmbuMyJZ9&yF=1=}o&^xsk zcyBJJ++g$ zd-*699$JZ-&|ddRFMIPRvtmWEa-Oz3#IM(zrX-#zrjvo2scHU|l}2S4V(d+RU3aKm z+nHM?B$S<&!z-riZ@2BHKlNpiiX}*O9E#$XCRD58OZ2O9`9HF^QHceQsiwf4}^Jp5h-kMNjkuMjIzIBnt z^Rbg@IXksE_bNt@5N9G5I;^CFfs+tUECftVSV*>#*l%xmeZKR7~KVA^6EF!kSd=WvFYLaaZh=KxrA( zYlX0GT_%idvWBA=Lka@{F;4O8FYfQ2tk@4vRylE15e6xF z2`1}@8A($h_{ZY(x&#@UPG+>gt8~Drpwp+4Q1}GxVybL7=3xrWQ<+Q_-}xC4nDIn$ zk&^+`i1zy{v|!y}Puq8HpT3P_?pw2DP#A zo}sOK*HU2$lrF(<8U?y5>44SE8zxN(J(D8ia&BNtlc#Jzit33)+kHJtxm2O{ zg7k&Z7mp9`=qW}Cn4U^EUXcZ)PZlG2QQ-37oi1VdS<=A?pA_^DC{m-gafDW~ByFAd z<$lw#04^oyXb6$GFBXtzTyTN#Gt?(eJeOK(GF30`fmm9<_e)wMVk|JC#3V|C4F` z1NHj_`l~^|K_DO=sow7dL;c^N|4#h=eFT4NLO}d`BZdA3={FJlXOu^#^gB8J4a%Ry z@Sk!1-I{lQgY%mx{;w$Oe}nRyIQ}!rBX#_p@M-?LkN=BE{xjIWcaZwufc;4==`0w8UNuyswe{k`zVI`@HvEnfN)}d%>6&X CesXL8 diff --git a/src/external/MusrRoot/README.md b/src/external/MusrRoot/README.md new file mode 100644 index 000000000..2583735e0 --- /dev/null +++ b/src/external/MusrRoot/README.md @@ -0,0 +1,4 @@ +The necessary XSD Files for the XML-Schema evaluation +can be found here: + +https://doi.org/10.5281/zenodo.19593555 \ No newline at end of file