Various manipulations with QIE and QIE ADC. More...
#include <HcalQIEManager.h>
Public Member Functions | |
int | generateQieTable (std::string db_file, std::string old_file, std::string output_file) |
int | getHfQieTable (std::string input_file, std::string output_file) |
std::map< HcalChannelId, HcalQIECaps > & | getQIETableFromFile (std::string _filename) |
void | getTableFromDb (std::string query_file, std::string output_file) |
HcalQIEManager () | |
~HcalQIEManager () | |
Static Public Member Functions | |
static std::vector< std::string > | splitString (const std::string &fLine) |
Various manipulations with QIE and QIE ADC.
Definition at line 46 of file HcalQIEManager.h.
HcalQIEManager::HcalQIEManager | ( | void | ) |
Definition at line 18 of file HcalQIEManager.cc.
{ }
HcalQIEManager::~HcalQIEManager | ( | void | ) |
Definition at line 25 of file HcalQIEManager.cc.
{ }
int HcalQIEManager::generateQieTable | ( | std::string | db_file, |
std::string | old_file, | ||
std::string | output_file | ||
) |
Definition at line 219 of file HcalQIEManager.cc.
References HcalQIECaps::caps, gather_cfg::cout, HcalChannelId::depth, HcalChannelId::eta, eta(), first, j, geometryCSVtoXML::line, HcalChannelId::phi, phi, and HcalChannelId::subdetector.
{ std::cout << "Creating the output file: " << output_file << "... "; ofstream out_file; out_file . open( output_file.c_str() ); std::cout << " done" << std::endl; std::string badchan_file = output_file + ".badchannels"; std::cout << "Creating the output file for bad channels: " << badchan_file << "... "; ofstream bad_file; bad_file . open( badchan_file.c_str() ); std::cout << " done" << std::endl; std::map<HcalChannelId,HcalQIECaps> & _old = getQIETableFromFile( old_file . c_str() ); std::map<HcalChannelId,HcalQIECaps> & _new = getQIETableFromFile( db_file . c_str() ); //std::map<HcalChannelId,HcalQIECaps> & _old = _manager . getQIETableFromFile( "qie_normalmode_v3.txt" ); //std::map<HcalChannelId,HcalQIECaps> & _new = _manager . getQIETableFromFile( "qie_adc_table_after.txt" ); int goodChannels = 0; int badChannels = 0; std::cout << "old size: " << _old.size() << std::endl; std::cout << "new size: " << _new.size() << std::endl; for (std::map<HcalChannelId,HcalQIECaps>::const_iterator line=_old.begin(); line!=_old.end(); line++ ){ HcalQIECaps * the_caps; HcalChannelId theId = line -> first; bool badchannel = false; if (_new.find(theId)==_new.end()){ badchannel=true; badChannels++; the_caps = &_old[theId]; } else{ goodChannels++; the_caps = &_new[theId]; } char buffer[1024]; int eta = theId.eta; int phi = theId.phi; int depth = theId.depth; sprintf(buffer, "%15d %15d %15d %15s", eta, phi, depth, theId.subdetector.c_str()); out_file << buffer; if (badchannel) bad_file << buffer; for (int j = 0; j != 32; j++){ double _x = the_caps->caps[j]; sprintf(buffer, " %8.5f", _x); out_file << buffer; if (badchannel) bad_file << buffer; } out_file << std::endl; if (badchannel) bad_file << std::endl; } std::cout<< goodChannels<< " " << badChannels << " " << goodChannels+badChannels << std::endl; out_file . close(); bad_file . close(); return 0; }
int HcalQIEManager::getHfQieTable | ( | std::string | input_file, |
std::string | output_file | ||
) |
Definition at line 286 of file HcalQIEManager.cc.
References ecalMGPA::adc(), python::multivaluedict::append(), HcalQIECaps::caps, align_tpl::connect, prof2calltree::count, gather_cfg::cout, EcalCondDB::db, HcalChannelId::depth, alignCSCRings::e, HcalChannelId::eta, RooGKCounter::getCount(), i, EdgesToViz::infile, edm::eventsetup::heterocontainer::insert(), j, HcalChannelId::phi, o2o::query, findQualityFiles::size, splitString(), HcalChannelId::subdetector, and toString().
{ std::cout << "Creating the output file: " << output_file << "... "; std::ofstream out_file; out_file . open( output_file.c_str() ); std::cout << " done" << std::endl; // process the file with QIE-per-RBX info std::map<std::string,std::vector<int> > _qie; // 12 QIE barcodes per RBX: _qie["HFP11"]=... std::ifstream infile( input_file . c_str() ); std::string buf; if ( infile . is_open() ){ std::cout << "File is open" << std::endl; getline( infile, buf ); std::cout << "Table legend: " << std::endl << buf << std::endl; while ( getline( infile, buf ) > 0 ){ std::vector<std::string> _line = splitString( buf ); if ( _line . size() != 17){ cout << "Table line is malformed, not clear what to do... exiting." << std::endl; return -1; } std::string _rbx = _line[0]; std::vector<int> _barcodes; for (int i=0; i!=12; i++){ int _code; sscanf(_line[i+5].c_str(),"%d", &_code); _barcodes . push_back(_code); } _qie . insert( std::pair<std::string,std::vector<int> >(_rbx,_barcodes) ); } } // database stuff HCALConfigDB * db = new HCALConfigDB(); const std::string _accessor = "occi://CMS_HCL_PRTTYPE_HCAL_READER@anyhost/int2r?PASSWORD=HCAL_Reader_88,LHWM_VERSION=22"; db -> connect( _accessor ); oracle::occi::Connection * _connection = db -> getConnection(); std::cout << "Preparing to request the HF channels from LMAP in the database..." << std::endl; try { std::cout << "Preparing the query..." << std::endl; Statement* stmt = _connection -> createStatement(); std::cout << "Preparing the query... done" << std::endl; std::string query; query . append("select\n"); query . append("lmap.side*lmap.eta, lmap.phi, lmap.depth, lmap.subdetector,\n"); query . append("lmap.rbx, lmap.rm_slot, lmap.qie_slot, lmap.adc\n"); query . append("from cms_hcl_hcal_condition_owner.hcal_hardware_logical_maps_v3 lmap\n"); query . append("inner join cms_hcl_core_condition_owner.cond_data_sets cds\n"); query . append("on cds.condition_data_set_id=lmap.condition_data_set_id\n"); query . append("where cds.version='30'\n"); query . append("and lmap.subdetector='HF'\n"); query . append("order by lmap.rbx, lmap.rm_slot, lmap.qie_slot, lmap.adc\n"); //SELECT std::cout << "Executing the query..." << std::endl; //std::cout << query << std::endl; ResultSet *rs = stmt->executeQuery(query.c_str()); std::cout << "Executing the query... done" << std::endl; std::cout << "Processing the query results..." << std::endl; RooGKCounter _lines(1,100); while (rs->next()) { _lines . count(); HcalChannelId _id; std::string rbx; int rm_slot, qie_slot, adc, qie_barcode; //count = rs->getInt(1); _id.eta = rs->getInt(1); _id.phi = rs->getInt(2); _id.depth = rs->getInt(3); _id.subdetector = rs -> getString(4); rbx = rs->getString(5); rm_slot = rs->getInt(6); qie_slot = rs->getInt(7); adc = rs->getInt(8); qie_barcode = _qie[rbx][(rm_slot-1)*4+qie_slot-1]; //==>another DB query to get the ADC caps' slopes and offsets // NOTE! In HF slope range and capID seem to be exchanged try { //std::cout << "Preparing the query..." << std::endl; Statement* stmt2 = _connection -> createStatement(); std::string query2; query2 . append("select\n"); query2 . append("vadcs.cap0_range0_offset,vadcs.cap0_range1_offset,vadcs.cap0_range2_offset,vadcs.cap0_range3_offset,\n"); query2 . append("vadcs.cap1_range0_offset,vadcs.cap1_range1_offset,vadcs.cap1_range2_offset,vadcs.cap1_range3_offset,\n"); query2 . append("vadcs.cap2_range0_offset,vadcs.cap2_range1_offset,vadcs.cap2_range2_offset,vadcs.cap2_range3_offset,\n"); query2 . append("vadcs.cap3_range0_offset,vadcs.cap3_range1_offset,vadcs.cap3_range2_offset,vadcs.cap3_range3_offset,\n"); query2 . append("vadcs.cap0_range0_slope,vadcs.cap0_range1_slope,vadcs.cap0_range2_slope,vadcs.cap0_range3_slope,\n"); query2 . append("vadcs.cap1_range0_slope,vadcs.cap1_range1_slope,vadcs.cap1_range2_slope,vadcs.cap1_range3_slope,\n"); query2 . append("vadcs.cap2_range0_slope,vadcs.cap2_range1_slope,vadcs.cap2_range2_slope,vadcs.cap2_range3_slope,\n"); query2 . append("vadcs.cap3_range0_slope,vadcs.cap3_range1_slope,vadcs.cap3_range2_slope,vadcs.cap3_range3_slope\n"); query2 . append("from CMS_HCL_HCAL_CONDITION_OWNER.V_QIECARD_ADC_NORMMODE vadcs\n"); query2 . append("where substr(vadcs.name_label,14,6)='%d'\n"); query2 . append("and substr(vadcs.name_label,21,1)='%d'\n"); query2 . append("order by version desc,record_id desc, condition_data_set_id desc\n"); char query2_fixed[5000]; sprintf(query2_fixed,query2.c_str(),qie_barcode,adc); //std::cout << "Preparing the query... done" << std::endl; //std::cout << query2_fixed << std::endl; //SELECT //std::cout << "Executing the query..." << std::endl; //std::cout << query2 << std::endl; ResultSet *rs2 = stmt2->executeQuery(query2_fixed); //std::cout << "Executing the query... done" << std::endl; //std::cout << "Processing the query results..." << std::endl; // take only the first line - sorted by version descending, latest on top if (rs2->next()) { HcalQIECaps _caps; for (int j=0; j!=32; j++){ _caps.caps[j] = rs2 -> getDouble(j+1); } //==> output QIE table line char buffer[1024]; sprintf(buffer, "%15d %15d %15d %15s", _id.eta, _id.phi, _id.depth, _id.subdetector.c_str()); //std::cout << buffer; out_file << buffer; for (int j = 0; j != 32; j++){ double _x = _caps . caps[j]; sprintf(buffer, " %8.5f", _x); //std::cout << buffer; out_file << buffer; } //std::cout << std::endl; out_file << std::endl; //=== } //Always terminate statement _connection -> terminateStatement(stmt2); } catch (SQLException& e) { XCEPT_RAISE(hcal::exception::ConfigurationDatabaseException,::toolbox::toString("Oracle exception : %s",e.getMessage().c_str())); } } //Always terminate statement _connection -> terminateStatement(stmt); //std::cout << "Query count: " << count << std::endl; std::cout << "Query line count: " << _lines.getCount() << std::endl; } catch (SQLException& e) { XCEPT_RAISE(hcal::exception::ConfigurationDatabaseException,::toolbox::toString("Oracle exception : %s",e.getMessage().c_str())); } db -> disconnect(); out_file.close(); return 0; }
std::map< HcalChannelId, HcalQIECaps > & HcalQIEManager::getQIETableFromFile | ( | std::string | _filename | ) |
Definition at line 54 of file HcalQIEManager.cc.
References gather_cfg::cout, eta(), i, EdgesToViz::infile, phi, query::result, findQualityFiles::size, and splitString().
{ std::map<HcalChannelId,HcalQIECaps> * result_sup = new std::map<HcalChannelId,HcalQIECaps>; std::map<HcalChannelId,HcalQIECaps> & result = (*result_sup); ifstream infile( _filename . c_str() ); std::string buf; if ( infile . is_open() ){ std::cout << "File is open" << std::endl; while ( getline( infile, buf ) > 0 ){ std::vector<std::string> _line = splitString( buf ); HcalChannelId _id; sscanf(_line[0].c_str(), "%d", &_id . eta); sscanf(_line[1].c_str(), "%d", &_id . phi); sscanf(_line[2].c_str(), "%d", &_id . depth); _id . subdetector = _line[3]; HcalQIECaps _adc; int _columns = _line . size(); for(int i = 4; i != _columns; i++){ sscanf(_line[i].c_str(), "%lf", &_adc . caps[i-4]); } /* DEBUG: double entries if(result.find(_id) != result.end()){ cout << "TABLE DEBUG: " << _filename << " " << _id.eta << " " << _id.phi << " " << _id.depth << " " << _id.subdetector << std::endl; } */ //result[_id]=_adc; result.insert( std::pair<HcalChannelId,HcalQIECaps>(_id, _adc ) ); //std::cout << result.size() << std::endl; //std::cout << _id.eta << " " << _id . subdetector << " " << _adc.caps[7] << std::endl; } } return result; }
void HcalQIEManager::getTableFromDb | ( | std::string | query_file, |
std::string | output_file | ||
) |
Definition at line 121 of file HcalQIEManager.cc.
References python::multivaluedict::append(), HcalQIECaps::caps, align_tpl::connect, prof2calltree::count, gather_cfg::cout, EcalCondDB::db, HcalChannelId::depth, alignCSCRings::e, HcalChannelId::eta, RooGKCounter::getCount(), recoMuon::in, j, HcalChannelId::phi, o2o::query, HcalChannelId::subdetector, and toString().
{ std::cout << "Creating the output file: " << output_file << "... "; ofstream out_file; out_file . open( output_file.c_str() ); std::cout << " done" << std::endl; HCALConfigDB * db = new HCALConfigDB(); const std::string _accessor = "occi://CMS_HCL_PRTTYPE_HCAL_READER@anyhost/int2r?PASSWORD=HCAL_Reader_88,LHWM_VERSION=22"; db -> connect( _accessor ); oracle::occi::Connection * _connection = db -> getConnection(); std::cout << "Preparing to request the QIE table from the database..." << std::endl; //loop over RM slots and QIEs (to save time, otherwise the query runs forever) for (int _rm=1; _rm!=5; _rm++){ for (int _qie=1; _qie!=4; _qie++){ try { cout << "Preparing the query..." << std::endl; Statement* stmt = _connection -> createStatement(); std::string query, buf; ifstream inFile( query_file . c_str(), std::ios::in ); if (!inFile){ std::cout << " Unable to open file with query!" << std::endl; } else{ std::cout << "Query file opened successfully: " << query_file << std::endl; } while ( getline( inFile, buf ) > 0 ){ query . append(buf); query . append("\n"); } char query_fixed[50000]; sprintf(query_fixed,query.c_str(),_rm,_rm,_qie,_qie); inFile.close(); cout << "Preparing the query... done" << std::endl; //SELECT cout << "Executing the query..." << std::endl; //std::cout << query_fixed << std::endl; ResultSet *rs = stmt->executeQuery(query_fixed); cout << "Executing the query... done" << std::endl; cout << "Processing the query results..." << std::endl; RooGKCounter _lines(1,100); //int count; while (rs->next()) { _lines . count(); HcalChannelId _id; HcalQIECaps _caps; //count = rs->getInt(1); _id.eta = rs->getInt(1); _id.phi = rs->getInt(2); _id.depth = rs->getInt(3); _id.subdetector = rs -> getString(4); for (int j=0; j!=32; j++){ _caps.caps[j] = rs -> getDouble(j+5); } //==> output QIE table line char buffer[1024]; sprintf(buffer, "%15d %15d %15d %15s", _id.eta, _id.phi, _id.depth, _id.subdetector.c_str()); //std::cout << buffer; out_file << buffer; for (int j = 0; j != 32; j++){ double _x = _caps . caps[j]; sprintf(buffer, " %8.5f", _x); //std::cout << buffer; out_file << buffer; } //std::cout << std::endl; out_file << std::endl; //=== } //Always terminate statement _connection -> terminateStatement(stmt); //std::cout << "Query count: " << count << std::endl; cout << "Query line count: " << _lines.getCount() << std::endl; } catch (SQLException& e) { XCEPT_RAISE(hcal::exception::ConfigurationDatabaseException,::toolbox::toString("Oracle exception : %s",e.getMessage().c_str())); } } } db -> disconnect(); out_file.close(); }
std::vector< std::string > HcalQIEManager::splitString | ( | const std::string & | fLine | ) | [static] |
Definition at line 99 of file HcalQIEManager.cc.
References relativeConstraints::empty, i, and query::result.
{ std::vector <std::string> result; int start = 0; bool empty = true; for (unsigned i = 0; i <= fLine.size (); i++) { if (fLine [i] == ' ' || fLine [i] == '\n' || fLine [i] == ' ' || i == fLine.size ()) { if (!empty) { std::string item (fLine, start, i-start); result.push_back (item); empty = true; } start = i+1; } else { if (empty) empty = false; } } return result; }