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-TB54 First step of transition to dd4hep for HCal TB simulation #29360

Merged
merged 2 commits into from Apr 1, 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
6 changes: 6 additions & 0 deletions Geometry/HcalTestBeamData/BuildFile.xml
@@ -0,0 +1,6 @@
<use name="DetectorDescription/Core"/>
<use name="DetectorDescription/DDCMS"/>
<use name="dd4hep"/>
<export>
<lib name="1"/>
</export>
@@ -0,0 +1,45 @@
<?xml version="1.0"?>
<DDDefinition>
<debug>
<!--
<debug_shapes/>
<debug_includes/>
<debug_rotations/>
<debug_includes/>
<debug_volumes/>
<debug_constants/>
<debug_materials/>
<debug_namespaces/>
<debug_placements/>
<debug_algorithms/>
<debug_materials/>
<debug_visattr/>
-->
</debug>

<open_geometry/>
<close_geometry/>

<IncludeSection>
<Include ref="Geometry/CMSCommonData/data/materials/2021/v1/materials.xml"/>
<Include ref="Geometry/CMSCommonData/data/rotations.xml"/>
<Include ref="Geometry/HcalCommonData/data/hcalrotations.xml"/>
<Include ref="Geometry/HcalTestBeamData/data/TBHcal.xml"/>
<Include ref="Geometry/HcalTestBeamData/data/TBHcal04BeamLine.xml"/>
<Include ref="Geometry/HcalTestBeamData/data/TBHcalXtal.xml"/>
<Include ref="Geometry/HcalTestBeamData/data/TBHcalCable.xml"/>
<Include ref="Geometry/HcalTestBeamData/data/TBHcalBarrel.xml"/>
<Include ref="Geometry/HcalTestBeamData/data/TBHcalEndcap.xml"/>
<Include ref="Geometry/HcalTestBeamData/data/TBHcal04HcalOuter.xml"/>
<Include ref="Geometry/HcalTestBeamData/data/TBHcal04Sens.xml"/>
<Include ref="Geometry/HcalTestBeamData/data/TBHcal04SimNumbering.xml"/>
<Include ref="Geometry/HcalTestBeamData/data/TBHcal04Util.xml"/>
<Include ref="Geometry/HcalTestBeamData/data/TBHcal04XtalProdCuts.xml"/>
<Include ref="Geometry/HcalTestBeamData/data/TBHcal04ProdCuts.xml"/>
<Include ref="Geometry/HcalTestBeamData/data/world.xml"/>
</IncludeSection>

</DDDefinition>



11 changes: 11 additions & 0 deletions Geometry/HcalTestBeamData/data/world.xml
@@ -0,0 +1,11 @@
<?xml version="1.0"?>
<DDDefinition xmlns="http://www.cern.ch/cms/DDL" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.cern.ch/cms/DDL ../../../DetectorDescription/Schema/DDLSchema.xsd">

<PosPartSection label="">
<PosPart copyNumber="1">
<rParent name=":world_volume"/>
<rChild name="TBHcal:TBHCal"/>
</PosPart>
</PosPartSection>

</DDDefinition>
19 changes: 19 additions & 0 deletions Geometry/HcalTestBeamData/interface/HcalTB02Parameters.h
@@ -0,0 +1,19 @@
#ifndef HcalTestBeamData_HcalTB02Parameters_h
#define HcalTestBeamData_HcalTB02Parameters_h

#include "CondFormats/Serialization/interface/Serializable.h"

#include <map>
#include <string>

class HcalTB02Parameters {
public:
HcalTB02Parameters(const std::string& nam) : name_(nam) {}

std::string name_;
std::map<std::string, double> lengthMap_;

COND_SERIALIZABLE;
};

#endif
24 changes: 24 additions & 0 deletions Geometry/HcalTestBeamData/interface/HcalTB02ParametersFromDD.h
@@ -0,0 +1,24 @@
#ifndef HcalTestBeamData_HcalTB02ParametersFromDD_h
#define HcalTestBeamData_HcalTB02ParametersFromDD_h

#include <string>
#include <vector>
#include "DetectorDescription/Core/interface/DDCompactView.h"
#include "DetectorDescription/Core/interface/DDFilteredView.h"
#include "DetectorDescription/DDCMS/interface/DDCompactView.h"
#include "DetectorDescription/DDCMS/interface/DDFilteredView.h"
#include "Geometry/HcalTestBeamData/interface/HcalTB02Parameters.h"

class HcalTB02ParametersFromDD {
public:
HcalTB02ParametersFromDD() = default;

bool build(const DDCompactView* cpv, HcalTB02Parameters& php, const std::string& name);
bool build(const cms::DDCompactView* cpv, HcalTB02Parameters& php, const std::string& name);

private:
static constexpr double k_ScaleFromDDDToG4 = 1.0;
static constexpr double k_ScaleFromDD4HepToG4 = 10.0;
};

#endif
19 changes: 19 additions & 0 deletions Geometry/HcalTestBeamData/interface/HcalTB06BeamParameters.h
@@ -0,0 +1,19 @@
#ifndef HcalTestBeamData_HcalTB06BeamParameters_h
#define HcalTestBeamData_HcalTB06BeamParameters_h

#include "CondFormats/Serialization/interface/Serializable.h"

#include <string>
#include <vector>

class HcalTB06BeamParameters {
public:
HcalTB06BeamParameters() = default;

std::vector<std::string> wchambers_;
std::string material_;

COND_SERIALIZABLE;
};

#endif
32 changes: 32 additions & 0 deletions Geometry/HcalTestBeamData/interface/HcalTB06BeamParametersFromDD.h
@@ -0,0 +1,32 @@
#ifndef HcalTestBeamData_HcalTB06BeamParametersFromDD_h
#define HcalTestBeamData_HcalTB06BeamParametersFromDD_h

#include <string>
#include <vector>
#include "DetectorDescription/Core/interface/DDCompactView.h"
#include "DetectorDescription/Core/interface/DDFilteredView.h"
#include "DetectorDescription/DDCMS/interface/DDCompactView.h"
#include "DetectorDescription/DDCMS/interface/DDFilteredView.h"
#include "Geometry/HcalTestBeamData/interface/HcalTB06BeamParameters.h"

class HcalTB06BeamParametersFromDD {
public:
HcalTB06BeamParametersFromDD() = default;

bool build(const DDCompactView* cpv, HcalTB06BeamParameters& php, const std::string& name1, const std::string& name2);
bool build(const cms::DDCompactView* cpv,
HcalTB06BeamParameters& php,
const std::string& name1,
const std::string& name2);

private:
bool build(HcalTB06BeamParameters& php,
const std::vector<std::string>& matNames,
const std::vector<int>& nocc,
const std::string& name1,
const std::string& name2);
std::vector<std::string> getNames(DDFilteredView& fv);
std::vector<std::string> getNames(cms::DDFilteredView& fv);
};

#endif
10 changes: 7 additions & 3 deletions Geometry/HcalTestBeamData/plugins/BuildFile.xml
@@ -1,5 +1,9 @@
<library file="*.cc" name="GeometryHcalTestBeamDataPlugin">
<use name="DetectorDescription/Parser"/>
<use name="FWCore/PluginManager"/>
<flags EDM_PLUGIN="1"/>
<use name="DetectorDescription/Parser"/>
<use name="DetectorDescription/Core"/>
<use name="DetectorDescription/DDCMS"/>
<use name="FWCore/PluginManager"/>
<use name="Geometry/Records"/>
<use name="Geometry/HcalTestBeamData"/>
<flags EDM_PLUGIN="1"/>
</library>
73 changes: 73 additions & 0 deletions Geometry/HcalTestBeamData/plugins/HcalTB02ParametersESModule.cc
@@ -0,0 +1,73 @@
#include "FWCore/ParameterSet/interface/ConfigurationDescriptions.h"
#include "FWCore/ParameterSet/interface/ParameterSetDescription.h"
#include "FWCore/Framework/interface/ModuleFactory.h"
#include "FWCore/Framework/interface/ESProducer.h"
#include "FWCore/Framework/interface/ESTransientHandle.h"
#include "DetectorDescription/Core/interface/DDCompactView.h"
#include "DetectorDescription/DDCMS/interface/DDCompactView.h"
#include "Geometry/Records/interface/IdealGeometryRecord.h"
#include "Geometry/HcalTestBeamData/interface/HcalTB02Parameters.h"
#include "Geometry/HcalTestBeamData/interface/HcalTB02ParametersFromDD.h"

#include <memory>

#define EDM_ML_DEBUG
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
#define EDM_ML_DEBUG
// #define EDM_ML_DEBUG


class HcalTB02ParametersESModule : public edm::ESProducer {
public:
HcalTB02ParametersESModule(const edm::ParameterSet&);

using ReturnType = std::unique_ptr<HcalTB02Parameters>;

static void fillDescriptions(edm::ConfigurationDescriptions&);
ReturnType produce(const IdealGeometryRecord&);

private:
edm::ESGetToken<DDCompactView, IdealGeometryRecord> cpvTokenDDD_;
edm::ESGetToken<cms::DDCompactView, IdealGeometryRecord> cpvTokenDD4Hep_;
std::string name_;
bool fromDD4Hep_;
};

HcalTB02ParametersESModule::HcalTB02ParametersESModule(const edm::ParameterSet& ps) {
name_ = ps.getParameter<std::string>("name");
fromDD4Hep_ = ps.getParameter<bool>("fromDD4Hep");
auto cc = setWhatProduced(this, name_);
cpvTokenDD4Hep_ = cc.consumesFrom<cms::DDCompactView, IdealGeometryRecord>(edm::ESInputTag());
cpvTokenDDD_ = cc.consumesFrom<DDCompactView, IdealGeometryRecord>(edm::ESInputTag());

#ifdef EDM_ML_DEBUG
edm::LogVerbatim("HCalGeom") << "HcalTB02ParametersESModule::HcalTB02ParametersESModule called with dd4hep: "
<< fromDD4Hep_ << " and name " << name_;
#endif
}

void HcalTB02ParametersESModule::fillDescriptions(edm::ConfigurationDescriptions& descriptions) {
edm::ParameterSetDescription desc;
desc.add<std::string>("name", "EcalHitsEB");
desc.add<bool>("fromDD4Hep", false);
descriptions.add("hcalTB02XtalParameters", desc);
}

HcalTB02ParametersESModule::ReturnType HcalTB02ParametersESModule::produce(const IdealGeometryRecord& iRecord) {
#ifdef EDM_ML_DEBUG
edm::LogInfo("HCalGeom") << "HcalTB02ParametersESModule::produce(const IdealGeometryRecord& iRecord)";
#endif

auto ptp = std::make_unique<HcalTB02Parameters>(name_);
HcalTB02ParametersFromDD builder;

if (fromDD4Hep_) {
#ifdef EDM_ML_DEBUG
edm::LogVerbatim("HCalGeom") << "HcalTB02ParametersESModule::Try to access cms::DDCompactView";
#endif
edm::ESTransientHandle<cms::DDCompactView> cpv = iRecord.getTransientHandle(cpvTokenDD4Hep_);
builder.build(&(*cpv), *ptp, name_);
} else {
edm::ESTransientHandle<DDCompactView> cpv = iRecord.getTransientHandle(cpvTokenDDD_);
builder.build(&(*cpv), *ptp, name_);
}
return ptp;
}

DEFINE_FWK_EVENTSETUP_MODULE(HcalTB02ParametersESModule);
@@ -0,0 +1,75 @@
#include "FWCore/ParameterSet/interface/ConfigurationDescriptions.h"
#include "FWCore/ParameterSet/interface/ParameterSetDescription.h"
#include "FWCore/Framework/interface/ModuleFactory.h"
#include "FWCore/Framework/interface/ESProducer.h"
#include "FWCore/Framework/interface/ESTransientHandle.h"
#include "DetectorDescription/Core/interface/DDCompactView.h"
#include "DetectorDescription/DDCMS/interface/DDCompactView.h"
#include "Geometry/Records/interface/IdealGeometryRecord.h"
#include "Geometry/HcalTestBeamData/interface/HcalTB06BeamParameters.h"
#include "Geometry/HcalTestBeamData/interface/HcalTB06BeamParametersFromDD.h"

#include <memory>

#define EDM_ML_DEBUG

class HcalTB06ParametersESModule : public edm::ESProducer {
public:
HcalTB06ParametersESModule(const edm::ParameterSet&);

using ReturnType = std::unique_ptr<HcalTB06BeamParameters>;

static void fillDescriptions(edm::ConfigurationDescriptions&);
ReturnType produce(const IdealGeometryRecord&);

private:
edm::ESGetToken<DDCompactView, IdealGeometryRecord> cpvTokenDDD_;
edm::ESGetToken<cms::DDCompactView, IdealGeometryRecord> cpvTokenDD4Hep_;
std::string name1_, name2_;
bool fromDD4Hep_;
};

HcalTB06ParametersESModule::HcalTB06ParametersESModule(const edm::ParameterSet& ps) {
name1_ = ps.getParameter<std::string>("name1");
name2_ = ps.getParameter<std::string>("name2");
fromDD4Hep_ = ps.getParameter<bool>("fromDD4Hep");
auto cc = setWhatProduced(this);
cpvTokenDD4Hep_ = cc.consumesFrom<cms::DDCompactView, IdealGeometryRecord>(edm::ESInputTag());
cpvTokenDDD_ = cc.consumesFrom<DDCompactView, IdealGeometryRecord>(edm::ESInputTag());

#ifdef EDM_ML_DEBUG
edm::LogVerbatim("HCalGeom") << "HcalTB06ParametersESModule::HcalTB06ParametersESModule called with dd4hep: "
<< fromDD4Hep_ << " and names " << name1_ << ":" << name2_;
#endif
}

void HcalTB06ParametersESModule::fillDescriptions(edm::ConfigurationDescriptions& descriptions) {
edm::ParameterSetDescription desc;
desc.add<std::string>("name1", "WireChamber");
desc.add<std::string>("name2", "HcalTB06BeamHits");
desc.add<bool>("fromDD4Hep", false);
descriptions.add("hcalTB06BeamParameters", desc);
}

HcalTB06ParametersESModule::ReturnType HcalTB06ParametersESModule::produce(const IdealGeometryRecord& iRecord) {
#ifdef EDM_ML_DEBUG
edm::LogInfo("HCalGeom") << "HcalTB06ParametersESModule::produce(const IdealGeometryRecord& iRecord)";
#endif

auto ptp = std::make_unique<HcalTB06BeamParameters>();
HcalTB06BeamParametersFromDD builder;

if (fromDD4Hep_) {
#ifdef EDM_ML_DEBUG
edm::LogVerbatim("HCalGeom") << "HcalTB06ParametersESModule::Try to access cms::DDCompactView";
#endif
edm::ESTransientHandle<cms::DDCompactView> cpv = iRecord.getTransientHandle(cpvTokenDD4Hep_);
builder.build(&(*cpv), *ptp, name1_, name2_);
} else {
edm::ESTransientHandle<DDCompactView> cpv = iRecord.getTransientHandle(cpvTokenDDD_);
builder.build(&(*cpv), *ptp, name1_, name2_);
}
return ptp;
}

DEFINE_FWK_EVENTSETUP_MODULE(HcalTB06ParametersESModule);
55 changes: 55 additions & 0 deletions Geometry/HcalTestBeamData/plugins/HcalTBParameterTester.cc
@@ -0,0 +1,55 @@
#include <iostream>
#include <map>

#include "FWCore/Framework/interface/Event.h"
#include "FWCore/Framework/interface/EventSetup.h"
#include "FWCore/Framework/interface/MakerMacros.h"
#include "FWCore/Framework/interface/one/EDAnalyzer.h"

#include "Geometry/HcalTestBeamData/interface/HcalTB02Parameters.h"
#include "Geometry/HcalTestBeamData/interface/HcalTB06BeamParameters.h"
#include "Geometry/Records/interface/IdealGeometryRecord.h"

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

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

private:
const std::string name_;
edm::ESGetToken<HcalTB02Parameters, IdealGeometryRecord> token1_;
edm::ESGetToken<HcalTB06BeamParameters, IdealGeometryRecord> token2_;
const int mode_;
};

HcalTBParameterTester::HcalTBParameterTester(const edm::ParameterSet& ic)
: name_(ic.getUntrackedParameter<std::string>("Name")),
token1_(esConsumes<HcalTB02Parameters, IdealGeometryRecord>(edm::ESInputTag{"", name_})),
token2_(esConsumes<HcalTB06BeamParameters, IdealGeometryRecord>(edm::ESInputTag{})),
mode_(ic.getUntrackedParameter<int>("Mode")) {}

void HcalTBParameterTester::analyze(const edm::Event& iEvent, const edm::EventSetup& iSetup) {
if (mode_ == 0) {
const auto& hcp = iSetup.getData(token1_);
const auto* php = &hcp;
std::cout << "TB02Parameters for " << name_ << "\n";
std::cout << "Length map with " << php->lengthMap_.size() << " elements\n";
std::map<std::string, double>::const_iterator itr = php->lengthMap_.begin();
int i(0);
for (; itr != php->lengthMap_.end(); ++itr, ++i)
std::cout << "[" << i << "] " << itr->first << " " << itr->second << " mm\n";
} else {
const auto& hcp = iSetup.getData(token2_);
const auto* php = &hcp;
std::cout << "TB06BeamParameters:: Material " << php->material_ << "\n";
std::cout << "TB06BeamParameters:: " << php->wchambers_.size() << " wire chambers:\n";
for (unsigned int k = 0; k < php->wchambers_.size(); ++k)
std::cout << "[" << k << "] " << php->wchambers_[k] << "\n";
}
}

DEFINE_FWK_MODULE(HcalTBParameterTester);
2 changes: 2 additions & 0 deletions Geometry/HcalTestBeamData/python/hcalDDDSimConstants_cff.py
Expand Up @@ -4,3 +4,5 @@
from Geometry.HcalCommonData.hcalDDDSimConstants_cfi import *
from Geometry.HcalCommonData.hcalDDDSimulationConstants_cfi import *
from Geometry.HcalCommonData.caloSimulationParameters_cff import *
from Geometry.HcalTestBeamData.hcalTB02Parameters_cff import *
from Geometry.HcalTestBeamData.hcalTB06Parameters_cff import *