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 Types | 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 Types

enum  TypeOfConstraints { NONE, HIERARCHY_CONSTRAINTS, APPROX_AVERAGING_CONSTRAINTS }
 

Private Attributes

align::Alignables theAlignables
 alignables More...
 
TypeOfConstraints theTypeOfConstraints
 type of constraints 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.

Member Enumeration Documentation

Constructor & Destructor Documentation

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

constructor

Definition at line 26 of file AlignmentParameterStore.cc.

References APPROX_AVERAGING_CONSTRAINTS, edm::ParameterSet::getParameter(), edm::ParameterSet::getUntrackedParameter(), HIERARCHY_CONSTRAINTS, NONE, theAlignables, theCorrelationsStore, and theTypeOfConstraints.

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 
40  // set hierarchy vs averaging constraints
42  const std::string cfgStrTypeOfConstraints(config.getParameter<std::string>("TypeOfConstraints"));
43  if( cfgStrTypeOfConstraints == "hierarchy" ) {
45  edm::LogWarning("Alignment") << "@SUB=AlignmentParameterStore"
46  << "\n\n\n******* WARNING ******************************************\n"
47  << "Using hierarchy constraints that have a not-understood bug.\n"
48  << "It is strongly recommended to use averaging constraints for\n"
49  << "the time being!\n\n\n";
50 
51  } else if( cfgStrTypeOfConstraints == "approximate_averaging" ) {
53  edm::LogWarning("Alignment") << "@SUB=AlignmentParameterStore"
54  << "Using approximate implementation of averaging constraints";
55  } else {
56  edm::LogError("BadArgument") << "@SUB=AlignmentParameterStore"
57  << "Unknown type of hierarchy constraints '" << cfgStrTypeOfConstraints << "'";
58  }
59 }
T getParameter(std::string const &) const
T getUntrackedParameter(std::string const &, T const &) const
TypeOfConstraints theTypeOfConstraints
type of constraints
align::Alignables theAlignables
alignables
AlignmentCorrelationsStore * theCorrelationsStore
AlignmentParameterStore::~AlignmentParameterStore ( )
virtual

destructor

Definition at line 62 of file AlignmentParameterStore.cc.

References theCorrelationsStore.

63 {
64  delete theCorrelationsStore;
65 }
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 364 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().

365 {
366 
367  unsigned int nAlignables = theAlignables.size();
368 
369  for (unsigned int i = 0; i < nAlignables; ++i)
370  {
371  Alignable* ali = theAlignables[i];
372 
374  dynamic_cast<RigidBodyAlignmentParameters*>( ali->alignmentParameters() );
375 
376  if ( !ap )
377  throw cms::Exception("BadAlignable")
378  << "acquireRelativeParameters: "
379  << "provided alignable does not have rigid body alignment parameters";
380 
381  AlgebraicVector par( ap->size(),0 );
382  AlgebraicSymMatrix cov( ap->size(), 0 );
383 
384  // Get displacement and transform global->local
385  align::LocalVector dloc = ali->surface().toLocal( ali->displacement() );
386  par[0]=dloc.x();
387  par[1]=dloc.y();
388  par[2]=dloc.z();
389 
390  // Transform to local euler angles
391  align::EulerAngles euloc = align::toAngles( ali->surface().toLocal( ali->rotation() ) );
392  par[3]=euloc(1);
393  par[4]=euloc(2);
394  par[5]=euloc(3);
395 
396  // Clone parameters
397  RigidBodyAlignmentParameters* apnew = ap->clone(par,cov);
398 
399  ali->setAlignmentParameters(apnew);
400  }
401 }
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 273 of file AlignmentParameterStore.cc.

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

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

274 {
275  Alignable *mother = alignableDet;
276  while (mother) {
277  if (mother->alignmentParameters()) return mother;
278  mother = mother->mother();
279  }
280 
281  return 0;
282 }
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 417 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().

420 {
421  unsigned int nappl=0;
422  ierr=0;
423 
424  // Iterate over list of alignables
425  for (align::Alignables::const_iterator iali = alivec.begin(); iali != alivec.end(); ++iali) {
426  Alignable* ali = *iali;
427  align::ID id = ali->id();
428  align::StructureType typeId = ali->alignableObjectId();
429 
430  // Find corresponding entry in AlignablePositions
431  bool found=false;
432  for (AlignablePositions::const_iterator ipos = newpos.begin(); ipos != newpos.end(); ++ipos) {
433  if (id == ipos->id() && typeId == ipos->objId()) {
434  if (found) {
435  edm::LogError("DuplicatePosition")
436  << "New positions for alignable found more than once!";
437  } else {
438  // New position/rotation
439  const align::PositionType& pnew = ipos->pos();
440  const align::RotationType& rnew = ipos->rot();
441  // Current position / rotation
442  const align::PositionType& pold = ali->globalPosition();
443  const align::RotationType& rold = ali->globalRotation();
444 
445  // shift needed to move from current to new position
446  align::GlobalVector posDiff = pnew - pold;
447  align::RotationType rotDiff = rold.multiplyInverse(rnew);
448  align::rectify(rotDiff); // correct for rounding errors
449  ali->move( posDiff );
450  ali->rotateInGlobalFrame( rotDiff );
451  LogDebug("NewPosition") << "moving by:" << posDiff;
452  LogDebug("NewRotation") << "rotating by:\n" << rotDiff;
453 
454  // add position error
455  // AlignmentPositionError ape(shift.x(),shift.y(),shift.z());
456  // (*iali)->addAlignmentPositionError(ape);
457  // (*iali)->addAlignmentPositionErrorFromRotation(rot);
458 
459  found=true;
460  ++nappl;
461  }
462  }
463  }
464  }
465 
466  if ( nappl< newpos.size() )
467  edm::LogError("Mismatch") << "Applied only " << nappl << " new positions"
468  << " out of " << newpos.size();
469 
470  LogDebug("NewPositions") << "Applied new positions for " << nappl
471  << " out of " << alivec.size() <<" alignables.";
472 
473 }
#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 478 of file AlignmentParameterStore.cc.

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

479 {
480 
481  ierr=0;
482  unsigned int nappl=0;
483  unsigned int nAlignables = alivec.size();
484 
485  for (unsigned int i = 0; i < nAlignables; ++i) {
486  Alignable* ali = alivec[i];
487 
488  align::ID id = ali->id();
489  align::StructureType typeId = ali->alignableObjectId();
490 
491  // Find corresponding entry in AlignableShifts
492  bool found = false;
493  for (AlignableShifts::const_iterator ipos = shifts.begin(); ipos != shifts.end(); ++ipos) {
494  if (id == ipos->id() && typeId == ipos->objId()) {
495  if (found) {
496  edm::LogError("DuplicatePosition")
497  << "New positions for alignable found more than once!";
498  } else {
499  ali->move( ipos->pos() );
500  ali->rotateInGlobalFrame( ipos->rot() );
501 
502  // Add position error
503  //AlignmentPositionError ape(pnew.x(),pnew.y(),pnew.z());
504  //ali->addAlignmentPositionError(ape);
505  //ali->addAlignmentPositionErrorFromRotation(rnew);
506 
507  found=true;
508  ++nappl;
509  }
510  }
511  }
512  }
513 
514  if ( nappl < shifts.size() )
515  edm::LogError("Mismatch") << "Applied only " << nappl << " new positions"
516  << " out of " << shifts.size();
517 
518  LogDebug("NewPositions") << "Applied new positions for " << nappl << " alignables.";
519 }
#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 285 of file AlignmentParameterStore.cc.

References theAlignables.

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

286 {
287  align::Alignables::const_iterator iali;
288  for ( iali = theAlignables.begin(); iali != theAlignables.end(); ++iali)
289  applyParameters( *iali );
290 }
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 294 of file AlignmentParameterStore.cc.

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

295 {
296 
297  AlignmentParameters *pars = (alignable ? alignable->alignmentParameters() : 0);
298  if (!pars) {
299  throw cms::Exception("BadAlignable")
300  << "applyParameters: provided alignable does not have alignment parameters";
301  }
302  pars->apply();
303 }
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 532 of file AlignmentParameterStore.cc.

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

Referenced by attachAlignmentParameters().

534 {
535  int ipass = 0;
536  int ifail = 0;
537  ierr = 0;
538 
539  // Iterate over alignables
540  for ( align::Alignables::const_iterator iali = alivec.begin(); iali != alivec.end(); ++iali )
541  {
542  // Iterate over Parameters
543  bool found=false;
544  for ( Parameters::const_iterator ipar = parvec.begin(); ipar != parvec.end(); ++ipar)
545  {
546  // Get new alignment parameters
547  AlignmentParameters* ap = *ipar;
548 
549  // Check if parameters belong to alignable
550  if ( ap->alignable() == (*iali) )
551  {
552  if (!found)
553  {
554  (*iali)->setAlignmentParameters(ap);
555  ++ipass;
556  found=true;
557  }
558  else edm::LogError("Alignment") << "@SUB=AlignmentParameterStore::attachAlignmentParameters"
559  << "More than one parameters for Alignable.";
560  }
561  }
562  if (!found) ++ifail;
563  }
564  if (ifail>0) ierr=-1;
565 
566  LogDebug("attachAlignmentParameters") << " Parameters, Alignables: " << parvec.size() << ","
567  << alivec.size() << "\n pass,fail: " << ipass << ","<< ifail;
568 }
#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 524 of file AlignmentParameterStore.cc.

References attachAlignmentParameters(), and theAlignables.

525 {
527 }
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 580 of file AlignmentParameterStore.cc.

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

Referenced by attachCorrelations().

583 {
584  ierr=0;
585  int icount=0;
586 
587  // Iterate over correlations
588  for ( Correlations::const_iterator icor = cormap.begin(); icor!=cormap.end(); ++icor )
589  {
590  AlgebraicMatrix mat=(*icor).second;
591  Alignable* ali1 = (*icor).first.first;
592  Alignable* ali2 = (*icor).first.second;
593 
594  // Check if alignables exist
595  if ( find( alivec.begin(), alivec.end(), ali1 ) != alivec.end() &&
596  find( alivec.begin(), alivec.end(), ali2 ) != alivec.end() )
597  {
598  // Check if correlations already existing between these alignables
599  if ( !theCorrelationsStore->correlationsAvailable(ali1,ali2) || (overwrite) )
600  {
601  theCorrelationsStore->setCorrelations(ali1,ali2,mat);
602  ++icount;
603  }
604  else edm::LogInfo("AlreadyExists") << "Correlation existing and not overwritten";
605  }
606  else edm::LogInfo("IgnoreCorrelation") << "Ignoring correlation with no alignables!";
607  }
608 
609  LogDebug( "attachCorrelations" ) << " Alignables,Correlations: " << alivec.size() <<","<< cormap.size()
610  << "\n applied: " << icount ;
611 
612 }
#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 572 of file AlignmentParameterStore.cc.

References attachCorrelations(), and theAlignables.

574 {
575  attachCorrelations( theAlignables, cormap, overwrite, ierr );
576 }
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 617 of file AlignmentParameterStore.cc.

References LogDebug, and AlignmentParameters::setUserVariables().

Referenced by HIPAlignmentAlgorithm::collector().

619 {
620  ierr=0;
621 
622  LogDebug("DumpArguments") << "size of alivec: " << alivec.size()
623  << "\nsize of uvarvec: " << uvarvec.size();
624 
625  std::vector<AlignmentUserVariables*>::const_iterator iuvar=uvarvec.begin();
626 
627  for ( align::Alignables::const_iterator iali=alivec.begin(); iali!=alivec.end(); ++iali, ++iuvar )
628  {
629  AlignmentParameters* ap = (*iali)->alignmentParameters();
630  AlignmentUserVariables* uvarnew = (*iuvar);
631  ap->setUserVariables(uvarnew);
632  }
633 }
#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 347 of file AlignmentParameterStore.cc.

References theAlignables.

Referenced by MillePedeAlignmentAlgorithm::terminate().

348 {
349  align::Alignables::const_iterator iali;
350  for ( iali = theAlignables.begin(); iali != theAlignables.end(); ++iali)
351  (*iali)->cacheTransformation();
352 }
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 670 of file AlignmentParameterStore.cc.

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

Referenced by PedeSteerer::hierarchyConstraint().

674 {
675  // Weak point if all = false:
676  // Ignores constraints between non-subsequent levels in case the parameter is not considered in
677  // the intermediate level, e.g. global z for dets and layers is aligned, but not for rods!
678  if (!ali || !ali->alignmentParameters()) return false;
679 
680  const std::vector<bool> &aliSel= ali->alignmentParameters()->selector();
681  paramIdsVecOut.clear();
682  factorsVecOut.clear();
683 
684  bool firstComp = true;
685  for (align::Alignables::const_iterator iComp = aliComps.begin(), iCompE = aliComps.end();
686  iComp != iCompE; ++iComp) {
687 
688  const ParametersToParametersDerivatives p2pDerivs(**iComp, *ali);
689  if (!p2pDerivs.isOK()) {
690  throw cms::Exception("BadConfig")
691  << "AlignmentParameterStore::hierarchyConstraints"
692  << " Bad match of types of AlignmentParameters classes.\n";
693  return false;
694  }
695  const std::vector<bool> &aliCompSel = (*iComp)->alignmentParameters()->selector();
696  for (unsigned int iParMast = 0, iParMastUsed = 0; iParMast < aliSel.size(); ++iParMast) {
697  if (!all && !aliSel[iParMast]) continue;// no higher level parameter & constraint deselected
698  if (firstComp) { // fill output with empty arrays
699  paramIdsVecOut.push_back(std::vector<ParameterId>());
700  factorsVecOut.push_back(std::vector<double>());
701  }
702  for (unsigned int iParComp = 0; iParComp < aliCompSel.size(); ++iParComp) {
703  if (aliCompSel[iParComp]) {
704  double factor = 0.;
706  // hierachy constraints
707  factor = p2pDerivs(iParMast, iParComp);
709  // CHK poor mans averaging constraints
710  factor = p2pDerivs(iParMast, iParComp);
711  if (iParMast < 3 && (iParComp % 9) >= 3) factor = 0.;
712  }
713  if (fabs(factor) > epsilon) {
714  paramIdsVecOut[iParMastUsed].push_back(ParameterId(*iComp, iParComp));
715  factorsVecOut[iParMastUsed].push_back(factor);
716  }
717  }
718  }
719  ++iParMastUsed;
720  }
721  firstComp = false;
722  } // end loop on components
723 
724  return true;
725 }
std::pair< Alignable *, unsigned int > ParameterId
a single alignable parameter of an Alignable
TypeOfConstraints theTypeOfConstraints
type of constraints
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 307 of file AlignmentParameterStore.cc.

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

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

308 {
309  // Erase contents of correlation map
311 
312  // Iterate over alignables in the store and reset parameters
313  align::Alignables::const_iterator iali;
314  for ( iali = theAlignables.begin(); iali != theAlignables.end(); ++iali )
315  resetParameters( *iali );
316 }
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 320 of file AlignmentParameterStore.cc.

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

321 {
322  if ( ali )
323  {
324  // Get alignment parameters for this alignable
326  if ( ap )
327  {
328  int npar=ap->numSelected();
329 
330  AlgebraicVector par(npar,0);
331  AlgebraicSymMatrix cov(npar,0);
332  AlignmentParameters* apnew = ap->cloneFromSelected(par,cov);
333  ali->setAlignmentParameters(apnew);
334  apnew->setValid(false);
335  }
336  else
337  edm::LogError("BadArgument") << "@SUB=AlignmentParameterStore::resetParameters"
338  << "alignable has no alignment parameter";
339  }
340  else
341  edm::LogError("BadArgument") << "@SUB=AlignmentParameterStore::resetParameters"
342  << "argument is NULL";
343 }
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 356 of file AlignmentParameterStore.cc.

References theAlignables.

Referenced by MillePedeAlignmentAlgorithm::setParametersForRunRange().

357 {
358  align::Alignables::const_iterator iali;
359  for ( iali = theAlignables.begin(); iali != theAlignables.end(); ++iali)
360  (*iali)->restoreCachedTransformation();
361 }
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 69 of file AlignmentParameterStore.cc.

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

70 {
71  std::vector<AlignableDetOrUnitPtr> detOrUnits;
72  detOrUnits.reserve(alignabledets.size());
73 
74  std::vector<AlignableDet*>::const_iterator it, iEnd;
75  for ( it = alignabledets.begin(), iEnd = alignabledets.end(); it != iEnd; ++it)
76  detOrUnits.push_back(AlignableDetOrUnitPtr(*it));
77 
78  return this->selectParameters(detOrUnits);
79 }
CompositeAlignmentParameters selectParameters(const std::vector< AlignableDet * > &alignabledets) const
CompositeAlignmentParameters AlignmentParameterStore::selectParameters ( const std::vector< AlignableDetOrUnitPtr > &  alignabledets) const

select parameters

Definition at line 83 of file AlignmentParameterStore.cc.

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

84 {
85 
87  std::map <AlignableDetOrUnitPtr,Alignable*> alidettoalimap;
88  std::map <Alignable*,int> aliposmap;
89  std::map <Alignable*,int> alilenmap;
90  int nparam=0;
91 
92  // iterate over AlignableDet's
93  for( std::vector<AlignableDetOrUnitPtr>::const_iterator iad = alignabledets.begin();
94  iad != alignabledets.end(); ++iad )
95  {
96  Alignable* ali = alignableFromAlignableDet( *iad );
97  if ( ali )
98  {
99  alidettoalimap[ *iad ] = ali; // Add to map
100  // Check if Alignable already there, insert into vector if not
101  if ( find(alignables.begin(),alignables.end(),ali) == alignables.end() )
102  {
103  alignables.push_back(ali);
105  nparam += ap->numSelected();
106  }
107  }
108  }
109 
110  AlgebraicVector* selpar = new AlgebraicVector( nparam, 0 );
111  AlgebraicSymMatrix* selcov = new AlgebraicSymMatrix( nparam, 0 );
112 
113  // Fill in parameters and corresponding covariance matricess
114  int ipos = 1; // NOTE: .sub indices start from 1
115  align::Alignables::const_iterator it1;
116  for( it1 = alignables.begin(); it1 != alignables.end(); ++it1 )
117  {
118  AlignmentParameters* ap = (*it1)->alignmentParameters();
119  selpar->sub( ipos, ap->selectedParameters() );
120  selcov->sub( ipos, ap->selectedCovariance() );
121  int npar = ap->numSelected();
122  aliposmap[*it1]=ipos;
123  alilenmap[*it1]=npar;
124  ipos +=npar;
125  }
126 
127  // Fill in the correlations. Has to be an extra loop, because the
128  // AlignmentExtendedCorrelationsStore (if used) needs the
129  // alignables' covariance matrices already present.
130  ipos = 1;
131  for( it1 = alignables.begin(); it1 != alignables.end(); ++it1 )
132  {
133  int jpos=1;
134 
135  // Look for correlations between alignables
136  align::Alignables::const_iterator it2;
137  for( it2 = alignables.begin(); it2 != it1; ++it2 )
138  {
139  theCorrelationsStore->correlations( *it1, *it2, *selcov, ipos-1, jpos-1 );
140  jpos += (*it2)->alignmentParameters()->numSelected();
141  }
142 
143  ipos += (*it1)->alignmentParameters()->numSelected();
144  }
145 
147  CompositeAlignmentParameters aap( data, alignables, alidettoalimap, aliposmap, alilenmap );
148 
149  return aap;
150 }
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 637 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().

639 {
640  unsigned int nAlignables = alivec.size();
641 
642  for (unsigned int i = 0; i < nAlignables; ++i)
643  {
644  Alignable* ali = alivec[i];
645 
646  // First reset APE
647  AlignmentPositionError nulApe(0,0,0);
648  ali->setAlignmentPositionError(nulApe, true);
649 
650  // Set APE from displacement
651  AlignmentPositionError ape(valshift,valshift,valshift);
652  if ( valshift > 0. ) ali->addAlignmentPositionError(ape, true);
653  else ali->setAlignmentPositionError(ape, true);
654  // GF: Resetting and setting as above does not really make sense to me,
655  // and adding to zero or setting is the same! I'd just do
656  //ali->setAlignmentPositionError(AlignmentPositionError ape(valshift,valshift,valshift),true);
657 
658  // Set APE from rotation
660  r(1)=valrot; r(2)=valrot; r(3)=valrot;
662  }
663 
664  LogDebug("StoreAPE") << "Store APE from shift: " << valshift
665  << "\nStore APE from rotation: " << valrot;
666 }
#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 409 of file AlignmentParameterStore.cc.

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

Referenced by HIPAlignmentAlgorithm::fillRoot().

410 {
411  return TrackerAlignableId().typeAndLayerFromDetId( ali->id() );
412 }
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 221 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().

222 {
223 
225  const AlgebraicVector& parameters = aap.parameters();
226  const AlgebraicSymMatrix& covariance = aap.covariance();
227 
228  int ipos = 1; // NOTE: .sub indices start from 1
229 
230  // Loop over alignables
231  for( align::Alignables::const_iterator it=alignables.begin(); it != alignables.end(); ++it )
232  {
233  // Update parameters and local covariance
234  AlignmentParameters* ap = (*it)->alignmentParameters();
235  int nsel = ap->numSelected();
236  AlgebraicVector subvec = parameters.sub( ipos, ipos+nsel-1 );
237  AlgebraicSymMatrix subcov = covariance.sub( ipos, ipos+nsel-1 );
238  AlignmentParameters* apnew = ap->cloneFromSelected( subvec, subcov );
239  (*it)->setAlignmentParameters( apnew );
240 
241  // Now update correlations between detectors
242  if ( updateCorrelations )
243  {
244  int jpos = 1;
245  for( align::Alignables::const_iterator it2 = alignables.begin(); it2 != it; ++it2 )
246  {
247  theCorrelationsStore->setCorrelations( *it, *it2, covariance, ipos-1, jpos-1 );
248  jpos += (*it2)->alignmentParameters()->numSelected();
249  }
250  }
251 
252  ipos+=nsel;
253  }
254 
255 }
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 259 of file AlignmentParameterStore.cc.

References LogDebug, query::result, and theAlignables.

260 {
262  for (align::Alignables::const_iterator iali = theAlignables.begin();
263  iali != theAlignables.end(); ++iali)
264  if ( (*iali)->alignmentParameters()->isValid() ) result.push_back(*iali);
265 
266  LogDebug("Alignment") << "@SUB=AlignmentParameterStore::validAlignables"
267  << "Valid alignables: " << result.size()
268  << "out of " << theAlignables.size();
269  return result;
270 }
#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
TypeOfConstraints AlignmentParameterStore::theTypeOfConstraints
private

type of constraints

Definition at line 162 of file AlignmentParameterStore.h.

Referenced by AlignmentParameterStore().