CMS 3D CMS Logo

/data/doxygen/doxygen-1.7.3/gen/CMSSW_4_2_8/src/Alignment/MillePedeAlignmentAlgorithm/interface/MillePedeAlignmentAlgorithm.h

Go to the documentation of this file.
00001 #ifndef Alignment_MillePedeAlignmentAlgorithm_MillePedeAlignmentAlgorithm_h
00002 #define Alignment_MillePedeAlignmentAlgorithm_MillePedeAlignmentAlgorithm_h
00003 
00013 
00014 #include "Alignment/CommonAlignmentAlgorithm/interface/AlignmentAlgorithmBase.h"
00015 
00016 #include "FWCore/ParameterSet/interface/ParameterSet.h"
00017 
00018 #include "TrackingTools/TrajectoryState/interface/TrajectoryStateOnSurface.h"
00019 #include "TrackingTools/TransientTrackingRecHit/interface/TransientTrackingRecHit.h"
00020 
00021 #include "Alignment/ReferenceTrajectories/interface/ReferenceTrajectoryBase.h"
00022 
00023 #include <vector>
00024 #include <string>
00025 
00026 #include <TMatrixDSym.h>
00027 #include <TMatrixD.h>
00028 #include <TMatrixF.h>
00029 
00030 class Alignable;
00031 class AlignableTracker;
00032 class AlignableMuon;
00033 class AlignableExtras;
00034 
00035 class AlignmentParameters;
00036 class AlignableNavigator;
00037 class AlignableDetOrUnitPtr;
00038 class AlignmentUserVariables;
00039 
00040 class AlignmentParameterStore;
00041 
00042 class MillePedeMonitor;
00043 class PedeSteerer;
00044 class PedeLabelerBase;
00045 class Mille;
00046 class TrajectoryFactoryBase;
00047 
00048 // already from base class - and forward declaration does not work since typedef!
00049 /* class TkFittedLasBeamCollection; */
00050 /* class TsosVectorCollection; */
00051 
00052 class MillePedeAlignmentAlgorithm : public AlignmentAlgorithmBase
00053 {
00054  public:
00056   MillePedeAlignmentAlgorithm(const edm::ParameterSet &cfg);
00057 
00059   virtual ~MillePedeAlignmentAlgorithm();
00060 
00062   virtual void initialize(const edm::EventSetup &setup,
00063                           AlignableTracker *tracker, AlignableMuon *muon, AlignableExtras *extras,
00064                           AlignmentParameterStore *store);
00065 
00067   virtual void terminate();
00068 
00070   virtual void run(const edm::EventSetup &setup, const EventInfo &eventInfo);
00071 
00073   virtual void endRun(const EventInfo &eventInfo, const EndRunInfo &runInfo,
00074                       const edm::EventSetup &setup);
00075 
00076 /*   virtual void beginLuminosityBlock(const edm::EventSetup &setup) {} */
00077 /*   virtual void endLuminosityBlock(const edm::EventSetup &setup) {} */
00078 
00081   virtual void setParametersForRunRange(const RunRange &runrange);
00082 
00083  private:
00084   enum MeasurementDirection {kLocalX = 0, kLocalY};
00085 
00087   std::pair<unsigned int, unsigned int>
00088     addReferenceTrajectory(const EventInfo &eventInfo, 
00089                            const ReferenceTrajectoryBase::ReferenceTrajectoryPtr &refTrajPtr);
00090 
00094   int addMeasurementData(const EventInfo &eventInfo, 
00095                          const ReferenceTrajectoryBase::ReferenceTrajectoryPtr &refTrajPtr,
00096                          unsigned int iHit, AlignmentParameters *&params);
00097 
00099   void addRefTrackData2D(const ReferenceTrajectoryBase::ReferenceTrajectoryPtr &refTrajPtr,
00100                          unsigned int iTrajHit, TMatrixDSym &aHitCovarianceM,
00101                          TMatrixF &aHitResidualsM, TMatrixF &aLocalDerivativesM);
00102   
00104   void addMsMeas(const ReferenceTrajectoryBase::ReferenceTrajectoryPtr &refTrajPtr,
00105                  unsigned int iMsMeas);
00106                            
00108   void addRefTrackMsMeas1D(const ReferenceTrajectoryBase::ReferenceTrajectoryPtr &refTrajPtr,
00109                            unsigned int iTrajHit,TMatrixDSym &aHitCovarianceM,
00110                            TMatrixF &aHitResidualsM, TMatrixF &aLocalDerivativesM);
00111   
00113   bool globalDerivativesHierarchy(const EventInfo &eventInfo, 
00114                                   const TrajectoryStateOnSurface &tsos,
00115                                   Alignable *ali, const AlignableDetOrUnitPtr &alidet,
00116                                   std::vector<float> &globalDerivativesX,
00117                                   std::vector<float> &globalDerivativesY,
00118                                   std::vector<int> &globalLabels,
00119                                   AlignmentParameters *&lowestParams) const;
00120 
00122   int callMille(const ReferenceTrajectoryBase::ReferenceTrajectoryPtr &refTrajPtr,
00123                 unsigned int iTrajHit, const std::vector<int> &globalLabels,
00124                 const std::vector<float> &globalDerivativesX,
00125                 const std::vector<float> &globalDerivativesY);
00126 
00128   int callMille1D(const ReferenceTrajectoryBase::ReferenceTrajectoryPtr &refTrajPtr,
00129                   unsigned int iTrajHit, const std::vector<int> &globalLabels,
00130                   const std::vector<float> &globalDerivativesX);
00131 
00135   int callMille2D ( const ReferenceTrajectoryBase::ReferenceTrajectoryPtr &refTrajPtr,
00136                     unsigned int iTrajHit, const std::vector<int> &globalLabels,
00137                     const std::vector<float> &globalDerivativesx,
00138                     const std::vector<float> &globalDerivativesy);
00139   void  diagonalize(TMatrixDSym &aHitCovarianceM, TMatrixF &aLocalDerivativesM,
00140                     TMatrixF &aHitResidualsM,TMatrixF &theGlobalDerivativesM) const;
00141   // deals with the non matrix format of theFloatBufferX ...
00142   void makeGlobDerivMatrix(const std::vector<float> &globalDerivativesx,
00143                            const std::vector<float> &globalDerivativesy,
00144                            TMatrixF &aGlobalDerivativesM);
00145 
00146 //   void callMille(const ReferenceTrajectoryBase::ReferenceTrajectoryPtr &refTrajPtr, 
00147 //               unsigned int iTrajHit, MeasurementDirection xOrY,
00148 //               const std::vector<float> &globalDerivatives, const std::vector<int> &globalLabels);
00150   bool is2D(const TransientTrackingRecHit::ConstRecHitPointer &recHit) const;
00151 
00153   bool readFromPede(const edm::ParameterSet &mprespset, bool setUserVars,
00154                     const RunRange &runrange);
00155   bool areEmptyParams(const std::vector<Alignable*> &alignables) const;
00156   unsigned int doIO(int loop) const;
00158   void buildUserVariables(const std::vector<Alignable*> &alignables) const;
00159 
00160   void addLaserData(const EventInfo &eventInfo, 
00161                     const TkFittedLasBeamCollection &tkLasBeams,
00162                     const TsosVectorCollection &tkLasBeamTsoses);
00163   void addLasBeam(const EventInfo &eventInfo, 
00164                   const TkFittedLasBeam &lasBeam,
00165                   const std::vector<TrajectoryStateOnSurface> &tsoses);
00166 
00168   void addPxbSurvey(const edm::ParameterSet &pxbSurveyCfg);
00169 
00170   //--------------------------------------------------------
00171   // Data members
00172   //--------------------------------------------------------
00173   enum EModeBit {myMilleBit = 1 << 0, myPedeRunBit = 1 << 1, myPedeSteerBit = 1 << 2,
00174                  myPedeReadBit = 1 << 3};
00175   unsigned int decodeMode(const std::string &mode) const;
00176   bool isMode(unsigned int testMode) const {return (theMode & testMode);}
00177   bool addHitStatistics(int fromLoop, const std::string &outFile,
00178                         const std::vector<std::string> &inFiles) const;
00179   bool addHits(const std::vector<Alignable*> &alis,
00180                const std::vector<AlignmentUserVariables*> &mpVars) const;
00181 
00182   edm::ParameterSet         theConfig;
00183   unsigned int              theMode;
00184   std::string               theDir; 
00185   AlignmentParameterStore  *theAlignmentParameterStore;
00186   std::vector<Alignable*>   theAlignables;
00187   AlignableNavigator       *theAlignableNavigator;
00188   MillePedeMonitor         *theMonitor;
00189   Mille                    *theMille;
00190   const PedeLabelerBase    *thePedeLabels;
00191   PedeSteerer              *thePedeSteer;
00192   TrajectoryFactoryBase    *theTrajectoryFactory;
00193   unsigned int              theMinNumHits;
00194   double                    theMaximalCor2D; 
00195 
00196   std::vector<float>        theFloatBufferX;
00197   std::vector<float>        theFloatBufferY;
00198   std::vector<int>          theIntBuffer;
00199   bool                                          theDoSurveyPixelBarrel;
00200 };
00201 
00202 #endif