CMS 3D CMS Logo

List of all members | Public Member Functions | Private Attributes
SiStripDelay Class Reference

#include <SiStripDelay.h>

Public Member Functions

void clear ()
 Empty all the containers. More...
 
void fillNewDelay (const SiStripBaseDelay &baseDelay, const int sumSign, const std::pair< std::string, std::string > &recordLabelPair)
 
const SiStripBaseDelaygetBaseDelay (const uint32_t index) const
 
float getDelay (const uint32_t detId) const
 Return the delay combining all the baseDelays. More...
 
std::string getLabelName (const uint32_t index) const
 
size_t getNumberOfTags () const
 
std::string getRcdName (const uint32_t index) const
 
int getTagSign (const uint32_t index) const
 
bool makeDelay ()
 Builds the boost::unordered_map. More...
 
const SiStripDelayoperator= (const SiStripDelay &)=delete
 
void printDebug (std::stringstream &ss, const TrackerTopology *tTopo) const
 Prints the delays for all the detIds. More...
 
void printSummary (std::stringstream &ss, const TrackerTopology *trackerTopo) const
 
 SiStripDelay ()
 
 SiStripDelay (const SiStripDelay &)=delete
 
 SiStripDelay (const SiStripBaseDelay &baseDelay, const int sumSign, const std::pair< std::string, std::string > &recordLabelPair)
 
virtual ~SiStripDelay ()
 

Private Attributes

std::vector< const SiStripBaseDelay * > baseDelayVector_
 
std::unordered_map< uint32_t, double > delays_
 
std::vector< std::pair< std::string, std::string > > recordLabelPair_
 
std::vector< int > sumSignVector_
 

Detailed Description

Author: M. De Mattia (demat.nosp@m.tia@.nosp@m.pd.in.nosp@m.fn.i.nosp@m.t) 25/10/2010:

Dependent record used to combine the SiStripBaseDelays and provide the reconstruction with a single delay value.
When the object is built the list of values is stored in boost::unordered_map which, for the number of modules in the Tracker (~15000) resulted much faster (more than a factor 2) than a std::map or a lower_bound search in a sorted vector.
The base delays must be filled in together with the sign they will get in the summation: baseDelay1*sign1 + baseDelay2*sign2 + ...
Pointers to the baseDelays are stored and after the fill is complete the method "makeDelay" must be called to build the internal map.
This additional step is required such that we don't build the map anytime a new baseDelay is inserted and we don't make checks anytime the getDelay method is called.
NOTE: Even if the code does not rely on the presence of the same detIds in all the baseDelays, this condition should be fullfilled for consistency. The code checks only that the number of detIds is the same in all baseDelays.

Definition at line 33 of file SiStripDelay.h.

Constructor & Destructor Documentation

◆ SiStripDelay() [1/3]

SiStripDelay::SiStripDelay ( )
inline

Definition at line 35 of file SiStripDelay.h.

35 {};

◆ ~SiStripDelay()

virtual SiStripDelay::~SiStripDelay ( )
inlinevirtual

Definition at line 36 of file SiStripDelay.h.

36 {};

◆ SiStripDelay() [2/3]

SiStripDelay::SiStripDelay ( const SiStripDelay )
delete

◆ SiStripDelay() [3/3]

SiStripDelay::SiStripDelay ( const SiStripBaseDelay baseDelay,
const int  sumSign,
const std::pair< std::string, std::string > &  recordLabelPair 
)
inline

Definition at line 41 of file SiStripDelay.h.

References fillNewDelay().

43  {
44  fillNewDelay(baseDelay, sumSign, recordLabelPair);
45  }
void fillNewDelay(const SiStripBaseDelay &baseDelay, const int sumSign, const std::pair< std::string, std::string > &recordLabelPair)
Definition: SiStripDelay.cc:17

Member Function Documentation

◆ clear()

void SiStripDelay::clear ( void  )

Empty all the containers.

Definition at line 110 of file SiStripDelay.cc.

References baseDelayVector_, delays_, recordLabelPair_, and sumSignVector_.

110  {
111  baseDelayVector_.clear();
112  sumSignVector_.clear();
113  recordLabelPair_.clear();
114  delays_.clear();
115 }
std::vector< std::pair< std::string, std::string > > recordLabelPair_
Definition: SiStripDelay.h:84
std::vector< const SiStripBaseDelay * > baseDelayVector_
Definition: SiStripDelay.h:82
std::vector< int > sumSignVector_
Definition: SiStripDelay.h:83
std::unordered_map< uint32_t, double > delays_
Definition: SiStripDelay.h:85

◆ fillNewDelay()

void SiStripDelay::fillNewDelay ( const SiStripBaseDelay baseDelay,
const int  sumSign,
const std::pair< std::string, std::string > &  recordLabelPair 
)

Definition at line 17 of file SiStripDelay.cc.

References baseDelayVector_, recordLabelPair_, and sumSignVector_.

Referenced by SiStripDelay().

19  {
20  baseDelayVector_.push_back(&baseDelay);
21  sumSignVector_.push_back(sumSign);
22  recordLabelPair_.push_back(recordLabelPair);
23 }
std::vector< std::pair< std::string, std::string > > recordLabelPair_
Definition: SiStripDelay.h:84
std::vector< const SiStripBaseDelay * > baseDelayVector_
Definition: SiStripDelay.h:82
std::vector< int > sumSignVector_
Definition: SiStripDelay.h:83

◆ getBaseDelay()

const SiStripBaseDelay* SiStripDelay::getBaseDelay ( const uint32_t  index) const
inline

The second parameter allows to specify which delay 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 66 of file SiStripDelay.h.

References baseDelayVector_.

66 { return baseDelayVector_[index]; }
std::vector< const SiStripBaseDelay * > baseDelayVector_
Definition: SiStripDelay.h:82

◆ getDelay()

float SiStripDelay::getDelay ( const uint32_t  detId) const

Return the delay combining all the baseDelays.

Definition at line 25 of file SiStripDelay.cc.

References delays_, and hcalRecHitTable_cff::detId.

25  {
26  std::unordered_map<uint32_t, double>::const_iterator it = delays_.find(detId);
27  if (it != delays_.end()) {
28  return it->second;
29  }
30  return 0.;
31 }
std::unordered_map< uint32_t, double > delays_
Definition: SiStripDelay.h:85

◆ getLabelName()

std::string SiStripDelay::getLabelName ( const uint32_t  index) const
inline

Definition at line 70 of file SiStripDelay.h.

References recordLabelPair_.

70 { return recordLabelPair_[index].second; }
std::vector< std::pair< std::string, std::string > > recordLabelPair_
Definition: SiStripDelay.h:84

◆ getNumberOfTags()

size_t SiStripDelay::getNumberOfTags ( ) const
inline

Definition at line 68 of file SiStripDelay.h.

References baseDelayVector_.

68 { return baseDelayVector_.size(); }
std::vector< const SiStripBaseDelay * > baseDelayVector_
Definition: SiStripDelay.h:82

◆ getRcdName()

std::string SiStripDelay::getRcdName ( const uint32_t  index) const
inline

Definition at line 69 of file SiStripDelay.h.

References recordLabelPair_.

69 { return recordLabelPair_[index].first; }
std::vector< std::pair< std::string, std::string > > recordLabelPair_
Definition: SiStripDelay.h:84

◆ getTagSign()

int SiStripDelay::getTagSign ( const uint32_t  index) const
inline

Definition at line 71 of file SiStripDelay.h.

References sumSignVector_.

71 { return sumSignVector_[index]; }
std::vector< int > sumSignVector_
Definition: SiStripDelay.h:83

◆ makeDelay()

bool SiStripDelay::makeDelay ( )

Builds the boost::unordered_map.

Definition at line 33 of file SiStripDelay.cc.

References baseDelayVector_, gather_cfg::cout, delays_, and sumSignVector_.

33  {
34  if (baseDelayVector_.empty()) {
35  return false;
36  }
37  std::vector<const SiStripBaseDelay *>::const_iterator it = baseDelayVector_.begin();
38  // Check for consistent size in all baseDelays
39  if (baseDelayVector_.size() > 1) {
40  for (; it != baseDelayVector_.end() - 1; ++it) {
41  if ((*it)->delaysSize() != (*(it + 1))->delaysSize()) {
42  std::cout << "makeDelay: Error, size of base delays is different!!" << std::endl;
43  return false;
44  }
45  }
46  }
47 
48  // // All checks done, fill the boost::unoredered_map with the first one
49  // (initialization) int sumSignIndex = 0; int sumSign = 0;
50  // std::vector<uint32_t>::const_iterator detIdIt;
51  // for( it = baseDelayVector_.begin(); it != baseDelayVector_.end(); ++it,
52  // ++sumSignIndex ) {
53  // std::vector<uint32_t> detIds;
54  // (*it)->detIds(detIds);
55  // sumSign = sumSignVector_[sumSignIndex];
56  // for( detIdIt = detIds.begin(); detIdIt != detIds.end(); ++detIdIt ) {
57  // // Check if is alread there so that we never rely on the default
58  // initialization boost::unordered_map<uint32_t, double>::iterator
59  // delayIt = delays_.find(*detIdIt); if( delayIt != delays_.end() ) {
60  // std::cout << "second delay = " << (*it)->delay(*detIdIt)*sumSign <<
61  // std::endl; delays_[*detIdIt] += (*it)->delay(*detIdIt)*sumSign;
62  // std::cout
63  // << "Full delay = " << delays_[*detIdIt] << std::endl;
64  // }
65  // else {
66  // std::cout << "first delay = " << (*it)->delay(*detIdIt)*sumSign <<
67  // std::endl; delays_[*detIdIt] = (*it)->delay(*detIdIt)*sumSign;
68  // }
69  // }
70  // }
71 
72  // All checks done, fill the boost::unoredered_map with the first one
73  // (initialization)
74  int sumSignIndex = 0;
75  int sumSign = sumSignVector_[sumSignIndex];
76  it = baseDelayVector_.begin();
77  std::vector<uint32_t> detIds;
78  (*it)->detIds(detIds);
79  std::vector<uint32_t>::const_iterator detIdIt = detIds.begin();
80  for (; detIdIt != detIds.end(); ++detIdIt) {
81  delays_[*detIdIt] = (*it)->delay(*detIdIt) * sumSign;
82  }
83  ++it;
84  ++sumSignIndex;
85  // Fill all the others
86  for (; it != baseDelayVector_.end(); ++it, ++sumSignIndex) {
87  std::vector<uint32_t> detIds;
88  (*it)->detIds(detIds);
89  detIdIt = detIds.begin();
90  sumSign = sumSignVector_[sumSignIndex];
91  for (; detIdIt != detIds.end(); ++detIdIt) {
92  // The same detIds should be in both maps, if not don't rely on the
93  // default initialization
94  std::unordered_map<uint32_t, double>::iterator delayIt = delays_.find(*detIdIt);
95  if (delayIt != delays_.end()) {
96  delays_[*detIdIt] += (*it)->delay(*detIdIt) * sumSign;
97  } else {
98  std::cout << "makeDelay: Warning, detId = " << *detIdIt << " not present, summing to 0..." << std::endl;
99  std::cout << "This means that the two baseDelay tags have different "
100  "detIds. PLEASE, CHECK THAT THIS IS EXPECTED."
101  << std::endl;
102  delays_[*detIdIt] = (*it)->delay(*detIdIt) * sumSign;
103  }
104  }
105  }
106 
107  return true;
108 }
std::vector< const SiStripBaseDelay * > baseDelayVector_
Definition: SiStripDelay.h:82
std::vector< int > sumSignVector_
Definition: SiStripDelay.h:83
std::unordered_map< uint32_t, double > delays_
Definition: SiStripDelay.h:85

◆ operator=()

const SiStripDelay& SiStripDelay::operator= ( const SiStripDelay )
delete

◆ printDebug()

void SiStripDelay::printDebug ( std::stringstream &  ss,
const TrackerTopology tTopo 
) const

Prints the delays for all the detIds.

Definition at line 117 of file SiStripDelay.cc.

References delays_, and contentValuesCheck::ss.

117  {
118  std::unordered_map<uint32_t, double>::const_iterator it = delays_.begin();
119  for (; it != delays_.end(); ++it) {
120  ss << "detId = " << it->first << " delay = " << it->second << std::endl;
121  }
122 }
std::unordered_map< uint32_t, double > delays_
Definition: SiStripDelay.h:85

◆ printSummary()

void SiStripDelay::printSummary ( std::stringstream &  ss,
const TrackerTopology trackerTopo 
) const

Prints the average value of the delays for all layers and wheels in the SiStripTracker

Definition at line 124 of file SiStripDelay.cc.

References delays_, and contentValuesCheck::ss.

124  {
125  SiStripDetSummary summaryDelays{trackerTopo};
126  std::unordered_map<uint32_t, double>::const_iterator it = delays_.begin();
127  for (; it != delays_.end(); ++it) {
128  summaryDelays.add(it->first, it->second);
129  }
130  summaryDelays.print(ss);
131 }
std::unordered_map< uint32_t, double > delays_
Definition: SiStripDelay.h:85

Member Data Documentation

◆ baseDelayVector_

std::vector<const SiStripBaseDelay *> SiStripDelay::baseDelayVector_
private

Definition at line 82 of file SiStripDelay.h.

Referenced by clear(), fillNewDelay(), getBaseDelay(), getNumberOfTags(), and makeDelay().

◆ delays_

std::unordered_map<uint32_t, double> SiStripDelay::delays_
private

Definition at line 85 of file SiStripDelay.h.

Referenced by clear(), getDelay(), makeDelay(), printDebug(), and printSummary().

◆ recordLabelPair_

std::vector<std::pair<std::string, std::string> > SiStripDelay::recordLabelPair_
private

Definition at line 84 of file SiStripDelay.h.

Referenced by clear(), fillNewDelay(), getLabelName(), and getRcdName().

◆ sumSignVector_

std::vector<int> SiStripDelay::sumSignVector_
private

Definition at line 83 of file SiStripDelay.h.

Referenced by clear(), fillNewDelay(), getTagSign(), and makeDelay().