@@ -25,7 +25,7 @@ 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_ << " waferHex6:waverHex8 " << waferHexagon6 () << " : " << waferHexagon8 () << " cassettte " << cassetteMode () ;
2929#endif
3030 if (waferHexagon6 () || waferHexagon8 ()) {
3131 rmax_ = (HGCalParameters::k_ScaleFromDDD * (hgpar_->waferR_ ) * std::cos (30 ._deg ));
@@ -53,7 +53,10 @@ HGCalDDDConstants::HGCalDDDConstants(const HGCalParameters* hp, const std::strin
5353 cellOffset_.reset ();
5454 }
5555 if (cassetteMode ()) {
56- hgcassette_.setParameter (hgpar_->cassettes_ , hgpar_->cassetteShift_ );
56+ if (mode_ == HGCalGeometryMode::TrapezoidFineCell)
57+ hgcassette_.setParameter (hgpar_->cassettes_ , hgpar_->cassetteShiftTile_ , true );
58+ else
59+ hgcassette_.setParameter (hgpar_->cassettes_ , hgpar_->cassetteShift_ , true );
5760#ifdef EDM_ML_DEBUG
5861 edm::LogVerbatim (" HGCalGeom" ) << " HGCalDDDConstants::Setup HGCalCassette for " << hgpar_->cassettes_
5962 << " cassettes" ;
@@ -228,7 +231,7 @@ std::array<int, 3> HGCalDDDConstants::assignCellTrap(float x, float y, float z,
228231 double r = std::sqrt (xx * xx + yy * yy);
229232 auto ir = std::lower_bound (hgpar_->radiusLayer_ [type].begin (), hgpar_->radiusLayer_ [type].end (), r);
230233 irad = static_cast <int >(ir - hgpar_->radiusLayer_ [type].begin ());
231- irad = std::clamp (irad, hgpar_->iradMinBH_ [indx.first ], hgpar_->iradMaxBH_ [indx.first ]);
234+ irad = hgpar_-> scintFine (indx. first ) ? ( std::clamp (irad, hgpar_->iradMinBHFine_ [indx. first ], hgpar_-> iradMaxBHFine_ [indx. first ])) : ( std::clamp (irad, hgpar_-> iradMinBH_ [indx.first ], hgpar_->iradMaxBH_ [indx.first ]) );
232235#ifdef EDM_ML_DEBUG
233236 edm::LogVerbatim (" HGCalGeomT" ) << " assignCellTrap Input " << x << " :" << y << " :" << z << " :" << layer << " :" << reco
234237 << " x|y|r " << xx << " :" << yy << " :" << r << " phi " << phi << " :"
@@ -238,20 +241,34 @@ std::array<int, 3> HGCalDDDConstants::assignCellTrap(float x, float y, float z,
238241 if (tileRingEdge (r, layer, irad)) {
239242 if (std::abs (r - hgpar_->radiusLayer_ [type][irad - 1 ]) < tol_) {
240243 --irad;
241- if (irad <= hgpar_->iradMinBH_ [indx.first ])
242- irad = hgpar_->iradMinBH_ [indx.first ];
244+ if (hgpar_->scintFine (indx.first )) {
245+ if (irad <= hgpar_->iradMinBHFine_ [indx.first ])
246+ irad = hgpar_->iradMinBHFine_ [indx.first ];
247+ } else {
248+ if (irad <= hgpar_->iradMinBH_ [indx.first ])
249+ irad = hgpar_->iradMinBH_ [indx.first ];
250+ }
243251 } else {
244252 ++irad;
245- if (irad > hgpar_->iradMaxBH_ [indx.first ])
246- irad = hgpar_->iradMaxBH_ [indx.first ];
253+ if (hgpar_->scintFine (indx.first )) {
254+ if (irad > hgpar_->iradMaxBHFine_ [indx.first ])
255+ irad = hgpar_->iradMaxBHFine_ [indx.first ];
256+ } else {
257+ if (irad > hgpar_->iradMaxBH_ [indx.first ])
258+ irad = hgpar_->iradMaxBH_ [indx.first ];
259+ }
247260 }
248261#ifdef EDM_ML_DEBUG
249- edm::LogVerbatim (" HGCalGeomT" ) << " assignCellTrap: ring # modified to " << irad << " :"
250- << hgpar_->iradMinBH_ [indx.first ] << " :" << hgpar_->iradMaxBH_ [indx.first ];
251- ;
262+ std::ostringstream st1;
263+ st1 << " assignCellTrap: ring # in ring type " << hgpar_->scintFine (indx.first ) << " modified to " << irad;
264+ if (irad > hgpar_->iradMaxBHFine_ [indx.first ])
265+ st1 << " :" << hgpar_->iradMinBHFine_ [indx.first ] << " :" << hgpar_->iradMaxBHFine_ [indx.first ];
266+ else
267+ st1 << " :" << hgpar_->iradMinBH_ [indx.first ] << " :" << hgpar_->iradMaxBH_ [indx.first ];
268+ edm::LogVerbatim (" HGCalGeomT" ) << st1.str ();
252269#endif
253270 } else if (tilePhiEdge (phi, layer, iphi)) {
254- if (std::abs (phi - hgpar_->scintCellSize (layer) * (iphi - 1 )) < tol_) {
271+ if (std::abs (phi - hgpar_->scintCellSize (layer) * (iphi - 1 )) < tol_) {
255272 --iphi;
256273 if (iphi <= 0 )
257274 iphi = 1 ;
@@ -445,7 +462,10 @@ double HGCalDDDConstants::distFromEdgeTrap(double x, double y, double z) const {
445462 // Take the smaller value
446463 auto ir = std::lower_bound (hgpar_->radiusLayer_ [type].begin (), hgpar_->radiusLayer_ [type].end (), r);
447464 int irad = static_cast <int >(ir - hgpar_->radiusLayer_ [type].begin ());
448- irad = std::clamp (irad, hgpar_->iradMinBH_ [indx], hgpar_->iradMaxBH_ [indx]);
465+ if (hgpar_->scintFine (indx))
466+ irad = std::clamp (irad, hgpar_->iradMinBHFine_ [indx], hgpar_->iradMaxBHFine_ [indx]);
467+ else
468+ irad = std::clamp (irad, hgpar_->iradMinBH_ [indx], hgpar_->iradMaxBH_ [indx]);
449469 int iphi = 1 + static_cast <int >(phi / cell);
450470 double dphi = std::max (0.0 , (0.5 * cell - std::abs (phi - (iphi - 0.5 ) * cell)));
451471 double dist = std::min ((r - hgpar_->radiusLayer_ [type][irad - 1 ]), (hgpar_->radiusLayer_ [type][irad] - r));
@@ -516,9 +536,18 @@ std::pair<int, int> HGCalDDDConstants::getREtaRange(int lay) const {
516536 int irmin (0 ), irmax (0 );
517537 if (tileTrapezoid ()) {
518538 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];
539+ if (indx >= 0 ) {
540+ if (hgpar_->scintFine (indx)) {
541+ if (indx < static_cast <int >(hgpar_->iradMinBHFine_ .size ())) {
542+ irmin = hgpar_->iradMinBHFine_ [indx];
543+ irmax = hgpar_->iradMaxBHFine_ [indx];
544+ }
545+ } else {
546+ if (indx < static_cast <int >(hgpar_->iradMinBH_ .size ())) {
547+ irmin = hgpar_->iradMinBH_ [indx];
548+ irmax = hgpar_->iradMaxBH_ [indx];
549+ }
550+ }
522551 }
523552 }
524553 return std::make_pair (irmin, irmax);
@@ -745,16 +774,11 @@ bool HGCalDDDConstants::isValidTrap(int zside, int layer, int irad, int iphi) co
745774 const auto & indx = getIndex (layer, true );
746775 if (indx.first < 0 )
747776 return false ;
748- bool ok = ((irad >= hgpar_->iradMinBH_ [indx.first ]) && (irad <= (hgpar_->iradMaxBH_ [indx.first ] + 1 )) && (iphi > 0 ) &&
749- (iphi <= hgpar_->scintCells (layer)));
777+ bool ok = ((hgpar_->scintValidRing (indx.first , irad)) && (iphi > 0 ) && (iphi <= hgpar_->scintCells (layer)));
750778 bool valid = ((ok && trapezoidFile ()) ? tileExist (zside, layer, irad, iphi) : ok);
751779#ifdef EDM_ML_DEBUG
752780 bool tileEx = trapezoidFile () ? tileExist (zside, layer, irad, iphi) : true ;
753- edm::LogVerbatim (" HGCalGeomT" ) << " HGCalDDDConstants::isValidityTrap: Input " << zside << " :" << layer << " :" << irad
754- << " :" << iphi << " Range on Ring " << hgpar_->iradMinBH_ [indx.first ] << " :"
755- << (hgpar_->iradMaxBH_ [indx.first ] + 1 )
756- << " Range on phi 0:" << hgpar_->scintCells (layer) << " tileExist " << tileEx
757- << " Valid " << ok << " :" << valid;
781+ edm::LogVerbatim (" HGCalGeomT" ) << " HGCalDDDConstants::isValidityTrap: Input " << zside << " :" << layer << " :" << irad << " :" << iphi << " Range on Ring " << hgpar_->scintValidRing (indx.first , irad) << " Range on phi 0:" << hgpar_->scintCells (layer) << " tileExist " << tileEx << " Valid " << ok << " :" << tileExist (zside, layer, irad, iphi) << " :" << valid;
758782#endif
759783 return valid;
760784}
@@ -977,19 +1001,24 @@ std::pair<float, float> HGCalDDDConstants::locateCellTrap(
9771001 int zside, int lay, int irad, int iphi, bool reco, bool debug) const {
9781002 float x (0 ), y (0 );
9791003 const auto & indx = getIndex (lay, reco);
1004+ edm::LogVerbatim (" HGCalGeom" ) << " locateCellTrap:: Input " << lay << " :" << irad << " :" << iphi << " :" << zside << " :" << reco << " :" << indx.first ;
1005+ debug = true ;
9801006 if (indx.first >= 0 ) {
9811007 int ir = std::abs (irad);
9821008 int type = hgpar_->scintType (lay);
9831009 double phi = (iphi - 0.5 ) * indx.second ;
9841010 double z = hgpar_->zLayerHex_ [indx.first ];
9851011 double r = 0.5 * (hgpar_->radiusLayer_ [type][ir - 1 ] + hgpar_->radiusLayer_ [type][ir]);
9861012 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 ;
1013+ if (debug) {
1014+ std::ostringstream st1;
1015+ st1 << " locateCellTrap:: Input " << lay << " :" << irad << " :" << iphi << " :" << reco << " indx " << indx.first << " IR " << ir << " :" ;
1016+ if (hgpar_->scintFine (indx.first ))
1017+ st1 << hgpar_->iradMinBHFine_ [indx.first ] << " :" << hgpar_->iradMaxBHFine_ [indx.first ];
1018+ else
1019+ st1 << hgpar_->iradMinBH_ [indx.first ] << " :" << hgpar_->iradMaxBH_ [indx.first ];
1020+ edm::LogVerbatim (" HGCalGeom" ) << st1.str () << " Type " << type << " Z " << indx.first << " :" << z << " phi " << phi << " :" << convertRadToDeg (phi) << " R " << r << " :" << range.first << " :" << range.second << " file " << (!trapezoidFile ()) << " CassetteMode " << cassetteMode ();
1021+ }
9931022 if (!trapezoidFile ())
9941023 r = std::max (range.first , std::min (r, range.second ));
9951024 x = r * std::cos (phi);
0 commit comments