CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
List of all members | Public Member Functions | Private Attributes
MuonReSeeder Class Reference
Inheritance diagram for MuonReSeeder:
edm::stream::EDProducer<> edm::stream::EDProducerBase edm::ProducerBase edm::EDConsumerBase edm::ProductRegistryHelper

Public Member Functions

 MuonReSeeder (const edm::ParameterSet &iConfig)
 
virtual void produce (edm::Event &iEvent, const edm::EventSetup &iSetup) override
 
virtual ~MuonReSeeder ()
 
- Public Member Functions inherited from edm::stream::EDProducer<>
 EDProducer ()=default
 
- Public Member Functions inherited from edm::stream::EDProducerBase
 EDProducerBase ()
 
ModuleDescription const & moduleDescription () const
 
virtual ~EDProducerBase ()
 
- Public Member Functions inherited from edm::ProducerBase
 ProducerBase ()
 
void registerProducts (ProducerBase *, ProductRegistry *, ModuleDescription const &)
 
std::function< void(BranchDescription
const &)> 
registrationCallback () const
 used by the fwk to register list of products More...
 
virtual ~ProducerBase ()
 
- Public Member Functions inherited from edm::EDConsumerBase
 EDConsumerBase ()
 
ProductHolderIndexAndSkipBit indexFrom (EDGetToken, BranchType, TypeID const &) const
 
void itemsMayGet (BranchType, std::vector< ProductHolderIndexAndSkipBit > &) const
 
void itemsToGet (BranchType, std::vector< ProductHolderIndexAndSkipBit > &) const
 
std::vector
< ProductHolderIndexAndSkipBit >
const & 
itemsToGetFromEvent () const
 
void labelsForToken (EDGetToken iToken, Labels &oLabels) const
 
void modulesDependentUpon (const std::string &iProcessName, std::vector< const char * > &oModuleLabels) const
 
bool registeredToConsume (ProductHolderIndex, bool, BranchType) const
 
bool registeredToConsumeMany (TypeID const &, BranchType) const
 
void updateLookup (BranchType iBranchType, ProductHolderIndexHelper const &)
 
virtual ~EDConsumerBase ()
 

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::Muon
selector_
 Muon selection. More...
 
edm::EDGetTokenT< edm::View
< reco::Muon > > 
src_
 Labels for input collections. More...
 

Additional Inherited Members

- Public Types inherited from edm::stream::EDProducer<>
typedef CacheContexts< T...> CacheTypes
 
typedef CacheTypes::GlobalCache GlobalCache
 
typedef AbilityChecker< T...> HasAbility
 
typedef
CacheTypes::LuminosityBlockCache 
LuminosityBlockCache
 
typedef
LuminosityBlockContextT
< LuminosityBlockCache,
RunCache, GlobalCache
LuminosityBlockContext
 
typedef
CacheTypes::LuminosityBlockSummaryCache 
LuminosityBlockSummaryCache
 
typedef CacheTypes::RunCache RunCache
 
typedef RunContextT< RunCache,
GlobalCache
RunContext
 
typedef CacheTypes::RunSummaryCache RunSummaryCache
 
- Public Types inherited from edm::stream::EDProducerBase
typedef EDProducerAdaptorBase ModuleType
 
- Public Types inherited from edm::ProducerBase
typedef
ProductRegistryHelper::TypeLabelList 
TypeLabelList
 
- Static Public Member Functions inherited from edm::stream::EDProducerBase
static const std::string & baseType ()
 
static void fillDescriptions (ConfigurationDescriptions &descriptions)
 
static void prevalidate (ConfigurationDescriptions &descriptions)
 
- Protected Member Functions inherited from edm::ProducerBase
void callWhenNewProductsRegistered (std::function< void(BranchDescription const &)> const &func)
 
- Protected Member Functions inherited from edm::EDConsumerBase
template<typename ProductType , BranchType B = InEvent>
EDGetTokenT< ProductType > consumes (edm::InputTag const &tag)
 
EDGetToken consumes (const TypeToGet &id, edm::InputTag const &tag)
 
template<BranchType B>
EDGetToken consumes (TypeToGet const &id, edm::InputTag const &tag)
 
ConsumesCollector consumesCollector ()
 Use a ConsumesCollector to gather consumes information from helper functions. More...
 
template<typename ProductType , BranchType B = InEvent>
void consumesMany ()
 
void consumesMany (const TypeToGet &id)
 
template<BranchType B>
void consumesMany (const TypeToGet &id)
 
template<typename ProductType , BranchType B = InEvent>
EDGetTokenT< ProductType > mayConsume (edm::InputTag const &tag)
 
EDGetToken mayConsume (const TypeToGet &id, edm::InputTag const &tag)
 
template<BranchType B>
EDGetToken mayConsume (const TypeToGet &id, edm::InputTag const &tag)
 

Detailed Description

Definition at line 31 of file MuonReSeeder.cc.

Constructor & Destructor Documentation

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

Definition at line 59 of file MuonReSeeder.cc.

59  :
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)
66 {
67  produces<std::vector<TrajectorySeed> >();
68 }
T getParameter(std::string const &) const
T getUntrackedParameter(std::string const &, T const &) const
bool existsAs(std::string const &parameterName, bool trackiness=true) const
checks if a parameter exists as a given type
Definition: ParameterSet.h:184
TrackTransformer refitter_
Track Transformer.
Definition: MuonReSeeder.cc:55
StringCutObjectSelector< reco::Muon > selector_
Muon selection.
Definition: MuonReSeeder.cc:43
bool debug_
Dump deug information.
Definition: MuonReSeeder.cc:52
int layersToKeep_
How many hits to keep from the muon trajectory.
Definition: MuonReSeeder.cc:46
EDGetTokenT< ProductType > consumes(edm::InputTag const &tag)
bool insideOut_
Do inside-out.
Definition: MuonReSeeder.cc:49
edm::EDGetTokenT< edm::View< reco::Muon > > src_
Labels for input collections.
Definition: MuonReSeeder.cc:40
virtual MuonReSeeder::~MuonReSeeder ( )
inlinevirtual

Definition at line 34 of file MuonReSeeder.cc.

34 { }

Member Function Documentation

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

Implements edm::stream::EDProducerBase.

Definition at line 71 of file MuonReSeeder.cc.

References funct::abs(), alongMomentum, gather_cfg::cout, debug_, end, reco::LeafCandidate::eta(), edm::OwnVector< T, P >::front(), TrackingRecHit::geographicalId(), edm::EventSetup::get(), edm::Event::getByToken(), TrajectoryStateOnSurface::globalPosition(), TrackingRecHit::hit(), i, insideOut_, edm::Ref< C, T, F >::isNull(), TrajectoryStateOnSurface::isValid(), TrackingRecHit::isValid(), layersToKeep_, RPCpg::mu, oppositeToMomentum, dbtoconf::out, PV3DBase< T, PVType, FrameType >::perp(), trajectoryStateTransform::persistentState(), reco::LeafCandidate::phi(), reco::LeafCandidate::pt(), edm::OwnVector< T, P >::push_back(), edm::Event::put(), DetId::rawId(), TrajectoryMeasurement::recHit(), refitter_, fileCollector::seed, selector_, TrackTransformer::setServices(), alcazmumu_cfi::src, src_, relval_parameters_module::step, DetId::subdetId(), reco::Muon::track(), TrackTransformer::transform(), TrajectoryMeasurement::updatedState(), and PV3DBase< T, PVType, FrameType >::z().

71  {
72  using namespace edm;
73  using namespace std;
74 
75  refitter_.setServices(iSetup);
76 
78  iEvent.getByToken(src_, src);
79 
80  //Retrieve tracker topology from geometry
82  iSetup.get<IdealGeometryRecord>().get(tTopo);
83 
84  auto_ptr<vector<TrajectorySeed> > out(new vector<TrajectorySeed>());
85  unsigned int nsrc = src->size();
86  out->reserve(nsrc);
87 
88  for (View<reco::Muon>::const_iterator it = src->begin(), ed = src->end(); it != ed; ++it) {
89  const reco::Muon &mu = *it;
90  if (mu.track().isNull() || !selector_(mu)) continue;
91  std::vector<Trajectory> traj = refitter_.transform(*mu.track());
92  if (traj.size() != 1) continue;
94  const std::vector<TrajectoryMeasurement> & tms = traj.front().measurements();
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() << std::endl;
99  std::cout << "Trajectory is " << (traj.front().direction() == alongMomentum ? "along" : "opposite") << " to momentum, so will start from " << (fromInside ? "inside" : "outside") << std::endl;
100  }
101  const TrajectoryMeasurement & tin = (fromInside ? tms.front() : tms.back());
102  const TrajectoryMeasurement & tou = (fromInside ? tms.front() : tms.back());
103  if (debug_) {
104  std::cout << "IN state: subdetector = " << tin.recHit()->geographicalId().subdetId() << std::endl;
105  std::cout << " global pos Rho " << tin.updatedState().globalPosition().perp() << ", Z " << tin.updatedState().globalPosition().z() << std::endl;
106  std::cout << "OU state: subdetector = " << tou.recHit()->geographicalId().subdetId() << std::endl;
107  std::cout << " global pos Rho " << tou.updatedState().globalPosition().perp() << ", Z " << tou.updatedState().globalPosition().z() << std::endl;
108  }
109  int lastSubdet = 0, lastLayer = -1;
110  for (int i = (fromInside ? 0 : tms.size()-1),
111  end = (fromInside ? tms.size() : -1),
112  step = (fromInside ? +1 : -1),
113  taken = 0; (end-i)*step > 0; i += step) {
114  const TrackingRecHit *lastHit = hit;
115  hit = tms[i].recHit()->hit();
116  if (debug_) std::cout << " considering hit " << i << ": rechit on " << (hit ? hit->geographicalId().rawId() : -1) << std::endl;
117  if (!hit) continue;
118  int subdet = hit->geographicalId().subdetId();
119  int lay = tTopo->layer(hit->geographicalId());
120  if (subdet != lastSubdet || lay != lastLayer) {
121  // I'm on a new layer
122  if (lastHit != 0 && taken == layersToKeep_) {
123  // I've had enough layers, I can stop here
124  hit = lastHit;
125  break;
126  }
127  lastSubdet = subdet; lastLayer = lay;
128  taken++;
129  }
130  seedHits.push_back(*hit);
131  tsos = tms[i].updatedState().isValid() ? tms[i].updatedState() :
132  (abs(i-end) < abs(i) ? tms[i].forwardPredictedState() : tms[i].backwardPredictedState());
133  if (debug_) {
134  std::cout << " hit : subdetector = " << tms[i].recHit()->geographicalId().subdetId() << std::endl;
135  if (hit->isValid()) {
136  std::cout << " global pos Rho " << tms[i].recHit()->globalPosition().perp() << ", Z " << tms[i].recHit()->globalPosition().z() << std::endl;
137  } else {
138  std::cout << " invalid tracking rec hit, so no global position" << std::endl;
139  }
140  std::cout << " state: global pos Rho " << tsos.globalPosition().perp() << ", Z " << tsos.globalPosition().z() << std::endl;
141  }
142  }
143  if (!tsos.isValid()) continue;
145  TrajectorySeed seed(PTraj,std::move(seedHits),insideOut_ ? alongMomentum : oppositeToMomentum);
146  out->push_back(seed);
147  }
148 
149  iEvent.put(out);
150 }
int i
Definition: DBlmapReader.cc:9
boost::indirect_iterator< typename seq_t::const_iterator > const_iterator
Definition: View.h:81
TrackTransformer refitter_
Track Transformer.
Definition: MuonReSeeder.cc:55
T perp() const
Definition: PV3DBase.h:72
ConstRecHitPointer const & recHit() const
bool getByToken(EDGetToken token, Handle< PROD > &result) const
Definition: Event.h:434
StringCutObjectSelector< reco::Muon > selector_
Muon selection.
Definition: MuonReSeeder.cc:43
PTrajectoryStateOnDet persistentState(const TrajectoryStateOnSurface &ts, unsigned int detid)
virtual TrackRef track() const
reference to a Track
Definition: Muon.h:49
GlobalPoint globalPosition() const
bool debug_
Dump deug information.
Definition: MuonReSeeder.cc:52
int layersToKeep_
How many hits to keep from the muon trajectory.
Definition: MuonReSeeder.cc:46
uint32_t rawId() const
get the raw id
Definition: DetId.h:43
void push_back(D *&d)
Definition: OwnVector.h:274
virtual float phi() const GCC11_FINAL
momentum azimuthal angle
bool isNull() const
Checks for null.
Definition: Ref.h:247
OrphanHandle< PROD > put(std::auto_ptr< PROD > product)
Put a new product.
Definition: Event.h:116
T z() const
Definition: PV3DBase.h:64
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
const int mu
Definition: Constants.h:22
#define end
Definition: vmac.h:37
bool insideOut_
Do inside-out.
Definition: MuonReSeeder.cc:49
edm::EDGetTokenT< edm::View< reco::Muon > > src_
Labels for input collections.
Definition: MuonReSeeder.cc:40
virtual void setServices(const edm::EventSetup &)
set the services needed by the TrackTransformer
int subdetId() const
get the contents of the subdetector field (not cast into any detector&#39;s numbering enum) ...
Definition: DetId.h:37
virtual float eta() const GCC11_FINAL
momentum pseudorapidity
tuple out
Definition: dbtoconf.py:99
virtual TrackingRecHit const * hit() const
const T & get() const
Definition: EventSetup.h:55
bool isValid() const
virtual std::vector< Trajectory > transform(const reco::Track &) const
Convert a reco::Track into Trajectory.
tuple cout
Definition: gather_cfg.py:121
TrajectoryStateOnSurface const & updatedState() const
DetId geographicalId() const
virtual float pt() const GCC11_FINAL
transverse momentum
reference front()
Definition: OwnVector.h:349

Member Data Documentation

bool MuonReSeeder::debug_
private

Dump deug information.

Definition at line 52 of file MuonReSeeder.cc.

Referenced by produce().

bool MuonReSeeder::insideOut_
private

Do inside-out.

Definition at line 49 of file MuonReSeeder.cc.

Referenced by produce().

int MuonReSeeder::layersToKeep_
private

How many hits to keep from the muon trajectory.

Definition at line 46 of file MuonReSeeder.cc.

Referenced by produce().

TrackTransformer MuonReSeeder::refitter_
private

Track Transformer.

Definition at line 55 of file MuonReSeeder.cc.

Referenced by produce().

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

Muon selection.

Definition at line 43 of file MuonReSeeder.cc.

Referenced by produce().

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

Labels for input collections.

Definition at line 40 of file MuonReSeeder.cc.

Referenced by produce().