Skip to content

Commit ff4fe6c

Browse files
authored
Merge pull request #47855 from bsunanda/Phase2-hgx363H
Phase2-hgx363H Correct the dd4hep version of the mixed layer algorithm to be used for V19 versison of HGCal
2 parents 7052146 + f3c273d commit ff4fe6c

File tree

1 file changed

+82
-37
lines changed

1 file changed

+82
-37
lines changed

Geometry/HGCalCommonData/plugins/dd4hep/DDHGCalMixRotatedFineCassette.cc

Lines changed: 82 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -282,12 +282,12 @@ struct HGCalMixRotatedFineCassette {
282282
<< std::get<1>(HGCalTileIndex::tileUnpack(tileCoarsePhis_[k])) << ":"
283283
<< std::get<2>(HGCalTileIndex::tileUnpack(tileCoarsePhis_[k]));
284284
#endif
285-
std::vector<double> retract = args.value<std::vector<double>>("ScintRetract");
285+
retract_ = args.value<std::vector<double>>("ScintRetract");
286286
double dphi = M_PI / cassettes_;
287287
for (int k = 0; k < cassettes_; ++k) {
288288
double phi = (2 * k + 1) * dphi;
289-
cassetteShiftScnt_.emplace_back(retract[k] * cos(phi));
290-
cassetteShiftScnt_.emplace_back(retract[k] * sin(phi));
289+
cassetteShiftScnt_.emplace_back(retract_[k] * cos(phi));
290+
cassetteShiftScnt_.emplace_back(retract_[k] * sin(phi));
291291
}
292292
#ifdef EDM_ML_DEBUG
293293
unsigned int j2max = cassetteShiftScnt_.size();
@@ -301,10 +301,15 @@ struct HGCalMixRotatedFineCassette {
301301
#endif
302302
cassette_.setParameter(cassettes_, cassetteShift_, false);
303303
cassette_.setParameterScint(cassetteShiftScnt_);
304+
cassette_.setParameterRetract(retract_);
304305

305-
////////////////////////////////////////////////////////////////////
306-
// DDHGCalMixRotatedFineCassette methods...
307-
////////////////////////////////////////////////////////////////////
306+
int testCassette = args.value<int>("TestCassetteShift");
307+
if (testCassette != 0)
308+
testCassetteShift();
309+
310+
////////////////////////////////////////////////////////////////////
311+
// DDHGCalMixRotatedFineCassette methods...
312+
////////////////////////////////////////////////////////////////////
308313

309314
#ifdef EDM_ML_DEBUG
310315
edm::LogVerbatim("HGCalGeom") << "==>> Constructing DDHGCalMixRotatedFineCassette...";
@@ -465,6 +470,7 @@ struct HGCalMixRotatedFineCassette {
465470
int ii = layerTypeTop_[ly];
466471
int copy = copyNumberTop_[ii];
467472
int layer = (fine) ? (copy - firstFineLayer_) : (copy - firstCoarseLayer_);
473+
int layer0 = (copy - std::min(firstFineLayer_, firstCoarseLayer_) + 1);
468474
double hthickl = 0.5 * layerThickTop_[ii];
469475
thickTot += layerThickTop_[ii];
470476
zpos += hthickl;
@@ -479,13 +485,14 @@ struct HGCalMixRotatedFineCassette {
479485
: static_cast<int>(tileCoarseIndex_.size()));
480486
#ifdef EDM_ML_DEBUG
481487
edm::LogVerbatim("HGCalGeom") << "DDHGCalMixRotatedFineCassette: Layer " << ly << ":" << ii << ":" << layer
482-
<< " Copy " << copy << " Tiles " << firstTile << ":" << lastTile << " Size "
483-
<< tileFineIndex_.size() << ":" << tileCoarseIndex_.size() << " Fine " << fine
484-
<< " absType " << absType;
488+
<< ":" << layer0 << " Copy " << copy << " Tiles " << firstTile << ":" << lastTile
489+
<< " Size " << tileFineIndex_.size() << ":" << tileCoarseIndex_.size() << " Fine "
490+
<< fine << " absType " << absType;
491+
int cassette;
485492
#endif
486493
for (int ti = firstTile; ti < lastTile; ++ti) {
487494
double r1, r2;
488-
int cassette, fimin, fimax;
495+
int fimin, fimax;
489496
#ifdef EDM_ML_DEBUG
490497
edm::LogVerbatim("HGCalGeom") << "DDHGCalMixRotatedFineCassette: ti " << ti << ":" << fine << " index "
491498
<< tileFineIndex_.size() << ":" << tileCoarseIndex_.size() << " Phis "
@@ -494,13 +501,17 @@ struct HGCalMixRotatedFineCassette {
494501
if (fine) {
495502
r1 = tileFineRMin_[std::get<1>(HGCalTileIndex::tileUnpack(tileFineIndex_[ti])) - 1];
496503
r2 = tileFineRMax_[std::get<2>(HGCalTileIndex::tileUnpack(tileFineIndex_[ti])) - 1];
504+
#ifdef EDM_ML_DEBUG
497505
cassette = std::get<0>(HGCalTileIndex::tileUnpack(tileFinePhis_[ti]));
506+
#endif
498507
fimin = std::get<1>(HGCalTileIndex::tileUnpack(tileFinePhis_[ti]));
499508
fimax = std::get<2>(HGCalTileIndex::tileUnpack(tileFinePhis_[ti]));
500509
} else {
501510
r1 = tileCoarseRMin_[std::get<1>(HGCalTileIndex::tileUnpack(tileCoarseIndex_[ti])) - 1];
502511
r2 = tileCoarseRMax_[std::get<2>(HGCalTileIndex::tileUnpack(tileCoarseIndex_[ti])) - 1];
512+
#ifdef EDM_ML_DEBUG
503513
cassette = std::get<0>(HGCalTileIndex::tileUnpack(tileCoarsePhis_[ti]));
514+
#endif
504515
fimin = std::get<1>(HGCalTileIndex::tileUnpack(tileCoarsePhis_[ti]));
505516
fimax = std::get<2>(HGCalTileIndex::tileUnpack(tileCoarsePhis_[ti]));
506517
}
@@ -510,20 +521,23 @@ struct HGCalMixRotatedFineCassette {
510521
#endif
511522
double phi1 = dphi * (fimin - 1);
512523
double phi2 = dphi * (fimax - fimin + 1);
513-
auto cshift = cassette_.getShift(layer + 1, 1, cassette, true);
524+
r1 += retract_[layer0 - 1];
525+
r2 += retract_[layer0 - 1];
514526
#ifdef EDM_ML_DEBUG
527+
double phi = phi1 + 0.5 * phi2;
528+
edm::LogVerbatim("HGCalGeom") << "1Layer " << ly << ":" << ii << ":" << copy << ":" << layer0 << " phi "
529+
<< phi << " shift " << retract_[layer0 - 1];
515530
int cassette0 = HGCalCassette::cassetteType(2, 1, cassette); //
516531
int ir1 = (fine) ? std::get<1>(HGCalTileIndex::tileUnpack(tileFineIndex_[ti]))
517532
: std::get<1>(HGCalTileIndex::tileUnpack(tileCoarseIndex_[ti]));
518533
int ir2 = (fine) ? std::get<2>(HGCalTileIndex::tileUnpack(tileFineIndex_[ti]))
519534
: std::get<2>(HGCalTileIndex::tileUnpack(tileCoarseIndex_[ti]));
520-
edm::LogVerbatim("HGCalGeom") << "DDHGCalMixRotatedFineCassette: Layer " << copy << ":" << (layer + 1)
521-
<< " iR " << ir1 << ":" << ir2 << " R " << cms::convert2mm(r1) << ":"
535+
edm::LogVerbatim("HGCalGeom") << "DDHGCalMixRotatedFineCassette: Layer " << copy << ":" << layer0 << " iR "
536+
<< ir1 << ":" << ir2 << " R " << cms::convert2mm(r1) << ":"
522537
<< cms::convert2mm(r2) << " Thick " << cms::convert2mm(2.0 * hthickl) << " phi "
523538
<< fimin << ":" << fimax << ":" << convertRadToDeg(phi1) << ":"
524539
<< convertRadToDeg(phi2) << " cassette " << cassette << ":" << cassette0
525-
<< " Shift " << cms::convert2mm(cshift.first) << ":"
526-
<< cms::convert2mm(cshift.second);
540+
<< " Shift " << cms::convert2mm(retract_[layer0 - 1]);
527541
#endif
528542
std::string name = namesTop_[ii] + "L" + std::to_string(copy) + "F" + std::to_string(k);
529543
++k;
@@ -537,12 +551,11 @@ struct HGCalMixRotatedFineCassette {
537551
<< cms::convert2mm(r2) << ", " << cms::convert2mm(hthickl) << ", "
538552
<< convertRadToDeg(phi1) << ", " << convertRadToDeg(phi2);
539553
#endif
540-
dd4hep::Position tran(-cshift.first, cshift.second, zpos);
554+
dd4hep::Position tran(0, 0, zpos);
541555
glog.placeVolume(glog1, copy, tran);
542556
#ifdef EDM_ML_DEBUG
543557
edm::LogVerbatim("HGCalGeom") << "DDHGCalMixRotatedFineCassette: Position " << glog1.name() << " number "
544-
<< copy << " in " << glog.name() << " at (" << cms::convert2mm(cshift.first)
545-
<< ", " << cms::convert2mm(cshift.second) << ", " << cms::convert2mm(zpos)
558+
<< copy << " in " << glog.name() << " at (0,0," << cms::convert2mm(zpos)
546559
<< ") with no rotation";
547560
#endif
548561
}
@@ -564,6 +577,7 @@ struct HGCalMixRotatedFineCassette {
564577
int ii = coverTypeTop_;
565578
int copy = copyNumberCoverTop_[absType - 1];
566579
int layer = (fine) ? (copy - firstFineLayer_) : (copy - firstCoarseLayer_);
580+
int layer0 = (copy - std::min(firstFineLayer_, firstCoarseLayer_) + 1);
567581
double hthickl = 0.5 * layerThickTop_[ii];
568582
zpos += hthickl;
569583
dd4hep::Material matter1 = ns.material(materialTop_[ii]);
@@ -576,14 +590,15 @@ struct HGCalMixRotatedFineCassette {
576590
? tileCoarseLayerStart_[layer + 1]
577591
: static_cast<int>(tileCoarseIndex_.size()));
578592
#ifdef EDM_ML_DEBUG
579-
edm::LogVerbatim("HGCalGeom") << "DDHGCalMixRotatedFineCassette: TOP Layer " << ii << ":" << layer << " Copy "
580-
<< copy << " Tiles " << firstTile << ":" << lastTile << " Size "
581-
<< tileFineIndex_.size() << ":" << tileCoarseIndex_.size() << " Fine " << fine
582-
<< " absType " << absType;
593+
edm::LogVerbatim("HGCalGeom") << "DDHGCalMixRotatedFineCassette: TOP Layer " << ii << ":" << layer << ":"
594+
<< layer0 << " Copy " << copy << " Tiles " << firstTile << ":" << lastTile
595+
<< " Size " << tileFineIndex_.size() << ":" << tileCoarseIndex_.size() << " Fine "
596+
<< fine << " absType " << absType;
597+
int cassette;
583598
#endif
584599
for (int ti = firstTile; ti < lastTile; ++ti) {
585600
double r1, r2;
586-
int cassette, fimin, fimax;
601+
int fimin, fimax;
587602
#ifdef EDM_ML_DEBUG
588603
edm::LogVerbatim("HGCalGeom") << "DDHGCalMixRotatedFineCassette: ti " << ti << ":" << fine << " index "
589604
<< tileFineIndex_.size() << ":" << tileCoarseIndex_.size() << " Phis "
@@ -592,13 +607,17 @@ struct HGCalMixRotatedFineCassette {
592607
if (fine) {
593608
r1 = tileFineRMin_[std::get<1>(HGCalTileIndex::tileUnpack(tileFineIndex_[ti])) - 1];
594609
r2 = tileFineRMax_[std::get<2>(HGCalTileIndex::tileUnpack(tileFineIndex_[ti])) - 1];
610+
#ifdef EDM_ML_DEBUG
595611
cassette = std::get<0>(HGCalTileIndex::tileUnpack(tileFinePhis_[ti]));
612+
#endif
596613
fimin = std::get<1>(HGCalTileIndex::tileUnpack(tileFinePhis_[ti]));
597614
fimax = std::get<2>(HGCalTileIndex::tileUnpack(tileFinePhis_[ti]));
598615
} else {
599616
r1 = tileCoarseRMin_[std::get<1>(HGCalTileIndex::tileUnpack(tileCoarseIndex_[ti])) - 1];
600617
r2 = tileCoarseRMax_[std::get<2>(HGCalTileIndex::tileUnpack(tileCoarseIndex_[ti])) - 1];
618+
#ifdef EDM_ML_DEBUG
601619
cassette = std::get<0>(HGCalTileIndex::tileUnpack(tileCoarsePhis_[ti]));
620+
#endif
602621
fimin = std::get<1>(HGCalTileIndex::tileUnpack(tileCoarsePhis_[ti]));
603622
fimax = std::get<2>(HGCalTileIndex::tileUnpack(tileCoarsePhis_[ti]));
604623
}
@@ -608,19 +627,23 @@ struct HGCalMixRotatedFineCassette {
608627
#endif
609628
double phi1 = dphi * (fimin - 1);
610629
double phi2 = dphi * (fimax - fimin + 1);
611-
auto cshift = cassette_.getShift(layer + 1, 1, cassette, true);
630+
r1 += retract_[layer0 - 1];
631+
r2 += retract_[layer0 - 1];
612632
#ifdef EDM_ML_DEBUG
633+
double phi = phi1 + 0.5 * phi2;
634+
edm::LogVerbatim("HGCalGeom") << "2Layer " << ii << ":" << copy << ":" << layer << ":" << layer0 << " phi "
635+
<< phi << " shift " << retract_[layer0 - 1];
613636
int cassette0 = HGCalCassette::cassetteType(2, 1, cassette); //
614637
int ir1 = (fine) ? std::get<1>(HGCalTileIndex::tileUnpack(tileFineIndex_[ti]))
615638
: std::get<1>(HGCalTileIndex::tileUnpack(tileCoarseIndex_[ti]));
616639
int ir2 = (fine) ? std::get<2>(HGCalTileIndex::tileUnpack(tileFineIndex_[ti]))
617640
: std::get<2>(HGCalTileIndex::tileUnpack(tileCoarseIndex_[ti]));
618-
edm::LogVerbatim("HGCalGeom") << "DDHGCalMixRotatedFineCassette: Layer " << copy << ":" << (layer + 1) << " iR "
619-
<< ir1 << ":" << ir2 << " R " << cms::convert2mm(r1) << ":" << cms::convert2mm(r2)
620-
<< " Thick " << cms::convert2mm(2.0 * hthickl) << " phi " << fimin << ":" << fimax
621-
<< ":" << convertRadToDeg(phi1) << ":" << convertRadToDeg(phi2) << " cassette "
622-
<< cassette << ":" << cassette0 << " Shift " << cms::convert2mm(cshift.first)
623-
<< ":" << cms::convert2mm(cshift.second);
641+
edm::LogVerbatim("HGCalGeom") << "DDHGCalMixRotatedFineCassette: Layer " << copy << ":" << (layer + 1) << ":"
642+
<< layer0 << " iR " << ir1 << ":" << ir2 << " R " << cms::convert2mm(r1) << ":"
643+
<< cms::convert2mm(r2) << " Thick " << cms::convert2mm(2.0 * hthickl) << " phi "
644+
<< fimin << ":" << fimax << ":" << convertRadToDeg(phi1) << ":"
645+
<< convertRadToDeg(phi2) << " cassette " << cassette << ":" << cassette0
646+
<< " Shift " << cms::convert2mm(retract_[layer0 - 1]);
624647
#endif
625648
std::string name = namesTop_[ii] + "L" + std::to_string(copy) + "F" + std::to_string(k);
626649
++k;
@@ -634,12 +657,11 @@ struct HGCalMixRotatedFineCassette {
634657
<< cms::convert2mm(r2) << ", " << cms::convert2mm(hthickl) << ", "
635658
<< convertRadToDeg(phi1) << ", " << convertRadToDeg(phi2);
636659
#endif
637-
dd4hep::Position tran(-cshift.first, cshift.second, zpos);
660+
dd4hep::Position tran(0, 0, zpos);
638661
glog.placeVolume(glog1, copy, tran);
639662
#ifdef EDM_ML_DEBUG
640663
edm::LogVerbatim("HGCalGeom") << "DDHGCalMixRotatedFineCassette: Position " << glog1.name() << " number "
641-
<< copy << " in " << glog.name() << " at (" << cms::convert2mm(-cshift.first)
642-
<< ", " << cms::convert2mm(cshift.second) << ", " << cms::convert2mm(zpos)
664+
<< copy << " in " << glog.name() << " at (0,0," << cms::convert2mm(zpos)
643665
<< ") with no rotation";
644666
#endif
645667
}
@@ -648,17 +670,22 @@ struct HGCalMixRotatedFineCassette {
648670

649671
// Make the bottom part next
650672
int layer = (copyM - firstFineLayer_);
673+
int layer0 = (copyM - std::min(firstFineLayer_, firstCoarseLayer_) + 1);
651674
#ifdef EDM_ML_DEBUG
652-
edm::LogVerbatim("HGCalGeom") << "DDHGCalMixRotatedFineCassette: Start bottom section for layer " << layer
653-
<< " absType " << absType;
675+
edm::LogVerbatim("HGCalGeom") << "DDHGCalMixRotatedFineCassette: Start bottom section for layer " << (layer + 1)
676+
<< ":" << layer0 << " absType " << absType;
654677
#endif
655678
if (absType > 0) {
656679
#ifdef EDM_ML_DEBUG
657680
int kount(0);
658681
#endif
659682
for (int k = 0; k < cassettes_; ++k) {
660683
int cassette = k + 1;
661-
auto cshift = cassette_.getShift(layer + 1, -1, cassette);
684+
auto cshift = cassette_.getShift(layer0, -1, cassette);
685+
#ifdef EDM_ML_DEBUG
686+
edm::LogVerbatim("HGCalGeom") << "3Layer " << layer << ":" << layer0 << " Cassette " << cassette << " shift "
687+
<< cms::convert2mm(cshift.first) << ":" << cms::convert2mm(cshift.second);
688+
#endif
662689
double xpos = -cshift.first;
663690
double ypos = cshift.second;
664691
int i = layer * cassettes_ + k;
@@ -728,7 +755,7 @@ struct HGCalMixRotatedFineCassette {
728755
<< k << waferProperty_[k] << ":" << layertype << ":" << type << ":" << part << ":" << orien << ":"
729756
<< cassette << ":" << place;
730757
#endif
731-
auto cshift = cassette_.getShift(layer + 1, -1, cassette, false);
758+
auto cshift = cassette_.getShift(layer0, -1, cassette, false);
732759
double xpos = xyoff.first - cshift.first + nc * delx;
733760
double ypos = xyoff.second + cshift.second + nr * dy;
734761
#ifdef EDM_ML_DEBUG
@@ -795,6 +822,23 @@ struct HGCalMixRotatedFineCassette {
795822
}
796823
}
797824

825+
void testCassetteShift() {
826+
for (unsigned int k = 0; k < layers_.size(); ++k) {
827+
int layer = k + 1;
828+
for (int l = 0; l < cassettes_; ++l) {
829+
int cassette = l + 1;
830+
auto cf1 = cassette_.getShift(layer, 1, cassette, false);
831+
auto cf2 = cassette_.getShift(layer, 1, cassette, true);
832+
auto cf3 = cassette_.getShift(layer, -1, cassette, false);
833+
auto cf4 = cassette_.getShift(layer, -1, cassette, true);
834+
edm::LogVerbatim("HGCalGeom") << "Layer " << layer << " Cassette " << cassette << " x for z+ " << cf1.first
835+
<< ":" << cf2.first << " y for z+ " << cf1.second << ":" << cf2.second
836+
<< " x for z- " << cf3.first << ":" << cf4.first << " y for z- " << cf3.second
837+
<< ":" << cf4.second;
838+
}
839+
}
840+
}
841+
798842
HGCalGeomTools geomTools_;
799843
HGCalCassette cassette_;
800844

@@ -857,6 +901,7 @@ struct HGCalMixRotatedFineCassette {
857901
std::vector<int> tileCoarseIndex_; // Index of tile (layer/start|end coarse ring)
858902
std::vector<int> tileCoarsePhis_; // Tile phi range for each index in coarse ring
859903
std::vector<int> tileCoarseLayerStart_; // Start index of tiles in each coarse layer
904+
std::vector<double> retract_; // Radial retraction of he tiles
860905
std::vector<double> cassetteShiftScnt_; // Shifts of the cassetes for scintillators
861906
std::string nameSpace_; // Namespace of this and ALL sub-parts
862907
std::unordered_set<int> copies_; // List of copy #'s

0 commit comments

Comments
 (0)