CMS 3D CMS Logo

MisalignedTrackerESProducer.cc
Go to the documentation of this file.
1 // Framework
8 
9 // Conditions database
12 
13 // Geometry
19 
20 // Alignment
25 
26 // C++
27 #include <memory>
28 #include <algorithm>
29 
36 
38 public:
41 
44 
46  std::unique_ptr<TrackerGeometry> produce(const TrackerDigiGeometryRecord& iRecord);
47 
48 private:
53 
54  const bool theSaveToDB;
55  const bool
59 };
60 
61 //__________________________________________________________________________________________________
62 //__________________________________________________________________________________________________
63 //__________________________________________________________________________________________________
64 
65 //__________________________________________________________________________________________________
67  : theSaveToDB(p.getUntrackedParameter<bool>("saveToDbase")),
68  theSaveFakeScenario(p.getUntrackedParameter<bool>("saveFakeScenario")),
69  theScenario(p.getParameter<edm::ParameterSet>("scenario")),
70  theAlignRecordName("TrackerAlignmentRcd"),
71  theErrorRecordName("TrackerAlignmentErrorExtendedRcd") {
72  auto cc = setWhatProduced(this);
73  geomDetToken_ = cc.consumes();
74  ptpToken_ = cc.consumes();
75  ptitpToken_ = cc.consumes();
76  topoToken_ = cc.consumes();
77 }
78 
79 //__________________________________________________________________________________________________
81 
82 //__________________________________________________________________________________________________
83 std::unique_ptr<TrackerGeometry> MisalignedTrackerESProducer::produce(const TrackerDigiGeometryRecord& iRecord) {
84  //Retrieve tracker topology from geometry
85  const TrackerTopology* tTopo = &iRecord.get(topoToken_);
86 
87  edm::LogInfo("MisalignedTracker") << "Producer called";
88 
89  // Create the tracker geometry from ideal geometry
90  const GeometricDet* gD = &iRecord.get(geomDetToken_);
91  const PTrackerParameters& ptp = iRecord.get(ptpToken_);
92  const PTrackerAdditionalParametersPerDet* ptitp = &iRecord.get(ptitpToken_);
93 
95  std::unique_ptr<TrackerGeometry> theTracker(trackerBuilder.build(gD, ptitp, ptp, tTopo));
96 
97  // Create the alignable hierarchy
98  auto theAlignableTracker = std::make_unique<AlignableTracker>(&(*theTracker), tTopo);
99 
100  // Create misalignment scenario, apply to geometry
101  TrackerScenarioBuilder scenarioBuilder(&(*theAlignableTracker));
102  scenarioBuilder.applyScenario(theScenario);
103  Alignments* alignments = theAlignableTracker->alignments();
104  AlignmentErrorsExtended* alignmentErrors = theAlignableTracker->alignmentErrors();
105 
106  // Store result to EventSetup
107  GeometryAligner aligner;
108  aligner.applyAlignments<TrackerGeometry>(&(*theTracker),
109  alignments,
110  alignmentErrors,
111  AlignTransform()); // dummy global position
112 
113  // Write alignments to DB: have to sort beforhand!
114  if (theSaveToDB) {
115  // Call service
117  if (!poolDbService.isAvailable()) // Die if not available
118  throw cms::Exception("NotAvailable") << "PoolDBOutputService not available";
119  if (theSaveFakeScenario) { // make empty!
120  alignments->clear();
121  alignmentErrors->clear();
122  }
123  poolDbService->writeOne<Alignments>(alignments, poolDbService->currentTime(), theAlignRecordName);
124  poolDbService->writeOne<AlignmentErrorsExtended>(alignmentErrors, poolDbService->currentTime(), theErrorRecordName);
125  } else {
126  // poolDbService::writeOne takes over ownership
127  // we have to delete in the case that containers are not written
128  delete alignments;
129  delete alignmentErrors;
130  }
131 
132  edm::LogInfo("MisalignedTracker") << "Producer done";
133  return theTracker;
134 }
135 
AlignmentErrorsExtended.h
MisalignedTrackerESProducer::theSaveToDB
const bool theSaveToDB
Definition: MisalignedTrackerESProducer.cc:54
electrons_cff.bool
bool
Definition: electrons_cff.py:366
MessageLogger.h
TrackerGeometry.h
PTrackerParameters
Definition: PTrackerParameters.h:6
ESHandle.h
TrackerScenarioBuilder
Builds a scenario from configuration and applies it to the alignable tracker.
Definition: TrackerScenarioBuilder.h:24
MisalignedTrackerESProducer::theAlignRecordName
const std::string theAlignRecordName
misalignment scenario
Definition: MisalignedTrackerESProducer.cc:58
edm
HLT enums.
Definition: AlignableModifier.h:19
TrackerGeomBuilderFromGeometricDet::build
TrackerGeometry * build(const GeometricDet *gd, const PTrackerAdditionalParametersPerDet *ptitp, const PTrackerParameters &ptp, const TrackerTopology *tTopo)
Definition: TrackerGeomBuilderFromGeometricDet.cc:44
TrackerTopology
Definition: TrackerTopology.h:16
PTrackerAdditionalParametersPerDet
Definition: PTrackerAdditionalParametersPerDet.h:9
edm::ESProducer::setWhatProduced
auto setWhatProduced(T *iThis, const es::Label &iLabel={})
Definition: ESProducer.h:163
ESProducer.h
MisalignedTrackerESProducer::theErrorRecordName
const std::string theErrorRecordName
Definition: MisalignedTrackerESProducer.cc:58
edm::LogInfo
Log< level::Info, false > LogInfo
Definition: MessageLogger.h:125
MisalignedTrackerESProducer
Definition: MisalignedTrackerESProducer.cc:37
edm::Service::isAvailable
bool isAvailable() const
Definition: Service.h:40
GeometryAligner::applyAlignments
void applyAlignments(const C *geometry, const Alignments *alignments, const AlignmentErrorsExtended *alignmentErrors, const AlignTransform &globalCoordinates)
Definition: GeometryAligner.h:52
MisalignedTrackerESProducer::ptitpToken_
edm::ESGetToken< PTrackerAdditionalParametersPerDet, PTrackerAdditionalParametersPerDetRcd > ptitpToken_
Definition: MisalignedTrackerESProducer.cc:51
PoolDBOutputService.h
TrackerScenarioBuilder.h
TrackerTopologyRcd.h
Service.h
TrackerDigiGeometryRecord
Definition: TrackerDigiGeometryRecord.h:16
MisalignedTrackerESProducer::produce
std::unique_ptr< TrackerGeometry > produce(const TrackerDigiGeometryRecord &iRecord)
Produce the misaligned tracker geometry and store it.
Definition: MisalignedTrackerESProducer.cc:83
TrackerScenarioBuilder::applyScenario
void applyScenario(const edm::ParameterSet &scenario) override
Apply misalignment scenario to the tracker.
Definition: TrackerScenarioBuilder.cc:39
GeometricDet
Definition: GeometricDet.h:31
edm::eventsetup::DependentRecordImplementation::get
ProductT const & get(ESGetToken< ProductT, DepRecordT > const &iToken) const
Definition: DependentRecordImplementation.h:109
AlignTransform
Definition: AlignTransform.h:15
MisalignedTrackerESProducer::theSaveFakeScenario
const bool theSaveFakeScenario
whether or not writing to DB
Definition: MisalignedTrackerESProducer.cc:56
TrackerDigiGeometryRecord.h
edm::ParameterSet
Definition: ParameterSet.h:47
AlCaHLTBitMon_ParallelJobs.p
def p
Definition: AlCaHLTBitMon_ParallelJobs.py:153
ParameterSet
Definition: Functions.h:16
MisalignedTrackerESProducer::topoToken_
edm::ESGetToken< TrackerTopology, TrackerTopologyRcd > topoToken_
Definition: MisalignedTrackerESProducer.cc:52
edm::Service< cond::service::PoolDBOutputService >
MisalignedTrackerESProducer::geomDetToken_
edm::ESGetToken< GeometricDet, IdealGeometryRecord > geomDetToken_
Definition: MisalignedTrackerESProducer.cc:49
MisalignedTrackerESProducer::~MisalignedTrackerESProducer
~MisalignedTrackerESProducer() override
Destructor.
Definition: MisalignedTrackerESProducer.cc:80
MisalignedTrackerESProducer::ptpToken_
edm::ESGetToken< PTrackerParameters, PTrackerParametersRcd > ptpToken_
Definition: MisalignedTrackerESProducer.cc:50
cc
AlignmentErrorsExtended
Definition: AlignmentErrorsExtended.h:10
AlCaHLTBitMon_QueryRunRegistry.string
string string
Definition: AlCaHLTBitMon_QueryRunRegistry.py:256
edm::ESGetToken< GeometricDet, IdealGeometryRecord >
ModuleFactory.h
GeometryAligner.h
DEFINE_FWK_EVENTSETUP_MODULE
#define DEFINE_FWK_EVENTSETUP_MODULE(type)
Definition: ModuleFactory.h:60
MisalignedTrackerESProducer::theScenario
const edm::ParameterSet theScenario
if theSaveToDB is true, save a fake scenario (empty alignments), irrespective of the misalignment sce...
Definition: MisalignedTrackerESProducer.cc:57
cond::service::PoolDBOutputService::writeOne
Hash writeOne(const T *payload, Time_t time, const std::string &recordName)
Definition: PoolDBOutputService.h:63
Alignable.h
Exception.h
edm::ESProducer
Definition: ESProducer.h:104
TrackerGeomBuilderFromGeometricDet.h
TrackerGeomBuilderFromGeometricDet
Definition: TrackerGeomBuilderFromGeometricDet.h:18
AlignableTracker.h
cms::Exception
Definition: Exception.h:70
ParameterSet.h
MisalignedTrackerESProducer::MisalignedTrackerESProducer
MisalignedTrackerESProducer(const edm::ParameterSet &p)
Constructor.
Definition: MisalignedTrackerESProducer.cc:66
Alignments
Definition: Alignments.h:10
cond::service::PoolDBOutputService::currentTime
cond::Time_t currentTime() const
Definition: PoolDBOutputService.cc:217
GeometryAligner
Class to update a given geometry with a set of alignments.
Definition: GeometryAligner.h:33
TrackerGeometry
Definition: TrackerGeometry.h:14