@@ -25,7 +25,9 @@ using namespace geant_units::operators;
2525HGCalDDDConstants::HGCalDDDConstants (const HGCalParameters* hp, const std::string& name)
2626 : hgpar_(hp), sqrt3_(std::sqrt(3.0 )), mode_(hgpar_->mode_), fullAndPart_(waferHexagon8File()) {
2727#ifdef EDM_ML_DEBUG
28- edm::LogVerbatim (" HGCalGeom" ) << " HGCalDDDConstants::Mode " << mode_ << " FullAndPart " << fullAndPart_;
28+ edm::LogVerbatim (" HGCalGeom" ) << " HGCalDDDConstants::Mode " << mode_ << " FullAndPart " << fullAndPart_
29+ << " waferHex6:waverHex8 " << waferHexagon6 () << " :" << waferHexagon8 () << " cassettte "
30+ << cassetteMode ();
2931#endif
3032 if (waferHexagon6 () || waferHexagon8 ()) {
3133 rmax_ = (HGCalParameters::k_ScaleFromDDD * (hgpar_->waferR_ ) * std::cos (30 ._deg ));
@@ -53,7 +55,10 @@ HGCalDDDConstants::HGCalDDDConstants(const HGCalParameters* hp, const std::strin
5355 cellOffset_.reset ();
5456 }
5557 if (cassetteMode ()) {
56- hgcassette_.setParameter (hgpar_->cassettes_ , hgpar_->cassetteShift_ );
58+ if (mode_ == HGCalGeometryMode::TrapezoidFineCell)
59+ hgcassette_.setParameter (hgpar_->cassettes_ , hgpar_->cassetteShiftTile_ , true );
60+ else
61+ hgcassette_.setParameter (hgpar_->cassettes_ , hgpar_->cassetteShift_ , true );
5762#ifdef EDM_ML_DEBUG
5863 edm::LogVerbatim (" HGCalGeom" ) << " HGCalDDDConstants::Setup HGCalCassette for " << hgpar_->cassettes_
5964 << " cassettes" ;
@@ -228,7 +233,9 @@ std::array<int, 3> HGCalDDDConstants::assignCellTrap(float x, float y, float z,
228233 double r = std::sqrt (xx * xx + yy * yy);
229234 auto ir = std::lower_bound (hgpar_->radiusLayer_ [type].begin (), hgpar_->radiusLayer_ [type].end (), r);
230235 irad = static_cast <int >(ir - hgpar_->radiusLayer_ [type].begin ());
231- irad = std::clamp (irad, hgpar_->iradMinBH_ [indx.first ], hgpar_->iradMaxBH_ [indx.first ]);
236+ irad = hgpar_->scintFine (indx.first )
237+ ? (std::clamp (irad, hgpar_->iradMinBHFine_ [indx.first ], hgpar_->iradMaxBHFine_ [indx.first ]))
238+ : (std::clamp (irad, hgpar_->iradMinBH_ [indx.first ], hgpar_->iradMaxBH_ [indx.first ]));
232239#ifdef EDM_ML_DEBUG
233240 edm::LogVerbatim (" HGCalGeomT" ) << " assignCellTrap Input " << x << " :" << y << " :" << z << " :" << layer << " :" << reco
234241 << " x|y|r " << xx << " :" << yy << " :" << r << " phi " << phi << " :"
@@ -238,17 +245,31 @@ std::array<int, 3> HGCalDDDConstants::assignCellTrap(float x, float y, float z,
238245 if (tileRingEdge (r, layer, irad)) {
239246 if (std::abs (r - hgpar_->radiusLayer_ [type][irad - 1 ]) < tol_) {
240247 --irad;
241- if (irad <= hgpar_->iradMinBH_ [indx.first ])
242- irad = hgpar_->iradMinBH_ [indx.first ];
248+ if (hgpar_->scintFine (indx.first )) {
249+ if (irad <= hgpar_->iradMinBHFine_ [indx.first ])
250+ irad = hgpar_->iradMinBHFine_ [indx.first ];
251+ } else {
252+ if (irad <= hgpar_->iradMinBH_ [indx.first ])
253+ irad = hgpar_->iradMinBH_ [indx.first ];
254+ }
243255 } else {
244256 ++irad;
245- if (irad > hgpar_->iradMaxBH_ [indx.first ])
246- irad = hgpar_->iradMaxBH_ [indx.first ];
257+ if (hgpar_->scintFine (indx.first )) {
258+ if (irad > hgpar_->iradMaxBHFine_ [indx.first ])
259+ irad = hgpar_->iradMaxBHFine_ [indx.first ];
260+ } else {
261+ if (irad > hgpar_->iradMaxBH_ [indx.first ])
262+ irad = hgpar_->iradMaxBH_ [indx.first ];
263+ }
247264 }
248265#ifdef EDM_ML_DEBUG
249- edm::LogVerbatim (" HGCalGeomT" ) << " assignCellTrap: ring # modified to " << irad << " :"
250- << hgpar_->iradMinBH_ [indx.first ] << " :" << hgpar_->iradMaxBH_ [indx.first ];
251- ;
266+ std::ostringstream st1;
267+ st1 << " assignCellTrap: ring # in ring type " << hgpar_->scintFine (indx.first ) << " modified to " << irad;
268+ if (irad > hgpar_->iradMaxBHFine_ [indx.first ])
269+ st1 << " :" << hgpar_->iradMinBHFine_ [indx.first ] << " :" << hgpar_->iradMaxBHFine_ [indx.first ];
270+ else
271+ st1 << " :" << hgpar_->iradMinBH_ [indx.first ] << " :" << hgpar_->iradMaxBH_ [indx.first ];
272+ edm::LogVerbatim (" HGCalGeomT" ) << st1.str ();
252273#endif
253274 } else if (tilePhiEdge (phi, layer, iphi)) {
254275 if (std::abs (phi - hgpar_->scintCellSize (layer) * (iphi - 1 )) < tol_) {
@@ -445,7 +466,10 @@ double HGCalDDDConstants::distFromEdgeTrap(double x, double y, double z) const {
445466 // Take the smaller value
446467 auto ir = std::lower_bound (hgpar_->radiusLayer_ [type].begin (), hgpar_->radiusLayer_ [type].end (), r);
447468 int irad = static_cast <int >(ir - hgpar_->radiusLayer_ [type].begin ());
448- irad = std::clamp (irad, hgpar_->iradMinBH_ [indx], hgpar_->iradMaxBH_ [indx]);
469+ if (hgpar_->scintFine (indx))
470+ irad = std::clamp (irad, hgpar_->iradMinBHFine_ [indx], hgpar_->iradMaxBHFine_ [indx]);
471+ else
472+ irad = std::clamp (irad, hgpar_->iradMinBH_ [indx], hgpar_->iradMaxBH_ [indx]);
449473 int iphi = 1 + static_cast <int >(phi / cell);
450474 double dphi = std::max (0.0 , (0.5 * cell - std::abs (phi - (iphi - 0.5 ) * cell)));
451475 double dist = std::min ((r - hgpar_->radiusLayer_ [type][irad - 1 ]), (hgpar_->radiusLayer_ [type][irad] - r));
@@ -516,9 +540,18 @@ std::pair<int, int> HGCalDDDConstants::getREtaRange(int lay) const {
516540 int irmin (0 ), irmax (0 );
517541 if (tileTrapezoid ()) {
518542 int indx = layerIndex (lay, false );
519- if ((indx >= 0 ) && (indx < static_cast <int >(hgpar_->iradMinBH_ .size ()))) {
520- irmin = hgpar_->iradMinBH_ [indx];
521- irmax = hgpar_->iradMaxBH_ [indx];
543+ if (indx >= 0 ) {
544+ if (hgpar_->scintFine (indx)) {
545+ if (indx < static_cast <int >(hgpar_->iradMinBHFine_ .size ())) {
546+ irmin = hgpar_->iradMinBHFine_ [indx];
547+ irmax = hgpar_->iradMaxBHFine_ [indx];
548+ }
549+ } else {
550+ if (indx < static_cast <int >(hgpar_->iradMinBH_ .size ())) {
551+ irmin = hgpar_->iradMinBH_ [indx];
552+ irmax = hgpar_->iradMaxBH_ [indx];
553+ }
554+ }
522555 }
523556 }
524557 return std::make_pair (irmin, irmax);
@@ -745,16 +778,14 @@ bool HGCalDDDConstants::isValidTrap(int zside, int layer, int irad, int iphi) co
745778 const auto & indx = getIndex (layer, true );
746779 if (indx.first < 0 )
747780 return false ;
748- bool ok = ((irad >= hgpar_->iradMinBH_ [indx.first ]) && (irad <= (hgpar_->iradMaxBH_ [indx.first ] + 1 )) && (iphi > 0 ) &&
749- (iphi <= hgpar_->scintCells (layer)));
781+ bool ok = ((hgpar_->scintValidRing (indx.first , irad)) && (iphi > 0 ) && (iphi <= hgpar_->scintCells (layer)));
750782 bool valid = ((ok && trapezoidFile ()) ? tileExist (zside, layer, irad, iphi) : ok);
751783#ifdef EDM_ML_DEBUG
752784 bool tileEx = trapezoidFile () ? tileExist (zside, layer, irad, iphi) : true ;
753785 edm::LogVerbatim (" HGCalGeomT" ) << " HGCalDDDConstants::isValidityTrap: Input " << zside << " :" << layer << " :" << irad
754- << " :" << iphi << " Range on Ring " << hgpar_->iradMinBH_ [indx.first ] << " :"
755- << (hgpar_->iradMaxBH_ [indx.first ] + 1 )
786+ << " :" << iphi << " Range on Ring " << hgpar_->scintValidRing (indx.first , irad)
756787 << " Range on phi 0:" << hgpar_->scintCells (layer) << " tileExist " << tileEx
757- << " Valid " << ok << " :" << valid;
788+ << " Valid " << ok << " :" << tileExist (zside, layer, irad, iphi) << " : " << valid;
758789#endif
759790 return valid;
760791}
@@ -977,19 +1008,29 @@ std::pair<float, float> HGCalDDDConstants::locateCellTrap(
9771008 int zside, int lay, int irad, int iphi, bool reco, bool debug) const {
9781009 float x (0 ), y (0 );
9791010 const auto & indx = getIndex (lay, reco);
1011+ edm::LogVerbatim (" HGCalGeom" ) << " locateCellTrap:: Input " << lay << " :" << irad << " :" << iphi << " :" << zside << " :"
1012+ << reco << " :" << indx.first ;
1013+ debug = true ;
9801014 if (indx.first >= 0 ) {
9811015 int ir = std::abs (irad);
9821016 int type = hgpar_->scintType (lay);
9831017 double phi = (iphi - 0.5 ) * indx.second ;
9841018 double z = hgpar_->zLayerHex_ [indx.first ];
9851019 double r = 0.5 * (hgpar_->radiusLayer_ [type][ir - 1 ] + hgpar_->radiusLayer_ [type][ir]);
9861020 std::pair<double , double > range = rangeR (z, true );
987- if (debug)
988- edm::LogVerbatim (" HGCalGeom" ) << " locateCellTrap:: Input " << lay << " :" << irad << " :" << iphi << " :" << reco
989- << " IR " << ir << " :" << hgpar_->iradMinBH_ [indx.first ] << " :"
990- << hgpar_->iradMaxBH_ [indx.first ] << " Type " << type << " Z " << indx.first << " :"
991- << z << " phi " << phi << " :" << convertRadToDeg (phi) << " R " << r << " :"
992- << range.first << " :" << range.second ;
1021+ if (debug) {
1022+ std::ostringstream st1;
1023+ st1 << " locateCellTrap:: Input " << lay << " :" << irad << " :" << iphi << " :" << reco << " indx " << indx.first
1024+ << " IR " << ir << " :" ;
1025+ if (hgpar_->scintFine (indx.first ))
1026+ st1 << hgpar_->iradMinBHFine_ [indx.first ] << " :" << hgpar_->iradMaxBHFine_ [indx.first ];
1027+ else
1028+ st1 << hgpar_->iradMinBH_ [indx.first ] << " :" << hgpar_->iradMaxBH_ [indx.first ];
1029+ edm::LogVerbatim (" HGCalGeom" ) << st1.str () << " Type " << type << " Z " << indx.first << " :" << z << " phi "
1030+ << phi << " :" << convertRadToDeg (phi) << " R " << r << " :" << range.first << " :"
1031+ << range.second << " file " << (!trapezoidFile ()) << " CassetteMode "
1032+ << cassetteMode ();
1033+ }
9931034 if (!trapezoidFile ())
9941035 r = std::max (range.first , std::min (r, range.second ));
9951036 x = r * std::cos (phi);
0 commit comments