CMS 3D CMS Logo

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

#include <MomentumDependentPedeLabeler.h>

Inheritance diagram for MomentumDependentPedeLabeler:
PedeLabelerBase

Public Member Functions

AlignablealignableFromLabel (unsigned int label) const override
 
unsigned int alignableLabel (Alignable *alignable) const override
 Return 32-bit unique label for alignable, 0 indicates failure. More...
 
unsigned int alignableLabelFromLabel (unsigned int label) const override
 alignable label from parameter label (works also for alignable label...) More...
 
unsigned int alignableLabelFromParamAndInstance (Alignable *alignable, unsigned int param, unsigned int instance) const override
 
bool hasSplitParameters (Alignable *alignable) const override
 returns true if the alignable has parameters that are split into various bins More...
 
unsigned int lasBeamIdFromLabel (unsigned int label) const override
 
unsigned int lasBeamLabel (unsigned int lasBeamId) const override
 
unsigned int maxNumberOfParameterInstances () const override
 returns the maximum number of instances for any parameter of an Alignable* More...
 
 MomentumDependentPedeLabeler (const PedeLabelerBase::TopLevelAlignables &alignables, const edm::ParameterSet &config)
 constructor from three Alignables (null pointers allowed ) More...
 
unsigned int numberOfParameterInstances (Alignable *alignable, int param=-1) const override
 returns the number of instances for a given parameter More...
 
unsigned int parameterLabel (Alignable *alignable, unsigned int parNum, const AlignmentAlgorithmBase::EventInfo &eventInfo, const TrajectoryStateOnSurface &tsos) const override
 
unsigned int parameterLabel (unsigned int aliLabel, unsigned int parNum) const override
 returns the label for a given alignable parameter number combination More...
 
unsigned int paramNumFromLabel (unsigned int paramLabel) const override
 parameter number, 0 <= .. < theMaxNumParam, belonging to unique parameter label More...
 
 ~MomentumDependentPedeLabeler () override
 
- Public Member Functions inherited from PedeLabelerBase
virtual void addCalibrations (const std::vector< IntegratedCalibrationBase * > &iCals)
 tell labeler to treat also integrated calibrations More...
 
const AlignableExtrasalignableExtras () const
 
const AlignableMuonalignableMuon () const
 
const AlignableTrackeralignableTracker () const
 
virtual unsigned int calibrationLabel (const IntegratedCalibrationBase *calib, unsigned int paramNum) const
 label for parameter 'paramNum' (counted from 0) of an integrated calibration More...
 
virtual std::pair< IntegratedCalibrationBase *, unsigned int > calibrationParamFromLabel (unsigned int label) const
 
virtual unsigned int firstFreeLabel () const
 
unsigned int parameterInstanceOffset () const
 offset in labels between consecutive parameter instances of Alignable*s More...
 
 PedeLabelerBase (const TopLevelAlignables &alignables, const edm::ParameterSet &config)
 constructor from three Alignables (null pointers allowed ) More...
 
virtual const RunRangerunRangeFromLabel (unsigned int label) const
 
virtual ~PedeLabelerBase ()
 

Private Types

typedef std::map< Alignable *, unsigned int > AlignableToIdMap
 
typedef AlignableToIdMap::value_type AlignableToIdPair
 
typedef std::map< Alignable *, MomentumRangeParamMapAlignableToMomentumRangeMap
 
typedef AlignableToMomentumRangeMap::value_type AlignableToMomentumRangePair
 
typedef std::map< unsigned int, Alignable * > IdToAlignableMap
 
typedef std::pair< float, float > MomentumRange
 
typedef std::map< unsigned int, MomentumRangeVectorMomentumRangeParamMap
 
typedef std::vector< MomentumRangeMomentumRangeVector
 
typedef std::map< unsigned int, unsigned int > UintUintMap
 

Private Member Functions

unsigned int buildMap (const align::Alignables &)
 returns size of map More...
 
unsigned int buildMomentumDependencyMap (AlignableTracker *aliTracker, AlignableMuon *aliMuon, AlignableExtras *extras, const edm::ParameterSet &config)
 
unsigned int buildReverseMap ()
 returns size of map More...
 
std::vector< unsigned int > convertParamSel (const std::string &selString) const
 
std::vector< std::string > decompose (const std::string &s, std::string::value_type delimiter) const
 

Private Attributes

AlignableToIdMap theAlignableToIdMap
 
AlignableToMomentumRangeMap theAlignableToMomentumRangeMap
 providing unique ID for alignable, space for param IDs More...
 
IdToAlignableMap theIdToAlignableMap
 providing unique ID for alignable, space for param IDs More...
 
UintUintMap theLabelToLasBeamMap
 labels for las beams More...
 
UintUintMap theLasBeamToLabelMap
 reverse map More...
 
unsigned int theMaxNumberOfParameterInstances
 
const MomentumRange theOpenMomentumRange
 reverse of the above More...
 

Additional Inherited Members

- Public Types inherited from PedeLabelerBase
using RunNumber = align::RunNumber
 
using RunRange = align::RunRange
 
using RunRanges = align::RunRanges
 
- Static Public Attributes inherited from PedeLabelerBase
static const unsigned int theMaxNumParam = RigidBodyAlignmentParameters::N_PARAM + 14
 
static const unsigned int theMinLabel = 1
 
static const unsigned int theParamInstanceOffset = 700000
 
- Protected Member Functions inherited from PedeLabelerBase
virtual unsigned int firstNonAlignableLabel () const
 
const AlignableObjectIdobjectIdProvider () const
 Return tracker alignable object ID provider derived from the tracker's geometry. More...
 
- Protected Attributes inherited from PedeLabelerBase
const RunRange theOpenRunRange
 

Detailed Description

provides labels for AlignmentParameters for pede

Author
: Gero Flucke date : September 2007
Date
2011/03/05 20:12:23
Revision
1.1

(last update by

Author
mussgill

)

Definition at line 25 of file MomentumDependentPedeLabeler.h.

Member Typedef Documentation

◆ AlignableToIdMap

typedef std::map<Alignable *, unsigned int> MomentumDependentPedeLabeler::AlignableToIdMap
private

Definition at line 70 of file MomentumDependentPedeLabeler.h.

◆ AlignableToIdPair

typedef AlignableToIdMap::value_type MomentumDependentPedeLabeler::AlignableToIdPair
private

Definition at line 71 of file MomentumDependentPedeLabeler.h.

◆ AlignableToMomentumRangeMap

Definition at line 75 of file MomentumDependentPedeLabeler.h.

◆ AlignableToMomentumRangePair

typedef AlignableToMomentumRangeMap::value_type MomentumDependentPedeLabeler::AlignableToMomentumRangePair
private

Definition at line 76 of file MomentumDependentPedeLabeler.h.

◆ IdToAlignableMap

typedef std::map<unsigned int, Alignable *> MomentumDependentPedeLabeler::IdToAlignableMap
private

Definition at line 77 of file MomentumDependentPedeLabeler.h.

◆ MomentumRange

typedef std::pair<float, float> MomentumDependentPedeLabeler::MomentumRange
private

Definition at line 72 of file MomentumDependentPedeLabeler.h.

◆ MomentumRangeParamMap

Definition at line 74 of file MomentumDependentPedeLabeler.h.

◆ MomentumRangeVector

Definition at line 73 of file MomentumDependentPedeLabeler.h.

◆ UintUintMap

typedef std::map<unsigned int, unsigned int> MomentumDependentPedeLabeler::UintUintMap
private

Definition at line 78 of file MomentumDependentPedeLabeler.h.

Constructor & Destructor Documentation

◆ MomentumDependentPedeLabeler()

MomentumDependentPedeLabeler::MomentumDependentPedeLabeler ( const PedeLabelerBase::TopLevelAlignables alignables,
const edm::ParameterSet config 
)

constructor from three Alignables (null pointers allowed )

Definition at line 27 of file MomentumDependentPedeLabeler.cc.

29  : PedeLabelerBase(alignables, config),
30  theOpenMomentumRange(std::pair<float, float>(0.0, 10000.0)),
32  align::Alignables alis;
33  alis.push_back(alignables.aliTracker_);
34  alis.push_back(alignables.aliMuon_);
35 
36  if (alignables.aliExtras_) {
37  for (const auto &ali : alignables.aliExtras_->components()) {
38  alis.push_back(ali);
39  }
40  }
41 
42  this->buildMomentumDependencyMap(alignables.aliTracker_, alignables.aliMuon_, alignables.aliExtras_, config);
43  this->buildMap(alis);
44  this->buildReverseMap(); // needed already now to 'fill' theMaxNumberOfParameterInstances
45 }

References PedeLabelerBase::TopLevelAlignables::aliExtras_, PedeLabelerBase::TopLevelAlignables::aliMuon_, PedeLabelerBase::TopLevelAlignables::aliTracker_, buildMap(), buildMomentumDependencyMap(), buildReverseMap(), and AlignableExtras::components().

◆ ~MomentumDependentPedeLabeler()

MomentumDependentPedeLabeler::~MomentumDependentPedeLabeler ( )
override

non-virtual destructor: do not inherit from this class

Definition at line 49 of file MomentumDependentPedeLabeler.cc.

49 {}

Member Function Documentation

◆ alignableFromLabel()

Alignable * MomentumDependentPedeLabeler::alignableFromLabel ( unsigned int  label) const
overridevirtual

Alignable from alignable or parameter label, null if no alignable (but error only if not las beam, either!)

Implements PedeLabelerBase.

Definition at line 228 of file MomentumDependentPedeLabeler.cc.

228  {
229  const unsigned int aliLabel = this->alignableLabelFromLabel(label);
230  if (aliLabel < theMinLabel)
231  return nullptr; // error already given
232 
233  IdToAlignableMap::const_iterator position = theIdToAlignableMap.find(aliLabel);
234  if (position != theIdToAlignableMap.end()) {
235  return position->second;
236  } else {
237  // error only if not in lasBeamMap:
238  UintUintMap::const_iterator position = theLabelToLasBeamMap.find(aliLabel);
239  if (position == theLabelToLasBeamMap.end()) {
240  edm::LogError("LogicError") << "@SUB=MomentumDependentPedeLabeler::alignableFromLabel"
241  << "Alignable label " << aliLabel << " not in map.";
242  }
243  return nullptr;
244  }
245 }

References alignableLabelFromLabel(), position, theIdToAlignableMap, theLabelToLasBeamMap, and PedeLabelerBase::theMinLabel.

◆ alignableLabel()

unsigned int MomentumDependentPedeLabeler::alignableLabel ( Alignable alignable) const
overridevirtual

Return 32-bit unique label for alignable, 0 indicates failure.

uniqueId of Alignable, 0 if alignable not known between this ID and the next there is enough 'space' to add parameter numbers 0...nPar-1 to make unique IDs for the labels of active parameters

Implements PedeLabelerBase.

Definition at line 53 of file MomentumDependentPedeLabeler.cc.

53  {
54  if (!alignable)
55  return 0;
56 
57  AlignableToIdMap::const_iterator position = theAlignableToIdMap.find(alignable);
58  if (position != theAlignableToIdMap.end()) {
59  return position->second;
60  } else {
61  const DetId detId(alignable->id());
62  //throw cms::Exception("LogicError")
63  edm::LogError("LogicError") << "@SUB=MomentumDependentPedeLabeler::alignableLabel"
64  << "Alignable " << typeid(*alignable).name()
65  << " not in map, det/subdet/alignableStructureType = " << detId.det() << "/"
66  << detId.subdetId() << "/" << alignable->alignableObjectId();
67  return 0;
68  }
69 }

References Alignable::alignableObjectId(), Alignable::id(), position, and theAlignableToIdMap.

◆ alignableLabelFromLabel()

unsigned int MomentumDependentPedeLabeler::alignableLabelFromLabel ( unsigned int  label) const
overridevirtual

alignable label from parameter label (works also for alignable label...)

Implements PedeLabelerBase.

Definition at line 223 of file MomentumDependentPedeLabeler.cc.

223  {
224  return paramLabel - this->paramNumFromLabel(paramLabel);
225 }

References volumeBasedMagneticField_160812_cfi::paramLabel, and paramNumFromLabel().

Referenced by alignableFromLabel(), and lasBeamIdFromLabel().

◆ alignableLabelFromParamAndInstance()

unsigned int MomentumDependentPedeLabeler::alignableLabelFromParamAndInstance ( Alignable alignable,
unsigned int  param,
unsigned int  instance 
) const
overridevirtual

uniqueId of Alignable for a given parameter index and instance, 0 if alignable not known between this ID and the next there is enough 'space' to add parameter numbers 0...nPar-1 to make unique IDs for the labels of active parameters

Implements PedeLabelerBase.

Definition at line 73 of file MomentumDependentPedeLabeler.cc.

75  {
76  if (!alignable)
77  return 0;
78 
79  AlignableToIdMap::const_iterator position = theAlignableToIdMap.find(alignable);
80  if (position != theAlignableToIdMap.end()) {
81  AlignableToMomentumRangeMap::const_iterator positionAli = theAlignableToMomentumRangeMap.find(alignable);
82  if (positionAli != theAlignableToMomentumRangeMap.end()) {
83  MomentumRangeParamMap::const_iterator positionParam = (*positionAli).second.find(param);
84  if (positionParam != (*positionAli).second.end()) {
85  if (instance >= (*positionParam).second.size()) {
86  throw cms::Exception("Alignment") << "@SUB=MomentumDependentPedeLabeler::alignableLabelFromParamAndMomentum"
87  << "iovIdx out of bounds";
88  }
89  return position->second + instance * theParamInstanceOffset;
90  } else {
91  return position->second;
92  }
93  } else {
94  return position->second;
95  }
96  } else {
97  const DetId detId(alignable->id());
98  //throw cms::Exception("LogicError")
99  edm::LogError("LogicError") << "@SUB=MomentumDependentPedeLabeler::alignableLabel"
100  << "Alignable " << typeid(*alignable).name()
101  << " not in map, det/subdet/alignableStructureType = " << detId.det() << "/"
102  << detId.subdetId() << "/" << alignable->alignableObjectId();
103  return 0;
104  }
105 }

References Alignable::alignableObjectId(), Exception, Alignable::id(), instance, position, theAlignableToIdMap, theAlignableToMomentumRangeMap, and PedeLabelerBase::theParamInstanceOffset.

◆ buildMap()

unsigned int MomentumDependentPedeLabeler::buildMap ( const align::Alignables alis)
private

returns size of map

Definition at line 374 of file MomentumDependentPedeLabeler.cc.

374  {
375  theAlignableToIdMap.clear(); // just in case of re-use...
376 
377  align::Alignables allComps;
378 
379  for (const auto &iAli : alis) {
380  if (iAli) {
381  allComps.push_back(iAli);
382  iAli->recursiveComponents(allComps);
383  }
384  }
385 
386  unsigned int id = theMinLabel;
387  for (const auto &iter : allComps) {
388  theAlignableToIdMap.insert(AlignableToIdPair(iter, id));
389  id += theMaxNumParam;
390  }
391 
392  // also care about las beams
393  theLasBeamToLabelMap.clear(); // just in case of re-use...
394  // FIXME: Temporarily hard code values stolen from
395  // https://twiki.cern.ch/twiki/bin/view/CMS/TkLasTrackBasedInterface#Beam_identifier .
396  unsigned int beamIds[] = {0, 10, 20, 30, 40, 50, 60, 70, // TEC+ R4
397  1, 11, 21, 31, 41, 51, 61, 71, // TEC+ R6
398  100, 110, 120, 130, 140, 150, 160, 170, // TEC- R4
399  101, 111, 121, 131, 141, 151, 161, 171, // TEC- R6
400  200, 210, 220, 230, 240, 250, 260, 270}; // AT
401 
402  const size_t nBeams = sizeof(beamIds) / sizeof(beamIds[0]);
403  for (size_t iBeam = 0; iBeam < nBeams; ++iBeam) {
404  //edm::LogInfo("Alignment") << "Las beam " << beamIds[iBeam] << " gets label " << id << ".";
405  theLasBeamToLabelMap[beamIds[iBeam]] = id;
406  id += theMaxNumParam;
407  }
408 
409  if (id > theParamInstanceOffset) { // 'overflow' per instance
410  throw cms::Exception("Alignment") << "@SUB=MomentumDependentPedeLabeler::buildMap: "
411  << "Too many labels per instance (" << id - 1 << ") leading to double use, "
412  << "increase PedeLabelerBase::theParamInstanceOffset!\n";
413  }
414  // return combined size
415  return theAlignableToIdMap.size() + theLasBeamToLabelMap.size();
416 }

References Exception, triggerObjects_cff::id, theAlignableToIdMap, theLasBeamToLabelMap, PedeLabelerBase::theMaxNumParam, PedeLabelerBase::theMinLabel, and PedeLabelerBase::theParamInstanceOffset.

Referenced by MomentumDependentPedeLabeler().

◆ buildMomentumDependencyMap()

unsigned int MomentumDependentPedeLabeler::buildMomentumDependencyMap ( AlignableTracker aliTracker,
AlignableMuon aliMuon,
AlignableExtras extras,
const edm::ParameterSet config 
)
private

Definition at line 292 of file MomentumDependentPedeLabeler.cc.

295  {
297 
298  AlignmentParameterSelector selector(aliTracker, aliMuon, aliExtras);
299 
300  std::vector<char> paramSelDumthe(6, '1');
301 
302  const auto parameterInstancesVPSet = config.getParameter<std::vector<edm::ParameterSet> >("parameterInstances");
303 
304  for (const auto &iter : parameterInstancesVPSet) {
305  const auto tempMomentumRanges = iter.getParameter<std::vector<std::string> >("momentumRanges");
306  if (tempMomentumRanges.empty()) {
307  throw cms::Exception("BadConfig") << "@SUB=MomentumDependentPedeLabeler::buildMomentumDependencyMap\n"
308  << "MomentumRanges empty\n";
309  }
310 
311  MomentumRangeVector MomentumRanges;
312  float lower;
313  float upper;
314  for (unsigned int iMomentum = 0; iMomentum < tempMomentumRanges.size(); ++iMomentum) {
315  std::vector<std::string> tokens = edm::tokenize(tempMomentumRanges[iMomentum], ":");
316 
317  lower = strtod(tokens[0].c_str(), nullptr);
318  upper = strtod(tokens[1].c_str(), nullptr);
319 
320  MomentumRanges.push_back(std::pair<float, float>(lower, upper));
321  }
322 
323  const auto selStrings = iter.getParameter<std::vector<std::string> >("selector");
324  for (const auto &iSel : selStrings) {
325  std::vector<std::string> decompSel(this->decompose(iSel, ','));
326 
327  if (decompSel.size() != 2) {
328  throw cms::Exception("BadConfig") << "@SUB=MomentumDependentPedeLabeler::buildMomentumDependencyMap\n"
329  << iSel << " should have at least 2 ','-separated parts\n";
330  }
331 
332  std::vector<unsigned int> selParam = this->convertParamSel(decompSel[1]);
333  selector.clear();
334  selector.addSelection(decompSel[0], paramSelDumthe);
335 
336  const auto &alis = selector.selectedAlignables();
337  for (const auto &iAli : alis) {
338  if (iAli->alignmentParameters() == nullptr) {
339  throw cms::Exception("BadConfig")
340  << "@SUB=MomentumDependentPedeLabeler::buildMomentumDependencyMap\n"
341  << "Momentum dependence configured for alignable of type "
342  << objectIdProvider().idToString(iAli->alignableObjectId()) << " at (" << iAli->globalPosition().x()
343  << "," << iAli->globalPosition().y() << "," << iAli->globalPosition().z() << "), "
344  << "but that has no parameters. Please check that all run "
345  << "momentum parameters are also selected for alignment.\n";
346  }
347 
348  for (const auto &iParam : selParam) {
349  AlignableToMomentumRangeMap::const_iterator positionAli = theAlignableToMomentumRangeMap.find(iAli);
350  if (positionAli != theAlignableToMomentumRangeMap.end()) {
351  AlignmentParameters *AliParams = (*positionAli).first->alignmentParameters();
352  if (static_cast<int>(selParam[selParam.size() - 1]) >= AliParams->size()) {
353  throw cms::Exception("BadConfig") << "@SUB=MomentumDependentPedeLabeler::buildMomentumDependencyMap\n"
354  << "mismatch in number of parameters\n";
355  }
356 
357  MomentumRangeParamMap::const_iterator positionParam = (*positionAli).second.find(iParam);
358  if (positionParam != (*positionAli).second.end()) {
359  throw cms::Exception("BadConfig") << "@SUB=MomentumDependentPedeLabeler::buildMomentumDependencyMap\n"
360  << "Momentum range for parameter specified twice\n";
361  }
362  }
363 
364  theAlignableToMomentumRangeMap[iAli][iParam] = MomentumRanges;
365  }
366  }
367  }
368  }
369 
370  return theAlignableToMomentumRangeMap.size();
371 }

References AlignmentParameterSelector::addSelection(), AlignmentParameterSelector::clear(), convertParamSel(), decompose(), Exception, AlignableObjectId::idToString(), PedeLabelerBase::objectIdProvider(), AlignmentParameterSelector::selectedAlignables(), AlignmentParameters::size(), theAlignableToMomentumRangeMap, edm::tokenize(), and pileupCalc::upper.

Referenced by MomentumDependentPedeLabeler().

◆ buildReverseMap()

unsigned int MomentumDependentPedeLabeler::buildReverseMap ( )
private

returns size of map

Definition at line 419 of file MomentumDependentPedeLabeler.cc.

419  {
420  // alignables
421  theIdToAlignableMap.clear(); // just in case of re-use...
422 
423  for (const auto &it : theAlignableToIdMap) {
424  const unsigned int key = it.second;
425  Alignable *ali = it.first;
426  const unsigned int nInstances = this->numberOfParameterInstances(ali, -1);
428  for (unsigned int iInstance = 0; iInstance < nInstances; ++iInstance) {
429  theIdToAlignableMap[key + iInstance * theParamInstanceOffset] = ali;
430  }
431  }
432 
433  // las beams
434  theLabelToLasBeamMap.clear(); // just in case of re-use...
435 
436  for (const auto &it : theLasBeamToLabelMap) {
437  theLabelToLasBeamMap[it.second] = it.first; //revert key/value
438  }
439 
440  // return combined size
441  return theIdToAlignableMap.size() + theLabelToLasBeamMap.size();
442 }

References crabWrapper::key, SiStripPI::max, numberOfParameterInstances(), theAlignableToIdMap, theIdToAlignableMap, theLabelToLasBeamMap, theLasBeamToLabelMap, theMaxNumberOfParameterInstances, and PedeLabelerBase::theParamInstanceOffset.

Referenced by MomentumDependentPedeLabeler().

◆ convertParamSel()

std::vector< unsigned int > MomentumDependentPedeLabeler::convertParamSel ( const std::string &  selString) const
private

Definition at line 283 of file MomentumDependentPedeLabeler.cc.

283  {
284  std::vector<unsigned int> result;
285  for (std::string::size_type pos = 0; pos < selString.size(); ++pos) {
286  if (selString[pos] == '1')
287  result.push_back(pos);
288  }
289  return result;
290 }

References mps_fire::result.

Referenced by buildMomentumDependencyMap().

◆ decompose()

std::vector< std::string > MomentumDependentPedeLabeler::decompose ( const std::string &  s,
std::string::value_type  delimiter 
) const
private

Definition at line 264 of file MomentumDependentPedeLabeler.cc.

265  {
266  std::vector<std::string> result;
267 
268  std::string::size_type previousPos = 0;
269  while (true) {
270  const std::string::size_type delimiterPos = s.find(delimiter, previousPos);
271  if (delimiterPos == std::string::npos) {
272  result.push_back(s.substr(previousPos)); // until end
273  break;
274  }
275  result.push_back(s.substr(previousPos, delimiterPos - previousPos));
276  previousPos = delimiterPos + 1; // +1: skip delimiter
277  }
278 
279  return result;
280 }

References makeHLTPrescaleTable::delimiter, mps_fire::result, and alignCSCRings::s.

Referenced by buildMomentumDependencyMap().

◆ hasSplitParameters()

bool MomentumDependentPedeLabeler::hasSplitParameters ( Alignable alignable) const
overridevirtual

returns true if the alignable has parameters that are split into various bins

Implements PedeLabelerBase.

Definition at line 182 of file MomentumDependentPedeLabeler.cc.

182  {
183  AlignableToMomentumRangeMap::const_iterator positionAli = theAlignableToMomentumRangeMap.find(alignable);
184  if (positionAli != theAlignableToMomentumRangeMap.end())
185  return true;
186  return false;
187 }

References theAlignableToMomentumRangeMap.

◆ lasBeamIdFromLabel()

unsigned int MomentumDependentPedeLabeler::lasBeamIdFromLabel ( unsigned int  label) const
overridevirtual

las beam id from las beam or parameter label zero and error if not a valid las beam label

Implements PedeLabelerBase.

Definition at line 248 of file MomentumDependentPedeLabeler.cc.

248  {
249  const unsigned int aliLabel = this->alignableLabelFromLabel(label);
250  if (aliLabel < theMinLabel)
251  return 0; // error already given
252 
253  UintUintMap::const_iterator position = theLabelToLasBeamMap.find(aliLabel);
254  if (position != theLabelToLasBeamMap.end()) {
255  return position->second;
256  } else {
257  edm::LogError("LogicError") << "@SUB=MomentumDependentPedeLabeler::lasBeamIdFromLabel"
258  << "Alignable label " << aliLabel << " not in map.";
259  return 0;
260  }
261 }

References alignableLabelFromLabel(), position, theLabelToLasBeamMap, and PedeLabelerBase::theMinLabel.

◆ lasBeamLabel()

unsigned int MomentumDependentPedeLabeler::lasBeamLabel ( unsigned int  lasBeamId) const
overridevirtual

Implements PedeLabelerBase.

Definition at line 108 of file MomentumDependentPedeLabeler.cc.

108  {
109  UintUintMap::const_iterator position = theLasBeamToLabelMap.find(lasBeamId);
110  if (position != theLasBeamToLabelMap.end()) {
111  return position->second;
112  } else {
113  //throw cms::Exception("LogicError")
114  edm::LogError("LogicError") << "@SUB=MomentumDependentPedeLabeler::lasBeamLabel"
115  << "No label for beam Id " << lasBeamId;
116  return 0;
117  }
118 }

References position, and theLasBeamToLabelMap.

◆ maxNumberOfParameterInstances()

unsigned int MomentumDependentPedeLabeler::maxNumberOfParameterInstances ( ) const
inlineoverridevirtual

returns the maximum number of instances for any parameter of an Alignable*

Implements PedeLabelerBase.

Definition at line 56 of file MomentumDependentPedeLabeler.h.

◆ numberOfParameterInstances()

unsigned int MomentumDependentPedeLabeler::numberOfParameterInstances ( Alignable alignable,
int  param = -1 
) const
overridevirtual

returns the number of instances for a given parameter

Implements PedeLabelerBase.

Definition at line 190 of file MomentumDependentPedeLabeler.cc.

190  {
191  AlignableToMomentumRangeMap::const_iterator positionAli = theAlignableToMomentumRangeMap.find(alignable);
192  if (positionAli != theAlignableToMomentumRangeMap.end()) {
193  size_t nMomentums = 1;
194  if (param == -1) {
195  for (const auto &iParam : (*positionAli).second) {
196  nMomentums = std::max(nMomentums, iParam.second.size());
197  }
198  return nMomentums;
199  } else {
200  MomentumRangeParamMap::const_iterator iParam = (*positionAli).second.find(param);
201  if (iParam != (*positionAli).second.end()) {
202  return iParam->second.size();
203  } else {
204  return 1;
205  }
206  }
207  }
208 
209  return 1;
210 }

References SiStripPI::max, and theAlignableToMomentumRangeMap.

Referenced by buildReverseMap().

◆ parameterLabel() [1/2]

unsigned int MomentumDependentPedeLabeler::parameterLabel ( Alignable alignable,
unsigned int  parNum,
const AlignmentAlgorithmBase::EventInfo eventInfo,
const TrajectoryStateOnSurface tsos 
) const
overridevirtual

returns the label for a given alignable parameter number combination in case the parameters are split into v

Implements PedeLabelerBase.

Definition at line 130 of file MomentumDependentPedeLabeler.cc.

133  {
134  if (!alignable)
135  return 0;
136 
137  if (parNum >= theMaxNumParam) {
138  throw cms::Exception("Alignment") << "@SUB=MomentumDependentPedeLabeler::parameterLabel"
139  << "Parameter number " << parNum << " out of range 0 <= num < " << theMaxNumParam;
140  }
141 
142  AlignableToIdMap::const_iterator position = theAlignableToIdMap.find(alignable);
143  if (position != theAlignableToIdMap.end()) {
144  AlignableToMomentumRangeMap::const_iterator positionAli = theAlignableToMomentumRangeMap.find(alignable);
145  if (positionAli != theAlignableToMomentumRangeMap.end()) {
146  MomentumRangeParamMap::const_iterator positionParam = (*positionAli).second.find(parNum);
147  if (positionParam != (*positionAli).second.end()) {
148  int offset = 0;
149  float mom = tsos.globalMomentum().mag();
150  const MomentumRangeVector &momentumRanges = (*positionParam).second;
151  for (const auto &iMomentum : momentumRanges) {
152  if (iMomentum.first <= mom && mom < iMomentum.second) {
153  return position->second + offset * theParamInstanceOffset + parNum;
154  }
155  offset++;
156  }
157  const DetId detId(alignable->id());
158  edm::LogError("LogicError") << "@SUB=MomentumDependentPedeLabeler::alignableLabel"
159  << "Alignable " << typeid(*alignable).name()
160  << " not in map, det/subdet/alignableStructureType = " << detId.det() << "/"
161  << detId.subdetId() << "/" << alignable->alignableObjectId();
162  return 0;
163  } else {
164  return position->second + parNum;
165  }
166 
167  } else {
168  return position->second + parNum;
169  }
170  } else {
171  const DetId detId(alignable->id());
172  //throw cms::Exception("LogicError")
173  edm::LogError("LogicError") << "@SUB=MomentumDependentPedeLabeler::alignableLabel"
174  << "Alignable " << typeid(*alignable).name()
175  << " not in map, det/subdet/alignableStructureType = " << detId.det() << "/"
176  << detId.subdetId() << "/" << alignable->alignableObjectId();
177  return 0;
178  }
179 }

References Alignable::alignableObjectId(), Exception, TrajectoryStateOnSurface::globalMomentum(), Alignable::id(), PV3DBase< T, PVType, FrameType >::mag(), hltrates_dqm_sourceclient-live_cfg::offset, position, theAlignableToIdMap, theAlignableToMomentumRangeMap, PedeLabelerBase::theMaxNumParam, and PedeLabelerBase::theParamInstanceOffset.

◆ parameterLabel() [2/2]

unsigned int MomentumDependentPedeLabeler::parameterLabel ( unsigned int  aliLabel,
unsigned int  parNum 
) const
overridevirtual

returns the label for a given alignable parameter number combination

Implements PedeLabelerBase.

Definition at line 121 of file MomentumDependentPedeLabeler.cc.

121  {
122  if (parNum >= theMaxNumParam) {
123  throw cms::Exception("Alignment") << "@SUB=MomentumDependentPedeLabeler::parameterLabel"
124  << "Parameter number " << parNum << " out of range 0 <= num < " << theMaxNumParam;
125  }
126  return aliLabel + parNum;
127 }

References Exception, and PedeLabelerBase::theMaxNumParam.

◆ paramNumFromLabel()

unsigned int MomentumDependentPedeLabeler::paramNumFromLabel ( unsigned int  paramLabel) const
overridevirtual

parameter number, 0 <= .. < theMaxNumParam, belonging to unique parameter label

Implements PedeLabelerBase.

Definition at line 213 of file MomentumDependentPedeLabeler.cc.

213  {
214  if (paramLabel < theMinLabel) {
215  edm::LogError("LogicError") << "@SUB=MomentumDependentPedeLabeler::paramNumFromLabel"
216  << "Label " << paramLabel << " should be >= " << theMinLabel;
217  return 0;
218  }
220 }

References volumeBasedMagneticField_160812_cfi::paramLabel, PedeLabelerBase::theMinLabel, and PedeLabelerBase::theParamInstanceOffset.

Referenced by alignableLabelFromLabel().

Member Data Documentation

◆ theAlignableToIdMap

AlignableToIdMap MomentumDependentPedeLabeler::theAlignableToIdMap
private

◆ theAlignableToMomentumRangeMap

AlignableToMomentumRangeMap MomentumDependentPedeLabeler::theAlignableToMomentumRangeMap
private

providing unique ID for alignable, space for param IDs

Definition at line 94 of file MomentumDependentPedeLabeler.h.

Referenced by alignableLabelFromParamAndInstance(), buildMomentumDependencyMap(), hasSplitParameters(), numberOfParameterInstances(), and parameterLabel().

◆ theIdToAlignableMap

IdToAlignableMap MomentumDependentPedeLabeler::theIdToAlignableMap
private

providing unique ID for alignable, space for param IDs

Definition at line 95 of file MomentumDependentPedeLabeler.h.

Referenced by alignableFromLabel(), and buildReverseMap().

◆ theLabelToLasBeamMap

UintUintMap MomentumDependentPedeLabeler::theLabelToLasBeamMap
private

labels for las beams

Definition at line 97 of file MomentumDependentPedeLabeler.h.

Referenced by alignableFromLabel(), buildReverseMap(), and lasBeamIdFromLabel().

◆ theLasBeamToLabelMap

UintUintMap MomentumDependentPedeLabeler::theLasBeamToLabelMap
private

reverse map

Definition at line 96 of file MomentumDependentPedeLabeler.h.

Referenced by buildMap(), buildReverseMap(), and lasBeamLabel().

◆ theMaxNumberOfParameterInstances

unsigned int MomentumDependentPedeLabeler::theMaxNumberOfParameterInstances
private

Definition at line 99 of file MomentumDependentPedeLabeler.h.

Referenced by buildReverseMap().

◆ theOpenMomentumRange

const MomentumRange MomentumDependentPedeLabeler::theOpenMomentumRange
private

reverse of the above

Definition at line 98 of file MomentumDependentPedeLabeler.h.

MomentumDependentPedeLabeler::decompose
std::vector< std::string > decompose(const std::string &s, std::string::value_type delimiter) const
Definition: MomentumDependentPedeLabeler.cc:264
MomentumDependentPedeLabeler::buildReverseMap
unsigned int buildReverseMap()
returns size of map
Definition: MomentumDependentPedeLabeler.cc:419
makeHLTPrescaleTable.delimiter
delimiter
Definition: makeHLTPrescaleTable.py:181
Alignable
Definition: Alignable.h:27
pos
Definition: PixelAliasList.h:18
MomentumDependentPedeLabeler::numberOfParameterInstances
unsigned int numberOfParameterInstances(Alignable *alignable, int param=-1) const override
returns the number of instances for a given parameter
Definition: MomentumDependentPedeLabeler.cc:190
MomentumDependentPedeLabeler::theLasBeamToLabelMap
UintUintMap theLasBeamToLabelMap
reverse map
Definition: MomentumDependentPedeLabeler.h:96
PedeLabelerBase::TopLevelAlignables::aliTracker_
AlignableTracker * aliTracker_
Definition: PedeLabelerBase.h:43
MomentumDependentPedeLabeler::convertParamSel
std::vector< unsigned int > convertParamSel(const std::string &selString) const
Definition: MomentumDependentPedeLabeler.cc:283
MomentumDependentPedeLabeler::theAlignableToMomentumRangeMap
AlignableToMomentumRangeMap theAlignableToMomentumRangeMap
providing unique ID for alignable, space for param IDs
Definition: MomentumDependentPedeLabeler.h:94
AlignmentParameters
Definition: AlignmentParameters.h:35
edm::tokenize
std::vector< std::string > tokenize(std::string const &input, std::string const &separator)
breaks the input string into tokens, delimited by the separator
Definition: Parse.cc:52
MomentumDependentPedeLabeler::buildMomentumDependencyMap
unsigned int buildMomentumDependencyMap(AlignableTracker *aliTracker, AlignableMuon *aliMuon, AlignableExtras *extras, const edm::ParameterSet &config)
Definition: MomentumDependentPedeLabeler.cc:292
config
Definition: config.py:1
DetId
Definition: DetId.h:17
MomentumDependentPedeLabeler::paramNumFromLabel
unsigned int paramNumFromLabel(unsigned int paramLabel) const override
parameter number, 0 <= .. < theMaxNumParam, belonging to unique parameter label
Definition: MomentumDependentPedeLabeler.cc:213
alignCSCRings.s
s
Definition: alignCSCRings.py:92
trigger::size_type
uint16_t size_type
Definition: TriggerTypeDefs.h:18
AlignableExtras::components
const Alignables & components() const
Definition: AlignableExtras.h:32
Alignable::alignableObjectId
virtual StructureType alignableObjectId() const =0
Return the alignable type identifier.
MomentumDependentPedeLabeler::MomentumRangeVector
std::vector< MomentumRange > MomentumRangeVector
Definition: MomentumDependentPedeLabeler.h:73
MomentumDependentPedeLabeler::theIdToAlignableMap
IdToAlignableMap theIdToAlignableMap
providing unique ID for alignable, space for param IDs
Definition: MomentumDependentPedeLabeler.h:95
PedeLabelerBase::objectIdProvider
const AlignableObjectId & objectIdProvider() const
Return tracker alignable object ID provider derived from the tracker's geometry.
Definition: PedeLabelerBase.h:118
MomentumDependentPedeLabeler::theMaxNumberOfParameterInstances
unsigned int theMaxNumberOfParameterInstances
Definition: MomentumDependentPedeLabeler.h:99
MomentumDependentPedeLabeler::theOpenMomentumRange
const MomentumRange theOpenMomentumRange
reverse of the above
Definition: MomentumDependentPedeLabeler.h:98
MomentumDependentPedeLabeler::theAlignableToIdMap
AlignableToIdMap theAlignableToIdMap
Definition: MomentumDependentPedeLabeler.h:93
SiStripPI::max
Definition: SiStripPayloadInspectorHelper.h:169
Alignable::id
align::ID id() const
Return the ID of Alignable, i.e. DetId of 'first' component GeomDet(Unit).
Definition: Alignable.h:180
PedeLabelerBase::theMaxNumParam
static const unsigned int theMaxNumParam
Definition: PedeLabelerBase.h:108
position
static int position[264][3]
Definition: ReadPGInfo.cc:289
PedeLabelerBase::PedeLabelerBase
PedeLabelerBase(const TopLevelAlignables &alignables, const edm::ParameterSet &config)
constructor from three Alignables (null pointers allowed )
Definition: PedeLabelerBase.cc:28
MomentumDependentPedeLabeler::alignableLabelFromLabel
unsigned int alignableLabelFromLabel(unsigned int label) const override
alignable label from parameter label (works also for alignable label...)
Definition: MomentumDependentPedeLabeler.cc:223
MomentumDependentPedeLabeler::theLabelToLasBeamMap
UintUintMap theLabelToLasBeamMap
labels for las beams
Definition: MomentumDependentPedeLabeler.h:97
MomentumDependentPedeLabeler::AlignableToIdPair
AlignableToIdMap::value_type AlignableToIdPair
Definition: MomentumDependentPedeLabeler.h:71
PedeLabelerBase::TopLevelAlignables::aliMuon_
AlignableMuon * aliMuon_
Definition: PedeLabelerBase.h:44
PedeLabelerBase::TopLevelAlignables::aliExtras_
AlignableExtras * aliExtras_
Definition: PedeLabelerBase.h:45
edm::LogError
Log< level::Error, false > LogError
Definition: MessageLogger.h:123
volumeBasedMagneticField_160812_cfi.paramLabel
paramLabel
Definition: volumeBasedMagneticField_160812_cfi.py:37
instance
static PFTauRenderPlugin instance
Definition: PFTauRenderPlugin.cc:70
PV3DBase::mag
T mag() const
Definition: PV3DBase.h:64
PedeLabelerBase::theParamInstanceOffset
static const unsigned int theParamInstanceOffset
Definition: PedeLabelerBase.h:109
TrajectoryStateOnSurface::globalMomentum
GlobalVector globalMomentum() const
Definition: TrajectoryStateOnSurface.h:66
align::Alignables
std::vector< Alignable * > Alignables
Definition: Utilities.h:31
PedeLabelerBase::theMinLabel
static const unsigned int theMinLabel
Definition: PedeLabelerBase.h:110
triggerObjects_cff.id
id
Definition: triggerObjects_cff.py:29
Exception
Definition: hltDiff.cc:245
AlignmentParameters::size
int size(void) const
Get number of parameters.
Definition: AlignmentParameters.cc:131
pileupCalc.upper
upper
Definition: pileupCalc.py:213
MomentumDependentPedeLabeler::buildMap
unsigned int buildMap(const align::Alignables &)
returns size of map
Definition: MomentumDependentPedeLabeler.cc:374
AlignableObjectId::idToString
const char * idToString(align::StructureType type) const
Definition: AlignableObjectId.cc:273
mps_fire.result
result
Definition: mps_fire.py:311
hltrates_dqm_sourceclient-live_cfg.offset
offset
Definition: hltrates_dqm_sourceclient-live_cfg.py:82
crabWrapper.key
key
Definition: crabWrapper.py:19
label
const char * label
Definition: PFTauDecayModeTools.cc:11
AlignmentParameterSelector
Definition: AlignmentParameterSelector.h:26