Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Phase2-hgx146 Add a new method for HGCalGeometry and add a test for corners #24409

Merged
merged 1 commit into from
Sep 6, 2018
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import FWCore.ParameterSet.Config as cms

from Geometry.HGCalCommonData.testHGCalXML_cfi import *
from Geometry.CMSCommonData.cmsExtendedGeometry2023D28XML_cfi import *
from Geometry.TrackerNumberingBuilder.trackerNumberingGeometry_cfi import *
from Geometry.HcalCommonData.hcalDDConstants_cff import *
from Geometry.HGCalCommonData.hgcalParametersInitialization_cfi import *
Expand Down
17 changes: 7 additions & 10 deletions Geometry/HGCalCommonData/test/dumpExtended2023HGCalGeometry_cfg.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,16 +2,12 @@

process = cms.Process("GEODUMP")
process.load("Geometry.HGCalCommonData.testGeometryExtended_cff")
process.load('FWCore.MessageService.MessageLogger_cfi')

process.load("FWCore.MessageService.MessageLogger_cfi")

process.MessageLogger = cms.Service("MessageLogger",
debugModules = cms.untracked.vstring('*'),
destinations = cms.untracked.vstring('cout'),
cout = cms.untracked.PSet( threshold = cms.untracked.string('DEBUG'),
noLineBreaks = cms.untracked.bool(True)
)
)
if 'MessageLogger' in process.__dict__:
process.MessageLogger.categories.append('G4cerr')
process.MessageLogger.categories.append('G4cout')
process.MessageLogger.categories.append('HGCalGeom')

process.source = cms.Source("EmptySource")

Expand All @@ -22,6 +18,7 @@
level = cms.untracked.int32(14)
))

process.dump = cms.EDAnalyzer("DumpSimGeometry")
process.dump = cms.EDAnalyzer("DumpSimGeometry",
outputFileName = cms.untracked.string('CMS2023D28.root'))

process.p = cms.Path(process.dump)
1 change: 1 addition & 0 deletions Geometry/HGCalGeometry/interface/HGCalGeometry.h
Original file line number Diff line number Diff line change
Expand Up @@ -78,6 +78,7 @@ class HGCalGeometry final: public CaloSubdetectorGeometry {

/// Returns the corner points of this cell's volume.
CornersVec getCorners( const DetId& id ) const;
CornersVec get8Corners( const DetId& id ) const;

// avoid sorting set in base class
const std::vector<DetId>& getValidDetIds( DetId::Detector det = DetId::Detector(0), int subdet = 0) const override { return m_validIds; }
Expand Down
41 changes: 39 additions & 2 deletions Geometry/HGCalGeometry/src/HGCalGeometry.cc
Original file line number Diff line number Diff line change
Expand Up @@ -320,7 +320,7 @@ HGCalGeometry::CornersVec HGCalGeometry::getCorners(const DetId& id) const {
static const int signx[] = {-1,-1,1,1,-1,-1,1,1};
static const int signy[] = {-1,1,1,-1,-1,1,1,-1};
static const int signz[] = {-1,-1,-1,-1,1,1,1,1};
for (unsigned int i = 0; i != ncorner; ++i) {
for (unsigned int i = 0; i < ncorner; ++i) {
const HepGeom::Point3D<float> lcoord(xy.first+signx[i]*dx,xy.second+signy[i]*dx,signz[i]*dz);
co[i] = m_cellVec2[cellIndex].getPosition(lcoord);
}
Expand All @@ -331,7 +331,7 @@ HGCalGeometry::CornersVec HGCalGeometry::getCorners(const DetId& id) const {
static const int signx[] = {0,-1,-1,0,1,1,0,-1,-1,0,1,1};
static const int signy[] = {-2,-1,1,2,1,-1,-2,-1,1,2,1,-1};
static const int signz[] = {-1,-1,-1,-1,-1,-1,1,1,1,1,1,1};
for (unsigned int i = 0; i != ncorner; ++i) {
for (unsigned int i = 0; i < ncorner; ++i) {
const HepGeom::Point3D<float> lcoord(xy.first+signx[i]*dx,xy.second+signy[i]*dy,signz[i]*dz);
co[i] = m_cellVec[cellIndex].getPosition(lcoord);
}
Expand All @@ -340,6 +340,43 @@ HGCalGeometry::CornersVec HGCalGeometry::getCorners(const DetId& id) const {
return co;
}

HGCalGeometry::CornersVec HGCalGeometry::get8Corners(const DetId& id) const {

unsigned int ncorner = FlatTrd::ncorner_;
HGCalGeometry::CornersVec co (ncorner, GlobalPoint(0,0,0));
unsigned int cellIndex = indexFor(id);
if ((cellIndex < m_cellVec.size() && m_det != DetId::HGCalHSc) ||
(cellIndex < m_cellVec2.size() && m_det == DetId::HGCalHSc)) {
HGCalTopology::DecodedDetId id_ = m_topology.decode(id);
std::pair<float,float> xy;
if ((mode_ == HGCalGeometryMode::Hexagon) ||
(mode_ == HGCalGeometryMode::HexagonFull)) {
xy = m_topology.dddConstants().locateCellHex(id_.iCell1,id_.iSec1,true);
} else if (mode_ == HGCalGeometryMode::Trapezoid) {
xy = m_topology.dddConstants().locateCellTrap(id_.iLay,id_.iSec1,
id_.iCell1,true);
} else {
xy = m_topology.dddConstants().locateCell(id_.iLay,id_.iSec1,id_.iSec2,
id_.iCell1,id_.iCell2,true,false);
}
float dx = ((m_det == DetId::HGCalHSc) ? 0.5*m_cellVec2[cellIndex].param()[11] :
m_cellVec[cellIndex].param()[1]);
float dz = ((m_det == DetId::HGCalHSc) ? m_cellVec2[cellIndex].param()[0] :
m_cellVec[cellIndex].param()[0]);
static const int signx[] = {-1,-1,1,1,-1,-1,1,1};
static const int signy[] = {-1,1,1,-1,-1,1,1,-1};
static const int signz[] = {-1,-1,-1,-1,1,1,1,1};
for (unsigned int i = 0; i < ncorner; ++i) {
const HepGeom::Point3D<float> lcoord(xy.first+signx[i]*dx,
xy.second+signy[i]*dx,signz[i]*dz);
co[i] = ((m_det == DetId::HGCalHSc) ?
(m_cellVec2[cellIndex].getPosition(lcoord)) :
(m_cellVec[cellIndex].getPosition(lcoord)));
}
}
return co;
}

DetId HGCalGeometry::getClosestCell(const GlobalPoint& r) const {
unsigned int cellIndex = getClosestCellIndex(r);
if ((cellIndex < m_cellVec.size() && m_det != DetId::HGCalHSc) ||
Expand Down
76 changes: 76 additions & 0 deletions Geometry/HGCalGeometry/test/HGCalGeometryCornerTester.cc
Original file line number Diff line number Diff line change
@@ -0,0 +1,76 @@
#include <iostream>
#include <string>
#include <vector>

#include "FWCore/ParameterSet/interface/ParameterSet.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/Framework/interface/ESTransientHandle.h"
#include "FWCore/Framework/interface/ESHandle.h"
#include "FWCore/Framework/interface/MakerMacros.h"

#include "Geometry/Records/interface/IdealGeometryRecord.h"
#include "Geometry/HGCalGeometry/interface/HGCalGeometry.h"
#include "DataFormats/ForwardDetId/interface/HGCalDetId.h"
#include "DataFormats/ForwardDetId/interface/HGCScintillatorDetId.h"
#include "DataFormats/ForwardDetId/interface/HGCSiliconDetId.h"

class HGCalGeometryCornerTester : public edm::one::EDAnalyzer<> {
public:
explicit HGCalGeometryCornerTester(const edm::ParameterSet& );
~HGCalGeometryCornerTester() override;

void beginJob() override {}
void analyze(edm::Event const& iEvent, edm::EventSetup const&) override;
void endJob() override {}

private:
void doTest(const HGCalGeometry* geom);
const std::string name;
};

HGCalGeometryCornerTester::HGCalGeometryCornerTester(const edm::ParameterSet& iC) : name(iC.getParameter<std::string>("Detector")) { }


HGCalGeometryCornerTester::~HGCalGeometryCornerTester() {}

void HGCalGeometryCornerTester::analyze(const edm::Event& ,
const edm::EventSetup& iSetup ) {

edm::ESHandle<HGCalGeometry> geomH;
iSetup.get<IdealGeometryRecord>().get(name,geomH);
const HGCalGeometry* geom = (geomH.product());
if (!geomH.isValid()) {
std::cout << "Cannot get valid HGCalGeometry Object for " << name
<< std::endl;
} else {
doTest(geom);
}
}

void HGCalGeometryCornerTester::doTest(const HGCalGeometry* geom) {

const std::vector<DetId>& ids = geom->getValidDetIds();
std::cout << "doTest: " << ids.size() << " valid ids for "
<< geom->cellElement() << std::endl;
unsigned int kount(0);
for (auto const& id : ids) {
std::cout << "[" << kount << "] ";
if (id.det() == DetId::Forward) std::cout <<HGCalDetId(id);
else if (id.det() == DetId::HGCalHSc) std::cout <<HGCScintillatorDetId(id);
else std::cout <<HGCSiliconDetId(id);
std::cout << std::endl;
const auto cor = geom->getCorners(id);
std::cout << cor.size() << " Corners:";
for (unsigned k=0; k<cor.size(); ++k)
std::cout << " [" << k << "] " << cor[k];
std::cout << std::endl;
++kount;
}
}

//define this as a plug-in
DEFINE_FWK_MODULE(HGCalGeometryCornerTester);
57 changes: 57 additions & 0 deletions Geometry/HGCalGeometry/test/python/testHGCalCorner_cfg.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
import FWCore.ParameterSet.Config as cms

process = cms.Process("PROD")
process.load("SimGeneral.HepPDTESSource.pdt_cfi")

#process.load("Geometry.CMSCommonData.cmsExtendedGeometry2023D17XML_cfi")
#process.load("Geometry.HGCalCommonData.hgcalV6NumberingInitialization_cfi")
#process.load("Geometry.HGCalCommonData.hgcalV6ParametersInitialization_cfi")
#process.load("Geometry.CaloEventSetup.HGCalV6Topology_cfi")
process.load("Geometry.HGCalCommonData.testHGCXML_cfi")
process.load("Geometry.HGCalCommonData.hgcalParametersInitialization_cfi")
process.load("Geometry.HGCalCommonData.hgcalNumberingInitialization_cfi")
process.load("Geometry.CaloEventSetup.HGCalV9Topology_cfi")
process.load("Geometry.HGCalGeometry.HGCalGeometryESProducer_cfi")
process.load('FWCore.MessageService.MessageLogger_cfi')

if hasattr(process,'MessageLogger'):
process.MessageLogger.categories.append('HGCalGeom')

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.prodEE = cms.EDAnalyzer("HGCalGeometryCornerTester",
Detector = cms.string("HGCalEESensitive"),
)

process.prodHEF = process.prodEE.clone(
Detector = "HGCalHESiliconSensitive",
)

process.prodHEB = process.prodEE.clone(
Detector = "HGCalHEScintillatorSensitive",
)

#process.p1 = cms.Path(process.generator*process.prodEE*process.prodHEF)
process.p1 = cms.Path(process.generator*process.prodEE*process.prodHEF*process.prodHEB)