Skip to content

Commit 6631c82

Browse files
author
Sunanda
committed
Correct the dd4hep version of the mixed layer algorithm to be used for V19 versison of HGCal
1 parent 845f354 commit 6631c82

File tree

1 file changed

+69
-29
lines changed

1 file changed

+69
-29
lines changed

Geometry/HGCalCommonData/plugins/dd4hep/DDHGCalMixRotatedFineCassette.cc

Lines changed: 69 additions & 29 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,6 +301,12 @@ struct HGCalMixRotatedFineCassette {
301301
#endif
302302
cassette_.setParameter(cassettes_, cassetteShift_, false);
303303
cassette_.setParameterScint(cassetteShiftScnt_);
304+
cassette_.setParameterRetract(retract_);
305+
306+
int testCassette = args.value<int>("TestCassetteShift");
307+
if (testCassette != 0)
308+
testCassetteShift();
309+
304310

305311
////////////////////////////////////////////////////////////////////
306312
// DDHGCalMixRotatedFineCassette methods...
@@ -465,6 +471,7 @@ struct HGCalMixRotatedFineCassette {
465471
int ii = layerTypeTop_[ly];
466472
int copy = copyNumberTop_[ii];
467473
int layer = (fine) ? (copy - firstFineLayer_) : (copy - firstCoarseLayer_);
474+
int layer0 = (copy - std::min(firstFineLayer_, firstCoarseLayer_) + 1);
468475
double hthickl = 0.5 * layerThickTop_[ii];
469476
thickTot += layerThickTop_[ii];
470477
zpos += hthickl;
@@ -478,14 +485,15 @@ struct HGCalMixRotatedFineCassette {
478485
? tileCoarseLayerStart_[layer + 1]
479486
: static_cast<int>(tileCoarseIndex_.size()));
480487
#ifdef EDM_ML_DEBUG
481-
edm::LogVerbatim("HGCalGeom") << "DDHGCalMixRotatedFineCassette: Layer " << ly << ":" << ii << ":" << layer
488+
edm::LogVerbatim("HGCalGeom") << "DDHGCalMixRotatedFineCassette: Layer " << ly << ":" << ii << ":" << layer << ":" << layer0
482489
<< " Copy " << copy << " Tiles " << firstTile << ":" << lastTile << " Size "
483490
<< tileFineIndex_.size() << ":" << tileCoarseIndex_.size() << " Fine " << fine
484491
<< " absType " << absType;
492+
int cassette;
485493
#endif
486494
for (int ti = firstTile; ti < lastTile; ++ti) {
487495
double r1, r2;
488-
int cassette, fimin, fimax;
496+
int fimin, fimax;
489497
#ifdef EDM_ML_DEBUG
490498
edm::LogVerbatim("HGCalGeom") << "DDHGCalMixRotatedFineCassette: ti " << ti << ":" << fine << " index "
491499
<< tileFineIndex_.size() << ":" << tileCoarseIndex_.size() << " Phis "
@@ -494,13 +502,17 @@ struct HGCalMixRotatedFineCassette {
494502
if (fine) {
495503
r1 = tileFineRMin_[std::get<1>(HGCalTileIndex::tileUnpack(tileFineIndex_[ti])) - 1];
496504
r2 = tileFineRMax_[std::get<2>(HGCalTileIndex::tileUnpack(tileFineIndex_[ti])) - 1];
505+
#ifdef EDM_ML_DEBUG
497506
cassette = std::get<0>(HGCalTileIndex::tileUnpack(tileFinePhis_[ti]));
507+
#endif
498508
fimin = std::get<1>(HGCalTileIndex::tileUnpack(tileFinePhis_[ti]));
499509
fimax = std::get<2>(HGCalTileIndex::tileUnpack(tileFinePhis_[ti]));
500510
} else {
501511
r1 = tileCoarseRMin_[std::get<1>(HGCalTileIndex::tileUnpack(tileCoarseIndex_[ti])) - 1];
502512
r2 = tileCoarseRMax_[std::get<2>(HGCalTileIndex::tileUnpack(tileCoarseIndex_[ti])) - 1];
513+
#ifdef EDM_ML_DEBUG
503514
cassette = std::get<0>(HGCalTileIndex::tileUnpack(tileCoarsePhis_[ti]));
515+
#endif
504516
fimin = std::get<1>(HGCalTileIndex::tileUnpack(tileCoarsePhis_[ti]));
505517
fimax = std::get<2>(HGCalTileIndex::tileUnpack(tileCoarsePhis_[ti]));
506518
}
@@ -510,20 +522,23 @@ struct HGCalMixRotatedFineCassette {
510522
#endif
511523
double phi1 = dphi * (fimin - 1);
512524
double phi2 = dphi * (fimax - fimin + 1);
513-
auto cshift = cassette_.getShift(layer + 1, 1, cassette, true);
525+
r1 += retract_[layer0 - 1];
526+
r2 += retract_[layer0 - 1];
514527
#ifdef EDM_ML_DEBUG
528+
double phi = phi1 + 0.5 * phi2;
529+
edm::LogVerbatim("HGCalGeom") << "1Layer " << ly << ":" << ii << ":" << copy << ":" << layer0 << " phi " << phi
530+
<< " shift " << retract_[layer0 - 1];
515531
int cassette0 = HGCalCassette::cassetteType(2, 1, cassette); //
516532
int ir1 = (fine) ? std::get<1>(HGCalTileIndex::tileUnpack(tileFineIndex_[ti]))
517533
: std::get<1>(HGCalTileIndex::tileUnpack(tileCoarseIndex_[ti]));
518534
int ir2 = (fine) ? std::get<2>(HGCalTileIndex::tileUnpack(tileFineIndex_[ti]))
519535
: std::get<2>(HGCalTileIndex::tileUnpack(tileCoarseIndex_[ti]));
520-
edm::LogVerbatim("HGCalGeom") << "DDHGCalMixRotatedFineCassette: Layer " << copy << ":" << (layer + 1)
536+
edm::LogVerbatim("HGCalGeom") << "DDHGCalMixRotatedFineCassette: Layer " << copy << ":" << layer0
521537
<< " iR " << ir1 << ":" << ir2 << " R " << cms::convert2mm(r1) << ":"
522538
<< cms::convert2mm(r2) << " Thick " << cms::convert2mm(2.0 * hthickl) << " phi "
523539
<< fimin << ":" << fimax << ":" << convertRadToDeg(phi1) << ":"
524540
<< convertRadToDeg(phi2) << " cassette " << cassette << ":" << cassette0
525-
<< " Shift " << cms::convert2mm(cshift.first) << ":"
526-
<< cms::convert2mm(cshift.second);
541+
<< " Shift " << cms::convert2mm(retract_[layer0 - 1]);
527542
#endif
528543
std::string name = namesTop_[ii] + "L" + std::to_string(copy) + "F" + std::to_string(k);
529544
++k;
@@ -537,13 +552,11 @@ struct HGCalMixRotatedFineCassette {
537552
<< cms::convert2mm(r2) << ", " << cms::convert2mm(hthickl) << ", "
538553
<< convertRadToDeg(phi1) << ", " << convertRadToDeg(phi2);
539554
#endif
540-
dd4hep::Position tran(-cshift.first, cshift.second, zpos);
555+
dd4hep::Position tran(0, 0, zpos);
541556
glog.placeVolume(glog1, copy, tran);
542557
#ifdef EDM_ML_DEBUG
543558
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)
546-
<< ") with no rotation";
559+
<< copy << " in " << glog.name() << " at (0,0," << cms::convert2mm(zpos) << ") with no rotation";
547560
#endif
548561
}
549562
++copyNumberTop_[ii];
@@ -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,12 @@ 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 << ":" << layer0 << " Copy " << copy << " Tiles " << firstTile << ":" << lastTile << " Size " << tileFineIndex_.size() << ":" << tileCoarseIndex_.size() << " Fine " << fine << " absType " << absType;
594+
int cassette;
583595
#endif
584596
for (int ti = firstTile; ti < lastTile; ++ti) {
585597
double r1, r2;
586-
int cassette, fimin, fimax;
598+
int fimin, fimax;
587599
#ifdef EDM_ML_DEBUG
588600
edm::LogVerbatim("HGCalGeom") << "DDHGCalMixRotatedFineCassette: ti " << ti << ":" << fine << " index "
589601
<< tileFineIndex_.size() << ":" << tileCoarseIndex_.size() << " Phis "
@@ -592,13 +604,17 @@ struct HGCalMixRotatedFineCassette {
592604
if (fine) {
593605
r1 = tileFineRMin_[std::get<1>(HGCalTileIndex::tileUnpack(tileFineIndex_[ti])) - 1];
594606
r2 = tileFineRMax_[std::get<2>(HGCalTileIndex::tileUnpack(tileFineIndex_[ti])) - 1];
607+
#ifdef EDM_ML_DEBUG
595608
cassette = std::get<0>(HGCalTileIndex::tileUnpack(tileFinePhis_[ti]));
609+
#endif
596610
fimin = std::get<1>(HGCalTileIndex::tileUnpack(tileFinePhis_[ti]));
597611
fimax = std::get<2>(HGCalTileIndex::tileUnpack(tileFinePhis_[ti]));
598612
} else {
599613
r1 = tileCoarseRMin_[std::get<1>(HGCalTileIndex::tileUnpack(tileCoarseIndex_[ti])) - 1];
600614
r2 = tileCoarseRMax_[std::get<2>(HGCalTileIndex::tileUnpack(tileCoarseIndex_[ti])) - 1];
615+
#ifdef EDM_ML_DEBUG
601616
cassette = std::get<0>(HGCalTileIndex::tileUnpack(tileCoarsePhis_[ti]));
617+
#endif
602618
fimin = std::get<1>(HGCalTileIndex::tileUnpack(tileCoarsePhis_[ti]));
603619
fimax = std::get<2>(HGCalTileIndex::tileUnpack(tileCoarsePhis_[ti]));
604620
}
@@ -608,19 +624,22 @@ struct HGCalMixRotatedFineCassette {
608624
#endif
609625
double phi1 = dphi * (fimin - 1);
610626
double phi2 = dphi * (fimax - fimin + 1);
611-
auto cshift = cassette_.getShift(layer + 1, 1, cassette, true);
627+
r1 += retract_[layer0 - 1];
628+
r2 += retract_[layer0 - 1];
612629
#ifdef EDM_ML_DEBUG
630+
double phi = phi1 + 0.5 * phi2;
631+
edm::LogVerbatim("HGCalGeom") << "2Layer " << ii << ":" << copy << ":" << layer << ":" << layer0 << " phi " << phi
632+
<< " shift " << retract_[layer0 - 1];
613633
int cassette0 = HGCalCassette::cassetteType(2, 1, cassette); //
614634
int ir1 = (fine) ? std::get<1>(HGCalTileIndex::tileUnpack(tileFineIndex_[ti]))
615635
: std::get<1>(HGCalTileIndex::tileUnpack(tileCoarseIndex_[ti]));
616636
int ir2 = (fine) ? std::get<2>(HGCalTileIndex::tileUnpack(tileFineIndex_[ti]))
617637
: std::get<2>(HGCalTileIndex::tileUnpack(tileCoarseIndex_[ti]));
618-
edm::LogVerbatim("HGCalGeom") << "DDHGCalMixRotatedFineCassette: Layer " << copy << ":" << (layer + 1) << " iR "
638+
edm::LogVerbatim("HGCalGeom") << "DDHGCalMixRotatedFineCassette: Layer " << copy << ":" << (layer + 1) << ":" << layer0 << " iR "
619639
<< ir1 << ":" << ir2 << " R " << cms::convert2mm(r1) << ":" << cms::convert2mm(r2)
620640
<< " Thick " << cms::convert2mm(2.0 * hthickl) << " phi " << fimin << ":" << fimax
621641
<< ":" << convertRadToDeg(phi1) << ":" << convertRadToDeg(phi2) << " cassette "
622-
<< cassette << ":" << cassette0 << " Shift " << cms::convert2mm(cshift.first)
623-
<< ":" << cms::convert2mm(cshift.second);
642+
<< cassette << ":" << cassette0 << " Shift " << cms::convert2mm(retract_[layer0 - 1]);
624643
#endif
625644
std::string name = namesTop_[ii] + "L" + std::to_string(copy) + "F" + std::to_string(k);
626645
++k;
@@ -634,12 +653,11 @@ struct HGCalMixRotatedFineCassette {
634653
<< cms::convert2mm(r2) << ", " << cms::convert2mm(hthickl) << ", "
635654
<< convertRadToDeg(phi1) << ", " << convertRadToDeg(phi2);
636655
#endif
637-
dd4hep::Position tran(-cshift.first, cshift.second, zpos);
656+
dd4hep::Position tran(0, 0, zpos);
638657
glog.placeVolume(glog1, copy, tran);
639658
#ifdef EDM_ML_DEBUG
640659
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)
660+
<< copy << " in " << glog.name() << " at (0,0," << cms::convert2mm(zpos)
643661
<< ") with no rotation";
644662
#endif
645663
}
@@ -648,17 +666,21 @@ struct HGCalMixRotatedFineCassette {
648666

649667
// Make the bottom part next
650668
int layer = (copyM - firstFineLayer_);
669+
int layer0 = (copyM - std::min(firstFineLayer_, firstCoarseLayer_) + 1);
651670
#ifdef EDM_ML_DEBUG
652-
edm::LogVerbatim("HGCalGeom") << "DDHGCalMixRotatedFineCassette: Start bottom section for layer " << layer
653-
<< " absType " << absType;
671+
edm::LogVerbatim("HGCalGeom") << "DDHGCalMixRotatedFineCassette: Start bottom section for layer " << (layer + 1) << ":" << layer0 << " absType " << absType;
654672
#endif
655673
if (absType > 0) {
656674
#ifdef EDM_ML_DEBUG
657675
int kount(0);
658676
#endif
659677
for (int k = 0; k < cassettes_; ++k) {
660678
int cassette = k + 1;
661-
auto cshift = cassette_.getShift(layer + 1, -1, cassette);
679+
auto cshift = cassette_.getShift(layer0, -1, cassette);
680+
#ifdef EDM_ML_DEBUG
681+
edm::LogVerbatim("HGCalGeom") << "3Layer " << layer << ":" << layer0 << " Cassette " << cassette << " shift "
682+
<< cms::convert2mm(cshift.first) << ":" << cms::convert2mm(cshift.second);
683+
#endif
662684
double xpos = -cshift.first;
663685
double ypos = cshift.second;
664686
int i = layer * cassettes_ + k;
@@ -728,7 +750,7 @@ struct HGCalMixRotatedFineCassette {
728750
<< k << waferProperty_[k] << ":" << layertype << ":" << type << ":" << part << ":" << orien << ":"
729751
<< cassette << ":" << place;
730752
#endif
731-
auto cshift = cassette_.getShift(layer + 1, -1, cassette, false);
753+
auto cshift = cassette_.getShift(layer0, -1, cassette, false);
732754
double xpos = xyoff.first - cshift.first + nc * delx;
733755
double ypos = xyoff.second + cshift.second + nr * dy;
734756
#ifdef EDM_ML_DEBUG
@@ -795,6 +817,23 @@ struct HGCalMixRotatedFineCassette {
795817
}
796818
}
797819

820+
void testCassetteShift() {
821+
for (unsigned int k = 0; k < layers_.size(); ++k) {
822+
int layer = k + 1;
823+
for (int l = 0; l < cassettes_; ++l) {
824+
int cassette = l + 1;
825+
auto cf1 = cassette_.getShift(layer, 1, cassette, false);
826+
auto cf2 = cassette_.getShift(layer, 1, cassette, true);
827+
auto cf3 = cassette_.getShift(layer, -1, cassette, false);
828+
auto cf4 = cassette_.getShift(layer, -1, cassette, true);
829+
edm::LogVerbatim("HGCalGeom") << "Layer " << layer << " Cassette " << cassette << " x for z+ " << cf1.first << ":"
830+
<< cf2.first << " y for z+ " << cf1.second << ":" << cf2.second << " x for z- "
831+
<< cf3.first << ":" << cf4.first << " y for z- " << cf3.second << ":" << cf4.second;
832+
}
833+
}
834+
}
835+
836+
798837
HGCalGeomTools geomTools_;
799838
HGCalCassette cassette_;
800839

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

0 commit comments

Comments
 (0)