CMS 3D CMS Logo

SiStripBadChannelBuilder.cc

Go to the documentation of this file.
00001 #include "CondTools/SiStrip/plugins/SiStripBadChannelBuilder.h"
00002 #include "CalibTracker/SiStripCommon/interface/SiStripDetInfoFileReader.h"
00003 
00004 #include <iostream>
00005 #include <fstream>
00006 
00007 
00008 SiStripBadChannelBuilder::SiStripBadChannelBuilder(const edm::ParameterSet& iConfig) : ConditionDBWriter<SiStripBadStrip>::ConditionDBWriter<SiStripBadStrip>(iConfig){
00009 
00010   edm::LogInfo("SiStripBadChannelBuilder") << " ctor ";
00011   fp_ = iConfig.getUntrackedParameter<edm::FileInPath>("file",edm::FileInPath("CalibTracker/SiStripCommon/data/SiStripDetInfo.dat"));
00012   printdebug_ = iConfig.getUntrackedParameter<bool>("printDebug",false);
00013   BadComponentList_ =  iConfig.getUntrackedParameter<Parameters>("BadComponentList");
00014 }
00015 
00016 
00017 SiStripBadChannelBuilder::~SiStripBadChannelBuilder(){
00018   edm::LogInfo("SiStripBadChannelBuilder") << " dtor";
00019 }
00020 
00021 void SiStripBadChannelBuilder::algoAnalyze(const edm::Event & event, const edm::EventSetup& iSetup){
00022   
00023   edm::LogInfo("SiStripBadChannelBuilder") <<"SiStripBadChannelBuilder::algoAnalyze called"<<std::endl;
00024   unsigned int run=event.id().run();
00025 
00026   edm::LogInfo("SiStripBadChannelBuilder") << "... creating dummy SiStripBadStrip Data for Run " << run << "\n " << std::endl;
00027   
00028   SiStripBadStrip* obj = new SiStripBadStrip();
00029 
00030   SiStripDetInfoFileReader reader(fp_.fullPath());
00031   
00032   const std::vector<uint32_t> DetIds = reader.getAllDetIds();
00033   
00034   for(Parameters::iterator iBadComponent = BadComponentList_.begin(); iBadComponent != BadComponentList_.end(); ++iBadComponent ) {
00035     
00036     uint32_t BadModule_ = iBadComponent->getParameter<uint32_t>("BadModule");
00037     std::vector<uint32_t> BadChannelList_ = iBadComponent->getParameter<std::vector<uint32_t> >("BadChannelList");
00038 
00039     std::vector<unsigned int> theSiStripVector;
00040     unsigned int NStrips=reader.getNumberOfApvsAndStripLength(BadModule_).first*128;   
00041     
00042     unsigned short lastBad=999;
00043     unsigned short firstBadStrip=0, NconsecutiveBadStrips=0;
00044     unsigned int theBadStripRange;
00045 
00046     for(std::vector<uint32_t>::const_iterator is=BadChannelList_.begin(); is!=BadChannelList_.end(); ++is){
00047       if (*is>NStrips-1)
00048         break;
00049       if (*is!=lastBad+1){
00050         //new set 
00051 
00052         if ( lastBad!=999 ){
00053           //save previous set
00054           theBadStripRange = obj->encode(firstBadStrip,NconsecutiveBadStrips);
00055 
00056           if (printdebug_)
00057             edm::LogInfo("SiStripBadChannelBuilder") << "detid " << BadModule_ << " \t"
00058                                                    << " firstBadStrip " << firstBadStrip << "\t "
00059                                                    << " NconsecutiveBadStrips " << NconsecutiveBadStrips << "\t "
00060                                                    << " packed integer " << std::hex << theBadStripRange  << std::dec
00061                                                    << std::endl;            
00062           
00063           theSiStripVector.push_back(theBadStripRange);
00064         }
00065         
00066         firstBadStrip=*is;
00067         NconsecutiveBadStrips=0;
00068       }         
00069       NconsecutiveBadStrips++;
00070       lastBad=*is;
00071     }
00072 
00073     theBadStripRange = obj->encode(firstBadStrip,NconsecutiveBadStrips);
00074     if (printdebug_)
00075       edm::LogInfo("SiStripBadChannelBuilder") << "detid " << BadModule_ << " \t"
00076                                              << " firstBadStrip " << firstBadStrip << "\t "
00077                                              << " NconsecutiveBadStrips " << NconsecutiveBadStrips << "\t "
00078                                              << " packed integer " << std::hex << theBadStripRange  << std::dec
00079                                              << std::endl;          
00080           
00081     theSiStripVector.push_back(theBadStripRange);
00082         
00083     SiStripBadStrip::Range range(theSiStripVector.begin(),theSiStripVector.end());
00084     if ( ! obj->put(BadModule_,range) )
00085     edm::LogError("SiStripBadChannelBuilder")<<"[SiStripBadChannelBuilder::analyze] detid already exists"<<std::endl;
00086   }
00087  //End now write sistripbadChannel data in DB
00088   edm::Service<cond::service::PoolDBOutputService> mydbservice;
00089 
00090   if( mydbservice.isAvailable() ){
00091     if ( mydbservice->isNewTagRequest("SiStripBadStripRcd") ){
00092       mydbservice->createNewIOV<SiStripBadStrip>(obj,mydbservice->beginOfTime(),mydbservice->endOfTime(),"SiStripBadStripRcd");
00093     } else {
00094       //mydbservice->createNewIOV<SiStripBadStrip>(obj,mydbservice->currentTime(),"SiStripBadStripRcd");
00095       mydbservice->appendSinceTime<SiStripBadStrip>(obj,mydbservice->currentTime(),"SiStripBadStripRcd");
00096     }
00097   }else{
00098     edm::LogError("SiStripBadStripBuilder")<<"Service is unavailable"<<std::endl;
00099   }
00100 
00101 }
00102 
00103 

Generated on Tue Jun 9 17:26:57 2009 for CMSSW by  doxygen 1.5.4