diff --git a/DataFormats/HeavyIonEvent/interface/Centrality.h b/DataFormats/HeavyIonEvent/interface/Centrality.h
index 4dede35aeca48..b04bcba322b2b 100644
--- a/DataFormats/HeavyIonEvent/interface/Centrality.h
+++ b/DataFormats/HeavyIonEvent/interface/Centrality.h
@@ -23,6 +23,9 @@ namespace reco { class Centrality {
double EtHFtowerSum() const {return etHFtowerSumPlus_ + etHFtowerSumMinus_;}
double EtHFtowerSumPlus() const {return etHFtowerSumPlus_;}
double EtHFtowerSumMinus() const {return etHFtowerSumMinus_;}
+ double EtHFtowerSumECut() const {return etHFtowerSumECutPlus_ + etHFtowerSumECutMinus_;}
+ double EtHFtowerSumECutPlus() const {return etHFtowerSumECutPlus_;}
+ double EtHFtowerSumECutMinus() const {return etHFtowerSumECutMinus_;}
double EtHFtruncated() const {return etHFtruncatedPlus_ + etHFtruncatedMinus_;}
double EtHFtruncatedPlus() const {return etHFtruncatedPlus_;}
double EtHFtruncatedMinus() const {return etHFtruncatedMinus_;}
@@ -37,11 +40,15 @@ namespace reco { class Centrality {
double EtEcalSum() const {return etEBSum_ + EtEESum();}
double EtEcaltruncated() const {return etEBtruncated_ + EtEEtruncated();}
double multiplicityPixel() const {return pixelMultiplicity_;}
+ double multiplicityPixelPlus() const {return pixelMultiplicityPlus_;}
+ double multiplicityPixelMinus() const {return pixelMultiplicityMinus_;}
double Ntracks() const {return trackMultiplicity_;}
double NtracksPtCut() const {return ntracksPtCut_;}
double NtracksEtaCut() const {return ntracksEtaCut_;}
double NtracksEtaPtCut() const {return ntracksEtaPtCut_;}
double NpixelTracks() const {return nPixelTracks_;}
+ double NpixelTracksPlus() const {return nPixelTracksPlus_;}
+ double NpixelTracksMinus() const {return nPixelTracksMinus_;}
double zdcSum() const {return zdcSumPlus_ + zdcSumMinus_;}
double zdcSumPlus() const {return zdcSumPlus_;}
@@ -54,10 +61,12 @@ namespace reco { class Centrality {
double etHFhitSumPlus_;
double etHFtowerSumPlus_;
+ double etHFtowerSumECutPlus_;
double etHFtruncatedPlus_;
double etHFhitSumMinus_;
double etHFtowerSumMinus_;
+ double etHFtowerSumECutMinus_;
double etHFtruncatedMinus_;
double etEESumPlus_;
@@ -68,6 +77,8 @@ namespace reco { class Centrality {
double etEBtruncated_;
double pixelMultiplicity_;
+ double pixelMultiplicityPlus_;
+ double pixelMultiplicityMinus_;
double trackMultiplicity_;
double zdcSumPlus_;
double zdcSumMinus_;
@@ -76,6 +87,8 @@ namespace reco { class Centrality {
double ntracksEtaCut_;
double ntracksEtaPtCut_;
double nPixelTracks_;
+ double nPixelTracksPlus_;
+ double nPixelTracksMinus_;
};
diff --git a/DataFormats/HeavyIonEvent/src/Centrality.cc b/DataFormats/HeavyIonEvent/src/Centrality.cc
index d41f75cf01e1b..9d2e68f9d5bbb 100644
--- a/DataFormats/HeavyIonEvent/src/Centrality.cc
+++ b/DataFormats/HeavyIonEvent/src/Centrality.cc
@@ -13,9 +13,11 @@ value_(d),
label_(label),
etHFhitSumPlus_(0),
etHFtowerSumPlus_(0),
+etHFtowerSumECutPlus_(0),
etHFtruncatedPlus_(0),
etHFhitSumMinus_(0),
etHFtowerSumMinus_(0),
+etHFtowerSumECutMinus_(0),
etHFtruncatedMinus_(0),
etEESumPlus_(0),
etEEtruncatedPlus_(0),
@@ -24,6 +26,8 @@ etEEtruncatedMinus_(0),
etEBSum_(0),
etEBtruncated_(0),
pixelMultiplicity_(0),
+pixelMultiplicityPlus_(0),
+pixelMultiplicityMinus_(0),
trackMultiplicity_(0),
zdcSumPlus_(0),
zdcSumMinus_(0),
@@ -31,7 +35,9 @@ etMidRapiditySum_(0),
ntracksPtCut_(0),
ntracksEtaCut_(0),
ntracksEtaPtCut_(0),
-nPixelTracks_(0)
+nPixelTracks_(0),
+nPixelTracksPlus_(0),
+nPixelTracksMinus_(0)
{
}
diff --git a/DataFormats/HeavyIonEvent/src/classes_def.xml b/DataFormats/HeavyIonEvent/src/classes_def.xml
index e4b11146b4336..adab47f24cf59 100644
--- a/DataFormats/HeavyIonEvent/src/classes_def.xml
+++ b/DataFormats/HeavyIonEvent/src/classes_def.xml
@@ -3,7 +3,8 @@
-
+
+
diff --git a/RecoHI/HiCentralityAlgos/plugins/CentralityProducer.cc b/RecoHI/HiCentralityAlgos/plugins/CentralityProducer.cc
index bcc26ba9dfa0c..44e173595bea3 100644
--- a/RecoHI/HiCentralityAlgos/plugins/CentralityProducer.cc
+++ b/RecoHI/HiCentralityAlgos/plugins/CentralityProducer.cc
@@ -34,6 +34,7 @@
#include "DataFormats/TrackReco/interface/Track.h"
#include "DataFormats/VertexReco/interface/Vertex.h"
#include "DataFormats/VertexReco/interface/VertexFwd.h"
+#include "DataFormats/TrackerCommon/interface/TrackerTopology.h"
#include "Geometry/Records/interface/CaloGeometryRecord.h"
#include "Geometry/CaloGeometry/interface/CaloGeometry.h"
@@ -99,6 +100,7 @@ class CentralityProducer : public edm::EDProducer {
edm::ESHandle tGeo;
edm::ESHandle cGeo;
+ edm::ESHandle topo_;
};
@@ -184,6 +186,7 @@ CentralityProducer::produce(edm::Event& iEvent, const edm::EventSetup& iSetup)
if(producePixelhits_) iSetup.get().get(tGeo);
if(produceEcalhits_) iSetup.get().get(cGeo);
+ if(producePixelhits_) iSetup.get().get(topo_);
auto creco = std::make_unique();
Handle inputCentrality;
@@ -213,6 +216,8 @@ CentralityProducer::produce(edm::Event& iEvent, const edm::EventSetup& iSetup)
if(produceHFtowers_ || produceETmidRap_){
creco->etHFtowerSumPlus_ = 0;
creco->etHFtowerSumMinus_ = 0;
+ creco->etHFtowerSumECutPlus_ = 0;
+ creco->etHFtowerSumECutMinus_ = 0;
creco->etMidRapiditySum_ = 0;
Handle towers;
@@ -226,16 +231,20 @@ CentralityProducer::produce(edm::Event& iEvent, const edm::EventSetup& iSetup)
if(produceHFtowers_){
if(isHF && eta > 0){
creco->etHFtowerSumPlus_ += tower.pt();
+ if(tower.energy() > 1.5) creco->etHFtowerSumECutPlus_ += tower.pt();
if(eta > hfEtaCut_) creco->etHFtruncatedPlus_ += tower.pt();
}
if(isHF && eta < 0){
creco->etHFtowerSumMinus_ += tower.pt();
+ if(tower.energy() > 1.5) creco->etHFtowerSumECutMinus_ += tower.pt();
if(eta < -hfEtaCut_) creco->etHFtruncatedMinus_ += tower.pt();
}
}else{
if(reuseAny_){
creco->etHFtowerSumMinus_ = inputCentrality->EtHFtowerSumMinus();
creco->etHFtowerSumPlus_ = inputCentrality->EtHFtowerSumPlus();
+ creco->etHFtowerSumECutMinus_ = inputCentrality->EtHFtowerSumECutMinus();
+ creco->etHFtowerSumECutPlus_ = inputCentrality->EtHFtowerSumECutPlus();
creco->etHFtruncatedMinus_ = inputCentrality->EtHFtruncatedMinus();
creco->etHFtruncatedPlus_ = inputCentrality->EtHFtruncatedPlus();
}
@@ -248,6 +257,8 @@ CentralityProducer::produce(edm::Event& iEvent, const edm::EventSetup& iSetup)
if(reuseAny_){
creco->etHFtowerSumMinus_ = inputCentrality->EtHFtowerSumMinus();
creco->etHFtowerSumPlus_ = inputCentrality->EtHFtowerSumPlus();
+ creco->etHFtowerSumECutMinus_ = inputCentrality->EtHFtowerSumECutMinus();
+ creco->etHFtowerSumECutPlus_ = inputCentrality->EtHFtowerSumECutPlus();
creco->etMidRapiditySum_ = inputCentrality->EtMidRapiditySum();
}
}
@@ -295,6 +306,8 @@ CentralityProducer::produce(edm::Event& iEvent, const edm::EventSetup& iSetup)
iEvent.getByToken(srcPixelhits_,rchts);
rechits = rchts.product();
int nPixel =0 ;
+ int nPixel_plus =0 ;
+ int nPixel_minus =0 ;
for (SiPixelRecHitCollection::const_iterator it = rechits->begin(); it!=rechits->end();it++)
{
SiPixelRecHitCollection::DetSet hits = *it;
@@ -303,28 +316,37 @@ CentralityProducer::produce(edm::Event& iEvent, const edm::EventSetup& iSetup)
const SiPixelRecHitCollection::DetSet recHitRange = *recHitMatch;
for ( SiPixelRecHitCollection::DetSet::const_iterator recHitIterator = recHitRange.begin();
recHitIterator != recHitRange.end(); ++recHitIterator) {
+
// add selection if needed, now all hits.
- if(doPixelCut_){
const SiPixelRecHit * recHit = &(*recHitIterator);
const PixelGeomDetUnit* pixelLayer = dynamic_cast (tGeo->idToDet(recHit->geographicalId()));
GlobalPoint gpos = pixelLayer->toGlobal(recHit->localPosition());
math::XYZVector rechitPos(gpos.x(),gpos.y(),gpos.z());
+ double eta = rechitPos.eta();
double abeta = std::abs(rechitPos.eta());
int clusterSize = recHit->cluster()->size();
- if ( abeta < 0.5 && clusterSize < 1) continue;
- if ( abeta > 0.5 && abeta < 1 && clusterSize < 2) continue;
- if ( abeta > 1. && abeta < 1.5 && clusterSize < 3) continue;
- if ( abeta > 1.5 && abeta < 2. && clusterSize < 4) continue;
- if ( abeta > 2. && abeta < 2.5 && clusterSize < 6) continue;
- if ( abeta > 2.5 && abeta < 5 && clusterSize < 9) continue;
+ unsigned layer = topo_->layer(detId);
+ if(doPixelCut_){
+ if (detId.det() == DetId::Tracker && detId.subdetId() == PixelSubdetector::PixelBarrel){
+ if (layer==1 && 18*abeta-40>clusterSize) continue;
+ if (layer==2 && 6*abeta-7.2>clusterSize) continue;
+ if ((layer==3 || layer==4) && 4*abeta-2.4>clusterSize) continue;
+ }
}
nPixel++;
+ if(eta>=0) nPixel_plus++;
+ if(eta<0) nPixel_minus++;
+
}
}
creco->pixelMultiplicity_ = nPixel;
+ creco->pixelMultiplicityPlus_ = nPixel_plus;
+ creco->pixelMultiplicityMinus_ = nPixel_minus;
}else{
if(reuseAny_){
creco->pixelMultiplicity_ = inputCentrality->multiplicityPixel();
+ creco->pixelMultiplicityPlus_ = inputCentrality->multiplicityPixelPlus();
+ creco->pixelMultiplicityMinus_ = inputCentrality->multiplicityPixelMinus();
}
}
@@ -414,11 +436,22 @@ CentralityProducer::produce(edm::Event& iEvent, const edm::EventSetup& iSetup)
Handle pixeltracks;
iEvent.getByToken(srcPixelTracks_,pixeltracks);
int nPixelTracks = pixeltracks->size();
+ int nPixelTracksPlus = 0;
+ int nPixelTracksMinus = 0;
+
+ for (auto const& track : *pixeltracks){
+ if(track.eta()<0) nPixelTracksMinus++;
+ else nPixelTracksPlus++;
+ }
creco->nPixelTracks_ = nPixelTracks;
+ creco->nPixelTracksPlus_ = nPixelTracksPlus;
+ creco->nPixelTracksMinus_ = nPixelTracksMinus;
}
else{
if(reuseAny_){
creco->nPixelTracks_ = inputCentrality->NpixelTracks();
+ creco->nPixelTracksPlus_ = inputCentrality->NpixelTracksPlus();
+ creco->nPixelTracksMinus_ = inputCentrality->NpixelTracksMinus();
}
}
diff --git a/RecoHI/HiCentralityAlgos/python/HiCentrality_cfi.py b/RecoHI/HiCentralityAlgos/python/HiCentrality_cfi.py
index 3a4bacaa26864..b1aad02b13c2c 100644
--- a/RecoHI/HiCentralityAlgos/python/HiCentrality_cfi.py
+++ b/RecoHI/HiCentralityAlgos/python/HiCentrality_cfi.py
@@ -38,7 +38,8 @@
from Configuration.Eras.Modifier_pp_on_AA_2018_cff import pp_on_AA_2018
for e in [pp_on_XeXe_2017, pp_on_AA_2018]:
e.toModify(hiCentrality,
- producePixelTracks = False,
+ producePixelTracks = True,
+ srcPixelTracks = "hiConformalPixelTracks",
srcTracks = cms.InputTag("generalTracks"),
srcVertex = cms.InputTag("offlinePrimaryVertices")
)