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") )