#include <CalibFormats/SiStripObjects/interface/SiStripGain.h>
Public Member Functions | |
float | getApvGain (const uint16_t &apv, const SiStripApvGain::Range &range) const |
float | getApvGain (const uint16_t &apv, const SiStripApvGain::Range &range, const uint32_t index) const |
void | getDetIds (std::vector< uint32_t > &DetIds_) const |
ATTENTION: we assume the detIds are the same as those from the first gain. | |
std::string | getLabelName (const uint32_t index) const |
size_t | getNumberOfTags () const |
const SiStripApvGain::Range | getRange (const uint32_t &detID, const uint32_t index) const |
const SiStripApvGain::Range | getRange (const uint32_t &detID) const |
std::string | getRcdName (const uint32_t index) const |
float | getStripGain (const uint16_t &strip, const SiStripApvGain::Range &range, const uint32_t index) const |
float | getStripGain (const uint16_t &strip, const SiStripApvGain::Range &range) const |
double | getTagNorm (const uint32_t index) const |
void | multiply (const SiStripApvGain &apvgain, const double &factor, const std::pair< std::string, std::string > &recordLabelPair) |
Used to input additional gain values that will be multiplied to the first one. | |
void | printDebug (std::stringstream &ss) const |
void | printSummary (std::stringstream &ss) const |
SiStripGain (const SiStripApvGain &apvgain, const double &factor, const std::pair< std::string, std::string > &recordLabelPair) | |
SiStripGain (const SiStripApvGain &apvgain, const double &factor) | |
Kept for compatibility. | |
SiStripGain () | |
virtual | ~SiStripGain () |
Private Member Functions | |
void | fillNewGain (const SiStripApvGain *apvgain, const double &factor, const SiStripApvGain *apvgain2=0, const double &factor2=1.) |
const SiStripGain & | operator= (const SiStripGain &) |
SiStripGain (const SiStripGain &) | |
Private Attributes | |
const SiStripApvGain * | apvgain_ |
std::auto_ptr< SiStripApvGain > | apvgainAutoPtr_ |
std::vector< const SiStripApvGain * > | apvgainVector_ |
std::vector< double > | normVector_ |
std::vector< std::pair < std::string, std::string > > | recordLabelPair_ |
Description: give detector view for the cabling classes
Usage: <usage>
Original Author: gbruno Created: Wed Mar 22 12:24:20 CET 2006
Modifications by M. De Mattia (demattia@pd.infn.it) on 11/11/2009: It now holds a std::vector of pointers to ApvGain and a std::vector of corresponding normalization factors.
It returns the product of all the Gain/norm ratios.
The multiply method allows to input additional gain records.
ATTENTION: the code assumes that the second tag has at least the same DetIds that the first tag and only the DetIds present in the first tag will be used.
There are two set of methods to access the gain value. The first one returns the products of all ApvGain/norm. The second set of methods take an additional integer paramter and return the corresponding ApvGain (without normalization). Note that no check is done inside these methods to see if the ApvGain really exists. It is responsibility of the user to not pass an index value that exceeds the number of ApvGains.
The normalization factors for each of the stored ApvGains are also accessible passing the corresponding index.
Additional method are provided to get the number of ApvGains used to build this object, the names of the records that stored those ApvGains and the labels (they can be used to go back to the tags looking in the cfg).
Definition at line 41 of file SiStripGain.h.
SiStripGain::SiStripGain | ( | ) | [inline] |
Definition at line 44 of file SiStripGain.h.
{};
virtual SiStripGain::~SiStripGain | ( | ) | [inline, virtual] |
Definition at line 45 of file SiStripGain.h.
{};
SiStripGain::SiStripGain | ( | const SiStripApvGain & | apvgain, |
const double & | factor | ||
) | [inline] |
SiStripGain::SiStripGain | ( | const SiStripApvGain & | apvgain, |
const double & | factor, | ||
const std::pair< std::string, std::string > & | recordLabelPair | ||
) | [inline] |
Definition at line 54 of file SiStripGain.h.
References multiply().
SiStripGain::SiStripGain | ( | const SiStripGain & | ) | [private] |
void SiStripGain::fillNewGain | ( | const SiStripApvGain * | apvgain, |
const double & | factor, | ||
const SiStripApvGain * | apvgain2 = 0 , |
||
const double & | factor2 = 1. |
||
) | [private] |
Definition at line 40 of file SiStripGain.cc.
References apvgain_, apvgainAutoPtr_, edm::FileInPath::fullPath(), SiStripDetInfoFileReader::getAllData(), SiStripApvGain::getApvGain(), SiStripApvGain::getDetIds(), SiStripApvGain::getRange(), estimatePileup::inputRange, and SiStripApvGain::put().
Referenced by multiply().
{ SiStripApvGain * newApvGain = new SiStripApvGain; edm::FileInPath fp("CalibTracker/SiStripCommon/data/SiStripDetInfo.dat"); SiStripDetInfoFileReader reader(fp.fullPath()); const std::map<uint32_t, SiStripDetInfoFileReader::DetInfo> DetInfos = reader.getAllData(); // Loop on the apvgain in input and fill the newApvGain with the values/factor. std::vector<uint32_t> detIds; apvgain->getDetIds(detIds); std::vector<uint32_t>::const_iterator it = detIds.begin(); for( ; it != detIds.end(); ++it ) { std::map<uint32_t, SiStripDetInfoFileReader::DetInfo>::const_iterator detInfoIt = DetInfos.find(*it); if( detInfoIt != DetInfos.end() ) { std::vector<float> theSiStripVector; // Loop on all the apvs and then on the strips SiStripApvGain::Range range = apvgain->getRange(*it); SiStripApvGain::Range range2; if( apvgain2 != 0 ) { range2 = apvgain2->getRange(*it); } for( int apv = 0; apv < detInfoIt->second.nApvs; ++apv ) { float apvGainValue = apvgain->getApvGain( apv, range )/factor; if( (apvgain2 != 0) && (factor2 != 0.) ) { apvGainValue *= apvgain2->getApvGain( apv, range2 )/factor2; } theSiStripVector.push_back(apvGainValue); } SiStripApvGain::Range inputRange(theSiStripVector.begin(), theSiStripVector.end()); if( ! newApvGain->put(*it, inputRange) ) { edm::LogError("SiStripGain") << "detid already exists" << std::endl; } } } apvgain_ = newApvGain; // Deletes the managed object and replaces it with the new one apvgainAutoPtr_.reset(newApvGain); }
float SiStripGain::getApvGain | ( | const uint16_t & | apv, |
const SiStripApvGain::Range & | range | ||
) | const |
Definition at line 105 of file SiStripGain.cc.
References apvgain_, and SiStripApvGain::getApvGain().
Referenced by getApvGain(), printDebug(), and printSummary().
{ if( apvgain_ == 0 ) { edm::LogError("SiStripGain::getApvGain") << "ERROR: no gain available. Returning gain = 1." << std::endl; return 1.; } return( apvgain_->getApvGain(apv, range) ); }
float SiStripGain::getApvGain | ( | const uint16_t & | apv, |
const SiStripApvGain::Range & | range, | ||
const uint32_t | index | ||
) | const |
Definition at line 114 of file SiStripGain.cc.
References apvgainVector_, getApvGain(), and normVector_.
{ if( !(apvgainVector_.empty()) ) { return (apvgainVector_[index]->getApvGain(apv, range))/(normVector_[index]); } edm::LogError("SiStripGain::getApvGain") << "ERROR: no gain available. Returning gain = 1." << std::endl; return 1.; }
void SiStripGain::getDetIds | ( | std::vector< uint32_t > & | DetIds_ | ) | const |
ATTENTION: we assume the detIds are the same as those from the first gain.
Definition at line 123 of file SiStripGain.cc.
References apvgain_, and SiStripApvGain::getDetIds().
Referenced by printDebug(), and printSummary().
std::string SiStripGain::getLabelName | ( | const uint32_t | index | ) | const [inline] |
Definition at line 95 of file SiStripGain.h.
References getHLTprescales::index, and recordLabelPair_.
{ return recordLabelPair_[index].second; }
size_t SiStripGain::getNumberOfTags | ( | ) | const [inline] |
Definition at line 87 of file SiStripGain.h.
References apvgainVector_.
{ return apvgainVector_.size(); }
const SiStripApvGain::Range SiStripGain::getRange | ( | const uint32_t & | detID | ) | const |
Definition at line 129 of file SiStripGain.cc.
References apvgain_, and SiStripApvGain::getRange().
Referenced by printDebug(), printSummary(), and jptJetAnalysis::StripSignalOverNoiseCalculator::signalOverNoise().
const SiStripApvGain::Range SiStripGain::getRange | ( | const uint32_t & | detID, |
const uint32_t | index | ||
) | const |
The second parameter allows to specify which gain to retrieve, considering that they are in input order. NOTE that no protection is inside the method (because we want to keep it very light) therefore it is the caller duty to check that the index is in the correct range.
Definition at line 134 of file SiStripGain.cc.
References apvgainVector_, and getHLTprescales::index.
{ return apvgainVector_[index]->getRange(DetId); }
std::string SiStripGain::getRcdName | ( | const uint32_t | index | ) | const [inline] |
Definition at line 91 of file SiStripGain.h.
References getHLTprescales::index, and recordLabelPair_.
{ return recordLabelPair_[index].first; }
float SiStripGain::getStripGain | ( | const uint16_t & | strip, |
const SiStripApvGain::Range & | range, | ||
const uint32_t | index | ||
) | const |
Definition at line 96 of file SiStripGain.cc.
References apvgainVector_, and getStripGain().
{ if( !(apvgainVector_.empty()) ) { return( apvgainVector_[index]->getStripGain(strip, range) ); } edm::LogError("SiStripGain::getStripGain") << "ERROR: no gain available. Returning gain = 1." << std::endl; return 1.; }
float SiStripGain::getStripGain | ( | const uint16_t & | strip, |
const SiStripApvGain::Range & | range | ||
) | const |
Definition at line 87 of file SiStripGain.cc.
References apvgain_, and SiStripApvGain::getStripGain().
Referenced by getStripGain(), and jptJetAnalysis::StripSignalOverNoiseCalculator::signalOverNoise().
{ if( apvgain_ == 0 ) { edm::LogError("SiStripGain::getStripGain") << "ERROR: no gain available. Returning gain = 1." << std::endl; return 1.; } return( apvgain_->getStripGain(strip, range) ); }
double SiStripGain::getTagNorm | ( | const uint32_t | index | ) | const [inline] |
Definition at line 99 of file SiStripGain.h.
References getHLTprescales::index, and normVector_.
{ return normVector_[index]; }
void SiStripGain::multiply | ( | const SiStripApvGain & | apvgain, |
const double & | factor, | ||
const std::pair< std::string, std::string > & | recordLabelPair | ||
) |
Used to input additional gain values that will be multiplied to the first one.
Definition at line 18 of file SiStripGain.cc.
References apvgain_, apvgainVector_, fillNewGain(), normVector_, and recordLabelPair_.
Referenced by SiStripGain(), and SiStripGainESProducerTemplate< TDependentRecord, TInputRecord >::SiStripGainNormalizationFunction().
{ // When inserting the first ApvGain if( apvgain_ == 0 ) { if( (factor != 1) && (factor != 0) ) { fillNewGain( &apvgain, factor ); } else { // If the normalization factor is one, no need to create a new SiStripApvGain apvgain_ = &apvgain; } } else { // There is already an ApvGain inside the SiStripGain. Multiply it by the new one and save the new pointer. fillNewGain( apvgain_, 1., &apvgain, factor ); } recordLabelPair_.push_back(recordLabelPair); apvgainVector_.push_back(&apvgain); normVector_.push_back(factor); }
const SiStripGain& SiStripGain::operator= | ( | const SiStripGain & | ) | [private] |
void SiStripGain::printDebug | ( | std::stringstream & | ss | ) | const |
Definition at line 139 of file SiStripGain.cc.
References cond::rpcobgas::detid, getApvGain(), getDetIds(), and getRange().
{ std::vector<unsigned int> detIds; getDetIds(detIds); std::vector<unsigned int>::const_iterator detid = detIds.begin(); ss << "Number of detids " << detIds.size() << std::endl; for( ; detid != detIds.end(); ++detid ) { SiStripApvGain::Range range = getRange(*detid); int apv=0; for( int it=0; it < range.second - range.first; ++it ) { ss << "detid " << *detid << " \t" << " apv " << apv++ << " \t" << getApvGain(it,range) << " \t" << std::endl; } } }
void SiStripGain::printSummary | ( | std::stringstream & | ss | ) | const |
Definition at line 158 of file SiStripGain.cc.
References SiStripDetSummary::add(), cond::rpcobgas::detid, getApvGain(), getDetIds(), getRange(), and SiStripDetSummary::print().
{ SiStripDetSummary summaryGain; std::vector<unsigned int> detIds; getDetIds(detIds); std::vector<uint32_t>::const_iterator detid = detIds.begin(); for( ; detid != detIds.end(); ++detid ) { SiStripApvGain::Range range = getRange(*detid); for( int it=0; it < range.second - range.first; ++it ) { summaryGain.add(*detid, getApvGain(it, range)); } } ss << "Summary of gain values:" << std::endl; summaryGain.print(ss, true); }
const SiStripApvGain* SiStripGain::apvgain_ [private] |
Definition at line 118 of file SiStripGain.h.
Referenced by fillNewGain(), getApvGain(), getDetIds(), getRange(), getStripGain(), and multiply().
std::auto_ptr<SiStripApvGain> SiStripGain::apvgainAutoPtr_ [private] |
Definition at line 119 of file SiStripGain.h.
Referenced by fillNewGain().
std::vector<const SiStripApvGain *> SiStripGain::apvgainVector_ [private] |
Definition at line 116 of file SiStripGain.h.
Referenced by getApvGain(), getNumberOfTags(), getRange(), getStripGain(), and multiply().
std::vector<double> SiStripGain::normVector_ [private] |
Definition at line 117 of file SiStripGain.h.
Referenced by getApvGain(), getTagNorm(), and multiply().
std::vector<std::pair<std::string, std::string> > SiStripGain::recordLabelPair_ [private] |
Definition at line 120 of file SiStripGain.h.
Referenced by getLabelName(), getRcdName(), and multiply().