AaX*SHeHH SKI`R     dFootnote TableFootnote**. . / - ']/" ]LOT TableTitleLOFFigureTOC1Headingy$yz {|}~     !"y 56950: 1Heading: 3.0 Class Names #38824: 1Heading: 3.0 Name Structure ;13356: 1Heading: 5.0 Mapping of Dataset Names to File Names% {} !"  z 56950: 1Heading: 3.0 Class Names #38824: 1Heading: 3.0 Name StructureI 45728: 2Heading: 4.1 Program 83014: TableTitle: TABLE 1. ;13356: 1Heading: 5.0 Mapping of Dataset Names to File Names  <$paratext[Title]> <$paratext[Heading]> <$curpagenum><$lastpagenum>eT<$daynum> <$monthname> <$year>1H (Continued)+ (Sheet <$tblsheetnum> of <$tblsheetcount>)<$daynum> <$monthname> <$year>"<$daynum>/<$monthnum>/<$shortyear> 5<$daynum> <$monthname> <$year> <$hour24>:<$minute00>  <$daynum> <$monthname> <$year>"<$daynum>/<$monthnum>/<$shortyear> <$fullfilename> <$filename>3 <$marker1> <$marker2>inPagepage<$pagenum>3Heading & Page <$paratext> on page<$pagenum>meSee Heading & Page%See <$paratext> on page<$pagenum>. Table & Page'Table<$paranumonly> on page<$pagenum>6 Figure & PageC(Figure<$paranumonly> on page<$pagenum>inSection & Page%Section<$paranum> on page<$pagenum>4Equation NumbereTiHeading<$paranumonly>NinoDaFe TOC Tleate ueTm<$a1Hnd) tb$lstam" tum## ''$At))<ouff> ,-mA$//ahhm<$$$rea``uAi:: LOFena<<aLOT>??rIX%%a&&311e<22peUAebbeSeee pAABB'bl!!>n DD\EECFiFFn> GGuinHH geMMam>IIn>4JJNbeKKuerLLnNNOOPPZZQQ RReSSeWW XXYYT[[$\\H]])^^buusvvwwmxx"yymzz{{t||u}} ~~$$aiO! !/<a"$#?r$%1&2&'(1e1.02)e2.0*+be4.0e, p-A./bl0!>123E4!5Fn67#in8H9%:Ma;&<'>4=)J>*?+Ku@nABNC3.0DPEFZGHIRJeKWLMXNYO$P\QR])S^T4.4Uv4.4.1wVWx"XyYZ[{t4.1|\4.1.1]^_`$abcid4.1.2e<afg?rhi&2jk1el 1.0m(en2.0o,p-beq.4.0r ps-t.u/vwxyz{|}7#~84.4.2?+ABCDEFR4.4.3KXY4.4.4Q)4.24.44.1x"X|5.11.1`$cdikl e2.0,eq. p4.2.1w|}4.1.34.2C5.045.24.45.3) TABLE 1.4.1.1$4.3i4.3.1kl e.11.3     4.26.0!"#$%&'()* TA+,-./0123456.1789:;<$=>?@ABCDEFGiH4IJKLMNOPQRSTUVWXYZ[\]1.3^_`abc4.2defghijklmnopqrstuv!w"x#y$z%{&|'}(~)*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~SKI`e'fSKI`e,hSKI`e6ixf 6ixV+UU1.]reasonable. There is no intrinsic hierarchy apart from the required 9program. class, UU@1._which is at the root of any search tree, and the 9series. which is presumably at the tip *UU 3.YWithin a particular class there may be multiple subclasses. As the intent is to make the 6UU3.Wclass definition apply to all datasets represented by the class, the subclasses can be BUU3.Vdistinguished simply by numbering them. In the case of a series, for example, the subNUU3.Wclasses would be the individual datasets within the series (images, say), described by ZUU@3.their sequence number. rUU .VThe foregoing remarks apply to datasets, catalogued collections of data. Each dataset ~UU.Xof course has its own structure, consisting of perhaps multiple kinds of data organized UU.Qin some kind of array structure. The scheme presented here can be generalized to oUU.o _include the naming of individual data, by use of an optional class 9variable. (to select s aUU.seUmembers of a data structure) with a sequence number to select an element of a muilti-UU.laUdimensional array. The tools invoked by this particular class would of course be dif3UU.tiUferent, as they would exist within the context of data-structure manipulators rather UƪUU.isZthan name-servers, but it is probably useful to present a unified data description at the ҪUU@.d interface level discussed here. thꪚUU 8.saVIt should be stressed that this is a general dataset naming scheme, not a file naming UU8.maXscheme nor a database keyword list. As such, it is possible to specify an arbitrary synofUU8.n btax for the names; however in the specification of the name syntax (sec. .3.0) we have UU8.urTtaken cognizance of special requirements in order to minimize the effort in mapping naUU8. dTthese names to, for example, file names, and to parsing by a command shell. Also of me&UU8.ruVcourse there will in general be file names for the file representations of associated 2UU8.heUdatasets. The mapping of the virtual names described here to actual filenames is dise>UUH8.d cussed in sec. .5.0. trb`)7s Dataset & Data Classifications n nzUU *.t TThe following classifications for datasets are recognized (recognized and/or sample inUUH*.us)values are provided in .z4.0): UU`,9hiProgram. Required minUU -.lePIdentifies the overall scientific program or instrument with which the data are osUU@-.n associated. ofªUU ..n PThis is the broadest category, but it should not be so broad that the number of 3ΪUU..Lpossible values is negligible. For example, SOI would be too broad a catee ڪUU@..inCgory, as it would encompass virtually all of the data of interest. d t骙UU`b9maLevel UU`c.?The processing or reduction level of the data, as appropriate. filUU`9ofModel UU .8LThe observing instrument model, or the theoretical model used for data creana"UU@.tion. 1UU`9c.Source 5.0@UU`.:The observing program source for derived or tabular data. OUU`/9g Series. Recommended s^UU 0.ecQThe smallest unit into which datasets are divided. The key to deciding whether a jUU0.,Jdata group constitutes a named Dataset is that all members share a common SKI`ewiosHixf ofHix c&y,UU0. bOstructure. Any operation on one member of a particular series should work idenle.UU0. Otically with any other member of the same series. The only way that members of tuaUU@0.a Ca particular series are distinguished is by their sequence number. pr6UU .ioWThe above list is of course not intended to be exclusive. Other classifications may be LThBUU.meWintroduced as appropriate. In addition to the above, there is also the data classificaNUU@.cetion: `UU`9Th Variable hC7 dName Structure a. UU D.g TNames of particular classes should be formed from the set of 62 alphanumeric characs UUD.eyQters {AZ,az,09} plus the underscore _. Use of the colon :, comma ,, and tUUD.rsTsquare brackets [] is forbidden by the syntax. The use of all other characters is UUD.Wstrongly discouraged as potentially interfering with other applications. The number of Any̪UUD.meZcharacters in the name is arbitrary, but within a given classification the first 7 characتUU@D.e 'ters of the class name must be unique. UU E.a TWithin a class, individual class members may be distinguished by a sequence number. ioUUE.s WThe sequence number is an unsigned integer. It should be stressed that it is a number, .meUUE.prWnot a character string, and hence of arbitrary length; leading 0s, while permissible, .ceUUE.UUSare not required. There is no requirement regarding starting number nor increment, TNa UUE.clValthough it is expected that the first sequence number of a sequence will customarily ,UU@E.lu,be 0 or 1 and that the increment will be 1. mmDUU F.XIndividual dataset names are fully specified by specifying each relevant classification tePUU@F.UU#and sequence number in the format: entbUU`G;wiVprogram::prog_name;{[:sn;]}{,:class:class_name;{[:sn;]}}{...} zUU(H.jHere, Hprog_name. refers to the recognized Program Name (sec. 4.1) and Bsn. refers to UUH.a Tthe (optional) sequence number (curly braces enclose optional members of the name). ioUUH.s RAdditional classes and class-names may be defined and used as needed. As remarked UUH.UU_above, individual data can be described the same way, using the class 9variable.. In the .ceUUH.UU\case of an individual datum, for which the optional 9variable. sequence number really UUH.ouWrepresents an array index, it would be very desirable to be able to specify ranges and UUªUU@H.1 9wild-card entries to refer to multiple elemnts, Be.g. nڪUU`9am6,variable:Cvariable_name9[Csn0-sn19]C UU`9?,variable:Cvariable_name9[Csn0,sn1-sn2,,sn3|sn49] `G UU .prZbut this creates significant complications and is in fact not likely to be of much use at UU.amXthe user level as it requires detailed knowledge of the data structure, better provided "UU@.thby user tools. enc:UU .acRFor ease of use, implementation programs should be prepared to accept the abreviaFUU.aytions 9prog. for 9program., 9lev. for 9level., 9mod. for 9model., 9ser. for 9series., and 9var. for 9varRUU@9UU iable.. indSKI`enaue6ixf H6ix be+deUU . tOIt may be argued that the described naming scheme, especially with fairly long pleUU. nRdescriptive names and required keywords is much too cumbersome to be used interacUU.riWtively. That is not really the intent. The purpose of the descriptors is to provide an s c*UU. cXunambiguous baseline that different levels of software can use in referring to data and l6UU.s [datasets. In real interactive life I expect that ordinarily an environment would be set in ls.BUU.Wwhich virtually all classes would have default values and only a single or a few class FNUU.tiQnames or sequence numbers would be varied to inspect, analyze, modify, or create rZUU@.9data. ~h+7, yRecognized Class Names RUU Z.iaVClass names are organized within programs. The program classification is required. It UUZ.HVis intended as the most general classification of data within the context of SOI. The UUZ.beQexistence and identity of any other classifications depends on which Program the aUUZ.ey\dataset is contained in. The range of classes listed here is intended to be illustrative of lyƪUUZ.urTthe kinds and sources of datasets likely to be encountered at various stages of the tҪUU@Z.ls7reduction and analysis of scientific data within SOI. UU䪫UU`@.. MDI_ground actUU A.thNAll solar and instrument-characterization data obtained through an MDI camera UUA.woOon the ground from various levels of prototypes up to and including the flight Qna UU@A.mb=model of MDI. Associated with the following special classes: UU`M.daMDI_housekeeping +)UU ].edNAll housekeeping, orbital and instrument status data relating to MDI while in 5UU].ifSspace (perhaps after integration in the spacecraft). There are no special classes. icaAUU].n LDifferent series may be associated with particular instrumental subsystems. heMUU@].de9Orbital data will presumably constitute a single series. s\UU`I. r SOI_dynamics kUU s.enJDatasets derived from each of the SOI Dynamics Programs, i.e., continuous wUU@s.be,images taken for periods of 3 days or more. UU`J.ctSOI_magnetograms UU`t.th,Data derived from the SOI Magnetic program. ctUU`K.thSOI_structure UU`u.er>Data derived from each of the defined SOI Structure Programs. ªUU`L.om SOI_campaign ѪUU`v.o 5Data derived from each of the SOI Campaign Programs. ઙUU`. w SOI_calib 滛UU`.seMData derived from the various Calibration and Extended Calibration Programs. iUU`X.st OSC_modes  UU w. MNThis is an analysis program, in which the datasets do not inherently apply to UUw.o Tobservations or to observing instruments, but rather to an object of study, in this ic%UU@w.su;case the modes of oscillation of the Sun (or other stars). y c4UU`Y. s SUN_model CUU x.SOOAn analysis program defined by the object of study, the modeled interior strucProOUU@x.nuture of the Sun. s^UU`N. fVIRGO SKI` eUU raHix f ivHix +KUU y.e IData derived from the VIRGO investigation on SOHO. Presumably there will rUUy.UUKbe information from this program that will be of interest when compared or OI UU@y. :combined with datasets of various SOI and other programs. -UU`O.riGOLF i<UU`z.ed2Data derived from the GOLF investigation on SOHO. KUU`P.wGONG_prototype anaZUU`Q.wh GONG_station siUU . aIA program for which the definition of optional sequence numbers might be uUU.t Qapplicable. Alternatively, the classification station might be introduced, the (UU. cRassumption in that case being that there might exist differences in structure for UU@.dy&datasets from the different stations. UU`R. oGONG uUU`S.NWSO VIUU {.`LData derived from past and continuing observations made at the Wilcox Solar ivƪUU{.QObservatory at Stanford. The extent of correlations and intercomparisons of this nҪUU{.O.Kdata with SOIprogram data will be minimal, but these are the datasets with m tުUU{.erMwhich we have had the most experience and understand best, so they provide a ꪙUU@{.ra:convenient testbed for the SOI data analysis environment. UU`W.LF MtWilson iUU`.NOAO PUU`V.peSolar_Indices &UU .tiIVarious whole-sun indices derived from numerous sources, such as Sunspot q2UU@.t ?Number, Solar Radio Flux, Luminosity, Mean Field, Betc.. catAUU`.t  iMUU e.RIn order to give a flavor for how subsidiary classes might be created for dataset YUUe.Rdescriptions that would fit into the present naming scheme, we provide a few exameUUe.NTples based on existing datasets. These descriptions are generally extremely sketchy atqUUe.ivUand are only intended to suggest some of the headings that might be appropriate. Gena}UUe.Serally, each major program should have a document describing its class name scheme ts UU@e.UU]at the level of detail given here only for the datasets 9prog:MDI_ground,lev:raw..9 UU`[Qen MDI_ground for`\6ysmodel תUU ^.UUUDatasets in this Program can be subdivided according to the fidelity of the instru㪊UU^.VaSment model with which the original data were taken. So far all data has been taken @憎UU^.r Uwith the instrument in what is referred to as the Optics Package Test configuration, UUU^. tNwith some non-flight parts and no image processor, camera-data being read out UU^.riXdirectly to a supporting computer system. This model is referred to as optest. Future eUU@^.n Nmodels include the planned Sunlight Performance Test configuration sunperf. %UU``.aroptest ten4UU`a.e sunperf diK`d6aplevel dUU r.UUVProcessing level of the data. So far the only datasets catalogued have been raw, so pUUr.UUTthis class has been implicit (and overlooked). There are other datasets already proleSKI` een 6ix f ^6ixIw ivccUUr.elQduced, however, and certainly more that can be anticipated. These include regiseUUr.llOtered (which only applies to model:optst or any other model lacking the Image rreUUr. POStabilization Subsystem), combined, calibrated, corrected, mapped, and no *UU@r.ammode_analyzed. <UU`.^raw diKUU .tiWThe raw level of 9model:optest. (which is so far the only collection of datasets NmoWUU.laOcatalogued) consist of MDI camera data (filtergrams) converted to FITS format. estcUU.aOThe only data modification involved is conversion of the header value of Obserl ooUU. tPvation Time from local time to UT. All raw series have the same structure, with as{UUH.d *the parameters listed in Table 1. UUh.K e˪UU .UThe raw level of 9model:sunperf. will have a more complex structure, depending תUU.ccMon the values in the data header from the Image Processor. (Some datasets in d㪆UU.egJthis model may be made without the Image Processor, using the same direct 徭UU. tTcamera reader as was used in 9model:optest.. Several options are available: a cUU.,Wnew class (Be.g.. reader) could be defined, (it would only take on one value for UU9l Smodel:optest.); a new model could be defined; or the applicable data structures UUUU.edNcould be defined as the union of those applicable to the two readers. I recomUU.onQmend the last option, since the direct camera reader provides a proper subset of +UU@.on$the information provided by the IP. er:UU`.st registered asI~UU .d ORaw filtergrams which have been registered, i.e. displaced so that the solar UUU}UU.leOimage has a common center, with appropriate truncation and zero-filling of the a|UU.heObackground. Since this step was only necessary because of the lack of an Image UUm{UU.elPStabilization System, the level is really only appropriate to model::optest. On tSKI` emalHixf Hix er*d UU.ulMthe other hand a comparable level would be appropriate within numerous other mUU.neQprograms. The structure is the same as level::raw. Two additional parameters are hUU@.pp%introduced, the displacement vector. -UU`.me combined <UU .diIFiltergrams combined into Dopplergrams or other products such as magnetonHUU@. bgrams and photograms. WUU`.ed calibrated UUfUU`.er corrected uUU`.remapped disUU`. smode_analyzed `6e series monUU .opUThe series has so far referred to a particular observing sequence corresponding to a sUU.es^predetermined set of instrument configurations Bcarried out within one day.. In keeping ̪UU.prTwith the idea of a series applicable to other MDI programs it might have made sense alتUU.fTto label identical observing programs carried out on different days as parts of the ul䪜UU. cVsame series. It can be argued, however, that on the ground the instrumental configuraUU.isUtion changes almost inevitably from day to day, if only because of sky motion in the dUU@. vZcase of solar observations. Some series will in all probability last longer than one day. UU .prLThe following list of sample series names is applicable specifically to modUU UU.ed\el::optest,level::raw. It is not exhaustive; as mentioned, a run of a series on a given day _a,UU.Qwas given a unique (almost) 3-digit sequence number, which was included in its c8UU.ue^name. This there exist for example 9series:m1rotser049. and 9series:m1rotser087., DUU.n drather than 9series:m1rotser:Cn., with Bn. = {0, 1}. Likewise some series names were msPUU.e ]given numerical enclitives, so that there exist 9series:sundop2073. and 9series:suny\UU9ulbdop3074 .along with 9series:sundop075. and 9series:sundopser053.. The full list is hUU@.UU>given in the relevant data catalogue (see SOI-TN-93-102).9 zUU`.otcracks e dUU`. vfdfocus soUU`.Sohrfocus wiUU`.itcalpos ngeUU`. m1rotser ŪUU`.g m2rotser pԪUU`. a tunerotser cif㪊UU`.sunmix UU`.evsundop It UU`. alamscan d,UU`Q oSOI_structure 6`6series en CUU .3-REach programmatic element of the overall Structure Program constitutes a separate OUU@.xaseries. eraUU`. LOI_doppler :mpUU`. LOI_intens .n HE$ fN HE$   sri `81 MUl Ef esl E 3d `8observation date oM7 E$ f 07 E$   fst `8date iM 2Ef e 2E  d `8 v dMuHT$ f wiHT$  UU `:82 Nl Tf al T ix `8suobservation time UN T$ f o T$  es `8Eatime rNaSKI`ere= sH~6f9 esH~6UUUU`".ns"<$paranum><$paratext><$pagenum> `9-"<$paranum><$paratext><$pagenum> )US UT`;X"<$paranum><$paratext><$pagenum> 2Tf 2T rv `8  N Hc$ f  Hc$   `8 3 Ol cf l c  d `8unumber of columns O c$ f  c$  :2 `8int O2cf 2c surv `8  O Hr$ f  Hr$   `8a4 Vl rf l r es `8number of rows V r$ f ra r$  9<$ `8t>int enV 2r f# $p2r  `8 VH%$ !fID H%$   UTUT`Fparam PSKI`"eCCH$ #f $ H$   `8er5 Uul $f#% l   : `8&position of Michelson tuning motor #1 U $ %f$&  $   `8int U2&f%1 2 a `8f UHix'f( Hixer`#0  H)(n') H))H.1&)f(*  H.1&h26 {| HA*l)+HAA%H+m*fHP1cnQ\(,f- 1cnQ\(-fUU`5.  Hhnyh-f,. Hhnyh,%H).n-/H))H0$yQ/f.0 niH0$yQh668 March 1993 H\hr0o/gH\hr\hrH$ 1f&2 H$   `86 Tl 2f1A l   `8&position of Michelson tuning motor #2 TSKI`3e 4tHA3K ^4f53 HHD FootnoteH-5f47366Footnote6m51H7f5j318i 1Heading Rule_8mi7HHn(C ^9f: HwjHwjDTable of Contents Specification)H-:f9; $H-UU`<."<$paranum><$paratext><$pagenum> H ^;f:< oHEHEDList of Figures SpecificationH6<f;= H6UU`m."<$paranum><$paratext><$pagenum> HJh ^=f< HEHEDList of Tables Specification oSKI`>e?@H~?f@> H~`=81, 23 `>8$<$symbols><$numerics><$alphabetics> `?8 Level3IX &`n8 Level2IX 0`o8 Level1IX C`p6iLSymbols[\ ];Numerics[0];A;B;C;D;E;F;G;H;I;J;K;L;M;N;O;P;Q;R;S;T;U;V;W;X;Y;Z L`q8 <$pagenum> ^HlAmN ^@f?> jHuHuDeIndex SpecificationH $ Af2B  $   `8<$int m>Tp2BfAX ^2  o `8at T6ixCf" 6ix#UU`$.<$&Brackets {} denote optional parts. UU`%.(The symbol "<>" means concatenation. Ta*UU`&. o!A "|" should be read as "or". <UU`'. NUU`(.fKdatacollection_name ::= dataset_name where the member_numbers are ranges. `UU`).1dataset_name ::={dataseries_name,}data_selector erUU`*.Hdataseries_name ::= program_selector{,class_selector},series_selector LeUU`+.-program_selector ::= prog:member_selector ;UU`,.Q;6member_selector ::= member_name{[member_number]} UU`-.fmember_name ::= name UU`..x /name ::= alphabetic | name<>alphanumeric ̪UU`/.member_number ::= number ުUU`0.<$'number ::= digit | number<>digit UU`1.Bclass_selector ::= {class_selector,}class_name:member_selector UU`2.class_name ::= name UU`3..series_selector ::= series:member_selector &UU`4.l 5data_selector ::= {sel:}var_list{[slice_selector]} o8UU`5. var_list ::= name{,var_list} e JUU`6.1slice_selector ::= record_range{,array_slice} c\UU`7.serecord_range ::= range rs nUU`8.range ::= number{-number} ={dUU`9.ta-array_slice ::= axis_range{,array_slice} aUU`:.ecaxis_range ::= range UU`;. UU`<.m_Notes. :=ȪUU`=. ڪUU >.Q;PA dataset_name consists of a data_selector optionally preceeded by a dataserieme檏UU@>. >s_name. The data_selector must contain at least a var_name. UU`?.UUDIf a dataseries_name is present it will always start with "prog:". be UU`@.er UU A.UUWThe basic unit of data that is handled by the SOI DSDS is a dataseries with a single `2(UUA.e Rvalue for each dataseries_name member_number. While a datacollection may then be 4UUA.dYspecified as a set of DSDS dataseries, the chunk that is processed at a time is a single m@UU@A. series. 6RUU`B.ct l %Df!E l % e  UTUT`F description mbP- %$ EfDF  %$   a UTUT`Faxtype eP=2%FfEG 2% = UTUT`FQ; comments tPmH6$ GfFH onH6$  UU `8a_0 Wrl 6HfGM l 6  ien `8tasequence number beW6If! A6 lehe`Gta5Parameters appropriate to 6model:optest,level:raw QhZ Jf hiZ  )UUdfGet QS Kf ce  )AsefGUU BQt Lf   )fG Qe 6$ MfHN f 6$   `8UTint W26NfM f26  `8m/sequence number applicable to class 9series GfWHH$ OfWP H$  0 `89 SMl PfOZ l  se `8position of polarizer whee1 SAH$ Qf]R H$  mepp `8de8 Rtl RfQS fl   `8!position of calibration whee1 #2 R $ SfRW  $   `8int RfSKI`TeUV1cnQ\(UfVT e1cnQ\(V `jR Naming of Datasets for SOI `4`!0 R. S. Bogart fRUU`%Q%SOI Technical Note TN-93-104 (DRAFT) oUU &.UThis note provides a set of conventions for the consistent naming of datasets within P|UU&.Qthe context of the SOI project. The naming convention is intended to support the UU&.Rclassification of datasets within the data archive catalog, an online file naming UU&.eeUscheme, and the tools providing users with access to data files of interest. It also eUU&.Paddresses the question of naming of data subsets within datasets to support the UU&. Qmanipulation or extraction of data from within structured subsets. The aim is to WUU@&.,provide a unified view of data to the user. HhnyhVfUT HhnyhU`(7f Introduction eUU '.RData are typically organized in some hierarchy of association. They may be associ+UU'.Yated in images or arrays or tables, and in series of such arrays. All data gathered with &7UU'.Xa certain instrument or configuration, or in the course of a particular observation camCUU'.heRpaign may be associated, as may data produced or reduced by a particular analysis OUU'.f Tprogram. Such organization is not only natural, but essential for the management of sc[UU'.s Wlarge quantities of data. A naming scheme, which is just a consistent way of referring resgUU'.f ^to datasets at the finest level, should ideally reflect the natural organization of the data. sUU'.roXFor example, we may refer to the derived velocity at a particular location of a particuf UU'.Rlar Dopplergram made from a particular set of filtergrams taken by a given camera UU'.([over the course of a selected time interval, using a given calibration. There are at least ssoUU'.beXfive levels of organization implicit in this description, not all of them mutually inderaUU'.reVpendent. Unfortunately the natural organization of different kinds of data takes radiUU'.rvPcally different forms. Any attempt to impose a rigid hierarchy in a data-naming rUU'.ulUscheme is bound to run up against situations in which the identification becomes cumsǪUU'.naSbersome or downright perverse. It should be our aim to provide a scheme with suffi juӪUU@'.y Fcient richness and flexibility to handle the range of data we expect. 목UU $.ecSWe have gained a certain amount of experience with processing data from the series er UU$.ocQof tests of the MDI Optics Package (see SOI TN-93-101); these data are generally aUU$.arSsimilar to those that might be expected in certain SOI Campaigns and can reproduce a sUU$.vaPthe data structures associated with the Dynamics and Magnetic programs. Thus we elUU$.imVwill use these datasets as a model for establishing naming conventions and attempt to 'UU@$.>illustrate the naming scheme by applying it to the test data. ?UU 1.caQThe general model being proposed is that each dataset is classified among one or KUU1.scYmore categories. The universally required classification, the 9program., serves to WUU1.omVdefine any other optional categories. Within large programs there will generally be a cUU1.t \second classification, the 9series., which associates datasets of a common structure. gaoUU1.unSOther classes may be defined in order to keep the number of entries within a class s o2WfSO TN2 $ `8ho tR H$ XfBY amH$  $th `8as7 Xdl YfX\ ogl   use `8el!position of calibration whee1 #1 sXd $ ZfP[  $  toes `8UUint caSh2[fZ th2   `8 c gSe $ \fY] fi $  UU `8nyint oXo2]f\Q am2 1se `8n, eX9H$ ^f{u seH$  1Ot `8 d13 d iYrSKI`_ewi`e6ix`fa_ 6ix$`B0  6)an`b_6) )$6.1&bfac_ d6.1&hk6  6A=pclbd_ oca6A=pA$ 6dmce_6 es6 I efd_ 6 I hlUL20V ofU 20WVNaming of Datasets for SOI  H I ff+ H I oh4VF}Naming of Datasets for SOI~U9V of U9 Hgm0hfuHH I hfg H I eh7Ue1V of U9 a~il87~H(SNd ^jl7k3 bH_jH_jD 1Heading RuleH0 kfjm3cll Chapter Rule llk HJ ^mlkn3 =pH(2H(2D Chapter RuleHcnfmq3op Table TopI_ompn I~plonV~minEZS(8 ^qlnr3 IEZ\_jEZ\_jD Table TopIH ,rfqt3oss TableFootnoteasmrHHRb ^tlr3 H_H_D TableFootnotel uf^v l   `8filter position Ya $ vfuw  $  Nd `8char Yj2wfv 2 l   80key values for each of five positions, other or @ 8unknown YH$ xfy 2H$   ` 8p12 Zal yfxz l   ` 8polarization state Z $ zfy{  $  Ta ` 8string qtZ2{fz^ eF2    82key values for each of four polarizations states, @ 8unknown tnZH$ |f} H$   `811 ter[sl }f|~ wl   `8mode [ $ ~f}  $   `8string 8[e2f~x s,2  `8y+key values for image, calibration, unknown [H$ f[ 12H$   `810 \l f pol  f `8 light path \ $ f   $  ^ `8char \2f| 2 ris  82key values for full-disc, high-resolutionn, dark, @8 unknown \SKI`e Hixf  HixC+UU C.moPWhile any of the member_numbers in the datacollection_name may be ranges which UUC.Uimply a set of dataseries is the basic unit that is handled by the DSDS and SDS_open UU@C.Fand may not have more than one member number value for each series. 0UU`D.  BUU E.12ZA dataset may be an entire dataseries or it may be a subset of the series by specifing a NUU@E.slice_selector. `UU`F. rUU`G.USAGE `UU`H. UU I.fRThe formal name specification for SOI data product names does not give sufficient UUI.Sunderstanding of the intended usage to allow either real use or development of the UUI.keXsystem. therefore, the following description is intended to show the intent of the way UU@I.to use this name format. ̪UU`J. ުUU K.RThe purpose of the SOI naming format is to enable identification of chunks of SOI ꪛUUK. iZand related data independant of the particular storage location (disk, tape, etc.) or the UU@K.ni0particular storage protocol (FITS, CDF, etc.). UU`L.ma UU M.neWCertain rules of usage and limitations are designed to make the actual use of SOI data dat&UUM.irUas practical as possible while bounding the problem of the DSDS and the pipeline and l2UU@M.Texploratory analysis programs in handling the expected very large data collection. UUDUU`N.al VUU O.r UOne of the goals is to enable the development of program modules that can be used in tbUUO.toSa production pipeline environment, in stand-alone analysis programs written to the orenUUO.scRsame standards as the pipeline programs, and in GUI analysis environments such as zUUO.USGI Explorer, Khoros, IDL, or a TAE driven analysis front-end. Since these analysis aUUO. oQenvironments provide their own view of the world and each have differing expectarUUO.(dVtions of the ability of computing modules to gain knowledge of their surroundings, we UUO.UUVhave decided to build SOI SSC analysis programs in two parts or levels. Actually, we UUO.seWhave divided one of these levels into further divisions to (hopefully) enhance program ofUUO.piUmaintenance capabilities but that division is hidden for the purposes of this discusdªUU@O.olsion. UUԪUU`P.al 檉UU Q.r XWe call these two levels the "interface level" and the "strategy level". The interface UUQ.a Rlevel is considered to be a "wrapper" around the strategy module that handles ALL UUQ.scWconnections with the program's environment. The goal is to produce a single interface  UUQ.ExUlevel linkable module that is appropriate to make a unix "exec"able program suitable UUQ.roSfor each analysis environment needed. The particular environment connections that UU"UUQ. tTwe will shield from the strategy modules include the DSDS catalog database, staging UU.UU@Q.idSOI datasets by the DSDS, pro@UU R.Pcommand line parameters, stderr error logging, stdout message printing, program o LUU@R.toreturn values, etc. o^UU`S.UU SKI`e t f6ixf 6ixP, UU T.r VThis isolation is accomplished by defining a fixed calling interface for all strategy UUT.QUmodules. This calling interface is similar to the main program calling interface in UUT.scOunix which provides connections with the command line and the programs environter*UUT.UURment variables. Since the various wrappers we will need will in general not want 6UUT.Wstrategy modules to send output to the pre-opened i/o streams, but will want to do parns BUUT.UUQticular handling of communications with the user under their own control, we add eNUUT.Osome message i/o like functions in addition to handling "command line" control ramZUU@T.r parameters. lUU`U.pr ~UU V.RXStrategy modules are where the action is. It is the strategy modules that actually are UUV. fXwritten with specific knowledge of the particular problem at hand. The interface level UUV.ThQhas simply performed some services for the strategy modules that provide a clean UU@V.Q(connection with a virtual environment. laUU`W.ra ƪUU X. VIn particular, strategy modules communicate with the interface level in the following ҪUU@X.ways: T䪚UU`Y.es UU Z.raTThe strategy module code includes pre-defined lists of expected control or command seUUZ.reVline arguments. These arguments are provided as initializations of an external scope UUZ.itTarray of structures. Each member of the array describes one expected control parame UUZ.ioVeter. the strategy module specifies (at compile time) the key name that will be used &UUZ.Zfor that parameter, the default value to use if the parameter is not specified (or a flag 2UUZ.Windicating that the parameter must be specified before starting the strategy level moderf>UUZ.Sule), and probably we will also supply max and min appropriate values and the type e aJUUZ.UUTof parameter so that a GUI can do some first level validity checking (or radio-dial UUVUU@Z.cu building). mohUU`[.wi zUU \. iUThe strategy module includes the definition of an external pointer named DOIT which ZUU\.y [is initialized to point to the strategy module itself. The interface module will use that VliUU@\.se8external scope variable to invoke the strategy module. scUU`].Z UU ^.reVThe interface module will provide a KEYlist which is a linked list of structures conªUU^.Staining key_name:value pairs. It will examine the list of expected arguments, the .ΪUU^.erPcommand line, shell environment, possibly files in $HOME, and possibly files in UUڪUU@^.ngother standard places. e 쪇UU`_.ta UU `.elUThe interface module will provide an empty KEYlist for return values from the stratr UU@`.e >egy module that will be reported to the calling environment. UU`a.al .UU b.ioVThe interface module will provide a function which takes a string and puts it into a :UU@b.du+history log appropriate to the interface. nteLUU`c. Z ^UU d.isWThe interface module will provide a function which takes a string and puts it into an VlijUUd.seYerror log appropriate to the interface. These string functions will take the same kinds SKI`ee  wHixf s Hix)aiUUd.ne[of arguments as printf. In the shell callable interface module in cases where printf is a , pUU@d.HORfunction rather than a macro, the history function will probably just be printf. $UU e.XThese functions could actually be provided via external function pointers just like the om0UUe.Tstrategy module is provided to the interface module. That might actually be a more UU<UU@e.extensible model. terNUU`f.ro `UU g.taWThe interface module may later provide other "services". To allow graceful upgrading rfalUUg.UUSof interface modules and strategy modules in a working system, the strategy module taxUUg.utPwill also provide an external variable called STRAT_VERSION (or something like seUUg.wiWthat) which the interface module can use to determine the expectations of the strategy iUU@g. module. UU`h. UU`i.MThe expected flow of logic in the interface module would be something like: aƪUU`j. w?1. Build empty KEY lists for control and return parameters. macتUU`k.ncA2. Process the argument list provided by the strategy module. cꪛUU`l.lyHa. If simple numeric type, get it from the caller, maybe check it, eUU`m.ul/and add it or its default to the KEYlist. t aUU`n.UUDb. If a DATASET type, the interface module must do a bit more.  UU o.TY1.call the dataset name parse routine which splits a dataset name into its component ,UU@o.of parts. m>UU p.y U2.use the prog member_name and the environment to determine the directory naming vJUU@p.ri!rule for datasets in that prog. t\UU`q.Q3.put the dataset name and the directory template or rule into the KEYlist. snUU r.R3.call the strategy module (which returns a status) with the KEYlists and string zUU@r.icreporting functions. UU`s.g  UU t.jX4. On return from ths strategy module, check status and report failure to calling envincUU@t. a ronment. UU`u.tr ΪUU v.P5.Examine the return KEYlist and report any values present to the calling envit,ڪUU@v.m ronemnt. 쪋UU`w.fa UU`x. a TEMPLATE UU`y.f  "UU z.teZA dataseries is a collection (one or more) files that is handled as a unit by the DSDS. .UUz.tsSThe DSDS or a distribution of data from the DSDS or a dataseries to be supplied to .y :UUz.ogRthe DSDS must reside within a unix filesystem directory. There is a well defined FUUz.asTmapping between a dataseries_name and a directory. That mapping is via a rule spec tRUUz.toWified in a template string. The template is a concatenation of literal characters and ) w^UUz.ndRplace-holders for class member_names and member_numbers. The rule for use of the jUU@z.Ontemplate is as follows: oSKI`eur6ixf 6ixxa(heUU`{.d  UU`|.en.Any literal characters are copied unchanged. *UU`}.UUEAny construct {class_name} is replaced by the matching member_name. <UU ~.A PAny construct {#class_name} is replaced by the matching member_number converted SDHUU@~.z-to a string via a sprintf with format "%d". hZUU`.ri lUU .y TNote that an empty template produces an empty string for the directory name. Thus, isxUU@.Ian empty template can be used to always refer to the current directory. mUU`.le UU .zOThe dataset_name processing function will operate on a KEYlist with a key_root racUU@./name also provided. The prototype might be: s aUU`.  ̪UU`.e 2int parse_name( KEY *params, char *key_root); ުUU`. UU`.and it might be used as: UU`. UU`.'if ( !parse_name(call_keys, "in")) `{&UU`.UUcomplain_to_someone(); rs8UU`.ge JUU .UUTThe key_root name, e.g. "in" will be the keyword used to locate the dataset_name in ~VUU.t Uthe KEYlist. All related keyword names will be built from the root_key by appending zbUU.a Ya suffix of the form "_parsed_name_part", e.g. the template itself will be available via ynUU@. a0the keyword "in_rule" if the root_key is "in". UU`.an UU . uSThe parse_name function that uses the template will take a dataset_name and do the UU@.na following: fuUU`.e S0. Look for pre-existing parameters root_key_dataseries and root_key_selector. ypeªUU`.,if they are found, use them below, else: ntԪUU .paT1.Separate the dataseries_name and the data_selector parts of the dataset_name and usઍUU@.UUAmake keylist entries root_key_dataseries and root_key_selector. nUU .UUQ2.Separate the dataseries_name into its component classes. The prog class must UUU@.e,:always be present when the dataseries_name is not empty. UU .UUR2.5Build keylist entries for each class of the form, e.g. "in_prog", "in_level", UU.U"in_series". If such entries were already present in KEYlist use the ones from KEYle(UU@.Aist rather than the just learned ones from the dataseries_name. :UU .an[3.If the prog class is not there, i.e. there is no dataseries_name present, the directory namFUU.Tname is an empty string. This means a dataset_name which does not start with prog: meRUU@.se(will default to the current directory. UUdUU .y U4.Step through the template using the template rules above to construct a directory mpUU@.ecname. ofSKI`eUU eHixf t_Hixep)thUU`.inR5.The directory is added to the KEYlist with keyword root_key_wd, e.g. "in_wd". UU .erS6.If any of the the member_numbers were ranges the name being parsed is a datacols o$UU.inRlection_name rather than a dataset_name. The parse routine should always prepare 0UU.t Qkeyword entries of the form "in_series_sn", "in_series_fsn", and "in_series_lsn" <UU.s_Rwhere the "fsn" and "lsn" mean "first sequence number" and "last sequence number" HUU.enWand will be the same if a range was not given but rather a single sequence number. If namTUU.taWa range was found, the "sn" parameter, e.g. "in_series_sn" should be set to an invalid UU`UU.thRsequence number, e.g. -1 or perhaps minus number in range. If any of the member_lUU.. Wnumbers were ranges, the eventual parse function return value should indicate that the xUU.Vname referred to a datacollection rather than a dataset by perhaps returning the prodUU.h Yuct of all the range lengths so that the calling program can examine the return value to rUU@.naVsee if an SDS_open will be possible without further qualification of the name parts. UU`.ro UU .epTThe function will then parse the data_selector part of the name. While we may some aUU. Nday expand the systax to allow a list of variable names, FOR NOW WE WILL ONLY ̪UU.mbHALLOW ONE VARIABLE NAME in the data_selector. The keywords root_key_set تUU.quYlect and root_key_slice could contain the two parts of the selector. But I suggest that e䪙UU. s[we do a bit more right here since we will need it later. That would be to split the slice raUU.e Rspec into its component axis_ranges. Until we decide how to know the axis names, UU.icYwe can use only the first axis_range and leave the rest combined. Since the first axis_eUU.niXrange present will be interpreted as a record or image number, I suggest we extract the cUU@.urPfollowing keyword parameters from the data_selector (using "in as an example): he&UU`. tin_select-> variable name .ro8UU`."in_fsn-> first record number JUU`.ar!in_lsn-> last record number a\UU`. Ain_sn-> (in_fsn == in_lsn ? in_fsn : -(in_lsn - in_fsn +1)) WnUU`.:in_slice-> any remaining part of the slice_selector. UU`._k UU .TIn addition to building the working directory, e.g. "in_wd" the parse function must esUU.UUQbuild a basename that will be the leading part of the actual data filename. The oUU@.raNbasename will be constructed from the series_selector by the fixed template: UU`.am ΪUU`.ic"{series}.{#series}" st ઉUU`.ve UU .inLThe resulting string will be stored in KEYlist as "root_key_basename", e.g. aUU@.um"in_basename". exUU`. "UU`.g :At this point the parse function is done and can return. 4UU`. FUU`.ecACTUAL FILE NAMES .roXUU`. SKI`e_l6ixf 6ixn )snUU .snUThere are several aspects to the actual file names associated with a datacollection_ UU._kVname or a dataset_name. It is a dataseries_name that maps to a set of files. A dataUU.usZset_name then defines a set of files since it is contained within a single dataseries. A *UU.Xdatacollection is a collection of sets of files. They will have to be handled one at a at6UU.Ttime. Thus the DSDS, the pipe, or the strategy modules will have to expand a dataBUU.reUcollection_name into its implied set of dataseries_names prior to actually doing anyNUU.".Xthing with them. I assume that the above parse function can be used in all three areas aZUU@.to decide what to do. lUU`.AL ~UU .YOnce a specific dataseries is specified, the collection fo files is EXACTLY the set that UU.Sis matched if e.g. "wd" and "basename" were shell variables, by the shell wildcard eveUU@. aexpansion of: assUU`.ac$wd/$basename.* UUUU`.a  ̪UU . dUThe actual files containig data will depend on the data storage protocol. There are تUU.ilWseveral cases that we can specify now: In the following I will use the shell variable ion䪚UU.f Sexample method above to have specific examples rather than using the root_key_word ThuUU@.pe method. tUU`.l  UU`. FITS Tables &UU .amYA column in a fits table maps directly to a dataset as described above. I suggest that .2UU. Swe ignore the desired case of a complex dataset that describes multiple columns or @>UU.at^fields from a fits table at the start. The fits table file which contains the simple dataset JUU@.fohas the name: th\UU`. nUU`.ed$basename.fits UU`.l  UU`.l FITS images UU .exYFits image files will be stored ONLY in simple fits files with one image per file. the UU@.ac.image files, one per record number, will be: ªUU`..  ԪUU`.UU$basename.$select.$sn.fits 檊UU`.In UU`.usCDF datasets  UU .UUYCdf datasets are stored as a set of files. I believe they have a basename that matches dUU.Vthe "name of the cdf" dataset. with several extensions appended in the usual way. If "UU@.n .this is indeed the case, then the names are: 4UU`.su FUU`.UU$basename.cdf_extensions d XUU`.da jUU`.ulAssociated files SKI`ea t.SKI`ens6ixf th6ixed&asUU`. FB_intens UU`. limb_figure ge$UU`. GOLF_proxy mag3UU`.ormed_osc sBUU`.it high_osc `UU`Q OSC_modes w`6 osource corUU`.EThe observational data (or model) source for the data set. Examples: iUU`. SOI_Dynamics UU`.daSOI_Structure UU`. dSOI_LimbFigure d aêUU`. IGONG eҪUU`.am Atlas_XXX ᪞UU`. Model_XXX UU`TQtaWSO it`U6nslevel &UU`_.. 0 5UU f.n KRaw data converted from daily data stream in special observatory format to AUU@f.as.standard form and sorted according to series. PUU`g.ul1 _UU`h.2 nUU`i.3 }UU`|.raw t.UU`}.eseries:dopobs only UU`~.longP UU`.series:dopobs only. `6scan ΪUU`.&Applicable to series:magnetogram only ઑUU`.main 敖UU`.agaux UU`.osns B`6hiseries `"UU .OSVAll WSO data that have been collected into datasets have fallen within one or another .UU. tPof three major observing programs: magnetograms, solar mean-field measurements, SO:UU@.5and Doppler observations of low-degree oscillations. OLUU`. magnetogram X [UU`. meanfield jUU`.tadopobs Hixf UUHix c+edUU .trPSince the unit handled by the DSDS is determined by wildcard expansions of the rtUU.riSbasename within the working directory, we can easily allow additional files to "go UUUU@.Calong" with the actual data files. These could be history files: 0UU`.se$basename.history BUU`.scprocessing exception logs: cTUU`.ne$basename.errors UUfUU`.9text describing the data product generation and usage: xUU`.es$basename.text.ps SUU`.t etc. coUU`.UU UU`.ne UU .UUSIt would be the job of SDS_open to determine the actual protocol present by examinnts̪UU.Xing the files actually present by using fstat(3) or by consulting the keyword "in_type" raتUU.Qwhich may have been provided. (Which must have been provided in the case of outU䪜UU@.put dataseries.) UU`. UU`.he Problems: byUU`.mi ,UU .ioUAt least one limitation of the description above is in describing datasets with more a8UU.leZthan one variable. Since we actually want to be able to do this at least as a datacollecDUU.Ution but probably as a dataset (similar to the WSO DS datasets and to the real power cPUU.neXof CDF datasets). To deal with such datasets at the low level requires complexity that a\UU.Xis probably already being built into the SDS internal data file access functions, IDS. hUU.neVWe should keep the simplification that an SDS_getdata (whatever it is called) returns tUU.inWa pointer to a simple datacube of a single variable, but how that selection is made is ng UU.peYnot clear to me. We have the notation possible to list the variable selects as a simple tUU.Vcomma separated list of data_selectors as defined here. that does, however leave the UU.UUTmapping onto files something that must be understood. Actually, maybe the present inUU@.tsmapping works fine! UUU . v[If it is a FITS table or CDF it still uses only basename to get the file name and if it is ªUU.baVFITS image files, the variable name is used. The one problem I see is that we should ΪUU.etXrequire that the record number (or sn) range be identical for all variables part of one ڪUU.alUcomplex dataset. This is the one place where having the record number serial number U檉UU.d Sbe part of the series name rather than part of the variable name made more sense. UUUU.r LThere are so many advantages in the way this scheme makes the DSDS job well g UU.peTdefined, that I would like us to think about a way to solve this problem within the mp UU@.present framework. liUU`.rs .UU`.t DSDS NOTES le@UU`.UU RUU . fXA topic that I also wanted to discuss a bit is how the DSDS is used. I assume that the ts^UU.neWDSDS functions split into two logically separable areas: using a physical description thjUU. iWof a dataset to identify the dataseries_names that contain the desired data, and quite em SKI`eUU tHixf idHixC"UU`6da variable sUU`.whUDifferent values as appropriate. For example, for 9series:dopobs. there exist: $UU`.ar,Z/I (which violates the naming convention!) 3UU`.Thprogram:MDI_ground,model:optest,level:raw,series:sunmix069[7] ٪UU`.might map to the file name `몟UU`.UU0/data/MDI_ground/optest_raw/sunmix069/0007.fits at UU`Q N TIFF & Other Image Format Files Fi-`7Phils document tEUU`!.s parts are shown in italics. SWUU`".tiCCharacters (letters or punctuation) not in italics are literal. alliUU`#.rt5The symbol "::=" should be read as "consists of". SKI`ecang6ixf 6ixts'ncUU. wTapart, to distribute (internal and external) and ingest (internal and external) and .UU@.itarchive dataseries. e$UU`.ir 6UU .UUWWe must list the dataseries that we will query on to build a list of keys for such queBUU@.rerys. TUU .meWWe can decide that just as there is a template for each prog since the prog determines nmi`UU@.UUYthe set of classes, there is a well defined set of search keys available for each prog. urUU`.atHSome of the keys are obvious: class member_names and member_numbers., UU`. tXvar_names, axis names, axis lengths, axis first and delta physical values, axis units. ttUU .) [Other keys will include, dates, access rights, etc. I expect that there will be thousands onsUU@.;or tens-of-thousands of dataseries vs millions of images. UU`. ƪUU .TWhen new data is put into the DSDS it could be by one of two paths, operator action ndҪUU.esXsuch as loading the raw telemetry data in which case only the tape label info is needed ުUU@.UU as keys, UU .asRand from strategy modules called by shell or pipeline parents. When creating new UU@. data, strategy modules should: usUU`.mpR1. make a KEYlist containing the new name parts, directory must be consistent  UU`.elwith template for the prog. lab2UU`. u?2. call a function that builds a dataseries == dataset name _naDUU`.be.3. build the datafiles with SDS functions. VUU`. a?4. return a set of catalog key values in the return KEYlist hUU`.ilTThen the calling program (shell or pipeline) should build a request to the DSDS to zUU .enUtake this data and put it somewhere using the catalog keys provided to help find its UU@. nname in the future. UU`.y  UU .atTIf we want to install data pre-existing in some format, we can simply make a simple oUU@. iAstrategy module program that extracts the key info and returns. sȪUU`.y  ڪUU`.l DISTRIBUTED DATA 쪌UU`.w  UU .daPWhen we distribute data we will send only DSDS owned dataseries. We would packng UU.s,Xage the dataseries with its name and also provide, together or apart, the template that UU@.2 we used u(UU . aZto map to files. We could provide install instructions to extract the datafiles from the 4UU.UUWdistribution media/file format using one of the templates. I can even imagine our own `@UU.liUSFDU format that has the dataseries_name, the dataseries, and a sample template, and LUU@.ta$perhaps a shar file to extract it. g ^UU`.el iSKI`_naLeftSKI`UURight SKI`IfFirstto SKI`3in ReferenceoatSKI` sTOC SKI`>stIX mSKI`TraFirstey SKI`SKI`SKI`DASKI`  SKI`  wSKI` seSKI`ieSKI`SKI`" seSKI` o SKI` , SKI` SKI` SKI`o SKI`nsSKI`ctSKI`9@ffuf5 ff fBullet Bullet Symbol_\t e ~ fHQ  u i~K3HeadingH:\t..\t FirstBodyUUf@n   sPurposeI FirstBodyIXffuf5  ffBullet Bullet SymbolS\t`fffff CStepe`f I`CellBodyf  CellHeading~~fDf e References ReferencesfffSE ingff\t .1Step> Step Number S:.\tStepf Footnote~~ fE ffEquationEquation Number E:(EQ )~~ f. CSBodyf Extract~~fD  FirstBodyBody~;fQ   Reu~re ReferenceHead 1Heading Rule\t\tReferencesAppendixfHQS  tepu~2HeadingH:\t.\t FirstBodyfQHQ  u~2HeadingH:\t.\t FirstBodyEq fFAf  Figure Table Top Step NumberoF:FIGURE .\tBodyfffS racff Step Step Numberf S:.\tf ; TableFootnotefT  R TableTitle Table Tope Step NumberT:TABLE .\tf@< HeaTitle Chapter RuleAuthorf@ 0aGng \t>. rs%EqVQAppendixAppendix~;fHQ  tepuF:GU~>.1Heading 1Heading RuleH:\t.\t FirstBodyf8 CellBody~~ f. Body~~f.D  R FirstBodyeBody ~;f7HQ  u~1Heading 1Heading RuleeH:\t.\t FirstBody~~ f Bodyfffff.p CStepfffffU CBullet=~ f6HQ   uCe~3HeadingH:\t..\t FirstBodyfffff. CBullet~~ f;i  Body~~f:  ingCBulletRf6   header first f8 Level2IXf@ Abstract1Heading~;f AQ  u~ AppendixHead 1Heading Rule:A:\tAppendix \tAppendixffuf  ffBullet Bullet Symbol\tff @  TNTagAbstractfF  CellHeadingfLTe  TableTitle Table Top Step NumberT:TABLE .\tfR@< Title Chapter RuleAuthorZ f0@  AuthorTNTagf6p  headerf V  mbo footer leftf!V  tra footer rightf#V   footer rightfffff$. le ffep mffT: L 3HeadingTOCfff%- ler  effAu r 2HeadingTOC cf&X TN~  1HeadingTOCcf'.e  FigureLOFcf(.r  TableTitleLOTVf)8g f SeparatorsIXf*8g f SortOrderIX$f+8m ffLevel3IXf,8  rLevel1IX f-6  TN GroupTitlesIX1Hf.8 IndexIXZ f/0@   AuthorTNTagZ f0@  AuthorTNTagf1Q@  TNTaggAbstractf2.@ Abstract1Heading-]E" -  . 8 /  Bullet Symbolr 0   1Callout= 2 TNEmphasispT3 Equation Number 4  Run-In Heading 5  Bullet Symbol 6 /0 7  8  9   Default Bold :    ;   <  Step Number= =   SubscriptN$>  First Letter= ?  Superscript @tAppendixea A  - Default Bold B Emphasis C  let Default Bold D F lou GTNEm H  L  Step Number  Q <R  U  V  W  X auleugef@l@mnoThinMediumDoubleThick@ Very Thin SursYiZlY6m66t6Format B$[6666Format AStd6666Format A8dQYh$ $ Mm]HEM WN MMMMHTN MO NckNNNHcONV OiZOlOOYH%P QW !P6DPEPFP66QP IQJQKQLQHRXS QR6RRSRWR6HS R\ OSdPSZS[SHT UX 1T62TATBTHU VT 9#U$U%U&UHrV OU  VVV VH6W PM  GWHWckMWNWHXTR XXYXiZ\Xl]XHYZ  ^YuY6vYwYHZ[Y xZyZzZ{ZH[\Z |[}[6~[[H\S[  \\d\\Comment Courier  Helvetica1 Times6-RegularRegular BoldRegularObliqueItalicP%^A+ S e[A-ѢJ)ƹulm k6IJ&)}ڙ8dwSs 8x$`~Bo9-Ʉ,i<@qgXT> P;۽ST(V~=L| 4