CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
AlignmentProducer.cc
Go to the documentation of this file.
1 
8 #include "AlignmentProducer.h"
13 
15 
16 // System include files
17 #include <memory>
18 #include <sstream>
19 
20 // Framework
26 
28 
29 // Conditions database
32 
33 // Geometry
60 
61 // Tracking, LAS and cluster flag map (fwd is enough!)
66 
67 // Alignment
78 
79 //_____________________________________________________________________________
81  theAlignmentAlgo(0), theAlignmentParameterStore(0),
82  theAlignableExtras(0), theAlignableTracker(0), theAlignableMuon(0),
83  globalPositions_(0),
84  nevent_(0), theParameterSet(iConfig),
85  theMaxLoops( iConfig.getUntrackedParameter<unsigned int>("maxLoops") ),
86  stNFixAlignables_(iConfig.getParameter<int>("nFixAlignables") ),
87  stRandomShift_(iConfig.getParameter<double>("randomShift")),
88  stRandomRotation_(iConfig.getParameter<double>("randomRotation")),
89  applyDbAlignment_( iConfig.getUntrackedParameter<bool>("applyDbAlignment")),
90  checkDbAlignmentValidity_( iConfig.getUntrackedParameter<bool>("checkDbAlignmentValidity")),
91  doMisalignmentScenario_(iConfig.getParameter<bool>("doMisalignmentScenario")),
92  saveToDB_(iConfig.getParameter<bool>("saveToDB")),
93  saveApeToDB_(iConfig.getParameter<bool>("saveApeToDB")),
94  saveDeformationsToDB_(iConfig.getParameter<bool>("saveDeformationsToDB")),
95  doTracker_( iConfig.getUntrackedParameter<bool>("doTracker") ),
96  doMuon_( iConfig.getUntrackedParameter<bool>("doMuon") ),
97  useExtras_( iConfig.getUntrackedParameter<bool>("useExtras") ),
98  useSurvey_( iConfig.getParameter<bool>("useSurvey") ),
99  tjTkAssociationMapTag_(iConfig.getParameter<edm::InputTag>("tjTkAssociationMapTag")),
100  beamSpotTag_(iConfig.getParameter<edm::InputTag>("beamSpotTag")),
101  tkLasBeamTag_(iConfig.getParameter<edm::InputTag>("tkLasBeamTag")),
102  clusterValueMapTag_(iConfig.getParameter<edm::InputTag>("hitPrescaleMapTag"))
103 {
104  edm::LogInfo("Alignment") << "@SUB=AlignmentProducer::AlignmentProducer";
105 
106  // Tell the framework what data is being produced
107  if (doTracker_) {
109  }
110  if (doMuon_) {
113  }
114 
115  // Create the alignment algorithm
116  edm::ParameterSet algoConfig = iConfig.getParameter<edm::ParameterSet>( "algoConfig" );
117  edm::VParameterSet iovSelection = iConfig.getParameter<edm::VParameterSet>( "RunRangeSelection" );
118  algoConfig.addUntrackedParameter<edm::VParameterSet>( "RunRangeSelection", iovSelection );
119  std::string algoName = algoConfig.getParameter<std::string>( "algoName" );
120  theAlignmentAlgo = AlignmentAlgorithmPluginFactory::get( )->create( algoName, algoConfig );
121 
122  // Check if found
123  if ( !theAlignmentAlgo )
124  throw cms::Exception("BadConfig") << "Couldn't find algorithm called " << algoName;
125 
126  // Now create monitors:
127  edm::ParameterSet monitorConfig = iConfig.getParameter<edm::ParameterSet>( "monitorConfig" );
128  std::vector<std::string> monitors = monitorConfig.getUntrackedParameter<std::vector<std::string> >( "monitors" );
129  for (std::vector<std::string>::const_iterator miter = monitors.begin(); miter != monitors.end(); ++miter) {
130  AlignmentMonitorBase* newMonitor = AlignmentMonitorPluginFactory::get()->create(*miter, monitorConfig.getUntrackedParameter<edm::ParameterSet>(*miter));
131 
132  if (!newMonitor) throw cms::Exception("BadConfig") << "Couldn't find monitor named " << *miter;
133 
134  theMonitors.push_back(newMonitor);
135  }
136 
137  // Finally create integrated calibrations:
138  edm::VParameterSet calibrations = iConfig.getParameter<edm::VParameterSet>("calibrations");
139  for (auto iCalib = calibrations.begin(); iCalib != calibrations.end(); ++iCalib) {
140  const std::string name(iCalib->getParameter<std::string>("calibrationName"));
142  // exception comes from line before: if (!theCalibrations.back()) throw cms::Exception(..) << ..;
143  }
144 
145 }
146 
147 
148 //_____________________________________________________________________________
149 // Delete new objects
151 {
152  delete theAlignmentAlgo;
153 
154  // Delete monitors as well??
155 
156  for (auto iCal = theCalibrations.begin(); iCal != theCalibrations.end(); ++iCal) {
157  delete *iCal; // delete integrated calibration pointed to by (*iCal)
158  }
159 
161  delete theAlignableExtras;
162  delete theAlignableTracker;
163  delete theAlignableMuon;
164 
165  delete globalPositions_;
166 }
167 
168 
169 //_____________________________________________________________________________
170 // Produce tracker geometry
171 std::shared_ptr<TrackerGeometry>
173 {
174  edm::LogInfo("Alignment") << "@SUB=AlignmentProducer::produceTracker";
175  return theTracker;
176 }
177 
178 //_____________________________________________________________________________
179 // Produce muonDT geometry
180 std::shared_ptr<DTGeometry>
182 {
183  edm::LogInfo("Alignment") << "@SUB=AlignmentProducer::produceDT";
184  return theMuonDT;
185 }
186 
187 //_____________________________________________________________________________
188 // Produce muonCSC geometry
189 std::shared_ptr<CSCGeometry>
191 {
192  edm::LogInfo("Alignment") << "@SUB=AlignmentProducer::produceCSC";
193  return theMuonCSC;
194 }
195 
196 
197 //_____________________________________________________________________________
198 // Initialize algorithm
200 {
201  edm::LogInfo("Alignment") << "@SUB=AlignmentProducer::beginOfJob";
202 
203  //Retrieve tracker topology from geometry
204  edm::ESHandle<TrackerTopology> tTopoHandle;
205  iSetup.get<TrackerTopologyRcd>().get(tTopoHandle);
206  const TrackerTopology* const tTopo = tTopoHandle.product();
207 
208  // Create the geometries from the ideal geometries (first time only)
209  this->createGeometries_( iSetup );
210 
211  // Retrieve and apply alignments, if requested (requires DB setup)
212  if ( applyDbAlignment_ ) {
213  // we need GlobalPositionRcd - and have to keep track for later removal
214  // before writing again to DB...
215  edm::ESHandle<Alignments> globalPositionRcd;
216  iSetup.get<GlobalPositionRcd>().get(globalPositionRcd);
217  globalPositions_ = new Alignments(*globalPositionRcd);
218 
219  if ( doTracker_ ) { // apply to tracker
220  this->applyDB<TrackerGeometry,TrackerAlignmentRcd,TrackerAlignmentErrorExtendedRcd>
221  (&(*theTracker), iSetup,
223  this->applyDB<TrackerGeometry,TrackerSurfaceDeformationRcd>(&(*theTracker), iSetup);
224  }
225 
226  if ( doMuon_ ) { // apply to tracker
227  this->applyDB<DTGeometry,DTAlignmentRcd,DTAlignmentErrorExtendedRcd>
228  (&(*theMuonDT), iSetup,
230  this->applyDB<CSCGeometry,CSCAlignmentRcd,CSCAlignmentErrorExtendedRcd>
231  (&(*theMuonCSC), iSetup,
233  }
234  }
235 
236  // Create alignable tracker and muon
237  if (doTracker_) {
238  theAlignableTracker = new AlignableTracker( &(*theTracker), tTopo );
239  }
240 
241  if (doMuon_) {
243  }
244 
245  if (useExtras_) {
247  }
248 
249  // Create alignment parameter builder
250  edm::LogInfo("Alignment") << "@SUB=AlignmentProducer::beginOfJob"
251  << "Creating AlignmentParameterBuilder";
252  edm::ParameterSet aliParamBuildCfg =
253  theParameterSet.getParameter<edm::ParameterSet>("ParameterBuilder");
254  AlignmentParameterBuilder alignmentParameterBuilder(theAlignableTracker,
257  aliParamBuildCfg );
258  // Fix alignables if requested
259  if (stNFixAlignables_>0) alignmentParameterBuilder.fixAlignables(stNFixAlignables_);
260 
261  // Get list of alignables
262  Alignables theAlignables = alignmentParameterBuilder.alignables();
263 
264  edm::LogInfo("Alignment") << "Constructed theAlignables calling alignmentParameterBuilder.alignables()";
265  edm::LogInfo("Alignment") << "@SUB=AlignmentProducer::beginOfJob"
266  << "got " << theAlignables.size() << " alignables";
267 
268  // Create AlignmentParameterStore
269  edm::ParameterSet aliParamStoreCfg =
271  theAlignmentParameterStore = new AlignmentParameterStore(theAlignables, aliParamStoreCfg);
272  edm::LogInfo("Alignment") << "@SUB=AlignmentProducer::beginOfJob"
273  << "AlignmentParameterStore created!";
274 
275  // Apply misalignment scenario to alignable tracker and muon if requested
276  // WARNING: this assumes scenarioConfig can be passed to both muon and tracker
278  edm::LogInfo("Alignment") << "@SUB=AlignmentProducer::beginOfJob"
279  << "Applying misalignment scenario to "
280  << (doTracker_ ? "tracker" : "")
281  << (doMuon_ ? (doTracker_ ? " and muon" : "muon") : ".");
282  edm::ParameterSet scenarioConfig
283  = theParameterSet.getParameter<edm::ParameterSet>( "MisalignmentScenario" );
284  if (doTracker_) {
285  TrackerScenarioBuilder scenarioBuilder( theAlignableTracker );
286  scenarioBuilder.applyScenario( scenarioConfig );
287  }
288  if (doMuon_) {
289  MuonScenarioBuilder muonScenarioBuilder( theAlignableMuon );
290  muonScenarioBuilder.applyScenario( scenarioConfig );
291  }
292  } else {
293  edm::LogInfo("Alignment") << "@SUB=AlignmentProducer::beginOfJob"
294  << "NOT applying misalignment scenario!";
295  }
296 
297  // Apply simple misalignment
298  const std::string sParSel(theParameterSet.getParameter<std::string>("parameterSelectorSimple"));
299  this->simpleMisalignment_(theAlignables, sParSel, stRandomShift_, stRandomRotation_, true);
300 
301  // Initialize alignment algorithm and integrated calibration and pass the latter to algorithm
302  theAlignmentAlgo->initialize( iSetup,
304  theAlignmentParameterStore );
305  for (auto iCal = theCalibrations.begin(); iCal != theCalibrations.end(); ++iCal) {
307  }
308  // Not all algorithms support calibrations - so do not pass empty vector
309  // and throw if non-empty and not supported:
311  throw cms::Exception("BadConfig") << "[AlignmentProducer::beginOfJob]\n"
312  << "Configured " << theCalibrations.size() << " calibration(s) "
313  << "for algorithm not supporting it.";
314  }
315 
316  for (std::vector<AlignmentMonitorBase*>::const_iterator monitor = theMonitors.begin();
317  monitor != theMonitors.end(); ++monitor) {
318  (*monitor)->beginOfJob(theAlignableTracker, theAlignableMuon, theAlignmentParameterStore);
319  }
320 }
321 
322 //_____________________________________________________________________________
323 // Terminate algorithm
325 {
326  edm::LogInfo("Alignment") << "@SUB=AlignmentProducer::endOfJob";
327 
328  for (std::vector<AlignmentMonitorBase*>::const_iterator monitor = theMonitors.begin(); monitor != theMonitors.end(); ++monitor) {
329  (*monitor)->endOfJob();
330  }
331 
332  if (0 == nevent_) {
333  edm::LogError("Alignment") << "@SUB=AlignmentProducer::endOfJob" << "Did not process any "
334  << "events in last loop, do not dare to store to DB.";
335  } else {
336 
337  // Expand run ranges and make them unique
338  edm::VParameterSet runRangeSelectionVPSet(theParameterSet.getParameter<edm::VParameterSet>("RunRangeSelection"));
339  RunRanges uniqueRunRanges(this->makeNonOverlappingRunRanges(runRangeSelectionVPSet));
340  if (uniqueRunRanges.empty()) { // create dummy IOV
341  const RunRange runRange(cond::timeTypeSpecs[cond::runnumber].beginValue,
343  uniqueRunRanges.push_back(runRange);
344  }
345 
346  std::vector<AlgebraicVector> beamSpotParameters;
347 
348  for (RunRanges::const_iterator iRunRange = uniqueRunRanges.begin();
349  iRunRange != uniqueRunRanges.end();
350  ++iRunRange) {
351 
353 
354  // Save alignments to database
356  this->writeForRunRange((*iRunRange).first);
357 
358  // Deal with extra alignables, e.g. beam spot
359  if (theAlignableExtras) {
361  if (!alis.empty()) {
362  BeamSpotAlignmentParameters *beamSpotAliPars = dynamic_cast<BeamSpotAlignmentParameters*>(alis[0]->alignmentParameters());
363  beamSpotParameters.push_back(beamSpotAliPars->parameters());
364  }
365  }
366  }
367 
368  if (theAlignableExtras) {
369  std::ostringstream bsOutput;
370 
371  std::vector<AlgebraicVector>::const_iterator itPar = beamSpotParameters.begin();
372  for (RunRanges::const_iterator iRunRange = uniqueRunRanges.begin();
373  iRunRange != uniqueRunRanges.end();
374  ++iRunRange, ++itPar) {
375  bsOutput << "Run range: " << (*iRunRange).first << " - " << (*iRunRange).second << "\n";
376  bsOutput << " Displacement: x=" << (*itPar)[0] << ", y=" << (*itPar)[1] << "\n";
377  bsOutput << " Slope: dx/dz=" << (*itPar)[2] << ", dy/dz=" << (*itPar)[3] << "\n";
378  }
379 
380  edm::LogInfo("Alignment") << "@SUB=AlignmentProducer::endOfJob"
381  << "Parameters for alignable beamspot:\n"
382  << bsOutput.str();
383  }
384 
385  for (auto iCal = theCalibrations.begin(); iCal != theCalibrations.end(); ++iCal) {
386  (*iCal)->endOfJob();
387  }
388 
389  }
390 }
391 
392 //_____________________________________________________________________________
393 // Called at beginning of loop
394 void AlignmentProducer::startingNewLoop(unsigned int iLoop )
395 {
396  edm::LogInfo("Alignment") << "@SUB=AlignmentProducer::startingNewLoop"
397  << "Starting loop number " << iLoop;
398 
399  nevent_ = 0;
400 
402  // FIXME: Should this be done in algorithm::startNewLoop()??
403  for (auto iCal = theCalibrations.begin(); iCal != theCalibrations.end(); ++iCal) {
404  (*iCal)->startNewLoop();
405  }
406 
407  for (std::vector<AlignmentMonitorBase*>::const_iterator monitor = theMonitors.begin(); monitor != theMonitors.end(); ++monitor) {
408  (*monitor)->startingNewLoop();
409  }
410 
411  edm::LogInfo("Alignment") << "@SUB=AlignmentProducer::startingNewLoop"
412  << "Now physically apply alignments to geometry...";
413 
414 
415  // Propagate changes to reconstruction geometry (from initialisation or iteration)
416  GeometryAligner aligner;
417  if ( doTracker_ ) {
418  std::auto_ptr<Alignments> alignments(theAlignableTracker->alignments());
419  std::auto_ptr<AlignmentErrorsExtended> alignmentErrors(theAlignableTracker->alignmentErrors());
420  aligner.applyAlignments<TrackerGeometry>( &(*theTracker),&(*alignments),&(*alignmentErrors), AlignTransform() ); // don't apply global a second time!
421  std::auto_ptr<AlignmentSurfaceDeformations> aliDeforms(theAlignableTracker->surfaceDeformations());
422  aligner.attachSurfaceDeformations<TrackerGeometry>(&(*theTracker), &(*aliDeforms));
423 
424  }
425  if ( doMuon_ ) {
426  std::auto_ptr<Alignments> dtAlignments( theAlignableMuon->dtAlignments());
427  std::auto_ptr<AlignmentErrorsExtended> dtAlignmentErrorsExtended( theAlignableMuon->dtAlignmentErrorsExtended());
428  std::auto_ptr<Alignments> cscAlignments( theAlignableMuon->cscAlignments());
429  std::auto_ptr<AlignmentErrorsExtended> cscAlignmentErrorsExtended( theAlignableMuon->cscAlignmentErrorsExtended());
430 
431  aligner.applyAlignments<DTGeometry>( &(*theMuonDT), &(*dtAlignments), &(*dtAlignmentErrorsExtended), AlignTransform() ); // don't apply global a second time!
432  aligner.applyAlignments<CSCGeometry>( &(*theMuonCSC), &(*cscAlignments), &(*cscAlignmentErrorsExtended), AlignTransform() ); // nope!
433  }
434 }
435 
436 
437 //_____________________________________________________________________________
438 // Called at end of loop
440 AlignmentProducer::endOfLoop(const edm::EventSetup& iSetup, unsigned int iLoop)
441 {
442 
443  if (0 == nevent_) {
444  // beginOfJob is usually called by the framework in the first event of the first loop
445  // (a hack: beginOfJob needs the EventSetup that is not well defined without an event)
446  // and the algorithms rely on the initialisations done in beginOfJob. We cannot call
447  // this->beginOfJob(iSetup); here either since that will access the EventSetup to get
448  // some geometry information that is not defined either without having seen an event.
449  edm::LogError("Alignment") << "@SUB=AlignmentProducer::endOfLoop"
450  << "Did not process any events in loop " << iLoop
451  << ", stop processing without terminating algorithm.";
452  return kStop;
453  }
454 
455  edm::LogInfo("Alignment") << "@SUB=AlignmentProducer::endOfLoop"
456  << "Ending loop " << iLoop << ", terminating algorithm.";
457 
458  theAlignmentAlgo->terminate(iSetup);
459  // FIXME: Should this be done in algorithm::terminate(const edm::EventSetup& iSetup)??
460  for (auto iCal = theCalibrations.begin(); iCal != theCalibrations.end(); ++iCal) {
461  (*iCal)->endOfLoop();
462  }
463 
464  for (std::vector<AlignmentMonitorBase*>::const_iterator monitor = theMonitors.begin(); monitor != theMonitors.end(); ++monitor) {
465  (*monitor)->endOfLoop(iSetup);
466  }
467 
468  if ( iLoop == theMaxLoops-1 || iLoop >= theMaxLoops ) return kStop;
469  else return kContinue;
470 }
471 
472 //_____________________________________________________________________________
473 // Called at each event
476  const edm::EventSetup& setup )
477 {
478  ++nevent_;
479 
480  // reading in survey records
481  this->readInSurveyRcds(setup);
482 
483  // Printout event number
484  for ( int i=10; i<10000000; i*=10 )
485  if ( nevent_<10*i && (nevent_%i)==0 )
486  edm::LogInfo("Alignment") << "@SUB=AlignmentProducer::duringLoop"
487  << "Events processed: " << nevent_;
488 
489  // Retrieve trajectories and tracks from the event
490  // -> merely skip if collection is empty
492  if (event.getByLabel(tjTkAssociationMapTag_, m_TrajTracksMap)) {
493 
494  // Form pairs of trajectories and tracks
495  ConstTrajTrackPairCollection trajTracks;
496  for ( TrajTrackAssociationCollection::const_iterator iPair = m_TrajTracksMap->begin();
497  iPair != m_TrajTracksMap->end(); ++iPair) {
498  trajTracks.push_back( ConstTrajTrackPair( &(*(*iPair).key), &(*(*iPair).val) ) );
499  }
501  event.getByLabel(beamSpotTag_, beamSpot);
502 
503  if (nevent_==1 && theAlignableExtras) {
504  edm::LogInfo("Alignment") << "@SUB=AlignmentProducer::duringLoop"
505  << "initializing AlignableBeamSpot" << std::endl;
506  theAlignableExtras->initializeBeamSpot(beamSpot->x0(), beamSpot->y0(), beamSpot->z0(),
507  beamSpot->dxdz(), beamSpot->dydz());
508  }
509 
510  // Run the alignment algorithm with its input
511  const AliClusterValueMap *clusterValueMapPtr = 0;
512  if(clusterValueMapTag_.encode().size()){//check that the input tag is not empty
513  edm::Handle<AliClusterValueMap> clusterValueMap;
514  event.getByLabel(clusterValueMapTag_, clusterValueMap);
515  clusterValueMapPtr = &(*clusterValueMap);
516  }
517 
518  const AlignmentAlgorithmBase::EventInfo eventInfo(event.id(), trajTracks, *beamSpot,
519  clusterValueMapPtr);
520  theAlignmentAlgo->run(setup, eventInfo);
521 
522 
523  for (std::vector<AlignmentMonitorBase*>::const_iterator monitor = theMonitors.begin();
524  monitor != theMonitors.end(); ++monitor) {
525  (*monitor)->duringLoop(event, setup, trajTracks); // forward eventInfo?
526  }
527  } else {
528  edm::LogError("Alignment") << "@SUB=AlignmentProducer::duringLoop"
529  << "No track collection found: skipping event";
530  }
531 
532 
533  return kContinue;
534 }
535 
536 // ----------------------------------------------------------------------------
538 {
539  theAlignmentAlgo->beginRun(setup); // do not forward edm::Run...
540 }
541 
542 // ----------------------------------------------------------------------------
544 {
545  // call with or without las beam info...
547  if (tkLasBeamTag_.encode().size()) { // non-empty InputTag
550  run.getByLabel(tkLasBeamTag_, lasBeams);
551  run.getByLabel(tkLasBeamTag_, tsoses);
552 
553  theAlignmentAlgo->endRun(EndRunInfo(run.id(), &(*lasBeams), &(*tsoses)), setup);
554  } else {
555  edm::LogInfo("Alignment") << "@SUB=AlignmentProducer::endRun"
556  << "No Tk LAS beams to forward to algorithm.";
557  theAlignmentAlgo->endRun(EndRunInfo(run.id(), 0, 0), setup);
558  }
559 }
560 
561 // ----------------------------------------------------------------------------
563  const edm::EventSetup &setup)
564 {
565  theAlignmentAlgo->beginLuminosityBlock(setup); // do not forward edm::LuminosityBlock
566 }
567 
568 // ----------------------------------------------------------------------------
570  const edm::EventSetup &setup)
571 {
572  theAlignmentAlgo->endLuminosityBlock(setup); // do not forward edm::LuminosityBlock
573 }
574 
575 // ----------------------------------------------------------------------------
576 
578  float shift, float rot, bool local)
579 {
580 
581  std::ostringstream output; // collecting output
582 
583  if (shift > 0. || rot > 0.) {
584  output << "Adding random flat shift of max size " << shift
585  << " and adding random flat rotation of max size " << rot <<" to ";
586 
587  std::vector<bool> commSel(0);
588  if (selection != "-1") {
589  AlignmentParameterSelector aSelector(0,0); // no alignable needed here...
590  const std::vector<char> cSel(aSelector.convertParamSel(selection));
591  if (cSel.size() < RigidBodyAlignmentParameters::N_PARAM) {
592  throw cms::Exception("BadConfig")
593  << "[AlignmentProducer::simpleMisalignment_]\n"
594  << "Expect selection string '" << selection << "' to be at least of length "
595  << RigidBodyAlignmentParameters::N_PARAM << " or to be '-1'.\n"
596  << "(Most probably you have to adjust the parameter 'parameterSelectorSimple'.)";
597  }
598  for (std::vector<char>::const_iterator cIter = cSel.begin(); cIter != cSel.end(); ++cIter) {
599  commSel.push_back(*cIter == '0' ? false : true);
600  }
601  output << "parameters defined by (" << selection
602  << "), representing (x,y,z,alpha,beta,gamma),";
603  } else {
604  output << "the active parameters of each alignable,";
605  }
606  output << " in " << (local ? "local" : "global") << " frame.";
607 
608  for (std::vector<Alignable*>::const_iterator it = alivec.begin(); it != alivec.end(); ++it) {
609  Alignable* ali=(*it);
610  std::vector<bool> mysel(commSel.empty() ? ali->alignmentParameters()->selector() : commSel);
611 
612  if (std::abs(shift)>0.00001) {
613  double s0 = 0., s1 = 0., s2 = 0.;
614  if (mysel[RigidBodyAlignmentParameters::dx]) s0 = shift * double(random()%1000-500)/500.;
615  if (mysel[RigidBodyAlignmentParameters::dy]) s1 = shift * double(random()%1000-500)/500.;
616  if (mysel[RigidBodyAlignmentParameters::dz]) s2 = shift * double(random()%1000-500)/500.;
617 
618  if (local) ali->move( ali->surface().toGlobal(align::LocalVector(s0,s1,s2)) );
619  else ali->move( align::GlobalVector(s0,s1,s2) );
620 
621  //AlignmentPositionError ape(dx,dy,dz);
622  //ali->addAlignmentPositionError(ape);
623  }
624 
625  if (std::abs(rot)>0.00001) {
627  if (mysel[RigidBodyAlignmentParameters::dalpha]) r(1)=rot*double(random()%1000-500)/500.;
628  if (mysel[RigidBodyAlignmentParameters::dbeta]) r(2)=rot*double(random()%1000-500)/500.;
629  if (mysel[RigidBodyAlignmentParameters::dgamma]) r(3)=rot*double(random()%1000-500)/500.;
630 
631  const align::RotationType mrot = align::toMatrix(r);
632  if (local) ali->rotateInLocalFrame(mrot);
633  else ali->rotateInGlobalFrame(mrot);
634 
635  //ali->addAlignmentPositionErrorFromRotation(mrot);
636  }
637  } // end loop on alignables
638  } else {
639  output << "No simple misalignment added!";
640  }
641  edm::LogInfo("Alignment") << "@SUB=AlignmentProducer::simpleMisalignment_" << output.str();
642 }
643 
644 
645 //__________________________________________________________________________________________________
647 {
649  iSetup.get<IdealGeometryRecord>().get( cpv );
650 
651  if (doTracker_) {
652  edm::ESHandle<GeometricDet> geometricDet;
653  iSetup.get<IdealGeometryRecord>().get( geometricDet );
654 
656  iSetup.get<PTrackerParametersRcd>().get( ptp );
657 
658  edm::ESHandle<TrackerTopology> tTopoHandle;
659  iSetup.get<TrackerTopologyRcd>().get(tTopoHandle);
660  const TrackerTopology* const tTopo = tTopoHandle.product();
661 
662  TrackerGeomBuilderFromGeometricDet trackerBuilder;
663  theTracker = std::shared_ptr<TrackerGeometry>( trackerBuilder.build(&(*geometricDet), *ptp, tTopo ));
664  }
665 
666  if (doMuon_) {
668  iSetup.get<MuonNumberingRecord>().get(mdc);
669  DTGeometryBuilderFromDDD DTGeometryBuilder;
671  theMuonDT = std::make_shared<DTGeometry>();
672  DTGeometryBuilder.build( theMuonDT, &(*cpv), *mdc);
673  theMuonCSC = std::make_shared<CSCGeometry>();
674  CSCGeometryBuilder.build( theMuonCSC, &(*cpv), *mdc );
675  }
676 }
677 
679 {
680  const std::vector<Alignable*>& comp = ali->components();
681 
682  unsigned int nComp = comp.size();
683 
684  for (unsigned int i = 0; i < nComp; ++i) addSurveyInfo_(comp[i]);
685 
687 
688  if ( ali->id() != error.rawId() ||
689  ali->alignableObjectId() != error.structureType() )
690  {
691  throw cms::Exception("DatabaseError")
692  << "Error reading survey info from DB. Mismatched id!";
693  }
694 
695  const CLHEP::Hep3Vector& pos = theSurveyValues->m_align[theSurveyIndex].translation();
696  const CLHEP::HepRotation& rot = theSurveyValues->m_align[theSurveyIndex].rotation();
697 
698  AlignableSurface surf( align::PositionType( pos.x(), pos.y(), pos.z() ),
699  align::RotationType( rot.xx(), rot.xy(), rot.xz(),
700  rot.yx(), rot.yy(), rot.yz(),
701  rot.zx(), rot.zy(), rot.zz() ) );
702 
703  surf.setWidth( ali->surface().width() );
704  surf.setLength( ali->surface().length() );
705 
706  ali->setSurvey( new SurveyDet( surf, error.matrix() ) );
707 
708  ++theSurveyIndex;
709 }
710 
712 
713  // Get Survey Rcds and add Survey Info
714  if ( doTracker_ && useSurvey_ ){
715  bool tkSurveyBool = watchTkSurveyRcd_.check(iSetup);
716  bool tkSurveyErrBool = watchTkSurveyErrRcd_.check(iSetup);
717  edm::LogInfo("Alignment") << "watcher tksurveyrcd: " << tkSurveyBool;
718  edm::LogInfo("Alignment") << "watcher tksurveyerrrcd: " << tkSurveyErrBool;
719  if ( tkSurveyBool || tkSurveyErrBool){
720 
721  edm::LogInfo("Alignment") << "ADDING THE SURVEY INFORMATION";
723  edm::ESHandle<SurveyErrors> surveyErrors;
724 
725  iSetup.get<TrackerSurveyRcd>().get(surveys);
726  iSetup.get<TrackerSurveyErrorExtendedRcd>().get(surveyErrors);
727 
728  theSurveyIndex = 0;
729  theSurveyValues = &*surveys;
730  theSurveyErrors = &*surveyErrors;
732  }
733  }
734 
735  if ( doMuon_ && useSurvey_) {
736  bool DTSurveyBool = watchTkSurveyRcd_.check(iSetup);
737  bool DTSurveyErrBool = watchTkSurveyErrRcd_.check(iSetup);
738  bool CSCSurveyBool = watchTkSurveyRcd_.check(iSetup);
739  bool CSCSurveyErrBool = watchTkSurveyErrRcd_.check(iSetup);
740 
741  if ( DTSurveyBool || DTSurveyErrBool || CSCSurveyBool || CSCSurveyErrBool ){
742  edm::ESHandle<Alignments> dtSurveys;
743  edm::ESHandle<SurveyErrors> dtSurveyErrors;
744  edm::ESHandle<Alignments> cscSurveys;
745  edm::ESHandle<SurveyErrors> cscSurveyErrors;
746 
747  iSetup.get<DTSurveyRcd>().get(dtSurveys);
748  iSetup.get<DTSurveyErrorExtendedRcd>().get(dtSurveyErrors);
749  iSetup.get<CSCSurveyRcd>().get(cscSurveys);
750  iSetup.get<CSCSurveyErrorExtendedRcd>().get(cscSurveyErrors);
751 
752  theSurveyIndex = 0;
753  theSurveyValues = &*dtSurveys;
754  theSurveyErrors = &*dtSurveyErrors;
755  std::vector<Alignable*> barrels = theAlignableMuon->DTBarrel();
756  for (std::vector<Alignable*>::const_iterator iter = barrels.begin(); iter != barrels.end(); ++iter) {
757  addSurveyInfo_(*iter);
758  }
759 
760  theSurveyIndex = 0;
761  theSurveyValues = &*cscSurveys;
762  theSurveyErrors = &*cscSurveyErrors;
763  std::vector<Alignable*> endcaps = theAlignableMuon->CSCEndcaps();
764  for (std::vector<Alignable*>::const_iterator iter = endcaps.begin(); iter != endcaps.end(); ++iter) {
765  addSurveyInfo_(*iter);
766  }
767  }
768  }
769 
770 }
771 
772 
774 // a templated method - but private, so not accessible from outside
775 // ==> does not have to be in header file
776 template<class G, class Rcd, class ErrRcd>
778  const AlignTransform &globalCoordinates) const
779 {
780  // 'G' is the geometry class for that DB should be applied,
781  // 'Rcd' is the record class for its Alignments
782  // 'ErrRcd' is the record class for its AlignmentErrorsExtended
783  // 'globalCoordinates' are global transformation for this geometry
784 
785  const Rcd & record = iSetup.get<Rcd>();
787  const edm::ValidityInterval & validity = record.validityInterval();
788  const edm::IOVSyncValue first = validity.first();
789  const edm::IOVSyncValue last = validity.last();
790  if (first!=edm::IOVSyncValue::beginOfTime() ||
792  throw cms::Exception("DatabaseError")
793  << "@SUB=AlignmentProducer::applyDB"
794  << "\nTrying to apply "
795  << record.key().name()
796  << " with multiple IOVs in tag.\n"
797  << "Validity range is "
798  << first.eventID().run() << " - " << last.eventID().run();
799  }
800  }
801 
802  edm::ESHandle<Alignments> alignments;
803  record.get(alignments);
804 
806  iSetup.get<ErrRcd>().get(alignmentErrors);
807 
808  GeometryAligner aligner;
809  aligner.applyAlignments<G>(geometry, &(*alignments), &(*alignmentErrors),
810  globalCoordinates);
811 }
812 
813 
815 // a templated method - but private, so not accessible from outside
816 // ==> does not have to be in header file
817 template<class G, class DeformationRcd>
819 {
820  // 'G' is the geometry class for that DB should be applied,
821  // 'DeformationRcd' is the record class for its surface deformations
822 
823  const DeformationRcd & record = iSetup.get<DeformationRcd>();
825  const edm::ValidityInterval & validity = record.validityInterval();
826  const edm::IOVSyncValue first = validity.first();
827  const edm::IOVSyncValue last = validity.last();
828  if (first!=edm::IOVSyncValue::beginOfTime() ||
830  throw cms::Exception("DatabaseError")
831  << "@SUB=AlignmentProducer::applyDB"
832  << "\nTrying to apply "
833  << record.key().name()
834  << " with multiple IOVs in tag.\n"
835  << "Validity range is "
836  << first.eventID().run() << " - " << last.eventID().run();
837  }
838  }
840  record.get(surfaceDeformations);
841 
842  GeometryAligner aligner;
843  aligner.attachSurfaceDeformations<G>(geometry, &(*surfaceDeformations));
844 }
845 
848 {
849  if ( doTracker_ ) { // first tracker
850  const AlignTransform *trackerGlobal = 0; // will be 'removed' from constants
851  if (globalPositions_) { // i.e. applied before in applyDB
854  }
855 
856  Alignments *alignments = theAlignableTracker->alignments();
858  this->writeDB(alignments, "TrackerAlignmentRcd",
859  alignmentErrors, "TrackerAlignmentErrorExtendedRcd", trackerGlobal,
860  time);
861  }
862 
863  if ( doMuon_ ) { // now muon
864  const AlignTransform *muonGlobal = 0; // will be 'removed' from constants
865  if (globalPositions_) { // i.e. applied before in applyDB
867  DetId(DetId::Muon));
868  }
869  // Get alignments+errors, first DT - ownership taken over by writeDB(..), so no delete
870  Alignments *alignments = theAlignableMuon->dtAlignments();
872  this->writeDB(alignments, "DTAlignmentRcd",
873  alignmentErrors, "DTAlignmentErrorExtendedRcd", muonGlobal,
874  time);
875 
876  // Get alignments+errors, now CSC - ownership taken over by writeDB(..), so no delete
877  alignments = theAlignableMuon->cscAlignments();
878  alignmentErrors = theAlignableMuon->cscAlignmentErrorsExtended();
879  this->writeDB(alignments, "CSCAlignmentRcd",
880  alignmentErrors, "CSCAlignmentErrorExtendedRcd", muonGlobal,
881  time);
882  }
883 
884  // Save surface deformations to database
886  AlignmentSurfaceDeformations *alignmentSurfaceDeformations = theAlignableTracker->surfaceDeformations();
887  this->writeDB(alignmentSurfaceDeformations, "TrackerSurfaceDeformationRcd", time);
888  }
889 }
890 
893  const std::string &alignRcd,
894  AlignmentErrorsExtended *alignmentErrors,
895  const std::string &errRcd,
896  const AlignTransform *globalCoordinates,
897  cond::Time_t time) const
898 {
899  Alignments * tempAlignments = alignments;
900  AlignmentErrorsExtended * tempAlignmentErrorsExtended = alignmentErrors;
901 
902  // Call service
904  if (!poolDb.isAvailable()) { // Die if not available
905  delete tempAlignments; // promised to take over ownership...
906  delete tempAlignmentErrorsExtended; // dito
907  throw cms::Exception("NotAvailable") << "PoolDBOutputService not available";
908  }
909 
910  if (globalCoordinates // happens only if (applyDbAlignment_ == true)
911  && globalCoordinates->transform() != AlignTransform::Transform::Identity) {
912 
913  tempAlignments = new Alignments(); // temporary storage for
914  tempAlignmentErrorsExtended = new AlignmentErrorsExtended(); // final alignments and errors
915 
916  GeometryAligner aligner;
917  aligner.removeGlobalTransform(alignments, alignmentErrors,
918  *globalCoordinates,
919  tempAlignments, tempAlignmentErrorsExtended);
920 
921  delete alignments; // have to delete original alignments
922  delete alignmentErrors; // same thing for the errors
923 
924  edm::LogInfo("Alignment") << "@SUB=AlignmentProducer::writeDB"
925  << "globalCoordinates removed from alignments (" << alignRcd
926  << ") and errors (" << alignRcd << ").";
927  }
928 
929  if (saveToDB_) {
930  edm::LogInfo("Alignment") << "Writing Alignments for run " << time
931  << " to " << alignRcd << ".";
932  poolDb->writeOne<Alignments>(tempAlignments, time, alignRcd);
933  } else { // poolDb->writeOne(..) takes over 'alignments' ownership,...
934  delete tempAlignments; // ...otherwise we have to delete, as promised!
935  }
936 
937  if (saveApeToDB_) {
938  edm::LogInfo("Alignment") << "Writing AlignmentErrorsExtended for run " << time
939  << " to " << errRcd << ".";
940  poolDb->writeOne<AlignmentErrorsExtended>(tempAlignmentErrorsExtended, time, errRcd);
941  } else { // poolDb->writeOne(..) takes over 'alignmentErrors' ownership,...
942  delete tempAlignmentErrorsExtended; // ...otherwise we have to delete, as promised!
943  }
944 }
945 
946 
948 void AlignmentProducer::writeDB(AlignmentSurfaceDeformations *alignmentSurfaceDeformations,
949  const std::string &surfaceDeformationRcd,
950  cond::Time_t time) const
951 {
952  // Call service
954  if (!poolDb.isAvailable()) { // Die if not available
955  delete alignmentSurfaceDeformations; // promised to take over ownership...
956  throw cms::Exception("NotAvailable") << "PoolDBOutputService not available";
957  }
958 
959  if (saveDeformationsToDB_) {
960  edm::LogInfo("Alignment") << "Writing AlignmentSurfaceDeformations for run " << time
961  << " to " << surfaceDeformationRcd << ".";
962  poolDb->writeOne<AlignmentSurfaceDeformations>(alignmentSurfaceDeformations, time,
963  surfaceDeformationRcd);
964  } else { // poolDb->writeOne(..) takes over 'surfaceDeformation' ownership,...
965  delete alignmentSurfaceDeformations; // ...otherwise we have to delete, as promised!
966  }
967 }
968 
971 {
972  static bool oldRunRangeSelectionWarning = false;
973 
976 
977  RunRanges uniqueRunRanges;
978  if (!RunRangeSelectionVPSet.empty()) {
979 
980  std::map<RunNumber,RunNumber> uniqueFirstRunNumbers;
981 
982  for (std::vector<edm::ParameterSet>::const_iterator ipset = RunRangeSelectionVPSet.begin();
983  ipset != RunRangeSelectionVPSet.end();
984  ++ipset) {
985  const std::vector<std::string> RunRangeStrings = (*ipset).getParameter<std::vector<std::string> >("RunRanges");
986  for (std::vector<std::string>::const_iterator irange = RunRangeStrings.begin();
987  irange != RunRangeStrings.end();
988  ++irange) {
989 
990  if ((*irange).find(':')==std::string::npos) {
991 
992  RunNumber first = beginValue;
993  long int temp = strtol((*irange).c_str(), 0, 0);
994  if (temp!=-1) first = temp;
995  uniqueFirstRunNumbers[first] = first;
996 
997  } else {
998 
999  if (!oldRunRangeSelectionWarning) {
1000  edm::LogWarning("BadConfig") << "@SUB=AlignmentProducer::makeNonOverlappingRunRanges"
1001  << "Config file contains old format for 'RunRangeSelection'. Only the start run\n"
1002  << "number is used internally. The number of the last run is ignored and can be\n"
1003  << "safely removed from the config file.\n";
1004  oldRunRangeSelectionWarning = true;
1005  }
1006 
1007  std::vector<std::string> tokens = edm::tokenize(*irange, ":");
1008  long int temp;
1009  RunNumber first = beginValue;
1010  temp = strtol(tokens[0].c_str(), 0, 0);
1011  if (temp!=-1) first = temp;
1012  uniqueFirstRunNumbers[first] = first;
1013  }
1014  }
1015  }
1016 
1017  for (std::map<RunNumber,RunNumber>::iterator iFirst = uniqueFirstRunNumbers.begin();
1018  iFirst!=uniqueFirstRunNumbers.end();
1019  ++iFirst) {
1020  uniqueRunRanges.push_back(std::pair<RunNumber,RunNumber>((*iFirst).first, endValue));
1021  }
1022  for (unsigned int i = 0;i<uniqueRunRanges.size()-1;++i) {
1023  uniqueRunRanges[i].second = uniqueRunRanges[i+1].first - 1;
1024  }
1025 
1026  } else {
1027 
1028  uniqueRunRanges.push_back(std::pair<RunNumber,RunNumber>(beginValue, endValue));
1029 
1030  }
1031 
1032  return uniqueRunRanges;
1033 }
1034 
RunNumber_t run() const
Definition: EventID.h:39
std::vector< Alignable * > Alignables
const TimeTypeSpecs timeTypeSpecs[]
Definition: Time.cc:22
align::Scalar width() const
AlignmentProducer(const edm::ParameterSet &iConfig)
Constructor.
virtual void beginLuminosityBlock(const edm::EventSetup &setup)
called at begin of luminosity block (no lumi block info passed yet)
virtual void beginRun(const edm::EventSetup &setup)
called at begin of run
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
bool getByLabel(std::string const &label, Handle< PROD > &result) const
Definition: Run.h:201
T getUntrackedParameter(std::string const &, T const &) const
int i
Definition: DBlmapReader.cc:9
virtual std::shared_ptr< TrackerGeometry > produceTracker(const TrackerDigiGeometryRecord &iRecord)
Produce the tracker geometry.
virtual void rotateInLocalFrame(const RotationType &rotation)
Rotation intepreted in the local reference frame.
Definition: Alignable.cc:120
const bool doMisalignmentScenario_
RunID const & id() const
Definition: RunBase.h:39
virtual void run(const edm::EventSetup &setup, const EventInfo &eventInfo)=0
Run the algorithm (must be implemented in derived class)
virtual std::shared_ptr< DTGeometry > produceDT(const MuonGeometryRecord &iRecord)
Produce the muon DT geometry.
Builds a scenario from configuration and applies it to the alignable Muon.
AlignmentAlgorithmBase * theAlignmentAlgo
~AlignmentProducer()
Destructor.
virtual void terminate(const edm::EventSetup &iSetup)=0
Call at end of each loop (must be implemented in derived class)
const EventID & eventID() const
Definition: IOVSyncValue.h:42
AlignmentErrorsExtended * alignmentErrors() const
Return alignment errors, sorted by DetId.
Time_t beginValue
Definition: Time.h:45
Class to update a given geometry with a set of alignments.
void simpleMisalignment_(const Alignables &alivec, const std::string &selection, float shift, float rot, bool local)
Apply random shifts and rotations to selected alignables, according to configuration.
JetCorrectorParameters::Record record
Definition: classes.h:7
std::shared_ptr< TrackerGeometry > theTracker
void readInSurveyRcds(const edm::EventSetup &)
read in survey records
std::vector< ParameterSet > VParameterSet
Definition: ParameterSet.h:33
ErrorMatrix matrix() const
Definition: SurveyError.h:76
void writeDB(Alignments *alignments, const std::string &alignRcd, AlignmentErrorsExtended *alignmentErrors, const std::string &errRcd, const AlignTransform *globalCoordinates, cond::Time_t time) const
align::Alignables DTBarrel()
selection
main part
Definition: corrVsCorr.py:98
virtual void endLuminosityBlock(const edm::EventSetup &setup)
called at end of luminosity block (no lumi block info passed yet)
static const IOVSyncValue & endOfTime()
Definition: IOVSyncValue.cc:97
virtual void beginRun(const edm::Run &run, const edm::EventSetup &setup)
Called at run start and calling algorithms beginRun.
std::vector< IntegratedCalibrationBase * > theCalibrations
#define DEFINE_FWK_LOOPER(type)
virtual Status endOfLoop(const edm::EventSetup &, unsigned int iLoop)
Called at end of loop.
edm::ParameterSet theParameterSet
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.
const std::vector< bool > & selector(void) const
Get alignment parameter selector vector.
void setWidth(align::Scalar width)
TRandom random
Definition: MVATrainer.cc:138
const edm::InputTag tkLasBeamTag_
const Alignments * theSurveyValues
void addSurveyInfo_(Alignable *)
Add survey info to an alignable.
uint8_t structureType() const
Definition: SurveyError.h:66
void createGeometries_(const edm::EventSetup &)
Create tracker and muon geometries.
virtual Alignables components() const =0
Return vector of all direct components.
std::vector< AlignTransform > m_align
Definition: Alignments.h:19
std::string encode() const
Definition: InputTag.cc:165
AlignmentParameters * alignmentParameters() const
Get the AlignmentParameters.
Definition: Alignable.h:57
std::shared_ptr< DTGeometry > theMuonDT
void setWhatProduced(T *iThis, const es::Label &iLabel=es::Label())
Definition: ESProducer.h:115
const bool applyDbAlignment_
define event information passed to algorithms
tuple s2
Definition: indexGen.py:106
const IOVSyncValue & last() const
virtual void endRun(const EndRunInfo &runInfo, const edm::EventSetup &setup)
called at end of run - order of arguments like in EDProducer etc.
AlignmentAlgorithmBase::RunNumber RunNumber
virtual bool addCalibrations(const Calibrations &)
void setLength(align::Scalar length)
const unsigned int theMaxLoops
const AlgebraicVector & parameters(void) const
Get alignment parameters.
AlignableExtras * theAlignableExtras
virtual bool setParametersForRunRange(const RunRange &rr)
Alignments * dtAlignments()
unsigned long long Time_t
Definition: Time.h:16
align::Alignables CSCEndcaps()
const bool checkDbAlignmentValidity_
static const IOVSyncValue & beginOfTime()
const edm::InputTag clusterValueMapTag_
void attachSurfaceDeformations(C *geometry, const AlignmentSurfaceDeformations *surfaceDeformations)
void removeGlobalTransform(const Alignments *alignments, const AlignmentErrorsExtended *alignmentErrors, const AlignTransform &globalCoordinates, Alignments *newAlignments, AlignmentErrorsExtended *newAlignmentErrorsExtended)
bool isAvailable() const
Definition: Service.h:46
unsigned int theSurveyIndex
virtual StructureType alignableObjectId() const =0
Return the alignable type identifier.
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
std::vector< AlignmentMonitorBase * > theMonitors
virtual void startingNewLoop(unsigned int iLoop)
Called at beginning of loop.
RunRanges makeNonOverlappingRunRanges(const edm::VParameterSet &RunRangeSelectionVPSet)
AlignmentParameterStore * theAlignmentParameterStore
align::ID rawId() const
Definition: SurveyError.h:71
void writeOne(T *payload, Time_t time, const std::string &recordName, bool withlogging=false)
AlignmentSurfaceDeformations * surfaceDeformations() const
Return surface deformations, sorted by DetId.
Definition: Alignable.cc:245
AlignmentAlgorithmBase::EndRunInfo EndRunInfo
virtual void initialize(const edm::EventSetup &setup, AlignableTracker *tracker, AlignableMuon *muon, AlignableExtras *extras, AlignmentParameterStore *store)=0
Call at beginning of job (must be implemented in derived class)
void applyScenario(const edm::ParameterSet &scenario)
Apply misalignment scenario to the tracker.
void initializeBeamSpot(double x, double y, double z, double dxdz, double dydz)
Initialize the alignable beam spot with the given parameters.
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
const edm::InputTag beamSpotTag_
bool getByLabel(InputTag const &tag, Handle< PROD > &result) const
Definition: Event.h:413
virtual void endRun(const edm::Run &run, const edm::EventSetup &setup)
Called at run end - currently reading TkFittedLasBeam if an InpuTag is given for that.
AlignmentErrorsExtended * cscAlignmentErrorsExtended()
const AlignableSurface & surface() const
Return the Surface (global position and orientation) of the object.
Definition: Alignable.h:131
const SurveyErrors * theSurveyErrors
tuple G
Definition: callgraph.py:12
const edm::InputTag tjTkAssociationMapTag_
virtual Status duringLoop(const edm::Event &event, const edm::EventSetup &setup)
Called at each event.
Definition: DetId.h:18
AlignableMuon * theAlignableMuon
void applyAlignments(C *geometry, const Alignments *alignments, const AlignmentErrorsExtended *alignmentErrors, const AlignTransform &globalCoordinates)
const bool saveDeformationsToDB_
virtual void endOfJob()
Called at end of job.
AlgebraicVector EulerAngles
Definition: Definitions.h:36
align::Scalar length() const
const double stRandomShift_
virtual void beginOfJob()
Definition: EDLooperBase.cc:88
Transform transform() const
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
virtual void endLuminosityBlock(const edm::LuminosityBlock &lumiBlock, const edm::EventSetup &setup)
Called at lumi block end, calling algorithm&#39;s endLuminosityBlock.
T const * product() const
Definition: ESHandle.h:86
std::vector< ConstTrajTrackPair > ConstTrajTrackPairCollection
void build(std::shared_ptr< CSCGeometry > geom, const DDCompactView *fv, const MuonDDDConstants &muonConstants)
Build the geometry.
Alignments * cscAlignments()
AlignmentErrorsExtended * dtAlignmentErrorsExtended()
bool check(const edm::EventSetup &iSetup)
Definition: ESWatcher.h:57
std::shared_ptr< CSCGeometry > theMuonCSC
ESHandle< TrackerGeometry > geometry
edm::EventID id() const
Definition: EventBase.h:58
edm::ESWatcher< TrackerSurveyRcd > watchTkSurveyRcd_
void build(std::shared_ptr< DTGeometry > theGeometry, const DDCompactView *cview, const MuonDDDConstants &muonConstants)
align::GlobalPoints toGlobal(const align::LocalPoints &) const
Return in global coord given a set of local points.
AlignableTracker * theAlignableTracker
RotationType toMatrix(const EulerAngles &)
Convert rotation angles about x-, y-, z-axes to matrix.
Definition: Utilities.cc:43
virtual void beginLuminosityBlock(const edm::LuminosityBlock &lumiBlock, const edm::EventSetup &setup)
Called at lumi block start, calling algorithm&#39;s beginLuminosityBlock.
std::vector< char > convertParamSel(const std::string &selString) const
Converting std::string into std::vector&lt;char&gt;
static unsigned int const shift
void applyDB(G *geometry, const edm::EventSetup &iSetup, const AlignTransform &globalPosition) const
edm::ESWatcher< TrackerSurveyErrorExtendedRcd > watchTkSurveyErrRcd_
const AlignTransform & DetectorGlobalPosition(const Alignments &allGlobals, const DetId &id)
void writeForRunRange(cond::Time_t time)
virtual std::shared_ptr< CSCGeometry > produceCSC(const MuonGeometryRecord &iRecord)
Produce the muon CSC geometry.
const IOVSyncValue & first() const
Alignments * alignments() const
Return alignments, sorted by DetId.
Time_t endValue
Definition: Time.h:46
std::vector< SurveyError > m_surveyErrors
Definition: SurveyErrors.h:23
std::pair< const Trajectory *, const reco::Track * > ConstTrajTrackPair
define run information passed to algorithms (in endRun)
Builds a scenario from configuration and applies it to the alignable tracker.
const Alignments * globalPositions_
GlobalPositions that might be read from DB, NULL otherwise.
Alignables & beamSpot()
Return beam spot alignable as a vector with one element.
void applyScenario(const edm::ParameterSet &scenario)
Apply misalignment scenario to the Muon.
T get(const Candidate &c)
Definition: component.h:55
AlignmentAlgorithmBase::RunRange RunRange
const double stRandomRotation_
Definition: Run.h:42
std::vector< RunRange > RunRanges