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