Line Code
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33
#include "Geometry/MTDNumberingBuilder/interface/CmsMTDStringToEnum.h"

const CmsMTDStringToEnum::Impl CmsMTDStringToEnum::m_impl;

CmsMTDStringToEnum::Impl::Impl() {
  map_.emplace("FastTimerRegion", GeometricTimingDet::MTD);
  map_.emplace("FastTimerRegionBTL", GeometricTimingDet::MTD);
  map_.emplace("FastTimerRegionETL", GeometricTimingDet::MTD);
  map_.emplace("BarrelTimingLayer", GeometricTimingDet::BTL);
  map_.emplace("Layer1", GeometricTimingDet::BTLLayer);
  map_.emplace("Layer1Timing", GeometricTimingDet::BTLLayer);
  map_.emplace("LayerTiming", GeometricTimingDet::BTLLayer);
  map_.emplace("BModule", GeometricTimingDet::BTLModule);
  map_.emplace("BTLModu", GeometricTimingDet::BTLModule);  // truncate name to have the same length as old versions
  map_.emplace("EndcapTimingLayer", GeometricTimingDet::ETL);
  map_.emplace("Disc1Timing", GeometricTimingDet::ETLDisc);
  map_.emplace("Disc2Timing", GeometricTimingDet::ETLDisc);
  map_.emplace("SensorM", GeometricTimingDet::ETLModule);  // pre v8 geometry
  map_.emplace("Module_", GeometricTimingDet::ETLModule);
  map_.emplace("EModule", GeometricTimingDet::ETLSensor);  // pre v8 geometry
  map_.emplace("LGAD_ac", GeometricTimingDet::ETLSensor);
}

GeometricTimingDet::GeometricTimingEnumType CmsMTDStringToEnum::type(std::string const& s) const {
  // remove namespace if present
  std::string_view v = s;
  auto first = v.find_first_of(':');
  v.remove_prefix(std::min(first + 1, v.size()));
  MapEnumType::const_iterator p = map().find({v.data(), v.size()});
  if (p != map().end())
    return p->second;
  return GeometricTimingDet::unknown;
}