CMS 3D CMS Logo

/data/git/CMSSW_5_3_11_patch5/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 bool 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 
00102   unsigned int addHitCount(const std::vector<AlignmentParameters*> &parVec,
00103                            const std::vector<bool> &validHitVecY) const;
00104 
00106   void addRefTrackData2D(const ReferenceTrajectoryBase::ReferenceTrajectoryPtr &refTrajPtr,
00107                          unsigned int iTrajHit, TMatrixDSym &aHitCovarianceM,
00108                          TMatrixF &aHitResidualsM, TMatrixF &aLocalDerivativesM);
00109   
00111   void addVirtualMeas(const ReferenceTrajectoryBase::ReferenceTrajectoryPtr &refTrajPtr,
00112                       unsigned int iVirtualMeas);
00113                            
00115   void addRefTrackVirtualMeas1D(const ReferenceTrajectoryBase::ReferenceTrajectoryPtr &refTrajPtr,
00116                                 unsigned int iVirtualMeas,TMatrixDSym &aHitCovarianceM,
00117                                 TMatrixF &aHitResidualsM, TMatrixF &aLocalDerivativesM);
00118   
00120   bool globalDerivativesHierarchy(const EventInfo &eventInfo, 
00121                                   const TrajectoryStateOnSurface &tsos,
00122                                   Alignable *ali, const AlignableDetOrUnitPtr &alidet,
00123                                   std::vector<float> &globalDerivativesX,
00124                                   std::vector<float> &globalDerivativesY,
00125                                   std::vector<int> &globalLabels,
00126                                   AlignmentParameters *&lowestParams) const;
00127 
00129   int callMille(const ReferenceTrajectoryBase::ReferenceTrajectoryPtr &refTrajPtr,
00130                 unsigned int iTrajHit, const std::vector<int> &globalLabels,
00131                 const std::vector<float> &globalDerivativesX,
00132                 const std::vector<float> &globalDerivativesY);
00133 
00135   int callMille1D(const ReferenceTrajectoryBase::ReferenceTrajectoryPtr &refTrajPtr,
00136                   unsigned int iTrajHit, const std::vector<int> &globalLabels,
00137                   const std::vector<float> &globalDerivativesX);
00138 
00142   int callMille2D ( const ReferenceTrajectoryBase::ReferenceTrajectoryPtr &refTrajPtr,
00143                     unsigned int iTrajHit, const std::vector<int> &globalLabels,
00144                     const std::vector<float> &globalDerivativesx,
00145                     const std::vector<float> &globalDerivativesy);
00146   void  diagonalize(TMatrixDSym &aHitCovarianceM, TMatrixF &aLocalDerivativesM,
00147                     TMatrixF &aHitResidualsM,TMatrixF &theGlobalDerivativesM) const;
00148   // deals with the non matrix format of theFloatBufferX ...
00149   void makeGlobDerivMatrix(const std::vector<float> &globalDerivativesx,
00150                            const std::vector<float> &globalDerivativesy,
00151                            TMatrixF &aGlobalDerivativesM);
00152 
00153 //   void callMille(const ReferenceTrajectoryBase::ReferenceTrajectoryPtr &refTrajPtr, 
00154 //               unsigned int iTrajHit, MeasurementDirection xOrY,
00155 //               const std::vector<float> &globalDerivatives, const std::vector<int> &globalLabels);
00157   bool is2D(const TransientTrackingRecHit::ConstRecHitPointer &recHit) const;
00158 
00160   bool readFromPede(const edm::ParameterSet &mprespset, bool setUserVars,
00161                     const RunRange &runrange);
00162   bool areEmptyParams(const std::vector<Alignable*> &alignables) const;
00163   unsigned int doIO(int loop) const;
00165   void buildUserVariables(const std::vector<Alignable*> &alignables) const;
00166 
00167   void addLaserData(const EventInfo &eventInfo, 
00168                     const TkFittedLasBeamCollection &tkLasBeams,
00169                     const TsosVectorCollection &tkLasBeamTsoses);
00170   void addLasBeam(const EventInfo &eventInfo, 
00171                   const TkFittedLasBeam &lasBeam,
00172                   const std::vector<TrajectoryStateOnSurface> &tsoses);
00173 
00175   void addPxbSurvey(const edm::ParameterSet &pxbSurveyCfg);
00176 
00177   //--------------------------------------------------------
00178   // Data members
00179   //--------------------------------------------------------
00180   enum EModeBit {myMilleBit = 1 << 0, myPedeRunBit = 1 << 1, myPedeSteerBit = 1 << 2,
00181                  myPedeReadBit = 1 << 3};
00182   unsigned int decodeMode(const std::string &mode) const;
00183   bool isMode(unsigned int testMode) const {return (theMode & testMode);}
00184   bool addHitStatistics(int fromLoop, const std::string &outFile,
00185                         const std::vector<std::string> &inFiles) const;
00186   bool addHits(const std::vector<Alignable*> &alis,
00187                const std::vector<AlignmentUserVariables*> &mpVars) const;
00188 
00189   edm::ParameterSet         theConfig;
00190   unsigned int              theMode;
00191   std::string               theDir; 
00192   AlignmentParameterStore  *theAlignmentParameterStore;
00193   std::vector<Alignable*>   theAlignables;
00194   AlignableNavigator       *theAlignableNavigator;
00195   MillePedeMonitor         *theMonitor;
00196   Mille                    *theMille;
00197   const PedeLabelerBase    *thePedeLabels;
00198   PedeSteerer              *thePedeSteer;
00199   TrajectoryFactoryBase    *theTrajectoryFactory;
00200   unsigned int              theMinNumHits;
00201   double                    theMaximalCor2D; 
00202 
00203   int                       theLastWrittenIov; // keeping track for output trees...
00204   std::vector<float>        theFloatBufferX;
00205   std::vector<float>        theFloatBufferY;
00206   std::vector<int>          theIntBuffer;
00207   bool                      theDoSurveyPixelBarrel;
00208 };
00209 
00210 #endif