CMS 3D CMS Logo

/data/refman/pasoursint/CMSSW_4_4_5_patch3/src/CondTools/SiPixel/src/PixelPopConCalibSourceHandler.cc

Go to the documentation of this file.
00001 // -*- C++ -*-
00002 //
00003 // Package:    CondTools/SiPixel
00004 // Class:      PixelPopConCalibSourceHandler
00005 // 
00013 //
00014 // Original Author:  Michael Eads
00015 //         Created:  8 Feb 2008
00016 // $Id: PixelPopConCalibSourceHandler.cc,v 1.4 2010/06/02 06:10:11 ursl Exp $
00017 //
00018 //
00019 
00020 #include "CondTools/SiPixel/interface/PixelPopConCalibSourceHandler.h"
00021 
00022 #include <iostream>
00023 #include <sstream>
00024 
00025 // DBCommon includes
00026 // #include "CondCore/DBCommon/interface/SessionConfiguration.h"
00027 // #include "CondCore/DBCommon/interface/Exception.h"
00028 // #include "CondCore/DBCommon/interface/Connection.h"
00029 
00030 // CORAL includes
00031 // #include "RelationalAccess/IView.h"
00032 // #include "RelationalAccess/ISessionProxy.h"
00033 // #include "RelationalAccess/ISchema.h"
00034 // #include "RelationalAccess/ISessionProperties.h"
00035 // #include "RelationalAccess/IQuery.h"
00036 // #include "RelationalAccess/ICursor.h"
00037 // #include "CoralBase/AttributeList.h"
00038 // #include "CoralBase/Attribute.h"
00039 
00040 #include "CalibFormats/SiPixelObjects/interface/PixelCalibConfiguration.h"
00041 
00042 // test poolDBOutput
00043 #include "CondCore/DBOutputService/interface/PoolDBOutputService.h"
00044 #include "FWCore/ServiceRegistry/interface/Service.h"
00045 
00046 
00047 using namespace std;
00048 
00049 // constructor
00050 PixelPopConCalibSourceHandler::PixelPopConCalibSourceHandler(edm::ParameterSet const &pset) {
00051 
00052   // try to get a parameter
00053   _connectString = pset.getParameter<string>("connectString");
00054   //cout << "  connectString: " << _connectString << endl;
00055 
00056   // get the schema and view name to use from the config file
00057   _viewName = pset.getParameter<string>("viewName");
00058   _schemaName = pset.getParameter<string>("schemaName");  
00059 
00060   // get the key name and/or run number to use
00061   _runNumber = pset.getParameter<int>("runNumber");
00062   _configKeyName = pset.getParameter<string>("configKeyName");
00063 
00064   // get the "since" IOV parameter
00065   _sinceIOV = pset.getParameter<unsigned int>("sinceIOV");
00066   
00067 } // constructor
00068 
00069 // destructor
00070 PixelPopConCalibSourceHandler::~PixelPopConCalibSourceHandler() {
00071 
00072 } // destructor
00073 
00074 string PixelPopConCalibSourceHandler::id() const {
00075 
00076   return string("PixelPopConCalibSourceHandler");
00077 
00078 } // string PixelPopConCalibSourceHandler::id()
00079 
00080 
00081 // getNewObjects method using coral 
00082 void PixelPopConCalibSourceHandler::getNewObjects_coral() {
00083         cout << "I'm sorry, the PixelPopConCalibSourceHandler::getNewObjects_coral() is not currently working." << endl;
00084         cout << "I am not able to build calibration configuration objects from the database" << endl;
00085         return;
00086         
00087 //   // create the empty SiPixelCalibConfiguration object
00088 //   SiPixelCalibConfiguration* calibConfig = new SiPixelCalibConfiguration();
00089   
00090 //   // set up the DB session
00091 //   cond::DBSession* dbsession = new cond::DBSession();
00092 //   dbsession->configuration().setAuthenticationMethod(cond::XML);
00093 //   dbsession->configuration().setMessageLevel(cond::Error);
00094 //   try{
00095 //     dbsession->open();
00096 //   }catch(cond::Exception& er){
00097 //     std::cerr<< "CoralIface::initialize cond " << er.what()<<std::endl;
00098 //     throw;
00099 //   }catch(std::exception& er){
00100 //     std::cerr<< "CoralIface::initialize std " << er.what()<<std::endl;
00101 //     throw;
00102 //   }
00103 
00104 //   cond::Connection dbconn(_connectString);
00105 //   dbconn.connect(dbsession);
00106 //   cond::CoralTransaction& coraldb=dbconn.coralTransaction();
00107 //   coraldb.start(true);
00108 
00109 //   // build and execute the query
00110 //   coral::IQuery* query = coraldb.coralSessionProxy().schema(_schemaName).newQuery();
00111 //   query->addToTableList(_viewName);
00112 //   query->addToOutputList("CONFG_KEY");
00113 //   query->addToOutputList("VERSION");
00114 //   query->addToOutputList("RUN_TYPE");
00115 //   query->addToOutputList("RUN_NUMBER");
00116 //   query->addToOutputList("CALIB_OBJ_DATA_FILE");
00117 //   query->addToOutputList("CALIB_OBJ_DATA_CLOB");
00118 
00119 //   // if _runNumber is -1, query by config key name
00120 //   if (_runNumber == -1)
00121 //     query->setCondition("CONFG_KEY = '" + _configKeyName + "'", coral::AttributeList());
00122 //   else // query by run number
00123 //     query->setCondition("RUN_NUMBER = " + _runNumber, coral::AttributeList());
00124 //   coral::ICursor& cursor = query->execute();
00125 
00126 //   // parse the response, build the Calib object
00127 //   bool found_fNtriggers = false;
00128 //   bool found_fRowPattern = false;
00129 //   bool found_fColumnPattern = false;
00130 //   bool found_fVCalValues = false;
00131 //   bool found_fMode = false;
00132 //   while ( cursor.next() ) {
00133 //        cout << "Inside cursor.next() loop" << endl;
00134 //     //cursor.currentRow().toOutputStream( std::cout ) << std::endl;
00135 //     coral::AttributeList row = cursor.currentRow();
00136     
00137 //     string mystring = row["CALIB_OBJ_DATA_CLOB"].data<string>();
00138 //     cout << "mystring: " << mystring << endl;
00139 
00140 //     // get fMode
00141 //     if (!found_fMode) {
00142 //       calibConfig->setCalibrationMode(row["CALIB_MODE"].data<string>());
00143 //       found_fMode = true;
00144 //     } // if (!found_fMode)
00145 
00146 //     // fill fNTriggers
00147 //     if (row["PARAMETER"].data<string>() == "Number of Triggers") {
00148 //       if (found_fNtriggers) {
00149 //      cout << "Warning: found mulitple entries for fNtriggers!" << endl;
00150 //       }
00151 //       int fNtriggers = atoi(row["VALUE"].data<string>().c_str());
00152 //       //cout << "Number of triggers: " << fNtriggers << endl;
00153 //       calibConfig->setNTriggers(static_cast<short>(fNtriggers));
00154 //       found_fNtriggers = true;
00155 //     } // fill fNTriggers
00156 
00157 //     /*
00158 //     // fill fROCIds
00159 //     if (row["PARAMETER"].data<string>() == "ROC") {
00160 //       if (found_fROCIds) {
00161 //      cout << "Warning: found mulitple entries for fROCIds!" << endl;
00162 //       }
00163 //       string rocidlist = row["VALUE"].data<string>();
00164 //       // split the string
00165 //       string buff;
00166 //       vector<string> ROCIds;
00167 //       stringstream ss(rocidlist);
00168 //       while (ss >> buff) {
00169 //      ROCIds.push_back(buff);
00170 //       }
00171 //       calibConfig->setROCIds(ROCIds);
00172 //       found_fROCIds = true;
00173 //     } // fill fROCIds
00174 //     */
00175 
00176 //     // fill fRowPattern
00177 //     if (row["PARAMETER"].data<string>() == "RowNums") {
00178 //       if (found_fRowPattern) {
00179 //      cout << "Warning: found mulitple entries for fRowPattern!" << endl;
00180 //       }
00181 //       string rowlist = row["VALUE"].data<string>();
00182 //       // split the string
00183 //       string buff;
00184 //       vector<short> rows;
00185 //       stringstream ss(rowlist);
00186 //       while (ss >> buff) {
00187 //      rows.push_back(static_cast<short>(atoi(buff.c_str())));
00188 //       }
00189 //       calibConfig->setRowPattern(rows);
00190 //       found_fRowPattern = true;
00191 //     } // fill fRowPattern
00192 
00193 //     // fill fColumnPattern
00194 //     if (row["PARAMETER"].data<string>() == "ColNums") {
00195 //       if (found_fColumnPattern) {
00196 //      cout << "Warning: found mulitple entries for fColumnPattern!" << endl;
00197 //       }
00198 //       string collist = row["VALUE"].data<string>();
00199 //       // split the string
00200 //       string buff;
00201 //       vector<short> cols;
00202 //       stringstream ss(collist);
00203 //       while (ss >> buff) {
00204 //      cols.push_back(static_cast<short>(atoi(buff.c_str())));
00205 //       }
00206 //       calibConfig->setColumnPattern(cols);
00207 //       found_fColumnPattern = true;
00208 //     } // fill fColumnPattern
00209 
00210 //     // fill fVCalValues
00211 //     if (row["CALIB_OBJECT"].data<string>() == "Vcal DAC") {
00212 //       if (found_fVCalValues) {
00213 //      cout << "Warning: found mulitple entries for fVCalValues!" << endl;
00214 //       }
00215 //       string vcallist = row["VALUE"].data<string>();
00216 //       // split the string
00217 //       string buff;
00218 //       vector<short> vcals;
00219 //       stringstream ss(vcallist);
00220 //       while (ss >> buff) {
00221 //      vcals.push_back(static_cast<short>(atoi(buff.c_str())));
00222 //       }
00223 //       calibConfig->setVCalValues(vcals);
00224 //       found_fVCalValues = true;
00225 //     } // fill fRowPattern
00226 
00227 //     /*
00228 //     for (coral::AttributeList::iterator it = row.begin();
00229 //       it != row.end(); ++it) {
00230 //       if it->specification().name() == "PARAMETER"
00231 
00232 //       if (it->specification().name() == "RUN_NUMBER")
00233 //      cout << it->specification().name() << ", " << it->data<long long>() << endl;
00234 //       else
00235 //      cout << it->specification().name() << ", " << it->data<string>() << endl;
00236     
00237 //     } // loop over attribute list
00238 //     */
00239 //   } // while (cursor.next())
00240 
00241 //   // spit out calibConfig object
00242 //   cout << endl << "** calibConfig: " << endl;
00243 //   cout << "      fNtriggers: " << calibConfig->getNTriggers() << endl;
00244 //   /*
00245 //   cout << "      fROCIds: ";
00246 //   vector<string> rocids = calibConfig->getROCIds();
00247 //   for (vector<string>::const_iterator it = rocids.begin();
00248 //        it != rocids.end(); ++it)
00249 //     cout << *it << ", ";
00250 //   cout << endl;
00251 //   */
00252 //   cout << "      fRowPattern: ";
00253 //   vector<short> rowpattern = calibConfig->getRowPattern();
00254 //   for (vector<short>::const_iterator it = rowpattern.begin();
00255 //        it != rowpattern.end(); ++it)
00256 //     cout << *it << ", ";
00257 //   cout << endl;
00258 //   cout << "      fColumnPattern: ";
00259 //   vector<short> columnpattern = calibConfig->getColumnPattern();
00260 //   for (vector<short>::const_iterator it = columnpattern.begin();
00261 //        it != columnpattern.end(); ++it)
00262 //     cout << *it << ", ";
00263 //   cout << endl;
00264 //   cout << "      fVcalValues: ";
00265 //   vector<short> vcalvalues = calibConfig->getVCalValues();
00266 //   for (vector<short>::const_iterator it = vcalvalues.begin();
00267 //        it != vcalvalues.end(); ++it)
00268 //     cout << *it << ", ";
00269 //   cout << endl;
00270 //   cout << "      fNmode: " << calibConfig->getCalibrationMode() << endl;
00271 
00272 //   // see what's in the db
00273 //   //cout << "tagInfo: " << tagInfo().name << ", " << tagInfo().lastInterval.first << endl;
00274 
00275 //   m_to_transfer.push_back(std::make_pair(calibConfig,_sinceIOV));
00276 
00277 
00278 //   delete dbsession;
00279 } // void PixelPopConCalibSourceHandler::getNewObjects_coral()
00280 
00281 // getNewObjects method using a text file
00282 void PixelPopConCalibSourceHandler::getNewObjects_file() {
00283         // check to make sure the _connectString begins with "file//"
00284         if (_connectString.find("file://") != 0) {
00285                 cout << "Invalid connectString: " << _connectString << endl;
00286                 cout << "It should begin with \"file://\"" << endl;
00287                 return;
00288         }
00289         // strip the "file://" from the connect string
00290         string inputFilename = _connectString.erase(0, 7);
00291         
00292         cout << "PopCon-ing the calibration configuration file located at " << inputFilename << endl;
00293 
00294         // use online code to parse the file
00295         pos::PixelCalibConfiguration fancyCalib(inputFilename);
00296         SiPixelCalibConfiguration *calibConfig = new SiPixelCalibConfiguration(fancyCalib);
00297         
00298         m_to_transfer.push_back(std::make_pair(calibConfig, _sinceIOV));
00299   
00300 } // void PixelPopConCalibSourceHandler::getNewObjects_file()
00301