/*!
\mainpage

\htmlonly
<H1>Extended TCL Commands</H1>

The list of extended TCL commands can be found <a href="tcl/tclindex.html">here</a>.
\endhtmlonly

    <h1>Introduction</h1>

	<p><ol>
	  <li><A href='#ilwdrep'>Representation of a Frame as ILWD</A>
		<ol type=a>
		  <li><A href='#ilwdframe'>Frame Header</A></li>
		  <li><A href='#ilwdadcdata'>ADC Data</A></li>
		  <li><A href='#ilwddetector'>Detector</A></li>
		  <li><A href='#ilwdmsg'>Message Log Data</A></li>
		  <li><A href='#ilwdhistory'>History Data</A></li>
		  <li><A href='#ilwdrawdata'>Raw Data</A></li>
		  <li><A href='#ilwdprocdata'>Post-processed Data</A></li>
		  <li><A href='#ilwdsimdata'>Simulated Data</A></li>
		  <li><A href='#ilwdserdata'>Serial Data</A></li>
		  <li><A href='#ilwdstatdata'>Static Data</A></li>
		  <li><A href='#ilwdtrigdata'>Trigger Data</A></li>
		  <li><A href='#ilwdsummary'>Summary Data</A></li>
		</ol>
	  </li>
	  <li><A href='#query'>Querying</A></li>
	  <li><A href='#io'>I/O Commands</A></li>
	  <li><A href='#conversion'>Conversion Commands</A></li>
	</ol>
	
	<A name='ilwdrep'></A>
	<h2>1. Representation of a Frame as ILWD</h2>
	<A name='ilwdframe'></A>
	<h3>Frame Header</h3>
	<pre>
&lt;ilwd name='LIGO::Frame' size='9'&gt;
    &lt;int_4s name='run'&gt;run&lt;/int_4s&gt;
    &lt;int_4u name='frame'&gt;frame&lt;/int_4u&gt;
    &lt;int_4u name='dataquality'&gt;dataQuality&lt;/int_4u&gt;
    &lt;int_4u name='GTime' size='2'&gt;GTimeS GTimeN&lt;/int_4u&gt;
    &lt;int_2u name='ULeapS'&gt;ULeapS&lt;/int_2u&gt;
    &lt;int_4s name='localTime'&gt;localTime&lt;/int_4s&gt;
    &lt;real_8 name='dt'&gt;dt&lt;/real_8&gt;
    &lt;ilwd name='rawdata:rawData:RawData:Frame'&gt;
         &lt;ilwd name=':\${lctype}data:Container(\${uctype}Data)' size='\$nchans'&gt;
    &lt;ilwd name=':type:Container(Vect):Frame' size='?'&gt;
        ... Vect data ...
    &lt;/ilwd&gt;
    &lt;ilwd name=':user:Container(Vect):Frame' size='?'&gt;
        ... Vect data ...
    &lt;/ilwd&gt;
    &lt;ilwd name='detector name:detectSim:Detector:Frame' size='?'&gt;
        ... Detector data ...
    &lt;/ilwd&gt;
    &lt;ilwd name='detector name:detectProc:Detector:Frame' size='?'&gt;
        ... Detector data ...
    &lt;/ilwd&gt;
    &lt;ilwd name=':history:Container(History):Frame' size='?'&gt;
        ... History data ...
    &lt;/ilwd&gt;
    &lt;ilwd name='RawData name:rawData:RawData:Frame' size='?'&gt;
        ... Raw data ...
    &lt;/ilwd&gt;
    &lt;ilwd name=':procData:Container(ProcData):Frame' size='?'&gt;
        ... Processed data ...
    &lt;/ilwd&gt;
    &lt;ilwd name=':strain:Container(ProcData):Frame' size='?'&gt;
        ... Strain data ...
    &lt;/ilwd&gt;
    &lt;ilwd name=':simData:Container(SimData):Frame' size='?'&gt;
        ... Simulated data ...
    &lt;/ilwd&gt;
    &lt;ilwd name=':trigData:Container(TrigData):Frame' size='?'&gt;
        ... Trigger data ...
    &lt;/ilwd&gt;
    &lt;ilwd name=':summaryData:Container(summary):Frame' size='?'&gt;
        ... Summary data ...
    &lt;/ilwd&gt;
    &lt;ilwd name=':auxData:Container(Vect):Frame' size='?'&gt;
        ... Auxiliary data ...
    &lt;/ilwd&gt;
&lt;/ilwd&gt;
	</pre>

	<A name='ilwdadcdata'></A>
	<h3>ADC Data</h3>
	<pre>
&lt;ilwd name='channel name::AdcData:GTimeS:GTimeN:Frame' size='14'&gt;
    &lt;lstring name='comment' size='?'&gt;comment&lt;/lstring&gt;
    &lt;int_4u name='crate'&gt;crate&lt;/int_4u&gt;
    &lt;int_4u name='channel'&gt;channel&lt;/int_4u&gt;
    &lt;int_4u name='nBits'&gt;nBits&lt;/int_4u&gt;
    &lt;real_4 name='bias'&gt;bias&lt;/real_4&gt;
    &lt;real_4 name='slope'&gt;slope&lt;/real_4&gt;
    &lt;lstring name='units' size='?'&gt;units&lt;/lstring&gt;
    &lt;real_8 name='sampleRate'&gt;sampleRate &lt;/real_8&gt;
    &lt;int_4u name='timeOffset' size=2'&gt;timeOffsetS timeOffsetN&lt;/int_4u&gt;
    &lt;real_8 name='fShift'&gt;fShift&lt;/real_8&gt;
    &lt;int_2u name='overRange'&gt;overRange&lt;/int_2u&gt;
    &lt;real_8 name='dt'&gt;dt(from Frame Header)&lt;/real_8&gt;
    &lt;ilwd name=':data:Container(Vect):Frame' size='?'&gt;
         ... vector data ...
    &lt;/ilwd&gt;
    &lt;ilwd name=':aux:Container(Vect):Frame' size='?'&gt;
         ... aux data ...
    &lt;/ilwd&gt;
 &lt;/ilwd&gt;
	</pre>

	<A name='ilwddetector'></A>
	  <h3>Detector</h3>
	<pre>
&lt;ilwd name='detector name::Detector:Frame' size='12'&gt;
    &lt;int_2s name='longitudeD'&gt;longitudeD&lt;/int_2s&gt;
    &lt;int_2s name='longitudeM'&gt;longitudeM&lt;/int_2s&gt;
    &lt;real_4 name='longitudeS'&gt;longitudeS&lt;/real_4&gt;
    &lt;int_2s name='latitudeD'&gt;latitudeD&lt;/int_2s&gt;
    &lt;int_2s name='latitudeM'&gt;latitudeM&lt;/int_2s&gt;
    &lt;real_4 name='latitudeS'&gt;latitudeS&lt;/real_4&gt;
    &lt;real_4 name='elevation'&gt;elevation&lt;/real_4&gt;
    &lt;real_4 name='armXazimuth'&gt;armXazimuth&lt;/real_4&gt;
    &lt;real_4 name='armYazimuth'&gt;armYazimuth&lt;/real_4&gt;
    &lt;real_4 name='armLength'&gt;armLength&lt;/real_4&gt;
    &lt;ilwd name=':statdata:Container(StatData):Frame' size='?'&gt;
         ... statdata ...
    &lt;/ilwd&gt;
    &lt;ilwd name=':more:Container(Vect):Frame' size='?'&gt;
         ... more data ...
    &lt;/ilwd&gt;
&lt;/ilwd&gt;
	</pre>

	<A name='ilwdmsg'></A>
	<h3>Message Log Data</h3>
	<pre>
&lt;ilwd name='alarm::Msg:Frame' size='2'&gt;
    &lt;lstring name='message' size='?'&gt;message&lt;/lstring&gt;
    &lt;int_4u name='severity'&gt;severity&lt;/int_4u&gt;
&lt;/ilwd&gt;
	</pre>

	<A name='ilwdhistory'></A>
	<h3>History Data</h3>
	<pre>
&lt;ilwd name='name::History:Frame' size='2'&gt;
    &lt;int_4u name='time'&gt;time&lt;/int_4u&gt;
    &lt;lstring name='comment' size='?'&gt;comment&lt;/lstring&gt;
&lt;/ilwd&gt;
	</pre>

	<A name='ilwdrawdata'></A>
	<h3>Raw Data</h3>
	<pre>
&lt;ilwd name='name::RawData:Frame' size='4'&gt;
    &lt;ilwd name=':serData:Container(SerData):Frame' size='?'&gt;
        ... Serial data ...
    &lt;/ilwd&gt;
    &lt;ilwd name=':adcData:Container(AdcData):Frame' size='?'&gt;
        ... ADC data ...
    &lt;/ilwd&gt;
    &lt;ilwd name=':logMsg:Container(Msg):Frame' size='?'&gt;
        ... Message data ...
    &lt;/ilwd&gt;
    &lt;ilwd name=':more:Container(Vect):Frame' size='?'&gt;
        ... more data ...
    &lt;/ilwd&gt;
&lt;/ilwd&gt;
	</pre>

	<A name='ilwdprocdata'></A>
	<h3>Post-processed Data</h3>
	<pre>
&lt;ilwd name='data or channel name::ProcData:GTimeS:GTimeN:Frame' size='7'&gt;
    &lt;lstring name='comment' size='?'&gt;comment&lt;/lstring&gt;
    &lt;real_8 name='sampleRate'&gt;sampleRate &lt;/real_8&gt;
    &lt;int_4u name='timeOffset' size=2'&gt;timeOffsetS timeOffsetN&lt;/int_4u&gt;
    &lt;real_8 name='fShift'&gt;fShift&lt;/real_8&gt;
    &lt;real_8 name='dt'&gt;dt(from Frame Header)&lt;/real_8&gt;
    &lt;ilwd name=':data:Container(Vect):Frame' size='?'&gt;
        ... vector data ...
    &lt;/ilwd&gt;
    &lt;ilwd name=':aux:Container(Vect):Frame' size='?'&gt;
        ... aux data ...
    &lt;/ilwd&gt;
&lt;/ilwd>
	</pre>

	<A name='ilwdsimdata'></A>
	<h3>Simulated Data</h3>
	<pre>
&lt;ilwd name='name::SimData:GTimeS:GTimeN:Frame' size='5'&gt;
    &lt;lstring name='comment' size='?'&gt;comment&lt;/lstring&gt;
    &lt;real_8 name='sampleRate'&gt;sampleRate &lt;/real_8&gt;
    &lt;real_8 name='dt'&gt;dt(from Frame Header)&lt;/real_8&gt;
    &lt;ilwd name=':data:Container(Vect):Frame' size='?'&gt;
        ... vector data ...
    &lt;/ilwd&gt;
    &lt;ilwd name=':input:Container(Vect):Frame' size='?'&gt;
        ... input data ...
    &lt;/ilwd&gt;
&lt;/ilwd&gt;
	</pre>

	<A name='ilwdserdata'></A>
	<h3>Serial Data</h3>
	<pre>
&lt;ilwd name='station name::SerData:GTimeS:GTimeN:Frame' size='6'&gt;
    &lt;int_4u name='time' size=2'&gt;timeSec timeNsec&lt;/int_4u&gt;
    &lt;real_8 name='sampleRate'&gt;sampleRate &lt;/real_8&gt;
    &lt;lstring name='data' size='?'&gt; data &lt;/lstring&gt;
    &lt;real_8 name='dt'&gt;dt(from Frame Header)&lt;/real_8&gt;
    &lt;ilwd name=':serial:Container(Vect):Frame' size='?'&gt;
        ... serial data ...
    &lt;/ilwd&gt;
    &lt;ilwd name=':more:Container(Vect):Frame' size='?'&gt;
        ... more data ...
    &lt;/ilwd&gt;
&lt;/ilwd&gt;
	</pre>

	<A name='ilwdstatdata'></A>
	<h3>Static Data</h3>
	<pre>
&lt;ilwd name='name::StatData:GTimeS:GTimeN:Frame' size='5'&gt;
    &lt;lstring name='comment' size='?'&gt;comment&lt;/lstring&gt;
    &lt;int_4u name='timeStart'&gt;timeStart&lt;/int_4u&gt;
    &lt;int_4u name='timeEnd'&gt;timeEnd&lt;/int_4u&gt;
    &lt;int_4u name='version'&gt;version&lt;/int_4u&gt;
    &lt;ilwd name=':data:Container(Vect):Frame' size='?'&gt;
        ... stat data ...
    &lt;/ilwd&gt;
&lt;/ilwd&gt;
	</pre>

	<A name='ilwdtrigdata'></A>
	<h3>Trigger Data</h3>
	<pre>
&lt;ilwd name='trigger name::TrigData:GTimeS:GTimeN:Frame' size='8'&gt;
    &lt;lstring name='comment' size='?'&gt;comment&lt;/lstring&gt;
    &lt;lstring name='inputs' size='?'&gt;inputs&lt;/lstring&gt;
    &lt;int_4u name='GTime' size='2'&gt;GTimeS GTimeN&lt;/int_4u&gt;
    &lt;int_4u name='bvalue'&gt;bvalue&lt;/int_4u&gt;
    &lt;real_4 name='rvalue'&gt;rvalue&lt;/real_4&gt;
    &lt;real_4 name='probability'&gt;probability&lt;/real_4&gt;
    &lt;lstring name='statistics' size='?'&gt;statistics&lt;/lstring&gt;
    &lt;ilwd name=':data:Container(Vect):Frame' size='?'&gt;
        ... vector data ...
    &lt;/ilwd&gt;
&lt;/ilwd&gt;
	</pre>

	<A name='ilwdsummary'></A>
	<h3>Summary Data</h3>
	<pre>
&lt;ilwd name='name::Summary:Frame' size='3'&gt;
    &lt;lstring name='comment' size='?'&gt;comment&lt;/lstring&gt;
    &lt;lstring name='test' size='?'&gt;test&lt;/lstring&gt;
    &lt;ilwd name=':moments:Container(Vect):Frame' size='?'&gt;
        ... moments data ...
    &lt;/ilwd&gt;
&lt;/ilwd&gt;
</pre>


	<A name='io'>
	  <h2>2. I/O Commands</h2>
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.

	<A name='conversion'>
	  <h2>3. Conversion Commands</h2>
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.
*/
