/* * Known file type identifiers: * 10 Pedestal values (FPED) * 11 Noise values (for ZSTHR and/or BCTHR) * 12 Pedestal Memory values (1 value per time bin) * 13 List of FECs (to switch on/off or update a column with a value to be specified) * 14 List of channels (e.g. noisy or dead channels to be [de]activated) * 15 Tail Filter parameter per PAD (side sec rcu HWadd K0 K1 K2 L0 L1 L2 ValidFlag) * 16 Tail Filter parameter per SECTOR (side sec rcu HWadd K0 K1 K2 L0 L1 L2 ValidFlag) * 17 List of altros (e.g. funny altros to be [de]activated) * 18 List of FECs and values (max, min, mean and rms) for update of e.g. AC_TH * 19 Pulser Q values */ // ============================================================================= // ============================================================================= bool contains(int value, vector list) { // // test if int value is contained in vector list // bool contains = false; for ( uint32_t i=0; istart(); AltroCommandCoder *faltro = 0; FERODBFieldPositions *fp = 0; for ( uint32_t file = 0; file < arguments.pFileNameList.size(); file++ ) { // open file ifstream ifs(arguments.pFileNameList.at(file).c_str(), ifstream::in); if ( !ifs.good() ) { cerr << endl << "*File " << arguments.pFileNameList.at(file).c_str() << " can not be opened!" << endl; continue; } // read first number (should be 14 for noisy-channel file) ifs >> test; if ( test != 14) { // test file cerr << "*Error: File is not a noisy-channel file!" << endl; continue; } faltro = new AltroCommandCoder(); fp = new FERODBFieldPositions(); if ( arguments.pTest == true ) { // test mode ofstream *seperateOutFile = new ofstream(); seperateOutFile->open("UpdateFromFile.sql"); *seperateOutFile << dbq->getSqlBindUpdateAltroField("ON_CHANNEL99") << endl; seperateOutFile->close(); delete seperateOutFile; } else { // real update int ctr = 0; try { // open transaction and define sql statement to be held in cache db->createTransaction(); // Loop over file content while ( ifs >> chan >> side >> sector >> rcu >> hw_add >> data && !ifs.eof() ) { char field[20]; sprintf(field, "ON_CHANNEL%02d", faltro->getDecodedAddressChanneladdr(hw_add)); arguments.pSelectField = field; if ( fp->AltroTable->getPosition(arguments.pSelectField) < 0 ) { cerr << "*Error in function updatealtrofromfile(). Field " << arguments.pSelectField << " does not exist in ALTRO table!" << endl; delete fp; fp = 0; delete faltro; faltro = 0; delete pb; pb = 0; cout << endl; return 0; } // the query db->setSQL(dbq->getSqlBindUpdateAltroField(arguments.pSelectTagList, arguments.pSelectField)); // Do the update db->setNumber(0, arguments.pUpdateValue); // new value db->setNumber(1, side); // side db->setNumber(2, sector); // sector db->setNumber(3, rcu); // rcu db->setNumber(4, faltro->getDecodedAddressBranch(hw_add)); // branch db->setNumber(5, faltro->getDecodedAddressFECaddr(hw_add)); // fec db->setNumber(6, faltro->getDecodedAddressChipaddr(hw_add)); // altro db->executeUpdate(); pb->print(ctr++); } // mark configuration(s) as updated in TPC table db->executeUpdate(dbq->getSqlUpdateUpdated(arguments.pSelectTagList)); } catch(SQLException& ea) { cout << ea.what() << endl; delete fp; fp = 0; delete faltro; faltro = 0; delete pb; pb = 0; cout << endl; return 0; } } // end else if pTest ifs.close(); } // end file loop delete pb; pb = 0; sw->stop(); cout << "Finished with Update | " << sw->formatRealTime() << " s, " << sw->formatSysTime() << "s" << endl; delete faltro; faltro = 0; delete fp; fp = 0; return 1; } // ============================================================================= // ============================================================================= int updateonaltrofromfile() { // // Update on_altro values from a file. // int test, chan, side, sector, rcu, hw_add; float data; uint32_t nlines = getfilesize(arguments.pFileNameList); pb = new ProgressBar('=', 80, nlines, "Update ALTRO Table"); sw->start(); AltroCommandCoder *faltro = 0; FERODBFieldPositions *fp = 0; for ( uint32_t file = 0; file < arguments.pFileNameList.size(); file++ ) { // open file ifstream ifs(arguments.pFileNameList.at(file).c_str(), ifstream::in); if ( !ifs.good() ) { cerr << endl << "*File " << arguments.pFileNameList.at(file).c_str() << " can not be opened!" << endl; delete fp; fp = 0; continue; } // read first number (should be 14 for broken-altro file) ifs >> test; if ( test != 17) { // test file cerr << "*Error: File is not a file with list of altros!" << endl; return 0; } string COL = "ON_ALTRO"; faltro = new AltroCommandCoder(); fp = new FERODBFieldPositions(); if ( arguments.pTest == true ) { // test mode ofstream *seperateOutFile = new ofstream(); seperateOutFile->open("UpdateFromFile.sql"); *seperateOutFile << dbq->getSqlBindUpdateAltroField(COL) << endl; seperateOutFile->close(); delete seperateOutFile; } else { // real update int ctr = 0; try { // open transaction and define sql statement to be held in cache db->createTransaction(); // Loop over file content while ( ifs >> chan >> side >> sector >> rcu >> hw_add >> data && !ifs.eof() ) { if ( fp->AltroTable->getPosition(COL) < 0 ) { cerr << "*Error in function updateonaltrofromfile(). Field " << COL << " does not exist in ALTRO table!" << endl; delete faltro; faltro = 0; delete fp; fp = 0; return 0; } // the query db->setSQL(dbq->getSqlBindUpdateAltroField(arguments.pSelectTagList, COL)); // Do the update db->setNumber(0, arguments.pUpdateValue); // new value db->setNumber(1, side); // side db->setNumber(2, sector); // sector db->setNumber(3, rcu); // rcu db->setNumber(4, faltro->getDecodedAddressBranch(hw_add)); // branch db->setNumber(5, faltro->getDecodedAddressFECaddr(hw_add)); // fec db->setNumber(6, faltro->getDecodedAddressChipaddr(hw_add)); // altro db->executeUpdate(); pb->print(ctr++); } // mark configuration(s) as updated in TPC table db->executeUpdate(dbq->getSqlUpdateUpdated(arguments.pSelectTagList)); } catch(SQLException& ea) { cout << ea.what() << endl; delete faltro; faltro = 0; delete fp; fp = 0; return 0; } } // end else if pTest ifs.close(); } // end file loop delete pb; pb = 0; sw->stop(); cout << "Finished with Update | " << sw->formatRealTime() << " s, " << sw->formatSysTime() << "s" << endl; delete faltro; faltro = 0; delete fp; fp = 0; return 1; } // ============================================================================= // ============================================================================= int updatefecfromfile() { // // Update field in FEC table from a file // int bla, test, side, sector, rcu, branch, fec; float data1, data2, data3, data4; FERODBFieldPositions *fp = new FERODBFieldPositions(); string COL = arguments.pSelectField; cout << "*Updating field " << COL.c_str() << endl; if ( fp->FecTable->getPosition(COL) < 0 ) { cerr << "*Error in function updatefecfromfile(). Field " << COL << " does not exist in FEC table!" << endl; delete fp; fp = 0; return 0; } uint32_t nlines = getfilesize(arguments.pFileNameList); pb = new ProgressBar('=', 80, nlines, "Update FEC Table "); sw->start(); if ( arguments.pTest == true ) { // test mode ofstream *seperateOutFile = new ofstream(); seperateOutFile->open("UpdateFromFile.sql"); *seperateOutFile << dbq->getSqlBindUpdateFecField(arguments.pSelectTagList, COL) << endl; seperateOutFile->close(); delete seperateOutFile; } else { // real update for ( uint32_t file = 0; file < arguments.pFileNameList.size(); file++ ) { // open file ifstream ifs(arguments.pFileNameList.at(file).c_str(), ifstream::in); if ( !ifs.good() ) { cerr << endl << "*File " << arguments.pFileNameList.at(file).c_str() << " can not be opened!" << endl; continue; } ifs >> test; if ( (COL == "ON_FEC") || (COL == "CSR0") || (COL == "CSR1") || (COL == "CSR2") || (COL == "CSR3") ) { if ( test != 13 ) { // test file cerr << "*Error: File is not a list of FECs!" << endl; delete pb; pb = 0; delete fp; fp = 0; return 0; } int ctr = 0; try { // open transaction and define sql statement to be held in cache db->createTransaction(); // Loop over file content while ( ifs >> bla >> side >> sector >> rcu >> branch >> fec >> data1 && !ifs.eof() ) { // the query db->setSQL(dbq->getSqlBindUpdateFecField(arguments.pSelectTagList, COL)); // Do the update db->setNumber(0, arguments.pUpdateValue); // new value db->setNumber(1, side); // side db->setNumber(2, sector); // sector db->setNumber(3, rcu); // rcu db->setNumber(4, branch); // branch db->setNumber(5, fec); // fec db->executeUpdate(); pb->print(ctr++); } // end while // mark configuration(s) as updated in TPC table db->executeUpdate(dbq->getSqlUpdateUpdated(arguments.pSelectTagList)); } catch(SQLException& ea) { cout << ea.what() << endl; delete pb; pb = 0; delete fp; fp = 0; return 0; } } else if ( (COL == "BC_AC_TH") || (COL == "BC_DC_TH") || (COL == "BC_AV_TH") || (COL == "BC_DV_TH") || (COL == "BC_T_TH") ) { // Analog current values if ( test != 18 ) { cerr << "*Error: File is not a file containing list of FECs and values (min, max, mean rms)!" << endl; delete pb; pb = 0; delete fp; fp = 0; return 0; } int ctr = 0; try { // open transaction and define sql statement to be held in cache db->createTransaction(); // Loop over file content while ( ifs >> bla >> side >> sector >> rcu >> branch >> fec >> data1 >> data2 >> data3 >> data4 && !ifs.eof() ) { // the query db->setSQL(dbq->getSqlBindUpdateFecField(arguments.pSelectTagList, COL)); // update value (todo: not hardcoded!) data1 = data2 + 2*data4; // max + 2 x rms //data1 = data3 + 7*data4; // mean + 7 x rms // maximum 10 bits if ( data1 > 0x3ff ) data1 = 0x3ff; // Do the update if (fRound) db->setNumber(0, roundtoint(data1)); // new value else db->setNumber(0, (int)data1); // new value db->setNumber(1, side); // side db->setNumber(2, sector); // sector db->setNumber(3, rcu); // rcu db->setNumber(4, branch); // branch db->setNumber(5, fec); // fec db->executeUpdate(); pb->print(ctr++); } // end while // mark configuration(s) as updated in TPC table db->executeUpdate(dbq->getSqlUpdateUpdated(arguments.pSelectTagList)); } catch(SQLException& ea) { cout << ea.what() << endl; delete pb; pb = 0; delete fp; fp = 0; return 0; } } else { cout << "*Nothing updated!" << endl; } // end if (field) ifs.close(); } // end file loop } // end if pTest delete pb; pb = 0; sw->stop(); cout << "Finished with Update | " << sw->formatRealTime() << " s, " << sw->formatSysTime() << "s" << endl; delete fp; fp = 0; return 1; } // ============================================================================= // ============================================================================= int updatesectortailparametersfromfile() { // // Update ALTRO tail filter parameter values from a file. We use the same // values for all the channels in one sector // int test, chan, side, sector, rcu, hw_add, flag; int valK1, valK2, valK3, valL1, valL2, valL3; uint32_t nlines = getfilesize(arguments.pFileNameList); pb = new ProgressBar('=', 80, nlines, "Update ALTRO Table"); sw->start(); AltroCommandCoder *faltro = 0; FERODBFieldPositions *fp = 0; ofstream seperateOutFile; if ( arguments.pTest == true ) seperateOutFile.open("UpdateFromFile.sql"); for ( uint32_t file = 0; file < arguments.pFileNameList.size(); file++ ) { // open file ifstream ifs(arguments.pFileNameList.at(file).c_str(), ifstream::in); if ( !ifs.good() ) { cerr << endl << "*File " << arguments.pFileNameList.at(file).c_str() << " can not be opened!" << endl; continue; } // read first number (should be 15 or 16 for tail filter parameter file) ifs >> test; if ( test == 15 ) { // test file faltro = new AltroCommandCoder(); fp = new FERODBFieldPositions(); int ctr = 0; try { // open transaction and define sql statement to be held in cache if ( arguments.pTest == false ) db->createTransaction(); // Loop over file content while ( ifs >> chan >> side >> sector >> rcu >> hw_add >> valK1 >> valK2 >> valK3 >> valL1 >> valL2 >> valL3 >> flag && !ifs.eof() ) { if (flag != 1) continue; if ( arguments.pTest == true ) { // test mode seperateOutFile << dbq->getSqlBindUpdateChannelField(arguments.pSelectTagList, "K1_CHANNEL99", valK1) << endl; seperateOutFile << dbq->getSqlBindUpdateChannelField(arguments.pSelectTagList, "K2_CHANNEL99", valK2) << endl; seperateOutFile << dbq->getSqlBindUpdateChannelField(arguments.pSelectTagList, "K3_CHANNEL99", valK3) << endl; seperateOutFile << dbq->getSqlBindUpdateChannelField(arguments.pSelectTagList, "L1_CHANNEL99", valL1) << endl; seperateOutFile << dbq->getSqlBindUpdateChannelField(arguments.pSelectTagList, "L2_CHANNEL99", valL2) << endl; seperateOutFile << dbq->getSqlBindUpdateChannelField(arguments.pSelectTagList, "L3_CHANNEL99", valL3) << endl; } else { // real update char field[20]; sprintf(field, "K1_CHANNEL%02d", faltro->getDecodedAddressChanneladdr(hw_add)); arguments.pSelectField = field; db->setSQL(dbq->getSqlBindUpdateChannelField(arguments.pSelectTagList, arguments.pSelectField, valK1)); db->setNumber(0, side); db->setNumber(1, sector); db->setNumber(2, rcu); db->setNumber(3, faltro->getDecodedAddressBranch(hw_add)); db->setNumber(4, faltro->getDecodedAddressFECaddr(hw_add)); db->setNumber(5, faltro->getDecodedAddressChipaddr(hw_add)); db->executeUpdate(); sprintf(field, "K2_CHANNEL%02d", faltro->getDecodedAddressChanneladdr(hw_add)); arguments.pSelectField = field; db->setSQL(dbq->getSqlBindUpdateChannelField(arguments.pSelectTagList, arguments.pSelectField, valK2)); db->setNumber(0, side); db->setNumber(1, sector); db->setNumber(2, rcu); db->setNumber(3, faltro->getDecodedAddressBranch(hw_add)); db->setNumber(4, faltro->getDecodedAddressFECaddr(hw_add)); db->setNumber(5, faltro->getDecodedAddressChipaddr(hw_add)); db->executeUpdate(); sprintf(field, "K3_CHANNEL%02d", faltro->getDecodedAddressChanneladdr(hw_add)); arguments.pSelectField = field; db->setSQL(dbq->getSqlBindUpdateChannelField(arguments.pSelectTagList, arguments.pSelectField, valK3)); db->setNumber(0, side); db->setNumber(1, sector); db->setNumber(2, rcu); db->setNumber(3, faltro->getDecodedAddressBranch(hw_add)); db->setNumber(4, faltro->getDecodedAddressFECaddr(hw_add)); db->setNumber(5, faltro->getDecodedAddressChipaddr(hw_add)); db->executeUpdate(); sprintf(field, "L1_CHANNEL%02d", faltro->getDecodedAddressChanneladdr(hw_add)); arguments.pSelectField = field; db->setSQL(dbq->getSqlBindUpdateChannelField(arguments.pSelectTagList, arguments.pSelectField, valL1)); db->setNumber(0, side); db->setNumber(1, sector); db->setNumber(2, rcu); db->setNumber(3, faltro->getDecodedAddressBranch(hw_add)); db->setNumber(4, faltro->getDecodedAddressFECaddr(hw_add)); db->setNumber(5, faltro->getDecodedAddressChipaddr(hw_add)); db->executeUpdate(); sprintf(field, "L2_CHANNEL%02d", faltro->getDecodedAddressChanneladdr(hw_add)); arguments.pSelectField = field; db->setSQL(dbq->getSqlBindUpdateChannelField(arguments.pSelectTagList, arguments.pSelectField, valL2)); db->setNumber(0, side); db->setNumber(1, sector); db->setNumber(2, rcu); db->setNumber(3, faltro->getDecodedAddressBranch(hw_add)); db->setNumber(4, faltro->getDecodedAddressFECaddr(hw_add)); db->setNumber(5, faltro->getDecodedAddressChipaddr(hw_add)); db->executeUpdate(); sprintf(field, "L3_CHANNEL%02d", faltro->getDecodedAddressChanneladdr(hw_add)); arguments.pSelectField = field; db->setSQL(dbq->getSqlBindUpdateChannelField(arguments.pSelectTagList, arguments.pSelectField, valL3)); db->setNumber(0, side); db->setNumber(1, sector); db->setNumber(2, rcu); db->setNumber(3, faltro->getDecodedAddressBranch(hw_add)); db->setNumber(4, faltro->getDecodedAddressFECaddr(hw_add)); db->setNumber(5, faltro->getDecodedAddressChipaddr(hw_add)); db->executeUpdate(); pb->print(ctr++); } // end if pTest } // end file loop (while) // mark configuration(s) as updated in TPC table if ( arguments.pTest == false ) db->executeUpdate(dbq->getSqlUpdateUpdated(arguments.pSelectTagList)); } catch(SQLException& ea) { cout << ea.what() << endl; delete fp; fp = 0; delete faltro; faltro = 0; delete pb; pb = 0; return 0; } } else if ( test == 16 ) { // test file faltro = new AltroCommandCoder(); fp = new FERODBFieldPositions(); int ctr = 0; try { // open transaction and define sql statement to be held in cache if ( arguments.pTest == false ) db->createTransaction(); // Loop over file content while ( ifs >> chan >> side >> sector >> rcu >> hw_add >> valK1 >> valK2 >> valK3 >> valL1 >> valL2 >> valL3 >> flag && !ifs.eof() ) { if (flag != 1) continue; if ( arguments.pTest == true ) { // test mode seperateOutFile << dbq->getSqlBindUpdateChannelFieldAllOnRcu(arguments.pSelectTagList, "K1", valK1) << endl; seperateOutFile << dbq->getSqlBindUpdateChannelFieldAllOnRcu(arguments.pSelectTagList, "K2", valK2) << endl; seperateOutFile << dbq->getSqlBindUpdateChannelFieldAllOnRcu(arguments.pSelectTagList, "K3", valK3) << endl; seperateOutFile << dbq->getSqlBindUpdateChannelFieldAllOnRcu(arguments.pSelectTagList, "L1", valL1) << endl; seperateOutFile << dbq->getSqlBindUpdateChannelFieldAllOnRcu(arguments.pSelectTagList, "L2", valL2) << endl; seperateOutFile << dbq->getSqlBindUpdateChannelFieldAllOnRcu(arguments.pSelectTagList, "L3", valL3) << endl; } else { // real update db->setSQL(dbq->getSqlBindUpdateChannelFieldAllOnRcu(arguments.pSelectTagList, "K1", valK1)); db->setNumber(0, side); db->setNumber(1, sector); db->setNumber(2, rcu); db->executeUpdate(); db->setSQL(dbq->getSqlBindUpdateChannelFieldAllOnRcu(arguments.pSelectTagList, "K2", valK2)); db->setNumber(0, side); db->setNumber(1, sector); db->setNumber(2, rcu); db->executeUpdate(); db->setSQL(dbq->getSqlBindUpdateChannelFieldAllOnRcu(arguments.pSelectTagList, "K3", valK3)); db->setNumber(0, side); db->setNumber(1, sector); db->setNumber(2, rcu); db->executeUpdate(); db->setSQL(dbq->getSqlBindUpdateChannelFieldAllOnRcu(arguments.pSelectTagList, "L1", valL1)); db->setNumber(0, side); db->setNumber(1, sector); db->setNumber(2, rcu); db->executeUpdate(); db->setSQL(dbq->getSqlBindUpdateChannelFieldAllOnRcu(arguments.pSelectTagList, "L2", valL2)); db->setNumber(0, side); db->setNumber(1, sector); db->setNumber(2, rcu); db->executeUpdate(); db->setSQL(dbq->getSqlBindUpdateChannelFieldAllOnRcu(arguments.pSelectTagList, "L3", valL3)); db->setNumber(0, side); db->setNumber(1, sector); db->setNumber(2, rcu); db->executeUpdate(); pb->print(ctr++); } // end if pTest } // end file loop (while) // mark configuration(s) as updated in TPC table if ( arguments.pTest == false ) db->executeUpdate(dbq->getSqlUpdateUpdated(arguments.pSelectTagList)); } catch(SQLException& ea) { cout << ea.what() << endl; delete fp; fp = 0; delete faltro; faltro = 0; delete pb; pb = 0; cout << endl; return 0; } } else { cerr << "*Error: File is not a tail filter parameter file!" << endl; return 0; } // end if file ok ifs.close(); } // end file loop if ( arguments.pTest == true ) seperateOutFile.close(); delete pb; pb = 0; sw->stop(); cout << "Finished with Update | " << sw->formatRealTime() << " s, " << sw->formatSysTime() << "s" << endl; delete faltro; faltro = 0; delete fp; fp = 0; return 1; }