CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
List of all members | Public Member Functions | Private Member Functions | Private Attributes
SiStripGain Class Reference

#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. More...
 
std::string getLabelName (const uint32_t index) const
 
size_t getNumberOfTags () const
 
const SiStripApvGain::Range getRange (const uint32_t &detID) const
 
const SiStripApvGain::Range getRange (const uint32_t &detID, const uint32_t index) const
 
std::string getRcdName (const uint32_t index) const
 
float getStripGain (const uint16_t &strip, const SiStripApvGain::Range &range) const
 
float getStripGain (const uint16_t &strip, const SiStripApvGain::Range &range, const uint32_t index) 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. More...
 
void printDebug (std::stringstream &ss) const
 
void printSummary (std::stringstream &ss) const
 
 SiStripGain ()
 
 SiStripGain (const SiStripApvGain &apvgain, const double &factor)
 Kept for compatibility. More...
 
 SiStripGain (const SiStripApvGain &apvgain, const double &factor, const std::pair< std::string, std::string > &recordLabelPair)
 
virtual ~SiStripGain ()
 

Private Member Functions

void fillNewGain (const SiStripApvGain *apvgain, const double &factor, const SiStripApvGain *apvgain2=0, const double &factor2=1.)
 
const SiStripGainoperator= (const SiStripGain &)
 
 SiStripGain (const SiStripGain &)
 

Private Attributes

const SiStripApvGainapvgain_
 
std::auto_ptr< SiStripApvGainapvgainAutoPtr_
 
std::vector< const
SiStripApvGain * > 
apvgainVector_
 
std::vector< double > normVector_
 
std::vector< std::pair
< std::string, std::string > > 
recordLabelPair_
 

Detailed Description

Description: give detector view for the cabling classes

Usage: <usage>

Original Author: gbruno Created: Wed Mar 22 12:24:20 CET 2006

Id:
SiStripGain.h,v 1.8 2010/04/15 14:30:41 demattia Exp

Modifications by M. De Mattia (demat.nosp@m.tia@.nosp@m.pd.in.nosp@m.fn.i.nosp@m.t) 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.

Constructor & Destructor Documentation

SiStripGain::SiStripGain ( )
inline

Definition at line 44 of file SiStripGain.h.

44 {};
virtual SiStripGain::~SiStripGain ( )
inlinevirtual

Definition at line 45 of file SiStripGain.h.

45 {};
SiStripGain::SiStripGain ( const SiStripApvGain apvgain,
const double &  factor 
)
inline

Kept for compatibility.

Definition at line 48 of file SiStripGain.h.

References multiply().

48  :
49  apvgain_(0)
50  {
51  multiply(apvgain, factor, std::make_pair("", ""));
52  }
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.
Definition: SiStripGain.cc:18
const SiStripApvGain * apvgain_
Definition: SiStripGain.h:118
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().

55  :
56  apvgain_(0)
57  {
58  multiply(apvgain, factor, recordLabelPair);
59  }
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.
Definition: SiStripGain.cc:18
const SiStripApvGain * apvgain_
Definition: SiStripGain.h:118
SiStripGain::SiStripGain ( const SiStripGain )
private

Member Function Documentation

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().

42 {
43  SiStripApvGain * newApvGain = new SiStripApvGain;
44  edm::FileInPath fp("CalibTracker/SiStripCommon/data/SiStripDetInfo.dat");
45  SiStripDetInfoFileReader reader(fp.fullPath());
46  const std::map<uint32_t, SiStripDetInfoFileReader::DetInfo> DetInfos = reader.getAllData();
47 
48  // Loop on the apvgain in input and fill the newApvGain with the values/factor.
49  std::vector<uint32_t> detIds;
50  apvgain->getDetIds(detIds);
51  std::vector<uint32_t>::const_iterator it = detIds.begin();
52  for( ; it != detIds.end(); ++it ) {
53 
54  std::map<uint32_t, SiStripDetInfoFileReader::DetInfo>::const_iterator detInfoIt = DetInfos.find(*it);
55  if( detInfoIt != DetInfos.end() ) {
56 
57  std::vector<float> theSiStripVector;
58 
59  // Loop on all the apvs and then on the strips
60  SiStripApvGain::Range range = apvgain->getRange(*it);
61 
62  SiStripApvGain::Range range2;
63  if( apvgain2 != 0 ) {
64  range2 = apvgain2->getRange(*it);
65  }
66 
67  for( int apv = 0; apv < detInfoIt->second.nApvs; ++apv ) {
68  float apvGainValue = apvgain->getApvGain( apv, range )/factor;
69 
70  if( (apvgain2 != 0) && (factor2 != 0.) ) {
71  apvGainValue *= apvgain2->getApvGain( apv, range2 )/factor2;
72  }
73 
74  theSiStripVector.push_back(apvGainValue);
75  }
76  SiStripApvGain::Range inputRange(theSiStripVector.begin(), theSiStripVector.end());
77  if( ! newApvGain->put(*it, inputRange) ) {
78  edm::LogError("SiStripGain") << "detid already exists" << std::endl;
79  }
80  }
81  }
82  apvgain_ = newApvGain;
83  // Deletes the managed object and replaces it with the new one
84  apvgainAutoPtr_.reset(newApvGain);
85 }
inputRange
Get input source.
std::auto_ptr< SiStripApvGain > apvgainAutoPtr_
Definition: SiStripGain.h:119
void getDetIds(std::vector< uint32_t > &DetIds_) const
const SiStripApvGain * apvgain_
Definition: SiStripGain.h:118
bool put(const uint32_t &detID, Range input)
const std::map< uint32_t, DetInfo > & getAllData() const
std::pair< ContainerIterator, ContainerIterator > Range
const Range getRange(const uint32_t &detID) const
float getApvGain(const uint16_t &apv, const Range &range) const
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().

106 {
107  if( apvgain_ == 0 ) {
108  edm::LogError("SiStripGain::getApvGain") << "ERROR: no gain available. Returning gain = 1." << std::endl;
109  return 1.;
110  }
111  return( apvgain_->getApvGain(apv, range) );
112 }
const SiStripApvGain * apvgain_
Definition: SiStripGain.h:118
float getApvGain(const uint16_t &apv, const Range &range) const
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_.

115 {
116  if( !(apvgainVector_.empty()) ) {
117  return (apvgainVector_[index]->getApvGain(apv, range))/(normVector_[index]);
118  }
119  edm::LogError("SiStripGain::getApvGain") << "ERROR: no gain available. Returning gain = 1." << std::endl;
120  return 1.;
121 }
std::vector< const SiStripApvGain * > apvgainVector_
Definition: SiStripGain.h:116
float getApvGain(const uint16_t &apv, const SiStripApvGain::Range &range) const
Definition: SiStripGain.cc:105
std::vector< double > normVector_
Definition: SiStripGain.h:117
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().

124 {
125  // ATTENTION: we assume the detIds are the same as those from the first gain
126  return apvgain_->getDetIds(DetIds_);
127 }
void getDetIds(std::vector< uint32_t > &DetIds_) const
const SiStripApvGain * apvgain_
Definition: SiStripGain.h:118
std::string SiStripGain::getLabelName ( const uint32_t  index) const
inline

Definition at line 95 of file SiStripGain.h.

References getHLTprescales::index, and recordLabelPair_.

96  {
97  return recordLabelPair_[index].second;
98  }
std::vector< std::pair< std::string, std::string > > recordLabelPair_
Definition: SiStripGain.h:120
size_t SiStripGain::getNumberOfTags ( ) const
inline

Definition at line 87 of file SiStripGain.h.

References apvgainVector_.

88  {
89  return apvgainVector_.size();
90  }
std::vector< const SiStripApvGain * > apvgainVector_
Definition: SiStripGain.h:116
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().

130 {
131  return apvgain_->getRange(DetId);
132 }
const SiStripApvGain * apvgain_
Definition: SiStripGain.h:118
Definition: DetId.h:20
const Range getRange(const uint32_t &detID) const
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.

135 {
136  return apvgainVector_[index]->getRange(DetId);
137 }
std::vector< const SiStripApvGain * > apvgainVector_
Definition: SiStripGain.h:116
Definition: DetId.h:20
std::string SiStripGain::getRcdName ( const uint32_t  index) const
inline

Definition at line 91 of file SiStripGain.h.

References getHLTprescales::index, and recordLabelPair_.

92  {
93  return recordLabelPair_[index].first;
94  }
std::vector< std::pair< std::string, std::string > > recordLabelPair_
Definition: SiStripGain.h:120
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().

88 {
89  if( apvgain_ == 0 ) {
90  edm::LogError("SiStripGain::getStripGain") << "ERROR: no gain available. Returning gain = 1." << std::endl;
91  return 1.;
92  }
93  return( apvgain_->getStripGain(strip, range) );
94 }
void strip(std::string &input, const std::string &blanks=" \n\t")
Definition: stringTools.cc:16
const SiStripApvGain * apvgain_
Definition: SiStripGain.h:118
float getStripGain(const uint16_t &strip, const Range &range) const
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().

97 {
98  if( !(apvgainVector_.empty()) ) {
99  return( apvgainVector_[index]->getStripGain(strip, range) );
100  }
101  edm::LogError("SiStripGain::getStripGain") << "ERROR: no gain available. Returning gain = 1." << std::endl;
102  return 1.;
103 }
void strip(std::string &input, const std::string &blanks=" \n\t")
Definition: stringTools.cc:16
std::vector< const SiStripApvGain * > apvgainVector_
Definition: SiStripGain.h:116
float getStripGain(const uint16_t &strip, const SiStripApvGain::Range &range) const
Definition: SiStripGain.cc:87
double SiStripGain::getTagNorm ( const uint32_t  index) const
inline

Definition at line 99 of file SiStripGain.h.

References getHLTprescales::index, and normVector_.

100  {
101  return normVector_[index];
102  }
std::vector< double > normVector_
Definition: SiStripGain.h:117
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().

20 {
21  // When inserting the first ApvGain
22  if( apvgain_ == 0 ) {
23  if( (factor != 1) && (factor != 0) ) {
24  fillNewGain( &apvgain, factor );
25  }
26  else {
27  // If the normalization factor is one, no need to create a new SiStripApvGain
28  apvgain_ = &apvgain;
29  }
30  }
31  else {
32  // There is already an ApvGain inside the SiStripGain. Multiply it by the new one and save the new pointer.
33  fillNewGain( apvgain_, 1., &apvgain, factor );
34  }
35  recordLabelPair_.push_back(recordLabelPair);
36  apvgainVector_.push_back(&apvgain);
37  normVector_.push_back(factor);
38 }
std::vector< const SiStripApvGain * > apvgainVector_
Definition: SiStripGain.h:116
std::vector< double > normVector_
Definition: SiStripGain.h:117
std::vector< std::pair< std::string, std::string > > recordLabelPair_
Definition: SiStripGain.h:120
const SiStripApvGain * apvgain_
Definition: SiStripGain.h:118
void fillNewGain(const SiStripApvGain *apvgain, const double &factor, const SiStripApvGain *apvgain2=0, const double &factor2=1.)
Definition: SiStripGain.cc:40
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().

140 {
141  std::vector<unsigned int> detIds;
142  getDetIds(detIds);
143  std::vector<unsigned int>::const_iterator detid = detIds.begin();
144  ss << "Number of detids " << detIds.size() << std::endl;
145 
146  for( ; detid != detIds.end(); ++detid ) {
147  SiStripApvGain::Range range = getRange(*detid);
148  int apv=0;
149  for( int it=0; it < range.second - range.first; ++it ) {
150  ss << "detid " << *detid << " \t"
151  << " apv " << apv++ << " \t"
152  << getApvGain(it,range) << " \t"
153  << std::endl;
154  }
155  }
156 }
float getApvGain(const uint16_t &apv, const SiStripApvGain::Range &range) const
Definition: SiStripGain.cc:105
std::pair< ContainerIterator, ContainerIterator > Range
void getDetIds(std::vector< uint32_t > &DetIds_) const
ATTENTION: we assume the detIds are the same as those from the first gain.
Definition: SiStripGain.cc:123
const SiStripApvGain::Range getRange(const uint32_t &detID) const
Definition: SiStripGain.cc:129
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().

159 {
160  SiStripDetSummary summaryGain;
161 
162  std::vector<unsigned int> detIds;
163  getDetIds(detIds);
164  std::vector<uint32_t>::const_iterator detid = detIds.begin();
165  for( ; detid != detIds.end(); ++detid ) {
166  SiStripApvGain::Range range = getRange(*detid);
167  for( int it=0; it < range.second - range.first; ++it ) {
168  summaryGain.add(*detid, getApvGain(it, range));
169  }
170  }
171  ss << "Summary of gain values:" << std::endl;
172  summaryGain.print(ss, true);
173 }
float getApvGain(const uint16_t &apv, const SiStripApvGain::Range &range) const
Definition: SiStripGain.cc:105
std::pair< ContainerIterator, ContainerIterator > Range
void getDetIds(std::vector< uint32_t > &DetIds_) const
ATTENTION: we assume the detIds are the same as those from the first gain.
Definition: SiStripGain.cc:123
void print(std::stringstream &ss, const bool mean=true) const
const SiStripApvGain::Range getRange(const uint32_t &detID) const
Definition: SiStripGain.cc:129
void add(const DetId &detid, const float &value)
Used to compute the mean value of the value variable divided by subdetector, layer and mono/stereo...

Member Data Documentation

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().