CMS 3D CMS Logo

DualReferenceTrajectory.cc
Go to the documentation of this file.
1 
3 
5 
8 
10 
12  const ConstRecHitContainer& forwardRecHits,
13  const ConstRecHitContainer& backwardRecHits,
14  const MagneticField* magField,
15  const reco::BeamSpot& beamSpot,
17  : ReferenceTrajectoryBase(tsos.localParameters().mixedFormatVector().kSize,
18  numberOfUsedRecHits(forwardRecHits) + numberOfUsedRecHits(backwardRecHits) - 1,
19  0,
20  0),
21  mass_(config.mass),
22  materialEffects_(config.materialEffects),
23  propDir_(config.propDir),
24  useBeamSpot_(config.useBeamSpot) {
25  theValidityFlag = this->construct(tsos, forwardRecHits, backwardRecHits, magField, beamSpot);
26 }
27 
29  unsigned int nHits,
32  mass_(config.mass),
33  materialEffects_(config.materialEffects),
34  propDir_(config.propDir),
35  useBeamSpot_(config.useBeamSpot) {}
36 
38  const ConstRecHitContainer& forwardRecHits,
39  const ConstRecHitContainer& backwardRecHits,
40  const MagneticField* magField,
41  const reco::BeamSpot& beamSpot) {
43  throw cms::Exception("BadConfig") << "[DualReferenceTrajectory::construct] Wrong MaterialEffects: "
45 
46  ReferenceTrajectoryBase* fwdTraj = construct(refTsos, forwardRecHits, magField, beamSpot);
47 
48  // set flag for opposite direction to true
49  ReferenceTrajectoryBase* bwdTraj = construct(refTsos, backwardRecHits, magField, beamSpot, true);
50 
51  if (!(fwdTraj->isValid() && bwdTraj->isValid())) {
52  delete fwdTraj;
53  delete bwdTraj;
54  return false;
55  }
56 
57  //
58  // Combine both reference trajactories to a dual reference trajectory
59  //
60 
61  const std::vector<TrajectoryStateOnSurface>& fwdTsosVec = fwdTraj->trajectoryStates();
62  const std::vector<TrajectoryStateOnSurface>& bwdTsosVec = bwdTraj->trajectoryStates();
63  theTsosVec.insert(theTsosVec.end(), fwdTsosVec.begin(), fwdTsosVec.end());
64  theTsosVec.insert(theTsosVec.end(), ++bwdTsosVec.begin(), bwdTsosVec.end());
65 
66  const ConstRecHitContainer& fwdRecHits = fwdTraj->recHits();
67  const ConstRecHitContainer& bwdRecHits = bwdTraj->recHits();
68  theRecHits.insert(theRecHits.end(), fwdRecHits.begin(), fwdRecHits.end());
69  theRecHits.insert(theRecHits.end(), ++bwdRecHits.begin(), bwdRecHits.end());
70 
72 
73  unsigned int nParam = theNumberOfPars;
74  unsigned int nFwdMeas = fwdTraj->numberOfHitMeas();
75  unsigned int nBwdMeas = bwdTraj->numberOfHitMeas();
76  unsigned int nFwdBP = fwdTraj->numberOfVirtualMeas();
77  unsigned int nBwdBP = bwdTraj->numberOfVirtualMeas();
78  unsigned int nMeas = nFwdMeas + nBwdMeas - nMeasPerHit;
79 
80  theMeasurements.sub(1, fwdTraj->measurements().sub(1, nFwdMeas));
81  theMeasurements.sub(nFwdMeas + 1, bwdTraj->measurements().sub(nMeasPerHit + 1, nBwdMeas));
82 
83  theMeasurementsCov.sub(1, fwdTraj->measurementErrors().sub(1, nFwdMeas));
84  theMeasurementsCov.sub(nFwdMeas + 1, bwdTraj->measurementErrors().sub(nMeasPerHit + 1, nBwdMeas));
85 
87  theTrajectoryPositions.sub(nFwdMeas + 1, bwdTraj->trajectoryPositions().sub(nMeasPerHit + 1, nBwdMeas));
88 
90  theTrajectoryPositionCov.sub(nFwdMeas + 1, bwdTraj->trajectoryPositionErrors().sub(nMeasPerHit + 1, nBwdMeas));
91 
92  theDerivatives.sub(1, 1, fwdTraj->derivatives().sub(1, nFwdMeas, 1, nParam));
93  theDerivatives.sub(nFwdMeas + 1, 1, bwdTraj->derivatives().sub(nMeasPerHit + 1, nBwdMeas, 1, nParam));
94 
95  // for the break points
96  // DUAL with break points makes no sense: (MS) correlations between the two parts are lost !
97  if (nFwdBP > 0) {
98  theMeasurements.sub(nMeas + 1, fwdTraj->measurements().sub(nFwdMeas + 1, nFwdMeas + nFwdBP));
99  theMeasurementsCov.sub(nMeas + 1, fwdTraj->measurementErrors().sub(nFwdMeas + 1, nFwdMeas + nFwdBP));
100  theDerivatives.sub(1, nParam + 1, fwdTraj->derivatives().sub(1, nFwdMeas, nParam + 1, nParam + nFwdBP));
101  theDerivatives.sub(nMeas + 1,
102  nParam + 1,
103  fwdTraj->derivatives().sub(nFwdMeas + 1, nFwdMeas + nFwdBP, nParam + 1, nParam + nFwdBP));
104  }
105  if (nBwdBP > 0) {
106  theMeasurements.sub(nMeas + nFwdBP + 1, bwdTraj->measurements().sub(nBwdMeas + 1, nBwdMeas + nBwdBP));
107  theMeasurementsCov.sub(nMeas + nFwdBP + 1, bwdTraj->measurementErrors().sub(nBwdMeas + 1, nBwdMeas + nBwdBP));
108  theDerivatives.sub(nFwdMeas + 1,
109  nParam + nFwdBP + 1,
110  bwdTraj->derivatives().sub(nMeasPerHit + 1, nBwdMeas, nParam + 1, nParam + nBwdBP));
111  theDerivatives.sub(nMeas + nFwdBP + 1,
112  nParam + nFwdBP + 1,
113  bwdTraj->derivatives().sub(nBwdMeas + 1, nBwdMeas + nBwdBP, nParam + 1, nParam + nBwdBP));
114  }
115 
116  delete fwdTraj;
117  delete bwdTraj;
118 
119  return true;
120 }
121 
124  const MagneticField* magField,
125  const reco::BeamSpot& beamSpot,
126  const bool revertDirection) const {
128  throw cms::Exception("BadConfig") << "[DualReferenceTrajectory::construct] Wrong MaterialEffects: "
129  << materialEffects_;
130 
132  materialEffects_, (revertDirection ? oppositeDirection(propDir_) : propDir_), mass_);
133  config.useBeamSpot = useBeamSpot_;
134  config.hitsAreReverse = false;
135  return new ReferenceTrajectory(referenceTsos, recHits, magField, beamSpot, config);
136 }
137 
139  return asHepVector<5>(referenceTsos.localParameters().mixedFormatVector());
140 }
ReferenceTrajectoryBase::recHits
const TransientTrackingRecHit::ConstRecHitContainer & recHits() const
Definition: ReferenceTrajectoryBase.h:215
TrajectoryStateOnSurface.h
ReferenceTrajectoryBase::derivatives
const AlgebraicMatrix & derivatives() const
Definition: ReferenceTrajectoryBase.h:164
pfTracksFromL1Tracks_cfi.nParam
nParam
Definition: pfTracksFromL1Tracks_cfi.py:5
pwdgSkimBPark_cfi.beamSpot
beamSpot
Definition: pwdgSkimBPark_cfi.py:5
DualReferenceTrajectory::materialEffects_
const MaterialEffects materialEffects_
Definition: DualReferenceTrajectory.h:77
AlgebraicObjects.h
ReferenceTrajectoryBase::measurementErrors
const AlgebraicSymMatrix & measurementErrors() const
Definition: ReferenceTrajectoryBase.h:150
ReferenceTrajectoryBase
Definition: ReferenceTrajectoryBase.h:105
ReferenceTrajectory.h
DualReferenceTrajectory::useBeamSpot_
const bool useBeamSpot_
Definition: DualReferenceTrajectory.h:79
ReferenceTrajectoryBase::theDerivatives
AlgebraicMatrix theDerivatives
Definition: ReferenceTrajectoryBase.h:255
ReferenceTrajectoryBase::Config
Definition: ReferenceTrajectoryBase.h:121
ReferenceTrajectoryBase::theTrajectoryPositionCov
AlgebraicSymMatrix theTrajectoryPositionCov
Definition: ReferenceTrajectoryBase.h:250
DualReferenceTrajectory::oppositeDirection
const PropagationDirection oppositeDirection(const PropagationDirection propDir) const
Definition: DualReferenceTrajectory.h:71
ReferenceTrajectoryBase::numberOfHitMeas
unsigned int numberOfHitMeas() const
Definition: ReferenceTrajectoryBase.h:221
ReferenceTrajectoryBase::numberOfVirtualMeas
unsigned int numberOfVirtualMeas() const
Definition: ReferenceTrajectoryBase.h:219
ReferenceTrajectoryBase::theMeasurements
AlgebraicVector theMeasurements
Definition: ReferenceTrajectoryBase.h:246
ReferenceTrajectoryBase::measurements
const AlgebraicVector & measurements() const
Definition: ReferenceTrajectoryBase.h:146
DualReferenceTrajectory::ConstRecHitContainer
TransientTrackingRecHit::ConstRecHitContainer ConstRecHitContainer
Definition: DualReferenceTrajectory.h:39
ReferenceTrajectoryBase::trajectoryStates
const std::vector< TrajectoryStateOnSurface > & trajectoryStates() const
Definition: ReferenceTrajectoryBase.h:210
HcalResponse_cfi.nPar
nPar
Definition: HcalResponse_cfi.py:33
config
Definition: config.py:1
LocalTrajectoryParameters.h
ReferenceTrajectoryBase::theParameters
AlgebraicVector theParameters
Definition: ReferenceTrajectoryBase.h:252
TrajectoryStateOnSurface
Definition: TrajectoryStateOnSurface.h:16
AlgebraicVector
CLHEP::HepVector AlgebraicVector
Definition: AlgebraicObjects.h:13
nHits
const caConstants::TupleMultiplicity *__restrict__ const HitsOnGPU *__restrict__ double *__restrict__ float *__restrict__ double *__restrict__ uint32_t nHits
Definition: BrokenLineFitOnGPU.h:27
submitPVResolutionJobs.config
config
parse the configuration file
Definition: submitPVResolutionJobs.py:281
DualReferenceTrajectory::DualReferenceTrajectory
DualReferenceTrajectory(const TrajectoryStateOnSurface &tsos, const ConstRecHitContainer &forwardRecHits, const ConstRecHitContainer &backwardRecHits, const MagneticField *magField, const reco::BeamSpot &beamSpot, const ReferenceTrajectoryBase::Config &config)
Definition: DualReferenceTrajectory.cc:11
reco::BeamSpot
Definition: BeamSpot.h:21
ReferenceTrajectoryBase::theMeasurementsCov
AlgebraicSymMatrix theMeasurementsCov
Definition: ReferenceTrajectoryBase.h:247
ReferenceTrajectoryBase::theTrajectoryPositions
AlgebraicVector theTrajectoryPositions
Definition: ReferenceTrajectoryBase.h:249
ReferenceTrajectoryBase::trajectoryPositions
const AlgebraicVector & trajectoryPositions() const
Definition: ReferenceTrajectoryBase.h:155
FastTrackerRecHitMaskProducer_cfi.recHits
recHits
Definition: FastTrackerRecHitMaskProducer_cfi.py:8
TrajectoryStateOnSurface::localParameters
const LocalTrajectoryParameters & localParameters() const
Definition: TrajectoryStateOnSurface.h:73
DualReferenceTrajectory.h
ReferenceTrajectoryBase::nMeasPerHit
static constexpr unsigned int nMeasPerHit
Definition: ReferenceTrajectoryBase.h:269
ReferenceTrajectoryBase::theRecHits
TransientTrackingRecHit::ConstRecHitContainer theRecHits
Definition: ReferenceTrajectoryBase.h:244
ReferenceTrajectoryBase::breakPoints
Definition: ReferenceTrajectoryBase.h:114
DualReferenceTrajectory::extractParameters
virtual AlgebraicVector extractParameters(const TrajectoryStateOnSurface &referenceTsos) const
Definition: DualReferenceTrajectory.cc:138
ReferenceTrajectoryBase::trajectoryPositionErrors
const AlgebraicSymMatrix & trajectoryPositionErrors() const
Definition: ReferenceTrajectoryBase.h:159
LocalTrajectoryParameters::mixedFormatVector
AlgebraicVector5 mixedFormatVector() const
Definition: LocalTrajectoryParameters.h:135
HLT_FULL_cff.useBeamSpot
useBeamSpot
Definition: HLT_FULL_cff.py:26535
DualReferenceTrajectory::construct
virtual bool construct(const TrajectoryStateOnSurface &referenceTsos, const ConstRecHitContainer &forwardRecHits, const ConstRecHitContainer &backwardRecHits, const MagneticField *magField, const reco::BeamSpot &beamSpot)
Definition: DualReferenceTrajectory.cc:37
ReferenceTrajectory
Definition: ReferenceTrajectory.h:55
Exception
Definition: hltDiff.cc:245
EgHLTOffHistBins_cfi.mass
mass
Definition: EgHLTOffHistBins_cfi.py:34
DualReferenceTrajectory::mass_
const double mass_
Definition: DualReferenceTrajectory.h:76
ReferenceTrajectoryBase::theNumberOfPars
unsigned int theNumberOfPars
Definition: ReferenceTrajectoryBase.h:239
ReferenceTrajectoryBase::theTsosVec
std::vector< TrajectoryStateOnSurface > theTsosVec
Definition: ReferenceTrajectoryBase.h:243
MagneticField
Definition: MagneticField.h:19
ReferenceTrajectoryBase::isValid
bool isValid()
Definition: ReferenceTrajectoryBase.h:142
DualReferenceTrajectory::propDir_
const PropagationDirection propDir_
Definition: DualReferenceTrajectory.h:78
ReferenceTrajectoryBase::theValidityFlag
bool theValidityFlag
Definition: ReferenceTrajectoryBase.h:235