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

Run3-sim76 Introduce printing atrributes of Solid for testing Geometry #32221

Merged
merged 2 commits into from Nov 21, 2020
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
9 changes: 6 additions & 3 deletions SimG4CMS/Calo/interface/CaloDetInfo.h
Expand Up @@ -4,26 +4,29 @@
#include <string>
#include <vector>
#include "G4ThreeVector.hh"
#include "G4VSolid.hh"

class CaloDetInfo {
public:
CaloDetInfo(unsigned int id, std::string name, G4ThreeVector pos, std::vector<double> par);
CaloDetInfo(unsigned int id, const std::string& name, G4ThreeVector pos, const G4VSolid* sol, bool flag = false);
CaloDetInfo();
CaloDetInfo(const CaloDetInfo&);
~CaloDetInfo() = default;

uint32_t id() const { return id_; }
std::string name() const { return name_; }
G4ThreeVector pos() const { return pos_; }
std::vector<double> par() const { return par_; }
const G4VSolid* solid() const { return solid_; }
bool flag() const { return flag_; }

bool operator<(const CaloDetInfo& info) const;

private:
uint32_t id_;
std::string name_;
G4ThreeVector pos_;
std::vector<double> par_;
const G4VSolid* solid_;
bool flag_;
};

class CaloDetInfoLess {
Expand Down
6 changes: 5 additions & 1 deletion SimG4CMS/Calo/interface/HcalDumpGeometry.h
Expand Up @@ -19,7 +19,10 @@

class HcalDumpGeometry {
public:
explicit HcalDumpGeometry(const std::vector<std::string_view> &, const HcalNumberingFromDDD *, bool);
explicit HcalDumpGeometry(const std::vector<std::string_view> &,
const HcalNumberingFromDDD *,
bool,
bool flag = false);
~HcalDumpGeometry() = default;

void update();
Expand All @@ -31,6 +34,7 @@ class HcalDumpGeometry {
const HcalNumberingFromDDD *numberingFromDDD_;
std::unique_ptr<HcalNumberingScheme> numberingScheme_;
std::vector<std::string> names_;
const bool flag_;
G4NavigationHistory fHistory_;
std::vector<CaloDetInfo> infoVec_;
};
Expand Down
17 changes: 6 additions & 11 deletions SimG4CMS/Calo/src/CaloDetInfo.cc
Expand Up @@ -2,28 +2,23 @@

#include <iomanip>

//#define EDM_ML_DEBUG
CaloDetInfo::CaloDetInfo(unsigned int id, const std::string& name, G4ThreeVector pos, const G4VSolid* solid, bool flag)
: id_(id), name_(name), pos_(pos), solid_(solid), flag_(flag) {}

CaloDetInfo::CaloDetInfo(unsigned int id, std::string name, G4ThreeVector pos, std::vector<double> par)
: id_(id), name_(name), pos_(pos), par_(par) {}

CaloDetInfo::CaloDetInfo() : id_(0), name_(""), pos_(G4ThreeVector(0, 0, 0)) {}
CaloDetInfo::CaloDetInfo() : id_(0), name_(""), pos_(G4ThreeVector(0, 0, 0)), solid_(nullptr), flag_(false) {}

CaloDetInfo::CaloDetInfo(const CaloDetInfo& right) {
id_ = right.id_;
name_ = right.name_;
pos_ = right.pos_;
par_ = right.par_;
solid_ = right.solid_;
flag_ = right.flag_;
}

bool CaloDetInfo::operator<(const CaloDetInfo& info) const { return (id_ < info.id()) ? false : true; }

std::ostream& operator<<(std::ostream& os, const CaloDetInfo& info) {
os << info.name() << " Id 0x" << std::hex << info.id() << std::dec << " Position " << std::setprecision(4)
<< info.pos() << " with " << info.par().size() << " parameters:";
#ifdef EDM_ML_DEBUG
for (unsigned int k = 0; k < info.par().size(); ++k)
os << " [" << k << "] " << std::setprecision(5) << info.par()[k];
#endif
<< info.pos();
return os;
}
2 changes: 2 additions & 0 deletions SimG4CMS/Calo/src/ECalSD.cc
Expand Up @@ -130,6 +130,8 @@ ECalSD::ECalSD(const std::string& name,
} else {
edm::LogWarning("EcalSim") << "ECalSD: ReadoutName not supported";
}
int type0 = dumpGeom / 1000;
type += (10 * type0);

if (scheme)
setNumberingScheme(scheme);
Expand Down
37 changes: 13 additions & 24 deletions SimG4CMS/Calo/src/EcalDumpGeometry.cc
Expand Up @@ -39,6 +39,10 @@ void EcalDumpGeometry::update() {
unsigned int k(0);
for (const auto& info : infoVec_) {
edm::LogVerbatim("EcalGeom") << "[" << k << "] " << info;
if (info.flag() && (info.solid() != nullptr)) {
info.solid()->DumpInfo();
G4cout << G4endl;
}
++k;
}
}
Expand All @@ -52,6 +56,7 @@ void EcalDumpGeometry::dumpTouch(G4VPhysicalVolume* pv, unsigned int leafDepth)
G4ThreeVector globalpoint = fHistory_.GetTopTransform().Inverse().TransformPoint(G4ThreeVector(0, 0, 0));
G4LogicalVolume* lv = pv->GetLogicalVolume();

bool flag = ((type_ / 10) % 10 > 0);
std::string lvname = (static_cast<std::string>(dd4hep::dd::noNamespace(lv->GetName())));
std::string namex = lvname.substr(0, 4);
EcalBaseNumber theBaseNumber;
Expand All @@ -73,33 +78,17 @@ void EcalDumpGeometry::dumpTouch(G4VPhysicalVolume* pv, unsigned int leafDepth)
ss << " " << ii << " " << name << ":" << fHistory_.GetVolume(ii)->GetCopyNo();
#endif
}
uint32_t id = ((type_ == 0) ? ebNumbering_.getUnitID(theBaseNumber)
: ((type_ == 1) ? eeNumbering_.getUnitID(theBaseNumber)
: esNumbering_.getUnitID(theBaseNumber)));
uint32_t id = (((type_ % 10) == 0) ? ebNumbering_.getUnitID(theBaseNumber)
: (((type_ % 10) == 1) ? eeNumbering_.getUnitID(theBaseNumber)
: esNumbering_.getUnitID(theBaseNumber)));
#ifdef EDM_ML_DEBUG
edm::LogVerbatim("EcalGeom") << " Field: " << ss.str() << " ID " << std::hex << id << std::dec;
#endif
std::vector<double> pars;
if (type_ > 1) {
G4Box* solid = static_cast<G4Box*>(lv->GetSolid());
pars.emplace_back(solid->GetXHalfLength());
pars.emplace_back(solid->GetYHalfLength());
pars.emplace_back(solid->GetZHalfLength());
} else {
G4Trap* solid = static_cast<G4Trap*>(lv->GetSolid());
pars.emplace_back(solid->GetZHalfLength());
pars.emplace_back(solid->GetYHalfLength1());
pars.emplace_back(solid->GetXHalfLength1());
pars.emplace_back(solid->GetXHalfLength2());
double a1 = (std::abs(solid->GetTanAlpha1()) > 1.e-5) ? solid->GetTanAlpha1() : 0.0;
pars.emplace_back(a1);
pars.emplace_back(solid->GetYHalfLength2());
pars.emplace_back(solid->GetXHalfLength3());
pars.emplace_back(solid->GetXHalfLength4());
double a2 = (std::abs(solid->GetTanAlpha2()) > 1.e-5) ? solid->GetTanAlpha2() : 0.0;
pars.emplace_back(a2);
}
infoVec_.emplace_back(CaloDetInfo(id, noRefl(lvname), globalpoint, pars));
G4VSolid* solid = (lv->GetSolid());
if (((type_ / 100) % 10) != 0)
infoVec_.emplace_back(CaloDetInfo(id, noRefl(lvname), globalpoint, solid, flag));
else
infoVec_.emplace_back(CaloDetInfo(id, lvname, globalpoint, solid, flag));
}
break;
}
Expand Down
2 changes: 1 addition & 1 deletion SimG4CMS/Calo/src/HCalSD.cc
Expand Up @@ -327,7 +327,7 @@ HCalSD::HCalSD(const std::string& name,
if (dumpGeom) {
const HcalNumberingFromDDD* hcn = new HcalNumberingFromDDD(hcalConstants_);
const auto& lvNames = clg.logicalNames(name);
HcalDumpGeometry geom(lvNames, hcn, testNumber);
HcalDumpGeometry geom(lvNames, hcn, testNumber, false);
geom.update();
delete hcn;
}
Expand Down
32 changes: 9 additions & 23 deletions SimG4CMS/Calo/src/HcalDumpGeometry.cc
Expand Up @@ -9,8 +9,9 @@

HcalDumpGeometry::HcalDumpGeometry(const std::vector<std::string_view>& names,
const HcalNumberingFromDDD* hcn,
bool test)
: numberingFromDDD_(hcn) {
bool test,
bool flag)
: numberingFromDDD_(hcn), flag_(flag) {
if (test)
numberingScheme_.reset(dynamic_cast<HcalNumberingScheme*>(new HcalTestNumberingScheme(false)));
else
Expand Down Expand Up @@ -45,6 +46,10 @@ void HcalDumpGeometry::update() {
unsigned int k(0);
for (const auto& info : infoVec_) {
edm::LogVerbatim("HCalGeom") << "[" << k << "] " << info;
if (info.flag() && (info.solid() != nullptr)) {
info.solid()->DumpInfo();
G4cout << G4endl;
}
++k;
}
}
Expand Down Expand Up @@ -78,27 +83,8 @@ void HcalDumpGeometry::dumpTouch(G4VPhysicalVolume* pv, unsigned int leafDepth)
<< std::dec;
#endif

std::vector<double> pars;
if ((namex == "HBS") || (namex == "HTS")) {
G4Box* solid = static_cast<G4Box*>(lv->GetSolid());
pars.emplace_back(solid->GetXHalfLength());
pars.emplace_back(solid->GetYHalfLength());
pars.emplace_back(solid->GetZHalfLength());
} else if ((namex == "HES") || (namex == "HVQ")) {
G4Trap* solid = static_cast<G4Trap*>(lv->GetSolid());
pars.emplace_back(solid->GetZHalfLength());
pars.emplace_back(solid->GetYHalfLength1());
pars.emplace_back(solid->GetXHalfLength1());
pars.emplace_back(solid->GetXHalfLength2());
double a1 = (std::abs(solid->GetTanAlpha1()) > 1.e-5) ? solid->GetTanAlpha1() : 0.0;
pars.emplace_back(a1);
pars.emplace_back(solid->GetYHalfLength2());
pars.emplace_back(solid->GetXHalfLength3());
pars.emplace_back(solid->GetXHalfLength4());
double a2 = (std::abs(solid->GetTanAlpha2()) > 1.e-5) ? solid->GetTanAlpha2() : 0.0;
pars.emplace_back(a2);
}
infoVec_.emplace_back(CaloDetInfo(id, getNameNoNS(lvname), globalpoint, pars));
G4VSolid* solid = lv->GetSolid();
infoVec_.emplace_back(CaloDetInfo(id, getNameNoNS(lvname), globalpoint, solid, flag_));
}
break;
}
Expand Down
13 changes: 7 additions & 6 deletions SimG4CMS/Calo/test/python/runEcalGeom_cfg.py
@@ -1,14 +1,14 @@
import FWCore.ParameterSet.Config as cms

from Configuration.Eras.Era_Run3_cff import Run3
process = cms.Process('Dump',Run3)
#from Configuration.Eras.Era_Run3_dd4hep_cff import Run3_dd4hep
#process = cms.Process('Dump',Run3_dd4hep)
#from Configuration.Eras.Era_Run3_cff import Run3
#process = cms.Process('Dump',Run3)
from Configuration.Eras.Era_Run3_dd4hep_cff import Run3_dd4hep
process = cms.Process('Dump',Run3_dd4hep)

# import of standard configurations
process.load('FWCore.MessageService.MessageLogger_cfi')
process.load('Configuration.Geometry.GeometryExtended2021_cff')
#process.load('Configuration.Geometry.GeometryDD4hepExtended2021_cff')
#process.load('Configuration.Geometry.GeometryExtended2021_cff')
process.load('Configuration.Geometry.GeometryDD4hepExtended2021_cff')
process.load('Configuration.StandardSequences.Services_cff')
process.load('SimGeneral.HepPDTESSource.pythiapdt_cfi')
process.load('Configuration.EventContent.EventContent_cff')
Expand All @@ -23,6 +23,7 @@
if hasattr(process,'MessageLogger'):
process.MessageLogger.categories.append('EcalGeom')
process.MessageLogger.categories.append('EcalSim')
process.MessageLogger.categories.append('G4cout')

process.maxEvents = cms.untracked.PSet(
input = cms.untracked.int32(1),
Expand Down