Back to home page

Project CMSSW displayed by LXR

 
 

    


File indexing completed on 2024-04-06 11:56:08

0001 #ifndef Alignment_CommonAlignmentAlgorithm_AlignmentParameterBuilder_h
0002 #define Alignment_CommonAlignmentAlgorithm_AlignmentParameterBuilder_h
0003 
0004 /** \class AlignmentParameterBuilder
0005  *
0006  *  Build Alignment Parameter Structure 
0007  *
0008  *  $Date: 2010/10/26 20:01:51 $
0009  *  $Revision: 1.11 $
0010  *  (last update by $Author: flucke $)
0011  */
0012 
0013 #include "Alignment/CommonAlignment/interface/Utilities.h"
0014 #include "Alignment/CommonAlignmentParametrization/interface/AlignmentParametersFactory.h"
0015 
0016 namespace edm {
0017   class ParameterSet;
0018 }
0019 class AlignableExtras;
0020 class AlignableTracker;
0021 class AlignableMuon;
0022 class AlignmentParameters;
0023 class TrackerTopology;
0024 
0025 class AlignmentParameterBuilder {
0026 public:
0027   /// Constructor from tracker only
0028   explicit AlignmentParameterBuilder(AlignableTracker *alignableTracker, AlignableExtras *alignableExtras);
0029 
0030   /// Constructor from tracker and muon
0031   AlignmentParameterBuilder(AlignableTracker *alignableTracker,
0032                             AlignableMuon *alignableMuon,
0033                             AlignableExtras *alignableExtras);
0034 
0035   /// Constructor adding selections by passing the ParameterSet named 'AlignmentParameterSelector'
0036   /// (expected in pSet) to addSelections(..)
0037   AlignmentParameterBuilder(AlignableTracker *alignableTracker,
0038                             AlignableExtras *alignableExtras,
0039                             const edm::ParameterSet &pSet);
0040 
0041   /// Constructor from tracker and muon, plus selection
0042   AlignmentParameterBuilder(AlignableTracker *alignableTracker,
0043                             AlignableMuon *alignableMuon,
0044                             AlignableExtras *alignableExtras,
0045                             const edm::ParameterSet &pSet);
0046 
0047   /// destructor
0048   virtual ~AlignmentParameterBuilder(){};
0049   /// master initialisation method, PSet must have form as constructor wants it
0050   void addAllSelections(const edm::ParameterSet &pSet);
0051 
0052   /// Add selections of Alignables, using AlignmenParameterSelector::addSelections.
0053   /// For each Alignable, AlignmentParameters of type parType will be attached
0054   /// using the selection of active parameters done in AlignmenParameterSelector,
0055   /// e.g. for RigidBody a selection string '11100' selects the degrees of freedom in
0056   /// (x,y,z), but not (alpha,beta,gamma).
0057   /// Returns number of added selections
0058   unsigned int addSelections(const edm::ParameterSet &pset, AlignmentParametersFactory::ParametersType parType);
0059 
0060   /// Add arbitrary selection of Alignables, return number of higher level Alignables
0061   unsigned int add(const align::Alignables &alignables,
0062                    AlignmentParametersFactory::ParametersType parType,
0063                    const std::vector<bool> &sel);
0064   /// Add a single Alignable, true if it is higher level, false if it is an AlignableDet
0065   bool add(Alignable *alignable, AlignmentParametersFactory::ParametersType parType, const std::vector<bool> &sel);
0066 
0067   /// Get list of alignables for which AlignmentParameters are built
0068   const align::Alignables &alignables() const { return theAlignables; };
0069 
0070   /// Remove n Alignables from list
0071   void fixAlignables(int n);
0072 
0073   /// Alignable tracker
0074   const AlignableTracker *alignableTracker() const;
0075 
0076 private:
0077   /// First remove all spaces (' ') from char selection 'paramSelChar' (coming
0078   /// from ParameterSelector) and then convert the selection to bool (for AlignmentParameters).
0079   /// True if (after removal of spaces) anything else than 0 and 1 is found in vector<char>.
0080   bool decodeParamSel(std::vector<char> &paramSelChar, std::vector<bool> &result) const;
0081   /// add SelectionUserVariables corresponding to fullSel
0082   bool addFullParamSel(AlignmentParameters *aliPar, const std::vector<char> &fullSel) const;
0083 
0084   // data members
0085 
0086   /// Vector of alignables
0087   align::Alignables theAlignables;
0088 
0089   /// Alignable tracker
0090   AlignableTracker *theAlignableTracker;
0091 
0092   /// Alignable muon
0093   AlignableMuon *theAlignableMuon;
0094 
0095   /// extra Alignables
0096   AlignableExtras *theAlignableExtras;
0097 };
0098 
0099 #endif