130 likes | 251 Views
Updates on ALPHA++ Alpha++ Meeting, 14.9.99. Agenda: G.Dissertori : The Driver Part M.Hörndl : The Analysis Part. The Driver for the ALPHA++ Analysis Program. Günther Dissertori. Situation. Versions being worked with Objectivity 5.1 (on OSF1) ObjectSpace 2.1 (idem)
E N D
Updates on ALPHA++Alpha++ Meeting, 14.9.99 Agenda: G.Dissertori : The Driver Part M.Hörndl : The Analysis Part
The Driver for the ALPHA++ Analysis Program Günther Dissertori
Situation • Versions being worked with • Objectivity 5.1 (on OSF1) • ObjectSpace 2.1 (idem) • What we had up to now • only a single program file (with a single application class, to be edited by the user for his requirements) • driven by command line input and ALPHA cards G. Dissertori
Motivation and Requirements for a Driver • A setup which allows for easy switching • between READ or WRITE transaction • between BATCH and INTERACTIVE work • between different DATABASE TYPES • functionality should resemble the one from ALPHA • e.g. the user can edit his init, run and term routines • the interactive mode might allow easy interfacing with DALI • everything should be cards and/or terminal driven G. Dissertori
Working with Singletons • AlephSession and the Managers are Singletons • can be created only once • are accessible from everywhere a la AlephSession theSession = AlephSession::TheAlephSession(); • preferably managers are accessed via the session: AlephManager theDbManager = AlephSession::TheAlephSession()->aAlephManager(“DbManager”); G. Dissertori
The Cards : A simple ASCII file G. Dissertori
The main program int main(int argc, char *argv[]) { // set the input defaults int debuglevel = 0; // read the input if (argc < 2) { usage(argv[0]); } else { for (int i=1; i<argc; i++) { if (argv[i][0]=='-' && argv[i][1]=='l') { switch(argv[i][2]) { case '0': debuglevel = 0; break; ……. } } } } // create the session singleton AlephSession* aSession = AlephSession::TheAlephSession(); // store the debuglevel aSession->setDebugLevel(debuglevel); // init AlephRC rc; rc = aSession->initialize(); fout << endl << " return code from session.init = " << rc << endl << endl; // run the session rc = aSession->run(); fout << endl << " return code from session.run = " << rc << endl << endl; // term rc = aSession->terminate(); fout << endl << " return code from session.term = " << rc << endl << endl; return AlephOK; } G. Dissertori
Example : initialize AlephRC AlephSession::initialize() { AlephRC rc; // start the timer startTimer(); // print out some stuff ……... // create and init the various managers // the IO manager _theAlephIoManager = AlephIoManager::TheAlephIoManager(); rc = _theAlephIoManager->initialize(); // the DB manager _theAlephDbManager = AlephDbManager::TheAlephDbManager(); rc = _theAlephDbManager->initialize(); // the Ex manager _theAlephExManager = AlephExManager::TheAlephExManager(); rc = _theAlephExManager->initialize(); return rc; } G. Dissertori
User routines are methods of the Execution manager... /////////////////////////////////////////////////////////////////////// // User Init /////////////////////////////////////////////////////////////////////// void AlephExManager::UserInit() { fout << endl << " =====> in UserInit " << endl; } /////////////////////////////////////////////////////////////////////// // User Event /////////////////////////////////////////////////////////////////////// void AlephExManager::UserEvent(AlphaBanks& bb) { fout << endl << " =====> in UserEvent " << endl; } /////////////////////////////////////////////////////////////////////// // User Term /////////////////////////////////////////////////////////////////////// void AlephExManager::UserTerm() { fout << endl << " =====> in UserTerm " << endl; } An example for a user file user_void.cpp G. Dissertori
And this is the output... ************************************************** * * * ALEPHSESSION * * Version 1.0 * * * * The session has been initialized at: * * Thu Sep 9 18:16:17 1999 * * * ************************************************** ======== AlephCardsReader : ========= Cardsfile = alpha++.input NEVT 200 FILI mc94_1 CLAS 16 HIST test.hbook DBTY objy TATY read AFIO testmc.EPIO preparing alpha cards ... ==== End AlephCardsReader : ========= AlephIoManager : initializing .... An AlephObjyDbManager has been created AlephObjyDbManager : initializing .... AlephObjyDbManager : The FD Boot file name = shift50::/wg/objy/alpha++/dev/db/ALEPHDB AlephObjyDbManager : A READ transaction has been started An AlephObjyExManager has been created AlephObjyExManager : initializing .... C bos_initialize CALLED ******* AlephObjyExManager : calling user init =====> in UserInit return code from session.init = 1 AlephSession starts running ... The session type is BATCH AlephObjyDbManager.openExistDb : The database mc94_1 has been opened for READ ONLY -------------------------------- Run Number = 410 Nev, Irun, Ievt = 1 410 1 Nev, Irun, Ievt = 2 410 2 Nev, Irun, Ievt = 200 410 205 Ngood = 149 =====> in UserEvent 200 *** 200 Events have been read AlephObjyDbManager : stopping the current transaction ****** AlephObjyExManager::loopAllRead : transaction stopped ****** return code from session.run = 1 AlephIoManager : terminating .... AlephObjyDbManager : terminating .... AlephObjyDbManager.stopTransaction : the transaction is already HALTED AlephObjyExManager : terminating .... AlephObjyExManager : calling user term =====> in UserTerm Number of selected events = 149 ************************************************** * * * ALEPHSESSION * * Version 1.0 * * * * The session has terminated at: * * Thu Sep 9 18:18:29 1999 * * * * Elapsed time in seconds = 132.0000000 * ************************************************** return code from session.term = 1 G. Dissertori
What remains to do - Problems • Implement the write transaction • Implement the interactive session • example: there user can ask for a handle to a database by entering the dbname on the terminal • interface then with Dali • Problems on our database: • several important banks are missing • RLEP, RALE, AJOB, PART , ..? • Problems when running on MC • QELEP=0 , crash when filling MC-truth • applied a patch for the moment….. G. Dissertori
So the next plans are • Upgrade of the schema • could be major intervention… • If that happens, implement also naming tree • more detailed performance studies Where can you find all the stuff? /> setenv CVSROOT /afs/cern.ch/aleph/project/alpha++ /> cvs co Applications G. Dissertori