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 (unsigned int aliLabel, unsigned int parNum) const override
 returns the label for a given alignable parameter number combination More...
 
unsigned int parameterLabel (Alignable *alignable, unsigned int parNum, const AlignmentAlgorithmBase::EventInfo &eventInfo, const TrajectoryStateOnSurface &tsos) const override
 
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 std::vector< Alignable * > &alis)
 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

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

Definition at line 72 of file MomentumDependentPedeLabeler.h.

typedef AlignableToIdMap::value_type MomentumDependentPedeLabeler::AlignableToIdPair
private

Definition at line 73 of file MomentumDependentPedeLabeler.h.

Definition at line 77 of file MomentumDependentPedeLabeler.h.

typedef AlignableToMomentumRangeMap::value_type MomentumDependentPedeLabeler::AlignableToMomentumRangePair
private

Definition at line 78 of file MomentumDependentPedeLabeler.h.

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

Definition at line 79 of file MomentumDependentPedeLabeler.h.

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

Definition at line 74 of file MomentumDependentPedeLabeler.h.

Definition at line 76 of file MomentumDependentPedeLabeler.h.

Definition at line 75 of file MomentumDependentPedeLabeler.h.

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

Definition at line 80 of file MomentumDependentPedeLabeler.h.

Constructor & Destructor Documentation

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.

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

29  : PedeLabelerBase(alignables, config),
30  theOpenMomentumRange(std::pair<float,float>(0.0, 10000.0)),
32 {
33  std::vector<Alignable*> alis;
34  alis.push_back(alignables.aliTracker_);
35  alis.push_back(alignables.aliMuon_);
36 
37  if (alignables.aliExtras_) {
38  for (const auto& ali: alignables.aliExtras_->components()) {
39  alis.push_back(ali);
40  }
41  }
42 
43  this->buildMomentumDependencyMap(alignables.aliTracker_,
44  alignables.aliMuon_,
45  alignables.aliExtras_,
46  config);
47  this->buildMap(alis);
48  this->buildReverseMap(); // needed already now to 'fill' theMaxNumberOfParameterInstances
49 }
unsigned int buildMap(const std::vector< Alignable * > &alis)
returns size of map
PedeLabelerBase(const TopLevelAlignables &alignables, const edm::ParameterSet &config)
constructor from three Alignables (null pointers allowed )
unsigned int buildReverseMap()
returns size of map
Alignables components() const
unsigned int buildMomentumDependencyMap(AlignableTracker *aliTracker, AlignableMuon *aliMuon, AlignableExtras *extras, const edm::ParameterSet &config)
const MomentumRange theOpenMomentumRange
reverse of the above
MomentumDependentPedeLabeler::~MomentumDependentPedeLabeler ( )
override

non-virtual destructor: do not inherit from this class

Definition at line 53 of file MomentumDependentPedeLabeler.cc.

54 {
55 }

Member Function Documentation

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 245 of file MomentumDependentPedeLabeler.cc.

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

Referenced by maxNumberOfParameterInstances().

246 {
247  const unsigned int aliLabel = this->alignableLabelFromLabel(label);
248  if (aliLabel < theMinLabel) return nullptr; // error already given
249 
250  IdToAlignableMap::const_iterator position = theIdToAlignableMap.find(aliLabel);
251  if (position != theIdToAlignableMap.end()) {
252  return position->second;
253  } else {
254  // error only if not in lasBeamMap:
255  UintUintMap::const_iterator position = theLabelToLasBeamMap.find(aliLabel);
256  if (position == theLabelToLasBeamMap.end()) {
257  edm::LogError("LogicError") << "@SUB=MomentumDependentPedeLabeler::alignableFromLabel"
258  << "Alignable label " << aliLabel << " not in map.";
259  }
260  return nullptr;
261  }
262 }
UintUintMap theLabelToLasBeamMap
labels for las beams
static const unsigned int theMinLabel
static int position[264][3]
Definition: ReadPGInfo.cc:509
unsigned int alignableLabelFromLabel(unsigned int label) const override
alignable label from parameter label (works also for alignable label...)
IdToAlignableMap theIdToAlignableMap
providing unique ID for alignable, space for param IDs
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 59 of file MomentumDependentPedeLabeler.cc.

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

60 {
61  if (!alignable) return 0;
62 
63  AlignableToIdMap::const_iterator position = theAlignableToIdMap.find(alignable);
64  if (position != theAlignableToIdMap.end()) {
65  return position->second;
66  } else {
67  const DetId detId(alignable->id());
68  //throw cms::Exception("LogicError")
69  edm::LogError("LogicError")
70  << "@SUB=MomentumDependentPedeLabeler::alignableLabel" << "Alignable "
71  << typeid(*alignable).name() << " not in map, det/subdet/alignableStructureType = "
72  << detId.det() << "/" << detId.subdetId() << "/" << alignable->alignableObjectId();
73  return 0;
74  }
75 }
align::ID id() const
Return the ID of Alignable, i.e. DetId of &#39;first&#39; component GeomDet(Unit).
Definition: Alignable.h:189
virtual StructureType alignableObjectId() const =0
Return the alignable type identifier.
Definition: DetId.h:18
static int position[264][3]
Definition: ReadPGInfo.cc:509
unsigned int MomentumDependentPedeLabeler::alignableLabelFromLabel ( unsigned int  label) const
overridevirtual

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

Implements PedeLabelerBase.

Definition at line 239 of file MomentumDependentPedeLabeler.cc.

References paramNumFromLabel().

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

240 {
241  return paramLabel - this->paramNumFromLabel(paramLabel);
242 }
unsigned int paramNumFromLabel(unsigned int paramLabel) const override
parameter number, 0 <= .. < theMaxNumParam, belonging to unique parameter label
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 79 of file MomentumDependentPedeLabeler.cc.

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

82 {
83  if (!alignable) return 0;
84 
85  AlignableToIdMap::const_iterator position = theAlignableToIdMap.find(alignable);
86  if (position != theAlignableToIdMap.end()) {
87  AlignableToMomentumRangeMap::const_iterator positionAli = theAlignableToMomentumRangeMap.find(alignable);
88  if (positionAli != theAlignableToMomentumRangeMap.end()) {
89  MomentumRangeParamMap::const_iterator positionParam = (*positionAli).second.find(param);
90  if (positionParam!=(*positionAli).second.end()) {
91  if (instance>=(*positionParam).second.size()) {
92  throw cms::Exception("Alignment") << "@SUB=MomentumDependentPedeLabeler::alignableLabelFromParamAndMomentum"
93  << "iovIdx out of bounds";
94  }
95  return position->second + instance * theParamInstanceOffset;
96  } else {
97  return position->second;
98  }
99  } else {
100  return position->second;
101  }
102  } else {
103  const DetId detId(alignable->id());
104  //throw cms::Exception("LogicError")
105  edm::LogError("LogicError")
106  << "@SUB=MomentumDependentPedeLabeler::alignableLabel" << "Alignable "
107  << typeid(*alignable).name() << " not in map, det/subdet/alignableStructureType = "
108  << detId.det() << "/" << detId.subdetId() << "/" << alignable->alignableObjectId();
109  return 0;
110  }
111 }
align::ID id() const
Return the ID of Alignable, i.e. DetId of &#39;first&#39; component GeomDet(Unit).
Definition: Alignable.h:189
static PFTauRenderPlugin instance
virtual StructureType alignableObjectId() const =0
Return the alignable type identifier.
Definition: DetId.h:18
static const unsigned int theParamInstanceOffset
static int position[264][3]
Definition: ReadPGInfo.cc:509
AlignableToMomentumRangeMap theAlignableToMomentumRangeMap
providing unique ID for alignable, space for param IDs
unsigned int MomentumDependentPedeLabeler::buildMap ( const std::vector< Alignable * > &  alis)
private

returns size of map

Definition at line 399 of file MomentumDependentPedeLabeler.cc.

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

Referenced by MomentumDependentPedeLabeler().

400 {
401  theAlignableToIdMap.clear(); // just in case of re-use...
402 
403  std::vector<Alignable*> allComps;
404 
405  for (const auto& iAli: alis) {
406  if (iAli) {
407  allComps.push_back(iAli);
408  iAli->recursiveComponents(allComps);
409  }
410  }
411 
412  unsigned int id = theMinLabel;
413  for (const auto& iter: allComps) {
414  theAlignableToIdMap.insert(AlignableToIdPair(iter, id));
415  id += theMaxNumParam;
416  }
417 
418  // also care about las beams
419  theLasBeamToLabelMap.clear(); // just in case of re-use...
420  // FIXME: Temporarily hard code values stolen from
421  // https://twiki.cern.ch/twiki/bin/view/CMS/TkLasTrackBasedInterface#Beam_identifier .
422  unsigned int beamIds[] = { 0, 10, 20, 30, 40, 50, 60, 70, // TEC+ R4
423  1, 11, 21, 31, 41, 51, 61, 71, // TEC+ R6
424  100, 110, 120, 130, 140, 150, 160, 170, // TEC- R4
425  101, 111, 121, 131, 141, 151, 161, 171, // TEC- R6
426  200, 210, 220, 230, 240, 250, 260, 270};// AT
427 
428  const size_t nBeams = sizeof(beamIds)/sizeof(beamIds[0]);
429  for (size_t iBeam = 0; iBeam < nBeams; ++iBeam) {
430  //edm::LogInfo("Alignment") << "Las beam " << beamIds[iBeam] << " gets label " << id << ".";
431  theLasBeamToLabelMap[beamIds[iBeam]] = id;
432  id += theMaxNumParam;
433  }
434 
435  if (id > theParamInstanceOffset) { // 'overflow' per instance
436  throw cms::Exception("Alignment") << "@SUB=MomentumDependentPedeLabeler::buildMap: "
437  << "Too many labels per instance (" << id-1 << ") leading to double use, "
438  << "increase PedeLabelerBase::theParamInstanceOffset!\n";
439  }
440  // return combined size
441  return theAlignableToIdMap.size() + theLasBeamToLabelMap.size();
442 }
static const unsigned int theMinLabel
static const unsigned int theMaxNumParam
UintUintMap theLasBeamToLabelMap
reverse map
static const unsigned int theParamInstanceOffset
AlignableToIdMap::value_type AlignableToIdPair
unsigned int MomentumDependentPedeLabeler::buildMomentumDependencyMap ( AlignableTracker aliTracker,
AlignableMuon aliMuon,
AlignableExtras extras,
const edm::ParameterSet config 
)
private

Definition at line 310 of file MomentumDependentPedeLabeler.cc.

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

Referenced by MomentumDependentPedeLabeler().

314 {
316 
317  AlignmentParameterSelector selector(aliTracker, aliMuon, aliExtras);
318 
319  std::vector<char> paramSelDumthe(6, '1');
320 
321  const auto parameterInstancesVPSet =
322  config.getParameter<std::vector<edm::ParameterSet> >("parameterInstances");
323 
324  for (const auto& iter: parameterInstancesVPSet) {
325 
326  const auto tempMomentumRanges = iter.getParameter<std::vector<std::string> >("momentumRanges");
327  if (tempMomentumRanges.empty()) {
328  throw cms::Exception("BadConfig") << "@SUB=MomentumDependentPedeLabeler::buildMomentumDependencyMap\n"
329  << "MomentumRanges empty\n";
330  }
331 
332  MomentumRangeVector MomentumRanges;
333  float lower;
334  float upper;
335  for (unsigned int iMomentum=0;iMomentum<tempMomentumRanges.size();++iMomentum) {
336  std::vector<std::string> tokens = edm::tokenize(tempMomentumRanges[iMomentum], ":");
337 
338  lower = strtod(tokens[0].c_str(), nullptr);
339  upper = strtod(tokens[1].c_str(), nullptr);
340 
341  MomentumRanges.push_back(std::pair<float,float>(lower, upper));
342  }
343 
344  const auto selStrings = iter.getParameter<std::vector<std::string> >("selector");
345  for (const auto& iSel: selStrings) {
346  std::vector<std::string> decompSel(this->decompose(iSel, ','));
347 
348  if (decompSel.size()!=2) {
349  throw cms::Exception("BadConfig") << "@SUB=MomentumDependentPedeLabeler::buildMomentumDependencyMap\n"
350  << iSel <<" should have at least 2 ','-separated parts\n";
351  }
352 
353  std::vector<unsigned int> selParam = this->convertParamSel(decompSel[1]);
354  selector.clear();
355  selector.addSelection(decompSel[0], paramSelDumthe);
356 
357  const std::vector<Alignable*> &alis = selector.selectedAlignables();
358  for (const auto& iAli: alis) {
359 
360  if(iAli->alignmentParameters() == nullptr) {
361  throw cms::Exception("BadConfig")
362  << "@SUB=MomentumDependentPedeLabeler::buildMomentumDependencyMap\n"
363  << "Momentum dependence configured for alignable of type "
364  << objectIdProvider().idToString(iAli->alignableObjectId())
365  << " at (" << iAli->globalPosition().x() << ","
366  << iAli->globalPosition().y() << ","
367  << iAli->globalPosition().z()<< "), "
368  << "but that has no parameters. Please check that all run "
369  << "momentum parameters are also selected for alignment.\n";
370  }
371 
372  for (const auto& iParam: selParam) {
373  AlignableToMomentumRangeMap::const_iterator positionAli = theAlignableToMomentumRangeMap.find(iAli);
374  if (positionAli!=theAlignableToMomentumRangeMap.end()) {
375 
376  AlignmentParameters *AliParams = (*positionAli).first->alignmentParameters();
377  if (static_cast<int>(selParam[selParam.size()-1]) >= AliParams->size()) {
378  throw cms::Exception("BadConfig") << "@SUB=MomentumDependentPedeLabeler::buildMomentumDependencyMap\n"
379  << "mismatch in number of parameters\n";
380  }
381 
382  MomentumRangeParamMap::const_iterator positionParam = (*positionAli).second.find(iParam);
383  if (positionParam!=(*positionAli).second.end()) {
384  throw cms::Exception("BadConfig") << "@SUB=MomentumDependentPedeLabeler::buildMomentumDependencyMap\n"
385  << "Momentum range for parameter specified twice\n";
386  }
387  }
388 
389  theAlignableToMomentumRangeMap[iAli][iParam] = MomentumRanges;
390  }
391  }
392  }
393  }
394 
395  return theAlignableToMomentumRangeMap.size();
396 }
T getParameter(std::string const &) const
std::vector< std::string > decompose(const std::string &s, std::string::value_type delimiter) const
int size(void) const
Get number of parameters.
const char * idToString(align::StructureType type) const
std::vector< MomentumRange > MomentumRangeVector
std::vector< unsigned int > convertParamSel(const std::string &selString) const
AlignableToMomentumRangeMap theAlignableToMomentumRangeMap
providing unique ID for alignable, space for param IDs
const AlignableObjectId & objectIdProvider() const
Return tracker alignable object ID provider derived from the tracker&#39;s geometry.
std::vector< std::string > tokenize(std::string const &input, std::string const &separator)
breaks the input string into tokens, delimited by the separator
unsigned int MomentumDependentPedeLabeler::buildReverseMap ( )
private

returns size of map

Definition at line 445 of file MomentumDependentPedeLabeler.cc.

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

Referenced by MomentumDependentPedeLabeler().

446 {
447  // alignables
448  theIdToAlignableMap.clear(); // just in case of re-use...
449 
450  for (const auto& it: theAlignableToIdMap) {
451  const unsigned int key = it.second;
452  Alignable *ali = it.first;
453  const unsigned int nInstances = this->numberOfParameterInstances(ali, -1);
455  for (unsigned int iInstance=0;iInstance<nInstances;++iInstance) {
456  theIdToAlignableMap[key+iInstance*theParamInstanceOffset] = ali;
457  }
458  }
459 
460  // las beams
461  theLabelToLasBeamMap.clear(); // just in case of re-use...
462 
463  for (const auto& it: theLasBeamToLabelMap) {
464  theLabelToLasBeamMap[it.second] = it.first; //revert key/value
465  }
466 
467  // return combined size
468  return theIdToAlignableMap.size() + theLabelToLasBeamMap.size();
469 }
UintUintMap theLabelToLasBeamMap
labels for las beams
UintUintMap theLasBeamToLabelMap
reverse map
static const unsigned int theParamInstanceOffset
unsigned int numberOfParameterInstances(Alignable *alignable, int param=-1) const override
returns the number of instances for a given parameter
IdToAlignableMap theIdToAlignableMap
providing unique ID for alignable, space for param IDs
std::vector< unsigned int > MomentumDependentPedeLabeler::convertParamSel ( const std::string &  selString) const
private

Definition at line 301 of file MomentumDependentPedeLabeler.cc.

References mps_fire::result.

Referenced by buildMomentumDependencyMap().

302 {
303  std::vector<unsigned int> result;
304  for (std::string::size_type pos = 0; pos < selString.size(); ++pos) {
305  if (selString[pos]=='1') result.push_back(pos);
306  }
307  return result;
308 }
uint16_t size_type
std::vector< std::string > MomentumDependentPedeLabeler::decompose ( const std::string &  s,
std::string::value_type  delimiter 
) const
private

Definition at line 281 of file MomentumDependentPedeLabeler.cc.

References mps_fire::result.

Referenced by buildMomentumDependencyMap().

283 {
284  std::vector<std::string> result;
285 
286  std::string::size_type previousPos = 0;
287  while (true) {
288  const std::string::size_type delimiterPos = s.find(delimiter, previousPos);
289  if (delimiterPos == std::string::npos) {
290  result.push_back(s.substr(previousPos)); // until end
291  break;
292  }
293  result.push_back(s.substr(previousPos, delimiterPos - previousPos));
294  previousPos = delimiterPos + 1; // +1: skip delimiter
295  }
296 
297  return result;
298 }
uint16_t size_type
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 195 of file MomentumDependentPedeLabeler.cc.

References theAlignableToMomentumRangeMap.

196 {
197  AlignableToMomentumRangeMap::const_iterator positionAli = theAlignableToMomentumRangeMap.find(alignable);
198  if (positionAli != theAlignableToMomentumRangeMap.end()) return true;
199  return false;
200 }
AlignableToMomentumRangeMap theAlignableToMomentumRangeMap
providing unique ID for alignable, space for param IDs
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 265 of file MomentumDependentPedeLabeler.cc.

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

Referenced by maxNumberOfParameterInstances().

266 {
267  const unsigned int aliLabel = this->alignableLabelFromLabel(label);
268  if (aliLabel < theMinLabel) return 0; // error already given
269 
270  UintUintMap::const_iterator position = theLabelToLasBeamMap.find(aliLabel);
271  if (position != theLabelToLasBeamMap.end()) {
272  return position->second;
273  } else {
274  edm::LogError("LogicError") << "@SUB=MomentumDependentPedeLabeler::lasBeamIdFromLabel"
275  << "Alignable label " << aliLabel << " not in map.";
276  return 0;
277  }
278 }
UintUintMap theLabelToLasBeamMap
labels for las beams
static const unsigned int theMinLabel
static int position[264][3]
Definition: ReadPGInfo.cc:509
unsigned int alignableLabelFromLabel(unsigned int label) const override
alignable label from parameter label (works also for alignable label...)
unsigned int MomentumDependentPedeLabeler::lasBeamLabel ( unsigned int  lasBeamId) const
overridevirtual

Implements PedeLabelerBase.

Definition at line 114 of file MomentumDependentPedeLabeler.cc.

References position, and theLasBeamToLabelMap.

115 {
116  UintUintMap::const_iterator position = theLasBeamToLabelMap.find(lasBeamId);
117  if (position != theLasBeamToLabelMap.end()) {
118  return position->second;
119  } else {
120  //throw cms::Exception("LogicError")
121  edm::LogError("LogicError") << "@SUB=MomentumDependentPedeLabeler::lasBeamLabel"
122  << "No label for beam Id " << lasBeamId;
123  return 0;
124  }
125 }
UintUintMap theLasBeamToLabelMap
reverse map
static int position[264][3]
Definition: ReadPGInfo.cc:509
unsigned int MomentumDependentPedeLabeler::maxNumberOfParameterInstances ( ) const
inlineoverridevirtual

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

Implements PedeLabelerBase.

Definition at line 58 of file MomentumDependentPedeLabeler.h.

References alignableFromLabel(), alignableLabelFromLabel(), diffTwoXMLs::label, lasBeamIdFromLabel(), paramNumFromLabel(), and theMaxNumberOfParameterInstances.

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 203 of file MomentumDependentPedeLabeler.cc.

References SiStripPI::max, and theAlignableToMomentumRangeMap.

Referenced by buildReverseMap().

204 {
205  AlignableToMomentumRangeMap::const_iterator positionAli = theAlignableToMomentumRangeMap.find(alignable);
206  if (positionAli != theAlignableToMomentumRangeMap.end()) {
207 
208  size_t nMomentums = 1;
209  if (param==-1) {
210  for (const auto& iParam: (*positionAli).second) {
211  nMomentums = std::max(nMomentums, iParam.second.size());
212  }
213  return nMomentums;
214  } else {
215  MomentumRangeParamMap::const_iterator iParam = (*positionAli).second.find(param);
216  if (iParam != (*positionAli).second.end()) {
217  return iParam->second.size();
218  } else {
219  return 1;
220  }
221  }
222  }
223 
224  return 1;
225 }
AlignableToMomentumRangeMap theAlignableToMomentumRangeMap
providing unique ID for alignable, space for param IDs
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 128 of file MomentumDependentPedeLabeler.cc.

References Exception, and PedeLabelerBase::theMaxNumParam.

129 {
130  if (parNum >= theMaxNumParam) {
131  throw cms::Exception("Alignment") << "@SUB=MomentumDependentPedeLabeler::parameterLabel"
132  << "Parameter number " << parNum
133  << " out of range 0 <= num < " << theMaxNumParam;
134  }
135  return aliLabel + parNum;
136 }
static const unsigned int theMaxNumParam
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 139 of file MomentumDependentPedeLabeler.cc.

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

142 {
143  if (!alignable) return 0;
144 
145  if (parNum >= theMaxNumParam) {
146  throw cms::Exception("Alignment") << "@SUB=MomentumDependentPedeLabeler::parameterLabel"
147  << "Parameter number " << parNum
148  << " out of range 0 <= num < " << theMaxNumParam;
149  }
150 
151  AlignableToIdMap::const_iterator position = theAlignableToIdMap.find(alignable);
152  if (position != theAlignableToIdMap.end()) {
153 
154  AlignableToMomentumRangeMap::const_iterator positionAli = theAlignableToMomentumRangeMap.find(alignable);
155  if (positionAli != theAlignableToMomentumRangeMap.end()) {
156 
157  MomentumRangeParamMap::const_iterator positionParam = (*positionAli).second.find(parNum);
158  if (positionParam!=(*positionAli).second.end()) {
159 
160  int offset = 0;
161  float mom = tsos.globalMomentum().mag();
162  const MomentumRangeVector & momentumRanges = (*positionParam).second;
163  for (const auto& iMomentum: momentumRanges) {
164 
165  if (iMomentum.first<=mom && mom<iMomentum.second) {
166  return position->second + offset * theParamInstanceOffset + parNum;
167  }
168  offset++;
169  }
170  const DetId detId(alignable->id());
171  edm::LogError("LogicError")
172  << "@SUB=MomentumDependentPedeLabeler::alignableLabel" << "Alignable "
173  << typeid(*alignable).name() << " not in map, det/subdet/alignableStructureType = "
174  << detId.det() << "/" << detId.subdetId() << "/" << alignable->alignableObjectId();
175  return 0;
176  } else {
177  return position->second + parNum;
178  }
179 
180  } else {
181  return position->second + parNum;
182  }
183  } else {
184  const DetId detId(alignable->id());
185  //throw cms::Exception("LogicError")
186  edm::LogError("LogicError")
187  << "@SUB=MomentumDependentPedeLabeler::alignableLabel" << "Alignable "
188  << typeid(*alignable).name() << " not in map, det/subdet/alignableStructureType = "
189  << detId.det() << "/" << detId.subdetId() << "/" << alignable->alignableObjectId();
190  return 0;
191  }
192 }
align::ID id() const
Return the ID of Alignable, i.e. DetId of &#39;first&#39; component GeomDet(Unit).
Definition: Alignable.h:189
static const unsigned int theMaxNumParam
T mag() const
Definition: PV3DBase.h:67
virtual StructureType alignableObjectId() const =0
Return the alignable type identifier.
Definition: DetId.h:18
static const unsigned int theParamInstanceOffset
std::vector< MomentumRange > MomentumRangeVector
GlobalVector globalMomentum() const
static int position[264][3]
Definition: ReadPGInfo.cc:509
AlignableToMomentumRangeMap theAlignableToMomentumRangeMap
providing unique ID for alignable, space for param IDs
unsigned int MomentumDependentPedeLabeler::paramNumFromLabel ( unsigned int  paramLabel) const
overridevirtual

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

Implements PedeLabelerBase.

Definition at line 228 of file MomentumDependentPedeLabeler.cc.

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

Referenced by alignableLabelFromLabel(), and maxNumberOfParameterInstances().

229 {
230  if (paramLabel < theMinLabel) {
231  edm::LogError("LogicError") << "@SUB=MomentumDependentPedeLabeler::paramNumFromLabel"
232  << "Label " << paramLabel << " should be >= " << theMinLabel;
233  return 0;
234  }
235  return (paramLabel - theMinLabel) % theParamInstanceOffset;
236 }
static const unsigned int theMinLabel
static const unsigned int theParamInstanceOffset

Member Data Documentation

AlignableToIdMap MomentumDependentPedeLabeler::theAlignableToIdMap
private
AlignableToMomentumRangeMap MomentumDependentPedeLabeler::theAlignableToMomentumRangeMap
private

providing unique ID for alignable, space for param IDs

Definition at line 95 of file MomentumDependentPedeLabeler.h.

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

IdToAlignableMap MomentumDependentPedeLabeler::theIdToAlignableMap
private

providing unique ID for alignable, space for param IDs

Definition at line 96 of file MomentumDependentPedeLabeler.h.

Referenced by alignableFromLabel(), and buildReverseMap().

UintUintMap MomentumDependentPedeLabeler::theLabelToLasBeamMap
private

labels for las beams

Definition at line 98 of file MomentumDependentPedeLabeler.h.

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

UintUintMap MomentumDependentPedeLabeler::theLasBeamToLabelMap
private

reverse map

Definition at line 97 of file MomentumDependentPedeLabeler.h.

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

unsigned int MomentumDependentPedeLabeler::theMaxNumberOfParameterInstances
private
const MomentumRange MomentumDependentPedeLabeler::theOpenMomentumRange
private

reverse of the above

Definition at line 99 of file MomentumDependentPedeLabeler.h.