Skip to content

Commit 596167c

Browse files
authored
Merge pull request #47804 from bsunanda/Phase2-hgx363C
Phase2-HGC363C Correct the cassette shift for the scintillator tiles in HGCal V19 geometry
2 parents d9ce690 + 42de2af commit 596167c

File tree

4 files changed

+129
-38
lines changed

4 files changed

+129
-38
lines changed

Geometry/HGCalCommonData/data/hgcalHEmix/v19/hgcalHEmix.xml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
<Numeric name="SensorSeparation" value="[hgcal:SensorSeparation]"/>
2424
<Numeric name="Sectors" value="36"/>
2525
<Numeric name="Cassettes" value="12"/>
26+
<Numeric name="TestCassetteShift" value="0"/>
2627
<Vector name="SlopeBottom" type="numeric" nEntries="4">
2728
0, 0, 0, 0</Vector>
2829
<Vector name="ZFrontBottom" type="numeric" nEntries="4">
@@ -957,7 +958,7 @@
957958
288, 288, 288, 288
958959
</Vector>
959960
<Vector name="ScintRetract" type="numeric" nEntries="14">
960-
4*mm, 4*mm, 4*mm, 4*mm, 8*mm, 8*mm,
961+
8*mm, 8*mm, 8*mm, 8*mm, 8*mm, 8*mm,
961962
8*mm, 8*mm, 8*mm, 8*mm, 8*mm, 8*mm,
962963
8*mm, 8*mm
963964
</Vector>

Geometry/HGCalCommonData/interface/HGCalCassette.h

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,9 @@ class HGCalCassette {
1212

1313
void setParameter(int cassette, const std::vector<double>& shifts, bool both = true);
1414
void setParameterScint(const std::vector<double>& shifts);
15+
void setParameterRetract(const std::vector<double>& shifts);
1516
std::pair<double, double> getShift(int layer, int zside, int cassette, bool scnt = false) const;
17+
std::pair<double, double> getShiftScnt(int layer, int zside, double phi) const;
1618
static int cassetteIndex(int det, int layer, int zside, int cassette);
1719
static int cassetteType(int det, int zside, int cassette);
1820

@@ -21,7 +23,7 @@ class HGCalCassette {
2123
static constexpr int positHE_[12] = {5, 4, 3, 2, 1, 0, 11, 10, 9, 8, 7, 6};
2224
int cassette_;
2325
bool typeHE_;
24-
std::vector<double> shifts_, shiftsScnt_;
26+
std::vector<double> shifts_, shiftsScnt_, retractScnt_;
2527
static constexpr int32_t factor_ = 100;
2628
};
2729

Geometry/HGCalCommonData/plugins/DDHGCalMixRotatedFineCassette.cc

Lines changed: 87 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,7 @@ class DDHGCalMixRotatedFineCassette : public DDAlgorithm {
5555
int absType,
5656
bool fine,
5757
DDCompactView& cpv);
58+
void testCassetteShift();
5859

5960
private:
6061
HGCalGeomTools geomTools_;
@@ -123,6 +124,7 @@ class DDHGCalMixRotatedFineCassette : public DDAlgorithm {
123124
std::vector<int> tileCoarseIndex_; // Index of tile (layer/start|end coarse ring)
124125
std::vector<int> tileCoarsePhis_; // Tile phi range for each index in coarse ring
125126
std::vector<int> tileCoarseLayerStart_; // Start index of tiles in each coarse layer
127+
std::vector<double> retract_; // Radial retraction of he tiles
126128
std::vector<double> cassetteShiftScnt_; // Shifts of the cassetes for scintillators
127129
std::string nameSpace_; // Namespace of this and ALL sub-parts
128130
std::unordered_set<int> copies_; // List of copy #'s
@@ -378,12 +380,14 @@ void DDHGCalMixRotatedFineCassette::initialize(const DDNumericArguments& nArgs,
378380
<< std::get<1>(HGCalTileIndex::tileUnpack(tileCoarsePhis_[k])) << ":"
379381
<< std::get<2>(HGCalTileIndex::tileUnpack(tileCoarsePhis_[k]));
380382
#endif
381-
std::vector<double> retract = vArgs["ScintRetract"];
383+
retract_ = vArgs["ScintRetract"];
382384
double dphi = M_PI / cassettes_;
383-
for (int k = 0; k < cassettes_; ++k) {
384-
double phi = (2 * k + 1) * dphi;
385-
cassetteShiftScnt_.emplace_back(retract[k] * cos(phi));
386-
cassetteShiftScnt_.emplace_back(retract[k] * sin(phi));
385+
for (unsigned int k = 0; k < layers_.size(); ++k) {
386+
for (int j = 0; j < cassettes_; ++j) {
387+
double phi = (2 * j + 1) * dphi;
388+
cassetteShiftScnt_.emplace_back(retract_[k] * cos(phi));
389+
cassetteShiftScnt_.emplace_back(retract_[k] * sin(phi));
390+
}
387391
}
388392
#ifdef EDM_ML_DEBUG
389393
unsigned int j2max = cassetteShiftScnt_.size();
@@ -401,6 +405,11 @@ void DDHGCalMixRotatedFineCassette::initialize(const DDNumericArguments& nArgs,
401405
#endif
402406
cassette_.setParameter(cassettes_, cassetteShift_, false);
403407
cassette_.setParameterScint(cassetteShiftScnt_);
408+
cassette_.setParameterRetract(retract_);
409+
410+
int testCassette = static_cast<int>(nArgs["TestCassetteShift"]);
411+
if (testCassette != 0)
412+
testCassetteShift();
404413
}
405414

406415
////////////////////////////////////////////////////////////////////
@@ -563,6 +572,7 @@ void DDHGCalMixRotatedFineCassette::positionMix(const DDLogicalPart& glog,
563572
int ii = layerTypeTop_[ly];
564573
int copy = copyNumberTop_[ii];
565574
int layer = (fine) ? (copy - firstFineLayer_) : (copy - firstCoarseLayer_);
575+
int layer0 = (copy - std::min(firstFineLayer_, firstCoarseLayer_) + 1);
566576
double hthickl = 0.5 * layerThickTop_[ii];
567577
thickTot += layerThickTop_[ii];
568578
zpos += hthickl;
@@ -577,14 +587,15 @@ void DDHGCalMixRotatedFineCassette::positionMix(const DDLogicalPart& glog,
577587
? tileCoarseLayerStart_[layer + 1]
578588
: static_cast<int>(tileCoarseIndex_.size()));
579589
#ifdef EDM_ML_DEBUG
580-
edm::LogVerbatim("HGCalGeom") << "DDHGCalMixRotatedFineCassette: Layer " << ly << ":" << ii << ":" << layer
581-
<< " Copy " << copy << " Tiles " << firstTile << ":" << lastTile << " Size "
582-
<< tileFineIndex_.size() << ":" << tileCoarseIndex_.size() << " Fine " << fine
583-
<< " absType " << absType;
590+
edm::LogVerbatim("HGCalGeom") << "DDHGCalMixRotatedFineCassette: Layer " << ly << ":" << ii << ":" << layer << ":"
591+
<< layer0 << " Copy " << copy << " Tiles " << firstTile << ":" << lastTile
592+
<< " Size " << tileFineIndex_.size() << ":" << tileCoarseIndex_.size() << " Fine "
593+
<< fine << " absType " << absType;
594+
int cassette;
584595
#endif
585596
for (int ti = firstTile; ti < lastTile; ++ti) {
586597
double r1, r2;
587-
int cassette, fimin, fimax;
598+
int fimin, fimax;
588599
#ifdef EDM_ML_DEBUG
589600
edm::LogVerbatim("HGCalGeom") << "DDHGCalMixRotatedFineCassette: ti " << ti << ":" << fine << " index "
590601
<< tileFineIndex_.size() << ":" << tileCoarseIndex_.size() << " Phis "
@@ -593,13 +604,17 @@ void DDHGCalMixRotatedFineCassette::positionMix(const DDLogicalPart& glog,
593604
if (fine) {
594605
r1 = tileFineRMin_[std::get<1>(HGCalTileIndex::tileUnpack(tileFineIndex_[ti])) - 1];
595606
r2 = tileFineRMax_[std::get<2>(HGCalTileIndex::tileUnpack(tileFineIndex_[ti])) - 1];
607+
#ifdef EDM_ML_DEBUG
596608
cassette = std::get<0>(HGCalTileIndex::tileUnpack(tileFinePhis_[ti]));
609+
#endif
597610
fimin = std::get<1>(HGCalTileIndex::tileUnpack(tileFinePhis_[ti]));
598611
fimax = std::get<2>(HGCalTileIndex::tileUnpack(tileFinePhis_[ti]));
599612
} else {
600613
r1 = tileCoarseRMin_[std::get<1>(HGCalTileIndex::tileUnpack(tileCoarseIndex_[ti])) - 1];
601614
r2 = tileCoarseRMax_[std::get<2>(HGCalTileIndex::tileUnpack(tileCoarseIndex_[ti])) - 1];
615+
#ifdef EDM_ML_DEBUG
602616
cassette = std::get<0>(HGCalTileIndex::tileUnpack(tileCoarsePhis_[ti]));
617+
#endif
603618
fimin = std::get<1>(HGCalTileIndex::tileUnpack(tileCoarsePhis_[ti]));
604619
fimax = std::get<2>(HGCalTileIndex::tileUnpack(tileCoarsePhis_[ti]));
605620
}
@@ -608,19 +623,23 @@ void DDHGCalMixRotatedFineCassette::positionMix(const DDLogicalPart& glog,
608623
<< fimin << ":" << fimax;
609624
#endif
610625
double phi1 = dphi * (fimin - 1);
611-
double phi2 = dphi * (fimax - fimin + 1) - tol0_;
612-
auto cshift = cassette_.getShift(layer + 1, 1, cassette, true);
626+
double phi2 = dphi * (fimax - fimin + 1);
627+
r1 += retract_[layer0 - 1];
628+
r2 += retract_[layer0 - 1];
613629
#ifdef EDM_ML_DEBUG
630+
double phi = phi1 + 0.5 * phi2;
631+
edm::LogVerbatim("HGCalGeom") << "1Layer " << ly << ":" << ii << ":" << copy << ":" << layer0 << " phi " << phi
632+
<< " shift " << retract_[layer0 - 1];
614633
int cassette0 = HGCalCassette::cassetteType(2, 1, cassette); //
615634
int ir1 = (fine) ? std::get<1>(HGCalTileIndex::tileUnpack(tileFineIndex_[ti]))
616635
: std::get<1>(HGCalTileIndex::tileUnpack(tileCoarseIndex_[ti]));
617636
int ir2 = (fine) ? std::get<2>(HGCalTileIndex::tileUnpack(tileFineIndex_[ti]))
618637
: std::get<2>(HGCalTileIndex::tileUnpack(tileCoarseIndex_[ti]));
619-
edm::LogVerbatim("HGCalGeom") << "DDHGCalMixRotatedFineCassette: Layer " << copy << ":" << (layer + 1) << " iR "
638+
edm::LogVerbatim("HGCalGeom") << "DDHGCalMixRotatedFineCassette: Layer " << copy << ":" << layer0 << " iR "
620639
<< ir1 << ":" << ir2 << " R " << r1 << ":" << r2 << " Thick " << (2.0 * hthickl)
621640
<< " phi " << fimin << ":" << fimax << ":" << convertRadToDeg(phi1) << ":"
622641
<< convertRadToDeg(phi2) << " cassette " << cassette << ":" << cassette0
623-
<< " Shift " << cshift.first << ":" << cshift.second;
642+
<< " Shift " << retract_[layer0 - 1];
624643
#endif
625644
std::string name = namesTop_[ii] + "L" + std::to_string(copy) + "F" + std::to_string(k);
626645
++k;
@@ -631,7 +650,7 @@ void DDHGCalMixRotatedFineCassette::positionMix(const DDLogicalPart& glog,
631650
<< matName << " of dimensions " << r1 << ", " << r2 << ", " << hthickl << ", "
632651
<< convertRadToDeg(phi1) << ", " << convertRadToDeg(phi2);
633652
#endif
634-
DDTranslation tran(-cshift.first, cshift.second, zpos);
653+
DDTranslation tran(0, 0, zpos);
635654
cpv.position(glog1, glog, copy, tran, rot);
636655
#ifdef EDM_ML_DEBUG
637656
edm::LogVerbatim("HGCalGeom") << "DDHGCalMixRotatedFineCassette: Position " << glog1.name() << " number "
@@ -655,6 +674,7 @@ void DDHGCalMixRotatedFineCassette::positionMix(const DDLogicalPart& glog,
655674
int ii = coverTypeTop_;
656675
int copy = copyNumberCoverTop_[absType - 1];
657676
int layer = (fine) ? (copy - firstFineLayer_) : (copy - firstCoarseLayer_);
677+
int layer0 = (copy - std::min(firstFineLayer_, firstCoarseLayer_) + 1);
658678
double hthickl = 0.5 * layerThickTop_[ii];
659679
zpos += hthickl;
660680
DDName matName(DDSplit(materialTop_[ii]).first, DDSplit(materialTop_[ii]).second);
@@ -668,29 +688,34 @@ void DDHGCalMixRotatedFineCassette::positionMix(const DDLogicalPart& glog,
668688
? tileCoarseLayerStart_[layer + 1]
669689
: static_cast<int>(tileCoarseIndex_.size()));
670690
#ifdef EDM_ML_DEBUG
671-
edm::LogVerbatim("HGCalGeom") << "DDHGCalMixRotatedFineCassette: TOP Layer " << ii << ":" << layer << " Copy "
672-
<< copy << " Tiles " << firstTile << ":" << lastTile << " Size "
691+
edm::LogVerbatim("HGCalGeom") << "DDHGCalMixRotatedFineCassette: TOP Layer " << ii << ":" << layer << ":" << layer0
692+
<< " Copy " << copy << " Tiles " << firstTile << ":" << lastTile << " Size "
673693
<< tileFineIndex_.size() << ":" << tileCoarseIndex_.size() << " Fine " << fine
674694
<< " absType " << absType;
675695
#endif
676696
for (int ti = firstTile; ti < lastTile; ++ti) {
677697
double r1, r2;
678-
int cassette, fimin, fimax;
698+
int fimin, fimax;
679699
#ifdef EDM_ML_DEBUG
680700
edm::LogVerbatim("HGCalGeom") << "DDHGCalMixRotatedFineCassette: ti " << ti << ":" << fine << " index "
681701
<< tileFineIndex_.size() << ":" << tileCoarseIndex_.size() << " Phis "
682702
<< tileFinePhis_.size() << ":" << tileCoarsePhis_.size();
703+
int cassette;
683704
#endif
684705
if (fine) {
685706
r1 = tileFineRMin_[std::get<1>(HGCalTileIndex::tileUnpack(tileFineIndex_[ti])) - 1];
686707
r2 = tileFineRMax_[std::get<2>(HGCalTileIndex::tileUnpack(tileFineIndex_[ti])) - 1];
708+
#ifdef EDM_ML_DEBUG
687709
cassette = std::get<0>(HGCalTileIndex::tileUnpack(tileFinePhis_[ti]));
710+
#endif
688711
fimin = std::get<1>(HGCalTileIndex::tileUnpack(tileFinePhis_[ti]));
689712
fimax = std::get<2>(HGCalTileIndex::tileUnpack(tileFinePhis_[ti]));
690713
} else {
691714
r1 = tileCoarseRMin_[std::get<1>(HGCalTileIndex::tileUnpack(tileCoarseIndex_[ti])) - 1];
692715
r2 = tileCoarseRMax_[std::get<2>(HGCalTileIndex::tileUnpack(tileCoarseIndex_[ti])) - 1];
716+
#ifdef EDM_ML_DEBUG
693717
cassette = std::get<0>(HGCalTileIndex::tileUnpack(tileCoarsePhis_[ti]));
718+
#endif
694719
fimin = std::get<1>(HGCalTileIndex::tileUnpack(tileCoarsePhis_[ti]));
695720
fimax = std::get<2>(HGCalTileIndex::tileUnpack(tileCoarsePhis_[ti]));
696721
}
@@ -700,18 +725,22 @@ void DDHGCalMixRotatedFineCassette::positionMix(const DDLogicalPart& glog,
700725
#endif
701726
double phi1 = dphi * (fimin - 1);
702727
double phi2 = dphi * (fimax - fimin + 1);
703-
auto cshift = cassette_.getShift(layer + 1, 1, cassette, true);
728+
r1 += retract_[layer0 - 1];
729+
r2 += retract_[layer0 - 1];
704730
#ifdef EDM_ML_DEBUG
731+
double phi = phi1 + 0.5 * phi2;
732+
edm::LogVerbatim("HGCalGeom") << "2Layer " << ii << ":" << copy << ":" << layer << ":" << layer0 << " phi " << phi
733+
<< " shift " << retract_[layer0 - 1];
705734
int cassette0 = HGCalCassette::cassetteType(2, 1, cassette); //
706735
int ir1 = (fine) ? std::get<1>(HGCalTileIndex::tileUnpack(tileFineIndex_[ti]))
707736
: std::get<1>(HGCalTileIndex::tileUnpack(tileCoarseIndex_[ti]));
708737
int ir2 = (fine) ? std::get<2>(HGCalTileIndex::tileUnpack(tileFineIndex_[ti]))
709738
: std::get<2>(HGCalTileIndex::tileUnpack(tileCoarseIndex_[ti]));
710-
edm::LogVerbatim("HGCalGeom") << "DDHGCalMixRotatedFineCassette: Layer " << copy << ":" << (layer + 1) << " iR "
711-
<< ir1 << ":" << ir2 << " R " << r1 << ":" << r2 << " Thick " << (2.0 * hthickl)
712-
<< " phi " << fimin << ":" << fimax << ":" << convertRadToDeg(phi1) << ":"
713-
<< convertRadToDeg(phi2) << " cassette " << cassette << ":" << cassette0
714-
<< " Shift " << cshift.first << ":" << cshift.second;
739+
edm::LogVerbatim("HGCalGeom") << "DDHGCalMixRotatedFineCassette: Layer " << copy << ":" << (layer + 1) << ":"
740+
<< layer0 << " iR " << ir1 << ":" << ir2 << " R " << r1 << ":" << r2 << " Thick "
741+
<< (2.0 * hthickl) << " phi " << fimin << ":" << fimax << ":"
742+
<< convertRadToDeg(phi1) << ":" << convertRadToDeg(phi2) << " cassette " << cassette
743+
<< ":" << cassette0 << " Shift " << retract_[layer0 - 1];
715744
#endif
716745
std::string name = namesTop_[ii] + "L" + std::to_string(copy) + "F" + std::to_string(k);
717746
++k;
@@ -722,7 +751,7 @@ void DDHGCalMixRotatedFineCassette::positionMix(const DDLogicalPart& glog,
722751
<< " of dimensions " << r1 << ", " << r2 << ", " << hthickl << ", "
723752
<< convertRadToDeg(phi1) << ", " << convertRadToDeg(phi2);
724753
#endif
725-
DDTranslation tran(-cshift.first, cshift.second, zpos);
754+
DDTranslation tran(0, 0, zpos);
726755
cpv.position(glog1, glog, copy, tran, rot);
727756
#ifdef EDM_ML_DEBUG
728757
edm::LogVerbatim("HGCalGeom") << "DDHGCalMixRotatedFineCassette: Position " << glog1.name() << " number " << copy
@@ -734,17 +763,22 @@ void DDHGCalMixRotatedFineCassette::positionMix(const DDLogicalPart& glog,
734763

735764
// Make the bottom part next
736765
int layer = (copyM - firstFineLayer_);
766+
int layer0 = (copyM - std::min(firstFineLayer_, firstCoarseLayer_) + 1);
737767
#ifdef EDM_ML_DEBUG
738-
edm::LogVerbatim("HGCalGeom") << "DDHGCalMixRotatedFineCassette: Start bottom section for layer " << layer
739-
<< " absType " << absType;
768+
edm::LogVerbatim("HGCalGeom") << "DDHGCalMixRotatedFineCassette: Start bottom section for layer " << (layer + 1)
769+
<< ":" << layer0 << " absType " << absType;
740770
#endif
741771
if (absType > 0) {
742772
#ifdef EDM_ML_DEBUG
743773
int kount(0);
744774
#endif
745775
for (int k = 0; k < cassettes_; ++k) {
746776
int cassette = k + 1;
747-
auto cshift = cassette_.getShift(layer + 1, -1, cassette);
777+
auto cshift = cassette_.getShift(layer0, -1, cassette, false);
778+
#ifdef EDM_ML_DEBUG
779+
edm::LogVerbatim("HGCalGeom") << "3Layer " << layer << ":" << layer0 << " Cassette " << cassette << " shift "
780+
<< cshift.first << ":" << cshift.second;
781+
#endif
748782
double xpos = -cshift.first;
749783
double ypos = cshift.second;
750784
int i = layer * cassettes_ + k;
@@ -812,17 +846,21 @@ void DDHGCalMixRotatedFineCassette::positionMix(const DDLogicalPart& glog,
812846
<< ":" << waferProperty_[k] << ":" << layertype << ":" << type << ":" << part << ":" << orien << ":"
813847
<< cassette << ":" << place;
814848
#endif
815-
auto cshift = cassette_.getShift(layer + 1, -1, cassette, false);
849+
auto cshift = cassette_.getShift(layer0, -1, cassette, false);
850+
#ifdef EDM_ML_DEBUG
851+
edm::LogVerbatim("HGCalGeom") << "Layer " << (layer + 1) << ":" << layer0 << " Cassette " << cassette << " shift "
852+
<< cshift.first << ":" << cshift.second;
853+
#endif
816854
double xpos = xyoff.first - cshift.first + nc * delx;
817855
double ypos = xyoff.second + cshift.second + nr * dy;
818856
#ifdef EDM_ML_DEBUG
819857
double xorig = xyoff.first + nc * delx;
820858
double yorig = xyoff.second + nr * dy;
821859
double angle = std::atan2(yorig, xorig);
822-
edm::LogVerbatim("HGCalGeom") << "DDHGCalMixRotatedFineCassette::Wafer: layer " << layer + 1 << " cassette "
823-
<< cassette << " Shift " << cshift.first << ":" << cshift.second << " Original "
824-
<< xorig << ":" << yorig << ":" << convertRadToDeg(angle) << " Final " << xpos
825-
<< ":" << ypos;
860+
edm::LogVerbatim("HGCalGeom") << "DDHGCalMixRotatedFineCassette::Wafer: layer " << layer + 1 << ":" << layer0
861+
<< " cassette " << cassette << " Shift " << cshift.first << ":" << cshift.second
862+
<< " Original " << xorig << ":" << yorig << ":" << convertRadToDeg(angle)
863+
<< " Final " << xpos << ":" << ypos;
826864
#endif
827865
std::string wafer;
828866
int i(999);
@@ -878,4 +916,20 @@ void DDHGCalMixRotatedFineCassette::positionMix(const DDLogicalPart& glog,
878916
}
879917
}
880918

919+
void DDHGCalMixRotatedFineCassette::testCassetteShift() {
920+
for (unsigned int k = 0; k < layers_.size(); ++k) {
921+
int layer = k + 1;
922+
for (int l = 0; l < cassettes_; ++l) {
923+
int cassette = l + 1;
924+
auto cf1 = cassette_.getShift(layer, 1, cassette, false);
925+
auto cf2 = cassette_.getShift(layer, 1, cassette, true);
926+
auto cf3 = cassette_.getShift(layer, -1, cassette, false);
927+
auto cf4 = cassette_.getShift(layer, -1, cassette, true);
928+
edm::LogVerbatim("HGCalGeom") << "Layer " << layer << " Cassette " << cassette << " x for z+ " << cf1.first << ":"
929+
<< cf2.first << " y for z+ " << cf1.second << ":" << cf2.second << " x for z- "
930+
<< cf3.first << ":" << cf4.first << " y for z- " << cf3.second << ":" << cf4.second;
931+
}
932+
}
933+
}
934+
881935
DEFINE_EDM_PLUGIN(DDAlgorithmFactory, DDHGCalMixRotatedFineCassette, "hgcal:DDHGCalMixRotatedFineCassette");

0 commit comments

Comments
 (0)