CMS 3D CMS Logo

List of all members | Public Member Functions | Private Attributes
MuonReSeeder Class Reference
Inheritance diagram for MuonReSeeder:
edm::stream::EDProducer<>

Public Member Functions

 MuonReSeeder (const edm::ParameterSet &iConfig)
 
void produce (edm::Event &iEvent, const edm::EventSetup &iSetup) override
 
 ~MuonReSeeder () override
 
- Public Member Functions inherited from edm::stream::EDProducer<>
 EDProducer ()=default
 
 EDProducer (const EDProducer &)=delete
 
bool hasAbilityToProduceInBeginLumis () const final
 
bool hasAbilityToProduceInBeginProcessBlocks () const final
 
bool hasAbilityToProduceInBeginRuns () const final
 
bool hasAbilityToProduceInEndLumis () const final
 
bool hasAbilityToProduceInEndProcessBlocks () const final
 
bool hasAbilityToProduceInEndRuns () const final
 
const EDProduceroperator= (const EDProducer &)=delete
 

Private Attributes

bool debug_
 Dump deug information. More...
 
bool insideOut_
 Do inside-out. More...
 
int layersToKeep_
 How many hits to keep from the muon trajectory. More...
 
TrackTransformer refitter_
 Track Transformer. More...
 
StringCutObjectSelector< reco::Muonselector_
 Muon selection. More...
 
edm::EDGetTokenT< edm::View< reco::Muon > > src_
 Labels for input collections. More...
 
const edm::ESGetToken< TrackerTopology, TrackerTopologyRcdtTopoToken_
 

Additional Inherited Members

- Public Types inherited from edm::stream::EDProducer<>
using CacheTypes = CacheContexts< T... >
 
using GlobalCache = typename CacheTypes::GlobalCache
 
using HasAbility = AbilityChecker< T... >
 
using InputProcessBlockCache = typename CacheTypes::InputProcessBlockCache
 
using LuminosityBlockCache = typename CacheTypes::LuminosityBlockCache
 
using LuminosityBlockContext = LuminosityBlockContextT< LuminosityBlockCache, RunCache, GlobalCache >
 
using LuminosityBlockSummaryCache = typename CacheTypes::LuminosityBlockSummaryCache
 
using RunCache = typename CacheTypes::RunCache
 
using RunContext = RunContextT< RunCache, GlobalCache >
 
using RunSummaryCache = typename CacheTypes::RunSummaryCache
 

Detailed Description

Definition at line 30 of file MuonReSeeder.cc.

Constructor & Destructor Documentation

◆ MuonReSeeder()

MuonReSeeder::MuonReSeeder ( const edm::ParameterSet iConfig)
explicit

Definition at line 58 of file MuonReSeeder.cc.

59  : src_(consumes<edm::View<reco::Muon>>(iConfig.getParameter<edm::InputTag>("src"))),
61  selector_(iConfig.existsAs<std::string>("cut") ? iConfig.getParameter<std::string>("cut") : "", true),
62  layersToKeep_(iConfig.getParameter<int32_t>("layersToKeep")),
63  insideOut_(iConfig.getParameter<bool>("insideOut")),
64  debug_(iConfig.getUntrackedParameter<bool>("debug", false)),
65  refitter_(iConfig, consumesCollector()) {
66  produces<std::vector<TrajectorySeed>>();
67 }
ESGetTokenH3DDVariant esConsumes(std::string const &Record, edm::ConsumesCollector &)
Definition: DeDxTools.cc:283
T getParameter(std::string const &) const
Definition: ParameterSet.h:303
TrackTransformer refitter_
Track Transformer.
Definition: MuonReSeeder.cc:55
StringCutObjectSelector< reco::Muon > selector_
Muon selection.
Definition: MuonReSeeder.cc:43
bool existsAs(std::string const &parameterName, bool trackiness=true) const
checks if a parameter exists as a given type
Definition: ParameterSet.h:171
bool debug_
Dump deug information.
Definition: MuonReSeeder.cc:52
int layersToKeep_
How many hits to keep from the muon trajectory.
Definition: MuonReSeeder.cc:46
T getUntrackedParameter(std::string const &, T const &) const
const edm::ESGetToken< TrackerTopology, TrackerTopologyRcd > tTopoToken_
Definition: MuonReSeeder.cc:40
bool insideOut_
Do inside-out.
Definition: MuonReSeeder.cc:49
edm::EDGetTokenT< edm::View< reco::Muon > > src_
Labels for input collections.
Definition: MuonReSeeder.cc:39

◆ ~MuonReSeeder()

MuonReSeeder::~MuonReSeeder ( )
inlineoverride

Definition at line 33 of file MuonReSeeder.cc.

33 {}

Member Function Documentation

◆ produce()

void MuonReSeeder::produce ( edm::Event iEvent,
const edm::EventSetup iSetup 
)
override

Definition at line 69 of file MuonReSeeder.cc.

References funct::abs(), alongMomentum, gather_cfg::cout, debug_, mps_fire::end, edm::OwnVector< T, P >::front(), edm::EventSetup::getData(), TrajectoryStateOnSurface::globalPosition(), mps_fire::i, iEvent, insideOut_, TrajectoryStateOnSurface::isValid(), TrackerTopology::layer(), layersToKeep_, eostools::move(), amptDefaultParameters_cff::mu, oppositeToMomentum, MillePedeFileConverter_cfg::out, PV3DBase< T, PVType, FrameType >::perp(), trajectoryStateTransform::persistentState(), edm::OwnVector< T, P >::push_back(), TrajectoryMeasurement::recHit(), refitter_, fileCollector::seed, selector_, TrackTransformer::setServices(), TrackRefitter_38T_cff::src, src_, TrackTransformer::transform(), tTopoToken_, TrajectoryMeasurement::updatedState(), and PV3DBase< T, PVType, FrameType >::z().

69  {
70  using namespace edm;
71  using namespace std;
72 
73  refitter_.setServices(iSetup);
74 
76  iEvent.getByToken(src_, src);
77 
78  //Retrieve tracker topology from geometry
79  const TrackerTopology &tTopo = iSetup.getData(tTopoToken_);
80 
81  auto out = std::make_unique<std::vector<TrajectorySeed>>();
82  unsigned int nsrc = src->size();
83  out->reserve(nsrc);
84 
85  for (View<reco::Muon>::const_iterator it = src->begin(), ed = src->end(); it != ed; ++it) {
86  const reco::Muon &mu = *it;
87  if (mu.track().isNull() || !selector_(mu))
88  continue;
89  std::vector<Trajectory> traj = refitter_.transform(*mu.track());
90  if (traj.size() != 1)
91  continue;
93  const std::vector<TrajectoryMeasurement> &tms = traj.front().measurements();
95  const TrackingRecHit *hit = nullptr;
96  bool fromInside = (insideOut_ == (traj.front().direction() == alongMomentum));
97  if (debug_) {
98  std::cout << "Considering muon of pt " << mu.pt() << ", eta = " << mu.eta() << ", phi = " << mu.phi()
99  << std::endl;
100  std::cout << "Trajectory is " << (traj.front().direction() == alongMomentum ? "along" : "opposite")
101  << " to momentum, so will start from " << (fromInside ? "inside" : "outside") << std::endl;
102  }
103  const TrajectoryMeasurement &tin = (fromInside ? tms.front() : tms.back());
104  const TrajectoryMeasurement &tou = (fromInside ? tms.front() : tms.back());
105  if (debug_) {
106  std::cout << "IN state: subdetector = " << tin.recHit()->geographicalId().subdetId() << std::endl;
107  std::cout << " global pos Rho " << tin.updatedState().globalPosition().perp() << ", Z "
108  << tin.updatedState().globalPosition().z() << std::endl;
109  std::cout << "OU state: subdetector = " << tou.recHit()->geographicalId().subdetId() << std::endl;
110  std::cout << " global pos Rho " << tou.updatedState().globalPosition().perp() << ", Z "
111  << tou.updatedState().globalPosition().z() << std::endl;
112  }
113  int lastSubdet = 0, lastLayer = -1;
114  for (int i = (fromInside ? 0 : tms.size() - 1),
115  end = (fromInside ? tms.size() : -1),
116  step = (fromInside ? +1 : -1),
117  taken = 0;
118  (end - i) * step > 0;
119  i += step) {
120  const TrackingRecHit *lastHit = hit;
121  hit = tms[i].recHit()->hit();
122  if (debug_)
123  std::cout << " considering hit " << i << ": rechit on " << (hit ? hit->geographicalId().rawId() : -1)
124  << std::endl;
125  if (!hit)
126  continue;
127  int subdet = hit->geographicalId().subdetId();
128  int lay = tTopo.layer(hit->geographicalId());
129  if (subdet != lastSubdet || lay != lastLayer) {
130  // I'm on a new layer
131  if (lastHit != nullptr && taken == layersToKeep_) {
132  // I've had enough layers, I can stop here
133  hit = lastHit;
134  break;
135  }
136  lastSubdet = subdet;
137  lastLayer = lay;
138  taken++;
139  }
140  seedHits.push_back(*hit);
141  tsos = tms[i].updatedState().isValid()
142  ? tms[i].updatedState()
143  : (abs(i - end) < abs(i) ? tms[i].forwardPredictedState() : tms[i].backwardPredictedState());
144  if (debug_) {
145  std::cout << " hit : subdetector = " << tms[i].recHit()->geographicalId().subdetId() << std::endl;
146  if (hit->isValid()) {
147  std::cout << " global pos Rho " << tms[i].recHit()->globalPosition().perp() << ", Z "
148  << tms[i].recHit()->globalPosition().z() << std::endl;
149  } else {
150  std::cout << " invalid tracking rec hit, so no global position" << std::endl;
151  }
152  std::cout << " state: global pos Rho " << tsos.globalPosition().perp() << ", Z "
153  << tsos.globalPosition().z() << std::endl;
154  }
155  }
156  if (!tsos.isValid())
157  continue;
158  PTrajectoryStateOnDet const &PTraj = trajectoryStateTransform::persistentState(tsos, hit->geographicalId().rawId());
160  out->push_back(seed);
161  }
162 
163  iEvent.put(std::move(out));
164 }
T perp() const
Definition: PV3DBase.h:69
TrackTransformer refitter_
Track Transformer.
Definition: MuonReSeeder.cc:55
void setServices(const edm::EventSetup &) override
set the services needed by the TrackTransformer
T z() const
Definition: PV3DBase.h:61
StringCutObjectSelector< reco::Muon > selector_
Muon selection.
Definition: MuonReSeeder.cc:43
PTrajectoryStateOnDet persistentState(const TrajectoryStateOnSurface &ts, unsigned int detid)
bool debug_
Dump deug information.
Definition: MuonReSeeder.cc:52
int layersToKeep_
How many hits to keep from the muon trajectory.
Definition: MuonReSeeder.cc:46
unsigned int layer(const DetId &id) const
void push_back(D *&d)
Definition: OwnVector.h:326
int iEvent
Definition: GenABIO.cc:224
GlobalPoint globalPosition() const
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
const edm::ESGetToken< TrackerTopology, TrackerTopologyRcd > tTopoToken_
Definition: MuonReSeeder.cc:40
bool getData(T &iHolder) const
Definition: EventSetup.h:122
bool insideOut_
Do inside-out.
Definition: MuonReSeeder.cc:49
edm::EDGetTokenT< edm::View< reco::Muon > > src_
Labels for input collections.
Definition: MuonReSeeder.cc:39
TrajectoryStateOnSurface const & updatedState() const
HLT enums.
boost::indirect_iterator< typename seq_t::const_iterator > const_iterator
Definition: View.h:86
step
Definition: StallMonitor.cc:98
std::vector< Trajectory > transform(const reco::Track &) const override
Convert a reco::Track into Trajectory.
reference front()
Definition: OwnVector.h:459
def move(src, dest)
Definition: eostools.py:511
ConstRecHitPointer const & recHit() const

Member Data Documentation

◆ debug_

bool MuonReSeeder::debug_
private

Dump deug information.

Definition at line 52 of file MuonReSeeder.cc.

Referenced by produce().

◆ insideOut_

bool MuonReSeeder::insideOut_
private

Do inside-out.

Definition at line 49 of file MuonReSeeder.cc.

Referenced by produce().

◆ layersToKeep_

int MuonReSeeder::layersToKeep_
private

How many hits to keep from the muon trajectory.

Definition at line 46 of file MuonReSeeder.cc.

Referenced by produce().

◆ refitter_

TrackTransformer MuonReSeeder::refitter_
private

Track Transformer.

Definition at line 55 of file MuonReSeeder.cc.

Referenced by produce().

◆ selector_

StringCutObjectSelector<reco::Muon> MuonReSeeder::selector_
private

Muon selection.

Definition at line 43 of file MuonReSeeder.cc.

Referenced by produce().

◆ src_

edm::EDGetTokenT<edm::View<reco::Muon> > MuonReSeeder::src_
private

Labels for input collections.

Definition at line 39 of file MuonReSeeder.cc.

Referenced by produce().

◆ tTopoToken_

const edm::ESGetToken<TrackerTopology, TrackerTopologyRcd> MuonReSeeder::tTopoToken_
private

Definition at line 40 of file MuonReSeeder.cc.

Referenced by produce().