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

DD4hep: Allow Multiple EventSetup Records #25652

Merged
merged 2 commits into from Jan 15, 2019
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
48 changes: 18 additions & 30 deletions DetectorDescription/DDCMS/plugins/DDCMSDetector.cc
Expand Up @@ -25,49 +25,37 @@ class DDCMSDetector : public edm::one::EDAnalyzer<> {
void analyze( edm::Event const& iEvent, edm::EventSetup const& ) override;
void endJob() override;

private:

std::string m_confGeomXMLFiles;
std::vector< std::string > m_relFiles;
std::vector< std::string > m_files;
private:
string m_label;
};

DDCMSDetector::DDCMSDetector( const edm::ParameterSet& iConfig )
{
m_confGeomXMLFiles = edm::FileInPath( iConfig.getParameter<std::string>( "confGeomXMLFiles" )).fullPath();

m_relFiles = iConfig.getParameter<std::vector<std::string> >( "geomXMLFiles" );
for( const auto& it : m_relFiles ) {
edm::FileInPath fp( it );
m_files.emplace_back( fp.fullPath());
}
}
DDCMSDetector::DDCMSDetector(const edm::ParameterSet& iConfig)
: m_label(iConfig.getUntrackedParameter<string>("fromDataLabel", ""))
{}

void
DDCMSDetector::analyze( const edm::Event&, const edm::EventSetup& iEventSetup)
{
edm::ESTransientHandle<DDDetector> det;
iEventSetup.get<DetectorDescriptionRcd>().get(det);
iEventSetup.get<DetectorDescriptionRcd>().get(m_label, det);

cout << "Iterate over the detectors:\n";
for( auto const& it : det->description->detectors()) {
dd4hep::DetElement det(it.second);
cout << it.first << ": " << det.path() << "\n";
}
cout << "..done!\n";

edm::ESTransientHandle<DDVectorRegistry> registry;
iEventSetup.get<DDVectorRegistryRcd>().get(registry);

for( const auto& it : m_files )
std::cout << it << std::endl;
iEventSetup.get<DDVectorRegistryRcd>().get(m_label, registry);

std::cout << "DD Vector Registry size: " << registry->vectors.size() << "\n";
cout << "DD Vector Registry size: " << registry->vectors.size() << "\n";
for( const auto& p: registry->vectors ) {
std::cout << " " << p.first << " => ";
cout << " " << p.first << " => ";
for( const auto& i : p.second )
std::cout << i << ", ";
std::cout << '\n';
}
std::cout << "Iterate over the detectors:\n";
for( auto const& it : det->description->detectors()) {
dd4hep::DetElement det(it.second);
std::cout << it.first << ": " << det.path() << "\n";
cout << i << ", ";
cout << '\n';
}
std::cout << "..done!\n";
}

void
Expand Down
18 changes: 11 additions & 7 deletions DetectorDescription/DDCMS/plugins/DDDetectorESProducer.cc
Expand Up @@ -46,14 +46,16 @@ class DDDetectorESProducer : public edm::ESProducer,
const edm::IOVSyncValue&, edm::ValidityInterval&) override;

private:
std::string m_confGeomXMLFiles;
string m_confGeomXMLFiles;
string m_label;
};

DDDetectorESProducer::DDDetectorESProducer(const edm::ParameterSet& iConfig)
: m_confGeomXMLFiles(iConfig.getParameter<edm::FileInPath>("confGeomXMLFiles").fullPath())
: m_confGeomXMLFiles(iConfig.getParameter<edm::FileInPath>("confGeomXMLFiles").fullPath()),
m_label(iConfig.getParameter<std::string>("label"))
{
setWhatProduced(this);
findingRecord<DetectorDescriptionRcd>();
setWhatProduced(this, m_label);
findingRecord<DetectorDescriptionRcd>();
}

DDDetectorESProducer::~DDDetectorESProducer()
Expand All @@ -66,6 +68,7 @@ DDDetectorESProducer::fillDescriptions(edm::ConfigurationDescriptions & descript
edm::ParameterSetDescription desc;

desc.add<edm::FileInPath>("confGeomXMLFiles");
desc.add<string>("label");
descriptions.addDefault(desc);
}

Expand All @@ -78,10 +81,11 @@ DDDetectorESProducer::setIntervalFor(const edm::eventsetup::EventSetupRecordKey&
DDDetectorESProducer::ReturnType
DDDetectorESProducer::produce(const DetectorDescriptionRcd& iRecord)
{
auto product = std::make_unique<DDDetector>();
cout << "DDDetectorESProducer::Produce " << m_label << "\n";
using Detector = dd4hep::Detector;

product->description = &Detector::getInstance("CMS");
auto product = make_unique<DDDetector>();

product->description = &Detector::getInstance(m_label);
product->description->addExtension<DDVectorsMap>(&product->vectors);
product->description->addExtension<DDPartSelectionMap>(&product->partsels);
product->description->addExtension<DDSpecParRegistry>(&product->specpars);
Expand Down
11 changes: 8 additions & 3 deletions DetectorDescription/DDCMS/plugins/DDSpecParRegistryESProducer.cc
Expand Up @@ -44,11 +44,15 @@ class DDSpecParRegistryESProducer : public edm::ESProducer {
static void fillDescriptions(edm::ConfigurationDescriptions&);

ReturnType produce(const DDSpecParRegistryRcd&);

private:
string m_label;
};

DDSpecParRegistryESProducer::DDSpecParRegistryESProducer(const edm::ParameterSet&)
DDSpecParRegistryESProducer::DDSpecParRegistryESProducer(const edm::ParameterSet& iConfig)
: m_label(iConfig.getParameter<std::string>("label"))
{
setWhatProduced(this);
setWhatProduced(this, m_label);
}

DDSpecParRegistryESProducer::~DDSpecParRegistryESProducer()
Expand All @@ -59,14 +63,15 @@ void
DDSpecParRegistryESProducer::fillDescriptions(edm::ConfigurationDescriptions & descriptions)
{
edm::ParameterSetDescription desc;
desc.add<string>("label");
descriptions.addDefault(desc);
}

DDSpecParRegistryESProducer::ReturnType
DDSpecParRegistryESProducer::produce(const DDSpecParRegistryRcd& iRecord)
{
edm::ESHandle<DDDetector> det;
iRecord.getRecord<DetectorDescriptionRcd>().get(det);
iRecord.getRecord<DetectorDescriptionRcd>().get(m_label, det);

DDSpecParRegistry* registry = det->description->extension<DDSpecParRegistry>();
auto product = std::make_unique<DDSpecParRegistry>();
Expand Down
44 changes: 23 additions & 21 deletions DetectorDescription/DDCMS/plugins/DDTestDumpFile.cc
Expand Up @@ -16,46 +16,48 @@

using namespace std;
using namespace cms;
using namespace edm;
using namespace dd4hep;

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

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

private:
std::string m_tag;
std::string m_outputFileName;
string m_tag;
string m_outputFileName;
string m_label;
};

DDTestDumpFile::DDTestDumpFile(const edm::ParameterSet& iConfig)
{
m_tag = iConfig.getUntrackedParameter<std::string>( "tag", "unknown" );
m_outputFileName = iConfig.getUntrackedParameter<std::string>( "outputFileName", "cmsDD4HepGeom.root" );
}
DDTestDumpFile::DDTestDumpFile(const ParameterSet& iConfig)
: m_tag(iConfig.getUntrackedParameter<string>("tag", "unknown")),
m_outputFileName(iConfig.getUntrackedParameter<string>("outputFileName", "cmsDD4HepGeom.root")),
m_label(iConfig.getUntrackedParameter<string>("fromDataLabel", ""))
{}

void
DDTestDumpFile::analyze(const edm::Event&, const edm::EventSetup& iEventSetup)
DDTestDumpFile::analyze(const Event&, const EventSetup& iEventSetup)
{
std::cout << "DDTestDumpFile::analyze:\n";
edm::ESTransientHandle<DDDetector> det;
iEventSetup.get<DetectorDescriptionRcd>().get(det);
cout << "DDTestDumpFile::analyze: " << m_label << "\n";
ESTransientHandle<DDDetector> det;
iEventSetup.get<DetectorDescriptionRcd>().get(m_label, det);

TGeoManager& geom = det->description->manager();

int level = 1 + geom.GetTopVolume()->CountNodes( 100, 3 );

std::cout << "In the DDTestDumpFile::analyze method...obtained main geometry, level="
<< level << std::endl;
cout << "In the DDTestDumpFile::analyze method...obtained main geometry, level="
<< level << "\n";

TFile file( m_outputFileName.c_str(), "RECREATE" );
file.WriteTObject( &geom );
file.WriteTObject( new TNamed( "CMSSW_VERSION", gSystem->Getenv( "CMSSW_VERSION" )));
file.WriteTObject( new TNamed( "tag", m_tag.c_str()));
TFile file(m_outputFileName.c_str(), "RECREATE");
file.WriteTObject(&geom );
file.WriteTObject(new TNamed("CMSSW_VERSION", gSystem->Getenv("CMSSW_VERSION")));
file.WriteTObject(new TNamed("tag", m_tag.c_str()));
file.Close();
}

DEFINE_FWK_MODULE( DDTestDumpFile );
DEFINE_FWK_MODULE(DDTestDumpFile);
21 changes: 13 additions & 8 deletions DetectorDescription/DDCMS/plugins/DDTestDumpGeometry.cc
Expand Up @@ -16,25 +16,30 @@

using namespace std;
using namespace cms;
using namespace edm;

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

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

private:
string m_label;
};

DDTestDumpGeometry::DDTestDumpGeometry(const edm::ParameterSet& iConfig)
DDTestDumpGeometry::DDTestDumpGeometry(const ParameterSet& iConfig)
: m_label(iConfig.getUntrackedParameter<string>("fromDataLabel", ""))
{}

void
DDTestDumpGeometry::analyze(const edm::Event&, const edm::EventSetup& iEventSetup)
DDTestDumpGeometry::analyze(const Event&, const EventSetup& iEventSetup)
{
cout << "DDTestDumpGeometry::analyze:\n";
edm::ESTransientHandle<DDDetector> det;
iEventSetup.get<DetectorDescriptionRcd>().get(det);
cout << "DDTestDumpGeometry::analyze: " << m_label << "\n";
ESTransientHandle<DDDetector> det;
iEventSetup.get<DetectorDescriptionRcd>().get(m_label, det);

TGeoManager& geom = det->description->manager();

Expand Down
35 changes: 20 additions & 15 deletions DetectorDescription/DDCMS/plugins/DDTestNavigateGeometry.cc
Expand Up @@ -16,6 +16,7 @@

using namespace std;
using namespace cms;
using namespace edm;
using namespace dd4hep;

namespace {
Expand Down Expand Up @@ -52,37 +53,41 @@ namespace {
};
}

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

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

private:
string m_label;
};

DDTestNavigateGeometry::DDTestNavigateGeometry(const edm::ParameterSet& iConfig)
DDTestNavigateGeometry::DDTestNavigateGeometry(const ParameterSet& iConfig)
: m_label(iConfig.getUntrackedParameter<string>("fromDataLabel", ""))
{}

void
DDTestNavigateGeometry::analyze(const edm::Event&, const edm::EventSetup& iEventSetup)
DDTestNavigateGeometry::analyze(const Event&, const EventSetup& iEventSetup)
{
cout << "DDTestNavigateGeometry::analyze:\n";
cout << "DDTestNavigateGeometry::analyze: " << m_label << "\n";

const DDVectorRegistryRcd& regRecord = iEventSetup.get<DDVectorRegistryRcd>();
edm::ESTransientHandle<DDVectorRegistry> reg;
regRecord.get(reg);
ESTransientHandle<DDVectorRegistry> reg;
regRecord.get(m_label, reg);

for( const auto& p: reg->vectors ) {
std::cout << " " << p.first << " => ";
for( const auto& i : p.second )
std::cout << i << ", ";
std::cout << '\n';
for(const auto& p: reg->vectors) {
cout << " " << p.first << " => ";
for(const auto& i : p.second)
cout << i << ", ";
cout << '\n';
}

const DetectorDescriptionRcd& ddRecord = iEventSetup.get<DetectorDescriptionRcd>();
edm::ESTransientHandle<DDDetector> ddd;
ddRecord.get(ddd);
ESTransientHandle<DDDetector> ddd;
ddRecord.get(m_label, ddd);

dd4hep::Detector& detector = *ddd->description;

Expand Down
19 changes: 12 additions & 7 deletions DetectorDescription/DDCMS/plugins/DDTestSpecPars.cc
Expand Up @@ -9,22 +9,27 @@

using namespace std;
using namespace cms;
using namespace edm;

class DDTestSpecPars : public edm::one::EDAnalyzer<> {
class DDTestSpecPars : public one::EDAnalyzer<> {
public:
explicit DDTestSpecPars(const edm::ParameterSet&) {}
explicit DDTestSpecPars(const ParameterSet& iConfig)
: m_label(iConfig.getUntrackedParameter<string>("fromDataLabel", "")) {}

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

private:
string m_label;
};

void
DDTestSpecPars::analyze(const edm::Event&, const edm::EventSetup& iEventSetup)
DDTestSpecPars::analyze(const Event&, const EventSetup& iEventSetup)
{
cout << "DDTestSpecPars::analyze:\n";
edm::ESTransientHandle<DDSpecParRegistry> registry;
iEventSetup.get<DDSpecParRegistryRcd>().get(registry);
cout << "DDTestSpecPars::analyze: " << m_label << "\n";
ESTransientHandle<DDSpecParRegistry> registry;
iEventSetup.get<DDSpecParRegistryRcd>().get(m_label, registry);

cout << "DD SpecPar Registry size: " << registry->specpars.size() << "\n";
for(const auto& i: registry->specpars) {
Expand Down