31 theMaxNumberOfParameterInstances(0) {
61 const DetId detId(alignable->
id());
63 edm::LogError(
"LogicError") <<
"@SUB=MomentumDependentPedeLabeler::alignableLabel"
64 <<
"Alignable " <<
typeid(*alignable).name()
65 <<
" not in map, det/subdet/alignableStructureType = " << detId.det() <<
"/"
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";
97 const DetId detId(alignable->
id());
99 edm::LogError(
"LogicError") <<
"@SUB=MomentumDependentPedeLabeler::alignableLabel"
100 <<
"Alignable " <<
typeid(*alignable).name()
101 <<
" not in map, det/subdet/alignableStructureType = " << detId.det() <<
"/"
114 edm::LogError(
"LogicError") <<
"@SUB=MomentumDependentPedeLabeler::lasBeamLabel"
115 <<
"No label for beam Id " << lasBeamId;
123 throw cms::Exception(
"Alignment") <<
"@SUB=MomentumDependentPedeLabeler::parameterLabel"
124 <<
"Parameter number " << parNum <<
" out of range 0 <= num < " <<
theMaxNumParam;
126 return aliLabel + parNum;
138 throw cms::Exception(
"Alignment") <<
"@SUB=MomentumDependentPedeLabeler::parameterLabel"
139 <<
"Parameter number " << parNum <<
" out of range 0 <= num < " <<
theMaxNumParam;
146 MomentumRangeParamMap::const_iterator positionParam = (*positionAli).second.find(parNum);
147 if (positionParam != (*positionAli).second.end()) {
151 for (
const auto &iMomentum : momentumRanges) {
152 if (iMomentum.first <= mom && mom < iMomentum.second) {
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() <<
"/"
171 const DetId detId(alignable->
id());
173 edm::LogError(
"LogicError") <<
"@SUB=MomentumDependentPedeLabeler::alignableLabel"
174 <<
"Alignable " <<
typeid(*alignable).name()
175 <<
" not in map, det/subdet/alignableStructureType = " << detId.det() <<
"/"
193 size_t nMomentums = 1;
195 for (
const auto &iParam : (*positionAli).second) {
196 nMomentums =
std::max(nMomentums, iParam.second.size());
200 MomentumRangeParamMap::const_iterator iParam = (*positionAli).second.find(param);
201 if (iParam != (*positionAli).second.end()) {
202 return iParam->second.size();
215 edm::LogError(
"LogicError") <<
"@SUB=MomentumDependentPedeLabeler::paramNumFromLabel"
240 edm::LogError(
"LogicError") <<
"@SUB=MomentumDependentPedeLabeler::alignableFromLabel"
241 <<
"Alignable label " << aliLabel <<
" not in map.";
257 edm::LogError(
"LogicError") <<
"@SUB=MomentumDependentPedeLabeler::lasBeamIdFromLabel"
258 <<
"Alignable label " << aliLabel <<
" not in map.";
266 std::vector<std::string>
result;
271 if (delimiterPos == std::string::npos) {
272 result.push_back(
s.substr(previousPos));
275 result.push_back(
s.substr(previousPos, delimiterPos - previousPos));
276 previousPos = delimiterPos + 1;
284 std::vector<unsigned int>
result;
286 if (selString[
pos] ==
'1')
300 std::vector<char> paramSelDumthe(6,
'1');
302 const auto parameterInstancesVPSet =
config.getParameter<std::vector<edm::ParameterSet> >(
"parameterInstances");
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";
314 for (
unsigned int iMomentum = 0; iMomentum < tempMomentumRanges.size(); ++iMomentum) {
315 std::vector<std::string> tokens =
edm::tokenize(tempMomentumRanges[iMomentum],
":");
317 lower = strtod(tokens[0].c_str(),
nullptr);
318 upper = strtod(tokens[1].c_str(),
nullptr);
320 MomentumRanges.push_back(std::pair<float, float>(lower,
upper));
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,
','));
327 if (decompSel.size() != 2) {
328 throw cms::Exception(
"BadConfig") <<
"@SUB=MomentumDependentPedeLabeler::buildMomentumDependencyMap\n"
329 << iSel <<
" should have at least 2 ','-separated parts\n";
332 std::vector<unsigned int> selParam = this->
convertParamSel(decompSel[1]);
337 for (
const auto &iAli : alis) {
338 if (iAli->alignmentParameters() ==
nullptr) {
340 <<
"@SUB=MomentumDependentPedeLabeler::buildMomentumDependencyMap\n"
341 <<
"Momentum dependence configured for alignable of type "
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";
348 for (
const auto &iParam : selParam) {
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";
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";
379 for (
const auto &iAli : alis) {
381 allComps.push_back(iAli);
382 iAli->recursiveComponents(allComps);
387 for (
const auto &iter : allComps) {
396 unsigned int beamIds[] = {0, 10, 20, 30, 40, 50, 60, 70,
397 1, 11, 21, 31, 41, 51, 61, 71,
398 100, 110, 120, 130, 140, 150, 160, 170,
399 101, 111, 121, 131, 141, 151, 161, 171,
400 200, 210, 220, 230, 240, 250, 260, 270};
402 const size_t nBeams =
sizeof(beamIds) /
sizeof(beamIds[0]);
403 for (
size_t iBeam = 0; iBeam < nBeams; ++iBeam) {
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";
424 const unsigned int key = it.second;
428 for (
unsigned int iInstance = 0; iInstance < nInstances; ++iInstance) {