next up previous contents
Next: Bibliography Up: YODAUser's Guide Previous: Writing Data with YODA

Writing YODA-Style Data with Your Own Program

You may be forced to write YODA-style data output (e.g. from a simulation program or an input formatter). This should be no problem using the Eventstream class. See the example below:

/*>--------------------------------------------------------------------------*/
/*
 * a short program to test the ability of producing containerevents
 */
/*<--------------------------------------------------------------------------*/

#include "eventstream.h"

/*>--------------------------------------------------------------------------*/
main()
/*
 * 
 */
/*<--------------------------------------------------------------------------*/
{
/*
 * declare the application-specific data to be written
 */
struct Mydata                   // some nonsens we want to write
   {
   double foo;
   float  bar;
   int    stuff;
   } data;

/*
 * now make a new eventstream, which pumps the containerevents from 
 * filedescriptor IN to file OUT. It is also used to generate containervents
 * from scratch (this is used here), and then write them to file.
 * default is stdin / stdout
 */

Eventstream eventstream(stdin, stdout); // this defaults to stdin / out

/*
 * setup a new containerevent. this is needed everytime the containerevent
 * structure is modified (NOT regarding the eventnumber. 
 * choose type/subtype according to your needs. variable names below are used
 * just for verbosity
 */
short triggerpat=1;
short runnum=12; 
short expnum=42;
unsigned evtnum=0;

eventstream.setup(CEVT_T_SIMULATION, triggerpat, runnum, expnum, evtnum);
                          
/*
 * now produce 100 containerevents in a loop. first calculate
 * the quantities to be written, then add thenm to the current containerevent
 * as a subevent
 */

for (int i=0; i<100; i++)
    {   
    data.foo = sin(i);
    data.bar = cos(i);
    data.stuff = random();
    
    /*
     * now add this as a subevent. supply type/subtype, pointer to data
     * and length of data.
     */
    
    eventstream.add_subevent(SEVT_T_CALCULATED, SEVT_ST_DUMMY, 
                             &data, sizeof(data));
    cerr << "writing container number " << i << "\n";
    eventstream.put();          // write to output
    eventstream.next_container(); // increment the event number
    }
}



Heiko Rohdjess
2001-07-19