00001
00002
00003
00004 #include "OnlineDB/SiStripESSources/interface/SiStripCondObjBuilderFromDb.h"
00005 #include "OnlineDB/SiStripESSources/interface/SiStripFedCablingBuilderFromDb.h"
00006 #include "FWCore/MessageLogger/interface/MessageLogger.h"
00007 #include "DataFormats/SiStripCommon/interface/SiStripFecKey.h"
00008 #include "DataFormats/SiStripCommon/interface/SiStripFedKey.h"
00009 #include "CondFormats/SiStripObjects/interface/SiStripPedestals.h"
00010 #include "CondFormats/SiStripObjects/interface/SiStripNoises.h"
00011 #include "CondFormats/SiStripObjects/interface/SiStripThreshold.h"
00012 #include "CondFormats/SiStripObjects/interface/SiStripApvGain.h"
00013 #include "CondFormats/SiStripObjects/interface/SiStripLatency.h"
00014 #include "CondFormats/SiStripObjects/interface/SiStripFedCabling.h"
00015 #include "CondFormats/SiStripObjects/interface/FedChannelConnection.h"
00016 #include "CalibFormats/SiStripObjects/interface/SiStripFecCabling.h"
00017 #include "CalibFormats/SiStripObjects/interface/SiStripDetCabling.h"
00018 #include "CalibFormats/SiStripObjects/interface/SiStripQuality.h"
00019 #include "CalibTracker/SiStripCommon/interface/SiStripDetInfoFileReader.h"
00020
00021 #include <cstdlib>
00022 #include <iostream>
00023 #include <sstream>
00024 #include <iomanip>
00025 #include "Fed9UUtils.hh"
00026
00027 using namespace std;
00028 using namespace sistrip;
00029
00030
00031
00033 SiStripCondObjBuilderFromDb::SiStripCondObjBuilderFromDb(const edm::ParameterSet& pset,
00034 const edm::ActivityRegistry&):
00035 m_gaincalibrationfactor(static_cast<float>(pset.getUntrackedParameter<double>("GainNormalizationFactor",690.))),
00036 m_defaultpedestalvalue(static_cast<float>(pset.getUntrackedParameter<double>("DefaultPedestal",0.))),
00037 m_defaultnoisevalue(static_cast<float>(pset.getUntrackedParameter<double>("DefaultNoise",0.))),
00038 m_defaultthresholdhighvalue(static_cast<float>(pset.getUntrackedParameter<double>("DefaultThresholdHigh",0.))),
00039 m_defaultthresholdlowvalue(static_cast<float>(pset.getUntrackedParameter<double>("DefaultThresholdLow",0.))),
00040 m_defaultapvmodevalue(static_cast<uint16_t>(pset.getUntrackedParameter<uint32_t>("DefaultAPVMode",37))),
00041 m_defaultapvlatencyvalue(static_cast<uint16_t>(pset.getUntrackedParameter<uint32_t>("DefaultAPVLatency",142))),
00042 m_defaulttickheightvalue(static_cast<float>(pset.getUntrackedParameter<double>("DefaultTickHeight",690.))),
00043 m_useanalysis(static_cast<bool>(pset.getUntrackedParameter<bool>("UseAnalysis",false))),
00044 m_usefed(static_cast<bool>(pset.getUntrackedParameter<bool>("UseFED",false))),
00045 m_usefec(static_cast<bool>(pset.getUntrackedParameter<bool>("UseFEC",false))),
00046 m_debug(static_cast<bool>(pset.getUntrackedParameter<bool>("DebugMode",false)))
00047 {
00048 LogTrace(mlESSources_)
00049 << "[SiStripCondObjBuilderFromDb::" << __func__ << "]"
00050 << " Constructing object...";
00051 }
00052
00053
00055 SiStripCondObjBuilderFromDb::SiStripCondObjBuilderFromDb()
00056 {
00057 LogTrace(mlESSources_)
00058 << "[SiStripCondObjBuilderFromDb::" << __func__ << "]"
00059 << " Constructing object...";
00060 }
00061
00062
00064 SiStripCondObjBuilderFromDb::~SiStripCondObjBuilderFromDb() {
00065 LogTrace(mlESSources_)
00066 << "[SiStripCondObjBuilderFromDb::" << __func__ << "]"
00067 << " Destructing object...";
00068 }
00069
00070
00072 void SiStripCondObjBuilderFromDb::checkUpdate() {
00073 if (!(dbParams_==dbParams())){
00074 dbParams_=dbParams();
00075 buildCondObj();
00076 }
00077 }
00078
00079
00080
00082 bool SiStripCondObjBuilderFromDb::checkForCompatibility(std::stringstream& input,std::stringstream& output,std::string& label){
00083
00084
00085
00086
00087 SiStripDbParams::const_iterator_range partitionsRange = dbParams().partitions();
00088
00089 SiStripDbParams::SiStripPartitions::const_iterator ipart = partitionsRange.begin();
00090 SiStripDbParams::SiStripPartitions::const_iterator ipartEnd = partitionsRange.end();
00091 for ( ; ipart != ipartEnd; ++ipart ) {
00092 SiStripPartition partition=ipart->second;
00093 output << "@ "
00094 << " Partition " << partition.partitionName() ;
00095 if (label!="Cabling" && label !="ApvLatency")
00096 output << " FedVer " << partition.fedVersion().first << "." << partition.fedVersion().second;
00097 if(label=="Cabling")
00098 output << " CabVer " << partition.cabVersion().first << "." << partition.cabVersion().second
00099 << " MaskVer " << partition.maskVersion().first << "." << partition.maskVersion().second;
00100 if(label=="ApvTiming")
00101 output<< " ApvTimingVer " << partition.apvTimingVersion().first << "." << partition.apvTimingVersion().second;
00102 if(label=="ApvLatency")
00103 output<< " FecVersion " << partition.fecVersion().first << "." << partition.fecVersion().second;
00104 }
00105
00106 if (!strcmp(output.str().c_str(),input.str().c_str()))
00107 return false;
00108
00109 return true;
00110 }
00111
00112
00114 void SiStripCondObjBuilderFromDb::buildCondObj() {
00115 LogTrace(mlESSources_)
00116 << "[SiStripCondObjBuilderFromDb::" << __func__ << "]";
00117
00118
00119 if ( db_ ) {
00120
00121
00122 if ( db_->deviceFactory() ||
00123 db_->databaseCache() ) {
00124
00125
00126 SiStripFecCabling fec_cabling;
00127
00128 SiStripFedCablingBuilderFromDb::buildFecCabling( &*db_,
00129 fec_cabling,
00130 sistrip::CABLING_FROM_CONNS );
00131 fed_cabling_=new SiStripFedCabling;
00132
00133 SiStripFedCablingBuilderFromDb::getFedCabling( fec_cabling, *fed_cabling_ );
00134 SiStripDetCabling det_cabling( *fed_cabling_ );
00135 buildStripRelatedObjects( &*db_, det_cabling );
00136
00137
00138 if(m_useanalysis)buildAnalysisRelatedObjects(&*db_, v_trackercon);
00139 if(m_usefed) buildFEDRelatedObjects(&*db_, v_trackercon);
00140 if(m_usefec) buildFECRelatedObjects(&*db_, v_trackercon);
00141
00142
00143
00144 } else {
00145 edm::LogWarning(mlESSources_)
00146 << "[SiStripCondObjBuilderFromDb::" << __func__ << "]"
00147 << " NULL pointer to DeviceFactory returned by SiStripConfigDb!"
00148 << " Cannot build Pedestals object!";
00149 }
00150 } else {
00151 edm::LogWarning(mlESSources_)
00152 << "[SiStripCondObjBuilderFromDb::" << __func__ << "]"
00153 << " NULL pointer to SiStripConfigDb returned by DB \"service\"!"
00154 << " Cannot build Pedestals object!";
00155 }
00156 }
00157
00158
00160
00161 bool SiStripCondObjBuilderFromDb::retrieveFedDescriptions(SiStripConfigDb* const db){
00162 SiStripConfigDb::FedDescriptionsRange descriptions = db->getFedDescriptions();
00163 if ( descriptions.empty() ) {
00164 edm::LogWarning(mlESSources_)
00165 << "SiStripCondObjBuilderFromDb::" << __func__ << "]"
00166 << " No FED descriptions found!";
00167
00168 return false;
00169 }
00170 return true;
00171 }
00172
00173
00175
00176 bool SiStripCondObjBuilderFromDb::retrieveTimingAnalysisDescriptions( SiStripConfigDb* const db){
00177 SiStripConfigDb::AnalysisDescriptionsRange anal_descriptions =
00178 db->getAnalysisDescriptions( CommissioningAnalysisDescription::T_ANALYSIS_TIMING );
00179 if ( anal_descriptions.empty() ) {
00180 edm::LogWarning(mlESSources_)
00181 << "SiStripCondObjBuilderFromDb::" << __func__ << "]"
00182 << " Unable to build SiStripApvGain object!"
00183 << " No timing-scan analysis descriptions found!";
00184 return false;
00185 }
00186 return true;
00187 }
00188
00189
00191
00192 vector<uint32_t> SiStripCondObjBuilderFromDb::retrieveActiveDetIds(const SiStripDetCabling& det_cabling){
00193 vector<uint32_t> det_ids;
00194 det_cabling.addActiveDetectorsRawIds(det_ids);
00195 if ( det_ids.empty() ) {
00196 edm::LogWarning(mlESSources_)
00197 << "SiStripCondObjBuilderFromDb::" << __func__ << "]"
00198 << " Unable to build Pedestals object!"
00199 << " No DetIds found!";
00200 return det_ids;
00201 }
00202 LogTrace(mlESSources_)
00203 << "\n\nSiStripCondObjBuilderFromDb::" << __func__ << "]"
00204 << " Found " << det_ids.size() << " active DetIds";
00205 return det_ids;
00206 }
00207
00208
00210
00211 vector<FedChannelConnection> SiStripCondObjBuilderFromDb::buildConnections(const SiStripDetCabling& det_cabling, uint32_t det_id ){
00212 vector<FedChannelConnection> conns = det_cabling.getConnections(det_id);
00213 if (conns.size()==0){
00214 edm::LogWarning(mlESSources_)
00215 << "SiStripCondObjBuilderFromDb::" << __func__ << "]"
00216 << " Unable to build condition object!"
00217 << " No FED channel connections found for detid "<< det_id;
00218 }
00219 return conns;
00220 }
00221
00222
00224
00225 uint16_t SiStripCondObjBuilderFromDb::retrieveNumberAPVPairs(uint32_t det_id){
00226 uint16_t nApvPairs;
00227 SiStripDetInfoFileReader * fr=edm::Service<SiStripDetInfoFileReader>().operator->();
00228 nApvPairs=fr->getNumberOfApvsAndStripLength(det_id).first/2;
00229 return nApvPairs;
00230 }
00231
00232
00234
00235 void SiStripCondObjBuilderFromDb::setDefaultValuesCabling(uint16_t apvPair){
00236 uint16_t istrip = apvPair*sistrip::STRIPS_PER_FEDCH;
00237 inputQuality.push_back(quality_->encode(istrip,sistrip::STRIPS_PER_FEDCH));
00238 threshold_->setData( istrip, m_defaultthresholdlowvalue, m_defaultthresholdlowvalue, inputThreshold );
00239 for ( ;istrip < (apvPair+1)*sistrip::STRIPS_PER_FEDCH; ++istrip ){
00240 pedestals_->setData(m_defaultpedestalvalue,inputPedestals );
00241 noises_->setData(m_defaultnoisevalue ,inputNoises );
00242 }
00243 }
00244
00245
00247 void SiStripCondObjBuilderFromDb::setDefaultValuesApvTiming(){
00248 inputApvGain.push_back(m_defaulttickheightvalue/m_gaincalibrationfactor);
00249 inputApvGain.push_back(m_defaulttickheightvalue/m_gaincalibrationfactor);
00250 }
00251
00252
00254 void SiStripCondObjBuilderFromDb::setDefaultValuesApvLatency(SiStripLatency & latency_, FedChannelConnection ipair, uint16_t apvnr){
00255 latency_.put( ipair.detId(), apvnr, m_defaultapvmodevalue, m_defaultapvlatencyvalue);
00256 latency_.put( ipair.detId(), ++apvnr, m_defaultapvmodevalue, m_defaultapvlatencyvalue);
00257 }
00258
00259
00260
00261
00263 bool SiStripCondObjBuilderFromDb::setValuesApvTiming(SiStripConfigDb* const db, FedChannelConnection &ipair){
00264 SiStripConfigDb::AnalysisDescriptionsRange anal_descriptions = db->getAnalysisDescriptions( CommissioningAnalysisDescription::T_ANALYSIS_TIMING );
00265 SiStripConfigDb::AnalysisDescriptionsV::const_iterator iii = anal_descriptions.begin();
00266 SiStripConfigDb::AnalysisDescriptionsV::const_iterator jjj = anal_descriptions.end();
00267
00268 while ( iii != jjj ) {
00269 CommissioningAnalysisDescription* tmp = *iii;
00270 uint16_t fed_id = tmp->getFedId();
00271 uint16_t fed_ch = SiStripFedKey::fedCh( tmp->getFeUnit(), tmp->getFeChan() );
00272 if ( fed_id == ipair.fedId() && fed_ch == ipair.fedCh() ) { break; }
00273 iii++;
00274 }
00275
00276 TimingAnalysisDescription *anal=0;
00277 if ( iii != jjj ) { anal = dynamic_cast<TimingAnalysisDescription*>(*iii); }
00278 if ( anal ) {
00279 float tick_height = (anal->getHeight() / m_gaincalibrationfactor);
00280 inputApvGain.push_back( tick_height );
00281 inputApvGain.push_back( tick_height);
00282 } else {
00283 inputApvGain.push_back(m_defaulttickheightvalue/m_gaincalibrationfactor);
00284 inputApvGain.push_back(m_defaulttickheightvalue/m_gaincalibrationfactor);
00285 return false;
00286 }
00287
00288 return true;
00289 }
00290
00291
00293 bool SiStripCondObjBuilderFromDb::setValuesApvLatency(SiStripLatency & latency_, SiStripConfigDb* const db, FedChannelConnection &ipair, uint32_t detid, uint16_t apvnr){
00294 SiStripDetInfoFileReader * fr=edm::Service<SiStripDetInfoFileReader>().operator->();
00295 uint16_t nApvPairs;
00296 nApvPairs=fr->getNumberOfApvsAndStripLength(detid).first/2;
00297 SiStripConfigDb::DeviceDescriptionsRange apvs = db->getDeviceDescriptions( APV25 );
00298
00299 SiStripConfigDb::DeviceDescriptionsV::const_iterator iapv = apvs.begin();
00300 SiStripConfigDb::DeviceDescriptionsV::const_iterator japv = apvs.end();
00301 if(iapv==japv) return false;
00302 for ( ; iapv != japv; ++iapv ) {
00303 apvDescription* apv = dynamic_cast<apvDescription*>( *iapv );
00304 if ( !apv ) { continue; }
00305 if((apv->getFecSlot()) != (ipair.fecSlot())) continue;
00306 if((apv->getRingSlot()) != (ipair.fecRing())) continue;
00307 if((apv->getCcuAddress()) != (ipair.ccuAddr())) continue;
00308 if((apv->getChannel()) != (ipair.ccuChan())) continue;
00309
00310 if((apv->getAddress()) == (ipair.i2cAddr(0))) {
00311 if(!latency_.put( ipair.detId(), apvnr, static_cast<uint16_t>(apv->getLatency()), static_cast<uint16_t>(apv->getApvMode()))){
00312 std::cout << "UNABLE APVLatency Put: Detid "<< ipair.detId() << " APVNr.: " << apvnr << " Latency Value: " << apv->getLatency() << " APV Mode: " << apv->getApvMode()<< std::endl;
00313 return false;
00314 }
00315 apvnr++;
00316 }
00317 if((apv->getAddress()) == (ipair.i2cAddr(1))) {
00318 if(!latency_.put( ipair.detId(), apvnr, static_cast<uint16_t>(apv->getLatency()), static_cast<uint16_t>(apv->getApvMode()))){
00319 std::cout << "UNABLE APVLatency Put: Detid "<< ipair.detId() << " APVNr.: " << apvnr << " Latency Value: " << dec <<apv->getLatency() << " APV Mode: " << dec <<apv->getApvMode()<< std::endl;
00320 return false;
00321 }
00322 apvnr++;
00323 }
00324 }
00325 return true;
00326 }
00327
00328
00330 bool SiStripCondObjBuilderFromDb::setValuesCabling(SiStripConfigDb* const db, FedChannelConnection &ipair, uint32_t detid){ SiStripConfigDb::FedDescriptionsRange descriptions = db->getFedDescriptions();
00331 SiStripConfigDb::FedDescriptionsV::const_iterator description = descriptions.begin();
00332 while ( description != descriptions.end() ) {
00333 if ( (*description)->getFedId() ==ipair.fedId() ) { break; }
00334 description++;
00335 }
00336 if ( description == descriptions.end() ) {return false;}
00337
00338 const Fed9U::Fed9UStrips& strips = (*description)->getFedStrips();
00339
00340
00341
00342 uint16_t jstrip = ipair.apvPairNumber()*sistrip::STRIPS_PER_FEDCH;
00343 for ( uint16_t iapv = 2*ipair.fedCh(); iapv < 2*ipair.fedCh()+2; iapv++ ) {
00344
00345
00346 Fed9U::Fed9UAddress addr;
00347 addr.setFedApv(iapv);
00348 vector<Fed9U::Fed9UStripDescription> strip = strips.getApvStrips(addr);
00349
00350 vector<Fed9U::Fed9UStripDescription>::const_iterator istrip = strip.begin();
00351 uint16_t stripcount=0;
00352 for ( ; istrip != strip.end(); istrip++ ) {
00353 pedestals_->setData( istrip->getPedestal() , inputPedestals);
00354 noises_ ->setData( istrip->getNoise() , inputNoises );
00355 threshold_->setData( jstrip, istrip->getLowThresholdFactor(),
00356 istrip->getHighThresholdFactor(), inputThreshold );
00357 if(istrip->getDisable())
00358 inputQuality.push_back(quality_->encode(jstrip,1));
00359 stripcount++;
00360 jstrip++;
00361 }
00362 }
00363 return true;
00364 }
00365
00366
00367
00369
00370 void SiStripCondObjBuilderFromDb::storePedestals(uint32_t det_id){
00371 if ( !pedestals_->put(det_id, inputPedestals ) ) {
00372 std::cout
00373 << "[SiStripCondObjBuilderFromDb::" << __func__ << "]"
00374 << " Unable to insert values into SiStripPedestals object!"
00375 << " DetId already exists!" << std::endl;
00376 }
00377 inputPedestals.clear();
00378 }
00379
00380
00382 void SiStripCondObjBuilderFromDb::storeNoise(uint32_t det_id){
00383
00384 if ( !noises_->put(det_id, inputNoises ) ) {
00385 std::cout
00386 << "[SiStripCondObjBuilderFromDb::" << __func__ << "]"
00387 << " Unable to insert values into SiStripNoises object!"
00388 << " DetId already exists!" << std::endl;
00389 }
00390 inputNoises.clear();
00391 }
00392
00393
00395 void SiStripCondObjBuilderFromDb::storeThreshold(uint32_t det_id){
00396
00397 if ( !threshold_->put(det_id, inputThreshold ) ) {
00398 std::cout
00399 << "[SiStripCondObjBuilderFromDb::" << __func__ << "]"
00400 << " Unable to insert values into SiStripThreshold object!"
00401 << " DetId already exists!" << std::endl;
00402 }
00403 inputThreshold.clear();
00404 }
00405
00406
00408 void SiStripCondObjBuilderFromDb::storeQuality(uint32_t det_id){
00409
00410 if (inputQuality.size()){
00411 quality_->compact(det_id,inputQuality);
00412 if ( !quality_->put(det_id, inputQuality ) ) {
00413 std::cout
00414 << "[SiStripCondObjBuilderFromDb::" << __func__ << "]"
00415 << " Unable to insert values into SiStripThreshold object!"
00416 << " DetId already exists!" << std::endl;
00417 }
00418 }
00419 inputQuality.clear();
00420 }
00421
00422
00424 void SiStripCondObjBuilderFromDb::storeTiming(uint32_t det_id){
00425
00426 SiStripApvGain::Range range( inputApvGain.begin(), inputApvGain.end() );
00427 if ( !gain_->put( det_id, range ) ) {
00428 edm::LogWarning(mlESSources_)
00429 << "[SiStripCondObjBuilderFromDb::" << __func__ << "]"
00430 << " Unable to insert values into SiStripApvGain object!"
00431 << " DetId already exists!";
00432 }
00433 inputApvGain.clear();
00434 }
00435
00436
00437
00439 void SiStripCondObjBuilderFromDb::buildStripRelatedObjects( SiStripConfigDb* const db,
00440 const SiStripDetCabling& det_cabling){
00441
00442 uint16_t nApvPairs;
00443 vector<uint32_t>::const_iterator det_id;
00444 vector<uint32_t> det_ids;
00445
00446 edm::LogInfo(mlESSources_)
00447 << "\n[SiStripCondObjBuilderFromDb::" << __func__ << "] first call to this method";
00448
00449
00450 if (!retrieveFedDescriptions(db)) {std::cout<< "Found no FedDescription!" << std::endl;return;}
00451
00452 det_cabling.addActiveDetectorsRawIds(det_ids);
00453 if ( det_ids.empty() ) {
00454 std::cout
00455 << "SiStripCondObjBuilderFromDb::" << __func__ << "]"
00456 << " Unable to build Pedestals object!"
00457 << " No DetIds found!" << std::endl;
00458 return;
00459 }
00460 std::cout << "\n\nSiStripCondObjBuilderFromDb::" << __func__ << "]"
00461 << " Found " << det_ids.size() << " active DetIds";
00462
00463
00464 det_id = det_ids.begin();
00465 for ( ; det_id != det_ids.end(); det_id++ ) {
00466 std::stringstream ssMessage;
00467
00468
00469 if ( !(*det_id) ) { continue; }
00470 if ( *det_id == sistrip::invalid32_ ) { continue; }
00471
00472
00473
00474 const vector<FedChannelConnection>& conns=buildConnections(det_cabling, *det_id);
00475
00476 vector<FedChannelConnection>::const_iterator ipair = conns.begin();
00477 if(conns.size() ==0 ) continue;
00478
00479
00480 nApvPairs=retrieveNumberAPVPairs(*det_id);
00481
00482
00483 vector< vector<FedChannelConnection>::const_iterator > listConns(nApvPairs,conns.end());
00484
00485 for ( ; ipair != conns.end(); ipair++ ){
00486
00487 if (ipair->fedId()!=sistrip::invalid_ && ipair->apvPairNumber()<3){
00488 ipair->print(ssMessage);
00489 ssMessage<< std::endl;
00490 listConns[ipair-conns.begin()]=ipair;
00491 } else {
00492 std::cout
00493 << "\n impossible to assign connection position in listConns " << std::endl;
00494 ipair->print(ssMessage);
00495 ssMessage << std::endl;
00496 }
00497 }
00498
00499
00500 vector< vector<FedChannelConnection>::const_iterator >::const_iterator ilistConns=listConns.begin();
00501 for (uint16_t apvPair=0;apvPair<listConns.size();apvPair++){
00502 ipair=listConns[apvPair];
00503 if ( ipair == conns.end() ) {
00504
00505 std::cout
00506 << "\n "
00507 << " Unable to find FED connection for detid : " << *det_id << " APV pair number " << apvPair
00508 << " Writing default values" << std::endl;
00509
00510 apvPair+=100;
00511 continue;
00512 }
00513 p_apvpcon=std::make_pair(apvPair,*ipair);
00514 v_apvpcon.push_back(p_apvpcon);
00515 }
00516 p_detcon=std::make_pair(*det_id,v_apvpcon);
00517 v_trackercon.push_back(p_detcon);
00518 v_apvpcon.clear();
00519 edm::LogInfo(mlESSources_) << ssMessage.str();
00520 }
00521 }
00522
00523
00525 void SiStripCondObjBuilderFromDb::buildAnalysisRelatedObjects( SiStripConfigDb* const db, trackercon tc){
00526 std::cout << "Entering [SiStripCondObjBuilderFromDb::"<<__func__ <<"]"<<std::endl;
00527
00528 gain_= new SiStripApvGain();
00529
00530
00531 if(!retrieveTimingAnalysisDescriptions(&*db_)){
00532 edm::LogWarning(mlESSources_)
00533 << "[SiStripCondObjBuilderFromDb::" << __func__ << "]"
00534 << " NULL pointer to AnalysisDescriptions returned by SiStripConfigDb!"
00535 << " Cannot build Analysis object! QUIT";
00536
00537 setDefaultValuesApvTiming();
00538 storeTiming(4711);
00539 return;
00540 }
00541
00542 i_trackercon detids_end=tc.end();
00543
00544
00545 for(i_trackercon detids=tc.begin();detids!=detids_end;detids++){
00546 uint32_t detid = (*detids).first;
00547 i_apvpairconn connections_end=((*detids).second).end();
00548
00549
00550 for(i_apvpairconn connections=((*detids).second).begin();connections!=connections_end;connections++){
00551 uint32_t apvPair =(*connections).first;
00552 FedChannelConnection ipair =(*connections).second;
00553 std::cout << "Detid: " << std::dec << detid << " ApvPair: " << apvPair << std::endl;
00554
00555
00556 if(apvPair>=100){
00557 setDefaultValuesApvTiming();
00558 }
00559
00560
00561 if(!setValuesApvTiming(db, ipair)){
00562 std::cout
00563 << "\n "
00564 << " Unable to find Timing Analysis Description"
00565 << " Writing default values for DetId: " << detid
00566 << " Value: " << m_defaulttickheightvalue/m_gaincalibrationfactor << std::endl;
00567 setDefaultValuesApvTiming();
00568 }
00569 }
00570 storeTiming(detid);
00571 }
00572 }
00573
00574
00576 void SiStripCondObjBuilderFromDb::buildFECRelatedObjects( SiStripConfigDb* const db, trackercon tc){
00577 std::cout << "Entering [SiStripCondObjBuilderFromDb::"<<__func__ <<"]"<<std::endl;
00578
00579 latency_ = new SiStripLatency();
00580
00581 i_trackercon detids_end=tc.end();
00582
00583
00584 for(i_trackercon detids=tc.begin();detids!=detids_end;detids++){
00585 uint32_t detid = (*detids).first;
00586 uint16_t apvnr=1;
00587 i_apvpairconn connections_end=((*detids).second).end();
00588
00589
00590 for(i_apvpairconn connections=((*detids).second).begin();connections!=connections_end;connections++){
00591 uint32_t apvPair =(*connections).first;
00592 FedChannelConnection ipair =(*connections).second;
00593
00594
00595 if(apvPair>=100){
00596 setDefaultValuesApvLatency((*latency_),ipair, apvnr);
00597 }
00598
00599
00600 if(!setValuesApvLatency((*latency_),db, ipair,detid, apvnr)){
00601 std::cout
00602 << "\n "
00603 << " Unable to find FEC Description"
00604 << " Writing default values for DetId: " << detid
00605 << " Value: Latency " << m_defaultapvlatencyvalue << " ApvMode " << m_defaultapvmodevalue << std::endl;
00606 setDefaultValuesApvLatency((*latency_),ipair, apvnr);
00607 }
00608 apvnr+=2;
00609 }
00610
00611 latency_->compress();
00612 std::stringstream ss;
00613
00614 latency_->printSummary(ss);
00615 }
00616 }
00617
00618
00620 void SiStripCondObjBuilderFromDb::buildFEDRelatedObjects( SiStripConfigDb* const db, trackercon tc){
00621 std::cout << "Entering [SiStripCondObjBuilderFromDb::"<<__func__ <<"]"<<std::endl;
00622
00623
00624 pedestals_= new SiStripPedestals();
00625 noises_ = new SiStripNoises();
00626 threshold_= new SiStripThreshold();
00627 quality_ = new SiStripQuality();
00628
00629 i_trackercon detids_end=tc.end();
00630
00631
00632 for(i_trackercon detids=tc.begin();detids!=detids_end;detids++){
00633 uint32_t detid = (*detids).first;
00634 i_apvpairconn connections_end=((*detids).second).end();
00635
00636
00637 for(i_apvpairconn connections=((*detids).second).begin();connections!=connections_end;connections++){
00638 uint32_t apvPair =(*connections).first;
00639 FedChannelConnection ipair =(*connections).second;
00640
00641
00642 if(apvPair>=100){
00643 setDefaultValuesCabling((apvPair-100));
00644 }
00645 if(!setValuesCabling(db, ipair, detid)){
00646 std::cout
00647 << "[SiStripCondObjBuilderFromDb::" << __func__ << "]"
00648 << " Unable to find FED description for FED id: " << ipair.fedId()
00649 << " detid : " << detid << " APV pair number " << apvPair
00650 << " Writing default values"<< std::endl;
00651 setDefaultValuesCabling(apvPair);
00652 }
00653 }
00654 storePedestals(detid);
00655 storeNoise(detid);
00656 storeThreshold(detid);
00657 storeQuality(detid);
00658 }
00659 }
00660
00661