CMS 3D CMS Logo

FastPrimaryVertexProducer.cc
Go to the documentation of this file.
1 // -*- C++ -*-
2 //
3 // Package: FastPrimaryVertexProducer
4 // Class: FastPrimaryVertexProducer
5 //
13 //
14 // Original Author: Andrea RIZZI
15 // Created: Thu Dec 22 14:51:44 CET 2011
16 //
17 //
18 
19 // system include files
20 #include <memory>
21 #include <vector>
22 // user include files
28 
33 
36 
46 
50 
54 #define HaveMtv
55 #define HaveFsmw
56 #define HaveDivisive
57 #ifdef HaveMtv
59 #endif
60 #ifdef HaveFsmw
62 #endif
63 #ifdef HaveDivisive
65 #endif
66 
67 using namespace std;
68 
69 //
70 // class declaration
71 //
72 
74 public:
76 
77 private:
78  void produce(edm::StreamID, edm::Event&, const edm::EventSetup&) const override;
83  double m_maxZ;
84  double m_maxSizeX;
85  double m_maxDeltaPhi;
87 };
88 
90  m_clusters = consumes<SiPixelClusterCollectionNew>(iConfig.getParameter<edm::InputTag>("clusters"));
91  m_jets = consumes<edm::View<reco::Jet> >(iConfig.getParameter<edm::InputTag>("jets"));
92  m_beamSpot = consumes<reco::BeamSpot>(iConfig.getParameter<edm::InputTag>("beamSpot"));
93  m_pixelCPE = iConfig.getParameter<std::string>("pixelCPE");
94  m_maxZ = iConfig.getParameter<double>("maxZ");
95  m_maxSizeX = iConfig.getParameter<double>("maxSizeX");
96  m_maxDeltaPhi = iConfig.getParameter<double>("maxDeltaPhi");
97  m_clusterLength = iConfig.getParameter<double>("clusterLength");
98  produces<reco::VertexCollection>();
99 }
100 
102  using namespace edm;
103  using namespace reco;
104  using namespace std;
105 
107  iEvent.getByToken(m_clusters, cH);
109 
111  iEvent.getByToken(m_jets, jH);
112  const edm::View<reco::Jet>& jets = *jH.product();
113 
115  for (edm::View<reco::Jet>::const_iterator it = jets.begin(); it != jets.end(); it++) {
116  if (it->pt() > 40 && fabs(it->eta()) < 1.6) {
117  const CaloJet* ca = dynamic_cast<const CaloJet*>(&(*it));
118  if (ca == nullptr)
119  abort();
120  selectedJets.push_back(*ca);
121  // std::cout << "Jet eta,phi,pt: "<< it->eta() << "," << it->phi() << "," << it->pt() << std::endl;
122  }
123  }
124 
127  iSetup.get<TkPixelCPERecord>().get(m_pixelCPE, pe);
128  pp = pe.product();
129 
131  iEvent.getByToken(m_beamSpot, beamSpot);
132 
135  const TrackerGeometry* trackerGeometry = tracker.product();
136 
137  float lengthBmodule = 6.66; //cm
138  std::vector<float> zProjections;
139  for (CaloJetCollection::const_iterator jit = selectedJets.begin(); jit != selectedJets.end(); jit++) {
140  float px = jit->px();
141  float py = jit->py();
142  float pz = jit->pz();
143  float pt = jit->pt();
144 
145  float jetZOverRho = jit->momentum().Z() / jit->momentum().Rho();
146  int minSizeY = fabs(2. * jetZOverRho) - 1;
147  int maxSizeY = fabs(2. * jetZOverRho) + 2;
148  if (fabs(jit->eta()) > 1.6) {
149  minSizeY = 1;
150  }
151 
153  it++) //Loop on pixel modules with clusters
154  {
155  DetId id = it->detId();
156  const edmNew::DetSet<SiPixelCluster>& detset = (*it);
157  Point3DBase<float, GlobalTag> modulepos = trackerGeometry->idToDet(id)->position();
158  float zmodule = modulepos.z() -
159  ((modulepos.x() - beamSpot->x0()) * px + (modulepos.y() - beamSpot->y0()) * py) / pt * pz / pt;
160  if ((fabs(deltaPhi(jit->momentum().Phi(), modulepos.phi())) < m_maxDeltaPhi * 2) &&
161  (fabs(zmodule) < (m_maxZ + lengthBmodule / 2))) {
162  for (size_t j = 0; j < detset.size(); j++) // Loop on pixel clusters on this module
163  {
164  const SiPixelCluster& aCluster = detset[j];
165  if (aCluster.sizeX() < m_maxSizeX && aCluster.sizeY() >= minSizeY && aCluster.sizeY() <= maxSizeY) {
166  Point3DBase<float, GlobalTag> v = trackerGeometry->idToDet(id)->surface().toGlobal(
167  pp->localParametersV(aCluster, (*trackerGeometry->idToDetUnit(id)))[0].first);
168  GlobalPoint v_bs(v.x() - beamSpot->x0(), v.y() - beamSpot->y0(), v.z());
169  if (fabs(deltaPhi(jit->momentum().Phi(), v_bs.phi())) < m_maxDeltaPhi) {
170  float z = v.z() - ((v.x() - beamSpot->x0()) * px + (v.y() - beamSpot->y0()) * py) / pt * pz / pt;
171  if (fabs(z) < m_maxZ) {
172  zProjections.push_back(z);
173  }
174  }
175  } //if compatible cluster
176  } // loop on module hits
177  } // if compatible module
178  } // loop on pixel modules
179 
180  } // loop on selected jets
181  std::sort(zProjections.begin(), zProjections.end());
182 
183  std::vector<float>::iterator itCenter = zProjections.begin();
184  std::vector<float>::iterator itLeftSide = zProjections.begin();
185  std::vector<float>::iterator itRightSide = zProjections.begin();
186  std::vector<int> counts;
187  float zCluster = m_clusterLength / 2.0; //cm
188  int max = 0;
189  std::vector<float>::iterator left, right;
190  for (; itCenter != zProjections.end(); itCenter++) {
191  while (itLeftSide != zProjections.end() && (*itCenter - *itLeftSide) > zCluster)
192  itLeftSide++;
193  while (itRightSide != zProjections.end() && (*itRightSide - *itCenter) < zCluster)
194  itRightSide++;
195 
196  int n = itRightSide - itLeftSide;
197  // std::cout << "algo :"<< *itCenter << " " << itCenter-zProjections.begin() << " dists: " << (*itCenter - *itLeftSide) << " " << (*itRightSide - *itCenter) << " count: " << n << std::endl;
198  counts.push_back(n);
199  if (n > max) {
200  max = n;
201  left = itLeftSide;
202  }
203  if (n >= max) {
204  max = n;
205  right = itRightSide;
206  // std::cout << "algo :"<< i << " " << j << " " << *itCenter << " " << itCenter-zProjections.begin() << " dists: " << (*itCenter - *itLeftSide) << " " << (*itRightSide - *itCenter) << " count: " << n << std::endl;
207  }
208  }
209 
210  float res = 0;
211  if (!zProjections.empty()) {
212  res = *(left + (right - left) / 2);
213  // std::cout << "RES " << res << std::endl;
215  e(0, 0) = 0.0015 * 0.0015;
216  e(1, 1) = 0.0015 * 0.0015;
217  e(2, 2) = 1.5 * 1.5;
219  Vertex thePV(p, e, 1, 1, 0);
220  auto pOut = std::make_unique<reco::VertexCollection>();
221  pOut->push_back(thePV);
222  iEvent.put(std::move(pOut));
223  } else {
224  // std::cout << "DUMMY " << res << std::endl;
225 
227  e(0, 0) = 0.0015 * 0.0015;
228  e(1, 1) = 0.0015 * 0.0015;
229  e(2, 2) = 1.5 * 1.5;
231  Vertex thePV(p, e, 0, 0, 0);
232  auto pOut = std::make_unique<reco::VertexCollection>();
233  pOut->push_back(thePV);
234  iEvent.put(std::move(pOut));
235  }
236 }
237 
238 //define this as a plug-in
GeomDet::position
const Surface::PositionType & position() const
The position (origin of the R.F.)
Definition: GeomDet.h:43
TrackerGeometry::idToDet
const TrackerGeomDet * idToDet(DetId) const override
Definition: TrackerGeometry.cc:193
edm::ESHandle::product
T const * product() const
Definition: ESHandle.h:86
edm::StreamID
Definition: StreamID.h:30
TrivialWeightEstimator.h
PixelClusterParameterEstimator
Definition: PixelClusterParameterEstimator.h:15
CaloJetCollection.h
reco::CaloJet
Jets made from CaloTowers.
Definition: CaloJet.h:27
Cluster1DMerger.h
CaloJet.h
PileupSummaryInfo.h
pwdgSkimBPark_cfi.beamSpot
beamSpot
Definition: pwdgSkimBPark_cfi.py:5
LumiMonitor_cff.pixelClusters
pixelClusters
Definition: LumiMonitor_cff.py:10
dqmiodumpmetadata.n
n
Definition: dqmiodumpmetadata.py:28
TrackerGeometry.h
edm::Handle::product
T const * product() const
Definition: Handle.h:70
FastPrimaryVertexProducer::m_clusters
edm::EDGetTokenT< SiPixelClusterCollectionNew > m_clusters
Definition: FastPrimaryVertexProducer.cc:79
ESHandle.h
FastPrimaryVertexProducer::m_beamSpot
edm::EDGetTokenT< reco::BeamSpot > m_beamSpot
Definition: FastPrimaryVertexProducer.cc:81
PV3DBase::x
T x() const
Definition: PV3DBase.h:59
DiDispStaMuonMonitor_cfi.pt
pt
Definition: DiDispStaMuonMonitor_cfi.py:39
edm::EDGetTokenT
Definition: EDGetToken.h:33
multPhiCorr_741_25nsDY_cfi.py
py
Definition: multPhiCorr_741_25nsDY_cfi.py:12
edm
HLT enums.
Definition: AlignableModifier.h:19
reco::Vertex::Error
math::Error< dimension >::type Error
covariance error matrix (3x3)
Definition: Vertex.h:44
AlCaHLTBitMon_ParallelJobs.p
p
Definition: AlCaHLTBitMon_ParallelJobs.py:153
PixelClusterParameterEstimator.h
SiPixelCluster.h
edmNew::DetSetVector::const_iterator
boost::transform_iterator< IterHelp, const_IdIter > const_iterator
Definition: DetSetVectorNew.h:231
TkPixelCPERecord
Definition: TkPixelCPERecord.h:18
TrackingRecHitFwd.h
singleTopDQM_cfi.jets
jets
Definition: singleTopDQM_cfi.py:42
SiPixelCluster
Pixel cluster – collection of neighboring pixels above threshold.
Definition: SiPixelCluster.h:27
reco
fixed size matrix
Definition: AlignmentAlgorithmBase.h:45
FastPrimaryVertexProducer::produce
void produce(edm::StreamID, edm::Event &, const edm::EventSetup &) const override
Definition: FastPrimaryVertexProducer.cc:101
findQualityFiles.v
v
Definition: findQualityFiles.py:179
FastPrimaryVertexProducer::m_clusterLength
double m_clusterLength
Definition: FastPrimaryVertexProducer.cc:86
MtvClusterizer1D.h
FastPrimaryVertexProducer::m_jets
edm::EDGetTokenT< edm::View< reco::Jet > > m_jets
Definition: FastPrimaryVertexProducer.cc:80
edm::Handle
Definition: AssociativeIterator.h:50
edmNew::DetSet::size
size_type size() const
Definition: DetSetNew.h:68
GenParticle.h
TrackerGeometry::idToDetUnit
const TrackerGeomDet * idToDetUnit(DetId) const override
Return the pointer to the GeomDetUnit corresponding to a given DetId.
Definition: TrackerGeometry.cc:183
PV3DBase::z
T z() const
Definition: PV3DBase.h:61
DetId
Definition: DetId.h:17
GeomDet::surface
const Plane & surface() const
The nominal surface of the GeomDet.
Definition: GeomDet.h:37
MakerMacros.h
SiPixelCluster::sizeY
int sizeY() const
Definition: SiPixelCluster.h:128
Track.h
edm::EventSetup::get
T get() const
Definition: EventSetup.h:73
DEFINE_FWK_MODULE
#define DEFINE_FWK_MODULE(type)
Definition: MakerMacros.h:16
BeamSpot.h
SiPixelRawToDigiRegional_cfi.deltaPhi
deltaPhi
Definition: SiPixelRawToDigiRegional_cfi.py:9
TrackerDigiGeometryRecord
Definition: TrackerDigiGeometryRecord.h:15
Surface::toGlobal
GlobalPoint toGlobal(const Point2DBase< Scalar, LocalTag > lp) const
Definition: Surface.h:79
edm::ESHandle
Definition: DTSurvey.h:22
edmNew::DetSet
Definition: DetSetNew.h:22
FastPrimaryVertexProducer::m_maxDeltaPhi
double m_maxDeltaPhi
Definition: FastPrimaryVertexProducer.cc:85
DivisiveClusterizer1D.h
Point3DBase< float, GlobalTag >
SiPixelRecHit.h
edm::global::EDProducer
Definition: EDProducer.h:32
AlCaHLTBitMon_QueryRunRegistry.string
string
Definition: AlCaHLTBitMon_QueryRunRegistry.py:256
Vertex.h
FastPrimaryVertexProducer::m_pixelCPE
std::string m_pixelCPE
Definition: FastPrimaryVertexProducer.cc:82
PbPb_ZMuSkimMuonDPG_cff.tracker
tracker
Definition: PbPb_ZMuSkimMuonDPG_cff.py:60
edm::View
Definition: CaloClusterFwd.h:14
TrackerDigiGeometryRecord.h
edm::ParameterSet
Definition: ParameterSet.h:36
Event.h
SiStripPI::max
Definition: SiStripPayloadInspectorHelper.h:169
PV3DBase::y
T y() const
Definition: PV3DBase.h:60
iEvent
int iEvent
Definition: GenABIO.cc:224
reco::CaloJetCollection
std::vector< CaloJet > CaloJetCollection
collection of CaloJet objects
Definition: CaloJetCollection.h:15
edm::EventSetup
Definition: EventSetup.h:57
FastPrimaryVertexProducer
Definition: FastPrimaryVertexProducer.cc:73
FastPrimaryVertexProducer::FastPrimaryVertexProducer
FastPrimaryVertexProducer(const edm::ParameterSet &)
Definition: FastPrimaryVertexProducer.cc:89
get
#define get
res
Definition: Electron.h:6
VertexFwd.h
edm::ParameterSet::getParameter
T getParameter(std::string const &) const
multPhiCorr_741_25nsDY_cfi.px
px
Definition: multPhiCorr_741_25nsDY_cfi.py:10
edmNew::DetSetVector
Definition: DetSetNew.h:13
FastPrimaryVertexProducer::m_maxSizeX
double m_maxSizeX
Definition: FastPrimaryVertexProducer.cc:84
reco::Vertex::Point
math::XYZPoint Point
point in the space
Definition: Vertex.h:40
eostools.move
def move(src, dest)
Definition: eostools.py:511
std
Definition: JetResolutionObject.h:76
Frameworkfwd.h
dqmiodumpmetadata.counts
counts
Definition: dqmiodumpmetadata.py:25
edm::View::const_iterator
boost::indirect_iterator< typename seq_t::const_iterator > const_iterator
Definition: View.h:86
TkPixelCPERecord.h
objectSelection_cff.selectedJets
selectedJets
Definition: objectSelection_cff.py:99
FsmwClusterizer1D.h
ParameterSet.h
createTree.pp
pp
Definition: createTree.py:17
Clusterizer1DCommons.h
EDProducer.h
dqmiolumiharvest.j
j
Definition: dqmiolumiharvest.py:66
SiPixelCluster::sizeX
int sizeX() const
Definition: SiPixelCluster.h:125
edm::Event
Definition: Event.h:73
FastPrimaryVertexProducer::m_maxZ
double m_maxZ
Definition: FastPrimaryVertexProducer.cc:83
edm::InputTag
Definition: InputTag.h:15
PV3DBase::phi
Geom::Phi< T > phi() const
Definition: PV3DBase.h:66
reco::Vertex
Definition: Vertex.h:35
deltaPhi.h
MillePedeFileConverter_cfg.e
e
Definition: MillePedeFileConverter_cfg.py:37
TrackerGeometry
Definition: TrackerGeometry.h:14