126 m_maxZ(iConfig.getParameter<double>(
"maxZ")),
127 m_pixelCPE(iConfig.getParameter<
std::
string>(
"pixelCPE")),
129 m_njets(iConfig.getParameter<
int>(
"njets")),
130 m_maxJetEta(iConfig.getParameter<double>(
"maxJetEta")),
131 m_minJetPt(iConfig.getParameter<double>(
"minJetPt")),
133 m_barrel(iConfig.getParameter<bool>(
"barrel")),
134 m_maxSizeX(iConfig.getParameter<double>(
"maxSizeX")),
135 m_maxDeltaPhi(iConfig.getParameter<double>(
"maxDeltaPhi")),
136 m_weight_charge_down(iConfig.getParameter<double>(
"weight_charge_down")),
137 m_weight_charge_up(iConfig.getParameter<double>(
"weight_charge_up")),
138 m_PixelCellHeightOverWidth(iConfig.getParameter<double>(
"PixelCellHeightOverWidth")),
139 m_minSizeY_q(iConfig.getParameter<double>(
"minSizeY_q")),
140 m_maxSizeY_q(iConfig.getParameter<double>(
"maxSizeY_q")),
142 m_weight_dPhi(iConfig.getParameter<double>(
"weight_dPhi")),
143 m_weight_SizeX1(iConfig.getParameter<double>(
"weight_SizeX1")),
144 m_weight_rho_up(iConfig.getParameter<double>(
"weight_rho_up")),
145 m_weight_charge_peak(iConfig.getParameter<double>(
"weight_charge_peak")),
146 m_peakSizeY_q(iConfig.getParameter<double>(
"peakSizeY_q")),
148 m_endCap(iConfig.getParameter<bool>(
"endCap")),
149 m_minJetEta_EC(iConfig.getParameter<double>(
"minJetEta_EC")),
150 m_maxJetEta_EC(iConfig.getParameter<double>(
"maxJetEta_EC")),
151 m_maxDeltaPhi_EC(iConfig.getParameter<double>(
"maxDeltaPhi_EC")),
152 m_EC_weight(iConfig.getParameter<double>(
"EC_weight")),
153 m_weight_dPhi_EC(iConfig.getParameter<double>(
"weight_dPhi_EC")),
155 m_zClusterWidth_step1(iConfig.getParameter<double>(
"zClusterWidth_step1")),
157 m_zClusterWidth_step2(iConfig.getParameter<double>(
"zClusterWidth_step2")),
158 m_zClusterSearchArea_step2(iConfig.getParameter<double>(
"zClusterSearchArea_step2")),
159 m_weightCut_step2(iConfig.getParameter<double>(
"weightCut_step2")),
161 m_zClusterWidth_step3(iConfig.getParameter<double>(
"zClusterWidth_step3")),
162 m_zClusterSearchArea_step3(iConfig.getParameter<double>(
"zClusterSearchArea_step3")),
163 m_weightCut_step3(iConfig.getParameter<double>(
"weightCut_step3")),
165 m_ptWeighting(iConfig.getParameter<bool>(
"ptWeighting")),
166 m_ptWeighting_slope(iConfig.getParameter<double>(
"ptWeighting_slope")),
167 m_ptWeighting_offset(iConfig.getParameter<double>(
"ptWeighting_offset"))
174 produces<reco::VertexCollection>();
187 desc.
add<
double>(
"maxZ",19.0);
188 desc.
add<
int>(
"njets",999);
189 desc.
add<
double>(
"maxJetEta",2.6);
190 desc.
add<
double>(
"minJetPt",40.);
191 desc.
add<
bool>(
"barrel",
true);
192 desc.
add<
double>(
"maxSizeX",2.1);
193 desc.
add<
double>(
"maxDeltaPhi",0.21);
194 desc.
add<
double>(
"PixelCellHeightOverWidth",1.8);
195 desc.
add<
double>(
"weight_charge_down",11.*1000.);
196 desc.
add<
double>(
"weight_charge_up",190.*1000.);
197 desc.
add<
double>(
"maxSizeY_q",2.0);
198 desc.
add<
double>(
"minSizeY_q",-0.6);
199 desc.
add<
double>(
"weight_dPhi",0.13888888);
200 desc.
add<
double>(
"weight_SizeX1",0.88);
201 desc.
add<
double>(
"weight_rho_up",22.);
202 desc.
add<
double>(
"weight_charge_peak",22.*1000.);
203 desc.
add<
double>(
"peakSizeY_q",1.0);
204 desc.
add<
bool>(
"endCap",
true);
205 desc.
add<
double>(
"minJetEta_EC",1.3);
206 desc.
add<
double>(
"maxJetEta_EC",2.6);
207 desc.
add<
double>(
"maxDeltaPhi_EC",0.14);
208 desc.
add<
double>(
"EC_weight",0.008);
209 desc.
add<
double>(
"weight_dPhi_EC",0.064516129);
210 desc.
add<
double>(
"zClusterWidth_step1",2.0);
211 desc.
add<
double>(
"zClusterWidth_step2",0.65);
212 desc.
add<
double>(
"zClusterSearchArea_step2",3.0);
213 desc.
add<
double>(
"weightCut_step2",0.05);
214 desc.
add<
double>(
"zClusterWidth_step3",0.3);
215 desc.
add<
double>(
"zClusterSearchArea_step3",0.55);
216 desc.
add<
double>(
"weightCut_step3",0.1);
217 desc.
add<
bool>(
"ptWeighting",
false);
218 desc.
add<
double>(
"ptWeighting_slope",1/20.);
219 desc.
add<
double>(
"ptWeighting_offset",-1);
220 descriptions.
add(
"fastPrimaryVertexWithWeightsProducer",desc);
228 using namespace reco;
231 const float barrel_lenght=30;
252 selectedJets.push_back(&(*it));
273 std::vector<float> zProjections;
274 std::vector<float> zWeights;
276 for(vector<const reco::Jet*>::iterator jit = selectedJets.begin() ; jit != selectedJets.end() ; jit++)
278 float px=(*jit)->px();
279 float py=(*jit)->py();
280 float pz=(*jit)->pz();
281 float pt=(*jit)->pt();
282 float eta=(*jit)->eta();
283 float jetZOverRho = (*jit)->momentum().Z()/(*jit)->momentum().Rho();
287 DetId id = it->detId();
290 float zmodule = modulepos.
z() - ((modulepos.
x()-beamSpot->
x0())*px+(modulepos.
y()-beamSpot->
y0())*py)/pt * pz/
pt;
292 for(
size_t j = 0 ; j < detset.
size() ; j ++)
324 float z = v.
z() - ((v.
x()-beamSpot->
x0())*px+(v.
y()-beamSpot->
y0())*py)/pt * pz/
pt;
327 zProjections.push_back(z);
330 if(
std::abs(modulepos.
z())<barrel_lenght)
337 float weight_sizeY_up = (sizeY_up-
sizeY)/(sizeY_up-sizeY_peak);
338 float weight_sizeY_down = (sizeY-sizeY_down)/(sizeY_peak-sizeY_down);
339 weight_sizeY_down = weight_sizeY_down *(weight_sizeY_down>0)*(weight_sizeY_down<1);
340 weight_sizeY_up = weight_sizeY_up *(weight_sizeY_up>0)*(weight_sizeY_up<1);
341 float weight_sizeY = weight_sizeY_up + weight_sizeY_down;
344 float rho =
sqrt(v_bs.x()*v_bs.x() + v_bs.y()*v_bs.y());
357 weightCluster_down = weightCluster_down *(weightCluster_down>0)*(weightCluster_down<1);
358 weightCluster_up = weightCluster_up *(weightCluster_up>0)*(weightCluster_up<1);
359 float weight_charge = weightCluster_up + weightCluster_down;
362 weight = weight_dPhi * weight_sizeY * weight_rho * weight_sizeX1 * weight_charge ;
364 else if(
std::abs(modulepos.
z())>barrel_lenght)
372 zWeights.push_back(weight);
383 std::multimap<float,float> zWithW;
385 for(i=0;i<zProjections.size();i++) zWithW.insert(std::pair<float,float>(zProjections[i],zWeights[i]));
387 for(std::multimap<float,float>::iterator it=zWithW.begin(); it!=zWithW.end(); it++,i++) { zProjections[
i]=it->first; zWeights[
i]=it->second; }
391 std::vector<float> zWeightsSquared;
392 for(std::vector<float>::iterator it=zWeights.begin();it!=zWeights.end();it++) {zWeightsSquared.push_back((*it)*(*it));}
399 float centerWMax=res_step3;
404 if(zProjections.size() > 2)
408 e(0, 0) = 0.0015 * 0.0015;
409 e(1, 1) = 0.0015 * 0.0015;
413 auto pOut = std::make_unique<reco::VertexCollection>();
414 pOut->push_back(thePV);
419 e(0, 0) = 0.0015 * 0.0015;
420 e(1, 1) = 0.0015 * 0.0015;
424 auto pOut = std::make_unique<reco::VertexCollection>();
425 pOut->push_back(thePV);
433 const float half_width_peak=1;
434 float nWeightedTot=0;
435 float nWeightedTotPeak=0;
436 for(std::vector<float>::iterator it = zProjections.begin();it!=zProjections.end(); it++)
438 nWeightedTot+=zWeights[it-zProjections.begin()];
439 if((res-half_width_peak)<=(*it) && (*it)<=(res+half_width_peak))
441 nWeightedTotPeak+=zWeights[it-zProjections.begin()];
445 auto zClusterQuality = std::make_unique<float>();
449 *zClusterQuality=nWeightedTotPeak /
sqrt(nWeightedTot/(2*half_width_peak));
GlobalPoint toGlobal(const Point2DBase< Scalar, LocalTag > lp) const
T getParameter(std::string const &) const
const TrackerGeomDet * idToDetUnit(DetId) const
Return the pointer to the GeomDetUnit corresponding to a given DetId.
boost::transform_iterator< IterHelp, const_IdIter > const_iterator
const_iterator end(bool update=false) const
OrphanHandle< PROD > put(std::unique_ptr< PROD > product)
Put a new product.
const double m_weightCut_step2
const double m_weightCut_step3
const double m_weight_charge_down
const double m_weight_dPhi_EC
const double m_maxJetEta_EC
const double m_weight_charge_up
const double m_zClusterWidth_step3
bool getByToken(EDGetToken token, Handle< PROD > &result) const
#define DEFINE_FWK_MODULE(type)
const double m_maxDeltaPhi_EC
edm::EDGetTokenT< reco::BeamSpot > beamSpotToken
Geom::Phi< T > phi() const
static void fillDescriptions(edm::ConfigurationDescriptions &descriptions)
math::Error< dimension >::type Error
covariance error matrix (3x3)
const double m_zClusterWidth_step2
const double m_weight_charge_peak
const double m_PixelCellHeightOverWidth
FastPrimaryVertexWithWeightsProducer(const edm::ParameterSet &)
const Plane & surface() const
The nominal surface of the GeomDet.
const double m_weight_dPhi
virtual void produce(edm::Event &, const edm::EventSetup &)
const double m_ptWeighting_slope
const Surface::PositionType & position() const
The position (origin of the R.F.)
const_iterator begin() const
const double m_weight_SizeX1
const double m_peakSizeY_q
Abs< T >::type abs(const T &t)
math::XYZPoint Point
point in the space
const edm::InputTag m_clusters
ParameterDescriptionBase * add(U const &iLabel, T const &value)
const double m_weight_rho_up
edm::EDGetTokenT< edm::View< reco::Jet > > jetsToken
virtual VLocalValues localParametersV(const SiPixelCluster &cluster, const GeomDetUnit &gd) const
const double m_zClusterSearchArea_step3
T const * product() const
double x(const double z) const
x coordinate of the beeam spot position at a given z value (it takes into account the dxdz slope) ...
void add(std::string const &label, ParameterSetDescription const &psetDescription)
Pixel cluster – collection of neighboring pixels above threshold.
double y(const double z) const
y coordinate of the beeam spot position at a given z value (it takes into account the dydz slope) ...
boost::indirect_iterator< typename seq_t::const_iterator > const_iterator
const double m_maxDeltaPhi
const double m_zClusterSearchArea_step2
const double m_ptWeighting_offset
double y0() const
y coordinate
const double m_maxSizeY_q
const_iterator end() const
float FindPeakFastPV(const std::vector< float > &zProjections, const std::vector< float > &zWeights, const float oldVertex, const float m_zClusterWidth, const float m_zClusterSearchArea, const float m_weightCut)
edm::EDGetTokenT< SiPixelClusterCollectionNew > clustersToken
T const * product() const
const double m_zClusterWidth_step1
const double m_minSizeY_q
const_iterator begin(bool update=false) const
const TrackerGeomDet * idToDet(DetId) const
const double m_minJetEta_EC
double x0() const
x coordinate