Skip to content

Commit

Permalink
Merge pull request #32221 from bsunanda/run3-sim76
Browse files Browse the repository at this point in the history
Run3-sim76 Introduce printing atrributes of Solid for testing Geometry
  • Loading branch information
cmsbuild committed Nov 21, 2020
2 parents dbfa326 + 77f3424 commit 1bdc240
Show file tree
Hide file tree
Showing 8 changed files with 49 additions and 69 deletions.
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

0 comments on commit 1bdc240

Please sign in to comment.