From 5b0c2fe70cff27ce6ee84d52fc9106ce3e5d6a1a Mon Sep 17 00:00:00 2001 From: Vincenzo Innocente Date: Fri, 7 Jul 2017 09:58:34 +0200 Subject: [PATCH 1/4] single file --- DQM/SiPixelPhase1TrackClusters/BuildFile.xml | 2 - .../interface/SiPixelPhase1TrackClusters.h | 48 ----------------- .../src/SiPixelPhase1TrackClusters.cc | 51 ++++++++++++++++--- 3 files changed, 45 insertions(+), 56 deletions(-) delete mode 100644 DQM/SiPixelPhase1TrackClusters/interface/SiPixelPhase1TrackClusters.h diff --git a/DQM/SiPixelPhase1TrackClusters/BuildFile.xml b/DQM/SiPixelPhase1TrackClusters/BuildFile.xml index 4ef74910856b0..9fcaa4e78a6c2 100644 --- a/DQM/SiPixelPhase1TrackClusters/BuildFile.xml +++ b/DQM/SiPixelPhase1TrackClusters/BuildFile.xml @@ -1,5 +1,3 @@ - - diff --git a/DQM/SiPixelPhase1TrackClusters/interface/SiPixelPhase1TrackClusters.h b/DQM/SiPixelPhase1TrackClusters/interface/SiPixelPhase1TrackClusters.h deleted file mode 100644 index 238fa08affc74..0000000000000 --- a/DQM/SiPixelPhase1TrackClusters/interface/SiPixelPhase1TrackClusters.h +++ /dev/null @@ -1,48 +0,0 @@ -#ifndef SiPixelPhase1TrackClusters_h -#define SiPixelPhase1TrackClusters_h -// -*- C++ -*- -// -// Package: SiPixelPhase1TrackClusters -// Class : SiPixelPhase1TrackClusters -// - -// Original Author: Marcel Schneider - -#include "DQM/SiPixelPhase1Common/interface/SiPixelPhase1Base.h" -#include "DataFormats/SiPixelCluster/interface/SiPixelCluster.h" -#include "DataFormats/TrackReco/interface/TrackFwd.h" -#include "DataFormats/VertexReco/interface/VertexFwd.h" - -class SiPixelPhase1TrackClusters : public SiPixelPhase1Base { - enum { - ONTRACK_CHARGE, - ONTRACK_SIZE, - ONTRACK_NCLUSTERS, - ONTRACK_POSITION_B, - ONTRACK_POSITION_F, - - OFFTRACK_CHARGE, - OFFTRACK_SIZE, - OFFTRACK_NCLUSTERS, - OFFTRACK_POSITION_B, - OFFTRACK_POSITION_F, - - NTRACKS, - NTRACKS_VOLUME, - ONTRACK_SIZE_VS_ETA - - }; - - public: - explicit SiPixelPhase1TrackClusters(const edm::ParameterSet& conf); - void analyze(const edm::Event&, const edm::EventSetup&); - - private: - edm::EDGetTokenT > clustersToken_; - edm::EDGetTokenT tracksToken_; - edm::EDGetTokenT offlinePrimaryVerticesToken_; - - bool applyVertexCut_; -}; - -#endif diff --git a/DQM/SiPixelPhase1TrackClusters/src/SiPixelPhase1TrackClusters.cc b/DQM/SiPixelPhase1TrackClusters/src/SiPixelPhase1TrackClusters.cc index 5c620263e2e67..7d0f88c628ee8 100644 --- a/DQM/SiPixelPhase1TrackClusters/src/SiPixelPhase1TrackClusters.cc +++ b/DQM/SiPixelPhase1TrackClusters/src/SiPixelPhase1TrackClusters.cc @@ -1,14 +1,13 @@ // -*- C++ -*- -// +// // Package: SiPixelPhase1TrackClusters -// Class: SiPixelPhase1TrackClusters +// Class : SiPixelPhase1TrackClusters // // Original Author: Marcel Schneider -#include "DQM/SiPixelPhase1TrackClusters/interface/SiPixelPhase1TrackClusters.h" -#include "FWCore/Framework/interface/MakerMacros.h" - +#include "DQM/SiPixelPhase1Common/interface/SiPixelPhase1Base.h" +#include "DataFormats/SiPixelCluster/interface/SiPixelCluster.h" #include "FWCore/Framework/interface/ESHandle.h" #include "FWCore/MessageLogger/interface/MessageLogger.h" #include "Geometry/TrackerGeometryBuilder/interface/TrackerGeometry.h" @@ -18,12 +17,49 @@ #include "DataFormats/SiPixelDetId/interface/PixelSubdetector.h" #include "DataFormats/GeometryVector/interface/LocalPoint.h" #include "DataFormats/GeometryVector/interface/GlobalPoint.h" +#include "DataFormats/TrackReco/interface/TrackFwd.h" +#include "DataFormats/VertexReco/interface/VertexFwd.h" #include "DataFormats/TrackReco/interface/Track.h" #include "DataFormats/TrackerRecHit2D/interface/SiPixelRecHit.h" -#include "TrackingTools/TrackFitters/interface/TrajectoryStateCombiner.h" #include "DataFormats/VertexReco/interface/Vertex.h" +namespace { + +class SiPixelPhase1TrackClusters : public SiPixelPhase1Base { + enum { + ONTRACK_CHARGE, + ONTRACK_SIZE, + ONTRACK_NCLUSTERS, + ONTRACK_POSITION_B, + ONTRACK_POSITION_F, + + OFFTRACK_CHARGE, + OFFTRACK_SIZE, + OFFTRACK_NCLUSTERS, + OFFTRACK_POSITION_B, + OFFTRACK_POSITION_F, + + NTRACKS, + NTRACKS_VOLUME, + ONTRACK_SIZE_VS_ETA + + }; + +public: + explicit SiPixelPhase1TrackClusters(const edm::ParameterSet& conf); + void analyze(const edm::Event&, const edm::EventSetup&) override; + +private: + edm::EDGetTokenT > clustersToken_; + edm::EDGetTokenT tracksToken_; + edm::EDGetTokenT offlinePrimaryVerticesToken_; + + bool applyVertexCut_; +}; + + + SiPixelPhase1TrackClusters::SiPixelPhase1TrackClusters(const edm::ParameterSet& iConfig) : SiPixelPhase1Base(iConfig) { @@ -176,5 +212,8 @@ void SiPixelPhase1TrackClusters::analyze(const edm::Event& iEvent, const edm::Ev histo[OFFTRACK_NCLUSTERS].executePerEventHarvesting(&iEvent); } +}// namespace + +#include "FWCore/Framework/interface/MakerMacros.h" DEFINE_FWK_MODULE(SiPixelPhase1TrackClusters); From eb8cf12d8bdc54463f9c4d452c8fe74216a4c230 Mon Sep 17 00:00:00 2001 From: Vincenzo Innocente Date: Fri, 7 Jul 2017 11:08:01 +0200 Subject: [PATCH 2/4] first cleanup --- .../python/SiPixelPhase1TrackClusters_cfi.py | 31 +--- .../src/SiPixelPhase1TrackClusters.cc | 149 +++++++----------- 2 files changed, 55 insertions(+), 125 deletions(-) diff --git a/DQM/SiPixelPhase1TrackClusters/python/SiPixelPhase1TrackClusters_cfi.py b/DQM/SiPixelPhase1TrackClusters/python/SiPixelPhase1TrackClusters_cfi.py index 4372c874416f5..c6a880e0611c3 100644 --- a/DQM/SiPixelPhase1TrackClusters/python/SiPixelPhase1TrackClusters_cfi.py +++ b/DQM/SiPixelPhase1TrackClusters/python/SiPixelPhase1TrackClusters_cfi.py @@ -173,26 +173,6 @@ ) ) -SiPixelPhase1TrackClustersOffTrackCharge = \ - SiPixelPhase1TrackClustersOnTrackCharge.clone(topFolderName = "PixelPhase1/OffTrack", - enabled = False, - title = "Cluster Charge") -SiPixelPhase1TrackClustersOffTrackSize = \ - SiPixelPhase1TrackClustersOnTrackSize.clone(topFolderName = "PixelPhase1/OffTrack", - enabled = False) - -SiPixelPhase1TrackClustersOffTrackNClusters = \ - SiPixelPhase1TrackClustersOnTrackNClusters.clone(topFolderName = "PixelPhase1/OffTrack", - enabled = False) - -SiPixelPhase1TrackClustersOffTrackPositionB = \ - SiPixelPhase1TrackClustersOnTrackPositionB.clone(topFolderName = "PixelPhase1/OffTrack", - enabled = False) - -SiPixelPhase1TrackClustersOffTrackPositionF = \ - SiPixelPhase1TrackClustersOnTrackPositionF.clone(topFolderName = "PixelPhase1/OffTrack", - enabled = False) - SiPixelPhase1TrackClustersNTracks = DefaultHistoTrack.clone( name = "ntracks", title = "Number of Tracks", @@ -213,13 +193,12 @@ specs = VPSet( Specification().groupBy("").save() ) - ) SiPixelPhase1ClustersSizeVsEtaOnTrack = DefaultHistoTrack.clone( name = "sizeyvseta_on_track", - title = "Cluster Size along Beamline vs. Cluster position #eta (OnTrack)", - xlabel = "Cluster #eta", + title = "Cluster Size along Beamline vs. Track #eta (OnTrack)", + xlabel = "Track #eta", ylabel = "length [pixels]", range_min = -3.2, range_max = 3.2, range_nbins = 40, range_y_min = 0, range_y_max = 40, range_y_nbins = 40, @@ -239,12 +218,6 @@ SiPixelPhase1TrackClustersOnTrackPositionB, SiPixelPhase1TrackClustersOnTrackPositionF, - SiPixelPhase1TrackClustersOffTrackCharge, - SiPixelPhase1TrackClustersOffTrackSize, - SiPixelPhase1TrackClustersOffTrackNClusters, - SiPixelPhase1TrackClustersOffTrackPositionB, - SiPixelPhase1TrackClustersOffTrackPositionF, - SiPixelPhase1TrackClustersNTracks, SiPixelPhase1TrackClustersNTracksInVolume, SiPixelPhase1ClustersSizeVsEtaOnTrack diff --git a/DQM/SiPixelPhase1TrackClusters/src/SiPixelPhase1TrackClusters.cc b/DQM/SiPixelPhase1TrackClusters/src/SiPixelPhase1TrackClusters.cc index 7d0f88c628ee8..edc8581a5fde9 100644 --- a/DQM/SiPixelPhase1TrackClusters/src/SiPixelPhase1TrackClusters.cc +++ b/DQM/SiPixelPhase1TrackClusters/src/SiPixelPhase1TrackClusters.cc @@ -26,7 +26,7 @@ namespace { -class SiPixelPhase1TrackClusters : public SiPixelPhase1Base { +class SiPixelPhase1TrackClusters final : public SiPixelPhase1Base { enum { ONTRACK_CHARGE, ONTRACK_SIZE, @@ -34,12 +34,6 @@ class SiPixelPhase1TrackClusters : public SiPixelPhase1Base { ONTRACK_POSITION_B, ONTRACK_POSITION_F, - OFFTRACK_CHARGE, - OFFTRACK_SIZE, - OFFTRACK_NCLUSTERS, - OFFTRACK_POSITION_B, - OFFTRACK_POSITION_F, - NTRACKS, NTRACKS_VOLUME, ONTRACK_SIZE_VS_ETA @@ -51,40 +45,46 @@ class SiPixelPhase1TrackClusters : public SiPixelPhase1Base { void analyze(const edm::Event&, const edm::EventSetup&) override; private: - edm::EDGetTokenT > clustersToken_; - edm::EDGetTokenT tracksToken_; - edm::EDGetTokenT offlinePrimaryVerticesToken_; + const bool applyVertexCut_; - bool applyVertexCut_; + const edm::EDGetTokenT > clustersToken_; + const edm::EDGetTokenT tracksToken_; + const edm::EDGetTokenT offlinePrimaryVerticesToken_; }; SiPixelPhase1TrackClusters::SiPixelPhase1TrackClusters(const edm::ParameterSet& iConfig) : - SiPixelPhase1Base(iConfig) -{ - clustersToken_ = consumes>(iConfig.getParameter("clusters")); - - tracksToken_ = consumes(iConfig.getParameter("tracks")); - - offlinePrimaryVerticesToken_ = consumes(std::string("offlinePrimaryVertices")); - - applyVertexCut_=iConfig.getUntrackedParameter("VertexCut",true); -} + SiPixelPhase1Base(iConfig), + applyVertexCut_(iConfig.getUntrackedParameter("VertexCut",true)), + tracksToken_(consumes(iConfig.getParameter("tracks"))), + offlinePrimaryVerticesToken_(applyVertexCut_ ? + consumes(std::string("offlinePrimaryVertices")) : + edm::EDGetTokenT()) +{} void SiPixelPhase1TrackClusters::analyze(const edm::Event& iEvent, const edm::EventSetup& iSetup) { - if (! (histo.size() > ONTRACK_SIZE_VS_ETA)) return; + if (histo.size() != ONTRACK_SIZE_VS_ETA+1) { + edm::LogError("SiPixelPhase1TrackClusters") << "incompatible configuration " << histo.size() + << '<' << ONTRACK_SIZE_VS_ETA+1 << std::endl; + return; + } // get geometry edm::ESHandle tracker; iSetup.get().get(tracker); assert(tracker.isValid()); - - edm::Handle vertices; - iEvent.getByToken(offlinePrimaryVerticesToken_, vertices); - if (applyVertexCut_ && (!vertices.isValid() || vertices->size() == 0)) return; + edm::ESHandle tTopoHandle; + iSetup.get().get(tTopoHandle); + // auto const & tkTpl = *tTopoHandle; + + edm::Handle vertices; + if(applyVertexCut_) { + iEvent.getByToken(offlinePrimaryVerticesToken_, vertices); + if (!vertices.isValid() || vertices->empty()) return; + } //get the map edm::Handle tracks; @@ -95,66 +95,58 @@ void SiPixelPhase1TrackClusters::analyze(const edm::Event& iEvent, const edm::Ev return; } - // get clusters - edm::Handle< edmNew::DetSetVector > clusterColl; - iEvent.getByToken( clustersToken_, clusterColl ); - - if ( !clusterColl.isValid() ) { - edm::LogWarning("SiPixelPhase1TrackClusters") << "pixel cluster collection is not valid"; - return; - } - - // we need to store some per-cluster data. Instead of a map, we use a vector, - // exploiting the fact that all custers live in the DetSetVector and we can - // use the same indices to refer to them. - // corr_charge is not strictly needed but cleaner to have it. - std::vector ontrack (clusterColl->data().size(), false); - std::vector corr_charge(clusterColl->data().size(), -1.0f); - std::vector etatk(clusterColl->data().size(), -1.0f); - for (auto const & track : *tracks) { - if (applyVertexCut_ && (track.pt() < 0.75 || std::abs( track.dxy(vertices->at(0).position()) ) > 5*track.dxyError())) continue; + if (applyVertexCut_ && (track.pt() < 0.75 || std::abs( track.dxy((*vertices)[0].position()) ) > 5*track.dxyError())) continue; bool isBpixtrack = false, isFpixtrack = false, crossesPixVol=false; // find out whether track crosses pixel fiducial volume (for cosmic tracks) - double d0 = track.d0(), dz = track.dz(); + auto d0 = track.d0(), dz = track.dz(); if(std::abs(d0)<15 && std::abs(dz)<50) crossesPixVol = true; + auto etatk = track.eta(); + + auto const & trajParams = track.extra()->trajParams(); assert(trajParams.size()==track.recHitsSize()); auto hb = track.recHitsBegin(); for(unsigned int h=0;hisValid()) continue; - DetId id = hit->geographicalId(); + auto id = hit->geographicalId(); // check that we are in the pixel - uint32_t subdetid = (id.subdetId()); + auto subdetid = (id.subdetId()); if (subdetid == PixelSubdetector::PixelBarrel) isBpixtrack = true; if (subdetid == PixelSubdetector::PixelEndcap) isFpixtrack = true; if (subdetid != PixelSubdetector::PixelBarrel && subdetid != PixelSubdetector::PixelEndcap) continue; auto pixhit = dynamic_cast(hit->hit()); if (!pixhit) continue; - + + // auto geomdetunit = dynamic_cast (pixhit->detUnit()); + // auto const & topol = geomdetunit->specificTopology(); + // get the cluster - auto clust = pixhit->cluster(); - if (clust.isNull()) continue; - ontrack[clust.key()] = true; // mark cluster as ontrack + auto clustp = pixhit->cluster(); + if (clustp.isNull()) continue; + auto const & cluster = *clustp; + auto const & ltp = trajParams[h]; + + // LocalVector localDir = ltp.momentum()/ltp.momentum().mag(); // correct charge for track impact angle - auto const & ltp = trajParams[h]; - LocalVector localDir = ltp.momentum()/ltp.momentum().mag(); - - float clust_alpha = atan2(localDir.z(), localDir.x()); - float clust_beta = atan2(localDir.z(), localDir.y()); - double corrCharge = clust->charge() * sqrt( 1.0 / ( 1.0/pow( tan(clust_alpha), 2 ) + - 1.0/pow( tan(clust_beta ), 2 ) + - 1.0 )); - corr_charge[clust.key()] = (float) corrCharge; - etatk[clust.key()]=(float) track.eta(); + auto charge = cluster.charge()*ltp.absdz(); + + auto clustgp = pixhit->globalPosition(); // from rechit + + histo[ONTRACK_NCLUSTERS ].fill(id, &iEvent); + histo[ONTRACK_CHARGE ].fill(charge, id, &iEvent); + histo[ONTRACK_SIZE ].fill(cluster.size(), id, &iEvent); + histo[ONTRACK_POSITION_B].fill(clustgp.z(), clustgp.phi(), id, &iEvent); + histo[ONTRACK_POSITION_F].fill(clustgp.x(), clustgp.y(), id, &iEvent); + histo[ONTRACK_SIZE_VS_ETA].fill(etatk, cluster.sizeY(), id, &iEvent); } // statistics on tracks @@ -174,42 +166,7 @@ void SiPixelPhase1TrackClusters::analyze(const edm::Event& iEvent, const edm::Ev } } - edmNew::DetSetVector::const_iterator it; - for (it = clusterColl->begin(); it != clusterColl->end(); ++it) { - auto id = DetId(it->detId()); - - const PixelGeomDetUnit* geomdetunit = dynamic_cast ( tracker->idToDet(id) ); - const PixelTopology& topol = geomdetunit->specificTopology(); - - for(auto subit = it->begin(); subit != it->end(); ++subit) { - // we could do subit-...->data().front() as well, but this seems cleaner. - auto key = edmNew::makeRefTo(clusterColl, subit).key(); - bool is_ontrack = ontrack[key]; - float corrected_charge = corr_charge[key]; - SiPixelCluster const& cluster = *subit; - - LocalPoint clustlp = topol.localPosition(MeasurementPoint(cluster.x(), cluster.y())); - GlobalPoint clustgp = geomdetunit->surface().toGlobal(clustlp); - - if (is_ontrack) { - histo[ONTRACK_NCLUSTERS ].fill(id, &iEvent); - histo[ONTRACK_CHARGE ].fill(double(corrected_charge), id, &iEvent); - histo[ONTRACK_SIZE ].fill(double(cluster.size() ), id, &iEvent); - histo[ONTRACK_POSITION_B].fill(clustgp.z(), clustgp.phi(), id, &iEvent); - histo[ONTRACK_POSITION_F].fill(clustgp.x(), clustgp.y(), id, &iEvent); - histo[ONTRACK_SIZE_VS_ETA].fill(etatk[key], cluster.sizeY(), id, &iEvent); - } else { - histo[OFFTRACK_NCLUSTERS ].fill(id, &iEvent); - histo[OFFTRACK_CHARGE ].fill(double(cluster.charge()), id, &iEvent); - histo[OFFTRACK_SIZE ].fill(double(cluster.size() ), id, &iEvent); - histo[OFFTRACK_POSITION_B].fill(clustgp.z(), clustgp.phi(), id, &iEvent); - histo[OFFTRACK_POSITION_F].fill(clustgp.x(), clustgp.y(), id, &iEvent); - } - } - } - histo[ONTRACK_NCLUSTERS].executePerEventHarvesting(&iEvent); - histo[OFFTRACK_NCLUSTERS].executePerEventHarvesting(&iEvent); } }// namespace From 6907e25d0f049ba22213f874f6938c5a56a89a01 Mon Sep 17 00:00:00 2001 From: Vincenzo Innocente Date: Fri, 7 Jul 2017 14:08:02 +0200 Subject: [PATCH 3/4] ad histo by ladder, and cluster shape --- DQM/SiPixelPhase1TrackClusters/BuildFile.xml | 1 + .../python/SiPixelPhase1TrackClusters_cfi.py | 71 ++++++++++++-- .../src/SiPixelPhase1TrackClusters.cc | 94 +++++++++++++------ 3 files changed, 126 insertions(+), 40 deletions(-) diff --git a/DQM/SiPixelPhase1TrackClusters/BuildFile.xml b/DQM/SiPixelPhase1TrackClusters/BuildFile.xml index 9fcaa4e78a6c2..ccb1a9fdc3330 100644 --- a/DQM/SiPixelPhase1TrackClusters/BuildFile.xml +++ b/DQM/SiPixelPhase1TrackClusters/BuildFile.xml @@ -1,3 +1,4 @@ + diff --git a/DQM/SiPixelPhase1TrackClusters/python/SiPixelPhase1TrackClusters_cfi.py b/DQM/SiPixelPhase1TrackClusters/python/SiPixelPhase1TrackClusters_cfi.py index c6a880e0611c3..efe5cafe059a1 100644 --- a/DQM/SiPixelPhase1TrackClusters/python/SiPixelPhase1TrackClusters_cfi.py +++ b/DQM/SiPixelPhase1TrackClusters/python/SiPixelPhase1TrackClusters_cfi.py @@ -5,7 +5,7 @@ SiPixelPhase1TrackClustersOnTrackCharge = DefaultHistoTrack.clone( name = "charge", title = "Corrected Cluster Charge (OnTrack)", - range_min = 0, range_max = 300e3, range_nbins = 150, + range_min = 0, range_max = 200e3, range_nbins = 100, xlabel = "Charge (electrons)", specs = VPSet( @@ -70,6 +70,34 @@ ) ) +SiPixelPhase1TrackClustersOnTrackShape = DefaultHistoTrack.clone( + name = "shapeFilter", + title = "Shape filter (OnTrack)", + range_min = 0, range_max = 2, range_nbins = 2, + xlabel = "shapeFilter", + + specs = VPSet( + Specification().groupBy("PXBarrel/PXLayer").saveAll(), + Specification().groupBy("PXForward/PXDisk").saveAll(), + StandardSpecification2DProfile, + + Specification().groupBy("PXBarrel/PXLayer/Lumisection") + .reduce("MEAN") + .groupBy("PXBarrel/PXLayer", "EXTEND_X") + .save(), + + Specification().groupBy("PXForward/PXDisk/Lumisection") + .reduce("MEAN") + .groupBy("PXForward/PXDisk", "EXTEND_X") + .save(), + + Specification(PerLayer1D).groupBy("PXBarrel/Shell/PXLayer").save(), + Specification(PerLayer1D).groupBy("PXForward/HalfCylinder/PXRing/PXDisk").save() + + ) +) + + SiPixelPhase1TrackClustersOnTrackNClusters = DefaultHistoTrack.clone( name = "clusters_ontrack", title = "Clusters_onTrack", @@ -148,6 +176,7 @@ ) ) + SiPixelPhase1TrackClustersOnTrackPositionB = DefaultHistoTrack.clone( name = "clusterposition_zphi_ontrack", title = "Cluster_onTrack Positions", @@ -195,32 +224,56 @@ ) ) -SiPixelPhase1ClustersSizeVsEtaOnTrack = DefaultHistoTrack.clone( - name = "sizeyvseta_on_track", - title = "Cluster Size along Beamline vs. Track #eta (OnTrack)", +SiPixelPhase1ClustersSizeVsEtaOnTrackOuter = DefaultHistoTrack.clone( + name = "sizeyvseta_on_track_outer", + title = "Cluster Size along Beamline vs. Track #eta (OnTrack) outer ladders", xlabel = "Track #eta", ylabel = "length [pixels]", - range_min = -3.2, range_max = 3.2, range_nbins = 40, - range_y_min = 0, range_y_max = 40, range_y_nbins = 40, + range_min = -3.2, range_max = 3.2, range_nbins = 64, + range_y_min = 0, range_y_max = 30, range_y_nbins = 30, dimensions = 2, specs = VPSet( - Specification().groupBy("PXBarrel/PXLayer").save(), - Specification().groupBy("PXBarrel").save() + Specification().groupBy("PXBarrel/PXLayer").save() ) ) +SiPixelPhase1ClustersSizeVsEtaOnTrackInner = SiPixelPhase1ClustersSizeVsEtaOnTrackOuter.clone( + name = "sizeyvseta_on_track_inner", + title = "Cluster Size along Beamline vs. Track #eta (OnTrack) inner ladders", +) + +SiPixelPhase1TrackClustersOnTrackChargeOuter = DefaultHistoTrack.clone( + name = "chargeOuter", + title = "Corrected Cluster Charge (OnTrack) outer ladders", + range_min = 0, range_max = 1500e3, range_nbins = 150, + xlabel = "Charge (electrons)", + + specs = VPSet( + Specification().groupBy("PXBarrel/PXLayer").save() + ) +) +SiPixelPhase1TrackClustersOnTrackChargeInner = SiPixelPhase1TrackClustersOnTrackChargeOuter.clone( + name = "chargeInner", + title = "Corrected Cluster Charge (OnTrack) inner ladders" +) + SiPixelPhase1TrackClustersConf = cms.VPSet( SiPixelPhase1TrackClustersOnTrackCharge, SiPixelPhase1TrackClustersOnTrackSize, + SiPixelPhase1TrackClustersOnTrackShape, SiPixelPhase1TrackClustersOnTrackNClusters, SiPixelPhase1TrackClustersOnTrackPositionB, SiPixelPhase1TrackClustersOnTrackPositionF, SiPixelPhase1TrackClustersNTracks, SiPixelPhase1TrackClustersNTracksInVolume, - SiPixelPhase1ClustersSizeVsEtaOnTrack + + SiPixelPhase1ClustersSizeVsEtaOnTrackOuter, + SiPixelPhase1ClustersSizeVsEtaOnTrackInner, + SiPixelPhase1TrackClustersOnTrackChargeOuter, + SiPixelPhase1TrackClustersOnTrackChargeInner ) diff --git a/DQM/SiPixelPhase1TrackClusters/src/SiPixelPhase1TrackClusters.cc b/DQM/SiPixelPhase1TrackClusters/src/SiPixelPhase1TrackClusters.cc index edc8581a5fde9..95a971d0f37a8 100644 --- a/DQM/SiPixelPhase1TrackClusters/src/SiPixelPhase1TrackClusters.cc +++ b/DQM/SiPixelPhase1TrackClusters/src/SiPixelPhase1TrackClusters.cc @@ -23,22 +23,29 @@ #include "DataFormats/TrackerRecHit2D/interface/SiPixelRecHit.h" #include "DataFormats/VertexReco/interface/Vertex.h" +#include "RecoTracker/Record/interface/CkfComponentsRecord.h" +#include "RecoPixelVertexing/PixelLowPtUtilities/interface/ClusterShapeHitFilter.h" +#include "DataFormats/SiPixelCluster/interface/SiPixelClusterShapeCache.h" namespace { class SiPixelPhase1TrackClusters final : public SiPixelPhase1Base { - enum { - ONTRACK_CHARGE, - ONTRACK_SIZE, - ONTRACK_NCLUSTERS, - ONTRACK_POSITION_B, - ONTRACK_POSITION_F, - - NTRACKS, - NTRACKS_VOLUME, - ONTRACK_SIZE_VS_ETA - - }; +enum { // copy paste from cfy: the only safe way to doit.... + SiPixelPhase1TrackClustersOnTrackCharge, + SiPixelPhase1TrackClustersOnTrackSize, + SiPixelPhase1TrackClustersOnTrackShape, + SiPixelPhase1TrackClustersOnTrackNClusters, + SiPixelPhase1TrackClustersOnTrackPositionB, + SiPixelPhase1TrackClustersOnTrackPositionF, + + SiPixelPhase1TrackClustersNTracks, + SiPixelPhase1TrackClustersNTracksInVolume, + + SiPixelPhase1ClustersSizeVsEtaOnTrackOuter, + SiPixelPhase1ClustersSizeVsEtaOnTrackInner, + SiPixelPhase1TrackClustersOnTrackChargeOuter, + SiPixelPhase1TrackClustersOnTrackChargeInner +}; public: explicit SiPixelPhase1TrackClusters(const edm::ParameterSet& conf); @@ -47,9 +54,9 @@ class SiPixelPhase1TrackClusters final : public SiPixelPhase1Base { private: const bool applyVertexCut_; - const edm::EDGetTokenT > clustersToken_; const edm::EDGetTokenT tracksToken_; const edm::EDGetTokenT offlinePrimaryVerticesToken_; + const edm::EDGetTokenT pixelClusterShapeCacheToken_; }; @@ -60,14 +67,15 @@ SiPixelPhase1TrackClusters::SiPixelPhase1TrackClusters(const edm::ParameterSet& tracksToken_(consumes(iConfig.getParameter("tracks"))), offlinePrimaryVerticesToken_(applyVertexCut_ ? consumes(std::string("offlinePrimaryVertices")) : - edm::EDGetTokenT()) + edm::EDGetTokenT()), + pixelClusterShapeCacheToken_(consumes( edm::InputTag("siPixelClusterShapeCache"))) {} void SiPixelPhase1TrackClusters::analyze(const edm::Event& iEvent, const edm::EventSetup& iSetup) { - if (histo.size() != ONTRACK_SIZE_VS_ETA+1) { + if (histo.size() != SiPixelPhase1TrackClustersOnTrackChargeInner+1) { edm::LogError("SiPixelPhase1TrackClusters") << "incompatible configuration " << histo.size() - << '<' << ONTRACK_SIZE_VS_ETA+1 << std::endl; + << '<' << SiPixelPhase1TrackClustersOnTrackChargeInner+1 << std::endl; return; } @@ -78,7 +86,12 @@ void SiPixelPhase1TrackClusters::analyze(const edm::Event& iEvent, const edm::Ev edm::ESHandle tTopoHandle; iSetup.get().get(tTopoHandle); - // auto const & tkTpl = *tTopoHandle; + auto const & tkTpl = *tTopoHandle; + + edm::ESHandle shapeFilterH; + iSetup.get().get("ClusterShapeHitFilter", shapeFilterH); + auto const & shapeFilter = *shapeFilterH; + edm::Handle vertices; if(applyVertexCut_) { @@ -86,6 +99,7 @@ void SiPixelPhase1TrackClusters::analyze(const edm::Event& iEvent, const edm::Ev if (!vertices.isValid() || vertices->empty()) return; } + //get the map edm::Handle tracks; iEvent.getByToken( tracksToken_, tracks); @@ -94,6 +108,11 @@ void SiPixelPhase1TrackClusters::analyze(const edm::Event& iEvent, const edm::Ev edm::LogWarning("SiPixelPhase1TrackClusters") << "track collection is not valid"; return; } + + edm::Handle pixelClusterShapeCacheH; + iEvent.getByToken(pixelClusterShapeCacheToken_, pixelClusterShapeCacheH); + auto const & pixelClusterShapeCache = *pixelClusterShapeCacheH; + for (auto const & track : *tracks) { @@ -134,39 +153,52 @@ void SiPixelPhase1TrackClusters::analyze(const edm::Event& iEvent, const edm::Ev auto const & ltp = trajParams[h]; - // LocalVector localDir = ltp.momentum()/ltp.momentum().mag(); + auto localDir = ltp.momentum()/ltp.momentum().mag(); // correct charge for track impact angle auto charge = cluster.charge()*ltp.absdz(); auto clustgp = pixhit->globalPosition(); // from rechit - histo[ONTRACK_NCLUSTERS ].fill(id, &iEvent); - histo[ONTRACK_CHARGE ].fill(charge, id, &iEvent); - histo[ONTRACK_SIZE ].fill(cluster.size(), id, &iEvent); - histo[ONTRACK_POSITION_B].fill(clustgp.z(), clustgp.phi(), id, &iEvent); - histo[ONTRACK_POSITION_F].fill(clustgp.x(), clustgp.y(), id, &iEvent); - histo[ONTRACK_SIZE_VS_ETA].fill(etatk, cluster.sizeY(), id, &iEvent); + auto shape = shapeFilter.isCompatible(*pixhit,localDir,pixelClusterShapeCache); + + histo[SiPixelPhase1TrackClustersOnTrackNClusters].fill(id, &iEvent); + histo[SiPixelPhase1TrackClustersOnTrackCharge].fill(charge, id, &iEvent); + histo[SiPixelPhase1TrackClustersOnTrackSize].fill(cluster.size(), id, &iEvent); + histo[SiPixelPhase1TrackClustersOnTrackShape].fill(shape?0:1,id, &iEvent); + + histo[SiPixelPhase1TrackClustersOnTrackPositionB].fill(clustgp.z(), clustgp.phi(), id, &iEvent); + histo[SiPixelPhase1TrackClustersOnTrackPositionF].fill(clustgp.x(), clustgp.y(), id, &iEvent); + + if(tkTpl.pxbLadder(id)%2==0) { + histo[SiPixelPhase1ClustersSizeVsEtaOnTrackOuter].fill(etatk, cluster.sizeY(), id, &iEvent); + histo[SiPixelPhase1TrackClustersOnTrackChargeOuter].fill(charge, id, &iEvent); + } else { + histo[SiPixelPhase1ClustersSizeVsEtaOnTrackInner].fill(etatk, cluster.sizeY(), id, &iEvent); + histo[SiPixelPhase1TrackClustersOnTrackChargeInner].fill(charge, id, &iEvent); + } + + } // statistics on tracks - histo[NTRACKS].fill(1, DetId(0), &iEvent); + histo[SiPixelPhase1TrackClustersNTracks].fill(1, DetId(0), &iEvent); if (isBpixtrack || isFpixtrack) - histo[NTRACKS].fill(2, DetId(0), &iEvent); + histo[SiPixelPhase1TrackClustersNTracks].fill(2, DetId(0), &iEvent); if (isBpixtrack) - histo[NTRACKS].fill(3, DetId(0), &iEvent); + histo[SiPixelPhase1TrackClustersNTracks].fill(3, DetId(0), &iEvent); if (isFpixtrack) - histo[NTRACKS].fill(4, DetId(0), &iEvent); + histo[SiPixelPhase1TrackClustersNTracks].fill(4, DetId(0), &iEvent); if (crossesPixVol) { if (isBpixtrack || isFpixtrack) - histo[NTRACKS_VOLUME].fill(1, DetId(0), &iEvent); + histo[SiPixelPhase1TrackClustersNTracksInVolume].fill(1, DetId(0), &iEvent); else - histo[NTRACKS_VOLUME].fill(0, DetId(0), &iEvent); + histo[SiPixelPhase1TrackClustersNTracksInVolume].fill(0, DetId(0), &iEvent); } } - histo[ONTRACK_NCLUSTERS].executePerEventHarvesting(&iEvent); + histo[SiPixelPhase1TrackClustersOnTrackNClusters].executePerEventHarvesting(&iEvent); } }// namespace From 575003d3cc343281d654fa5a9ad8d5d882fe8759 Mon Sep 17 00:00:00 2001 From: Vincenzo Innocente Date: Fri, 7 Jul 2017 16:11:20 +0200 Subject: [PATCH 4/4] add pred vs size --- .../python/SiPixelPhase1TrackClusters_cfi.py | 74 ++++++++++++++++++- .../src/SiPixelPhase1TrackClusters.cc | 45 +++++++++-- 2 files changed, 110 insertions(+), 9 deletions(-) diff --git a/DQM/SiPixelPhase1TrackClusters/python/SiPixelPhase1TrackClusters_cfi.py b/DQM/SiPixelPhase1TrackClusters/python/SiPixelPhase1TrackClusters_cfi.py index efe5cafe059a1..b8bec7f3d0a45 100644 --- a/DQM/SiPixelPhase1TrackClusters/python/SiPixelPhase1TrackClusters_cfi.py +++ b/DQM/SiPixelPhase1TrackClusters/python/SiPixelPhase1TrackClusters_cfi.py @@ -236,16 +236,58 @@ Specification().groupBy("PXBarrel/PXLayer").save() ) ) - SiPixelPhase1ClustersSizeVsEtaOnTrackInner = SiPixelPhase1ClustersSizeVsEtaOnTrackOuter.clone( name = "sizeyvseta_on_track_inner", title = "Cluster Size along Beamline vs. Track #eta (OnTrack) inner ladders", ) + +SiPixelPhase1TrackClustersOnTrackSizeYOuter = SiPixelPhase1ClustersSizeVsEtaOnTrackOuter.clone( + name = "sizey_on_track_outer", + title = "Cluster Size along Beamline vs. prediction (OnTrack) outer ladders", + xlabel = "prediction", + ylabel = "length [pixels]", + range_min = 0, range_max = 30, range_nbins = 60 +) +SiPixelPhase1TrackClustersOnTrackSizeYInner = SiPixelPhase1TrackClustersOnTrackSizeYOuter.clone( + name = "sizey_on_track_inner", + title = "Cluster Size along Beamline vs. prediction (OnTrack) inner ladders", +) + + +SiPixelPhase1TrackClustersOnTrackSizeXOuter = SiPixelPhase1TrackClustersOnTrackSizeYOuter.clone( + name = "sizex_on_track_outer", + title = "Cluster Size along radial vs. prediction (OnTrack) outer ladders", + range_min = 0, range_max = 6, range_nbins = 12, + range_y_min = 0, range_y_max = 6, range_y_nbins = 6 + +) +SiPixelPhase1TrackClustersOnTrackSizeXInner = SiPixelPhase1TrackClustersOnTrackSizeXOuter.clone( + name = "sizex_on_track_inner", + title = "Cluster Size along radial vs. prediction (OnTrack) inner ladders", +) + + +SiPixelPhase1TrackClustersOnTrackSizeXYOuter = SiPixelPhase1TrackClustersOnTrackSizeYOuter.clone( + name = "sizexy_on_track_outer", + title = "prediction - Cluster Size x vs y (OnTrack) outer ladders", + xlabel = "y diff", + ylabel = "x diff", + range_min = -6, range_max = 6, range_nbins = 24, + range_y_min = -6, range_y_max = 6, range_y_nbins = 24 +) +SiPixelPhase1TrackClustersOnTrackSizeXYInner = SiPixelPhase1TrackClustersOnTrackSizeXYOuter.clone( + name = "sizexy_on_track_inner", + title = "prediction - Cluster Size x vs y (OnTrack) outer ladders" +) + + + + SiPixelPhase1TrackClustersOnTrackChargeOuter = DefaultHistoTrack.clone( name = "chargeOuter", title = "Corrected Cluster Charge (OnTrack) outer ladders", - range_min = 0, range_max = 1500e3, range_nbins = 150, + range_min = 0, range_max = 150e3, range_nbins = 150, xlabel = "Charge (electrons)", specs = VPSet( @@ -257,6 +299,20 @@ title = "Corrected Cluster Charge (OnTrack) inner ladders" ) +SiPixelPhase1TrackClustersOnTrackShapeOuter = DefaultHistoTrack.clone( + name = "shapeFilterOuter", + title = "Shape filter (OnTrack) Outer Ladders", + range_min = 0, range_max = 2, range_nbins = 2, + xlabel = "shapeFilter", + specs = VPSet( + Specification().groupBy("PXBarrel/PXLayer").save() + ) +) +SiPixelPhase1TrackClustersOnTrackShapeInner = SiPixelPhase1TrackClustersOnTrackShapeOuter.clone( + name = "shapeFilterInner", + title = "Shape filter (OnTrack) Inner Ladders", +) + SiPixelPhase1TrackClustersConf = cms.VPSet( @@ -273,7 +329,19 @@ SiPixelPhase1ClustersSizeVsEtaOnTrackOuter, SiPixelPhase1ClustersSizeVsEtaOnTrackInner, SiPixelPhase1TrackClustersOnTrackChargeOuter, - SiPixelPhase1TrackClustersOnTrackChargeInner + SiPixelPhase1TrackClustersOnTrackChargeInner, + + SiPixelPhase1TrackClustersOnTrackShapeOuter, + SiPixelPhase1TrackClustersOnTrackShapeInner, + + SiPixelPhase1TrackClustersOnTrackSizeXOuter, + SiPixelPhase1TrackClustersOnTrackSizeXInner, + SiPixelPhase1TrackClustersOnTrackSizeYOuter, + SiPixelPhase1TrackClustersOnTrackSizeYInner, + + SiPixelPhase1TrackClustersOnTrackSizeXYOuter, + SiPixelPhase1TrackClustersOnTrackSizeXYInner + ) diff --git a/DQM/SiPixelPhase1TrackClusters/src/SiPixelPhase1TrackClusters.cc b/DQM/SiPixelPhase1TrackClusters/src/SiPixelPhase1TrackClusters.cc index 95a971d0f37a8..1bf6a6dc5b57a 100644 --- a/DQM/SiPixelPhase1TrackClusters/src/SiPixelPhase1TrackClusters.cc +++ b/DQM/SiPixelPhase1TrackClusters/src/SiPixelPhase1TrackClusters.cc @@ -44,7 +44,21 @@ enum { // copy paste from cfy: the only safe way to doit.... SiPixelPhase1ClustersSizeVsEtaOnTrackOuter, SiPixelPhase1ClustersSizeVsEtaOnTrackInner, SiPixelPhase1TrackClustersOnTrackChargeOuter, - SiPixelPhase1TrackClustersOnTrackChargeInner + SiPixelPhase1TrackClustersOnTrackChargeInner, + + SiPixelPhase1TrackClustersOnTrackShapeOuter, + SiPixelPhase1TrackClustersOnTrackShapeInner, + + SiPixelPhase1TrackClustersOnTrackSizeXOuter, + SiPixelPhase1TrackClustersOnTrackSizeXInner, + SiPixelPhase1TrackClustersOnTrackSizeYOuter, + SiPixelPhase1TrackClustersOnTrackSizeYInner, + + SiPixelPhase1TrackClustersOnTrackSizeXYOuter, + SiPixelPhase1TrackClustersOnTrackSizeXYInner, + + + SiPixelPhase1TrackClustersEnumSize }; public: @@ -73,9 +87,9 @@ SiPixelPhase1TrackClusters::SiPixelPhase1TrackClusters(const edm::ParameterSet& void SiPixelPhase1TrackClusters::analyze(const edm::Event& iEvent, const edm::EventSetup& iSetup) { - if (histo.size() != SiPixelPhase1TrackClustersOnTrackChargeInner+1) { + if (histo.size() != SiPixelPhase1TrackClustersEnumSize) { edm::LogError("SiPixelPhase1TrackClusters") << "incompatible configuration " << histo.size() - << '<' << SiPixelPhase1TrackClustersOnTrackChargeInner+1 << std::endl; + << "!=" << SiPixelPhase1TrackClustersEnumSize << std::endl; return; } @@ -160,17 +174,36 @@ void SiPixelPhase1TrackClusters::analyze(const edm::Event& iEvent, const edm::Ev auto clustgp = pixhit->globalPosition(); // from rechit - auto shape = shapeFilter.isCompatible(*pixhit,localDir,pixelClusterShapeCache); + + int part; + ClusterData::ArrayType meas; + std::pair pred; + if(shapeFilter.getSizes(*pixhit,localDir,pixelClusterShapeCache, part,meas, pred)) { + auto shape = shapeFilter.isCompatible(*pixhit,localDir,pixelClusterShapeCache); + if(tkTpl.pxbLadder(id)%2==1) { + histo[SiPixelPhase1TrackClustersOnTrackSizeXOuter].fill(pred.first, cluster.sizeX(), id, &iEvent); + histo[SiPixelPhase1TrackClustersOnTrackSizeYOuter].fill(pred.second,cluster.sizeY(), id, &iEvent); + histo[SiPixelPhase1TrackClustersOnTrackSizeXYOuter].fill(pred.second-cluster.sizeY(),pred.first-cluster.sizeX(), id, &iEvent); + + histo[SiPixelPhase1TrackClustersOnTrackShapeOuter].fill(shape?1:0,id, &iEvent); + } else { + histo[SiPixelPhase1TrackClustersOnTrackSizeXInner].fill(pred.first, cluster.sizeX(), id, &iEvent); + histo[SiPixelPhase1TrackClustersOnTrackSizeYInner].fill(pred.second,cluster.sizeY(), id, &iEvent); + histo[SiPixelPhase1TrackClustersOnTrackSizeXYInner].fill(pred.second-cluster.sizeY(),pred.first-cluster.sizeX(), id, &iEvent); + + histo[SiPixelPhase1TrackClustersOnTrackShapeInner].fill(shape?1:0,id, &iEvent); + } + histo[SiPixelPhase1TrackClustersOnTrackShape].fill(shape?1:0,id, &iEvent); + } histo[SiPixelPhase1TrackClustersOnTrackNClusters].fill(id, &iEvent); histo[SiPixelPhase1TrackClustersOnTrackCharge].fill(charge, id, &iEvent); histo[SiPixelPhase1TrackClustersOnTrackSize].fill(cluster.size(), id, &iEvent); - histo[SiPixelPhase1TrackClustersOnTrackShape].fill(shape?0:1,id, &iEvent); histo[SiPixelPhase1TrackClustersOnTrackPositionB].fill(clustgp.z(), clustgp.phi(), id, &iEvent); histo[SiPixelPhase1TrackClustersOnTrackPositionF].fill(clustgp.x(), clustgp.y(), id, &iEvent); - if(tkTpl.pxbLadder(id)%2==0) { + if(tkTpl.pxbLadder(id)%2==1) { histo[SiPixelPhase1ClustersSizeVsEtaOnTrackOuter].fill(etatk, cluster.sizeY(), id, &iEvent); histo[SiPixelPhase1TrackClustersOnTrackChargeOuter].fill(charge, id, &iEvent); } else {