Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #35563 from bsunanda/Phase2-hgx291
Phase2-hgx291 Bug fix to address rotated layers in D86
- Loading branch information
Showing
11 changed files
with
445 additions
and
70 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Large diffs are not rendered by default.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,87 @@ | ||
#include <cmath> | ||
#include <iostream> | ||
#include <string> | ||
#include <vector> | ||
|
||
#include "CommonTools/UtilAlgos/interface/TFileService.h" | ||
|
||
#include "FWCore/Framework/interface/Frameworkfwd.h" | ||
#include "FWCore/Framework/interface/one/EDAnalyzer.h" | ||
#include "FWCore/Framework/interface/Event.h" | ||
#include "FWCore/Framework/interface/EventSetup.h" | ||
#include "FWCore/MessageLogger/interface/MessageLogger.h" | ||
#include "FWCore/ParameterSet/interface/ParameterSet.h" | ||
#include "FWCore/ParameterSet/interface/ConfigurationDescriptions.h" | ||
|
||
#include "Geometry/Records/interface/IdealGeometryRecord.h" | ||
#include "Geometry/HGCalGeometry/interface/HGCalGeometry.h" | ||
#include "DataFormats/ForwardDetId/interface/HGCSiliconDetId.h" | ||
|
||
class HGCalGeometryRotCheck : public edm::one::EDAnalyzer<edm::one::WatchRuns> { | ||
public: | ||
explicit HGCalGeometryRotCheck(const edm::ParameterSet&); | ||
~HGCalGeometryRotCheck() override = default; | ||
static void fillDescriptions(edm::ConfigurationDescriptions& descriptions); | ||
|
||
void beginRun(edm::Run const&, edm::EventSetup const&) override; | ||
void analyze(edm::Event const& iEvent, edm::EventSetup const&) override {} | ||
void endRun(edm::Run const&, edm::EventSetup const&) override {} | ||
|
||
private: | ||
const std::string nameDetector_; | ||
const edm::ESGetToken<HGCalGeometry, IdealGeometryRecord> geomToken_; | ||
const std::vector<int> layers_; | ||
}; | ||
|
||
HGCalGeometryRotCheck::HGCalGeometryRotCheck(const edm::ParameterSet& iC) | ||
: nameDetector_(iC.getParameter<std::string>("detectorName")), | ||
geomToken_(esConsumes<HGCalGeometry, IdealGeometryRecord, edm::Transition::BeginRun>( | ||
edm::ESInputTag{"", nameDetector_})), | ||
layers_(iC.getParameter<std::vector<int>>("layers")) {} | ||
|
||
void HGCalGeometryRotCheck::fillDescriptions(edm::ConfigurationDescriptions& descriptions) { | ||
edm::ParameterSetDescription desc; | ||
std::vector<int> layer = {27, 28, 29, 30, 31, 32, 33}; | ||
desc.add<std::string>("detectorName", "HGCalHESiliconSensitive"); | ||
desc.add<std::vector<int>>("layers", layer); | ||
descriptions.add("hgcalGeometryRotCheck", desc); | ||
} | ||
|
||
void HGCalGeometryRotCheck::beginRun(const edm::Run&, const edm::EventSetup& iSetup) { | ||
const auto& geomR = iSetup.getData(geomToken_); | ||
const HGCalGeometry* geom = &geomR; | ||
int layerF = *(layers_.begin()); | ||
int layerL = *(--layers_.end()); | ||
int layerOff = geom->topology().dddConstants().getLayerOffset(); | ||
edm::LogVerbatim("HGCalGeom") << nameDetector_ << " with layers in the range " << layerF << ":" << layerL | ||
<< " Offset " << layerOff; | ||
|
||
auto rrF = geom->topology().dddConstants().rangeRLayer(layerF - layerOff, true); | ||
auto rrE = geom->topology().dddConstants().rangeRLayer(layerL - layerOff, true); | ||
edm::LogVerbatim("HGCalGeom") << " RFront " << rrF.first << ":" << rrF.second << " RBack " << rrE.first << ":" | ||
<< rrE.second; | ||
double r = rrE.first + 5.0; | ||
const int nPhi = 10; | ||
while (r <= rrF.second) { | ||
for (int k = 0; k < nPhi; ++k) { | ||
double phi = 2.0 * k * M_PI / nPhi; | ||
for (auto lay : layers_) { | ||
double zz = geom->topology().dddConstants().waferZ(lay - layerOff, true); | ||
GlobalPoint global1(r * cos(phi), r * sin(phi), zz); | ||
DetId id = geom->getClosestCellHex(global1, true); | ||
HGCSiliconDetId detId = HGCSiliconDetId(id); | ||
GlobalPoint global2 = geom->getPosition(id); | ||
double dx = global1.x() - global2.x(); | ||
double dy = global1.y() - global2.y(); | ||
double dR = std::sqrt(dx * dx + dy * dy); | ||
edm::LogVerbatim("HGCalGeom") << "Layer: " << lay << " ID " << detId << " I/P " << global1 << " O/P " << global2 | ||
<< " dR " << dR; | ||
} | ||
} | ||
r += 100.0; | ||
} | ||
} | ||
|
||
//define this as a plug-in | ||
#include "FWCore/Framework/interface/MakerMacros.h" | ||
DEFINE_FWK_MODULE(HGCalGeometryRotCheck); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,90 @@ | ||
#include <cmath> | ||
#include <iostream> | ||
#include <string> | ||
#include <vector> | ||
|
||
#include "CommonTools/UtilAlgos/interface/TFileService.h" | ||
|
||
#include "FWCore/Framework/interface/Frameworkfwd.h" | ||
#include "FWCore/Framework/interface/one/EDAnalyzer.h" | ||
#include "FWCore/Framework/interface/Event.h" | ||
#include "FWCore/Framework/interface/EventSetup.h" | ||
#include "FWCore/MessageLogger/interface/MessageLogger.h" | ||
#include "FWCore/ParameterSet/interface/ParameterSet.h" | ||
#include "FWCore/ParameterSet/interface/ConfigurationDescriptions.h" | ||
|
||
#include "Geometry/Records/interface/IdealGeometryRecord.h" | ||
#include "Geometry/HGCalGeometry/interface/HGCalGeometry.h" | ||
#include "DataFormats/ForwardDetId/interface/HGCSiliconDetId.h" | ||
|
||
class HGCalGeometryRotTest : public edm::one::EDAnalyzer<edm::one::WatchRuns> { | ||
public: | ||
explicit HGCalGeometryRotTest(const edm::ParameterSet&); | ||
~HGCalGeometryRotTest() override = default; | ||
static void fillDescriptions(edm::ConfigurationDescriptions& descriptions); | ||
|
||
void beginRun(edm::Run const&, edm::EventSetup const&) override; | ||
void analyze(edm::Event const& iEvent, edm::EventSetup const&) override {} | ||
void endRun(edm::Run const&, edm::EventSetup const&) override {} | ||
|
||
private: | ||
const std::string nameDetector_; | ||
const edm::ESGetToken<HGCalGeometry, IdealGeometryRecord> geomToken_; | ||
const std::vector<int> layers_; | ||
const std::vector<int> waferU_, waferV_, cellU_, cellV_, types_; | ||
}; | ||
|
||
HGCalGeometryRotTest::HGCalGeometryRotTest(const edm::ParameterSet& iC) | ||
: nameDetector_(iC.getParameter<std::string>("detectorName")), | ||
geomToken_(esConsumes<HGCalGeometry, IdealGeometryRecord, edm::Transition::BeginRun>( | ||
edm::ESInputTag{"", nameDetector_})), | ||
layers_(iC.getParameter<std::vector<int>>("layers")), | ||
waferU_(iC.getParameter<std::vector<int>>("waferUs")), | ||
waferV_(iC.getParameter<std::vector<int>>("waferVs")), | ||
cellU_(iC.getParameter<std::vector<int>>("cellUs")), | ||
cellV_(iC.getParameter<std::vector<int>>("cellVs")), | ||
types_(iC.getParameter<std::vector<int>>("types")) {} | ||
|
||
void HGCalGeometryRotTest::fillDescriptions(edm::ConfigurationDescriptions& descriptions) { | ||
edm::ParameterSetDescription desc; | ||
std::vector<int> layer = {27, 28, 29, 30, 31, 32}; | ||
std::vector<int> waferU = {-2, -3, 1, -8, 2, 8}; | ||
std::vector<int> waferV = {0, -2, 3, 0, 9, 0}; | ||
std::vector<int> cellU = {16, 4, 8, 11, 11, 5}; | ||
std::vector<int> cellV = {20, 10, 17, 13, 9, 2}; | ||
std::vector<int> type = {0, 0, 0, 2, 2, 2}; | ||
desc.add<std::string>("detectorName", "HGCalHESiliconSensitive"); | ||
desc.add<std::vector<int>>("layers", layer); | ||
desc.add<std::vector<int>>("waferUs", waferU); | ||
desc.add<std::vector<int>>("waferVs", waferV); | ||
desc.add<std::vector<int>>("cellUs", cellU); | ||
desc.add<std::vector<int>>("cellVs", cellV); | ||
desc.add<std::vector<int>>("types", type); | ||
descriptions.add("hgcalGeometryRotTest", desc); | ||
} | ||
|
||
void HGCalGeometryRotTest::beginRun(const edm::Run&, const edm::EventSetup& iSetup) { | ||
const auto& geomR = iSetup.getData(geomToken_); | ||
const HGCalGeometry* geom = &geomR; | ||
DetId::Detector det = (nameDetector_ == "HGCalEESensitive") ? DetId::HGCalEE : DetId::HGCalHSi; | ||
int layerF = *(layers_.begin()); | ||
int layerL = *(--layers_.end()); | ||
int layerOff = geom->topology().dddConstants().getLayerOffset(); | ||
edm::LogVerbatim("HGCalGeom") << nameDetector_ << " with layers in the range " << layerF << ":" << layerL | ||
<< " Offset " << layerOff << " and for " << waferU_.size() << " wafers and cells"; | ||
|
||
for (unsigned int k = 0; k < waferU_.size(); ++k) { | ||
for (auto lay : layers_) { | ||
HGCSiliconDetId detId(det, 1, types_[k], lay - layerOff, waferU_[k], waferV_[k], cellU_[k], cellV_[k]); | ||
GlobalPoint global = geom->getPosition(DetId(detId)); | ||
auto xy = geom->topology().dddConstants().waferPosition(lay - layerOff, waferU_[k], waferV_[k], true); | ||
edm::LogVerbatim("HGCalGeom") << "Layer: " << lay << " U " << waferU_[k] << " V " << waferV_[k] << " Position (" | ||
<< xy.first << ", " << xy.second << ")"; | ||
edm::LogVerbatim("HGCalGeom") << detId << " Position " << global; | ||
} | ||
} | ||
} | ||
|
||
//define this as a plug-in | ||
#include "FWCore/Framework/interface/MakerMacros.h" | ||
DEFINE_FWK_MODULE(HGCalGeometryRotTest); |
39 changes: 39 additions & 0 deletions
39
Geometry/HGCalGeometry/test/python/testHGCalGeometryRotCheck_cfg.py
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,39 @@ | ||
import FWCore.ParameterSet.Config as cms | ||
|
||
from Configuration.Eras.Era_Phase2C11I13M9_cff import Phase2C11I13M9 | ||
process = cms.Process('PROD',Phase2C11I13M9) | ||
process.load('Configuration.Geometry.GeometryExtended2026D86_cff') | ||
process.load('Configuration.Geometry.GeometryExtended2026D86Reco_cff') | ||
|
||
process.load("SimGeneral.HepPDTESSource.pdt_cfi") | ||
process.load('Geometry.HGCalGeometry.hgcalGeometryRotCheck_cfi') | ||
process.load('FWCore.MessageService.MessageLogger_cfi') | ||
|
||
if hasattr(process,'MessageLogger'): | ||
process.MessageLogger.HGCalGeom=dict() | ||
|
||
process.load("IOMC.RandomEngine.IOMC_cff") | ||
process.RandomNumberGeneratorService.generator.initialSeed = 456789 | ||
|
||
process.source = cms.Source("EmptySource") | ||
|
||
process.generator = cms.EDProducer("FlatRandomEGunProducer", | ||
PGunParameters = cms.PSet( | ||
PartID = cms.vint32(14), | ||
MinEta = cms.double(-3.5), | ||
MaxEta = cms.double(3.5), | ||
MinPhi = cms.double(-3.14159265359), | ||
MaxPhi = cms.double(3.14159265359), | ||
MinE = cms.double(9.99), | ||
MaxE = cms.double(10.01) | ||
), | ||
AddAntiParticle = cms.bool(False), | ||
Verbosity = cms.untracked.int32(0), | ||
firstRun = cms.untracked.uint32(1) | ||
) | ||
|
||
process.maxEvents = cms.untracked.PSet( | ||
input = cms.untracked.int32(1) | ||
) | ||
|
||
process.p1 = cms.Path(process.generator*process.hgcalGeometryRotCheck) |
Oops, something went wrong.