31 minTrackHits(iConfig.getParameter<unsigned>(
"minTrackHits")),
32 minTrackPt(iConfig.getParameter<double>(
"minTrackPt")),
34 maxTrackEta(iConfig.getParameter<double>(
"maxTrackEta")),
35 m_calibrationPath(iConfig.getParameter<
string>(
"calibrationPath")),
37 shapetest(iConfig.getParameter<
bool>(
"shapeTest")),
40 lowPtTracksEstimator(iConfig.getParameter<
edm::
ParameterSet>(
"lowPtTracksEstimatorParameters")),
42 produces<reco::DeDxHitInfoCollection>();
43 produces<reco::DeDxHitInfoAss>();
44 produces<edm::ValueMap<int>>(
"prescale");
49 edm::LogError(
"DeDxHitsProducer") <<
"No Pixel Hits NOR Strip Hits will be saved. Running this module is useless";
70 auto resultdedxHitColl = std::make_unique<reco::DeDxHitInfoCollection>();
79 bool passPt = (
track.pt() >=
minTrackPt), passLowDeDx =
false, passHighDeDx =
false, pass = passPt;
87 pass = passHighDeDx || passLowDeDx;
95 auto const& trajParams =
track.extra()->trajParams();
97 for (
unsigned int h = 0;
h <
track.recHitsSize();
h++) {
102 auto trackDirection = trajParams[
h].direction();
103 float cosine = trackDirection.z() / trackDirection.mag();
109 std::vector<DeDxHit>
hits;
111 for (
unsigned int i = 0,
n = hitDeDxInfo.
size();
i <
n; ++
i) {
120 std::sort(
hits.begin(),
hits.end(), std::less<DeDxHit>());
139 indices.push_back(resultdedxHitColl->size());
140 resultdedxHitColl->push_back(hitDeDxInfo);
147 auto dedxMatch = std::make_unique<reco::DeDxHitInfoAss>(dedxHitCollHandle);
153 auto dedxPrescale = std::make_unique<edm::ValueMap<int>>();
165 auto const& thit = static_cast<BaseTrackerRecHit const&>(*
recHit);
171 auto const& clus = thit.firstClusterRef();
175 if (clus.isPixel()) {
179 const auto* detUnit =
recHit->detUnit();
180 if (detUnit ==
nullptr)
183 float chargeAbs = clus.pixelCluster().charge();
184 hitDeDxInfo.
addHit(chargeAbs, pathLen, thit.geographicalId(), hitLocalPos, clus.pixelCluster());
185 }
else if (clus.isStrip() && !thit.isMatched()) {
189 const auto* detUnit =
recHit->detUnit();
190 if (detUnit ==
nullptr)
195 hitDeDxInfo.
addHit(chargeAbs, pathLen, thit.geographicalId(), hitLocalPos, clus.stripCluster());
196 }
else if (clus.isStrip() && thit.isMatched()) {
204 if (detUnitM ==
nullptr)
213 if (detUnitS ==
nullptr)