CMS 3D CMS Logo

MillePedeAlignmentAlgorithm.h

Go to the documentation of this file.
00001 #ifndef Alignment_MillePedeAlignmentAlgorithm_MillePedeAlignmentAlgorithm_h
00002 #define Alignment_MillePedeAlignmentAlgorithm_MillePedeAlignmentAlgorithm_h
00003 
00013 
00014 
00015 #include "Alignment/CommonAlignmentAlgorithm/interface/AlignmentAlgorithmBase.h"
00016 
00017 #include "FWCore/ParameterSet/interface/ParameterSet.h"
00018 
00019 #include "TrackingTools/TrajectoryState/interface/TrajectoryStateOnSurface.h"
00020 #include "TrackingTools/TransientTrackingRecHit/interface/TransientTrackingRecHit.h"
00021 
00022 #include "Alignment/ReferenceTrajectories/interface/ReferenceTrajectoryBase.h"
00023 
00024 
00025 #include <vector>
00026 #include <string>
00027 
00028 #include <TMatrixDSym.h>
00029 #include <TMatrixD.h>
00030 #include <TMatrixF.h>
00031 
00032 class Alignable;
00033 class AlignableTracker;
00034 class AlignableMuon;
00035 
00036 class AlignmentParameters;
00037 class AlignableNavigator;
00038 class AlignableDetOrUnitPtr;
00039 class AlignmentUserVariables;
00040 
00041 class AlignmentParameterStore;
00042 
00043 class MillePedeMonitor;
00044 class PedeSteerer;
00045 class PedeLabeler;
00046 class Mille;
00047 class TrajectoryFactoryBase;
00048 
00049 class MillePedeAlignmentAlgorithm : public AlignmentAlgorithmBase
00050 {
00051  public:
00053   MillePedeAlignmentAlgorithm(const edm::ParameterSet &cfg);
00054 
00056   virtual ~MillePedeAlignmentAlgorithm();
00057 
00059   virtual void initialize(const edm::EventSetup &setup, AlignableTracker *tracker,
00060                           AlignableMuon *muon, AlignmentParameterStore *store);
00061 
00063   virtual void terminate();
00064 
00066   virtual void run(const edm::EventSetup &setup, const ConstTrajTrackPairCollection &tracks);
00067 
00068  private:
00069   enum MeasurementDirection {kLocalX = 0, kLocalY};
00070 
00074   int addMeasurementData(const ReferenceTrajectoryBase::ReferenceTrajectoryPtr &refTrajPtr,
00075                            unsigned int iHit, const TrajectoryStateOnSurface &trackTsos,
00076                            AlignmentParameters *&params);
00077 
00078  // adds data from reference trajectory from a specific Hit
00079   void addRefTrackData2D(const ReferenceTrajectoryBase::ReferenceTrajectoryPtr &refTrajPtr, unsigned int iTrajHit,TMatrixDSym &aHitCovarianceM, TMatrixF &aHitResidualsM, TMatrixF &aLocalDerivativesM);
00080 
00081 
00083   bool globalDerivativesHierarchy(const TrajectoryStateOnSurface &tsos,
00084                                   Alignable *ali, const AlignableDetOrUnitPtr &alidet,
00085                                   std::vector<float> &globalDerivativesX,
00086                                   std::vector<float> &globalDerivativesY,
00087                                   std::vector<int> &globalLabels,
00088                                   AlignmentParameters *&lowestParams) const;
00089 
00090  // calls Mille and diagonalises the covariance matrx of a Hit if neccesary
00091   int callMille2D ( const ReferenceTrajectoryBase::ReferenceTrajectoryPtr &refTrajPtr,
00092                     unsigned int iTrajHit, const std::vector<int> &globalLabels,
00093                     const std::vector<float> &globalDerivativesx,
00094                     const std::vector<float> &globalDerivativesy);
00095   void  diagonalize(TMatrixDSym &aHitCovarianceM, TMatrixF &aLocalDerivativesM,
00096                     TMatrixF &aHitResidualsM,TMatrixF &theGlobalDerivativesM) const;
00097   // deals with the non matrix format of theFloatBufferX ...
00098   void makeGlobDerivMatrix(const std::vector<float> &globalDerivativesx, const std::vector<float> &globalDerivativesy,TMatrixF &aGlobalDerivativesM);
00099 
00100 //   void callMille(const ReferenceTrajectoryBase::ReferenceTrajectoryPtr &refTrajPtr, 
00101 //               unsigned int iTrajHit, MeasurementDirection xOrY,
00102 //               const std::vector<float> &globalDerivatives, const std::vector<int> &globalLabels);
00104   bool is2D(const TransientTrackingRecHit::ConstRecHitPointer &recHit) const;
00105 
00107   bool readFromPede(const std::string &psetName, bool setUserVars);
00108   bool areEmptyParams(const std::vector<Alignable*> &alignables) const;
00109   unsigned int doIO(int loop) const;
00111   void buildUserVariables(const std::vector<Alignable*> &alignables) const;
00112 
00113   enum EModeBit {myMilleBit = 1 << 0, myPedeRunBit = 1 << 1, myPedeSteerBit = 1 << 2,
00114                  myPedeReadBit = 1 << 3};
00115   unsigned int decodeMode(const std::string &mode) const;
00116   bool isMode(unsigned int testMode) const {return (theMode & testMode);}
00117   bool addHitStatistics(int fromLoop, const std::string &outFile,
00118                         const std::vector<std::string> &inFiles) const;
00119   bool addHits(const std::vector<Alignable*> &alis,
00120                const std::vector<AlignmentUserVariables*> &mpVars) const;
00121   bool orderedTsos(const Trajectory *traj, 
00122                    std::vector<TrajectoryStateOnSurface> &trackTsos) const;
00123   edm::ParameterSet         theConfig;
00124   unsigned int              theMode;
00125   std::string               theDir; 
00126   AlignmentParameterStore  *theAlignmentParameterStore;
00127   std::vector<Alignable*>   theAlignables;
00128   AlignableNavigator       *theAlignableNavigator;
00129   MillePedeMonitor         *theMonitor;
00130   Mille                    *theMille;
00131   const PedeLabeler        *thePedeLabels;
00132   PedeSteerer              *thePedeSteer;
00133   TrajectoryFactoryBase    *theTrajectoryFactory;
00134   int                       theMinNumHits;
00135   double                    theMaximalCor2D; 
00136 
00137   bool                      theUseTrackTsos;
00138 
00139   std::vector<float>        theFloatBufferX;
00140   std::vector<float>        theFloatBufferY;
00141   std::vector<int>          theIntBuffer;
00142 };
00143 
00144 #endif

Generated on Tue Jun 9 17:24:10 2009 for CMSSW by  doxygen 1.5.4