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 (const 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 TrackerTopology *tTopo) 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 21 of file AlignmentParameterStore.h.

Member Typedef Documentation

Definition at line 27 of file AlignmentParameterStore.h.

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

Definition at line 28 of file AlignmentParameterStore.h.

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

a single alignable parameter of an Alignable

Definition at line 128 of file AlignmentParameterStore.h.

Definition at line 26 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, AlCaHLTBitMon_QueryRunRegistry::string, 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  } else if( cfgStrTypeOfConstraints == "approximate_averaging" ) {
47  edm::LogWarning("Alignment") << "@SUB=AlignmentParameterStore"
48  << "\n\n\n******* WARNING ******************************************\n"
49  << "Using approximate implementation of averaging constraints."
50  << "This is not recommended."
51  << "Consider to use 'hierarchy' constraints:"
52  << " AlignmentProducer.ParameterStore.TypeOfConstraints = cms.string('hierarchy')\n\n\n";
53  } else {
54  edm::LogError("BadArgument") << "@SUB=AlignmentParameterStore"
55  << "Unknown type of hierarchy constraints '" << cfgStrTypeOfConstraints << "'";
56  }
57 }
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 60 of file AlignmentParameterStore.cc.

References theCorrelationsStore.

61 {
62  delete theCorrelationsStore;
63 }
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 363 of file AlignmentParameterStore.cc.

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

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

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

Referenced by selectParameters().

272 {
273  AlignableDetOrUnitPtr alignableDet = _alignableDet;
274  Alignable *mother = alignableDet;
275  while (mother) {
276  if (mother->alignmentParameters()) return mother;
277  mother = mother->mother();
278  }
279 
280  return 0;
281 }
AlignmentParameters * alignmentParameters() const
Get the AlignmentParameters.
Definition: Alignable.h:57
Alignable * mother() const
Return pointer to container alignable (if any)
Definition: Alignable.h:90
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 416 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().

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

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

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

References theAlignables.

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

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

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

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

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

Referenced by attachAlignmentParameters().

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

References attachAlignmentParameters(), and theAlignables.

524 {
526 }
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 579 of file AlignmentParameterStore.cc.

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

Referenced by attachCorrelations().

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

References attachCorrelations(), and theAlignables.

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

References LogDebug, and AlignmentParameters::setUserVariables().

Referenced by HIPAlignmentAlgorithm::collector().

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

References theAlignables.

Referenced by MillePedeAlignmentAlgorithm::terminate().

347 {
348  align::Alignables::const_iterator iali;
349  for ( iali = theAlignables.begin(); iali != theAlignables.end(); ++iali)
350  (*iali)->cacheTransformation();
351 }
align::Alignables theAlignables
alignables
AlignmentCorrelationsStore* AlignmentParameterStore::correlationsStore ( void  ) const
inline

get full correlation map

Definition at line 60 of file AlignmentParameterStore.h.

References theCorrelationsStore.

60 { 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 669 of file AlignmentParameterStore.cc.

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

Referenced by PedeSteerer::hierarchyConstraint().

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

get number of correlations between alignables

Definition at line 63 of file AlignmentParameterStore.h.

References AlignmentCorrelationsStore::size(), and theCorrelationsStore.

63 { 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 57 of file AlignmentParameterStore.h.

References theAlignables.

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

reset parameters, correlations, user variables

Definition at line 306 of file AlignmentParameterStore.cc.

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

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

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

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

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

References theAlignables.

Referenced by MillePedeAlignmentAlgorithm::setParametersForRunRange().

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

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

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

select parameters

Definition at line 81 of file AlignmentParameterStore.cc.

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

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

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

Obtain type and layer from Alignable.

Definition at line 408 of file AlignmentParameterStore.cc.

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

Referenced by HIPAlignmentAlgorithm::fillRoot().

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

update parameters

Definition at line 219 of file AlignmentParameterStore.cc.

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

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

References LogDebug, mps_fire::result, and theAlignables.

258 {
260  for (align::Alignables::const_iterator iali = theAlignables.begin();
261  iali != theAlignables.end(); ++iali)
262  if ( (*iali)->alignmentParameters()->isValid() ) result.push_back(*iali);
263 
264  LogDebug("Alignment") << "@SUB=AlignmentParameterStore::validAlignables"
265  << "Valid alignables: " << result.size()
266  << "out of " << theAlignables.size();
267  return result;
268 }
#define LogDebug(id)
tuple result
Definition: mps_fire.py:95
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 163 of file AlignmentParameterStore.h.

Referenced by AlignmentParameterStore().