00001 #include "CalibTracker/SiStripESProducers/interface/SiStripApvGainGenerator.h" 00002 #include "FWCore/MessageLogger/interface/MessageLogger.h" 00003 #include <boost/cstdint.hpp> 00004 #include "CalibTracker/SiStripCommon/interface/SiStripDetInfoFileReader.h" 00005 #include "FWCore/ParameterSet/interface/FileInPath.h" 00006 00007 #include "CLHEP/Random/RandFlat.h" 00008 #include "CLHEP/Random/RandGauss.h" 00009 00010 SiStripApvGainGenerator::SiStripApvGainGenerator(const edm::ParameterSet& iConfig,const edm::ActivityRegistry& aReg): 00011 SiStripCondObjBuilderBase<SiStripApvGain>::SiStripCondObjBuilderBase(iConfig) 00012 { 00013 edm::LogInfo("SiStripApvGainGenerator") << "[SiStripApvGainGenerator::SiStripApvGainGenerator]"; 00014 } 00015 00016 SiStripApvGainGenerator::~SiStripApvGainGenerator() { 00017 edm::LogInfo("SiStripApvGainGenerator") << "[SiStripApvGainGenerator::~SiStripApvGainGenerator]"; 00018 } 00019 00020 void SiStripApvGainGenerator::createObject(){ 00021 00022 obj_ = new SiStripApvGain(); 00023 00024 std::string genMode = _pset.getParameter<std::string>("genMode"); 00025 00026 double meanGain_=_pset.getParameter<double>("MeanGain"); 00027 double sigmaGain_=_pset.getParameter<double>("SigmaGain"); 00028 double minimumPosValue_=_pset.getParameter<double>("MinPositiveGain"); 00029 00030 edm::FileInPath fp_ = _pset.getParameter<edm::FileInPath>("file"); 00031 uint32_t printdebug_ = _pset.getUntrackedParameter<uint32_t>("printDebug", 5); 00032 uint32_t count=0; 00033 00034 SiStripDetInfoFileReader reader(fp_.fullPath()); 00035 00036 const std::map<uint32_t, SiStripDetInfoFileReader::DetInfo > DetInfos = reader.getAllData(); 00037 float gainValue; 00038 for(std::map<uint32_t, SiStripDetInfoFileReader::DetInfo >::const_iterator it = DetInfos.begin(); it != DetInfos.end(); it++){ 00039 00040 std::vector<float> theSiStripVector; 00041 for(unsigned short j=0; j<it->second.nApvs; j++){ 00042 00043 if(genMode=="default") 00044 gainValue=meanGain_; 00045 else if (genMode=="gaussian") { 00046 gainValue = CLHEP::RandGauss::shoot(meanGain_, sigmaGain_); 00047 if(gainValue<=minimumPosValue_) gainValue=minimumPosValue_; 00048 } 00049 else { 00050 LogDebug("SiStripApvGain") << "ERROR: wrong genMode specifier : " << genMode << ", please select one of \"default\" or \"gaussian\"" << std::endl; 00051 exit(1); 00052 } 00053 00054 if (count<printdebug_) { 00055 edm::LogInfo("SiStripApvGainGenerator") << "detid: " << it->first << " Apv: " << j << " gain: " << gainValue << std::endl; 00056 } 00057 theSiStripVector.push_back(gainValue); 00058 } 00059 count++; 00060 SiStripApvGain::Range range(theSiStripVector.begin(),theSiStripVector.end()); 00061 if ( ! obj_->put(it->first,range) ) 00062 edm::LogError("SiStripApvGainGenerator")<<" detid already exists"<<std::endl; 00063 } 00064 }