CMS 3D CMS Logo

CosmicTrackingParticleSelector.h
Go to the documentation of this file.
1 #ifndef RecoSelectors_CosmicTrackingParticleSelector_h
2 #define RecoSelectors_CosmicTrackingParticleSelector_h
3 /* \class CosmicTrackingParticleSelector
4  *
5  * \author Yanyan Gao, FNAL
6  *
7  * $Date: 2013/06/24 12:25:14 $
8  * $Revision: 1.5 $
9  *
10  */
22 
27 
33 
36 
38 
40 public:
42  typedef std::vector<const TrackingParticle*> container;
43  typedef container::const_iterator const_iterator;
44 
46 
48  double minRapidity,
49  double maxRapidity,
50  double tip,
51  double lip,
52  int minHit,
53  bool chargedOnly,
54  const std::vector<int>& pdgId = std::vector<int>())
55  : ptMin_(ptMin),
58  tip_(tip),
59  lip_(lip),
60  minHit_(minHit),
62  pdgId_(pdgId) {}
63 
65  : ptMin_(cfg.getParameter<double>("ptMin")),
66  minRapidity_(cfg.getParameter<double>("minRapidity")),
67  maxRapidity_(cfg.getParameter<double>("maxRapidity")),
68  tip_(cfg.getParameter<double>("tip")),
69  lip_(cfg.getParameter<double>("lip")),
70  minHit_(cfg.getParameter<int>("minHit")),
71  chargedOnly_(cfg.getParameter<bool>("chargedOnly")),
72  pdgId_(cfg.getParameter<std::vector<int> >("pdgId")),
73  beamSpotToken_(iC.consumes<reco::BeamSpot>(edm::InputTag("offlineBeamSpot"))) {}
74 
76  selected_.clear();
78  event.getByToken(beamSpotToken_, beamSpot);
79  for (TrackingParticleCollection::const_iterator itp = c->begin(); itp != c->end(); ++itp)
80  if (operator()(TrackingParticleRef(c, itp - c->begin()), beamSpot.product(), event, setup)) {
81  selected_.push_back(&*itp);
82  }
83  }
84 
85  const_iterator begin() const { return selected_.begin(); }
86  const_iterator end() const { return selected_.end(); }
87 
89  simHitsTPAssoc = simHitsTPAssocToSet;
90  }
91 
92  // Operator() performs the selection: e.g. if (tPSelector(tp, bs, event, evtsetup)) {...
94  const reco::BeamSpot* bs,
95  const edm::Event& iEvent,
96  const edm::EventSetup& iSetup) const {
97  if (chargedOnly_ && tpr->charge() == 0)
98  return false; //select only if charge!=0
99  //bool testId = false;
100  //unsigned int idSize = pdgId_.size();
101  //if (idSize==0) testId = true;
102  //else for (unsigned int it=0;it!=idSize;++it){
103  //if (tpr->pdgId()==pdgId_[it]) testId = true;
104  //}
105 
109  iSetup.get<GlobalTrackingGeometryRecord>().get(theGeometry);
110 
112  iSetup.get<IdealMagneticFieldRecord>().get(theMF);
113 
114  GlobalVector finalGV(0, 0, 0);
115  GlobalPoint finalGP(0, 0, 0);
116  GlobalVector momentum(0, 0, 0); //At the PCA
117  GlobalPoint vertex(0, 0, 0); //At the PCA
118  double radius(9999);
119  bool found(false);
120 
121  int ii = 0;
122  DetId::Detector det;
123  int subdet;
124 
125  edm::LogVerbatim("CosmicTrackingParticleSelector")
126  << "TOT Number of PSimHits = " << tpr->numberOfHits()
127  << ", Number of Tracker PSimHits = " << tpr->numberOfTrackerHits() << "\n";
128 
129  if (simHitsTPAssoc.isValid() == 0) {
130  edm::LogError("CosmicTrackingParticleSelector") << "Invalid handle!";
131  return false;
132  }
133  std::pair<TrackingParticleRef, TrackPSimHitRef> clusterTPpairWithDummyTP(
134  tpr, TrackPSimHitRef()); //SimHit is dummy: for simHitTPAssociationListGreater
135  // sorting only the cluster is needed
136  auto range = std::equal_range(simHitsTPAssoc->begin(),
137  simHitsTPAssoc->end(),
138  clusterTPpairWithDummyTP,
140  for (auto ip = range.first; ip != range.second; ++ip) {
141  TrackPSimHitRef it = ip->second;
142  ++ii;
143  const GeomDet* tmpDet = theGeometry->idToDet(DetId(it->detUnitId()));
144  if (!tmpDet) {
145  edm::LogVerbatim("CosmicTrackingParticleSelector")
146  << "***WARNING: PSimHit " << ii << ", no GeomDet for: " << it->detUnitId() << ". Skipping it.";
147  continue;
148  } else {
149  det = DetId(it->detUnitId()).det();
150  subdet = DetId(it->detUnitId()).subdetId();
151  }
152 
153  LocalVector lv = it->momentumAtEntry();
154  Local3DPoint lp = it->localPosition();
155  GlobalVector gv = tmpDet->surface().toGlobal(lv);
156  GlobalPoint gp = tmpDet->surface().toGlobal(lp);
157  edm::LogVerbatim("CosmicTrackingParticleSelector")
158  << "PSimHit " << ii << ", Detector = " << det << ", subdet = " << subdet << "\t Radius = " << gp.perp()
159  << ", z = " << gp.z() << "\t pt = " << gv.perp() << ", pz = " << gv.z();
160  edm::LogVerbatim("CosmicTrackingParticleSelector")
161  << "\t trackId = " << it->trackId() << ", particleType = " << it->particleType()
162  << ", processType = " << it->processType();
163 
164  // discard hits related to low energy debris from the primary particle
165  if (it->processType() != 0)
166  continue;
167 
168  if (gp.perp() < radius) {
169  found = true;
170  radius = gp.perp();
171  finalGV = gv;
172  finalGP = gp;
173  }
174  }
175  edm::LogVerbatim("CosmicTrackingParticleSelector")
176  << "\n"
177  << "FINAL State at InnerMost Hit: Radius = " << finalGP.perp() << ", z = " << finalGP.z()
178  << ", pt = " << finalGV.perp() << ", pz = " << finalGV.z();
179 
180  if (!found)
181  return false;
182  else {
183  FreeTrajectoryState ftsAtProduction(finalGP, finalGV, TrackCharge(tpr->charge()), theMF.product());
184  TSCBLBuilderNoMaterial tscblBuilder;
185  //as in TrackProducerAlgorithm
186  TrajectoryStateClosestToBeamLine tsAtClosestApproach = tscblBuilder(ftsAtProduction, *bs);
187  if (!tsAtClosestApproach.isValid()) {
188  edm::LogVerbatim("CosmicTrackingParticleSelector")
189  << "*** WARNING in CosmicTrackingParticleSelector: tsAtClosestApproach is not valid."
190  << "\n";
191  return false;
192  } else {
193  momentum = tsAtClosestApproach.trackStateAtPCA().momentum();
194  vertex = tsAtClosestApproach.trackStateAtPCA().position();
195 
196  edm::LogVerbatim("CosmicTrackingParticleSelector")
197  << "FINAL State extrapolated at PCA: Radius = " << vertex.perp() << ", z = " << vertex.z()
198  << ", pt = " << momentum.perp() << ", pz = " << momentum.z() << "\n";
199 
200  return (tpr->numberOfTrackerLayers() >= minHit_ && sqrt(momentum.perp2()) >= ptMin_ &&
201  momentum.eta() >= minRapidity_ && momentum.eta() <= maxRapidity_ && sqrt(vertex.perp2()) <= tip_ &&
202  fabs(vertex.z()) <= lip_);
203  }
204  }
205  }
206 
207  size_t size() const { return selected_.size(); }
208 
209 private:
210  double ptMin_;
211  double minRapidity_;
212  double maxRapidity_;
213  double tip_;
214  double lip_;
215  int minHit_;
217  std::vector<int> pdgId_;
220 
222 };
223 
224 #endif
Vector3DBase
Definition: Vector3DBase.h:8
edm::ESHandle::product
T const * product() const
Definition: ESHandle.h:86
TSCBLBuilderNoMaterial.h
FreeTrajectoryState::momentum
GlobalVector momentum() const
Definition: FreeTrajectoryState.h:68
TrajectoryStateClosestToBeamLine
Definition: TrajectoryStateClosestToBeamLine.h:15
FastTimerService_cff.range
range
Definition: FastTimerService_cff.py:34
CosmicTrackingParticleSelector::maxRapidity_
double maxRapidity_
Definition: CosmicTrackingParticleSelector.h:212
electrons_cff.bool
bool
Definition: electrons_cff.py:393
CosmicTrackingParticleSelector::pdgId_
std::vector< int > pdgId_
Definition: CosmicTrackingParticleSelector.h:217
FreeTrajectoryState.h
pwdgSkimBPark_cfi.beamSpot
beamSpot
Definition: pwdgSkimBPark_cfi.py:5
CosmicTrackingParticleSelector::simHitsTPAssoc
edm::Handle< SimHitTPAssociationProducer::SimHitTPAssociationList > simHitsTPAssoc
Definition: CosmicTrackingParticleSelector.h:221
MessageLogger.h
CosmicTrackingParticleSelector::lip_
double lip_
Definition: CosmicTrackingParticleSelector.h:214
TrackCharge
int TrackCharge
Definition: TrackCharge.h:4
TrackerGeometry.h
GeomDet
Definition: GeomDet.h:27
ESHandle.h
align::BeamSpot
Definition: StructureType.h:89
qcdUeDQM_cfi.minRapidity
minRapidity
Definition: qcdUeDQM_cfi.py:24
edm::EDGetTokenT< reco::BeamSpot >
edm
HLT enums.
Definition: AlignableModifier.h:19
qcdUeDQM_cfi.maxRapidity
maxRapidity
Definition: qcdUeDQM_cfi.py:27
CosmicTrackingParticleSelector
Definition: CosmicTrackingParticleSelector.h:39
CosmicTrackingParticleSelector::tip_
double tip_
Definition: CosmicTrackingParticleSelector.h:213
HLT_FULL_cff.InputTag
InputTag
Definition: HLT_FULL_cff.py:89353
ptMin
constexpr float ptMin
Definition: PhotonIDValueMapProducer.cc:155
CosmicTrackingParticleSelector::minRapidity_
double minRapidity_
Definition: CosmicTrackingParticleSelector.h:211
GlobalTrackingGeometryRecord
Definition: GlobalTrackingGeometryRecord.h:17
CosmicTrackingParticleSelector::end
const_iterator end() const
Definition: CosmicTrackingParticleSelector.h:86
CosmicTrackingParticleSelector::collection
TrackingParticleCollection collection
Definition: CosmicTrackingParticleSelector.h:41
reco
fixed size matrix
Definition: AlignmentAlgorithmBase.h:45
FreeTrajectoryState::position
GlobalPoint position() const
Definition: FreeTrajectoryState.h:67
CosmicTrackingParticleSelector::chargedOnly_
bool chargedOnly_
Definition: CosmicTrackingParticleSelector.h:216
newFWLiteAna.found
found
Definition: newFWLiteAna.py:118
edm::Handle
Definition: AssociativeIterator.h:50
singleTopDQM_cfi.setup
setup
Definition: singleTopDQM_cfi.py:37
edm::Ref< TrackingParticleCollection >
qcdUeDQM_cfi.lip
lip
Definition: qcdUeDQM_cfi.py:25
TrajectoryStateClosestToBeamLineBuilder
Definition: TrajectoryStateClosestToBeamLineBuilder.h:14
PV3DBase::z
T z() const
Definition: PV3DBase.h:61
IdealMagneticFieldRecord
Definition: IdealMagneticFieldRecord.h:11
DetId
Definition: DetId.h:17
GeomDet::surface
const Plane & surface() const
The nominal surface of the GeomDet.
Definition: GeomDet.h:37
CosmicTrackingParticleSelector::size
size_t size() const
Definition: CosmicTrackingParticleSelector.h:207
cms::cuda::bs
bs
Definition: HistoContainer.h:127
edm::EventSetup::get
T get() const
Definition: EventSetup.h:80
BeamSpot.h
CosmicTrackingParticleSelector::CosmicTrackingParticleSelector
CosmicTrackingParticleSelector(const edm::ParameterSet &cfg, edm::ConsumesCollector &&iC)
Definition: CosmicTrackingParticleSelector.h:64
Surface.h
TrackerDigiGeometryRecord
Definition: TrackerDigiGeometryRecord.h:15
mathSSE::sqrt
T sqrt(T t)
Definition: SSEVec.h:19
Surface::toGlobal
GlobalPoint toGlobal(const Point2DBase< Scalar, LocalTag > lp) const
Definition: Surface.h:79
reco::BeamSpot
Definition: BeamSpot.h:21
GloballyPositioned.h
IdealMagneticFieldRecord.h
edm::ESHandle< TrackerGeometry >
CosmicTrackingParticleSelector::container
std::vector< const TrackingParticle * > container
Definition: CosmicTrackingParticleSelector.h:42
CosmicTrackingParticleSelector::CosmicTrackingParticleSelector
CosmicTrackingParticleSelector(double ptMin, double minRapidity, double maxRapidity, double tip, double lip, int minHit, bool chargedOnly, const std::vector< int > &pdgId=std::vector< int >())
Definition: CosmicTrackingParticleSelector.h:47
CosmicTrackingParticleSelector::select
void select(const edm::Handle< collection > &c, const edm::Event &event, const edm::EventSetup &setup)
Definition: CosmicTrackingParticleSelector.h:75
CosmicTrackingParticleSelector::selected_
container selected_
Definition: CosmicTrackingParticleSelector.h:218
Point3DBase< float, GlobalTag >
GlobalTrackingGeometryRecord.h
CosmicTrackingParticleSelector::operator()
bool operator()(const TrackingParticleRef tpr, const reco::BeamSpot *bs, const edm::Event &iEvent, const edm::EventSetup &iSetup) const
Definition: CosmicTrackingParticleSelector.h:93
qcdUeDQM_cfi.tip
tip
Definition: qcdUeDQM_cfi.py:23
PbPb_ZMuSkimMuonDPG_cff.tracker
tracker
Definition: PbPb_ZMuSkimMuonDPG_cff.py:60
runTauDisplay.gp
gp
Definition: runTauDisplay.py:431
TrackerDigiGeometryRecord.h
bphysicsOniaDQM_cfi.vertex
vertex
Definition: bphysicsOniaDQM_cfi.py:7
edm::ParameterSet
Definition: ParameterSet.h:47
CosmicTrackingParticleSelector::initEvent
void initEvent(edm::Handle< SimHitTPAssociationProducer::SimHitTPAssociationList > simHitsTPAssocToSet) const
Definition: CosmicTrackingParticleSelector.h:88
Event.h
CosmicTrackingParticleSelector::begin
const_iterator begin() const
Definition: CosmicTrackingParticleSelector.h:85
edmPickEvents.event
event
Definition: edmPickEvents.py:273
PV3DBase::eta
T eta() const
Definition: PV3DBase.h:73
createfilelist.int
int
Definition: createfilelist.py:10
iEvent
int iEvent
Definition: GenABIO.cc:224
trackerHitRTTI::vector
Definition: trackerHitRTTI.h:21
EgammaValidation_cff.pdgId
pdgId
Definition: EgammaValidation_cff.py:118
DetId::Detector
Detector
Definition: DetId.h:24
MagneticField.h
edm::EventSetup
Definition: EventSetup.h:57
HltBtagPostValidation_cff.c
c
Definition: HltBtagPostValidation_cff.py:31
edm::LogError
Log< level::Error, false > LogError
Definition: MessageLogger.h:123
qcdUeDQM_cfi.minHit
minHit
Definition: qcdUeDQM_cfi.py:33
TSCPBuilderNoMaterial.h
get
#define get
InputTag.h
looper.cfg
cfg
Definition: looper.py:297
SimHitTPAssociationProducer.h
TrackingParticle.h
GeomDet.h
std
Definition: JetResolutionObject.h:76
FreeTrajectoryState
Definition: FreeTrajectoryState.h:27
edm::LogVerbatim
Log< level::Info, true > LogVerbatim
Definition: MessageLogger.h:128
TSCBLBuilderNoMaterial
Definition: TSCBLBuilderNoMaterial.h:13
CosmicTrackingParticleSelector::const_iterator
container::const_iterator const_iterator
Definition: CosmicTrackingParticleSelector.h:43
GlobalTrackingGeometry::idToDet
const GeomDet * idToDet(DetId) const override
Definition: GlobalTrackingGeometry.cc:44
CosmicTrackingParticleSelector::beamSpotToken_
edm::EDGetTokenT< reco::BeamSpot > beamSpotToken_
Definition: CosmicTrackingParticleSelector.h:219
CosmicsPD_Skims.radius
radius
Definition: CosmicsPD_Skims.py:135
CosmicTrackingParticleSelector::minHit_
int minHit_
Definition: CosmicTrackingParticleSelector.h:215
TrackPSimHitRef
edm::Ref< edm::PSimHitContainer > TrackPSimHitRef
Definition: PSimHitContainer.h:14
GlobalVector.h
TrackingParticleCollection
std::vector< TrackingParticle > TrackingParticleCollection
Definition: TrackingParticleFwd.h:8
cosmictrackingParticleSelector_cfi.chargedOnly
chargedOnly
Definition: cosmictrackingParticleSelector_cfi.py:5
CosmicTrackingParticleSelector::ptMin_
double ptMin_
Definition: CosmicTrackingParticleSelector.h:210
CosmicTrackingParticleSelector::CosmicTrackingParticleSelector
CosmicTrackingParticleSelector()
Definition: CosmicTrackingParticleSelector.h:45
ConsumesCollector.h
TrajectoryStateClosestToBeamLine::isValid
bool isValid() const
Definition: TrajectoryStateClosestToBeamLine.h:50
TrackingParticleRef
edm::Ref< TrackingParticleCollection > TrackingParticleRef
Definition: TrackingParticleFwd.h:10
TrajectoryStateClosestToBeamLine::trackStateAtPCA
FTS const & trackStateAtPCA() const
Definition: TrajectoryStateClosestToBeamLine.h:32
edm::HandleBase::isValid
bool isValid() const
Definition: HandleBase.h:70
event
Definition: event.py:1
GlobalTrackingGeometry.h
edm::Event
Definition: Event.h:73
GlobalPoint.h
PV3DBase::perp
T perp() const
Definition: PV3DBase.h:69
cuy.ii
ii
Definition: cuy.py:590
edm::ConsumesCollector
Definition: ConsumesCollector.h:45
PV3DBase::perp2
T perp2() const
Definition: PV3DBase.h:68
SimHitTPAssociationProducer::simHitTPAssociationListGreater
static bool simHitTPAssociationListGreater(SimHitTPPair i, SimHitTPPair j)
Definition: SimHitTPAssociationProducer.h:23