Skip to content

Commit

Permalink
Merge pull request #29360 from bsunanda/Run3-TB54
Browse files Browse the repository at this point in the history
Run3-TB54 First step of transition to dd4hep for HCal TB simulation
  • Loading branch information
cmsbuild committed Apr 1, 2020
2 parents 0f75a9b + 54b2343 commit f72bfdb
Show file tree
Hide file tree
Showing 21 changed files with 1,003 additions and 3 deletions.
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

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 *

0 comments on commit f72bfdb

Please sign in to comment.