CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
PCLTrackerAlProducer.cc
Go to the documentation of this file.
1 
11 /*** Header file ***/
12 #include "PCLTrackerAlProducer.h"
13 
14 /*** Core framework functionality ***/
15 
21 
26 
27 /*** Alignment ***/
40 
41 /*** Geometry ***/
43 
46 
56 
57 
58 
59 //_____________________________________________________________________________
62  theAlignmentAlgo(0),
63  theAlignmentParameterStore(0),
64  theTrackerAlignables(0),
65  theMuonAlignables(0),
66  theExtraAlignables(0),
67  globalPositions_(0),
68 
69  /* Steering parameters */
70  theParameterSet(config),
71  stNFixAlignables_ (config.getParameter<int> ("nFixAlignables")),
72  stRandomShift_ (config.getParameter<double> ("randomShift")),
73  stRandomRotation_ (config.getParameter<double> ("randomRotation")),
74  applyDbAlignment_ (config.getUntrackedParameter<bool>("applyDbAlignment")),
75  checkDbAlignmentValidity_(config.getUntrackedParameter<bool>("checkDbAlignmentValidity")),
76  doMisalignmentScenario_ (config.getParameter<bool> ("doMisalignmentScenario")),
77  saveToDB_ (config.getParameter<bool> ("saveToDB")),
78  saveApeToDB_ (config.getParameter<bool> ("saveApeToDB")),
79  saveDeformationsToDB_ (config.getParameter<bool> ("saveDeformationsToDB")),
80  doTracker_ (config.getUntrackedParameter<bool>("doTracker") ),
81  doMuon_ (config.getUntrackedParameter<bool>("doMuon") ),
82  useExtras_ (config.getUntrackedParameter<bool>("useExtras")),
83  useSurvey_ (config.getParameter<bool> ("useSurvey")),
84 
85  /* Event input tags */
86  tjTkAssociationMapTag_ (config.getParameter<edm::InputTag>("tjTkAssociationMapTag")),
87  beamSpotTag_ (config.getParameter<edm::InputTag>("beamSpotTag")),
88  tkLasBeamTag_ (config.getParameter<edm::InputTag>("tkLasBeamTag")),
89  clusterValueMapTag_ (config.getParameter<edm::InputTag>("hitPrescaleMapTag")),
90  theFirstRun (cond::timeTypeSpecs[cond::runnumber].endValue)
91 {
92  createAlignmentAlgorithm(config);
93  createCalibrations (config);
94  createMonitors (config);
95 }
96 
97 //_____________________________________________________________________________
100 {
101  delete theAlignmentAlgo;
102 
103  for (auto iCal = theCalibrations.begin();
104  iCal != theCalibrations.end();
105  ++iCal) {
106  delete *iCal;
107  }
108 
109  // TODO: Delete monitors as well?
110 
111  delete theAlignmentParameterStore;
112  delete theTrackerAlignables;
113  delete theMuonAlignables;
114  delete theExtraAlignables;
115  delete globalPositions_;
116 }
117 
118 
119 
120 //=============================================================================
121 //=== INTERFACE IMPLEMENTATION ===
122 //=============================================================================
123 
124 //_____________________________________________________________________________
127 {
128  nevent_ = 0;
129 
130  for (auto iCal = theCalibrations.begin();
131  iCal != theCalibrations.end();
132  ++iCal) {
133  (*iCal)->beginOfJob(theTrackerAlignables,
134  theMuonAlignables,
135  theExtraAlignables);
136  }
137 
138  for (auto monitor = theMonitors.begin();
139  monitor != theMonitors.end();
140  ++monitor) {
141  (*monitor)->beginOfJob(theTrackerAlignables,
142  theMuonAlignables,
143  theAlignmentParameterStore);
144  }
145 }
146 
147 //_____________________________________________________________________________
150 {
151  finish();
152 
153  for (auto monitor = theMonitors.begin();
154  monitor != theMonitors.end();
155  ++monitor) {
156  (*monitor)->endOfJob();
157  }
158 
159  for (auto iCal = theCalibrations.begin();
160  iCal != theCalibrations.end();
161  ++iCal) {
162  (*iCal)->endOfJob();
163  }
164 }
165 
166 //_____________________________________________________________________________
169 {
170  if (setupChanged(setup)) {
171  edm::LogInfo("Alignment") << "@SUB=PCLTrackerAlProducer::beginRun"
172  << "EventSetup-Record changed.";
173  initAlignmentAlgorithm(setup);
174  }
175 
176  // Do not forward edm::Run
177  theAlignmentAlgo->beginRun(setup);
178 
179  if (setupChanged(setup)) {
180  initAlignmentAlgorithm(setup);
181  }
182 
183  //store the first run analyzed to be used for setting the IOV
184  if(theFirstRun > (cond::Time_t) run.id().run()) {
185  theFirstRun = (cond::Time_t) run.id().run();
186  }
187 
188 
189 }
190 
191 //_____________________________________________________________________________
194 {
195  // TODO: Either MP nor HIP is implementing the endRun() method... so this
196  // seems to be useless?
197 
198  if (tkLasBeamTag_.encode().size()) {
201  run.getByLabel(tkLasBeamTag_, lasBeams);
202  run.getByLabel(tkLasBeamTag_, tsoses);
203 
204  theAlignmentAlgo->endRun(EndRunInfo(run.id(), &(*lasBeams),
205  &(*tsoses)), setup);
206  } else {
207  edm::LogInfo("Alignment") << "@SUB=PCLTrackerAlProducer::endRun"
208  << "No Tk LAS beams to forward to algorithm.";
209  theAlignmentAlgo->endRun(EndRunInfo(run.id(), 0, 0), setup);
210  }
211 }
212 
213 //_____________________________________________________________________________
216  const edm::EventSetup& setup)
217 {
218  // Do not forward edm::LuminosityBlock
219  theAlignmentAlgo->beginLuminosityBlock(setup);
220 }
221 
222 //_____________________________________________________________________________
225  const edm::EventSetup& setup)
226 {
227  // Do not forward edm::LuminosityBlock
228  theAlignmentAlgo->endLuminosityBlock(setup);
229 }
230 
231 //_____________________________________________________________________________
234 {
235  if (!theAlignmentAlgo->processesEvents()) {
236  edm::LogWarning("BadConfig") << "@SUB=PCLTrackerAlProducer::analyze"
237  << "Skipping event. The current configuration "
238  << "of the alignment algorithm does not need "
239  << "to process any events.";
240  return;
241  }
242 
243  if (setupChanged(setup)) {
244  edm::LogInfo("Alignment") << "@SUB=PCLTrackerAlProducer::analyze"
245  << "EventSetup-Record changed.";
246  initAlignmentAlgorithm(setup);
247  }
248 
249  if (nevent_== 0 && theExtraAlignables) {
250  initBeamSpot(event);
251  }
252 
253  ++nevent_;
254 
255  // reading in survey records
256  readInSurveyRcds(setup);
257 
258  // Retrieve trajectories and tracks from the event
259  // -> merely skip if collection is empty
260  edm::Handle<TrajTrackAssociationCollection> handleTrajTracksCollection;
261 
262  if (event.getByLabel(tjTkAssociationMapTag_, handleTrajTracksCollection)) {
263  // Form pairs of trajectories and tracks
264  ConstTrajTrackPairs trajTracks;
265  for (auto iter = handleTrajTracksCollection->begin();
266  iter != handleTrajTracksCollection->end();
267  ++iter) {
268  trajTracks.push_back(ConstTrajTrackPair(&(*(*iter).key), &(*(*iter).val)));
269  }
270 
271  //check that the input tag is not empty
272  const AliClusterValueMap* clusterValueMapPtr = 0;
273  if (clusterValueMapTag_.encode().size()) {
274  edm::Handle<AliClusterValueMap> clusterValueMap;
275  event.getByLabel(clusterValueMapTag_, clusterValueMap);
276  clusterValueMapPtr = &(*clusterValueMap);
277  }
278 
279  const EventInfo eventInfo(event.id(),
280  trajTracks,
281  *theBeamSpot,
282  clusterValueMapPtr);
283 
284  // Run the alignment algorithm with its input
285  theAlignmentAlgo->run(setup, eventInfo);
286 
287  for (auto monitor = theMonitors.begin();
288  monitor != theMonitors.end();
289  ++monitor) {
290  (*monitor)->duringLoop(event, setup, trajTracks); // forward eventInfo?
291  }
292 
293  } else {
294  edm::LogError("Alignment") << "@SUB=PCLTrackerAlProducer::analyze"
295  << "No track collection found: skipping event";
296  }
297 }
298 
299 
300 
301 //=============================================================================
302 //=== PRIVATE METHOD IMPLEMENTATION ===
303 //=============================================================================
304 
305 /*** Code which is independent of Event & Setup
306  Called from constructor ***/
307 
308 //_____________________________________________________________________________
311 {
312  edm::ParameterSet algoConfig = config.getParameter<edm::ParameterSet>("algoConfig");
313  edm::VParameterSet iovSelection = config.getParameter<edm::VParameterSet>("RunRangeSelection");
314  algoConfig.addUntrackedParameter<edm::VParameterSet>("RunRangeSelection", iovSelection);
315 
316  std::string algoName = algoConfig.getParameter<std::string>("algoName");
317  theAlignmentAlgo = AlignmentAlgorithmPluginFactory::get()->create(algoName, algoConfig);
318 
319  if (!theAlignmentAlgo) {
320  throw cms::Exception("BadConfig")
321  << "Couldn't find the called alignment algorithm: " << algoName;
322  }
323 }
324 
325 //_____________________________________________________________________________
328 {
329  edm::ParameterSet monitorConfig = config.getParameter<edm::ParameterSet>("monitorConfig");
330  std::vector<std::string> monitors = monitorConfig.getUntrackedParameter<std::vector<std::string>>("monitors");
331 
332  for (auto miter = monitors.begin();
333  miter != monitors.end();
334  ++miter) {
336  *miter, monitorConfig.getUntrackedParameter<edm::ParameterSet>(*miter)
337  );
338 
339  if (!newMonitor) {
340  throw cms::Exception("BadConfig") << "Couldn't find monitor named "
341  << *miter;
342  }
343 
344  theMonitors.push_back(newMonitor);
345  }
346 }
347 
348 //_____________________________________________________________________________
351 {
352  edm::VParameterSet calibrations = config.getParameter<edm::VParameterSet>("calibrations");
353 
354  for (auto iCalib = calibrations.begin();
355  iCalib != calibrations.end();
356  ++iCalib) {
357  theCalibrations.push_back(
359  iCalib->getParameter<std::string>("calibrationName"), *iCalib
360  )
361  );
362  }
363 
364  // Not all algorithms support calibrations - so do not pass empty vector
365  // and throw if non-empty and not supported:
366  if (!theCalibrations.empty()) {
367  if (theAlignmentAlgo->supportsCalibrations()) {
368  theAlignmentAlgo->addCalibrations(theCalibrations);
369 
370  } else {
371  throw cms::Exception("BadConfig")
372  << "[TrackerAlignmentProducerForPCL::init]\n"
373  << "Configured " << theCalibrations.size() << " calibration(s) "
374  << "for algorithm not supporting it.";
375  }
376  }
377 }
378 
379 
380 
381 /*** Code which is dependent of Event & Setup
382  Called and checked for each Event ***/
383 
384 //_____________________________________________________________________________
387 {
388  bool changed = false;
389 
390  if (watchIdealGeometryRcd.check(setup)) {
391  changed = true;
392  }
393 
394  if (watchGlobalPositionRcd.check(setup)) {
395  changed = true;
396  }
397 
398  if (doTracker_) {
399  if (watchTrackerAlRcd.check(setup)) {
400  changed = true;
401  }
402 
403  if (watchTrackerAlErrorExtRcd.check(setup)) {
404  changed = true;
405  }
406 
407  if (watchTrackerSurDeRcd.check(setup)) {
408  changed = true;
409  }
410  }
411 
412  if (doMuon_) {
413  if (watchDTAlRcd.check(setup)) {
414  changed = true;
415  }
416 
417  if (watchDTAlErrExtRcd.check(setup)) {
418  changed = true;
419  }
420 
421  if (watchCSCAlRcd.check(setup)) {
422  changed = true;
423  }
424 
425  if (watchCSCAlErrExtRcd.check(setup)) {
426  changed = true;
427  }
428  }
429 
430  /* TODO: ExtraAlignables: Which record(s) to check?
431  *
432  if (useExtras_) {}
433  */
434 
435  return changed;
436 }
437 
438 //_____________________________________________________________________________
441 {
442  // Retrieve tracker topology from geometry
443  edm::ESHandle<TrackerTopology> tTopoHandle;
444  setup.get<TrackerTopologyRcd>().get(tTopoHandle);
445  const TrackerTopology* const tTopo = tTopoHandle.product();
446 
447  // Create the geometries from the ideal geometries (first time only)
448  //std::shared_ptr<TrackingGeometry> theTrackerGeometry;
449  createGeometries(setup);
450 
451  applyAlignmentsToDB(setup);
452  createAlignables(tTopo);
453  buildParameterStore();
454  applyMisalignment();
455 
456  // Initialize alignment algorithm and integrated calibration and pass the
457  // latter to algorithm
458  edm::LogInfo("Alignment") << "@SUB=PCLTrackerAlProducer::initAlignmentAlgorithm"
459  << "Initializing alignment algorithm.";
460  theAlignmentAlgo->initialize(setup,
461  theTrackerAlignables,
462  theMuonAlignables,
463  theExtraAlignables,
464  theAlignmentParameterStore);
465 
466  applyAlignmentsToGeometry();
467 }
468 
469 //_____________________________________________________________________________
472 {
473  event.getByLabel(beamSpotTag_, theBeamSpot);
474 
475  if (theExtraAlignables) {
476  edm::LogInfo("Alignment") << "@SUB=TrackerAlignmentProducerForPCL::initBeamSpot"
477  << "Initializing AlignableBeamSpot";
478 
479  theExtraAlignables->initializeBeamSpot(theBeamSpot->x0(),
480  theBeamSpot->y0(),
481  theBeamSpot->z0(),
482  theBeamSpot->dxdz(),
483  theBeamSpot->dydz());
484  }
485 }
486 
487 //_____________________________________________________________________________
490 {
491  if (doTracker_) {
492  edm::ESHandle<GeometricDet> geometricDet;
493  setup.get<IdealGeometryRecord>().get(geometricDet);
494 
495  TrackerGeomBuilderFromGeometricDet trackerBuilder;
496 
498  setup.get<PTrackerParametersRcd>().get( ptp );
499 
500  theTrackerGeometry = boost::shared_ptr<TrackerGeometry>(
501  trackerBuilder.build(&(*geometricDet), *ptp )
502  );
503  }
504 
505  if (doMuon_) {
508 
509  setup.get<IdealGeometryRecord>().get(cpv);
510  setup.get<MuonNumberingRecord>().get(mdc);
511 
512  theMuonDTGeometry = boost::shared_ptr<DTGeometry> (new DTGeometry);
513  theMuonCSCGeometry = boost::shared_ptr<CSCGeometry>(new CSCGeometry);
514 
515  DTGeometryBuilderFromDDD DTGeometryBuilder;
517  DTGeometryBuilder.build (theMuonDTGeometry, &(*cpv), *mdc);
518  CSCGeometryBuilder.build(theMuonCSCGeometry, &(*cpv), *mdc);
519  }
520 }
521 
522 //_____________________________________________________________________________
525 {
526  // Retrieve and apply alignments, if requested (requires z setup)
527  if (applyDbAlignment_) {
528  // we need GlobalPositionRcd - and have to keep track for later removal
529  // before writing again to DB...
530 
531  edm::ESHandle<Alignments> globalAlignments;
532  setup.get<GlobalPositionRcd>().get(globalAlignments);
533  globalPositions_ = new Alignments(*globalAlignments);
534 
535  if (doTracker_) {
536  applyDB<TrackerGeometry,
539  &(*theTrackerGeometry),
540  setup,
542  );
543 
544  applyDB<TrackerGeometry,
546  &(*theTrackerGeometry),
547  setup
548  );
549  }
550 
551  if (doMuon_) {
552  applyDB<DTGeometry,
555  &(*theMuonDTGeometry),
556  setup,
557  align::DetectorGlobalPosition(*globalPositions_, DetId(DetId::Muon))
558  );
559 
560  applyDB<CSCGeometry,
563  &(*theMuonCSCGeometry),
564  setup,
565  align::DetectorGlobalPosition(*globalPositions_, DetId(DetId::Muon))
566  );
567  }
568  }
569 }
570 
571 //_____________________________________________________________________________
574 {
575  if (doTracker_) {
576  theTrackerAlignables = new AlignableTracker(&(*theTrackerGeometry), tTopo);
577  }
578 
579  if (doMuon_) {
580  theMuonAlignables = new AlignableMuon(&(*theMuonDTGeometry), &(*theMuonCSCGeometry));
581  }
582 
583  if (useExtras_) {
584  theExtraAlignables = new AlignableExtras();
585  }
586 }
587 
588 //_____________________________________________________________________________
591 {
592  // Create alignment parameter builder
593  edm::LogInfo("Alignment") << "@SUB=PCLTrackerAlProducer::buildParameterStore"
594  << "Creating AlignmentParameterBuilder";
595 
596  edm::ParameterSet alParamBuildCfg = theParameterSet.getParameter<edm::ParameterSet>("ParameterBuilder");
597  edm::ParameterSet alParamStoreCfg = theParameterSet.getParameter<edm::ParameterSet>("ParameterStore");
598 
599  AlignmentParameterBuilder alignmentParameterBuilder(theTrackerAlignables,
600  theMuonAlignables,
601  theExtraAlignables,
602  alParamBuildCfg);
603 
604  // Fix alignables if requested
605  if (stNFixAlignables_ > 0) {
606  alignmentParameterBuilder.fixAlignables(stNFixAlignables_);
607  }
608 
609  // Get list of alignables
610  Alignables theAlignables = alignmentParameterBuilder.alignables();
611  edm::LogInfo("Alignment") << "@SUB=PCLTrackerAlProducer::buildParameterStore"
612  << "got " << theAlignables.size() << " alignables";
613 
614  // Create AlignmentParameterStore
615  theAlignmentParameterStore = new AlignmentParameterStore(theAlignables, alParamStoreCfg);
616  edm::LogInfo("Alignment") << "@SUB=PCLTrackerAlProducer::buildParameterStore"
617  << "AlignmentParameterStore created!";
618 }
619 
620 //_____________________________________________________________________________
623 {
624  // Apply misalignment scenario to alignable tracker and muon if requested
625  // WARNING: this assumes scenarioConfig can be passed to both muon and tracker
626 
627  if (doMisalignmentScenario_ && (doTracker_ || doMuon_)) {
628  edm::LogInfo("Alignment") << "@SUB=PCLTrackerAlProducer::beginOfJob"
629  << "Applying misalignment scenario to "
630  << (doTracker_ ? "tracker" : "")
631  << (doMuon_ ? (doTracker_ ? " and muon" : "muon") : ".");
632  edm::ParameterSet scenarioConfig = theParameterSet.getParameter<edm::ParameterSet>("MisalignmentScenario");
633 
634  if (doTracker_) {
635  TrackerScenarioBuilder scenarioBuilder(theTrackerAlignables);
636  scenarioBuilder.applyScenario(scenarioConfig);
637  }
638  if (doMuon_) {
639  MuonScenarioBuilder muonScenarioBuilder(theMuonAlignables);
640  muonScenarioBuilder.applyScenario(scenarioConfig);
641  }
642 
643  } else {
644  edm::LogInfo("Alignment") << "@SUB=TrackerAlignmentProducerForPCL::beginOfJob"
645  << "NOT applying misalignment scenario!";
646  }
647 
648  // Apply simple misalignment
649  const std::string sParSel(theParameterSet.getParameter<std::string>("parameterSelectorSimple"));
650  //simpleMisalignment(theAlignables, sParSel, stRandomShift_, stRandomRotation_, true);
651  simpleMisalignment(theAlignmentParameterStore->alignables(), sParSel, stRandomShift_, stRandomRotation_, true);
652 }
653 
654 //_____________________________________________________________________________
657  float shift, float rot, bool local)
658 {
659  std::ostringstream output; // collecting output
660 
661  if (shift > 0. || rot > 0.) {
662  output << "Adding random flat shift of max size " << shift
663  << " and adding random flat rotation of max size " << rot <<" to ";
664 
665  std::vector<bool> commSel(0);
666  if (selection != "-1") {
667  AlignmentParameterSelector aSelector(0,0); // no alignable needed here...
668  const std::vector<char> cSel(aSelector.convertParamSel(selection));
669 
670  if (cSel.size() < RigidBodyAlignmentParameters::N_PARAM) {
671  throw cms::Exception("BadConfig")
672  << "[PCLTrackerAlProducer::simpleMisalignment_]\n"
673  << "Expect selection string '" << selection << "' to be at least of length "
674  << RigidBodyAlignmentParameters::N_PARAM << " or to be '-1'.\n"
675  << "(Most probably you have to adjust the parameter 'parameterSelectorSimple'.)";
676  }
677 
678  for (auto cIter = cSel.begin();
679  cIter != cSel.end();
680  ++cIter) {
681  commSel.push_back(*cIter == '0' ? false : true);
682  }
683  output << "parameters defined by (" << selection
684  << "), representing (x,y,z,alpha,beta,gamma),";
685 
686  } else {
687  output << "the active parameters of each alignable,";
688  }
689  output << " in " << (local ? "local" : "global") << " frame.";
690 
691  for (auto it = alivec.begin();
692  it != alivec.end();
693  ++it) {
694  Alignable* ali = (*it);
695  std::vector<bool> mysel(commSel.empty() ? ali->alignmentParameters()->selector() : commSel);
696 
697  if (std::abs(shift)>0.00001) {
698  double s0 = 0., s1 = 0., s2 = 0.;
699 
700  if (mysel[RigidBodyAlignmentParameters::dx]) s0 = shift * double(random()%1000-500)/500.;
701  if (mysel[RigidBodyAlignmentParameters::dy]) s1 = shift * double(random()%1000-500)/500.;
702  if (mysel[RigidBodyAlignmentParameters::dz]) s2 = shift * double(random()%1000-500)/500.;
703 
704  if (local) ali->move( ali->surface().toGlobal(align::LocalVector(s0,s1,s2)) );
705  else ali->move( align::GlobalVector(s0,s1,s2) );
706 
707  //AlignmentPositionError ape(dx,dy,dz);
708  //ali->addAlignmentPositionError(ape);
709  }
710 
711  if (std::abs(rot)>0.00001) {
713  if (mysel[RigidBodyAlignmentParameters::dalpha]) r(1)=rot*double(random()%1000-500)/500.;
714  if (mysel[RigidBodyAlignmentParameters::dbeta]) r(2)=rot*double(random()%1000-500)/500.;
715  if (mysel[RigidBodyAlignmentParameters::dgamma]) r(3)=rot*double(random()%1000-500)/500.;
716 
717  const align::RotationType mrot = align::toMatrix(r);
718  if (local) ali->rotateInLocalFrame(mrot);
719  else ali->rotateInGlobalFrame(mrot);
720  //ali->addAlignmentPositionErrorFromRotation(mrot);
721  }
722  }
723 
724  } else {
725  output << "No simple misalignment added!";
726  }
727 
728  edm::LogInfo("Alignment") << "@SUB=PCLTrackerAlProducer::simpleMisalignment_" << output.str();
729 }
730 
731 //_____________________________________________________________________________
734 {
735  edm::LogInfo("Alignment") << "@SUB=PCLTrackerAlProducer::startingNewLoop"
736  << "Now physically apply alignments to geometry...";
737 
738  // Propagate changes to reconstruction geometry (from initialisation or iteration)
739  GeometryAligner aligner;
740 
741  if (doTracker_) {
742  std::auto_ptr<Alignments> alignments( theTrackerAlignables->alignments());
743  std::auto_ptr<AlignmentErrorsExtended> alignmentErrExt(theTrackerAlignables->alignmentErrors());
744  std::auto_ptr<AlignmentSurfaceDeformations> aliDeforms( theTrackerAlignables->surfaceDeformations());
745 
747  &(*theTrackerGeometry),
748  &(*alignments),
749  &(*alignmentErrExt),
751  ); // don't apply global a second time!
752 
754  &(*theTrackerGeometry),
755  &(*aliDeforms)
756  );
757  }
758 
759  if (doMuon_) {
760  std::auto_ptr<Alignments> dtAlignments( theMuonAlignables->dtAlignments());
761  std::auto_ptr<Alignments> cscAlignments(theMuonAlignables->cscAlignments());
762 
763  std::auto_ptr<AlignmentErrorsExtended> dtAlignmentErrExt(
764  theMuonAlignables->dtAlignmentErrorsExtended()
765  );
766  std::auto_ptr<AlignmentErrorsExtended> cscAlignmentErrExt(
767  theMuonAlignables->cscAlignmentErrorsExtended()
768  );
769 
770  aligner.applyAlignments<DTGeometry>(
771  &(*theMuonDTGeometry),
772  &(*dtAlignments),
773  &(*dtAlignmentErrExt),
775  ); // don't apply global a second time!
776 
777  aligner.applyAlignments<CSCGeometry>(
778  &(*theMuonCSCGeometry),
779  &(*cscAlignments),
780  &(*cscAlignmentErrExt),
782  ); // nope!
783  }
784 }
785 
786 //_____________________________________________________________________________
787 template<class G, class Rcd, class ErrRcd>
790  const AlignTransform& globalCoordinates) const
791 {
792  // 'G' is the geometry class for that DB should be applied,
793  // 'Rcd' is the record class for its Alignments
794  // 'ErrRcd' is the record class for its AlignmentErrorsExtended
795  // 'globalCoordinates' are global transformation for this geometry
796 
797  const Rcd& record = setup.get<Rcd>();
798  if (checkDbAlignmentValidity_) {
799  const edm::ValidityInterval & validity = record.validityInterval();
800  const edm::IOVSyncValue first = validity.first();
801  const edm::IOVSyncValue last = validity.last();
802 
803  if (first != edm::IOVSyncValue::beginOfTime() ||
804  last != edm::IOVSyncValue::endOfTime()) {
805  throw cms::Exception("DatabaseError")
806  << "@SUB=PCLTrackerAlProducer::applyDB"
807  << "\nTrying to apply " << record.key().name()
808  << " with multiple IOVs in tag.\nValidity range is "
809  << first.eventID().run() << " - " << last.eventID().run();
810  }
811  }
812 
813  edm::ESHandle<Alignments> alignments;
814  record.get(alignments);
815 
817  setup.get<ErrRcd>().get(alignmentErrExt);
818 
819  GeometryAligner aligner;
820  aligner.applyAlignments<G>(geometry, &(*alignments), &(*alignmentErrExt),
821  globalCoordinates);
822 }
823 
824 //_____________________________________________________________________________
825 template<class G, class DeformationRcd>
828 {
829  // 'G' is the geometry class for that DB should be applied,
830  // 'DeformationRcd' is the record class for its surface deformations
831 
832  const DeformationRcd & record = setup.get<DeformationRcd>();
833  if (checkDbAlignmentValidity_) {
834  const edm::ValidityInterval & validity = record.validityInterval();
835  const edm::IOVSyncValue first = validity.first();
836  const edm::IOVSyncValue last = validity.last();
837 
838  if (first != edm::IOVSyncValue::beginOfTime() ||
839  last != edm::IOVSyncValue::endOfTime()) {
840  throw cms::Exception("DatabaseError")
841  << "@SUB=PCLTrackerAlProducer::applyDB"
842  << "\nTrying to apply " << record.key().name()
843  << " with multiple IOVs in tag.\nValidity range is "
844  << first.eventID().run() << " - " << last.eventID().run();
845  }
846  }
848  record.get(surfaceDeformations);
849 
850  GeometryAligner aligner;
851  aligner.attachSurfaceDeformations<G>(geometry, &(*surfaceDeformations));
852 }
853 
854 //_____________________________________________________________________________
857 {
858 
859  // Get Survey Rcds and add Survey Info
860  if (doTracker_ && useSurvey_) {
861  bool tkSurveyBool = watchTkSurveyRcd.check(setup);
862  bool tkSurveyErrBool = watchTkSurveyErrExtRcd.check(setup);
863 
864  if (tkSurveyBool || tkSurveyErrBool) {
866  edm::ESHandle<SurveyErrors> surveyErrors;
867  setup.get<TrackerSurveyRcd>(). get(surveys);
868  setup.get<TrackerSurveyErrorExtendedRcd>().get(surveyErrors);
869 
870  theSurveyIndex = 0;
871  theSurveyValues = &(*surveys);
872  theSurveyErrors = &(*surveyErrors);
873 
874  addSurveyInfo(theTrackerAlignables);
875  }
876  }
877 
878  if (doMuon_ && useSurvey_) {
879  bool DTSurveyBool = watchTkSurveyRcd.check(setup);
880  bool DTSurveyErrBool = watchTkSurveyErrExtRcd.check(setup);
881  bool CSCSurveyBool = watchTkSurveyRcd.check(setup);
882  bool CSCSurveyErrBool = watchTkSurveyErrExtRcd.check(setup);
883 
884  if (DTSurveyBool || DTSurveyErrBool || CSCSurveyBool || CSCSurveyErrBool) {
885  edm::ESHandle<Alignments> dtSurveys;
886  edm::ESHandle<SurveyErrors> dtSurveyErrors;
887  edm::ESHandle<Alignments> cscSurveys;
888  edm::ESHandle<SurveyErrors> cscSurveyErrors;
889  setup.get<DTSurveyRcd>(). get(dtSurveys);
890  setup.get<DTSurveyErrorExtendedRcd>(). get(dtSurveyErrors);
891  setup.get<CSCSurveyRcd>(). get(cscSurveys);
892  setup.get<CSCSurveyErrorExtendedRcd>().get(cscSurveyErrors);
893 
894  theSurveyIndex = 0;
895  theSurveyValues = &(*dtSurveys);
896  theSurveyErrors = &(*dtSurveyErrors);
897 
898  Alignables barrels = theMuonAlignables->DTBarrel();
899  for (auto iter = barrels.begin();
900  iter != barrels.end();
901  ++iter) {
902  addSurveyInfo(*iter);
903  }
904 
905  theSurveyIndex = 0;
906  theSurveyValues = &(*cscSurveys);
907  theSurveyErrors = &(*cscSurveyErrors);
908 
909  Alignables endcaps = theMuonAlignables->CSCEndcaps();
910  for (auto iter = endcaps.begin();
911  iter != endcaps.end();
912  ++iter) {
913  addSurveyInfo(*iter);
914  }
915  }
916  }
917 
918 }
919 
920 //_____________________________________________________________________________
923 {
924  edm::LogInfo("Alignment") << "ADDING THE SURVEY INFORMATION";
925 
926  const std::vector<Alignable*>& comp = alignable->components();
927  for (size_t i = 0; i < comp.size(); ++i) {
928  addSurveyInfo(comp[i]);
929  }
930 
931  const SurveyError& error = theSurveyErrors->m_surveyErrors[theSurveyIndex];
932 
933  if (alignable->id() != error.rawId() ||
934  alignable->alignableObjectId() != error.structureType()) {
935  throw cms::Exception("DatabaseError")
936  << "Error reading survey info from DB. Mismatched id!";
937  }
938 
939  const CLHEP::Hep3Vector& pos = theSurveyValues->m_align[theSurveyIndex].translation();
940  const CLHEP::HepRotation& rot = theSurveyValues->m_align[theSurveyIndex].rotation();
941 
942  AlignableSurface surf(align::PositionType(pos.x(), pos.y(), pos.z()),
943  align::RotationType(rot.xx(), rot.xy(), rot.xz(),
944  rot.yx(), rot.yy(), rot.yz(),
945  rot.zx(), rot.zy(), rot.zz()));
946  surf.setWidth (alignable->surface().width());
947  surf.setLength(alignable->surface().length());
948 
949  alignable->setSurvey(new SurveyDet(surf, error.matrix()));
950 
951  ++theSurveyIndex;
952 }
953 
954 
955 
956 /*** Code for writing results to database
957  Called from endJob() ***/
958 
959 //_____________________________________________________________________________
962 {
963  if (theAlignmentAlgo->processesEvents() && nevent_ == 0) {
964  // beginOfJob is usually called by the framework in the first event of the first loop
965  // (a hack: beginOfJob needs the EventSetup that is not well defined without an event)
966  // and the algorithms rely on the initialisations done in beginOfJob. We cannot call
967  // this->beginOfJob(iSetup); here either since that will access the EventSetup to get
968  // some geometry information that is not defined either without having seen an event.
969  edm::LogError("Alignment") << "@SUB=PCLTrackerAlProducer::finish"
970  << "Did not process any events, stop "
971  << "without terminating algorithm.";
972  return;
973  }
974 
975  edm::LogInfo("Alignment") << "@SUB=PCLTrackerAlProducer::finish"
976  << "Terminating algorithm.";
977  theAlignmentAlgo->terminate();
978 
979  storeAlignmentsToDB();
980 }
981 
982 //_____________________________________________________________________________
985 {
986  if (theAlignmentAlgo->processesEvents() && nevent_ == 0) {
987  // TODO: If this is the case, it would be already caught in finish()
988  edm::LogError("Alignment") << "@SUB=PCLTrackerAlProducer::endOfJob"
989  << "Did not process any events in last loop, "
990  << "do not dare to store to DB.";
991  } else {
992  // Expand run ranges and make them unique
993  edm::VParameterSet runRangeSelectionVPSet(theParameterSet.getParameter<edm::VParameterSet>("RunRangeSelection"));
994  RunRanges uniqueRunRanges(makeNonOverlappingRunRanges(runRangeSelectionVPSet));
995 
996  // create dummy IOV
997  if (uniqueRunRanges.empty()) {
998  const RunRange runRange(cond::timeTypeSpecs[cond::runnumber].beginValue,
1000  uniqueRunRanges.push_back(runRange);
1001  }
1002 
1003  std::vector<AlgebraicVector> beamSpotParameters;
1004 
1005  for (auto iRunRange = uniqueRunRanges.begin();
1006  iRunRange != uniqueRunRanges.end();
1007  ++iRunRange) {
1008 
1009  theAlignmentAlgo->setParametersForRunRange(*iRunRange);
1010 
1011  // Save alignments to database
1012  if (saveToDB_ || saveApeToDB_ || saveDeformationsToDB_) {
1013  writeForRunRange((*iRunRange).first);
1014  }
1015 
1016  // Deal with extra alignables, e.g. beam spot
1017  if (theExtraAlignables) {
1018  Alignables &alis = theExtraAlignables->beamSpot();
1019  if (!alis.empty()) {
1020  BeamSpotAlignmentParameters *beamSpotAliPars = dynamic_cast<BeamSpotAlignmentParameters*>(alis[0]->alignmentParameters());
1021  beamSpotParameters.push_back(beamSpotAliPars->parameters());
1022  }
1023  }
1024  }
1025 
1026  if (theExtraAlignables) {
1027  std::ostringstream bsOutput;
1028 
1029  auto itPar = beamSpotParameters.begin();
1030  for (auto iRunRange = uniqueRunRanges.begin();
1031  iRunRange != uniqueRunRanges.end();
1032  ++iRunRange, ++itPar) {
1033  bsOutput << "Run range: " << (*iRunRange).first << " - " << (*iRunRange).second << "\n";
1034  bsOutput << " Displacement: x=" << (*itPar)[0] << ", y=" << (*itPar)[1] << "\n";
1035  bsOutput << " Slope: dx/dz=" << (*itPar)[2] << ", dy/dz=" << (*itPar)[3] << "\n";
1036  }
1037 
1038  edm::LogInfo("Alignment") << "@SUB=PCLTrackerAlProducer::endOfJob"
1039  << "Parameters for alignable beamspot:\n"
1040  << bsOutput.str();
1041  }
1042  }
1043 }
1044 
1045 //_____________________________________________________________________________
1048 {
1049  static bool oldRunRangeSelectionWarning = false;
1050 
1053 
1054  RunRanges uniqueRunRanges;
1055  if (!RunRangeSelectionVPSet.empty()) {
1056 
1057  std::map<RunNumber,RunNumber> uniqueFirstRunNumbers;
1058 
1059  for (auto ipset = RunRangeSelectionVPSet.begin();
1060  ipset != RunRangeSelectionVPSet.end();
1061  ++ipset) {
1062  const std::vector<std::string> RunRangeStrings = (*ipset).getParameter<std::vector<std::string> >("RunRanges");
1063 
1064  for (auto irange = RunRangeStrings.begin();
1065  irange != RunRangeStrings.end();
1066  ++irange) {
1067 
1068  if ((*irange).find(':') == std::string::npos) {
1069 
1070  RunNumber first = beginValue;
1071  long int temp = strtol((*irange).c_str(), 0, 0);
1072  if (temp!=-1) first = temp;
1073  uniqueFirstRunNumbers[first] = first;
1074 
1075  } else {
1076  if (!oldRunRangeSelectionWarning) {
1077  edm::LogWarning("BadConfig") << "@SUB=PCLTrackerAlProducer::makeNonOverlappingRunRanges"
1078  << "Config file contains old format for 'RunRangeSelection'. Only the start run\n"
1079  << "number is used internally. The number of the last run is ignored and can be\n"
1080  << "safely removed from the config file.\n";
1081  oldRunRangeSelectionWarning = true;
1082  }
1083 
1084  std::vector<std::string> tokens = edm::tokenize(*irange, ":");
1085  long int temp;
1086  RunNumber first = beginValue;
1087  temp = strtol(tokens[0].c_str(), 0, 0);
1088  if (temp!=-1) first = temp;
1089  uniqueFirstRunNumbers[first] = first;
1090  }
1091  }
1092  }
1093 
1094  for (auto iFirst = uniqueFirstRunNumbers.begin();
1095  iFirst != uniqueFirstRunNumbers.end();
1096  ++iFirst) {
1097  uniqueRunRanges.push_back(std::pair<RunNumber,RunNumber>((*iFirst).first, endValue));
1098  }
1099 
1100  for (size_t i = 0; i < uniqueRunRanges.size()-1; ++i) {
1101  uniqueRunRanges[i].second = uniqueRunRanges[i+1].first - 1;
1102  }
1103 
1104  } else {
1105  uniqueRunRanges.push_back(std::pair<RunNumber,RunNumber>(theFirstRun, endValue));
1106  }
1107 
1108  return uniqueRunRanges;
1109 }
1110 
1111 //_____________________________________________________________________________
1114 {
1115  // first tracker
1116  if (doTracker_) {
1117  const AlignTransform* trackerGlobal = 0; // will be 'removed' from constants
1118  if (globalPositions_) { // i.e. applied before in applyDB
1119  trackerGlobal = &align::DetectorGlobalPosition(*globalPositions_,
1121  }
1122 
1123  // theTrackerAlignables->alignments calls new
1124  Alignments* alignments = theTrackerAlignables->alignments();
1125  AlignmentErrorsExtended* alignmentErrExt = theTrackerAlignables->alignmentErrors();
1126 
1127  writeDB(alignments, "TrackerAlignmentRcd",
1128  alignmentErrExt, "TrackerAlignmentErrorExtendedRcd",
1129  trackerGlobal,
1130  time);
1131  }
1132 
1133  // Save surface deformations to database
1134  if (doTracker_ && saveDeformationsToDB_) {
1135  AlignmentSurfaceDeformations* alignmentSurfaceDeformations = theTrackerAlignables->surfaceDeformations();
1136  writeDB(alignmentSurfaceDeformations, "TrackerSurfaceDeformationRcd", time);
1137  }
1138 
1139  // now muon
1140  if (doMuon_) {
1141  const AlignTransform* muonGlobal = 0; // will be 'removed' from constants
1142  if (globalPositions_) { // i.e. applied before in applyDB
1143  muonGlobal = &align::DetectorGlobalPosition(*globalPositions_,
1144  DetId(DetId::Muon));
1145  }
1146 
1147  // Get alignments+errors, first DT - ownership taken over by writeDB(..), so no delete
1148  Alignments* alignments = theMuonAlignables->dtAlignments();
1149  AlignmentErrorsExtended* alignmentErrExt = theMuonAlignables->dtAlignmentErrorsExtended();
1150 
1151  writeDB(alignments, "DTAlignmentRcd",
1152  alignmentErrExt, "DTAlignmentErrorExtendedRcd",
1153  muonGlobal,
1154  time);
1155 
1156  // Get alignments+errors, now CSC - ownership taken over by writeDB(..), so no delete
1157  alignments = theMuonAlignables->cscAlignments();
1158  alignmentErrExt = theMuonAlignables->cscAlignmentErrorsExtended();
1159 
1160  writeDB(alignments, "CSCAlignmentRcd",
1161  alignmentErrExt, "CSCAlignmentErrorExtendedRcd",
1162  muonGlobal,
1163  time);
1164  }
1165 }
1166 
1167 //_____________________________________________________________________________
1169 ::writeDB(Alignments* alignments, const std::string &alignRcd,
1170  AlignmentErrorsExtended* alignmentErrExt, const std::string &errRcd,
1171  const AlignTransform *globalCoordinates,
1172  cond::Time_t time) const
1173 {
1174  Alignments* tempAlignments = alignments;
1175  AlignmentErrorsExtended* tempAlignmentErrExt = alignmentErrExt;
1176 
1177  // Call service
1179  if (!poolDb.isAvailable()) { // Die if not available
1180  delete tempAlignments; // promised to take over ownership...
1181  delete tempAlignmentErrExt; // dito
1182 
1183  throw cms::Exception("NotAvailable") << "PoolDBOutputService not available";
1184  }
1185 
1186  if (globalCoordinates && // happens only if (applyDbAlignment_ == true)
1187  globalCoordinates->transform() != AlignTransform::Transform::Identity) {
1188 
1189  tempAlignments = new Alignments(); // temporary storage for
1190  tempAlignmentErrExt = new AlignmentErrorsExtended(); // final alignments and errors
1191 
1192  GeometryAligner aligner;
1193  aligner.removeGlobalTransform(alignments, alignmentErrExt,
1194  *globalCoordinates,
1195  tempAlignments, tempAlignmentErrExt);
1196 
1197  delete alignments; // have to delete original alignments
1198  delete alignmentErrExt; // same thing for the errors
1199 
1200  edm::LogInfo("Alignment") << "@SUB=PCLTrackerAlProducer::writeDB"
1201  << "globalCoordinates removed from alignments ("
1202  << alignRcd << ") and errors (" << alignRcd << ").";
1203  }
1204 
1205  if (saveToDB_) {
1206  edm::LogInfo("Alignment") << "Writing Alignments for run " << time
1207  << " to " << alignRcd << ".";
1208  poolDb->writeOne<Alignments>(tempAlignments, time, alignRcd);
1209 
1210  } else {
1211  // poolDb->writeOne(..) takes over 'alignments' ownership, ...
1212  delete tempAlignments; // ...otherwise we have to delete, as promised!
1213  }
1214 
1215  if (saveApeToDB_) {
1216  edm::LogInfo("Alignment") << "Writing AlignmentErrorsExtended for run "
1217  << time << " to " << errRcd << ".";
1218  poolDb->writeOne<AlignmentErrorsExtended>(tempAlignmentErrExt, time, errRcd);
1219 
1220  } else {
1221  // poolDb->writeOne(..) takes over 'alignmentErrors' ownership, ...
1222  delete tempAlignmentErrExt; // ...otherwise we have to delete, as promised!
1223  }
1224 }
1225 
1226 //_____________________________________________________________________________
1228 ::writeDB(AlignmentSurfaceDeformations* alignmentSurfaceDeformations,
1229  const std::string &surfaceDeformationRcd,
1230  cond::Time_t time) const
1231 {
1232  // Call service
1234  if (!poolDb.isAvailable()) { // Die if not available
1235  delete alignmentSurfaceDeformations; // promised to take over ownership...
1236  throw cms::Exception("NotAvailable") << "PoolDBOutputService not available";
1237  }
1238 
1239  if (saveDeformationsToDB_) {
1240  edm::LogInfo("Alignment") << "Writing AlignmentSurfaceDeformations for run "
1241  << time << " to " << surfaceDeformationRcd << ".";
1242  poolDb->writeOne<AlignmentSurfaceDeformations>(alignmentSurfaceDeformations, time,
1243  surfaceDeformationRcd);
1244 
1245  } else {
1246  // poolDb->writeOne(..) takes over 'surfaceDeformation' ownership,...
1247  delete alignmentSurfaceDeformations; // ...otherwise we have to delete, as promised!
1248  }
1249 }
1250 
1251 
1252 
RunNumber_t run() const
Definition: EventID.h:39
const TimeTypeSpecs timeTypeSpecs[]
Definition: Time.cc:22
align::Scalar width() const
T getParameter(std::string const &) const
align::ID id() const
Return the ID of Alignable, i.e. DetId of &#39;first&#39; component GeomDet(Unit).
Definition: Alignable.h:180
bool getByLabel(std::string const &label, Handle< PROD > &result) const
Definition: Run.h:216
T getUntrackedParameter(std::string const &, T const &) const
int i
Definition: DBlmapReader.cc:9
void buildParameterStore()
Creates the , which manages all Alignables.
virtual void rotateInLocalFrame(const RotationType &rotation)
Rotation intepreted in the local reference frame.
Definition: Alignable.cc:91
void createCalibrations(const edm::ParameterSet &)
Creates the calibrations (specified in config-file)
RunID const & id() const
Definition: RunBase.h:41
Builds a scenario from configuration and applies it to the alignable Muon.
std::vector< Alignable * > Alignables
Definition: Alignable.h:246
RunRanges makeNonOverlappingRunRanges(const edm::VParameterSet &)
Makes unique RunRanges (specified in config-file)
RunNumber_t run() const
Definition: RunID.h:39
const EventID & eventID() const
Definition: IOVSyncValue.h:42
Time_t beginValue
Definition: Time.h:45
Class to update a given geometry with a set of alignments.
void applyMisalignment()
Applies misalignment scenario to .
JetCorrectorParameters::Record record
Definition: classes.h:7
#define DEFINE_FWK_MODULE(type)
Definition: MakerMacros.h:17
std::vector< ParameterSet > VParameterSet
Definition: ParameterSet.h:33
ErrorMatrix matrix() const
Definition: SurveyError.h:76
void writeDB(Alignments *, const std::string &, AlignmentErrorsExtended *, const std::string &, const AlignTransform *, cond::Time_t) const
void storeAlignmentsToDB()
Writes Alignments (i.e. Records) to database-file.
Tracker-AlignmentProducer for Prompt Calibration Loop (PCL)
selection
main part
Definition: corrVsCorr.py:98
static const IOVSyncValue & endOfTime()
Definition: IOVSyncValue.cc:97
virtual void move(const GlobalVector &displacement)=0
Movement with respect to the global reference frame.
virtual void analyze(const edm::Event &, const edm::EventSetup &) override
const std::vector< bool > & selector(void) const
Get alignment parameter selector vector.
void setWidth(align::Scalar width)
TRandom random
Definition: MVATrainer.cc:138
virtual void endLuminosityBlock(const edm::LuminosityBlock &, const edm::EventSetup &) override
void applyAlignmentsToDB(const edm::EventSetup &)
uint8_t structureType() const
Definition: SurveyError.h:66
virtual Alignables components() const =0
Return vector of all direct components.
void applyDB(G *, const edm::EventSetup &, const AlignTransform &) const
virtual ~PCLTrackerAlProducer()
Destructor.
AlignmentParameters * alignmentParameters() const
Get the AlignmentParameters.
Definition: Alignable.h:57
define event information passed to algorithms
tuple s2
Definition: indexGen.py:106
const IOVSyncValue & last() const
void build(boost::shared_ptr< CSCGeometry > geom, const DDCompactView *fv, const MuonDDDConstants &muonConstants)
Build the geometry.
void setLength(align::Scalar length)
const AlgebraicVector & parameters(void) const
Get alignment parameters.
void createMonitors(const edm::ParameterSet &)
Creates the monitors (specified in config-file)
std::vector< ConstTrajTrackPair > ConstTrajTrackPairs
unsigned long long Time_t
Definition: Time.h:16
std::pair< RunNumber, RunNumber > RunRange
static const IOVSyncValue & beginOfTime()
virtual void beginRun(const edm::Run &, const edm::EventSetup &) override
virtual void endJob() override
void attachSurfaceDeformations(C *geometry, const AlignmentSurfaceDeformations *surfaceDeformations)
void simpleMisalignment(const Alignables &, const std::string &, float, float, bool)
Applies misalignment scenario to .
void removeGlobalTransform(const Alignments *alignments, const AlignmentErrorsExtended *alignmentErrors, const AlignTransform &globalCoordinates, Alignments *newAlignments, AlignmentErrorsExtended *newAlignmentErrorsExtended)
bool isAvailable() const
Definition: Service.h:46
virtual StructureType alignableObjectId() const =0
Return the alignable type identifier.
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
align::ID rawId() const
Definition: SurveyError.h:71
void writeOne(T *payload, Time_t time, const std::string &recordName, bool withlogging=false)
AlignmentAlgorithmBase::EndRunInfo EndRunInfo
void applyScenario(const edm::ParameterSet &scenario)
Apply misalignment scenario to the tracker.
void readInSurveyRcds(const edm::EventSetup &)
Reads in survey records.
How EventSelector::AcceptEvent() decides whether to accept an event for output otherwise it is excluding the probing of A single or multiple positive and the trigger will pass if any such matching triggers are PASS or EXCEPTION[A criterion thatmatches no triggers at all is detected and causes a throw.] A single negative with an expectation of appropriate bit checking in the decision and the trigger will pass if any such matching triggers are FAIL or EXCEPTION A wildcarded negative criterion that matches more than one trigger in the trigger but the state exists so we define the behavior If all triggers are the negative crieriion will lead to accepting the event(this again matches the behavior of"!*"before the partial wildcard feature was incorporated).The per-event"cost"of each negative criterion with multiple relevant triggers is about the same as!*was in the past
bool setupChanged(const edm::EventSetup &)
Checks if one of the EventSetup-Records has changed.
bool getByLabel(InputTag const &tag, Handle< PROD > &result) const
Definition: Event.h:413
const AlignableSurface & surface() const
Return the Surface (global position and orientation) of the object.
Definition: Alignable.h:126
std::pair< const Trajectory *, const reco::Track * > ConstTrajTrackPair
tuple G
Definition: callgraph.py:12
void createGeometries(const edm::EventSetup &)
Creates ideal geometry from IdealGeometryRecord.
virtual void beginJob() override
std::vector< RunRange > RunRanges
Definition: DetId.h:18
void applyAlignments(C *geometry, const Alignments *alignments, const AlignmentErrorsExtended *alignmentErrors, const AlignTransform &globalCoordinates)
AlgebraicVector EulerAngles
Definition: Definitions.h:36
align::Scalar length() const
Transform transform() const
virtual void endRun(const edm::Run &, const edm::EventSetup &) override
virtual void rotateInGlobalFrame(const RotationType &rotation)=0
void addUntrackedParameter(std::string const &name, T const &value)
Definition: ParameterSet.h:208
std::vector< std::string > tokenize(std::string const &input, std::string const &separator)
breaks the input string into tokens, delimited by the separator
Definition: Parse.cc:57
void setSurvey(const SurveyDet *)
Set survey info.
Definition: Alignable.cc:277
const T & get() const
Definition: EventSetup.h:55
T const * product() const
Definition: ESHandle.h:86
TrackerGeometry * build(const GeometricDet *gd, const PTrackerParameters &ptp)
void build(boost::shared_ptr< CSCGeometry > theGeometry, const RecoIdealGeometry &rig, const CSCRecoDigiParameters &cscpars)
Build the geometry.
ESHandle< TrackerGeometry > geometry
edm::EventID id() const
Definition: EventBase.h:60
void writeForRunRange(cond::Time_t)
align::GlobalPoints toGlobal(const align::LocalPoints &) const
Return in global coord given a set of local points.
RotationType toMatrix(const EulerAngles &)
Convert rotation angles about x-, y-, z-axes to matrix.
Definition: Utilities.cc:40
void addSurveyInfo(Alignable *)
Adds survey info to an Alignable.
std::vector< char > convertParamSel(const std::string &selString) const
Converting std::string into std::vector&lt;char&gt;
virtual void beginLuminosityBlock(const edm::LuminosityBlock &, const edm::EventSetup &) override
void initBeamSpot(const edm::Event &)
Initializes Beamspot of Alignables .
static unsigned int const shift
void createAlignmentAlgorithm(const edm::ParameterSet &)
Creates the choosen alignment algorithm (specified in config-file)
const AlignTransform & DetectorGlobalPosition(const Alignments &allGlobals, const DetId &id)
const IOVSyncValue & first() const
Time_t endValue
Definition: Time.h:46
Builds a scenario from configuration and applies it to the alignable tracker.
void createAlignables(const TrackerTopology *const)
void setup(std::vector< TH2F > &depth, std::string name, std::string units="")
SurfaceDeformation * create(int type, const std::vector< double > &params)
void applyScenario(const edm::ParameterSet &scenario)
Apply misalignment scenario to the Muon.
T get(const Candidate &c)
Definition: component.h:55
cond::RealTimeType< cond::runnumber >::type RunNumber
PCLTrackerAlProducer(const edm::ParameterSet &)
Constructor.
Definition: Run.h:41
void initAlignmentAlgorithm(const edm::EventSetup &)