59 void endJob()
override;
116 produceHFhits_ = iConfig.
getParameter<
bool>(
"produceHFhits");
117 produceHFtowers_ = iConfig.
getParameter<
bool>(
"produceHFtowers");
118 produceEcalhits_ = iConfig.
getParameter<
bool>(
"produceEcalhits");
119 produceZDChits_ = iConfig.
getParameter<
bool>(
"produceZDChits");
120 produceETmidRap_ = iConfig.
getParameter<
bool>(
"produceETmidRapidity");
121 producePixelhits_ = iConfig.
getParameter<
bool>(
"producePixelhits");
122 produceTracks_ = iConfig.
getParameter<
bool>(
"produceTracks");
123 producePixelTracks_ = iConfig.
getParameter<
bool>(
"producePixelTracks");
125 midRapidityRange_ = iConfig.
getParameter<
double>(
"midRapidityRange");
126 trackPtCut_ = iConfig.
getParameter<
double>(
"trackPtCut");
127 trackEtaCut_ = iConfig.
getParameter<
double>(
"trackEtaCut");
133 if (produceHFtowers_ || produceETmidRap_)
136 if (produceEcalhits_) {
140 if (produceZDChits_) {
144 if (producePixelhits_) {
149 if (produceTracks_) {
153 if (producePixelTracks_)
156 reuseAny_ = iConfig.
getParameter<
bool>(
"reUseCentrality");
163 produces<Centrality>();
166 CentralityProducer::~CentralityProducer() {
177 if (producePixelhits_)
179 if (produceEcalhits_)
181 if (producePixelhits_)
184 auto creco = std::make_unique<Centrality>();
188 iEvent.getByToken(reuseTag_, inputCentrality);
190 if (produceHFhits_) {
191 creco->etHFhitSumPlus_ = 0;
192 creco->etHFhitSumMinus_ = 0;
196 for (
size_t ihit = 0; ihit <
hits->size(); ++ihit) {
197 const HFRecHit& rechit = (*hits)[ihit];
198 if (rechit.
id().
ieta() > 0)
199 creco->etHFhitSumPlus_ += rechit.
energy();
200 if (rechit.
id().
ieta() < 0)
201 creco->etHFhitSumMinus_ += rechit.
energy();
210 if (produceHFtowers_ || produceETmidRap_) {
211 creco->etHFtowerSumPlus_ = 0;
212 creco->etHFtowerSumMinus_ = 0;
213 creco->etHFtowerSumECutPlus_ = 0;
214 creco->etHFtowerSumECutMinus_ = 0;
215 creco->etMidRapiditySum_ = 0;
221 for (
size_t i = 0;
i <
towers->size(); ++
i) {
225 if (produceHFtowers_) {
227 creco->etHFtowerSumPlus_ +=
tower.pt();
228 if (
tower.energy() > 1.5)
229 creco->etHFtowerSumECutPlus_ +=
tower.pt();
231 creco->etHFtruncatedPlus_ +=
tower.pt();
234 creco->etHFtowerSumMinus_ +=
tower.pt();
235 if (
tower.energy() > 1.5)
236 creco->etHFtowerSumECutMinus_ +=
tower.pt();
237 if (
eta < -hfEtaCut_)
238 creco->etHFtruncatedMinus_ +=
tower.pt();
250 if (produceETmidRap_) {
252 creco->etMidRapiditySum_ +=
tower.pt() / (midRapidityRange_ * 2.);
253 }
else if (reuseAny_)
266 if (produceEcalhits_) {
267 creco->etEESumPlus_ = 0;
268 creco->etEESumMinus_ = 0;
274 iEvent.getByToken(srcEBhits_, ebHits);
275 iEvent.getByToken(srcEEhits_, eeHits);
277 for (
unsigned int i = 0;
i < ebHits->
size(); ++
i) {
280 double et =
hit.energy() * (
pos.perp() /
pos.mag());
281 creco->etEBSum_ +=
et;
284 for (
unsigned int i = 0;
i < eeHits->
size(); ++
i) {
287 double et =
hit.energy() * (
pos.perp() /
pos.mag());
289 creco->etEESumPlus_ +=
et;
291 creco->etEESumMinus_ +=
et;
297 creco->etEESumPlus_ = inputCentrality->
EtEESumPlus();
298 creco->etEBSum_ = inputCentrality->
EtEBSum();
302 if (producePixelhits_) {
303 creco->pixelMultiplicity_ = 0;
306 iEvent.getByToken(srcPixelhits_, rchts);
310 int nPixel_minus = 0;
317 recHitIterator != recHitRange.
end();
322 dynamic_cast<const PixelGeomDetUnit*>(tGeo->idToDet(
recHit->geographicalId()));
325 double eta = rechitPos.eta();
326 double abeta =
std::abs(rechitPos.eta());
327 int clusterSize =
recHit->cluster()->size();
328 unsigned layer = topo_->layer(detId);
331 if (layer == 1 && 18 * abeta - 40 > clusterSize)
333 if (layer == 2 && 6 * abeta - 7.2 > clusterSize)
335 if ((layer == 3 || layer == 4) && 4 * abeta - 2.4 > clusterSize)
346 creco->pixelMultiplicity_ = nPixel;
347 creco->pixelMultiplicityPlus_ = nPixel_plus;
348 creco->pixelMultiplicityMinus_ = nPixel_minus;
357 if (produceTracks_) {
361 double vxError = -999.;
362 double vyError = -999.;
363 double vzError = -999.;
367 iEvent.getByToken(srcVertex_, recoVertices);
368 unsigned int daughter = 0;
371 for (
unsigned int i = 0;
i < recoVertices->size(); ++
i) {
372 daughter = (*recoVertices)[
i].tracksSize();
373 if (daughter > (*recoVertices)[greatestvtx].tracksSize())
377 if (!recoVertices->empty()) {
378 vx = (*recoVertices)[greatestvtx].position().x();
379 vy = (*recoVertices)[greatestvtx].position().y();
380 vz = (*recoVertices)[greatestvtx].position().z();
381 vxError = (*recoVertices)[greatestvtx].xError();
382 vyError = (*recoVertices)[greatestvtx].yError();
383 vzError = (*recoVertices)[greatestvtx].zError();
392 double trackCounter = 0;
393 double trackCounterEta = 0;
394 double trackCounterEtaPt = 0;
396 for (
unsigned int i = 0;
i <
tracks->size(); ++
i) {
398 if (useQuality_ && !
track.quality(trackQuality_))
401 if (
track.pt() > trackPtCut_)
405 if (
track.pt() > trackPtCut_)
411 double dzsigma2 =
track.dzError() *
track.dzError() + vzError * vzError;
413 double dxysigma2 =
track.dxyError() *
track.dxyError() + vxError * vyError;
415 const double pterrcut = 0.1;
416 const double dzrelcut = 3.0;
417 const double dxyrelcut = 3.0;
420 track.ptError() /
track.pt() < pterrcut &&
dz *
dz < dzrelcut * dzrelcut * dzsigma2 &&
421 dxy *
dxy < dxyrelcut * dxyrelcut * dxysigma2) {
426 creco->trackMultiplicity_ =
nTracks;
427 creco->ntracksPtCut_ = trackCounter;
428 creco->ntracksEtaCut_ = trackCounterEta;
429 creco->ntracksEtaPtCut_ = trackCounterEtaPt;
433 creco->trackMultiplicity_ = inputCentrality->
Ntracks();
440 if (producePixelTracks_) {
442 iEvent.getByToken(srcPixelTracks_, pixeltracks);
443 int nPixelTracks = pixeltracks->size();
444 int nPixelTracksPlus = 0;
445 int nPixelTracksMinus = 0;
447 for (
auto const&
track : *pixeltracks) {
453 creco->nPixelTracks_ = nPixelTracks;
454 creco->nPixelTracksPlus_ = nPixelTracksPlus;
455 creco->nPixelTracksMinus_ = nPixelTracksMinus;
464 if (produceZDChits_) {
465 creco->zdcSumPlus_ = 0;
466 creco->zdcSumMinus_ = 0;
469 bool zdcAvailable =
iEvent.getByToken(srcZDChits_,
hits);
471 for (
size_t ihit = 0; ihit <
hits->size(); ++ihit) {
477 creco->zdcSumPlus_ += rechit.
energy();
484 creco->zdcSumMinus_ += rechit.
energy();
489 creco->zdcSumPlus_ = -9;
490 creco->zdcSumMinus_ = -9;
494 creco->zdcSumMinus_ = inputCentrality->
zdcSumMinus();
495 creco->zdcSumPlus_ = inputCentrality->
zdcSumPlus();
506 void CentralityProducer::endJob() {}