CMS 3D CMS Logo

SeedProducerFromSoA.cc
Go to the documentation of this file.
32 
33 /*
34  produces seeds directly from cuda produced tuples
35 */
37 public:
38  explicit SeedProducerFromSoA(const edm::ParameterSet& iConfig);
39  ~SeedProducerFromSoA() override = default;
40 
41  static void fillDescriptions(edm::ConfigurationDescriptions& descriptions);
42 
43 private:
44  void produce(edm::StreamID streamID, edm::Event& iEvent, const edm::EventSetup& iSetup) const override;
45 
46  // Event data tokens
49  // Event setup tokens
54 };
55 
57  : tBeamSpot_(consumes<reco::BeamSpot>(iConfig.getParameter<edm::InputTag>("beamSpot"))),
58  tokenTrack_(consumes<PixelTrackHeterogeneous>(iConfig.getParameter<edm::InputTag>("src"))),
59  idealMagneticFieldToken_(esConsumes()),
60  trackerDigiGeometryToken_(esConsumes()),
61  trackerPropagatorToken_(esConsumes(edm::ESInputTag("PropagatorWithMaterial"))),
62  minNumberOfHits_(iConfig.getParameter<int>("minNumberOfHits"))
63 
64 {
65  produces<TrajectorySeedCollection>();
66 }
67 
70  desc.add<edm::InputTag>("beamSpot", edm::InputTag("offlineBeamSpot"));
71  desc.add<edm::InputTag>("src", edm::InputTag("pixelTrackSoA"));
72  desc.add<int>("minNumberOfHits", 0);
73 
74  descriptions.addWithDefaultLabel(desc);
75 }
76 
78  // std::cout << "Converting gpu helix to trajectory seed" << std::endl;
79  auto result = std::make_unique<TrajectorySeedCollection>();
80 
81  auto const& fieldESH = iSetup.getHandle(idealMagneticFieldToken_);
82  auto const& tracker = iSetup.getHandle(trackerDigiGeometryToken_);
83  auto const& dus = tracker->detUnits();
84 
85  auto const& propagatorHandle = iSetup.getHandle(trackerPropagatorToken_);
86  const Propagator* propagator = &(*propagatorHandle);
87 
88  const auto& bsh = iEvent.get(tBeamSpot_);
89  // std::cout << "beamspot " << bsh.x0() << ' ' << bsh.y0() << ' ' << bsh.z0() << std::endl;
90  GlobalPoint bs(bsh.x0(), bsh.y0(), bsh.z0());
91 
92  const auto& tsoa = *(iEvent.get(tokenTrack_));
93 
94  auto const* quality = tsoa.qualityData();
95  auto const& fit = tsoa.stateAtBS;
96  auto const& detIndices = tsoa.detIndices;
97  auto maxTracks = tsoa.stride();
98 
99  int32_t nt = 0;
100  for (int32_t it = 0; it < maxTracks; ++it) {
101  auto nHits = tsoa.nHits(it);
102  if (nHits == 0)
103  break; // this is a guard: maybe we need to move to nTracks...
104 
105  auto q = quality[it];
107  continue; // FIXME
108  if (nHits < minNumberOfHits_)
109  continue;
110  ++nt;
111 
112  // fill hits with invalid just to hold the detId
113  auto b = detIndices.begin(it);
115  for (int iHit = 0; iHit < nHits; ++iHit) {
116  auto const* det = dus[*(b + iHit)];
117  // FIXME at some point get a proper type ...
118  hits.push_back(new InvalidTrackingRecHit(*det, TrackingRecHit::bad));
119  }
120 
121  // mind: this values are respect the beamspot!
122 
123  float phi = tsoa.phi(it);
124 
125  riemannFit::Vector5d ipar, opar;
126  riemannFit::Matrix5d icov, ocov;
127  fit.copyToDense(ipar, icov, it);
128  riemannFit::transformToPerigeePlane(ipar, icov, opar, ocov);
129 
130  LocalTrajectoryParameters lpar(opar(0), opar(1), opar(2), opar(3), opar(4), 1.);
132  for (int i = 0; i < 5; ++i)
133  for (int j = i; j < 5; ++j)
134  m(i, j) = ocov(i, j);
135 
136  float sp = std::sin(phi);
137  float cp = std::cos(phi);
138  Surface::RotationType rot(sp, -cp, 0, 0, 0, -1.f, cp, sp, 0);
139 
140  Plane impPointPlane(bs, rot);
141  GlobalTrajectoryParameters gp(impPointPlane.toGlobal(lpar.position()),
142  impPointPlane.toGlobal(lpar.momentum()),
143  lpar.charge(),
144  fieldESH.product());
145 
146  JacobianLocalToCurvilinear jl2c(impPointPlane, lpar, *fieldESH.product());
147 
148  AlgebraicSymMatrix55 mo = ROOT::Math::Similarity(jl2c.jacobian(), m);
149 
151 
152  auto const& lastHit = hits.back();
153 
154  TrajectoryStateOnSurface outerState = propagator->propagate(fts, *lastHit.surface());
155 
156  if (!outerState.isValid()) {
157  edm::LogError("SeedFromGPU") << " was trying to create a seed from:\n"
158  << fts << "\n propagating to: " << lastHit.geographicalId().rawId();
159  continue;
160  }
161 
162  auto const& pTraj = trajectoryStateTransform::persistentState(outerState, lastHit.geographicalId().rawId());
163 
164  result->emplace_back(pTraj, hits, alongMomentum);
165  }
166 
167  iEvent.put(std::move(result));
168 }
169 
ConfigurationDescriptions.h
edm::StreamID
Definition: StreamID.h:30
TkRotation< float >
mps_fire.i
i
Definition: mps_fire.py:428
GlobalTrajectoryParameters.h
SeedProducerFromSoA::trackerDigiGeometryToken_
const edm::ESGetToken< TrackerGeometry, TrackerDigiGeometryRecord > trackerDigiGeometryToken_
Definition: SeedProducerFromSoA.cc:51
TrackerGeometry.h
SeedProducerFromSoA
Definition: SeedProducerFromSoA.cc:36
InvalidTrackingRecHit
Definition: InvalidTrackingRecHit.h:8
hfClusterShapes_cfi.hits
hits
Definition: hfClusterShapes_cfi.py:5
ESHandle.h
align::BeamSpot
Definition: StructureType.h:95
ESInputTag
f
double f[11][100]
Definition: MuScleFitUtils.cc:78
nt
int nt
Definition: AMPTWrapper.h:42
edm::EDGetTokenT< reco::BeamSpot >
edm
HLT enums.
Definition: AlignableModifier.h:19
SeedProducerFromSoA::minNumberOfHits_
int32_t minNumberOfHits_
Definition: SeedProducerFromSoA.cc:53
trajectoryStateTransform::persistentState
PTrajectoryStateOnDet persistentState(const TrajectoryStateOnSurface &ts, unsigned int detid)
Definition: TrajectoryStateTransform.cc:14
HLT_FULL_cff.InputTag
InputTag
Definition: HLT_FULL_cff.py:89301
edm::ParameterSetDescription
Definition: ParameterSetDescription.h:52
SeedProducerFromSoA::SeedProducerFromSoA
SeedProducerFromSoA(const edm::ParameterSet &iConfig)
Definition: SeedProducerFromSoA.cc:56
riemannFit::Vector5d
Eigen::Matrix< double, 5, 1 > Vector5d
Definition: FitResult.h:16
HeterogeneousSoA
Definition: HeterogeneousSoA.h:13
hgcal_conditions::parameters
Definition: HGCConditions.h:86
reco
fixed size matrix
Definition: AlignmentAlgorithmBase.h:46
SeedProducerFromSoA::trackerPropagatorToken_
const edm::ESGetToken< Propagator, TrackingComponentsRecord > trackerPropagatorToken_
Definition: SeedProducerFromSoA.cc:52
quality
const uint32_t *__restrict__ Quality * quality
Definition: CAHitNtupletGeneratorKernelsImpl.h:122
funct::sin
Sin< T >::type sin(const T &t)
Definition: Sin.h:22
LocalTrajectoryParameters
Definition: LocalTrajectoryParameters.h:25
Propagator
Definition: Propagator.h:44
Plane.h
LocalTrajectoryParameters.h
TrajectoryStateOnSurface
Definition: TrajectoryStateOnSurface.h:16
MakerMacros.h
TrackerTopology.h
cms::cuda::bs
bs
Definition: HistoContainer.h:76
funct::cos
Cos< T >::type cos(const T &t)
Definition: Cos.h:22
TrackerTopologyRcd.h
riemannFit::transformToPerigeePlane
__host__ __device__ void transformToPerigeePlane(VI5 const &ip, MI5 const &icov, VO5 &op, MO5 &ocov)
Definition: FitUtils.h:218
CurvilinearTrajectoryError
Definition: CurvilinearTrajectoryError.h:27
DEFINE_FWK_MODULE
#define DEFINE_FWK_MODULE(type)
Definition: MakerMacros.h:16
JacobianLocalToCurvilinear.h
TrackCandidateProducer_cfi.propagator
propagator
Definition: TrackCandidateProducer_cfi.py:17
BeamSpot.h
LocalTrajectoryParameters::position
LocalPoint position() const
Local x and y position coordinates.
Definition: LocalTrajectoryParameters.h:85
nHits
const caConstants::TupleMultiplicity *__restrict__ const HitsOnGPU *__restrict__ double *__restrict__ float *__restrict__ double *__restrict__ uint32_t nHits
Definition: BrokenLineFitOnGPU.h:27
CurvilinearTrajectoryError.h
visualization-live-secondInstance_cfg.m
m
Definition: visualization-live-secondInstance_cfg.py:79
Surface::toGlobal
GlobalPoint toGlobal(const Point2DBase< Scalar, LocalTag > lp) const
Definition: Surface.h:79
IdealMagneticFieldRecord.h
SeedProducerFromSoA::tokenTrack_
const edm::EDGetTokenT< PixelTrackHeterogeneous > tokenTrack_
Definition: SeedProducerFromSoA.cc:48
GlobalTrajectoryParameters
Definition: GlobalTrajectoryParameters.h:15
LocalTrajectoryParameters::charge
TrackCharge charge() const
Charge (-1, 0 or 1)
Definition: LocalTrajectoryParameters.h:110
Point3DBase< float, GlobalTag >
ParameterSetDescription.h
b
double b
Definition: hdecay.h:118
EDGetToken.h
SeedProducerFromSoA::idealMagneticFieldToken_
const edm::ESGetToken< MagneticField, IdealMagneticFieldRecord > idealMagneticFieldToken_
Definition: SeedProducerFromSoA.cc:50
edm::global::EDProducer
Definition: EDProducer.h:32
edm::ConfigurationDescriptions
Definition: ConfigurationDescriptions.h:28
TrackingRecHit::bad
Definition: TrackingRecHit.h:49
PbPb_ZMuSkimMuonDPG_cff.tracker
tracker
Definition: PbPb_ZMuSkimMuonDPG_cff.py:60
runTauDisplay.gp
gp
Definition: runTauDisplay.py:431
TrackerDigiGeometryRecord.h
edm::ParameterSet
Definition: ParameterSet.h:47
Event.h
PropagatorWithMaterial.h
HLT_FULL_cff.maxTracks
maxTracks
Definition: HLT_FULL_cff.py:33266
ModuleDef.h
createfilelist.int
int
Definition: createfilelist.py:10
iEvent
int iEvent
Definition: GenABIO.cc:224
SeedProducerFromSoA::tBeamSpot_
const edm::EDGetTokenT< reco::BeamSpot > tBeamSpot_
Definition: SeedProducerFromSoA.cc:47
edm::EventSetup::getHandle
ESHandle< T > getHandle(const ESGetToken< T, R > &iToken) const
Definition: EventSetup.h:155
submitPVResolutionJobs.q
q
Definition: submitPVResolutionJobs.py:84
edm::EventSetup
Definition: EventSetup.h:58
edm::LogError
Log< level::Error, false > LogError
Definition: MessageLogger.h:123
SeedProducerFromSoA::fillDescriptions
static void fillDescriptions(edm::ConfigurationDescriptions &descriptions)
Definition: SeedProducerFromSoA.cc:68
TrajectorySeedCollection.h
edm::ESGetToken< MagneticField, IdealMagneticFieldRecord >
InputTag.h
SeedProducerFromSoA::~SeedProducerFromSoA
~SeedProducerFromSoA() override=default
DDAxes::phi
GeomDet.h
submitPVResolutionJobs.desc
string desc
Definition: submitPVResolutionJobs.py:251
eostools.move
def move(src, dest)
Definition: eostools.py:511
FreeTrajectoryState
Definition: FreeTrajectoryState.h:27
LocalTrajectoryParameters::momentum
LocalVector momentum() const
Momentum vector in the local frame.
Definition: LocalTrajectoryParameters.h:88
TrackingComponentsRecord.h
Plane
Definition: Plane.h:16
makeMuonMisalignmentScenario.rot
rot
Definition: makeMuonMisalignmentScenario.py:322
riemannFit::Matrix5d
Eigen::Matrix< double, 5, 5 > Matrix5d
Definition: FitResult.h:20
EventSetup.h
TrajectoryStateTransform.h
PixelTrackHeterogeneous.h
mps_fire.result
result
Definition: mps_fire.py:311
FitUtils.h
ConsumesCollector.h
SeedProducerFromSoA::produce
void produce(edm::StreamID streamID, edm::Event &iEvent, const edm::EventSetup &iSetup) const override
Definition: SeedProducerFromSoA.cc:77
ParameterSet.h
EDProducer.h
InvalidTrackingRecHit.h
dqmiolumiharvest.j
j
Definition: dqmiolumiharvest.py:66
JacobianLocalToCurvilinear
Definition: JacobianLocalToCurvilinear.h:21
DeDxTools::esConsumes
ESGetTokenH3DDVariant esConsumes(std::string const &Reccord, edm::ConsumesCollector &)
Definition: DeDxTools.cc:283
pixelTrack::Quality::loose
edm::Event
Definition: Event.h:73
AlgebraicSymMatrix55
ROOT::Math::SMatrix< double, 5, 5, ROOT::Math::MatRepSym< double, 5 > > AlgebraicSymMatrix55
Definition: AlgebraicROOTObjects.h:23
edm::InputTag
Definition: InputTag.h:15
alongMomentum
Definition: PropagationDirection.h:4
fit
Definition: CombinedChiSquaredLikelihood.h:6
TrajectoryStateOnSurface::isValid
bool isValid() const
Definition: TrajectoryStateOnSurface.h:54
edm::ConfigurationDescriptions::addWithDefaultLabel
void addWithDefaultLabel(ParameterSetDescription const &psetDescription)
Definition: ConfigurationDescriptions.cc:87
edm::OwnVector< TrackingRecHit >