<ilwd name='LIGOFrame' size='9'>
<int_4s name='run'>run</int_4s>
<int_4u name='frame'>frame</int_4u>
<int_4u name='dataquality'>dataQuality</int_4u>
<int_4u name='GTime' size='2'>GTimeS GTimeN</int_4u>
<int_2u name='ULeapS'>ULeapS</int_2u>
<int_4s name='localTime'>localTime</int_4s>
<real_8 name='dt'>dt</real_8>
<ilwd name='rawdata:rawData:RawData:Frame'>
<ilwd name=':${lctype}data:Container(${uctype}Data)' size='$nchans'>
<ilwd name=':type:Container(Vect):Frame' size='?'>
... Vect data ...
</ilwd>
<ilwd name=':user:Container(Vect):Frame' size='?'>
... Vect data ...
</ilwd>
<ilwd name='detector name:detectSim:Detector:Frame' size='?'>
... Detector data ...
</ilwd>
<ilwd name='detector name:detectProc:Detector:Frame' size='?'>
... Detector data ...
</ilwd>
<ilwd name=':history:Container(History):Frame' size='?'>
... History data ...
</ilwd>
<ilwd name='RawData name:rawData:RawData:Frame' size='?'>
... Raw data ...
</ilwd>
<ilwd name=':procData:Container(ProcData):Frame' size='?'>
... Processed data ...
</ilwd>
<ilwd name=':strain:Container(ProcData):Frame' size='?'>
... Strain data ...
</ilwd>
<ilwd name=':simData:Container(SimData):Frame' size='?'>
... Simulated data ...
</ilwd>
<ilwd name=':trigData:Container(TrigData):Frame' size='?'>
... Trigger data ...
</ilwd>
<ilwd name=':summaryData:Container(summary):Frame' size='?'>
... Summary data ...
</ilwd>
<ilwd name=':auxData:Container(Vect):Frame' size='?'>
... Auxiliary data ...
</ilwd>
</ilwd>
<ilwd name='channel name::AdcData:GTimeS:GTimeN:Frame' size='14'>
<lstring name='comment' size='?'>comment</lstring>
<int_4u name='crate'>crate</int_4u>
<int_4u name='channel'>channel</int_4u>
<int_4u name='nBits'>nBits</int_4u>
<real_4 name='bias'>bias</real_4>
<real_4 name='slope'>slope</real_4>
<lstring name='units' size='?'>units</lstring>
<real_8 name='sampleRate'>sampleRate </real_8>
<int_4u name='timeOffset' size=2'>timeOffsetS timeOffsetN</int_4u>
<real_8 name='fShift'>fShift</real_8>
<int_2u name='overRange'>overRange</int_2u>
<real_8 name='dt'>dt(from Frame Header)</real_8>
<ilwd name=':data:Container(Vect):Frame' size='?'>
... vector data ...
</ilwd>
<ilwd name=':aux:Container(Vect):Frame' size='?'>
... aux data ...
</ilwd>
</ilwd>
<ilwd name='detector name::Detector:Frame' size='12'>
<int_2s name='longitudeD'>longitudeD</int_2s>
<int_2s name='longitudeM'>longitudeM</int_2s>
<real_4 name='longitudeS'>longitudeS</real_4>
<int_2s name='latitudeD'>latitudeD</int_2s>
<int_2s name='latitudeM'>latitudeM</int_2s>
<real_4 name='latitudeS'>latitudeS</real_4>
<real_4 name='elevation'>elevation</real_4>
<real_4 name='armXazimuth'>armXazimuth</real_4>
<real_4 name='armYazimuth'>armYazimuth</real_4>
<real_4 name='armLength'>armLength</real_4>
<ilwd name=':statdata:Container(StatData):Frame' size='?'>
... statdata ...
</ilwd>
<ilwd name=':more:Container(Vect):Frame' size='?'>
... more data ...
</ilwd>
</ilwd>
<ilwd name='alarmMsg:Frame' size='2'>
<lstring name='message' size='?'>message</lstring>
<int_4u name='severity'>severity</int_4u>
</ilwd>
<ilwd name='nameHistory:Frame' size='2'>
<int_4u name='time'>time</int_4u>
<lstring name='comment' size='?'>comment</lstring>
</ilwd>
<ilwd name='nameRawData:Frame' size='4'>
<ilwd name=':serData:Container(SerData):Frame' size='?'>
... Serial data ...
</ilwd>
<ilwd name=':adcData:Container(AdcData):Frame' size='?'>
... ADC data ...
</ilwd>
<ilwd name=':logMsg:Container(Msg):Frame' size='?'>
... Message data ...
</ilwd>
<ilwd name=':more:Container(Vect):Frame' size='?'>
... more data ...
</ilwd>
</ilwd>
<ilwd name='data or channel name::ProcData:GTimeS:GTimeN:Frame' size='7'>
<lstring name='comment' size='?'>comment</lstring>
<real_8 name='sampleRate'>sampleRate </real_8>
<int_4u name='timeOffset' size=2'>timeOffsetS timeOffsetN</int_4u>
<real_8 name='fShift'>fShift</real_8>
<real_8 name='dt'>dt(from Frame Header)</real_8>
<ilwd name=':data:Container(Vect):Frame' size='?'>
... vector data ...
</ilwd>
<ilwd name=':aux:Container(Vect):Frame' size='?'>
... aux data ...
</ilwd>
</ilwd>
<ilwd name='nameSimData:GTimeS:GTimeN:Frame' size='5'>
<lstring name='comment' size='?'>comment</lstring>
<real_8 name='sampleRate'>sampleRate </real_8>
<real_8 name='dt'>dt(from Frame Header)</real_8>
<ilwd name=':data:Container(Vect):Frame' size='?'>
... vector data ...
</ilwd>
<ilwd name=':input:Container(Vect):Frame' size='?'>
... input data ...
</ilwd>
</ilwd>
<ilwd name='station name::SerData:GTimeS:GTimeN:Frame' size='6'>
<int_4u name='time' size=2'>timeSec timeNsec</int_4u>
<real_8 name='sampleRate'>sampleRate </real_8>
<lstring name='data' size='?'> data </lstring>
<real_8 name='dt'>dt(from Frame Header)</real_8>
<ilwd name=':serial:Container(Vect):Frame' size='?'>
... serial data ...
</ilwd>
<ilwd name=':more:Container(Vect):Frame' size='?'>
... more data ...
</ilwd>
</ilwd>
<ilwd name='nameStatData:GTimeS:GTimeN:Frame' size='5'>
<lstring name='comment' size='?'>comment</lstring>
<int_4u name='timeStart'>timeStart</int_4u>
<int_4u name='timeEnd'>timeEnd</int_4u>
<int_4u name='version'>version</int_4u>
<ilwd name=':data:Container(Vect):Frame' size='?'>
... stat data ...
</ilwd>
</ilwd>
<ilwd name='trigger name::TrigData:GTimeS:GTimeN:Frame' size='8'>
<lstring name='comment' size='?'>comment</lstring>
<lstring name='inputs' size='?'>inputs</lstring>
<int_4u name='GTime' size='2'>GTimeS GTimeN</int_4u>
<int_4u name='bvalue'>bvalue</int_4u>
<real_4 name='rvalue'>rvalue</real_4>
<real_4 name='probability'>probability</real_4>
<lstring name='statistics' size='?'>statistics</lstring>
<ilwd name=':data:Container(Vect):Frame' size='?'>
... vector data ...
</ilwd>
</ilwd>
<ilwd name='nameSummary:Frame' size='3'>
<lstring name='comment' size='?'>comment</lstring>
<lstring name='test' size='?'>test</lstring>
<ilwd name=':moments:Container(Vect):Frame' size='?'>
... moments data ...
</ilwd>
</ilwd>
FrameAPI provides basic and enhanced extended TCL commands for frame data input and output. Basic commands are openFrameFile, closeFrameFile, readFrame, writeFrame. There exist threaded versions readFrame_t, readFrame_r and writeFrame_r, writeFrame_r. Enhanced I/O interface is readDaqFrame, updateDaqFrame, catDaqFrame and daqTriggerAdcName. These "DAQ" commands were written to allow faster input of frame data files generated by the LIGO frame builder.
FrameAPI has extended TCL commands for converting various FrameCPP objects into the ILWD library elements.: Adc2container, Detector2container, History2container, Proc2container, Ser2container, Sim2container, frameDetectorProc, frameDetectorSim, frameHeader2container, frameHistory, fullFrame2container, fullFrame2container_r, fullFrame2container_t. It is possible to convert ILWD data back to a FrameCPP object: ilwd2frame, ilwd2frame_r, ilwd2frame_t. There are commands for the concatenation of time series data structures or full frames: concatAdcDataList, concatFrameList, concatProcDataList, concatSerDataList, concatSimDataList.
1.5.4