41 log <<
"Known colum names:\n";
42 for (
auto e :
ids) log <<
"+++ column: " <<
e.first
53 std::vector<ID> geomquantities;
69 std::vector<std::pair<std::string, TTField>> namedPartitions {
82 for (
auto&
e : namedPartitions) {
83 geomquantities.push_back(
intern(
e.first));
94 auto diskid =
intern(
"PXDisk");
97 auto disk = pxdisk(iq);
99 auto endcap = pxendcap(iq);
100 return endcap == 1 ? -disk : disk;
109 auto module_rows = iConfig.
getParameter<
int>(
"module_rows") - 1;
110 auto module_cols = iConfig.
getParameter<
int>(
"module_cols") - 1;
117 std::vector<Value> maxladders;
123 auto detids = trackerGeometryHandle->detIds();
124 for (
DetId id : detids) {
127 auto layer = pxlayer(iq);
129 if (layer >=
Value(maxladders.size())) maxladders.resize(layer+1);
130 auto ladder = pxladder(iq);
131 if (ladder > maxladders[layer]) maxladders[layer] = ladder;
133 auto module = pxmodule(iq);
135 auto blade = pxblade(iq);
136 if (blade !=
UNDEFINED && blade > outerring) outerring = blade;
140 iq.row = 0; iq.col = 0;
142 iq.row = module_rows; iq.col = 0;
144 iq.row = 0; iq.col = module_cols;
146 iq.row = module_rows; iq.col = module_cols;
150 outerring = outerring - innerring;
158 auto blade = pxblade(iq);
160 if (blade <= innerring)
return Value(1);
161 else return Value(2);
167 auto ec = pxendcap(iq);
169 auto blade = pxblade(iq);
171 auto inring = blade > innerring ? (innerring+outerring+1) - blade : blade;
172 auto perring = blade > innerring ? outerring : innerring;
174 int frac = (int) ((inring-1) / float(perring) * 4);
175 if (frac == 0 || frac == 3)
return 10*ec + 1;
176 if (frac == 1 || frac == 2)
return 10*ec + 2;
177 assert(!
"HalfCylinder logic problem");
188 auto layer = pxlayer(iq);
189 auto ladder = pxladder(iq);
190 int frac = (int) ((ladder-1) / float(maxladders[layer]) * 4);
191 Value quarter = maxladders[layer] / 4;
192 if (frac == 0)
return -ladder + quarter + 1;
193 if (frac == 1)
return -ladder + quarter;
194 if (frac == 2)
return -ladder + quarter;
195 if (frac == 3)
return -ladder + 4*quarter + quarter + 1;
196 assert(!
"Shell logic problem");
205 mod -= (maxmodule/2 + 1);
206 if (mod >= 0) mod += 1;
215 auto sl = signedladder(iq);
216 auto sm = signedmodule(iq);
218 return Value((sm < 0 ? 10 : 20) + (sl < 0 ? 2 : 1));
239 int onlineblock = iConfig.
getParameter<
int>(
"onlineblock");
240 int n_onlineblocks = iConfig.
getParameter<
int>(
"n_onlineblocks");
248 onlineblock, onlineblock+n_onlineblocks-1
281 int fedrow = int(iq.
row / roc_rows);
282 int fedcol = int(iq.
col / roc_cols);
283 if (fedrow == 0)
return Value(fedcol);
284 if (fedrow == 1)
return Value(n_rocs - 1 - fedcol);
293 auto mod = pxmodule(iq);
295 return Value(roc(iq) + n_rocs * (
mod-1));
300 auto mod = pxpanel(iq);
302 return Value(roc(iq) + n_rocs * (
mod-1));
319 std::map<DetId, Value> fedmap;
322 if (theCablingMap.isValid()) {
323 auto map = theCablingMap.product();
326 std::vector<sipixelobjects::CablingPathToDetUnit>
paths = map->pathToDetUnit(iq.sourceModule.rawId());
327 for (
auto p : paths) {
329 fedmap[iq.sourceModule] =
Value(
p.fed);
330 if (
p.fed > maxFED) maxFED =
p.fed;
331 if (
p.fed < minFED) minFED =
p.fed;
335 edm::LogError(
"GeometryInterface") <<
"+++ No cabling map. Cannot extract FEDs.\n";
std::map< ID, Value > max_value
T getParameter(std::string const &) const
std::map< std::string, ID > ids
void addExtractor(ID id, std::function< Value(InterestingQuantities const &iq)> func, Value min=UNDEFINED, Value max=UNDEFINED)
int bunchCrossing() const
edm::LuminosityBlockNumber_t luminosityBlock() const
uint32_t rawId() const
get the raw id
void loadFromTopology(edm::EventSetup const &iSetup, const edm::ParameterSet &iConfig)
void load(edm::EventSetup const &iSetup)
const edm::ParameterSet iConfig
std::vector< InterestingQuantities > all_modules
static const Value UNDEFINED
void loadFEDCabling(edm::EventSetup const &iSetup, const edm::ParameterSet &iConfig)
void loadModuleLevel(edm::EventSetup const &iSetup, const edm::ParameterSet &iConfig)
std::vector< std::function< Value(InterestingQuantities const &iq)> > extractors
const edm::Event * sourceEvent
std::map< ID, Value > min_value
ID intern(std::string const &id)
T mod(const T &a, const T &b)
void loadTimebased(edm::EventSetup const &iSetup, const edm::ParameterSet &iConfig)