#include <MomentumDependentPedeLabeler.h>
Public Member Functions | |
Alignable * | alignableFromLabel (unsigned int label) const |
unsigned int | alignableLabel (Alignable *alignable) const |
Return 32-bit unique label for alignable, 0 indicates failure. | |
unsigned int | alignableLabelFromLabel (unsigned int label) const |
alignable label from parameter label (works also for alignable label...) | |
unsigned int | alignableLabelFromParamAndInstance (Alignable *alignable, unsigned int param, unsigned int instance) const |
bool | hasSplitParameters (Alignable *alignable) const |
returns true if the alignable has parameters that are split into various bins | |
unsigned int | lasBeamIdFromLabel (unsigned int label) const |
unsigned int | lasBeamLabel (unsigned int lasBeamId) const |
unsigned int | maxNumberOfParameterInstances () const |
returns the maximum number of instances for any parameter of an Alignable* | |
MomentumDependentPedeLabeler (const PedeLabelerBase::TopLevelAlignables &alignables, const edm::ParameterSet &config) | |
constructor from three Alignables (null pointers allowed ) | |
unsigned int | numberOfParameterInstances (Alignable *alignable, int param=-1) const |
returns the number of instances for a given parameter | |
unsigned int | parameterLabel (unsigned int aliLabel, unsigned int parNum) const |
returns the label for a given alignable parameter number combination | |
unsigned int | parameterLabel (Alignable *alignable, unsigned int parNum, const AlignmentAlgorithmBase::EventInfo &eventInfo, const TrajectoryStateOnSurface &tsos) const |
unsigned int | paramNumFromLabel (unsigned int paramLabel) const |
parameter number, 0 <= .. < theMaxNumParam, belonging to unique parameter label | |
~MomentumDependentPedeLabeler () | |
Private Types | |
typedef std::map< Alignable *, unsigned int > | AlignableToIdMap |
typedef AlignableToIdMap::value_type | AlignableToIdPair |
typedef std::map< Alignable *, MomentumRangeParamMap > | AlignableToMomentumRangeMap |
typedef AlignableToMomentumRangeMap::value_type | AlignableToMomentumRangePair |
typedef std::map< unsigned int, Alignable * > | IdToAlignableMap |
typedef std::pair< float, float > | MomentumRange |
typedef std::map< unsigned int, MomentumRangeVector > | MomentumRangeParamMap |
typedef std::vector < MomentumRange > | MomentumRangeVector |
typedef std::map< unsigned int, unsigned int > | UintUintMap |
Private Member Functions | |
unsigned int | buildMap (const std::vector< Alignable * > &alis) |
returns size of map | |
unsigned int | buildMomentumDependencyMap (AlignableTracker *aliTracker, AlignableMuon *aliMuon, AlignableExtras *extras, const edm::ParameterSet &config) |
unsigned int | buildReverseMap () |
returns size of map | |
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 | |
IdToAlignableMap | theIdToAlignableMap |
providing unique ID for alignable, space for param IDs | |
UintUintMap | theLabelToLasBeamMap |
labels for las beams | |
UintUintMap | theLasBeamToLabelMap |
reverse map | |
unsigned int | theMaxNumberOfParameterInstances |
const MomentumRange | theOpenMomentumRange |
reverse of the above |
provides labels for AlignmentParameters for pede
(last update by
)
Definition at line 25 of file MomentumDependentPedeLabeler.h.
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.
typedef std::map<Alignable*, MomentumRangeParamMap> MomentumDependentPedeLabeler::AlignableToMomentumRangeMap [private] |
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.
typedef std::map<unsigned int, MomentumRangeVector> MomentumDependentPedeLabeler::MomentumRangeParamMap [private] |
Definition at line 76 of file MomentumDependentPedeLabeler.h.
typedef std::vector<MomentumRange> MomentumDependentPedeLabeler::MomentumRangeVector [private] |
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.
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().
: PedeLabelerBase(alignables, config), theOpenMomentumRange(std::pair<float,float>(0.0, 10000.0)), theMaxNumberOfParameterInstances(0) { std::vector<Alignable*> alis; alis.push_back(alignables.aliTracker_); alis.push_back(alignables.aliMuon_); if (alignables.aliExtras_) { align::Alignables allExtras = alignables.aliExtras_->components(); for ( std::vector<Alignable*>::iterator it = allExtras.begin(); it != allExtras.end(); ++it ) { alis.push_back(*it); } } this->buildMomentumDependencyMap(alignables.aliTracker_, alignables.aliMuon_, alignables.aliExtras_, config); this->buildMap(alis); this->buildReverseMap(); // needed already now to 'fill' theMaxNumberOfParameterInstances }
MomentumDependentPedeLabeler::~MomentumDependentPedeLabeler | ( | ) |
non-virtual destructor: do not inherit from this class
Definition at line 54 of file MomentumDependentPedeLabeler.cc.
{ }
Alignable * MomentumDependentPedeLabeler::alignableFromLabel | ( | unsigned int | label | ) | const [virtual] |
Alignable from alignable or parameter label, null if no alignable (but error only if not las beam, either!)
Implements PedeLabelerBase.
Definition at line 250 of file MomentumDependentPedeLabeler.cc.
References alignableLabelFromLabel(), position, theIdToAlignableMap, theLabelToLasBeamMap, and PedeLabelerBase::theMinLabel.
{ const unsigned int aliLabel = this->alignableLabelFromLabel(label); if (aliLabel < theMinLabel) return 0; // error already given if (theIdToAlignableMap.empty()) const_cast<MomentumDependentPedeLabeler*>(this)->buildReverseMap(); IdToAlignableMap::const_iterator position = theIdToAlignableMap.find(aliLabel); if (position != theIdToAlignableMap.end()) { return position->second; } else { // error only if not in lasBeamMap: UintUintMap::const_iterator position = theLabelToLasBeamMap.find(aliLabel); if (position == theLabelToLasBeamMap.end()) { edm::LogError("LogicError") << "@SUB=MomentumDependentPedeLabeler::alignableFromLabel" << "Alignable label " << aliLabel << " not in map."; } return 0; } }
unsigned int MomentumDependentPedeLabeler::alignableLabel | ( | Alignable * | alignable | ) | const [virtual] |
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 60 of file MomentumDependentPedeLabeler.cc.
References Alignable::alignableObjectId(), Alignable::id(), position, and theAlignableToIdMap.
{ if (!alignable) return 0; AlignableToIdMap::const_iterator position = theAlignableToIdMap.find(alignable); if (position != theAlignableToIdMap.end()) { return position->second; } else { const DetId detId(alignable->id()); //throw cms::Exception("LogicError") edm::LogError("LogicError") << "@SUB=MomentumDependentPedeLabeler::alignableLabel" << "Alignable " << typeid(*alignable).name() << " not in map, det/subdet/alignableStructureType = " << detId.det() << "/" << detId.subdetId() << "/" << alignable->alignableObjectId(); return 0; } }
unsigned int MomentumDependentPedeLabeler::alignableLabelFromLabel | ( | unsigned int | label | ) | const [virtual] |
alignable label from parameter label (works also for alignable label...)
Implements PedeLabelerBase.
Definition at line 244 of file MomentumDependentPedeLabeler.cc.
References paramNumFromLabel().
Referenced by alignableFromLabel(), and lasBeamIdFromLabel().
{ return paramLabel - this->paramNumFromLabel(paramLabel); }
unsigned int MomentumDependentPedeLabeler::alignableLabelFromParamAndInstance | ( | Alignable * | alignable, |
unsigned int | param, | ||
unsigned int | instance | ||
) | const [virtual] |
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 80 of file MomentumDependentPedeLabeler.cc.
References Alignable::alignableObjectId(), Exception, Alignable::id(), position, theAlignableToIdMap, theAlignableToMomentumRangeMap, and PedeLabelerBase::theParamInstanceOffset.
{ if (!alignable) return 0; AlignableToIdMap::const_iterator position = theAlignableToIdMap.find(alignable); if (position != theAlignableToIdMap.end()) { AlignableToMomentumRangeMap::const_iterator positionAli = theAlignableToMomentumRangeMap.find(alignable); if (positionAli != theAlignableToMomentumRangeMap.end()) { MomentumRangeParamMap::const_iterator positionParam = (*positionAli).second.find(param); if (positionParam!=(*positionAli).second.end()) { if (instance>=(*positionParam).second.size()) { throw cms::Exception("Alignment") << "@SUB=MomentumDependentPedeLabeler::alignableLabelFromParamAndMomentum" << "iovIdx out of bounds"; } return position->second + instance * theParamInstanceOffset; } else { return position->second; } } else { return position->second; } } else { const DetId detId(alignable->id()); //throw cms::Exception("LogicError") edm::LogError("LogicError") << "@SUB=MomentumDependentPedeLabeler::alignableLabel" << "Alignable " << typeid(*alignable).name() << " not in map, det/subdet/alignableStructureType = " << detId.det() << "/" << detId.subdetId() << "/" << alignable->alignableObjectId(); return 0; } }
unsigned int MomentumDependentPedeLabeler::buildMap | ( | const std::vector< Alignable * > & | alis | ) | [private] |
returns size of map
Definition at line 412 of file MomentumDependentPedeLabeler.cc.
References Exception, theAlignableToIdMap, theLasBeamToLabelMap, PedeLabelerBase::theMaxNumParam, PedeLabelerBase::theMinLabel, and PedeLabelerBase::theParamInstanceOffset.
Referenced by MomentumDependentPedeLabeler().
{ theAlignableToIdMap.clear(); // just in case of re-use... std::vector<Alignable*> allComps; for (std::vector<Alignable*>::const_iterator iAli = alis.begin(); iAli != alis.end(); ++iAli) { if (*iAli) { allComps.push_back(*iAli); (*iAli)->recursiveComponents(allComps); } } unsigned int id = theMinLabel; for (std::vector<Alignable*>::const_iterator iter = allComps.begin(); iter != allComps.end(); ++iter) { theAlignableToIdMap.insert(AlignableToIdPair(*iter, id)); id += theMaxNumParam; } // also care about las beams theLasBeamToLabelMap.clear(); // just in case of re-use... // FIXME: Temporarily hard code values stolen from // https://twiki.cern.ch/twiki/bin/view/CMS/TkLasTrackBasedInterface#Beam_identifier . unsigned int beamIds[] = { 0, 10, 20, 30, 40, 50, 60, 70, // TEC+ R4 1, 11, 21, 31, 41, 51, 61, 71, // TEC+ R6 100, 110, 120, 130, 140, 150, 160, 170, // TEC- R4 101, 111, 121, 131, 141, 151, 161, 171, // TEC- R6 200, 210, 220, 230, 240, 250, 260, 270};// AT const size_t nBeams = sizeof(beamIds)/sizeof(beamIds[0]); for (size_t iBeam = 0; iBeam < nBeams; ++iBeam) { //edm::LogInfo("Alignment") << "Las beam " << beamIds[iBeam] << " gets label " << id << "."; theLasBeamToLabelMap[beamIds[iBeam]] = id; id += theMaxNumParam; } if (id > theParamInstanceOffset) { // 'overflow' per instance throw cms::Exception("Alignment") << "@SUB=MomentumDependentPedeLabeler::buildMap: " << "Too many labels per instance (" << id-1 << ") leading to double use, " << "increase PedeLabelerBase::theParamInstanceOffset!\n"; } // return combined size return theAlignableToIdMap.size() + theLasBeamToLabelMap.size(); }
unsigned int MomentumDependentPedeLabeler::buildMomentumDependencyMap | ( | AlignableTracker * | aliTracker, |
AlignableMuon * | aliMuon, | ||
AlignableExtras * | extras, | ||
const edm::ParameterSet & | config | ||
) | [private] |
Definition at line 317 of file MomentumDependentPedeLabeler.cc.
References AlignmentParameterSelector::addSelection(), AlignmentParameterSelector::clear(), convertParamSel(), decompose(), Exception, edm::ParameterSet::getParameter(), AlignableObjectId::idToString(), NULL, AlignmentParameterSelector::selectedAlignables(), AlignmentParameters::size(), theAlignableToMomentumRangeMap, edm::tokenize(), and pileupCalc::upper.
Referenced by MomentumDependentPedeLabeler().
{ theAlignableToMomentumRangeMap.clear(); AlignmentParameterSelector selector(aliTracker, aliMuon, aliExtras); std::vector<char> paramSelDumthe(6, '1'); const std::vector<edm::ParameterSet> parameterInstancesVPSet = config.getParameter<std::vector<edm::ParameterSet> >("parameterInstances"); for (std::vector<edm::ParameterSet>::const_iterator iter = parameterInstancesVPSet.begin(); iter != parameterInstancesVPSet.end(); ++iter) { const std::vector<std::string> tempMomentumRanges = (*iter).getParameter<std::vector<std::string> >("momentumRanges"); if (tempMomentumRanges.size()==0) { throw cms::Exception("BadConfig") << "@SUB=MomentumDependentPedeLabeler::buildMomentumDependencyMap\n" << "MomentumRanges empty\n"; } MomentumRangeVector MomentumRanges; float lower; float upper; for (unsigned int iMomentum=0;iMomentum<tempMomentumRanges.size();++iMomentum) { std::vector<std::string> tokens = edm::tokenize(tempMomentumRanges[iMomentum], ":"); lower = strtod(tokens[0].c_str(), 0); upper = strtod(tokens[1].c_str(), 0); MomentumRanges.push_back(std::pair<float,float>(lower, upper)); } const std::vector<std::string> selStrings = (*iter).getParameter<std::vector<std::string> >("selector"); for (std::vector<std::string>::const_iterator iSel = selStrings.begin(); iSel != selStrings.end(); ++iSel) { std::vector<std::string> decompSel(this->decompose(*iSel, ',')); if (decompSel.size()!=2) { throw cms::Exception("BadConfig") << "@SUB=MomentumDependentPedeLabeler::buildMomentumDependencyMap\n" << *iSel <<" should have at least 2 ','-separated parts\n"; } std::vector<unsigned int> selParam = this->convertParamSel(decompSel[1]); selector.clear(); selector.addSelection(decompSel[0], paramSelDumthe); const std::vector<Alignable*> &alis = selector.selectedAlignables(); for (std::vector<Alignable*>::const_iterator iAli = alis.begin(); iAli != alis.end(); ++iAli) { if((*iAli)->alignmentParameters() == NULL) { throw cms::Exception("BadConfig") << "@SUB=MomentumDependentPedeLabeler::buildMomentumDependencyMap\n" << "Momentum dependence configured for alignable of type " << AlignableObjectId::idToString((*iAli)->alignableObjectId()) << " at (" << (*iAli)->globalPosition().x() << ","<< (*iAli)->globalPosition().y() << "," << (*iAli)->globalPosition().z()<< "), " << "but that has no parameters. Please check that all run " << "momentum parameters are also selected for alignment.\n"; } for (std::vector<unsigned int>::const_iterator iParam = selParam.begin(); iParam != selParam.end(); ++iParam) { AlignableToMomentumRangeMap::const_iterator positionAli = theAlignableToMomentumRangeMap.find(*iAli); if (positionAli!=theAlignableToMomentumRangeMap.end()) { AlignmentParameters *AliParams = (*positionAli).first->alignmentParameters(); if (static_cast<int>(selParam[selParam.size()-1]) >= AliParams->size()) { throw cms::Exception("BadConfig") << "@SUB=MomentumDependentPedeLabeler::buildMomentumDependencyMap\n" << "mismatch in number of parameters\n"; } MomentumRangeParamMap::const_iterator positionParam = (*positionAli).second.find(*iParam); if (positionParam!=(*positionAli).second.end()) { throw cms::Exception("BadConfig") << "@SUB=MomentumDependentPedeLabeler::buildMomentumDependencyMap\n" << "Momentum range for parameter specified twice\n"; } } theAlignableToMomentumRangeMap[*iAli][*iParam] = MomentumRanges; } } } } return theAlignableToMomentumRangeMap.size(); }
unsigned int MomentumDependentPedeLabeler::buildReverseMap | ( | ) | [private] |
returns size of map
Definition at line 459 of file MomentumDependentPedeLabeler.cc.
References combine::key, max(), numberOfParameterInstances(), theAlignableToIdMap, theIdToAlignableMap, theLabelToLasBeamMap, theLasBeamToLabelMap, theMaxNumberOfParameterInstances, and PedeLabelerBase::theParamInstanceOffset.
Referenced by MomentumDependentPedeLabeler().
{ // alignables theIdToAlignableMap.clear(); // just in case of re-use... for (AlignableToIdMap::iterator it = theAlignableToIdMap.begin(); it != theAlignableToIdMap.end(); ++it) { const unsigned int key = (*it).second; Alignable *ali = (*it).first; const unsigned int nInstances = this->numberOfParameterInstances(ali, -1); theMaxNumberOfParameterInstances = std::max(nInstances, theMaxNumberOfParameterInstances); for (unsigned int iInstance=0;iInstance<nInstances;++iInstance) { theIdToAlignableMap[key+iInstance*theParamInstanceOffset] = ali; } } // las beams theLabelToLasBeamMap.clear(); // just in case of re-use... for (UintUintMap::const_iterator it = theLasBeamToLabelMap.begin(); it != theLasBeamToLabelMap.end(); ++it) { theLabelToLasBeamMap[it->second] = it->first; //revert key/value } // return combined size return theIdToAlignableMap.size() + theLabelToLasBeamMap.size(); }
std::vector< unsigned int > MomentumDependentPedeLabeler::convertParamSel | ( | const std::string & | selString | ) | const [private] |
Definition at line 308 of file MomentumDependentPedeLabeler.cc.
References pos, and query::result.
Referenced by buildMomentumDependencyMap().
std::vector< std::string > MomentumDependentPedeLabeler::decompose | ( | const std::string & | s, |
std::string::value_type | delimiter | ||
) | const [private] |
Definition at line 288 of file MomentumDependentPedeLabeler.cc.
References query::result.
Referenced by buildMomentumDependencyMap().
{ std::vector<std::string> result; std::string::size_type previousPos = 0; while (true) { const std::string::size_type delimiterPos = s.find(delimiter, previousPos); if (delimiterPos == std::string::npos) { result.push_back(s.substr(previousPos)); // until end break; } result.push_back(s.substr(previousPos, delimiterPos - previousPos)); previousPos = delimiterPos + 1; // +1: skip delimiter } return result; }
bool MomentumDependentPedeLabeler::hasSplitParameters | ( | Alignable * | alignable | ) | const [virtual] |
returns true if the alignable has parameters that are split into various bins
Implements PedeLabelerBase.
Definition at line 198 of file MomentumDependentPedeLabeler.cc.
References theAlignableToMomentumRangeMap.
{ AlignableToMomentumRangeMap::const_iterator positionAli = theAlignableToMomentumRangeMap.find(alignable); if (positionAli != theAlignableToMomentumRangeMap.end()) return true; return false; }
unsigned int MomentumDependentPedeLabeler::lasBeamIdFromLabel | ( | unsigned int | label | ) | const [virtual] |
las beam id from las beam or parameter label zero and error if not a valid las beam label
Implements PedeLabelerBase.
Definition at line 271 of file MomentumDependentPedeLabeler.cc.
References alignableLabelFromLabel(), position, theLabelToLasBeamMap, and PedeLabelerBase::theMinLabel.
{ const unsigned int aliLabel = this->alignableLabelFromLabel(label); if (aliLabel < theMinLabel) return 0; // error already given if (theLabelToLasBeamMap.empty()) const_cast<MomentumDependentPedeLabeler*>(this)->buildReverseMap(); UintUintMap::const_iterator position = theLabelToLasBeamMap.find(aliLabel); if (position != theLabelToLasBeamMap.end()) { return position->second; } else { edm::LogError("LogicError") << "@SUB=MomentumDependentPedeLabeler::lasBeamIdFromLabel" << "Alignable label " << aliLabel << " not in map."; return 0; } }
unsigned int MomentumDependentPedeLabeler::lasBeamLabel | ( | unsigned int | lasBeamId | ) | const [virtual] |
Implements PedeLabelerBase.
Definition at line 115 of file MomentumDependentPedeLabeler.cc.
References position, and theLasBeamToLabelMap.
{ UintUintMap::const_iterator position = theLasBeamToLabelMap.find(lasBeamId); if (position != theLasBeamToLabelMap.end()) { return position->second; } else { //throw cms::Exception("LogicError") edm::LogError("LogicError") << "@SUB=MomentumDependentPedeLabeler::lasBeamLabel" << "No label for beam Id " << lasBeamId; return 0; } }
unsigned int MomentumDependentPedeLabeler::maxNumberOfParameterInstances | ( | ) | const [inline, virtual] |
returns the maximum number of instances for any parameter of an Alignable*
Implements PedeLabelerBase.
Definition at line 58 of file MomentumDependentPedeLabeler.h.
References theMaxNumberOfParameterInstances.
{ return theMaxNumberOfParameterInstances; }
unsigned int MomentumDependentPedeLabeler::numberOfParameterInstances | ( | Alignable * | alignable, |
int | param = -1 |
||
) | const [virtual] |
returns the number of instances for a given parameter
Implements PedeLabelerBase.
Definition at line 206 of file MomentumDependentPedeLabeler.cc.
References max(), and theAlignableToMomentumRangeMap.
Referenced by buildReverseMap().
{ AlignableToMomentumRangeMap::const_iterator positionAli = theAlignableToMomentumRangeMap.find(alignable); if (positionAli != theAlignableToMomentumRangeMap.end()) { size_t nMomentums = 1; if (param==-1) { for (MomentumRangeParamMap::const_iterator iParam = (*positionAli).second.begin(); iParam != (*positionAli).second.end(); ++iParam) { nMomentums = std::max(nMomentums, iParam->second.size()); } return nMomentums; } else { MomentumRangeParamMap::const_iterator iParam = (*positionAli).second.find(param); if (iParam != (*positionAli).second.end()) { return iParam->second.size(); } else { return 1; } } } return 1; }
unsigned int MomentumDependentPedeLabeler::parameterLabel | ( | unsigned int | aliLabel, |
unsigned int | parNum | ||
) | const [virtual] |
returns the label for a given alignable parameter number combination
Implements PedeLabelerBase.
Definition at line 129 of file MomentumDependentPedeLabeler.cc.
References Exception, and PedeLabelerBase::theMaxNumParam.
{ if (parNum >= theMaxNumParam) { throw cms::Exception("Alignment") << "@SUB=MomentumDependentPedeLabeler::parameterLabel" << "Parameter number " << parNum << " out of range 0 <= num < " << theMaxNumParam; } return aliLabel + parNum; }
unsigned int MomentumDependentPedeLabeler::parameterLabel | ( | Alignable * | alignable, |
unsigned int | parNum, | ||
const AlignmentAlgorithmBase::EventInfo & | eventInfo, | ||
const TrajectoryStateOnSurface & | tsos | ||
) | const [virtual] |
returns the label for a given alignable parameter number combination in case the parameters are split into v
Implements PedeLabelerBase.
Definition at line 140 of file MomentumDependentPedeLabeler.cc.
References Alignable::alignableObjectId(), Exception, TrajectoryStateOnSurface::globalMomentum(), Alignable::id(), PV3DBase< T, PVType, FrameType >::mag(), evf::evtn::offset(), position, edm::second(), theAlignableToIdMap, theAlignableToMomentumRangeMap, PedeLabelerBase::theMaxNumParam, and PedeLabelerBase::theParamInstanceOffset.
{ if (!alignable) return 0; if (parNum >= theMaxNumParam) { throw cms::Exception("Alignment") << "@SUB=MomentumDependentPedeLabeler::parameterLabel" << "Parameter number " << parNum << " out of range 0 <= num < " << theMaxNumParam; } AlignableToIdMap::const_iterator position = theAlignableToIdMap.find(alignable); if (position != theAlignableToIdMap.end()) { AlignableToMomentumRangeMap::const_iterator positionAli = theAlignableToMomentumRangeMap.find(alignable); if (positionAli != theAlignableToMomentumRangeMap.end()) { MomentumRangeParamMap::const_iterator positionParam = (*positionAli).second.find(parNum); if (positionParam!=(*positionAli).second.end()) { int offset = 0; float mom = tsos.globalMomentum().mag(); const MomentumRangeVector & momentumRanges = (*positionParam).second; for (MomentumRangeVector::const_iterator iMomentum = momentumRanges.begin(); iMomentum != momentumRanges.end(); ++iMomentum) { if (iMomentum->first<=mom && mom<iMomentum->second) { return position->second + offset * theParamInstanceOffset + parNum; } offset++; } const DetId detId(alignable->id()); edm::LogError("LogicError") << "@SUB=MomentumDependentPedeLabeler::alignableLabel" << "Alignable " << typeid(*alignable).name() << " not in map, det/subdet/alignableStructureType = " << detId.det() << "/" << detId.subdetId() << "/" << alignable->alignableObjectId(); return 0; } else { return position->second + parNum; } } else { return position->second + parNum; } } else { const DetId detId(alignable->id()); //throw cms::Exception("LogicError") edm::LogError("LogicError") << "@SUB=MomentumDependentPedeLabeler::alignableLabel" << "Alignable " << typeid(*alignable).name() << " not in map, det/subdet/alignableStructureType = " << detId.det() << "/" << detId.subdetId() << "/" << alignable->alignableObjectId(); return 0; } }
unsigned int MomentumDependentPedeLabeler::paramNumFromLabel | ( | unsigned int | paramLabel | ) | const [virtual] |
parameter number, 0 <= .. < theMaxNumParam, belonging to unique parameter label
Implements PedeLabelerBase.
Definition at line 233 of file MomentumDependentPedeLabeler.cc.
References PedeLabelerBase::theMinLabel, and PedeLabelerBase::theParamInstanceOffset.
Referenced by alignableLabelFromLabel().
{ if (paramLabel < theMinLabel) { edm::LogError("LogicError") << "@SUB=MomentumDependentPedeLabeler::paramNumFromLabel" << "Label " << paramLabel << " should be >= " << theMinLabel; return 0; } return (paramLabel - theMinLabel) % theParamInstanceOffset; }
Definition at line 94 of file MomentumDependentPedeLabeler.h.
Referenced by alignableLabel(), alignableLabelFromParamAndInstance(), buildMap(), buildReverseMap(), and parameterLabel().
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().
providing unique ID for alignable, space for param IDs
Definition at line 96 of file MomentumDependentPedeLabeler.h.
Referenced by alignableFromLabel(), and buildReverseMap().
labels for las beams
Definition at line 98 of file MomentumDependentPedeLabeler.h.
Referenced by alignableFromLabel(), buildReverseMap(), and lasBeamIdFromLabel().
reverse map
Definition at line 97 of file MomentumDependentPedeLabeler.h.
Referenced by buildMap(), buildReverseMap(), and lasBeamLabel().
unsigned int MomentumDependentPedeLabeler::theMaxNumberOfParameterInstances [private] |
Definition at line 100 of file MomentumDependentPedeLabeler.h.
Referenced by buildReverseMap(), and maxNumberOfParameterInstances().
const MomentumRange MomentumDependentPedeLabeler::theOpenMomentumRange [private] |
reverse of the above
Definition at line 99 of file MomentumDependentPedeLabeler.h.