CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
List of all members | Public Types | Public Member Functions | Protected Attributes | Private Attributes
AlignmentParameterStore Class Reference

#include <AlignmentParameterStore.h>

Public Types

typedef std::map< std::pair
< Alignable *, Alignable * >
, AlgebraicMatrix
Correlations
 
typedef std::vector< unsigned int > DetIds
 
typedef std::pair< Alignable
*, unsigned int > 
ParameterId
 a single alignable parameter of an Alignable More...
 
typedef std::vector
< AlignmentParameters * > 
Parameters
 

Public Member Functions

void acquireRelativeParameters (void)
 
AlignablealignableFromAlignableDet (AlignableDetOrUnitPtr alignableDet) const
 Obsolete: Use AlignableNavigator::alignableDetFromGeomDet and alignableFromAlignableDet. More...
 
const align::Alignablesalignables (void) const
 get all alignables More...
 
 AlignmentParameterStore (const align::Alignables &alis, const edm::ParameterSet &config)
 constructor More...
 
void applyAlignableAbsolutePositions (const align::Alignables &alis, const AlignablePositions &newpos, int &ierr)
 apply absolute positions to alignables More...
 
void applyAlignableRelativePositions (const align::Alignables &alivec, const AlignableShifts &shifts, int &ierr)
 apply relative shifts to alignables More...
 
void applyParameters (void)
 Obsolete: Use AlignableNavigator::alignableDetFromDetId and alignableFromAlignableDet. More...
 
void applyParameters (Alignable *alignable)
 apply parameters of a given alignable More...
 
void attachAlignmentParameters (const align::Alignables &alivec, const Parameters &parvec, int &ierr)
 Attach alignment parameters to given alignables. More...
 
void attachAlignmentParameters (const Parameters &parvec, int &ierr)
 Attach alignment parameters to alignables. More...
 
void attachCorrelations (const align::Alignables &alivec, const Correlations &cormap, bool overwrite, int &ierr)
 Attach correlations to given alignables. More...
 
void attachCorrelations (const Correlations &cormap, bool overwrite, int &ierr)
 Attach correlations to alignables. More...
 
void attachUserVariables (const align::Alignables &alivec, const std::vector< AlignmentUserVariables * > &uvarvec, int &ierr)
 Attach User Variables to given alignables. More...
 
void cacheTransformations (void)
 cache the current position, rotation and other parameters More...
 
AlignmentCorrelationsStorecorrelationsStore (void) const
 get full correlation map More...
 
bool hierarchyConstraints (const Alignable *aliMaster, const align::Alignables &aliComps, std::vector< std::vector< ParameterId > > &paramIdsVecOut, std::vector< std::vector< double > > &factorsVecOut, bool all, double epsilon) const
 
const unsigned int numCorrelations (void) const
 get number of correlations between alignables More...
 
int numObjects (void) const
 returns number of alignables More...
 
void resetParameters (void)
 reset parameters, correlations, user variables More...
 
void resetParameters (Alignable *ali)
 reset parameters of a given alignable More...
 
void restoreCachedTransformations (void)
 restore the previously cached position, rotation and other parameters More...
 
CompositeAlignmentParameters selectParameters (const std::vector< AlignableDet * > &alignabledets) const
 
CompositeAlignmentParameters selectParameters (const std::vector< AlignableDetOrUnitPtr > &alignabledets) const
 select parameters More...
 
CompositeAlignmentParameters selectParameters (const std::vector< Alignable * > &alignables) const
 select parameters More...
 
void setAlignmentPositionError (const align::Alignables &alivec, double valshift, double valrot)
 Set Alignment position error. More...
 
std::pair< int, int > typeAndLayer (const Alignable *ali) const
 Obtain type and layer from Alignable. More...
 
void updateParameters (const CompositeAlignmentParameters &aap, bool updateCorrelations=true)
 update parameters More...
 
align::Alignables validAlignables (void) const
 get all alignables with valid parameters More...
 
virtual ~AlignmentParameterStore ()
 destructor More...
 

Protected Attributes

AlignmentCorrelationsStoretheCorrelationsStore
 

Private Attributes

align::Alignables theAlignables
 alignables More...
 

Detailed Description

Basic class for management of alignment parameters and correlations

Date:
2011/05/23 20:50:31
Revision:
1.19

(last update by

Author:
mussgill

)

Definition at line 20 of file AlignmentParameterStore.h.

Member Typedef Documentation

Definition at line 26 of file AlignmentParameterStore.h.

typedef std::vector<unsigned int> AlignmentParameterStore::DetIds

Definition at line 27 of file AlignmentParameterStore.h.

typedef std::pair<Alignable*, unsigned int> AlignmentParameterStore::ParameterId

a single alignable parameter of an Alignable

Definition at line 127 of file AlignmentParameterStore.h.

Definition at line 25 of file AlignmentParameterStore.h.

Constructor & Destructor Documentation

AlignmentParameterStore::AlignmentParameterStore ( const align::Alignables alis,
const edm::ParameterSet config 
)

constructor

Definition at line 26 of file AlignmentParameterStore.cc.

References edm::ParameterSet::getParameter(), edm::ParameterSet::getUntrackedParameter(), theAlignables, and theCorrelationsStore.

27  :
28  theAlignables(alis)
29 {
30  if (config.getUntrackedParameter<bool>("UseExtendedCorrelations")) {
32  (config.getParameter<edm::ParameterSet>("ExtendedCorrelationsConfig"));
33  } else {
35  }
36 
37  edm::LogInfo("Alignment") << "@SUB=AlignmentParameterStore"
38  << "Created with " << theAlignables.size() << " alignables.";
39 }
T getParameter(std::string const &) const
T getUntrackedParameter(std::string const &, T const &) const
align::Alignables theAlignables
alignables
AlignmentCorrelationsStore * theCorrelationsStore
AlignmentParameterStore::~AlignmentParameterStore ( )
virtual

destructor

Definition at line 42 of file AlignmentParameterStore.cc.

References theCorrelationsStore.

43 {
44  delete theCorrelationsStore;
45 }
AlignmentCorrelationsStore * theCorrelationsStore

Member Function Documentation

void AlignmentParameterStore::acquireRelativeParameters ( void  )

acquire shifts/rotations from alignables of the store and copy into alignment parameters (local frame)

Definition at line 344 of file AlignmentParameterStore.cc.

References Alignable::alignmentParameters(), RigidBodyAlignmentParameters::clone(), Alignable::displacement(), edm::hlt::Exception, i, Alignable::rotation(), Alignable::setAlignmentParameters(), AlignmentParameters::size(), Alignable::surface(), theAlignables, align::toAngles(), AlignableSurface::toLocal(), TkRotation< T >::x(), and Basic3DVector< T >::y().

345 {
346 
347  unsigned int nAlignables = theAlignables.size();
348 
349  for (unsigned int i = 0; i < nAlignables; ++i)
350  {
351  Alignable* ali = theAlignables[i];
352 
354  dynamic_cast<RigidBodyAlignmentParameters*>( ali->alignmentParameters() );
355 
356  if ( !ap )
357  throw cms::Exception("BadAlignable")
358  << "acquireRelativeParameters: "
359  << "provided alignable does not have rigid body alignment parameters";
360 
361  AlgebraicVector par( ap->size(),0 );
362  AlgebraicSymMatrix cov( ap->size(), 0 );
363 
364  // Get displacement and transform global->local
365  align::LocalVector dloc = ali->surface().toLocal( ali->displacement() );
366  par[0]=dloc.x();
367  par[1]=dloc.y();
368  par[2]=dloc.z();
369 
370  // Transform to local euler angles
371  align::EulerAngles euloc = align::toAngles( ali->surface().toLocal( ali->rotation() ) );
372  par[3]=euloc(1);
373  par[4]=euloc(2);
374  par[5]=euloc(3);
375 
376  // Clone parameters
377  RigidBodyAlignmentParameters* apnew = ap->clone(par,cov);
378 
379  ali->setAlignmentParameters(apnew);
380  }
381 }
int i
Definition: DBlmapReader.cc:9
T y() const
Cartesian y coordinate.
virtual RigidBodyAlignmentParameters * clone(const AlgebraicVector &parameters, const AlgebraicSymMatrix &covMatrix) const
Clone all parameters (for update of parameters)
const GlobalVector & displacement() const
Return change of the global position since the creation of the object.
Definition: Alignable.h:135
AlignmentParameters * alignmentParameters() const
Get the AlignmentParameters.
Definition: Alignable.h:57
Basic3DVector< T > x() const
const RotationType & rotation() const
Return change of orientation since the creation of the object.
Definition: Alignable.h:138
align::RotationType toLocal(const align::RotationType &) const
Return in local frame a rotation given in global frame.
void setAlignmentParameters(AlignmentParameters *dap)
Set the AlignmentParameters.
Definition: Alignable.cc:81
EulerAngles toAngles(const RotationType &)
Convert rotation matrix to angles about x-, y-, z-axes (frame rotation).
Definition: Utilities.cc:7
const AlignableSurface & surface() const
Return the Surface (global position and orientation) of the object.
Definition: Alignable.h:126
CLHEP::HepVector AlgebraicVector
AlgebraicVector EulerAngles
Definition: Definitions.h:36
int size(void) const
Get number of parameters.
align::Alignables theAlignables
alignables
CLHEP::HepSymMatrix AlgebraicSymMatrix
Alignable * AlignmentParameterStore::alignableFromAlignableDet ( AlignableDetOrUnitPtr  alignableDet) const

Obsolete: Use AlignableNavigator::alignableDetFromGeomDet and alignableFromAlignableDet.

get Alignable corresponding to given AlignableDet (non-const ref. argument since might be returned)

Definition at line 253 of file AlignmentParameterStore.cc.

References Alignable::alignmentParameters(), and Alignable::mother().

Referenced by KalmanAlignmentUpdator::alignablesFromAlignableDets(), and selectParameters().

254 {
255  Alignable *mother = alignableDet;
256  while (mother) {
257  if (mother->alignmentParameters()) return mother;
258  mother = mother->mother();
259  }
260 
261  return 0;
262 }
AlignmentParameters * alignmentParameters() const
Get the AlignmentParameters.
Definition: Alignable.h:57
Alignable * mother() const
Return pointer to container alignable (if any)
Definition: Alignable.h:85
const align::Alignables& AlignmentParameterStore::alignables ( void  ) const
inline
void AlignmentParameterStore::applyAlignableAbsolutePositions ( const align::Alignables alis,
const AlignablePositions newpos,
int &  ierr 
)

apply absolute positions to alignables

Definition at line 397 of file AlignmentParameterStore.cc.

References Alignable::alignableObjectId(), newFWLiteAna::found, Alignable::globalPosition(), Alignable::globalRotation(), Alignable::id(), LogDebug, Alignable::move(), TkRotation< T >::multiplyInverse(), align::rectify(), TkRotation< T >::rot, and Alignable::rotateInGlobalFrame().

Referenced by HIPAlignmentAlgorithm::startNewLoop().

400 {
401  unsigned int nappl=0;
402  ierr=0;
403 
404  // Iterate over list of alignables
405  for (align::Alignables::const_iterator iali = alivec.begin(); iali != alivec.end(); ++iali) {
406  Alignable* ali = *iali;
407  align::ID id = ali->id();
408  align::StructureType typeId = ali->alignableObjectId();
409 
410  // Find corresponding entry in AlignablePositions
411  bool found=false;
412  for (AlignablePositions::const_iterator ipos = newpos.begin(); ipos != newpos.end(); ++ipos) {
413  if (id == ipos->id() && typeId == ipos->objId()) {
414  if (found) {
415  edm::LogError("DuplicatePosition")
416  << "New positions for alignable found more than once!";
417  } else {
418  // New position/rotation
419  const align::PositionType& pnew = ipos->pos();
420  const align::RotationType& rnew = ipos->rot();
421  // Current position / rotation
422  const align::PositionType& pold = ali->globalPosition();
423  const align::RotationType& rold = ali->globalRotation();
424 
425  // shift needed to move from current to new position
426  align::GlobalVector posDiff = pnew - pold;
427  align::RotationType rotDiff = rold.multiplyInverse(rnew);
428  align::rectify(rotDiff); // correct for rounding errors
429  ali->move( posDiff );
430  ali->rotateInGlobalFrame( rotDiff );
431  LogDebug("NewPosition") << "moving by:" << posDiff;
432  LogDebug("NewRotation") << "rotating by:\n" << rotDiff;
433 
434  // add position error
435  // AlignmentPositionError ape(shift.x(),shift.y(),shift.z());
436  // (*iali)->addAlignmentPositionError(ape);
437  // (*iali)->addAlignmentPositionErrorFromRotation(rot);
438 
439  found=true;
440  ++nappl;
441  }
442  }
443  }
444  }
445 
446  if ( nappl< newpos.size() )
447  edm::LogError("Mismatch") << "Applied only " << nappl << " new positions"
448  << " out of " << newpos.size();
449 
450  LogDebug("NewPositions") << "Applied new positions for " << nappl
451  << " out of " << alivec.size() <<" alignables.";
452 
453 }
#define LogDebug(id)
align::ID id() const
Return the ID of Alignable, i.e. DetId of &#39;first&#39; component GeomDet(Unit).
Definition: Alignable.h:180
uint32_t ID
Definition: Definitions.h:26
const RotationType & globalRotation() const
Return the global orientation of the object.
Definition: Alignable.h:132
virtual void move(const GlobalVector &displacement)=0
Movement with respect to the global reference frame.
mathSSE::Rot3< T > rot
void rectify(RotationType &)
Correct a rotation matrix for rounding errors.
Definition: Utilities.cc:196
virtual StructureType alignableObjectId() const =0
Return the alignable type identifier.
virtual void rotateInGlobalFrame(const RotationType &rotation)=0
const PositionType & globalPosition() const
Return the global position of the object.
Definition: Alignable.h:129
Basic3DVector< T > multiplyInverse(const Basic3DVector< T > &v) const
void AlignmentParameterStore::applyAlignableRelativePositions ( const align::Alignables alivec,
const AlignableShifts shifts,
int &  ierr 
)

apply relative shifts to alignables

Definition at line 458 of file AlignmentParameterStore.cc.

References Alignable::alignableObjectId(), newFWLiteAna::found, i, Alignable::id(), LogDebug, Alignable::move(), and Alignable::rotateInGlobalFrame().

459 {
460 
461  ierr=0;
462  unsigned int nappl=0;
463  unsigned int nAlignables = alivec.size();
464 
465  for (unsigned int i = 0; i < nAlignables; ++i) {
466  Alignable* ali = alivec[i];
467 
468  align::ID id = ali->id();
469  align::StructureType typeId = ali->alignableObjectId();
470 
471  // Find corresponding entry in AlignableShifts
472  bool found = false;
473  for (AlignableShifts::const_iterator ipos = shifts.begin(); ipos != shifts.end(); ++ipos) {
474  if (id == ipos->id() && typeId == ipos->objId()) {
475  if (found) {
476  edm::LogError("DuplicatePosition")
477  << "New positions for alignable found more than once!";
478  } else {
479  ali->move( ipos->pos() );
480  ali->rotateInGlobalFrame( ipos->rot() );
481 
482  // Add position error
483  //AlignmentPositionError ape(pnew.x(),pnew.y(),pnew.z());
484  //ali->addAlignmentPositionError(ape);
485  //ali->addAlignmentPositionErrorFromRotation(rnew);
486 
487  found=true;
488  ++nappl;
489  }
490  }
491  }
492  }
493 
494  if ( nappl < shifts.size() )
495  edm::LogError("Mismatch") << "Applied only " << nappl << " new positions"
496  << " out of " << shifts.size();
497 
498  LogDebug("NewPositions") << "Applied new positions for " << nappl << " alignables.";
499 }
#define LogDebug(id)
align::ID id() const
Return the ID of Alignable, i.e. DetId of &#39;first&#39; component GeomDet(Unit).
Definition: Alignable.h:180
int i
Definition: DBlmapReader.cc:9
uint32_t ID
Definition: Definitions.h:26
virtual void move(const GlobalVector &displacement)=0
Movement with respect to the global reference frame.
virtual StructureType alignableObjectId() const =0
Return the alignable type identifier.
virtual void rotateInGlobalFrame(const RotationType &rotation)=0
void AlignmentParameterStore::applyParameters ( void  )

Obsolete: Use AlignableNavigator::alignableDetFromDetId and alignableFromAlignableDet.

apply all valid parameters to their alignables

Definition at line 265 of file AlignmentParameterStore.cc.

References theAlignables.

Referenced by CSCAlignmentCorrections::applyAlignment(), MuonAlignmentFromReference::fitAndAlign(), MillePedeAlignmentAlgorithm::initialize(), CSCChamberFitter::radiusCorrection(), MillePedeAlignmentAlgorithm::setParametersForRunRange(), MuonMillepedeAlgorithm::terminate(), and HIPAlignmentAlgorithm::terminate().

266 {
267  align::Alignables::const_iterator iali;
268  for ( iali = theAlignables.begin(); iali != theAlignables.end(); ++iali)
269  applyParameters( *iali );
270 }
void applyParameters(void)
Obsolete: Use AlignableNavigator::alignableDetFromDetId and alignableFromAlignableDet.
align::Alignables theAlignables
alignables
void AlignmentParameterStore::applyParameters ( Alignable alignable)

apply parameters of a given alignable

Definition at line 274 of file AlignmentParameterStore.cc.

References Alignable::alignmentParameters(), AlignmentParameters::apply(), and edm::hlt::Exception.

275 {
276 
277  AlignmentParameters *pars = (alignable ? alignable->alignmentParameters() : 0);
278  if (!pars) {
279  throw cms::Exception("BadAlignable")
280  << "applyParameters: provided alignable does not have alignment parameters";
281  }
282  pars->apply();
283 }
AlignmentParameters * alignmentParameters() const
Get the AlignmentParameters.
Definition: Alignable.h:57
virtual void apply()=0
apply parameters to alignable
void AlignmentParameterStore::attachAlignmentParameters ( const align::Alignables alivec,
const Parameters parvec,
int &  ierr 
)

Attach alignment parameters to given alignables.

Definition at line 512 of file AlignmentParameterStore.cc.

References AlignmentParameters::alignable(), newFWLiteAna::found, and LogDebug.

Referenced by attachAlignmentParameters().

514 {
515  int ipass = 0;
516  int ifail = 0;
517  ierr = 0;
518 
519  // Iterate over alignables
520  for ( align::Alignables::const_iterator iali = alivec.begin(); iali != alivec.end(); ++iali )
521  {
522  // Iterate over Parameters
523  bool found=false;
524  for ( Parameters::const_iterator ipar = parvec.begin(); ipar != parvec.end(); ++ipar)
525  {
526  // Get new alignment parameters
527  AlignmentParameters* ap = *ipar;
528 
529  // Check if parameters belong to alignable
530  if ( ap->alignable() == (*iali) )
531  {
532  if (!found)
533  {
534  (*iali)->setAlignmentParameters(ap);
535  ++ipass;
536  found=true;
537  }
538  else edm::LogError("Alignment") << "@SUB=AlignmentParameterStore::attachAlignmentParameters"
539  << "More than one parameters for Alignable.";
540  }
541  }
542  if (!found) ++ifail;
543  }
544  if (ifail>0) ierr=-1;
545 
546  LogDebug("attachAlignmentParameters") << " Parameters, Alignables: " << parvec.size() << ","
547  << alivec.size() << "\n pass,fail: " << ipass << ","<< ifail;
548 }
#define LogDebug(id)
Alignable * alignable(void) const
Get pointer to corresponding alignable.
void AlignmentParameterStore::attachAlignmentParameters ( const Parameters parvec,
int &  ierr 
)

Attach alignment parameters to alignables.

Definition at line 504 of file AlignmentParameterStore.cc.

References attachAlignmentParameters(), and theAlignables.

505 {
507 }
align::Alignables theAlignables
alignables
void attachAlignmentParameters(const align::Alignables &alivec, const Parameters &parvec, int &ierr)
Attach alignment parameters to given alignables.
void AlignmentParameterStore::attachCorrelations ( const align::Alignables alivec,
const Correlations cormap,
bool  overwrite,
int &  ierr 
)

Attach correlations to given alignables.

Definition at line 560 of file AlignmentParameterStore.cc.

References AlignmentCorrelationsStore::correlationsAvailable(), spr::find(), LogDebug, AlignmentCorrelationsStore::setCorrelations(), and theCorrelationsStore.

Referenced by attachCorrelations().

563 {
564  ierr=0;
565  int icount=0;
566 
567  // Iterate over correlations
568  for ( Correlations::const_iterator icor = cormap.begin(); icor!=cormap.end(); ++icor )
569  {
570  AlgebraicMatrix mat=(*icor).second;
571  Alignable* ali1 = (*icor).first.first;
572  Alignable* ali2 = (*icor).first.second;
573 
574  // Check if alignables exist
575  if ( find( alivec.begin(), alivec.end(), ali1 ) != alivec.end() &&
576  find( alivec.begin(), alivec.end(), ali2 ) != alivec.end() )
577  {
578  // Check if correlations already existing between these alignables
579  if ( !theCorrelationsStore->correlationsAvailable(ali1,ali2) || (overwrite) )
580  {
581  theCorrelationsStore->setCorrelations(ali1,ali2,mat);
582  ++icount;
583  }
584  else edm::LogInfo("AlreadyExists") << "Correlation existing and not overwritten";
585  }
586  else edm::LogInfo("IgnoreCorrelation") << "Ignoring correlation with no alignables!";
587  }
588 
589  LogDebug( "attachCorrelations" ) << " Alignables,Correlations: " << alivec.size() <<","<< cormap.size()
590  << "\n applied: " << icount ;
591 
592 }
#define LogDebug(id)
void find(edm::Handle< EcalRecHitCollection > &hits, DetId thisDet, std::vector< EcalRecHitCollection::const_iterator > &hit, bool debug=false)
Definition: FindCaloHit.cc:7
virtual bool correlationsAvailable(Alignable *ap1, Alignable *ap2) const
Check whether correlations are stored for a given pair of alignables.
virtual void setCorrelations(Alignable *ap1, Alignable *ap2, const AlgebraicSymMatrix &cov, int row, int col)
CLHEP::HepMatrix AlgebraicMatrix
AlignmentCorrelationsStore * theCorrelationsStore
void AlignmentParameterStore::attachCorrelations ( const Correlations cormap,
bool  overwrite,
int &  ierr 
)

Attach correlations to alignables.

Definition at line 552 of file AlignmentParameterStore.cc.

References attachCorrelations(), and theAlignables.

554 {
555  attachCorrelations( theAlignables, cormap, overwrite, ierr );
556 }
void attachCorrelations(const align::Alignables &alivec, const Correlations &cormap, bool overwrite, int &ierr)
Attach correlations to given alignables.
align::Alignables theAlignables
alignables
void AlignmentParameterStore::attachUserVariables ( const align::Alignables alivec,
const std::vector< AlignmentUserVariables * > &  uvarvec,
int &  ierr 
)

Attach User Variables to given alignables.

Definition at line 597 of file AlignmentParameterStore.cc.

References LogDebug, and AlignmentParameters::setUserVariables().

Referenced by HIPAlignmentAlgorithm::collector().

599 {
600  ierr=0;
601 
602  LogDebug("DumpArguments") << "size of alivec: " << alivec.size()
603  << "\nsize of uvarvec: " << uvarvec.size();
604 
605  std::vector<AlignmentUserVariables*>::const_iterator iuvar=uvarvec.begin();
606 
607  for ( align::Alignables::const_iterator iali=alivec.begin(); iali!=alivec.end(); ++iali, ++iuvar )
608  {
609  AlignmentParameters* ap = (*iali)->alignmentParameters();
610  AlignmentUserVariables* uvarnew = (*iuvar);
611  ap->setUserVariables(uvarnew);
612  }
613 }
#define LogDebug(id)
(Abstract) Base class for alignment algorithm user variables
void setUserVariables(AlignmentUserVariables *auv)
Set pointer to user variables.
void AlignmentParameterStore::cacheTransformations ( void  )

cache the current position, rotation and other parameters

Definition at line 327 of file AlignmentParameterStore.cc.

References theAlignables.

Referenced by MillePedeAlignmentAlgorithm::terminate().

328 {
329  align::Alignables::const_iterator iali;
330  for ( iali = theAlignables.begin(); iali != theAlignables.end(); ++iali)
331  (*iali)->cacheTransformation();
332 }
align::Alignables theAlignables
alignables
AlignmentCorrelationsStore* AlignmentParameterStore::correlationsStore ( void  ) const
inline

get full correlation map

Definition at line 59 of file AlignmentParameterStore.h.

References theCorrelationsStore.

59 { return theCorrelationsStore; }
AlignmentCorrelationsStore * theCorrelationsStore
bool AlignmentParameterStore::hierarchyConstraints ( const Alignable aliMaster,
const align::Alignables aliComps,
std::vector< std::vector< ParameterId > > &  paramIdsVecOut,
std::vector< std::vector< double > > &  factorsVecOut,
bool  all,
double  epsilon 
) const

Assuming aliMaster has (sub-)components aliComps with alignment parameters (cf. Alignable::firstParamComponents), paramIdsVecOut and factorsVecOut will be filled (in parallel) with constraints on the selected alignment parameters of aliMaster to get rid of the additionally introduced degrees of freedom: The 'vector product' of the parameters identified by ParameterId in std::vector<ParameterId> and the factors in std::vector<double> has to vanish (i.e. == 0.), |factor| < epsilon will be treated as 0. If all == false, skip constraint on aliMaster's degree of freedom 'i' if 'i'th alignment parameter of aliMaster is not selected, i.e. constrain only for otherwise doubled d.o.f. If all == true, produce one constraint for each of the aliMaster's parameters irrespective of whether they are selecte dor not. paramIdsVecOut and factorsVecOut contain exactly one std::vector per selected alignment parameter of aliMaster, but in principle these can be empty... Note that not all combinations of AlignmentParameters classes ar supported. If not there will be an exception (and false returned...)

Definition at line 650 of file AlignmentParameterStore.cc.

References Alignable::alignmentParameters(), edm::hlt::Exception, ParametersToParametersDerivatives::isOK(), and AlignmentParameters::selector().

Referenced by PedeSteerer::hierarchyConstraint().

654 {
655  // Weak point if all = false:
656  // Ignores constraints between non-subsequent levels in case the parameter is not considered in
657  // the intermediate level, e.g. global z for dets and layers is aligned, but not for rods!
658  if (!ali || !ali->alignmentParameters()) return false;
659 
660  const std::vector<bool> &aliSel= ali->alignmentParameters()->selector();
661  paramIdsVecOut.clear();
662  factorsVecOut.clear();
663 
664  bool firstComp = true;
665  for (align::Alignables::const_iterator iComp = aliComps.begin(), iCompE = aliComps.end();
666  iComp != iCompE; ++iComp) {
667 
668  const ParametersToParametersDerivatives p2pDerivs(**iComp, *ali);
669  if (!p2pDerivs.isOK()) {
670  throw cms::Exception("BadConfig")
671  << "AlignmentParameterStore::hierarchyConstraints"
672  << " Bad match of types of AlignmentParameters classes.\n";
673  return false;
674  }
675  const std::vector<bool> &aliCompSel = (*iComp)->alignmentParameters()->selector();
676  for (unsigned int iParMast = 0, iParMastUsed = 0; iParMast < aliSel.size(); ++iParMast) {
677  if (!all && !aliSel[iParMast]) continue;// no higher level parameter & constraint deselected
678  if (firstComp) { // fill output with empty arrays
679  paramIdsVecOut.push_back(std::vector<ParameterId>());
680  factorsVecOut.push_back(std::vector<double>());
681  }
682  for (unsigned int iParComp = 0; iParComp < aliCompSel.size(); ++iParComp) {
683  if (aliCompSel[iParComp]) {
684  const double factor = p2pDerivs(iParMast, iParComp);
685  if (fabs(factor) > epsilon) {
686  paramIdsVecOut[iParMastUsed].push_back(ParameterId(*iComp, iParComp));
687  factorsVecOut[iParMastUsed].push_back(factor);
688  }
689  }
690  }
691  ++iParMastUsed;
692  }
693  firstComp = false;
694  } // end loop on components
695 
696  return true;
697 }
std::pair< Alignable *, unsigned int > ParameterId
a single alignable parameter of an Alignable
const double epsilon
const unsigned int AlignmentParameterStore::numCorrelations ( void  ) const
inline

get number of correlations between alignables

Definition at line 62 of file AlignmentParameterStore.h.

References AlignmentCorrelationsStore::size(), and theCorrelationsStore.

Referenced by SingleTrajectoryUpdator::process().

62 { return theCorrelationsStore->size(); }
virtual unsigned int size(void) const
Get number of stored correlations.
AlignmentCorrelationsStore * theCorrelationsStore
int AlignmentParameterStore::numObjects ( void  ) const
inline

returns number of alignables

Definition at line 56 of file AlignmentParameterStore.h.

References theAlignables.

56 { return theAlignables.size(); }
align::Alignables theAlignables
alignables
void AlignmentParameterStore::resetParameters ( void  )

reset parameters, correlations, user variables

Definition at line 287 of file AlignmentParameterStore.cc.

References AlignmentCorrelationsStore::resetCorrelations(), theAlignables, and theCorrelationsStore.

Referenced by MillePedeAlignmentAlgorithm::initialize(), and MillePedeAlignmentAlgorithm::setParametersForRunRange().

288 {
289  // Erase contents of correlation map
291 
292  // Iterate over alignables in the store and reset parameters
293  align::Alignables::const_iterator iali;
294  for ( iali = theAlignables.begin(); iali != theAlignables.end(); ++iali )
295  resetParameters( *iali );
296 }
void resetParameters(void)
reset parameters, correlations, user variables
virtual void resetCorrelations(void)
Reset correlations.
align::Alignables theAlignables
alignables
AlignmentCorrelationsStore * theCorrelationsStore
void AlignmentParameterStore::resetParameters ( Alignable ali)

reset parameters of a given alignable

Definition at line 300 of file AlignmentParameterStore.cc.

References Alignable::alignmentParameters(), AlignmentParameters::cloneFromSelected(), AlignmentParameters::numSelected(), Alignable::setAlignmentParameters(), and AlignmentParameters::setValid().

301 {
302  if ( ali )
303  {
304  // Get alignment parameters for this alignable
306  if ( ap )
307  {
308  int npar=ap->numSelected();
309 
310  AlgebraicVector par(npar,0);
311  AlgebraicSymMatrix cov(npar,0);
312  AlignmentParameters* apnew = ap->cloneFromSelected(par,cov);
313  ali->setAlignmentParameters(apnew);
314  apnew->setValid(false);
315  }
316  else
317  edm::LogError("BadArgument") << "@SUB=AlignmentParameterStore::resetParameters"
318  << "alignable has no alignment parameter";
319  }
320  else
321  edm::LogError("BadArgument") << "@SUB=AlignmentParameterStore::resetParameters"
322  << "argument is NULL";
323 }
AlignmentParameters * alignmentParameters() const
Get the AlignmentParameters.
Definition: Alignable.h:57
void setAlignmentParameters(AlignmentParameters *dap)
Set the AlignmentParameters.
Definition: Alignable.cc:81
void setValid(bool v)
Set validity flag.
int numSelected(void) const
Get number of selected parameters.
CLHEP::HepVector AlgebraicVector
CLHEP::HepSymMatrix AlgebraicSymMatrix
virtual AlignmentParameters * cloneFromSelected(const AlgebraicVector &par, const AlgebraicSymMatrix &cov) const =0
void AlignmentParameterStore::restoreCachedTransformations ( void  )

restore the previously cached position, rotation and other parameters

Definition at line 336 of file AlignmentParameterStore.cc.

References theAlignables.

Referenced by MillePedeAlignmentAlgorithm::setParametersForRunRange().

337 {
338  align::Alignables::const_iterator iali;
339  for ( iali = theAlignables.begin(); iali != theAlignables.end(); ++iali)
340  (*iali)->restoreCachedTransformation();
341 }
align::Alignables theAlignables
alignables
CompositeAlignmentParameters AlignmentParameterStore::selectParameters ( const std::vector< AlignableDet * > &  alignabledets) const

select parameters (for backward compatibility, use with vector<AlignableDetOrUnitPtr> as argument instead)

Definition at line 49 of file AlignmentParameterStore.cc.

Referenced by SingleTrajectoryUpdator::process(), MuonMillepedeAlgorithm::run(), and HIPAlignmentAlgorithm::run().

50 {
51  std::vector<AlignableDetOrUnitPtr> detOrUnits;
52  detOrUnits.reserve(alignabledets.size());
53 
54  std::vector<AlignableDet*>::const_iterator it, iEnd;
55  for ( it = alignabledets.begin(), iEnd = alignabledets.end(); it != iEnd; ++it)
56  detOrUnits.push_back(AlignableDetOrUnitPtr(*it));
57 
58  return this->selectParameters(detOrUnits);
59 }
CompositeAlignmentParameters selectParameters(const std::vector< AlignableDet * > &alignabledets) const
CompositeAlignmentParameters AlignmentParameterStore::selectParameters ( const std::vector< AlignableDetOrUnitPtr > &  alignabledets) const

select parameters

Definition at line 63 of file AlignmentParameterStore.cc.

References alignableFromAlignableDet(), alignables(), Alignable::alignmentParameters(), AlignmentCorrelationsStore::correlations(), data, spr::find(), AlignmentParameters::numSelected(), AlignmentParameters::selectedCovariance(), AlignmentParameters::selectedParameters(), and theCorrelationsStore.

64 {
65 
67  std::map <AlignableDetOrUnitPtr,Alignable*> alidettoalimap;
68  std::map <Alignable*,int> aliposmap;
69  std::map <Alignable*,int> alilenmap;
70  int nparam=0;
71 
72  // iterate over AlignableDet's
73  for( std::vector<AlignableDetOrUnitPtr>::const_iterator iad = alignabledets.begin();
74  iad != alignabledets.end(); ++iad )
75  {
76  Alignable* ali = alignableFromAlignableDet( *iad );
77  if ( ali )
78  {
79  alidettoalimap[ *iad ] = ali; // Add to map
80  // Check if Alignable already there, insert into vector if not
81  if ( find(alignables.begin(),alignables.end(),ali) == alignables.end() )
82  {
83  alignables.push_back(ali);
85  nparam += ap->numSelected();
86  }
87  }
88  }
89 
90  AlgebraicVector* selpar = new AlgebraicVector( nparam, 0 );
91  AlgebraicSymMatrix* selcov = new AlgebraicSymMatrix( nparam, 0 );
92 
93  // Fill in parameters and corresponding covariance matricess
94  int ipos = 1; // NOTE: .sub indices start from 1
95  align::Alignables::const_iterator it1;
96  for( it1 = alignables.begin(); it1 != alignables.end(); ++it1 )
97  {
98  AlignmentParameters* ap = (*it1)->alignmentParameters();
99  selpar->sub( ipos, ap->selectedParameters() );
100  selcov->sub( ipos, ap->selectedCovariance() );
101  int npar = ap->numSelected();
102  aliposmap[*it1]=ipos;
103  alilenmap[*it1]=npar;
104  ipos +=npar;
105  }
106 
107  // Fill in the correlations. Has to be an extra loop, because the
108  // AlignmentExtendedCorrelationsStore (if used) needs the
109  // alignables' covariance matrices already present.
110  ipos = 1;
111  for( it1 = alignables.begin(); it1 != alignables.end(); ++it1 )
112  {
113  int jpos=1;
114 
115  // Look for correlations between alignables
116  align::Alignables::const_iterator it2;
117  for( it2 = alignables.begin(); it2 != it1; ++it2 )
118  {
119  theCorrelationsStore->correlations( *it1, *it2, *selcov, ipos-1, jpos-1 );
120  jpos += (*it2)->alignmentParameters()->numSelected();
121  }
122 
123  ipos += (*it1)->alignmentParameters()->numSelected();
124  }
125 
127  CompositeAlignmentParameters aap( data, alignables, alidettoalimap, aliposmap, alilenmap );
128 
129  return aap;
130 }
AlgebraicVector selectedParameters(void) const
Get selected parameters.
void find(edm::Handle< EcalRecHitCollection > &hits, DetId thisDet, std::vector< EcalRecHitCollection::const_iterator > &hit, bool debug=false)
Definition: FindCaloHit.cc:7
AlignmentParameters * alignmentParameters() const
Get the AlignmentParameters.
Definition: Alignable.h:57
AlgebraicSymMatrix selectedCovariance(void) const
Get covariance matrix of selected parameters.
int numSelected(void) const
Get number of selected parameters.
CLHEP::HepVector AlgebraicVector
virtual void correlations(Alignable *ap1, Alignable *ap2, AlgebraicSymMatrix &cov, int row, int col) const
std::vector< Alignable * > Alignables
Definition: Utilities.h:28
AlignmentCorrelationsStore * theCorrelationsStore
char data[epos_bytes_allocation]
Definition: EPOS_Wrapper.h:82
CLHEP::HepSymMatrix AlgebraicSymMatrix
Alignable * alignableFromAlignableDet(AlignableDetOrUnitPtr alignableDet) const
Obsolete: Use AlignableNavigator::alignableDetFromGeomDet and alignableFromAlignableDet.
const align::Alignables & alignables(void) const
get all alignables
CompositeAlignmentParameters AlignmentParameterStore::selectParameters ( const std::vector< Alignable * > &  alignables) const

select parameters

void AlignmentParameterStore::setAlignmentPositionError ( const align::Alignables alivec,
double  valshift,
double  valrot 
)

Set Alignment position error.

Definition at line 617 of file AlignmentParameterStore.cc.

References Alignable::addAlignmentPositionError(), Alignable::addAlignmentPositionErrorFromRotation(), i, LogDebug, alignCSCRings::r, Alignable::setAlignmentPositionError(), and align::toMatrix().

Referenced by MuonAlignmentFromReference::fitAndAlign(), MuonAlignmentFromReference::initialize(), and HIPAlignmentAlgorithm::setAlignmentPositionError().

619 {
620  unsigned int nAlignables = alivec.size();
621 
622  for (unsigned int i = 0; i < nAlignables; ++i)
623  {
624  Alignable* ali = alivec[i];
625 
626  // First reset APE
627  AlignmentPositionError nulApe(0,0,0);
628  ali->setAlignmentPositionError(nulApe, true);
629 
630  // Set APE from displacement
631  AlignmentPositionError ape(valshift,valshift,valshift);
632  if ( valshift > 0. ) ali->addAlignmentPositionError(ape, true);
633  else ali->setAlignmentPositionError(ape, true);
634  // GF: Resetting and setting as above does not really make sense to me,
635  // and adding to zero or setting is the same! I'd just do
636  //ali->setAlignmentPositionError(AlignmentPositionError ape(valshift,valshift,valshift),true);
637 
638  // Set APE from rotation
640  r(1)=valrot; r(2)=valrot; r(3)=valrot;
642  }
643 
644  LogDebug("StoreAPE") << "Store APE from shift: " << valshift
645  << "\nStore APE from rotation: " << valrot;
646 }
#define LogDebug(id)
int i
Definition: DBlmapReader.cc:9
virtual void addAlignmentPositionErrorFromRotation(const RotationType &rotation, bool propagateDown)=0
virtual void addAlignmentPositionError(const AlignmentPositionError &ape, bool propagateDown)=0
virtual void setAlignmentPositionError(const AlignmentPositionError &ape, bool propagateDown)=0
Set the alignment position error - if (!propagateDown) do not affect daughters.
AlgebraicVector EulerAngles
Definition: Definitions.h:36
RotationType toMatrix(const EulerAngles &)
Convert rotation angles about x-, y-, z-axes to matrix.
Definition: Utilities.cc:40
std::pair< int, int > AlignmentParameterStore::typeAndLayer ( const Alignable ali) const

Obtain type and layer from Alignable.

Definition at line 389 of file AlignmentParameterStore.cc.

References Alignable::id(), and TrackerAlignableId::typeAndLayerFromDetId().

Referenced by HIPAlignmentAlgorithm::fillRoot().

390 {
391  return TrackerAlignableId().typeAndLayerFromDetId( ali->id() );
392 }
align::ID id() const
Return the ID of Alignable, i.e. DetId of &#39;first&#39; component GeomDet(Unit).
Definition: Alignable.h:180
std::pair< int, int > typeAndLayerFromDetId(const DetId &detId) const
void AlignmentParameterStore::updateParameters ( const CompositeAlignmentParameters aap,
bool  updateCorrelations = true 
)

update parameters

Definition at line 201 of file AlignmentParameterStore.cc.

References AlignmentParameters::cloneFromSelected(), CompositeAlignmentParameters::components(), CompositeAlignmentParameters::covariance(), AlignmentParameters::numSelected(), Parameters::parameters, CompositeAlignmentParameters::parameters(), AlignmentCorrelationsStore::setCorrelations(), and theCorrelationsStore.

Referenced by SingleTrajectoryUpdator::process().

202 {
203 
205  const AlgebraicVector& parameters = aap.parameters();
206  const AlgebraicSymMatrix& covariance = aap.covariance();
207 
208  int ipos = 1; // NOTE: .sub indices start from 1
209 
210  // Loop over alignables
211  for( align::Alignables::const_iterator it=alignables.begin(); it != alignables.end(); ++it )
212  {
213  // Update parameters and local covariance
214  AlignmentParameters* ap = (*it)->alignmentParameters();
215  int nsel = ap->numSelected();
216  AlgebraicVector subvec = parameters.sub( ipos, ipos+nsel-1 );
217  AlgebraicSymMatrix subcov = covariance.sub( ipos, ipos+nsel-1 );
218  AlignmentParameters* apnew = ap->cloneFromSelected( subvec, subcov );
219  (*it)->setAlignmentParameters( apnew );
220 
221  // Now update correlations between detectors
222  if ( updateCorrelations )
223  {
224  int jpos = 1;
225  for( align::Alignables::const_iterator it2 = alignables.begin(); it2 != it; ++it2 )
226  {
227  theCorrelationsStore->setCorrelations( *it, *it2, covariance, ipos-1, jpos-1 );
228  jpos += (*it2)->alignmentParameters()->numSelected();
229  }
230  }
231 
232  ipos+=nsel;
233  }
234 
235 }
dictionary parameters
Definition: Parameters.py:2
const AlgebraicVector & parameters() const
Get alignment parameters.
virtual void setCorrelations(Alignable *ap1, Alignable *ap2, const AlgebraicSymMatrix &cov, int row, int col)
Components components() const
Get vector of alignable components.
const AlgebraicSymMatrix & covariance() const
Get parameter covariance matrix.
int numSelected(void) const
Get number of selected parameters.
CLHEP::HepVector AlgebraicVector
std::vector< Alignable * > Alignables
Definition: Utilities.h:28
AlignmentCorrelationsStore * theCorrelationsStore
CLHEP::HepSymMatrix AlgebraicSymMatrix
virtual AlignmentParameters * cloneFromSelected(const AlgebraicVector &par, const AlgebraicSymMatrix &cov) const =0
const align::Alignables & alignables(void) const
get all alignables
align::Alignables AlignmentParameterStore::validAlignables ( void  ) const

get all alignables with valid parameters

Definition at line 239 of file AlignmentParameterStore.cc.

References LogDebug, query::result, and theAlignables.

240 {
242  for (align::Alignables::const_iterator iali = theAlignables.begin();
243  iali != theAlignables.end(); ++iali)
244  if ( (*iali)->alignmentParameters()->isValid() ) result.push_back(*iali);
245 
246  LogDebug("Alignment") << "@SUB=AlignmentParameterStore::validAlignables"
247  << "Valid alignables: " << result.size()
248  << "out of " << theAlignables.size();
249  return result;
250 }
#define LogDebug(id)
tuple result
Definition: query.py:137
align::Alignables theAlignables
alignables
std::vector< Alignable * > Alignables
Definition: Utilities.h:28

Member Data Documentation

align::Alignables AlignmentParameterStore::theAlignables
private
AlignmentCorrelationsStore* AlignmentParameterStore::theCorrelationsStore
protected