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;
};