Back to home page

Project CMSSW displayed by LXR

 
 

    


File indexing completed on 2021-02-14 12:46:08

0001 #ifndef Alignment_ReferenceTrajectories_DualBzeroReferenceTrajectory_H
0002 #define Alignment_ReferenceTrajectories_DualBzeroReferenceTrajectory_H
0003 
0004 /**
0005  *  Class implementing the reference trajectory of a single particle
0006  *  in the absence of a magentic field, i.e. a straight line with 4
0007  *  parameters (no parameter related to the momentum). Here, not the parameters
0008  *  of the trajectory state of the first (or the last) hit are used,
0009  *  but at a surface in "the middle" of the track. By this the track is
0010  *  "split" into two parts (hence "dual"). The list of all hits
0011  *  the local measurements, derivatives etc. as described in (and
0012  *  accessed via) ReferenceTrajectoryBase are calculated.
0013  * 
0014  *  The covariance-matrix of the measurements may include effects of
0015  *  multiple-scattering or energy-loss effects or both. This can be
0016  *  defined in the constructor via the variable 'materialEffects
0017  *  (cf. ReferenceTrajectoryBase):
0018  *
0019  *  materialEffects =  none/multipleScattering/energyLoss/combined
0020  *
0021  *  By default, the mass is assumed to be the muon-mass, but can be
0022  *  changed via a constructor argument.
0023  *
0024  *  A value for the momentum has to be provided to allow to calculate
0025  *  material effects.
0026  *
0027  * LIMITATIONS:
0028  *  So far all input hits have to be valid, but invalid hits
0029  *  would be needed to take into account the material effects in them...
0030  *
0031  */
0032 
0033 #include "Alignment/ReferenceTrajectories/interface/DualReferenceTrajectory.h"
0034 
0035 class BzeroReferenceTrajectory;
0036 
0037 class DualBzeroReferenceTrajectory : public DualReferenceTrajectory {
0038 public:
0039   typedef TransientTrackingRecHit::ConstRecHitContainer ConstRecHitContainer;
0040 
0041   DualBzeroReferenceTrajectory(const TrajectoryStateOnSurface& tsos,
0042                                const ConstRecHitContainer& forwardRecHits,
0043                                const ConstRecHitContainer& backwardRecHits,
0044                                const MagneticField* magField,
0045                                const reco::BeamSpot& beamSpot,
0046                                const ReferenceTrajectoryBase::Config& config);
0047 
0048   ~DualBzeroReferenceTrajectory() override {}
0049 
0050   DualBzeroReferenceTrajectory* clone() const override { return new DualBzeroReferenceTrajectory(*this); }
0051 
0052 protected:
0053   using DualReferenceTrajectory::construct;
0054 
0055   virtual ReferenceTrajectory* construct(const TrajectoryStateOnSurface& referenceTsos,
0056                                          const ConstRecHitContainer& recHits,
0057                                          double mass,
0058                                          MaterialEffects materialEffects,
0059                                          const PropagationDirection propDir,
0060                                          const MagneticField* magField,
0061                                          bool useBeamSpot,
0062                                          const reco::BeamSpot& beamSpot) const;
0063 
0064   AlgebraicVector extractParameters(const TrajectoryStateOnSurface& referenceTsos) const override;
0065 
0066   double theMomentumEstimate;
0067 };
0068 
0069 #endif