Skip to content

Commit 5a6aa95

Browse files
authored
Merge pull request #45095 from bsunanda/Phase2-hgx357
Phase2-hgx357 Add a new version of HGCalCellOffest to provide a more correct results for the cell areas
2 parents 57ee216 + 56c003b commit 5a6aa95

File tree

8 files changed

+357
-239
lines changed

8 files changed

+357
-239
lines changed

Geometry/HGCalCommonData/interface/HGCalCellOffset.h

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,20 +9,26 @@
99

1010
class HGCalCellOffset {
1111
public:
12-
HGCalCellOffset(double waferSize, int32_t nFine, int32_t nCoarse, double guardRingOffset_, double mouseBiteCut_);
12+
HGCalCellOffset(double waferSize,
13+
int32_t nFine,
14+
int32_t nCoarse,
15+
double guardRingOffset_,
16+
double mouseBiteCut_,
17+
double sizeOffset_);
1318

1419
std::pair<double, double> cellOffsetUV2XY1(int32_t u, int32_t v, int32_t placementIndex, int32_t type);
1520
std::pair<double, double> cellOffsetUV2XY1(
1621
int32_t u, int32_t v, int32_t placementIndex, int32_t type, int32_t partialType);
1722
double cellAreaUV(int32_t u, int32_t v, int32_t placementIndex, int32_t type, bool reco);
23+
double cellAreaUV(int32_t u, int32_t v, int32_t placementIndex, int32_t type, int32_t partialType, bool reco);
1824

1925
private:
2026
const double sqrt3_ = std::sqrt(3.0);
2127
const double sqrt3By2_ = (0.5 * sqrt3_);
2228
std::array<std::array<std::array<double, 6>, 6>, 2> offsetX, offsetY;
2329
std::array<std::array<std::array<double, 6>, 11>, 2> offsetPartialX, offsetPartialY;
2430
int32_t ncell_[2];
25-
double cellX_[2], cellY_[2], fullArea[2], cellArea[2][6];
31+
double cellX_[2], cellY_[2], fullArea[2], cellArea[2][6], cellAreaPartial[2][11];
2632
std::unique_ptr<HGCalCell> hgcalcell_;
2733
};
2834

Geometry/HGCalCommonData/interface/HGCalDDDConstants.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
#include "DataFormats/GeometryVector/interface/GlobalPoint.h"
1818
#include "Geometry/HGCalCommonData/interface/HGCalCassette.h"
1919
#include "Geometry/HGCalCommonData/interface/HGCalCell.h"
20+
#include "Geometry/HGCalCommonData/interface/HGCalCellOffset.h"
2021
#include "Geometry/HGCalCommonData/interface/HGCalCellUV.h"
2122
#include "Geometry/HGCalCommonData/interface/HGCalGeometryMode.h"
2223
#include "Geometry/HGCalCommonData/interface/HGCalGeomTools.h"
@@ -59,6 +60,7 @@ class HGCalDDDConstants {
5960
}
6061
std::pair<double, double> cellEtaPhiTrap(int type, int irad) const;
6162
bool cellInLayer(int waferU, int waferV, int cellU, int cellV, int lay, int zside, bool reco) const;
63+
const HGCalCellOffset* cellOffset() const { return cellOffset_.get(); }
6264
double cellSizeHex(int type) const;
6365
inline std::pair<double, double> cellSizeTrap(int type, int irad) const {
6466
return std::make_pair(hgpar_->radiusLayer_[type][irad - 1], hgpar_->radiusLayer_[type][irad]);
@@ -258,6 +260,7 @@ class HGCalDDDConstants {
258260
HGCalCassette hgcassette_;
259261
std::unique_ptr<HGCalCell> hgcell_;
260262
std::unique_ptr<HGCalCellUV> hgcellUV_;
263+
std::unique_ptr<HGCalCellOffset> cellOffset_;
261264
HGCalGeomTools geomTools_;
262265
constexpr static double k_horizontalShift = 1.0;
263266
constexpr static float dPhiMin = 0.02;

Geometry/HGCalCommonData/src/HGCalCellOffset.cc

Lines changed: 319 additions & 225 deletions
Large diffs are not rendered by default.

Geometry/HGCalCommonData/src/HGCalDDDConstants.cc

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,11 +35,21 @@ HGCalDDDConstants::HGCalDDDConstants(const HGCalParameters* hp, const std::strin
3535
hgcell_ = std::make_unique<HGCalCell>(2.0 * rmaxT_, hgpar_->nCellsFine_, hgpar_->nCellsCoarse_);
3636
hgcellUV_ = std::make_unique<HGCalCellUV>(
3737
2.0 * rmax_, hgpar_->sensorSeparation_, hgpar_->nCellsFine_, hgpar_->nCellsCoarse_);
38+
cellOffset_ = std::make_unique<HGCalCellOffset>(hgpar_->waferSize_,
39+
hgpar_->nCellsFine_,
40+
hgpar_->nCellsCoarse_,
41+
hgpar_->guardRingOffset_,
42+
hgpar_->mouseBite_,
43+
hgpar_->sensorSizeOffset_);
3844
#ifdef EDM_ML_DEBUG
3945
edm::LogVerbatim("HGCalGeom") << "rmax_ " << rmax_ << ":" << rmaxT_ << ":" << hexside_ << ":" << hexsideT_
4046
<< " CellSize " << 0.5 * HGCalParameters::k_ScaleFromDDD * hgpar_->cellSize_[0] << ":"
4147
<< 0.5 * HGCalParameters::k_ScaleFromDDD * hgpar_->cellSize_[1];
4248
#endif
49+
} else {
50+
hgcell_.reset();
51+
hgcellUV_.reset();
52+
cellOffset_.reset();
4353
}
4454
if (cassetteMode()) {
4555
hgcassette_.setParameter(hgpar_->cassettes_, hgpar_->cassetteShift_);

Geometry/HGCalCommonData/test/HGCalCellOffsetTester.cc

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,7 @@ class HGCalCellOffsetTester : public edm::one::EDAnalyzer<> {
6262
const int partial_;
6363
const double mouseBiteCut_;
6464
const double guardRingOffset_;
65+
const double sizeOffset_;
6566
std::ofstream outputFile;
6667
};
6768

@@ -71,10 +72,11 @@ HGCalCellOffsetTester::HGCalCellOffsetTester(const edm::ParameterSet& iC)
7172
placeIndex_(iC.getParameter<int>("cellPlacementIndex")),
7273
partial_(iC.getParameter<int>("cellType")),
7374
mouseBiteCut_(iC.getParameter<double>("mouseBiteCut")),
74-
guardRingOffset_(iC.getParameter<double>("guardRingOffset")) {
75+
guardRingOffset_(iC.getParameter<double>("guardRingOffset")),
76+
sizeOffset_(iC.getParameter<double>("sizeOffset")) {
7577
edm::LogVerbatim("HGCalGeom") << "Test positions for wafer of size " << waferSize_ << " Type " << waferType_
7678
<< " Placement Index " << placeIndex_ << " GuardRing offset " << guardRingOffset_
77-
<< " Mousebite cut " << mouseBiteCut_;
79+
<< " Mousebite cut " << mouseBiteCut_ << " SizeOffset " << sizeOffset_;
7880

7981
outputFile.open("nand.csv");
8082
if (!outputFile.is_open()) {
@@ -89,9 +91,10 @@ void HGCalCellOffsetTester::fillDescriptions(edm::ConfigurationDescriptions& des
8991
desc.add<double>("waferSize", 167.4408);
9092
desc.add<int>("waferType", 0);
9193
desc.add<int>("cellPlacementIndex", 11);
92-
desc.add<int>("cellType", 22);
94+
desc.add<int>("cellType", 0);
9395
desc.add<double>("mouseBiteCut", 5.0);
9496
desc.add<double>("guardRingOffset", 0.9);
97+
desc.add<double>("sizeOffset", 0.435);
9598
descriptions.add("hgcalCellOffsetTester", desc);
9699
}
97100

@@ -101,7 +104,7 @@ void HGCalCellOffsetTester::analyze(const edm::Event&, const edm::EventSetup&) {
101104
int nCells = (waferType_ == 0) ? nFine : nCoarse;
102105
HGCalCellUV wafer(waferSize_, 0.0, nFine, nCoarse);
103106
HGCalCell wafer2(waferSize_, nFine, nCoarse);
104-
HGCalCellOffset offset(waferSize_, nFine, nCoarse, guardRingOffset_, mouseBiteCut_);
107+
HGCalCellOffset offset(waferSize_, nFine, nCoarse, guardRingOffset_, mouseBiteCut_, sizeOffset_);
105108
edm::LogVerbatim("HGCalGeom") << "\nHGCalPartialCellTester:: nCells " << nCells << " and placement index "
106109
<< placeIndex_ << "\n\n";
107110
for (int ui = 0; ui < 2 * nCells; ui++) {
@@ -121,17 +124,19 @@ void HGCalCellOffsetTester::analyze(const edm::Event&, const edm::EventSetup&) {
121124
// << " ,yoff " << xyOffset.second << comment;
122125

123126
std::pair<double, double> xyOffsetLD = offset.cellOffsetUV2XY1(ui, vi, placeIndex_, waferType_, partial_);
127+
auto area = offset.cellAreaUV(ui, vi, placeIndex_, waferType_, partial_, true);
124128
// std::pair<double, double> xyOffsetHD = offset.cellOffsetUV2XY1HD(ui, vi, placeIndex_, waferType_);
125129
outputFile << xyOffsetLD.first + xy1.first << "," << xyOffsetLD.second + xy1.second << "," << uv1.first << ","
126-
<< uv1.second << "," << std::endl;
130+
<< uv1.second << "," << area << std::endl;
127131

128132
std::string comment = ((uv1.first != ui) || (uv1.second != vi))
129133
? " ***** ERROR (u, v) from the methods dosent match *****"
130134
: "";
131135
edm::LogVerbatim("HGCalGeom") << "u = " << ui << " v = " << vi << " type = " << waferType_
132136
<< " placement index " << placeIndex_ << " u " << uv1.first << " v "
133137
<< uv1.second << " x " << xy1.first << " ,y " << xy1.second << " xoff "
134-
<< xyOffsetLD.first << " ,yoff " << xyOffsetLD.second << comment;
138+
<< xyOffsetLD.first << " ,yoff " << xyOffsetLD.second << " , area " << area
139+
<< comment;
135140
}
136141
}
137142
}

SimG4CMS/Calo/interface/HGCalSD.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@ class HGCalSD : public CaloSD, public Observer<const BeginOfJob *> {
5555
std::string nameX_;
5656
HGCalGeometryMode::GeometryMode geom_mode_;
5757
double eminHit_, slopeMin_, distanceFromEdge_;
58-
double waferSize_, mouseBiteCut_, guardRingOffset_, weight_;
58+
double waferSize_, mouseBiteCut_, guardRingOffset_, sensorSizeOffset_, weight_;
5959
int levelT1_, levelT2_, cornerMinMask_;
6060
bool storeAllG4Hits_;
6161
bool fiducialCut_, rejectMB_, waferRot_, checkID_;

SimG4CMS/Calo/src/CaloSD.cc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -420,7 +420,7 @@ void CaloSD::EndOfEvent(G4HCofThisEvent*) {
420420
if (theHC[k] == nullptr)
421421
edm::LogVerbatim("CaloSim") << "CaloSD: EndofEvent entered for container " << k << " with no entries";
422422
else
423-
edm::LogVerbatim("CaloSim") << "CaloSD: EndofEvent entered for container " << k << " with " << theHC[0]->entries()
423+
edm::LogVerbatim("CaloSim") << "CaloSD: EndofEvent entered for container " << k << " with " << theHC[k]->entries()
424424
<< " entries";
425425
}
426426
#endif

SimG4CMS/Calo/src/HGCalSD.cc

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -279,17 +279,17 @@ void HGCalSD::update(const BeginOfJob* job) {
279279
waferSize_ = hgcons_->waferSize(false);
280280
double mouseBite = hgcons_->mouseBite(false);
281281
guardRingOffset_ = hgcons_->guardRingOffset(false);
282-
double sensorSizeOffset = hgcons_->sensorSizeOffset(false);
282+
sensorSizeOffset_ = hgcons_->sensorSizeOffset(false);
283283
if (useOffset > 0) {
284284
rejectMB_ = true;
285285
fiducialCut_ = true;
286286
}
287-
double mouseBiteNew = (fiducialCut_) ? (mouseBite + guardRingOffset_ + sensorSizeOffset / cos30deg_) : mouseBite;
287+
double mouseBiteNew = (fiducialCut_) ? (mouseBite + guardRingOffset_ + sensorSizeOffset_ / cos30deg_) : mouseBite;
288288
mouseBiteCut_ = waferSize_ * tan30deg_ - mouseBiteNew;
289289
#ifdef EDM_ML_DEBUG
290290
edm::LogVerbatim("HGCSim") << "HGCalSD::Initialized with mode " << geom_mode_ << " Slope cut " << slopeMin_
291291
<< " top Level " << levelT1_ << ":" << levelT2_ << " useSimWt " << useSimWt_ << " wafer "
292-
<< waferSize_ << ":" << mouseBite << ":" << guardRingOffset_ << ":" << sensorSizeOffset
292+
<< waferSize_ << ":" << mouseBite << ":" << guardRingOffset_ << ":" << sensorSizeOffset_
293293
<< ":" << mouseBiteNew << ":" << mouseBiteCut_ << " useOffset " << useOffset
294294
<< " dd4hep " << dd4hep_;
295295
#endif
@@ -337,7 +337,7 @@ void HGCalSD::update(const BeginOfJob* job) {
337337
if ((nHC_ > 1) && calibCells_)
338338
newCollection(collName_[1], ps_);
339339
cellOffset_ = std::make_unique<HGCalCellOffset>(
340-
waferSize_, hgcons_->getUVMax(0), hgcons_->getUVMax(1), guardRingOffset_, mouseBiteCut_);
340+
waferSize_, hgcons_->getUVMax(0), hgcons_->getUVMax(1), guardRingOffset_, mouseBiteCut_, sensorSizeOffset_);
341341
}
342342

343343
void HGCalSD::initRun() {}

0 commit comments

Comments
 (0)