78 theAlignmentAlgo(0), theAlignmentParameterStore(0),
79 theAlignableExtras(0), theAlignableTracker(0), theAlignableMuon(0),
81 nevent_(0), theParameterSet(iConfig),
82 theMaxLoops( iConfig.getUntrackedParameter<unsigned int>(
"maxLoops") ),
83 stNFixAlignables_(iConfig.getParameter<int>(
"nFixAlignables") ),
84 stRandomShift_(iConfig.getParameter<double>(
"randomShift")),
85 stRandomRotation_(iConfig.getParameter<double>(
"randomRotation")),
86 applyDbAlignment_( iConfig.getUntrackedParameter<bool>(
"applyDbAlignment")),
87 checkDbAlignmentValidity_( iConfig.getUntrackedParameter<bool>(
"checkDbAlignmentValidity")),
88 doMisalignmentScenario_(iConfig.getParameter<bool>(
"doMisalignmentScenario")),
89 saveToDB_(iConfig.getParameter<bool>(
"saveToDB")),
90 saveApeToDB_(iConfig.getParameter<bool>(
"saveApeToDB")),
91 saveDeformationsToDB_(iConfig.getParameter<bool>(
"saveDeformationsToDB")),
92 doTracker_( iConfig.getUntrackedParameter<bool>(
"doTracker") ),
93 doMuon_( iConfig.getUntrackedParameter<bool>(
"doMuon") ),
94 useExtras_( iConfig.getUntrackedParameter<bool>(
"useExtras") ),
95 useSurvey_( iConfig.getParameter<bool>(
"useSurvey") ),
96 tjTkAssociationMapTag_(iConfig.getParameter<edm::InputTag>(
"tjTkAssociationMapTag")),
97 beamSpotTag_(iConfig.getParameter<edm::InputTag>(
"beamSpotTag")),
98 tkLasBeamTag_(iConfig.getParameter<edm::InputTag>(
"tkLasBeamTag")),
99 clusterValueMapTag_(iConfig.getParameter<edm::InputTag>(
"hitPrescaleMapTag"))
101 edm::LogInfo(
"Alignment") <<
"@SUB=AlignmentProducer::AlignmentProducer";
120 if ( !theAlignmentAlgo )
121 throw cms::Exception(
"BadConfig") <<
"Couldn't find algorithm called " << algoName;
125 std::vector<std::string> monitors = monitorConfig.
getUntrackedParameter<std::vector<std::string> >(
"monitors" );
126 for (std::vector<std::string>::const_iterator miter = monitors.begin(); miter != monitors.end(); ++miter) {
129 if (!newMonitor)
throw cms::Exception(
"BadConfig") <<
"Couldn't find monitor named " << *miter;
136 for (
auto iCalib = calibrations.begin(); iCalib != calibrations.end(); ++iCalib) {
168 boost::shared_ptr<TrackerGeometry>
171 edm::LogInfo(
"Alignment") <<
"@SUB=AlignmentProducer::produceTracker";
177 boost::shared_ptr<DTGeometry>
180 edm::LogInfo(
"Alignment") <<
"@SUB=AlignmentProducer::produceDT";
186 boost::shared_ptr<CSCGeometry>
189 edm::LogInfo(
"Alignment") <<
"@SUB=AlignmentProducer::produceCSC";
198 edm::LogInfo(
"Alignment") <<
"@SUB=AlignmentProducer::beginOfJob";
217 this->applyDB<TrackerGeometry,TrackerAlignmentRcd,TrackerAlignmentErrorRcd>
218 (&(*theTracker), iSetup,
220 this->applyDB<TrackerGeometry,TrackerSurfaceDeformationRcd>(&(*theTracker), iSetup);
224 this->applyDB<DTGeometry,DTAlignmentRcd,DTAlignmentErrorRcd>
225 (&(*theMuonDT), iSetup,
227 this->applyDB<CSCGeometry,CSCAlignmentRcd,CSCAlignmentErrorRcd>
228 (&(*theMuonCSC), iSetup,
247 edm::LogInfo(
"Alignment") <<
"@SUB=AlignmentProducer::beginOfJob"
248 <<
"Creating AlignmentParameterBuilder";
259 Alignables theAlignables = alignmentParameterBuilder.alignables();
260 edm::LogInfo(
"Alignment") <<
"@SUB=AlignmentProducer::beginOfJob"
261 <<
"got " << theAlignables.size() <<
" alignables";
267 edm::LogInfo(
"Alignment") <<
"@SUB=AlignmentProducer::beginOfJob"
268 <<
"AlignmentParameterStore created!";
273 edm::LogInfo(
"Alignment") <<
"@SUB=AlignmentProducer::beginOfJob"
274 <<
"Applying misalignment scenario to "
288 edm::LogInfo(
"Alignment") <<
"@SUB=AlignmentProducer::beginOfJob"
289 <<
"NOT applying misalignment scenario!";
299 theAlignmentParameterStore );
306 throw cms::Exception(
"BadConfig") <<
"[AlignmentProducer::beginOfJob]\n"
308 <<
"for algorithm not supporting it.";
311 for (std::vector<AlignmentMonitorBase*>::const_iterator monitor =
theMonitors.begin();
321 edm::LogInfo(
"Alignment") <<
"@SUB=AlignmentProducer::endOfJob";
323 for (std::vector<AlignmentMonitorBase*>::const_iterator monitor =
theMonitors.begin(); monitor !=
theMonitors.end(); ++monitor) {
324 (*monitor)->endOfJob();
328 edm::LogError(
"Alignment") <<
"@SUB=AlignmentProducer::endOfJob" <<
"Did not process any "
329 <<
"events in last loop, do not dare to store to DB.";
335 if (uniqueRunRanges.empty()) {
338 uniqueRunRanges.push_back(runRange);
341 std::vector<AlgebraicVector> beamSpotParameters;
343 for (RunRanges::const_iterator iRunRange = uniqueRunRanges.begin();
344 iRunRange != uniqueRunRanges.end();
358 beamSpotParameters.push_back(beamSpotAliPars->
parameters());
364 std::ostringstream bsOutput;
366 std::vector<AlgebraicVector>::const_iterator itPar = beamSpotParameters.begin();
367 for (RunRanges::const_iterator iRunRange = uniqueRunRanges.begin();
368 iRunRange != uniqueRunRanges.end();
369 ++iRunRange, ++itPar) {
370 bsOutput <<
"Run range: " << (*iRunRange).first <<
" - " << (*iRunRange).second <<
"\n";
371 bsOutput <<
" Displacement: x=" << (*itPar)[0] <<
", y=" << (*itPar)[1] <<
"\n";
372 bsOutput <<
" Slope: dx/dz=" << (*itPar)[2] <<
", dy/dz=" << (*itPar)[3] <<
"\n";
375 edm::LogInfo(
"Alignment") <<
"@SUB=AlignmentProducer::endOfJob"
376 <<
"Parameters for alignable beamspot:\n"
391 edm::LogInfo(
"Alignment") <<
"@SUB=AlignmentProducer::startingNewLoop"
392 <<
"Starting loop number " << iLoop;
399 (*iCal)->startNewLoop();
402 for (std::vector<AlignmentMonitorBase*>::const_iterator monitor =
theMonitors.begin(); monitor !=
theMonitors.end(); ++monitor) {
403 (*monitor)->startingNewLoop();
406 edm::LogInfo(
"Alignment") <<
"@SUB=AlignmentProducer::startingNewLoop"
407 <<
"Now physically apply alignments to geometry...";
444 edm::LogError(
"Alignment") <<
"@SUB=AlignmentProducer::endOfLoop"
445 <<
"Did not process any events in loop " << iLoop
446 <<
", stop processing without terminating algorithm.";
450 edm::LogInfo(
"Alignment") <<
"@SUB=AlignmentProducer::endOfLoop"
451 <<
"Ending loop " << iLoop <<
", terminating algorithm.";
456 (*iCal)->endOfLoop();
459 for (std::vector<AlignmentMonitorBase*>::const_iterator monitor =
theMonitors.begin(); monitor !=
theMonitors.end(); ++monitor) {
460 (*monitor)->endOfLoop(iSetup);
479 for (
int i=10;
i<10000000;
i*=10 )
481 edm::LogInfo(
"Alignment") <<
"@SUB=AlignmentProducer::duringLoop"
482 <<
"Events processed: " <<
nevent_;
492 iPair != m_TrajTracksMap->end(); ++iPair) {
499 edm::LogInfo(
"Alignment") <<
"@SUB=AlignmentProducer::duringLoop"
500 <<
"initializing AlignableBeamSpot" << std::endl;
502 beamSpot->dxdz(), beamSpot->dydz());
510 clusterValueMapPtr = &(*clusterValueMap);
518 for (std::vector<AlignmentMonitorBase*>::const_iterator monitor =
theMonitors.begin();
520 (*monitor)->duringLoop(event, setup, trajTracks);
523 edm::LogError(
"Alignment") <<
"@SUB=AlignmentProducer::duringLoop"
524 <<
"No track collection found: skipping event";
550 edm::LogInfo(
"Alignment") <<
"@SUB=AlignmentProducer::endRun"
551 <<
"No Tk LAS beams to forward to algorithm.";
576 std::ostringstream
output;
578 if (shift > 0. || rot > 0.) {
579 output <<
"Adding random flat shift of max size " << shift
580 <<
" and adding random flat rotation of max size " << rot <<
" to ";
582 std::vector<bool> commSel(0);
583 if (selection !=
"-1") {
588 <<
"[AlignmentProducer::simpleMisalignment_]\n"
589 <<
"Expect selection string '" << selection <<
"' to be at least of length "
591 <<
"(Most probably you have to adjust the parameter 'parameterSelectorSimple'.)";
593 for (std::vector<char>::const_iterator cIter = cSel.begin(); cIter != cSel.end(); ++cIter) {
594 commSel.push_back(*cIter ==
'0' ?
false :
true);
596 output <<
"parameters defined by (" << selection
597 <<
"), representing (x,y,z,alpha,beta,gamma),";
599 output <<
"the active parameters of each alignable,";
601 output <<
" in " << (local ?
"local" :
"global") <<
" frame.";
603 for (std::vector<Alignable*>::const_iterator it = alivec.begin(); it != alivec.end(); ++it) {
608 double s0 = 0., s1 = 0.,
s2 = 0.;
634 output <<
"No simple misalignment added!";
636 edm::LogInfo(
"Alignment") <<
"@SUB=AlignmentProducer::simpleMisalignment_" << output.str();
669 unsigned int nComp = comp.size();
675 if ( ali->
id() != error.
rawId() ||
679 <<
"Error reading survey info from DB. Mismatched id!";
687 rot.yx(), rot.yy(), rot.yz(),
688 rot.zx(), rot.zy(), rot.zz() ) );
704 edm::LogInfo(
"Alignment") <<
"watcher tksurveyrcd: " << tkSurveyBool;
705 edm::LogInfo(
"Alignment") <<
"watcher tksurveyerrrcd: " << tkSurveyErrBool;
706 if ( tkSurveyBool || tkSurveyErrBool){
708 edm::LogInfo(
"Alignment") <<
"ADDING THE SURVEY INFORMATION";
728 if ( DTSurveyBool || DTSurveyErrBool || CSCSurveyBool || CSCSurveyErrBool ){
743 for (std::vector<Alignable*>::const_iterator iter = barrels.begin(); iter != barrels.end(); ++iter) {
751 for (std::vector<Alignable*>::const_iterator iter = endcaps.begin(); iter != endcaps.end(); ++iter) {
763 template<
class G,
class Rcd,
class ErrRcd>
780 <<
"@SUB=AlignmentProducer::applyDB"
781 <<
"\nTrying to apply "
782 << record.key().name()
783 <<
" with multiple IOVs in tag.\n"
784 <<
"Validity range is "
790 record.get(alignments);
793 iSetup.
get<ErrRcd>().
get(alignmentErrors);
804 template<
class G,
class DeformationRcd>
810 const DeformationRcd &
record = iSetup.
get<DeformationRcd>();
818 <<
"@SUB=AlignmentProducer::applyDB"
819 <<
"\nTrying to apply "
820 << record.key().name()
821 <<
" with multiple IOVs in tag.\n"
822 <<
"Validity range is "
827 record.get(surfaceDeformations);
845 this->
writeDB(alignments,
"TrackerAlignmentRcd",
846 alignmentErrors,
"TrackerAlignmentErrorRcd", trackerGlobal,
859 this->
writeDB(alignments,
"DTAlignmentRcd",
860 alignmentErrors,
"DTAlignmentErrorRcd", muonGlobal,
866 this->
writeDB(alignments,
"CSCAlignmentRcd",
867 alignmentErrors,
"CSCAlignmentErrorRcd", muonGlobal,
874 this->
writeDB(alignmentSurfaceDeformations,
"TrackerSurfaceDeformationRcd", time);
892 delete tempAlignments;
893 delete tempAlignmentErrors;
894 throw cms::Exception(
"NotAvailable") <<
"PoolDBOutputService not available";
897 if (globalCoordinates
898 && globalCoordinates->
transform() != AlignTransform::Transform::Identity) {
906 tempAlignments, tempAlignmentErrors);
909 delete alignmentErrors;
911 edm::LogInfo(
"Alignment") <<
"@SUB=AlignmentProducer::writeDB"
912 <<
"globalCoordinates removed from alignments (" << alignRcd
913 <<
") and errors (" << alignRcd <<
").";
917 edm::LogInfo(
"Alignment") <<
"Writing Alignments for run " << time
918 <<
" to " << alignRcd <<
".";
921 delete tempAlignments;
925 edm::LogInfo(
"Alignment") <<
"Writing AlignmentErrors for run " << time
926 <<
" to " << errRcd <<
".";
929 delete tempAlignmentErrors;
942 delete alignmentSurfaceDeformations;
943 throw cms::Exception(
"NotAvailable") <<
"PoolDBOutputService not available";
947 edm::LogInfo(
"Alignment") <<
"Writing AlignmentSurfaceDeformations for run " << time
948 <<
" to " << surfaceDeformationRcd <<
".";
950 surfaceDeformationRcd);
952 delete alignmentSurfaceDeformations;
959 static bool oldRunRangeSelectionWarning =
false;
965 if (!RunRangeSelectionVPSet.empty()) {
967 std::map<RunNumber,RunNumber> uniqueFirstRunNumbers;
969 for (std::vector<edm::ParameterSet>::const_iterator ipset = RunRangeSelectionVPSet.begin();
970 ipset != RunRangeSelectionVPSet.end();
972 const std::vector<std::string> RunRangeStrings = (*ipset).getParameter<std::vector<std::string> >(
"RunRanges");
973 for (std::vector<std::string>::const_iterator irange = RunRangeStrings.begin();
974 irange != RunRangeStrings.end();
977 if ((*irange).find(
':')==std::string::npos) {
980 long int temp = strtol((*irange).c_str(), 0, 0);
981 if (temp!=-1) first =
temp;
986 if (!oldRunRangeSelectionWarning) {
987 edm::LogWarning(
"BadConfig") <<
"@SUB=AlignmentProducer::makeNonOverlappingRunRanges"
988 <<
"Config file contains old format for 'RunRangeSelection'. Only the start run\n"
989 <<
"number is used internally. The number of the last run is ignored and can be\n"
990 <<
"safely removed from the config file.\n";
991 oldRunRangeSelectionWarning =
true;
994 std::vector<std::string> tokens =
edm::tokenize(*irange,
":");
997 temp = strtol(tokens[0].c_str(), 0, 0);
998 if (temp!=-1) first =
temp;
1004 for (std::map<RunNumber,RunNumber>::iterator iFirst = uniqueFirstRunNumbers.begin();
1005 iFirst!=uniqueFirstRunNumbers.end();
1007 uniqueRunRanges.push_back(std::pair<RunNumber,RunNumber>((*iFirst).first, endValue));
1009 for (
unsigned int i = 0;
i<uniqueRunRanges.size()-1;++
i) {
1010 uniqueRunRanges[
i].second = uniqueRunRanges[
i+1].first - 1;
1015 uniqueRunRanges.push_back(std::pair<RunNumber,RunNumber>(beginValue, endValue));
1019 return uniqueRunRanges;
std::vector< Alignable * > Alignables
const TimeTypeSpecs timeTypeSpecs[]
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 'first' component GeomDet(Unit).
bool getByLabel(std::string const &label, Handle< PROD > &result) const
T getUntrackedParameter(std::string const &, T const &) const
AlignmentErrors * dtAlignmentErrors()
boost::shared_ptr< TrackerGeometry > theTracker
virtual void rotateInLocalFrame(const RotationType &rotation)
Rotation intepreted in the local reference frame.
const bool doMisalignmentScenario_
virtual void run(const edm::EventSetup &setup, const EventInfo &eventInfo)=0
Run the algorithm (must be implemented in derived class)
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
virtual boost::shared_ptr< TrackerGeometry > produceTracker(const TrackerDigiGeometryRecord &iRecord)
Produce the tracker geometry.
friend struct const_iterator
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.
void readInSurveyRcds(const edm::EventSetup &)
read in survey records
std::vector< ParameterSet > VParameterSet
ErrorMatrix matrix() const
TrackerGeometry * build(const GeometricDet *gd, const edm::ParameterSet &pSet)
virtual boost::shared_ptr< DTGeometry > produceDT(const MuonGeometryRecord &iRecord)
Produce the muon DT geometry.
align::Alignables DTBarrel()
virtual void endLuminosityBlock(const edm::EventSetup &setup)
called at end of luminosity block (no lumi block info passed yet)
static const IOVSyncValue & endOfTime()
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
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)
const edm::InputTag tkLasBeamTag_
const Alignments * theSurveyValues
void addSurveyInfo_(Alignable *)
Add survey info to an alignable.
uint8_t structureType() const
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
AlignmentParameters * alignmentParameters() const
Get the AlignmentParameters.
void removeGlobalTransform(const Alignments *alignments, const AlignmentErrors *alignmentErrors, const AlignTransform &globalCoordinates, Alignments *newAlignments, AlignmentErrors *newAlignmentErrors)
virtual bool addCalibrations(const std::vector< IntegratedCalibrationBase * > &iCals)
void setWhatProduced(T *iThis, const es::Label &iLabel=es::Label())
const bool applyDbAlignment_
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
void build(boost::shared_ptr< CSCGeometry > geom, const DDCompactView *fv, const MuonDDDConstants &muonConstants)
Build the geometry.
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
align::Alignables CSCEndcaps()
const bool checkDbAlignmentValidity_
tuple AlignmentParameterStore
boost::shared_ptr< CSCGeometry > theMuonCSC
static const IOVSyncValue & beginOfTime()
const edm::InputTag clusterValueMapTag_
const int stNFixAlignables_
void attachSurfaceDeformations(C *geometry, const AlignmentSurfaceDeformations *surfaceDeformations)
unsigned int theSurveyIndex
virtual StructureType alignableObjectId() const =0
Return the alignable type identifier.
AlignmentErrors * alignmentErrors() const
Return alignment errors, sorted by DetId.
AlignmentErrors * cscAlignmentErrors()
Abs< T >::type abs(const T &t)
std::vector< AlignmentMonitorBase * > theMonitors
void writeDB(Alignments *alignments, const std::string &alignRcd, AlignmentErrors *alignmentErrors, const std::string &errRcd, const AlignTransform *globalCoordinates, cond::Time_t time) const
void applyAlignments(C *geometry, const Alignments *alignments, const AlignmentErrors *alignmentErrors, const AlignTransform &globalCoordinates)
virtual void startingNewLoop(unsigned int iLoop)
Called at beginning of loop.
RunRanges makeNonOverlappingRunRanges(const edm::VParameterSet &RunRangeSelectionVPSet)
AlignmentParameterStore * theAlignmentParameterStore
void writeOne(T *payload, Time_t time, const std::string &recordName, bool withlogging=false)
AlignmentSurfaceDeformations * surfaceDeformations() const
Return surface deformations, sorted by DetId.
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.
boost::shared_ptr< DTGeometry > theMuonDT
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
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.
const AlignableSurface & surface() const
Return the Surface (global position and orientation) of the object.
const SurveyErrors * theSurveyErrors
const edm::InputTag tjTkAssociationMapTag_
edm::ESWatcher< TrackerSurveyErrorRcd > watchTkSurveyErrRcd_
virtual Status duringLoop(const edm::Event &event, const edm::EventSetup &setup)
Called at each event.
AlignableMuon * theAlignableMuon
const bool saveDeformationsToDB_
virtual void endOfJob()
Called at end of job.
AlgebraicVector EulerAngles
align::Scalar length() const
const double stRandomShift_
virtual void beginOfJob()
void build(boost::shared_ptr< DTGeometry > theGeometry, const DDCompactView *cview, const MuonDDDConstants &muonConstants)
virtual void rotateInGlobalFrame(const RotationType &rotation)=0
void addUntrackedParameter(std::string const &name, T const &value)
std::vector< std::string > tokenize(std::string const &input, std::string const &separator)
breaks the input string into tokens, delimited by the separator
void setSurvey(const SurveyDet *)
Set survey info.
virtual void endLuminosityBlock(const edm::LuminosityBlock &lumiBlock, const edm::EventSetup &setup)
Called at lumi block end, calling algorithm's endLuminosityBlock.
T const * product() const
std::vector< ConstTrajTrackPair > ConstTrajTrackPairCollection
Alignments * cscAlignments()
define run information passed to algorithms (in endRun)
bool check(const edm::EventSetup &iSetup)
ESHandle< TrackerGeometry > geometry
virtual boost::shared_ptr< CSCGeometry > produceCSC(const MuonGeometryRecord &iRecord)
Produce the muon CSC geometry.
edm::ESWatcher< TrackerSurveyRcd > watchTkSurveyRcd_
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.
virtual void beginLuminosityBlock(const edm::LuminosityBlock &lumiBlock, const edm::EventSetup &setup)
Called at lumi block start, calling algorithm's beginLuminosityBlock.
std::vector< char > convertParamSel(const std::string &selString) const
Converting std::string into std::vector<char>
static unsigned int const shift
void applyDB(G *geometry, const edm::EventSetup &iSetup, const AlignTransform &globalPosition) const
const AlignTransform & DetectorGlobalPosition(const Alignments &allGlobals, const DetId &id)
void writeForRunRange(cond::Time_t time)
virtual void startNewLoop()
const IOVSyncValue & first() const
Alignments * alignments() const
Return alignments, sorted by DetId.
std::vector< SurveyError > m_surveyErrors
std::pair< const Trajectory *, const reco::Track * > ConstTrajTrackPair
Builds a scenario from configuration and applies it to the alignable tracker.
const Alignments * globalPositions_
GlobalPositions that might be read from DB, NULL otherwise.
void setup(std::vector< TH2F > &depth, std::string name, std::string units="")
void applyScenario(const edm::ParameterSet &scenario)
Apply misalignment scenario to the Muon.
T get(const Candidate &c)
AlignmentAlgorithmBase::RunRange RunRange
const double stRandomRotation_
define event information passed to algorithms
std::vector< RunRange > RunRanges