CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
MillePedeAlignmentAlgorithm.h
Go to the documentation of this file.
1 #ifndef Alignment_MillePedeAlignmentAlgorithm_MillePedeAlignmentAlgorithm_h
2 #define Alignment_MillePedeAlignmentAlgorithm_MillePedeAlignmentAlgorithm_h
3 
13 
15 
17 
20 
22 
23 #include <vector>
24 #include <string>
25 
26 #include <TMatrixDSym.h>
27 #include <TMatrixD.h>
28 #include <TMatrixF.h>
29 
30 class Alignable;
31 class AlignableTracker;
32 class AlignableMuon;
33 class AlignableExtras;
34 
36 class AlignableNavigator;
39 
41 
43 
44 class MillePedeMonitor;
45 class PedeSteerer;
46 class PedeLabelerBase;
47 class Mille;
49 
50 // already from base class - and forward declaration does not work since typedef!
51 /* class TkFittedLasBeamCollection; */
52 /* class TsosVectorCollection; */
53 
55 {
56  public:
59 
62 
64  virtual void initialize(const edm::EventSetup &setup,
67 
69  virtual bool addCalibrations(const std::vector<IntegratedCalibrationBase*> &iCals);
70 
72  virtual void terminate(const edm::EventSetup& iSetup);
73 
75  virtual void run(const edm::EventSetup &setup, const EventInfo &eventInfo);
76 
78  virtual void endRun(const EventInfo &eventInfo, const EndRunInfo &runInfo,
79  const edm::EventSetup &setup);
80 
81 /* virtual void beginLuminosityBlock(const edm::EventSetup &setup) {} */
82 /* virtual void endLuminosityBlock(const edm::EventSetup &setup) {} */
83 
86  virtual bool setParametersForRunRange(const RunRange &runrange);
87 
88  private:
90 
92  std::pair<unsigned int, unsigned int>
93  addReferenceTrajectory(const edm::EventSetup &setup, const EventInfo &eventInfo,
95 
99  int addMeasurementData(const edm::EventSetup &setup, const EventInfo &eventInfo,
101  unsigned int iHit, AlignmentParameters *&params);
102 
107  unsigned int addHitCount(const std::vector<AlignmentParameters*> &parVec,
108  const std::vector<bool> &validHitVecY) const;
109 
112  unsigned int iTrajHit, TMatrixDSym &aHitCovarianceM,
113  TMatrixF &aHitResidualsM, TMatrixF &aLocalDerivativesM);
114 
117  unsigned int iVirtualMeas);
118 
121  unsigned int iVirtualMeas,TMatrixDSym &aHitCovarianceM,
122  TMatrixF &aHitResidualsM, TMatrixF &aLocalDerivativesM);
123 
125  bool globalDerivativesHierarchy(const EventInfo &eventInfo,
126  const TrajectoryStateOnSurface &tsos,
127  Alignable *ali, const AlignableDetOrUnitPtr &alidet,
128  std::vector<float> &globalDerivativesX,
129  std::vector<float> &globalDerivativesY,
130  std::vector<int> &globalLabels,
131  AlignmentParameters *&lowestParams) const;
132 
135  const TrajectoryStateOnSurface &tsos,
136  const edm::EventSetup &setup, const EventInfo &eventInfo,
137  std::vector<float> &globalDerivativesX,
138  std::vector<float> &globalDerivativesY,
139  std::vector<int> &globalLabels) const;
140 
143  unsigned int iTrajHit, const std::vector<int> &globalLabels,
144  const std::vector<float> &globalDerivativesX,
145  const std::vector<float> &globalDerivativesY);
146 
149  unsigned int iTrajHit, const std::vector<int> &globalLabels,
150  const std::vector<float> &globalDerivativesX);
151 
156  unsigned int iTrajHit, const std::vector<int> &globalLabels,
157  const std::vector<float> &globalDerivativesx,
158  const std::vector<float> &globalDerivativesy);
159  void diagonalize(TMatrixDSym &aHitCovarianceM, TMatrixF &aLocalDerivativesM,
160  TMatrixF &aHitResidualsM,TMatrixF &theGlobalDerivativesM) const;
161  // deals with the non matrix format of theFloatBufferX ...
162  void makeGlobDerivMatrix(const std::vector<float> &globalDerivativesx,
163  const std::vector<float> &globalDerivativesy,
164  TMatrixF &aGlobalDerivativesM);
165 
166 // void callMille(const ReferenceTrajectoryBase::ReferenceTrajectoryPtr &refTrajPtr,
167 // unsigned int iTrajHit, MeasurementDirection xOrY,
168 // const std::vector<float> &globalDerivatives, const std::vector<int> &globalLabels);
170  bool is2D(const TransientTrackingRecHit::ConstRecHitPointer &recHit) const;
171 
173  bool readFromPede(const edm::ParameterSet &mprespset, bool setUserVars,
174  const RunRange &runrange);
175  bool areEmptyParams(const std::vector<Alignable*> &alignables) const;
176  unsigned int doIO(int loop) const;
178  void buildUserVariables(const std::vector<Alignable*> &alignables) const;
179 
180  void addLaserData(const EventInfo &eventInfo,
181  const TkFittedLasBeamCollection &tkLasBeams,
182  const TsosVectorCollection &tkLasBeamTsoses);
183  void addLasBeam(const EventInfo &eventInfo,
184  const TkFittedLasBeam &lasBeam,
185  const std::vector<TrajectoryStateOnSurface> &tsoses);
186 
188  void addPxbSurvey(const edm::ParameterSet &pxbSurveyCfg);
189 
190  //--------------------------------------------------------
191  // Data members
192  //--------------------------------------------------------
193  enum EModeBit {myMilleBit = 1 << 0, myPedeRunBit = 1 << 1, myPedeSteerBit = 1 << 2,
194  myPedeReadBit = 1 << 3};
195  unsigned int decodeMode(const std::string &mode) const;
196  bool isMode(unsigned int testMode) const {return (theMode & testMode);}
197  bool addHitStatistics(int fromLoop, const std::string &outFile,
198  const std::vector<std::string> &inFiles) const;
199  bool addHits(const std::vector<Alignable*> &alis,
200  const std::vector<AlignmentUserVariables*> &mpVars) const;
201 
203  unsigned int theMode;
206  std::vector<Alignable*> theAlignables;
213  std::vector<IntegratedCalibrationBase*> theCalibrations;
214  unsigned int theMinNumHits;
216  int theLastWrittenIov; // keeping track for output trees...
218  std::vector<float> theFloatBufferX;
219  std::vector<float> theFloatBufferY;
220  std::vector<int> theIntBuffer;
222 };
223 
224 #endif
void globalDerivativesCalibration(const TransientTrackingRecHit::ConstRecHitPointer &recHit, const TrajectoryStateOnSurface &tsos, const edm::EventSetup &setup, const EventInfo &eventInfo, std::vector< float > &globalDerivativesX, std::vector< float > &globalDerivativesY, std::vector< int > &globalLabels) const
adding derivatives from integrated calibrations
std::vector< Alignable * > theAlignables
bool globalDerivativesHierarchy(const EventInfo &eventInfo, const TrajectoryStateOnSurface &tsos, Alignable *ali, const AlignableDetOrUnitPtr &alidet, std::vector< float > &globalDerivativesX, std::vector< float > &globalDerivativesY, std::vector< int > &globalLabels, AlignmentParameters *&lowestParams) const
recursively adding derivatives and labels, false if problems
unsigned int addHitCount(const std::vector< AlignmentParameters * > &parVec, const std::vector< bool > &validHitVecY) const
int callMille2D(const ReferenceTrajectoryBase::ReferenceTrajectoryPtr &refTrajPtr, unsigned int iTrajHit, const std::vector< int > &globalLabels, const std::vector< float > &globalDerivativesx, const std::vector< float > &globalDerivativesy)
std::pair< RunNumber, RunNumber > RunRange
virtual void initialize(const edm::EventSetup &setup, AlignableTracker *tracker, AlignableMuon *muon, AlignableExtras *extras, AlignmentParameterStore *store)
Call at beginning of job.
void addLasBeam(const EventInfo &eventInfo, const TkFittedLasBeam &lasBeam, const std::vector< TrajectoryStateOnSurface > &tsoses)
unsigned int doIO(int loop) const
int callMille(const ReferenceTrajectoryBase::ReferenceTrajectoryPtr &refTrajPtr, unsigned int iTrajHit, const std::vector< int > &globalLabels, const std::vector< float > &globalDerivativesX, const std::vector< float > &globalDerivativesY)
calls callMille1D or callMille2D
int callMille1D(const ReferenceTrajectoryBase::ReferenceTrajectoryPtr &refTrajPtr, unsigned int iTrajHit, const std::vector< int > &globalLabels, const std::vector< float > &globalDerivativesX)
calls Mille for 1D hits
void addLaserData(const EventInfo &eventInfo, const TkFittedLasBeamCollection &tkLasBeams, const TsosVectorCollection &tkLasBeamTsoses)
int addMeasurementData(const edm::EventSetup &setup, const EventInfo &eventInfo, const ReferenceTrajectoryBase::ReferenceTrajectoryPtr &refTrajPtr, unsigned int iHit, AlignmentParameters *&params)
virtual void terminate(const edm::EventSetup &iSetup)
Call at end of job.
bool isMode(unsigned int testMode) const
virtual bool setParametersForRunRange(const RunRange &runrange)
virtual void endRun(const EventInfo &eventInfo, const EndRunInfo &runInfo, const edm::EventSetup &setup)
Run on run products, e.g. TkLAS.
AlignmentParameterStore * theAlignmentParameterStore
directory for all kind of files
bool is2D(const TransientTrackingRecHit::ConstRecHitPointer &recHit) const
true if hit belongs to 2D detector (currently tracker specific)
void diagonalize(TMatrixDSym &aHitCovarianceM, TMatrixF &aLocalDerivativesM, TMatrixF &aHitResidualsM, TMatrixF &theGlobalDerivativesM) const
(Abstract) Base class for alignment algorithm user variables
bool addHits(const std::vector< Alignable * > &alis, const std::vector< AlignmentUserVariables * > &mpVars) const
bool addHitStatistics(int fromLoop, const std::string &outFile, const std::vector< std::string > &inFiles) const
bool areEmptyParams(const std::vector< Alignable * > &alignables) const
void addVirtualMeas(const ReferenceTrajectoryBase::ReferenceTrajectoryPtr &refTrajPtr, unsigned int iVirtualMeas)
adds data for virtual measurements from reference trajectory
bool readFromPede(const edm::ParameterSet &mprespset, bool setUserVars, const RunRange &runrange)
read pede input defined by &#39;psetName&#39;, flag to create/not create MillePedeVariables ...
std::pair< unsigned int, unsigned int > addReferenceTrajectory(const edm::EventSetup &setup, const EventInfo &eventInfo, const ReferenceTrajectoryBase::ReferenceTrajectoryPtr &refTrajPtr)
fill mille for a trajectory, returning number of x/y hits ([0,0] if &#39;bad&#39; trajectory) ...
void addRefTrackData2D(const ReferenceTrajectoryBase::ReferenceTrajectoryPtr &refTrajPtr, unsigned int iTrajHit, TMatrixDSym &aHitCovarianceM, TMatrixF &aHitResidualsM, TMatrixF &aLocalDerivativesM)
adds data from reference trajectory from a specific Hit
std::vector< IntegratedCalibrationBase * > theCalibrations
void makeGlobDerivMatrix(const std::vector< float > &globalDerivativesx, const std::vector< float > &globalDerivativesy, TMatrixF &aGlobalDerivativesM)
virtual bool addCalibrations(const std::vector< IntegratedCalibrationBase * > &iCals)
pass integrated calibrations to Millepede (they are not owned by Millepede!)
virtual void run(const edm::EventSetup &setup, const EventInfo &eventInfo)
Run the algorithm on trajectories and tracks.
define run information passed to algorithms (in endRun)
void buildUserVariables(const std::vector< Alignable * > &alignables) const
add MillePedeVariables for each AlignmentParameters (exception if no parameters...)
MillePedeAlignmentAlgorithm(const edm::ParameterSet &cfg)
Constructor.
TrajectoryFactoryBase * theTrajectoryFactory
virtual ~MillePedeAlignmentAlgorithm()
Destructor.
std::vector< TkFittedLasBeam > TkFittedLasBeamCollection
Definition: Mille.h:26
void addRefTrackVirtualMeas1D(const ReferenceTrajectoryBase::ReferenceTrajectoryPtr &refTrajPtr, unsigned int iVirtualMeas, TMatrixDSym &aHitCovarianceM, TMatrixF &aHitResidualsM, TMatrixF &aLocalDerivativesM)
adds data for a specific virtual measurement from reference trajectory
void addPxbSurvey(const edm::ParameterSet &pxbSurveyCfg)
add measurement data from PXB survey
unsigned int decodeMode(const std::string &mode) const
std::vector< std::vector< TrajectoryStateOnSurface > > TsosVectorCollection
Constructor of the full muon geometry.
Definition: AlignableMuon.h:36
void setup(std::vector< TH2F > &depth, std::string name, std::string units="")
define event information passed to algorithms