File indexing completed on 2025-08-06 08:18:17
0001 #include "AlignmentDefs.h"
0002
0003 #include <trackbase/TpcDefs.h>
0004 #include <trackbase/InttDefs.h>
0005 #include <trackbase/MvtxDefs.h>
0006 #include <trackbase/TrkrDefs.h> // for cluskey, getTrkrId, tpcId
0007
0008 void AlignmentDefs::getMvtxGlobalLabels(const Surface& surf, int glbl_label[], AlignmentDefs::mvtxGrp grp)
0009 {
0010 Acts::GeometryIdentifier id = surf->geometryId();
0011 int group = 0;
0012 switch (grp)
0013 {
0014 case AlignmentDefs::mvtxGrp::snsr:
0015 group = 0;
0016 break;
0017 case AlignmentDefs::mvtxGrp::stv:
0018 group = 1;
0019 break;
0020 case AlignmentDefs::mvtxGrp::mvtxlyr:
0021 group = 2;
0022 break;
0023 case AlignmentDefs::mvtxGrp::clamshl:
0024 group = 3;
0025 break;
0026 }
0027
0028 int label_base = getLabelBase(id, 0, group);
0029 for (int i = 0; i < NGL; ++i)
0030 {
0031 glbl_label[i] = label_base + i;
0032 }
0033 }
0034
0035 void AlignmentDefs::getMvtxGlobalLabels(const Surface& surf, TrkrDefs::cluskey cluskey, int glbl_label[], AlignmentDefs::mvtxGrp grp)
0036 {
0037 Acts::GeometryIdentifier id = surf->geometryId();
0038 int group = 0;
0039 switch (grp)
0040 {
0041 case AlignmentDefs::mvtxGrp::snsr:
0042 group = 0;
0043 break;
0044 case AlignmentDefs::mvtxGrp::stv:
0045 group = 1;
0046 break;
0047 case AlignmentDefs::mvtxGrp::mvtxlyr:
0048 group = 2;
0049 break;
0050 case AlignmentDefs::mvtxGrp::clamshl:
0051 group = 3;
0052 break;
0053 }
0054
0055 int label_base = getLabelBase(id, cluskey, group);
0056 for (int i = 0; i < NGL; ++i)
0057 {
0058 glbl_label[i] = label_base + i;
0059 }
0060 }
0061
0062 void AlignmentDefs::getInttGlobalLabels(const Surface& surf, int glbl_label[], AlignmentDefs::inttGrp grp)
0063 {
0064 Acts::GeometryIdentifier id = surf->geometryId();
0065 int group = 0;
0066 switch (grp)
0067 {
0068 case AlignmentDefs::inttGrp::chp:
0069 group = 4;
0070 break;
0071 case AlignmentDefs::inttGrp::lad:
0072 group = 5;
0073 break;
0074 case AlignmentDefs::inttGrp::inttlyr:
0075 group = 6;
0076 break;
0077 case AlignmentDefs::inttGrp::inttbrl:
0078 group = 7;
0079 break;
0080 }
0081
0082 int label_base = getLabelBase(id, 0, group);
0083 for (int i = 0; i < NGL; ++i)
0084 {
0085 glbl_label[i] = label_base + i;
0086 }
0087 }
0088 void AlignmentDefs::getInttGlobalLabels(const Surface& surf, TrkrDefs::cluskey cluskey, int glbl_label[], AlignmentDefs::inttGrp grp)
0089 {
0090 Acts::GeometryIdentifier id = surf->geometryId();
0091 int group = 0;
0092 switch (grp)
0093 {
0094 case AlignmentDefs::inttGrp::chp:
0095 group = 4;
0096 break;
0097 case AlignmentDefs::inttGrp::lad:
0098 group = 5;
0099 break;
0100 case AlignmentDefs::inttGrp::inttlyr:
0101 group = 6;
0102 break;
0103 case AlignmentDefs::inttGrp::inttbrl:
0104 group = 7;
0105 break;
0106 }
0107
0108 int label_base = getLabelBase(id, cluskey, group);
0109 for (int i = 0; i < NGL; ++i)
0110 {
0111 glbl_label[i] = label_base + i;
0112 }
0113 }
0114
0115 void AlignmentDefs::getTpcGlobalLabels(const Surface& surf, TrkrDefs::cluskey cluskey, int glbl_label[], AlignmentDefs::tpcGrp grp)
0116 {
0117 Acts::GeometryIdentifier id = surf->geometryId();
0118 int group = 0;
0119 switch (grp)
0120 {
0121 case AlignmentDefs::tpcGrp::htst:
0122 group = 8;
0123 break;
0124 case AlignmentDefs::tpcGrp::sctr:
0125 group = 9;
0126 break;
0127 case AlignmentDefs::tpcGrp::tp:
0128 group = 10;
0129 break;
0130 }
0131
0132 int label_base = getLabelBase(id, cluskey, group);
0133 for (int i = 0; i < NGL; ++i)
0134 {
0135 glbl_label[i] = label_base + i;
0136 }
0137 }
0138 void AlignmentDefs::getMMGlobalLabels(const Surface& surf, int glbl_label[], AlignmentDefs::mmsGrp grp)
0139 {
0140 Acts::GeometryIdentifier id = surf->geometryId();
0141 int group = 0;
0142 switch (grp)
0143 {
0144 case AlignmentDefs::mmsGrp::tl:
0145 group = 11;
0146 break;
0147 case AlignmentDefs::mmsGrp::mm:
0148 group = 12;
0149 break;
0150 }
0151
0152 int label_base = getLabelBase(id, 0, group);
0153 for (int i = 0; i < NGL; ++i)
0154 {
0155 glbl_label[i] = label_base + i;
0156 }
0157 }
0158
0159 int AlignmentDefs::getTpcRegion(int layer)
0160 {
0161 int region = 0;
0162 if (layer > 22 && layer < 39)
0163 {
0164 region = 1;
0165 }
0166 if (layer > 38 && layer < 55)
0167 {
0168 region = 2;
0169 }
0170
0171 return region;
0172 }
0173
0174 int AlignmentDefs::getMvtxClamshell(int layer, int stave)
0175 {
0176 for (int istave = 0; istave < nstaves_layer_mvtx[layer]; ++istave)
0177 {
0178 for (int ishell = 0; ishell < 2; ++ishell)
0179 {
0180 int stave_ref = clamshell_stave_list[layer][ishell][istave];
0181 if (stave == stave_ref)
0182 {
0183 return ishell;
0184 }
0185 }
0186 }
0187
0188 std::cout << " AlignmentDefs::getMvtxClamshell: did not find stave " << stave << std::endl;
0189 return 0;
0190 }
0191
0192 int AlignmentDefs::getLabelBase(Acts::GeometryIdentifier id, TrkrDefs::cluskey cluskey, int group)
0193 {
0194 int layer = TrkrDefs::getLayer(cluskey);
0195
0196 int label_base = 1;
0197
0198
0199 if (layer < 3)
0200 {
0201 int stave = MvtxDefs::getStaveId(cluskey);
0202 int sensor = MvtxDefs::getChipId(cluskey);
0203
0204 if (group == 0)
0205 {
0206
0207 label_base += layer * 1000000 + stave * 10000 + sensor * 10;
0208 return label_base;
0209 }
0210 if (group == 1)
0211 {
0212
0213 label_base += layer * 1000000 + stave * 10000;
0214
0215 return label_base;
0216 }
0217 if (group == 2)
0218 {
0219
0220 int clamshell = getMvtxClamshell(layer, stave);
0221 label_base += layer * 1000000 + clamshell * 10000;
0222
0223
0224 return label_base;
0225 }
0226 if (group == 3)
0227 {
0228
0229
0230
0231 int clamshell = getMvtxClamshell(layer, stave);
0232
0233
0234
0235
0236
0237 label_base += 0 * 1000000 + clamshell * 10000;
0238
0239 return label_base;
0240 }
0241 }
0242 else if (layer > 2 && layer < 7)
0243 {
0244
0245 int stave = InttDefs::getLadderPhiId(cluskey);
0246 int sensor = InttDefs::getLadderZId(cluskey);
0247
0248 if (group == 4)
0249 {
0250
0251 label_base += layer * 1000000 + stave * 10000 + sensor * 10;
0252 return label_base;
0253 }
0254 if (group == 5)
0255 {
0256
0257 label_base += layer * 1000000 + stave * 10000;
0258 return label_base;
0259 }
0260 if (group == 6)
0261 {
0262
0263 label_base += layer * 1000000 + 0;
0264 return label_base;
0265 }
0266 if (group == 7)
0267 {
0268
0269
0270 label_base += 3 * 1000000 + 0;
0271 return label_base;
0272 }
0273 }
0274 else if (layer > 6 && layer < 55)
0275 {
0276 unsigned int sensor = id.sensitive() - 1;
0277
0278 if (group == 8)
0279 {
0280
0281
0282 int hitset = sensor / 12;
0283 label_base += layer * 1000000 + hitset * 10000;
0284 return label_base;
0285 }
0286 if (group == 9)
0287 {
0288
0289 int side = TpcDefs::getSide(cluskey);
0290 int sector = TpcDefs::getSectorId(cluskey);
0291
0292 int region = getTpcRegion(layer);
0293
0294
0295
0296 label_base += 7 * 1000000 + (region * 24 + side * 12 + sector) * 10000;
0297 return label_base;
0298 }
0299 if (group == 10)
0300 {
0301
0302 label_base += 7 * 1000000 + 0;
0303 return label_base;
0304 }
0305 }
0306 else
0307 {
0308 unsigned int sensor = id.sensitive() - 1;
0309
0310 if (group == 11)
0311 {
0312
0313 int tile = sensor;
0314 label_base += layer * 1000000 + tile * 10000 + sensor * 10;
0315 return label_base;
0316 }
0317 if (group == 12)
0318 {
0319
0320 label_base += 55 * 1000000 + 0;
0321 return label_base;
0322 }
0323 }
0324 return -1;
0325 }
0326
0327 std::vector<int> AlignmentDefs::getAllMvtxGlobalLabels(int grp)
0328 {
0329 std::vector<int> label_base;
0330
0331 if (grp == mvtxGrp::clamshl)
0332 {
0333 for (int ishl = 0; ishl < 2; ++ishl)
0334 {
0335 int label = 1 + 0 * 1000000 + ishl * 10000;
0336 label_base.push_back(label);
0337 }
0338 }
0339 else if (grp == mvtxGrp::mvtxlyr)
0340 {
0341 for (int ishl = 0; ishl < 2; ++ishl)
0342 {
0343 for (int ilyr = 0; ilyr < 3; ++ilyr)
0344 {
0345 int label = 1 + ilyr * 1000000 + ishl * 10000;
0346 label_base.push_back(label);
0347 }
0348 }
0349 }
0350 else if (grp == mvtxGrp::stv)
0351 {
0352 for (int ilyr = 0; ilyr < 3; ++ilyr)
0353 {
0354 for (int istv = 0; istv < nstaves_layer_mvtx[ilyr]; ++istv)
0355 {
0356 int label = 1 + ilyr * 1000000 + istv * 10000;
0357 label_base.push_back(label);
0358 }
0359 }
0360 }
0361 else if (grp == mvtxGrp::snsr)
0362 {
0363 for (int ilyr = 0; ilyr < 3; ++ilyr)
0364 {
0365 for (int istv = 0; istv < nstaves_layer_mvtx[ilyr]; ++istv)
0366 {
0367 for (int isnsr = 0; isnsr < nsensors_stave[ilyr]; ++isnsr)
0368 {
0369 int label = 1 + ilyr * 1000000 + istv * 10000 + isnsr * 10;
0370 label_base.push_back(label);
0371 }
0372 }
0373 }
0374 }
0375
0376 auto labels = makeLabelsFromBase(label_base);
0377
0378 return labels;
0379 }
0380
0381 std::vector<int> AlignmentDefs::getAllInttGlobalLabels(int grp)
0382 {
0383 std::vector<int> label_base;
0384
0385 if (grp == inttGrp::inttbrl)
0386 {
0387 int label = 1 + 3 * 1000000 + 0;
0388 label_base.push_back(label);
0389 }
0390 else if (grp == inttGrp::inttlyr)
0391 {
0392 for (int ilyr = 3; ilyr < 7; ++ilyr)
0393 {
0394 int label = 1 + ilyr * 1000000 + 0;
0395 label_base.push_back(label);
0396 }
0397 }
0398 else if (grp == inttGrp::lad)
0399 {
0400 for (int ilyr = 3; ilyr < 7; ++ilyr)
0401 {
0402 for (int istv = 0; istv < nstaves_layer_intt[ilyr - 3]; ++istv)
0403 {
0404 int label = 1 + ilyr * 1000000 + istv * 10000;
0405 label_base.push_back(label);
0406 }
0407 }
0408 }
0409 else if (grp == inttGrp::chp)
0410 {
0411 for (int ilyr = 3; ilyr < 7; ++ilyr)
0412 {
0413 for (int istv = 0; istv < nstaves_layer_intt[ilyr - 3]; ++istv)
0414 {
0415 for (int isnsr = 0; isnsr < nsensors_stave[ilyr]; ++isnsr)
0416 {
0417 int label = 1 + ilyr * 1000000 + istv * 10000 + isnsr * 10;
0418 label_base.push_back(label);
0419 }
0420 }
0421 }
0422 }
0423
0424 auto labels = makeLabelsFromBase(label_base);
0425
0426 return labels;
0427 }
0428
0429 std::vector<int> AlignmentDefs::getAllTpcGlobalLabels(int grp)
0430 {
0431 std::vector<int> label_base;
0432
0433 if (grp == tpcGrp::sctr)
0434 {
0435 for (int isec = 0; isec < 72; ++isec)
0436 {
0437 int label = 1 + 7 * 1000000 + isec * 10000;
0438 label_base.push_back(label);
0439 }
0440 }
0441
0442 auto labels = makeLabelsFromBase(label_base);
0443
0444 return labels;
0445 }
0446
0447 std::vector<int> AlignmentDefs::makeLabelsFromBase(std::vector<int>& label_base)
0448 {
0449 std::vector<int> labels;
0450 for (int ilbl : label_base)
0451 {
0452 for (int ipar = 0; ipar < 6; ++ipar)
0453 {
0454 int label_plus = ilbl + ipar;
0455 labels.push_back(label_plus);
0456 }
0457 }
0458
0459 return labels;
0460 }
0461
0462 void AlignmentDefs::printBuffers(int index, Acts::Vector2 residual, Acts::Vector2 clus_sigma, float lcl_derivative[], float glbl_derivative[], int glbl_label[])
0463 {
0464 std::cout << " float buffer: "
0465 << " residual "
0466 << " " << residual(index);
0467 for (int il = 0; il < NLC; ++il)
0468 {
0469 if (lcl_derivative[il] != 0)
0470 {
0471 std::cout << " lcl_deriv[" << il << "] " << lcl_derivative[il] << " ";
0472 }
0473 }
0474 std::cout << " sigma "
0475 << " " << clus_sigma(index) << " ";
0476 for (int ig = 0; ig < NGL; ++ig)
0477 {
0478 if (glbl_derivative[ig] != 0)
0479 {
0480 std::cout << " glbl_deriv[" << ig << "] " << glbl_derivative[ig] << " ";
0481 }
0482 }
0483 std::cout << " int buffer: "
0484 << " 0 "
0485 << " 0 "
0486 << " ";
0487 for (int il = 0; il < NLC; ++il)
0488 {
0489 if (lcl_derivative[il] != 0)
0490 {
0491 std::cout << " lcl_label[" << il << "] " << il + 1 << " ";
0492 }
0493 }
0494 std::cout << " 0 "
0495 << " ";
0496 for (int ig = 0; ig < NGL; ++ig)
0497 {
0498 if (glbl_derivative[ig] != 0)
0499 {
0500 std::cout << " glbl_label[" << ig << "] " << glbl_label[ig] << " ";
0501 }
0502 }
0503 std::cout << " end of meas " << std::endl;
0504 }