Some classes that allow access to CODA data in Hall A have been written and will be a part of the new Hall A C++ analyzer. These "CODA classes" are a layer on top of CODA software and can be run independently of the Hall A analyzer. I keep the latest version of the code at www.jlab.org/~rom/codaclass.tar. After untarring this file, see the README file. Report problems or suggestions to me. Below I explain the purposes and show a simple example of usage.
allows run-time binding of methods.
int main(int argc, char* argv[]) { THaCodaData *coda; // THaCodaData is abstract if (argc < 2) { explain_usage(); return 1; } int choice1 = atoi(argv[1]); if (choice1 == 1) { // CODA File // CODA file "e98108_1455.dat.0" is a disk file of CODA data. TString filename("e98108_1455.dat.0"); coda = new THaCodaFile(); if (coda->codaOpen(filename) != 0) { cout << "ERROR: Cannot open CODA data" << endl; return 1; } } else { // Online ET connection int mymode = 1; // 1=time-out mode (recommended) TString mycomputer("adaqcp"); TString mysession("par1"); coda = new THaEtClient(); if (coda->codaOpen(mycomputer, mysession, mymode) != 0) { cout << "ERROR: Cannot open ET connection" << endl; return 1; } } // Loop over events int NUMEVENTS_WANTED=20000; int *evbuffer; evbuffer = new int[coda->getBuffSize()]; for (int ievent = 0; ievent < NUMEVENTS_WANTED; ievent++) { int status = coda->codaRead(); // read data if (status != 0) { if ( status == -1) { cout << "Normal end of CODA data. Bye bye." << endl; coda->codaClose(); return 0; } else { // error will be printed. return 1; } } else { // get one event buffer (raw data) evbuffer = coda->getEvBuffer(); do_something( evbuffer ); // analysis } } coda->codaClose(); return 0; };