Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -204,7 +204,7 @@
)
trackingMkFitDetachedQuadStep.toReplaceWith(detachedQuadStepTrackCandidates, mkFitOutputConverter_cfi.mkFitOutputConverter.clone(
seeds = 'detachedQuadStepSeeds',
mkfitSeeds = 'detachedQuadStepTrackCandidatesMkFitSeeds',
mkFitSeeds = 'detachedQuadStepTrackCandidatesMkFitSeeds',
tracks = 'detachedQuadStepTrackCandidatesMkFit',
))

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -232,7 +232,7 @@
)
trackingMkFitDetachedTripletStep.toReplaceWith(detachedTripletStepTrackCandidates, mkFitOutputConverter_cfi.mkFitOutputConverter.clone(
seeds = 'detachedTripletStepSeeds',
mkfitSeeds = 'detachedTripletStepTrackCandidatesMkFitSeeds',
mkFitSeeds = 'detachedTripletStepTrackCandidatesMkFitSeeds',
tracks = 'detachedTripletStepTrackCandidatesMkFit',
))

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -233,7 +233,7 @@
)
trackingMkFitHighPtTripletStep.toReplaceWith(highPtTripletStepTrackCandidates, mkFitOutputConverter_cfi.mkFitOutputConverter.clone(
seeds = 'highPtTripletStepSeeds',
mkfitSeeds = 'highPtTripletStepTrackCandidatesMkFitSeeds',
mkFitSeeds = 'highPtTripletStepTrackCandidatesMkFitSeeds',
tracks = 'highPtTripletStepTrackCandidatesMkFit',
))

Expand Down
12 changes: 8 additions & 4 deletions RecoTracker/IterativeTracking/python/InitialStep_cff.py
Original file line number Diff line number Diff line change
Expand Up @@ -224,12 +224,16 @@

from Configuration.ProcessModifiers.trackingMkFitInitialStep_cff import trackingMkFitInitialStep
from RecoTracker.MkFit.mkFitGeometryESProducer_cfi import mkFitGeometryESProducer
import RecoTracker.MkFit.mkFitHitConverter_cfi as mkFitHitConverter_cfi
import RecoTracker.MkFit.mkFitSiPixelHitConverter_cfi as mkFitSiPixelHitConverter_cfi
import RecoTracker.MkFit.mkFitSiStripHitConverter_cfi as mkFitSiStripHitConverter_cfi
import RecoTracker.MkFit.mkFitEventOfHitsProducer_cfi as mkFitEventOfHitsProducer_cfi
import RecoTracker.MkFit.mkFitSeedConverter_cfi as mkFitSeedConverter_cfi
import RecoTracker.MkFit.mkFitIterationConfigESProducer_cfi as mkFitIterationConfigESProducer_cfi
import RecoTracker.MkFit.mkFitProducer_cfi as mkFitProducer_cfi
import RecoTracker.MkFit.mkFitOutputConverter_cfi as mkFitOutputConverter_cfi
mkFitHits = mkFitHitConverter_cfi.mkFitHitConverter.clone() # TODO: figure out better place for this module?
mkFitSiPixelHits = mkFitSiPixelHitConverter_cfi.mkFitSiPixelHitConverter.clone() # TODO: figure out better place for this module?
mkFitSiStripHits = mkFitSiStripHitConverter_cfi.mkFitSiStripHitConverter.clone() # TODO: figure out better place for this module?
mkFitEventOfHits = mkFitEventOfHitsProducer_cfi.mkFitEventOfHitsProducer.clone() # TODO: figure out better place for this module?
initialStepTrackCandidatesMkFitSeeds = mkFitSeedConverter_cfi.mkFitSeedConverter.clone(
seeds = 'initialStepSeeds',
)
Expand All @@ -243,7 +247,7 @@
)
trackingMkFitInitialStep.toReplaceWith(initialStepTrackCandidates, mkFitOutputConverter_cfi.mkFitOutputConverter.clone(
seeds = 'initialStepSeeds',
mkfitSeeds = 'initialStepTrackCandidatesMkFitSeeds',
mkFitSeeds = 'initialStepTrackCandidatesMkFitSeeds',
tracks = 'initialStepTrackCandidatesMkFit',
))

Expand Down Expand Up @@ -423,7 +427,7 @@

from Configuration.ProcessModifiers.trackingMkFitCommon_cff import trackingMkFitCommon
_InitialStepTask_trackingMkFitCommon = InitialStepTask.copy()
_InitialStepTask_trackingMkFitCommon.add(mkFitHits, mkFitGeometryESProducer)
_InitialStepTask_trackingMkFitCommon.add(mkFitSiPixelHits, mkFitSiStripHits, mkFitEventOfHits, mkFitGeometryESProducer)
trackingMkFitCommon.toReplaceWith(InitialStepTask, _InitialStepTask_trackingMkFitCommon)

_InitialStepTask_trackingMkFit = InitialStepTask.copy()
Expand Down
2 changes: 1 addition & 1 deletion RecoTracker/IterativeTracking/python/LowPtQuadStep_cff.py
Original file line number Diff line number Diff line change
Expand Up @@ -196,7 +196,7 @@
)
trackingMkFitLowPtQuadStep.toReplaceWith(lowPtQuadStepTrackCandidates, mkFitOutputConverter_cfi.mkFitOutputConverter.clone(
seeds = 'lowPtQuadStepSeeds',
mkfitSeeds = 'lowPtQuadStepTrackCandidatesMkFitSeeds',
mkFitSeeds = 'lowPtQuadStepTrackCandidatesMkFitSeeds',
tracks = 'lowPtQuadStepTrackCandidatesMkFit',
))

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -260,7 +260,7 @@
)
trackingMkFitLowPtTripletStep.toReplaceWith(lowPtTripletStepTrackCandidates, mkFitOutputConverter_cfi.mkFitOutputConverter.clone(
seeds = 'lowPtTripletStepSeeds',
mkfitSeeds = 'lowPtTripletStepTrackCandidatesMkFitSeeds',
mkFitSeeds = 'lowPtTripletStepTrackCandidatesMkFitSeeds',
tracks = 'lowPtTripletStepTrackCandidatesMkFit',
))

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -310,7 +310,7 @@
)
trackingMkFitMixedTripletStep.toReplaceWith(mixedTripletStepTrackCandidates, mkFitOutputConverter_cfi.mkFitOutputConverter.clone(
seeds = 'mixedTripletStepSeeds',
mkfitSeeds = 'mixedTripletStepTrackCandidatesMkFitSeeds',
mkFitSeeds = 'mixedTripletStepTrackCandidatesMkFitSeeds',
tracks = 'mixedTripletStepTrackCandidatesMkFit',
))

Expand Down
2 changes: 1 addition & 1 deletion RecoTracker/IterativeTracking/python/PixelLessStep_cff.py
Original file line number Diff line number Diff line change
Expand Up @@ -303,7 +303,7 @@
)
trackingMkFitPixelLessStep.toReplaceWith(pixelLessStepTrackCandidates, mkFitOutputConverter_cfi.mkFitOutputConverter.clone(
seeds = 'pixelLessStepSeeds',
mkfitSeeds = 'pixelLessStepTrackCandidatesMkFitSeeds',
mkFitSeeds = 'pixelLessStepTrackCandidatesMkFitSeeds',
tracks = 'pixelLessStepTrackCandidatesMkFit',
))

Expand Down
2 changes: 1 addition & 1 deletion RecoTracker/IterativeTracking/python/TobTecStep_cff.py
Original file line number Diff line number Diff line change
Expand Up @@ -287,7 +287,7 @@
)
trackingMkFitTobTecStep.toReplaceWith(tobTecStepTrackCandidates, mkFitOutputConverter_cfi.mkFitOutputConverter.clone(
seeds = 'tobTecStepSeeds',
mkfitSeeds = 'tobTecStepTrackCandidatesMkFitSeeds',
mkFitSeeds = 'tobTecStepTrackCandidatesMkFitSeeds',
tracks = 'tobTecStepTrackCandidatesMkFit',
))

Expand Down
48 changes: 47 additions & 1 deletion RecoTracker/MkFit/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -30,4 +30,50 @@ tracker detector. Support for the phase2 tracker will be added later.
These can be used with e.g.
```bash
$ runTheMatrix.py -l <workflow(s)> --apply 2 --command "--procModifiers trackingMkFit --customise RecoTracker/MkFit/customizeInitialStepToMkFit.customizeInitialStepOnly"
```
```

## Description of configuration parameters

### Iteration configuration [class IterationConfig]

* *m_track_algorithm:* CMSSW track algorithm (used internally for reporting and consistency checks)
* *m_requires_seed_hit_sorting:* do hits on seed tracks need to be sorted (required for seeds that include strip layers)
* *m_require_quality_filter:* is additional post-processing required for result tracks
* *m_params:* IterationParams structure for this iteration
* *m_layer_configs:* std::vector of per-layer parameters

### Iteration parameters [class IterationParams]

* *nlayers_per_seed:* internal mkFit parameter used for standalone validation
* *maxCandsPerSeed:* maximum number of concurrent track candidates per given seed
* *maxHolesPerCand:* maximum number of allowed holes on a candidate
* *maxConsecHoles:* maximum number of allowed consecutive holes on a candidate
* *chi2Cut:* chi2 cut for accepting a new hit
* *chi2CutOverlap:* chi2 cut for accepting an overlap hit
* *pTCutOverlap:* pT cut below which the overlap hits are not picked up

#### Seed cleaning params (based on elliptical dR-dz cut)

* *c_ptthr_hpt:* pT threshold used to tighten seed cleaning requirements
* *c_drmax_bh:* dR cut used for seed tracks with std::fabs(eta)<0.9 and pT > c_ptthr_hpt
* *c_dzmax_bh:* dz cut used for seed tracks with std::fabs(eta)<0.9 and pT > c_ptthr_hpt
* *c_drmax_eh:* dR cut used for seed tracks with std::fabs(eta)>0.9 and pT > c_ptthr_hpt
* *c_dzmax_eh:* dz cut used for seed tracks with std::fabs(eta)>0.9 and pT > c_ptthr_hpt
* *c_drmax_bl:* dR cut used for seed tracks with std::fabs(eta)<0.9 and pT < c_ptthr_hpt
* *c_dzmax_bl:* dz cut used for seed tracks with std::fabs(eta)<0.9 and pT < c_ptthr_hpt
* *c_drmax_el:* dR cut used for seed tracks with std::fabs(eta)>0.9 and pT < c_ptthr_hpt
* *c_dzmax_el:* dz cut used for seed tracks with std::fabs(eta)>0.9 and pT < c_ptthr_hpt

#### Duplicate cleaning parameters

* *minHitsQF:* min number of hits on track candidate to apply duplicate cleaning based on fraction of shared hits
* *fracSharedHits:* min fraction of shared hits to determine duplicate track candidate

### Per-layer parameters [class IterationLayerConfig]

* *m_select_min_dphi, m_select_max_dphi:* geometry-driven dphi baseline selection window cut
* *m_select_min_dq, m_select_max_dq:* geometry-driven dr (endcap) / dz (barrel) baseline selection window cut
* *c_dp_[012]:* dphi selection window cut (= [0]*1/pT + [1]*std::fabs(theta-pi/2) + [2])
* *c_dp_sf:* additional scaling factor for dphi cut
* *c_dq_[012]:* dr (endcap) / dz (barrel) selection window cut (= [0]*1/pT + [1]*std::fabs(theta-pi/2) + [2])
* *c_dq_sf:* additional scaling factor for dr (endcap) / dz (barrel) cut
10 changes: 3 additions & 7 deletions RecoTracker/MkFit/interface/MkFitClusterIndexToHit.h
Original file line number Diff line number Diff line change
Expand Up @@ -9,16 +9,12 @@ class MkFitClusterIndexToHit {
public:
MkFitClusterIndexToHit() = default;

std::vector<TrackingRecHit const *> &pixelHits() { return pixelHits_; }
std::vector<TrackingRecHit const *> const &pixelHits() const { return pixelHits_; }

std::vector<TrackingRecHit const *> &outerHits() { return outerHits_; }
std::vector<TrackingRecHit const *> const &outerHits() const { return outerHits_; }
std::vector<TrackingRecHit const*>& hits() { return hits_; }
std::vector<TrackingRecHit const*> const& hits() const { return hits_; }

private:
// Indexed by cluster index
std::vector<TrackingRecHit const *> pixelHits_;
std::vector<TrackingRecHit const *> outerHits_;
std::vector<TrackingRecHit const*> hits_;
};

#endif
36 changes: 36 additions & 0 deletions RecoTracker/MkFit/interface/MkFitEventOfHits.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
#ifndef RecoTracker_MkFit_MkFitEventOfHits_h
#define RecoTracker_MkFit_MkFitEventOfHits_h

#include <memory>

namespace mkfit {
class EventOfHits;
}

/**
* The mkfit::EventOfHits is a container of mkfit::LayerOfHits
* structures that mkFit uses to group (and index) hits. Having them
* grouped together allows mkFit to pass them easily around top-level
* steering functions.
*
* It has some conceptual similarities to MeasurementTrackerEvent.
*/
class MkFitEventOfHits {
public:
MkFitEventOfHits();
MkFitEventOfHits(std::unique_ptr<mkfit::EventOfHits>);
~MkFitEventOfHits();

MkFitEventOfHits(MkFitEventOfHits const&) = delete;
MkFitEventOfHits& operator=(MkFitEventOfHits const&) = delete;
MkFitEventOfHits(MkFitEventOfHits&&);
MkFitEventOfHits& operator=(MkFitEventOfHits&&);

mkfit::EventOfHits& get() { return *eventOfHits_; }
mkfit::EventOfHits const& get() const { return *eventOfHits_; }

private:
std::unique_ptr<mkfit::EventOfHits> eventOfHits_;
};

#endif
4 changes: 4 additions & 0 deletions RecoTracker/MkFit/interface/MkFitGeometry.h
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
#ifndef RecoTracker_MkFit_MkFitGeometry_h
#define RecoTracker_MkFit_MkFitGeometry_h

#include "DataFormats/DetId/interface/DetId.h"

#include <memory>
#include <unordered_map>
#include <vector>
Expand Down Expand Up @@ -28,13 +30,15 @@ class MkFitGeometry {
std::unique_ptr<mkfit::IterationsInfo> iterationsInfo);
~MkFitGeometry();

int mkFitLayerNumber(DetId detId) const;
mkfit::LayerNumberConverter const& layerNumberConverter() const { return *lnc_; }
mkfit::TrackerInfo const& trackerInfo() const { return *trackerInfo_; }
mkfit::IterationsInfo const& iterationsInfo() const { return *iterationsInfo_; }
const std::vector<const DetLayer*>& detLayers() const { return dets_; }
unsigned int uniqueIdInLayer(int layer, unsigned int detId) const { return detIdToShortId_.at(layer).at(detId); }

private:
const TrackerTopology* ttopo_;
std::unique_ptr<mkfit::LayerNumberConverter> lnc_; // for pimpl pattern
std::unique_ptr<mkfit::TrackerInfo> trackerInfo_;
std::unique_ptr<mkfit::IterationsInfo> iterationsInfo_; // only temporarily here, to be moved into proper place later
Expand Down
38 changes: 7 additions & 31 deletions RecoTracker/MkFit/interface/MkFitHitWrapper.h
Original file line number Diff line number Diff line change
Expand Up @@ -7,54 +7,30 @@
#include <vector>

namespace mkfit {
class EventOfHits;
class TrackerInfo;
class Hit;
using HitVec = std::vector<Hit>;
} // namespace mkfit

class MkFitHitWrapper {
public:
MkFitHitWrapper();
MkFitHitWrapper(mkfit::TrackerInfo const& trackerInfo);
~MkFitHitWrapper();

MkFitHitWrapper(MkFitHitWrapper const&) = delete;
MkFitHitWrapper& operator=(MkFitHitWrapper const&) = delete;
MkFitHitWrapper(MkFitHitWrapper&&);
MkFitHitWrapper& operator=(MkFitHitWrapper&&);

mkfit::EventOfHits& eventOfHits() { return *eventOfHits_; }
mkfit::EventOfHits const& eventOfHits() const { return *eventOfHits_; }
void setClustersID(edm::ProductID id) { clustersID_ = id; }
edm::ProductID clustersID() const { return clustersID_; }

void setPixelClustersID(edm::ProductID id) { pixelClustersID_ = id; }
edm::ProductID pixelClustersID() const { return pixelClustersID_; }

void setOuterClustersID(edm::ProductID id) { outerClustersID_ = id; }
edm::ProductID outerClustersID() const { return outerClustersID_; }

mkfit::HitVec& pixelHits() { return *pixelHits_; }
mkfit::HitVec const& pixelHits() const { return *pixelHits_; }

mkfit::HitVec& outerHits() { return *outerHits_; }
mkfit::HitVec const& outerHits() const { return *outerHits_; }

std::vector<float>& stripClusterCharge() { return stripClusterCharge_; }
void stripClusterChargeCut(float minThreshold, std::vector<bool>& mask) const;
mkfit::HitVec& hits() { return hits_; }
mkfit::HitVec const& hits() const { return hits_; }

private:
std::unique_ptr<mkfit::EventOfHits> eventOfHits_;

// using unique_ptr to guarantee the address of the HitVec doesn't change in moves
// EvenfOfHits relies on that
// Vectors are indexed by the cluster index
std::unique_ptr<mkfit::HitVec> pixelHits_;
std::unique_ptr<mkfit::HitVec> outerHits_;

std::vector<float> stripClusterCharge_;

edm::ProductID pixelClustersID_;
edm::ProductID outerClustersID_;
// Vector is indexed by the cluster index
mkfit::HitVec hits_;
edm::ProductID clustersID_;
};

#endif
1 change: 1 addition & 0 deletions RecoTracker/MkFit/plugins/BuildFile.xml
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
<use name="DataFormats/TrackReco"/>
<use name="DataFormats/TrackerCommon"/>
<use name="DataFormats/TrackerRecHit2D"/>
<use name="DataFormats/TrackingRecHit"/>
<use name="DataFormats/TrajectorySeed"/>
<use name="FWCore/Framework"/>
<use name="FWCore/ParameterSet"/>
Expand Down
Loading