Skip to content

Commit

Permalink
Merge pull request #25652 from ianna/dd4hep-multiple-records
Browse files Browse the repository at this point in the history
DD4hep: Allow Multiple EventSetup Records
  • Loading branch information
cmsbuild committed Jan 15, 2019
2 parents 5917a4a + 26b5008 commit 98767f3
Show file tree
Hide file tree
Showing 17 changed files with 218 additions and 181 deletions.
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

0 comments on commit 98767f3

Please sign in to comment.