diff --git a/DQM/SiPixelPhase1TrackClusters/BuildFile.xml b/DQM/SiPixelPhase1TrackClusters/BuildFile.xml
index 4ef74910856b0..ccb1a9fdc3330 100644
--- a/DQM/SiPixelPhase1TrackClusters/BuildFile.xml
+++ b/DQM/SiPixelPhase1TrackClusters/BuildFile.xml
@@ -1,5 +1,4 @@
-
-
+
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/python/SiPixelPhase1TrackClusters_cfi.py b/DQM/SiPixelPhase1TrackClusters/python/SiPixelPhase1TrackClusters_cfi.py
index 4372c874416f5..b8bec7f3d0a45 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",
@@ -173,26 +202,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,41 +222,126 @@
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",
+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",
+)
+
+
+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 = 150e3, 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"
+)
+
+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(
SiPixelPhase1TrackClustersOnTrackCharge,
SiPixelPhase1TrackClustersOnTrackSize,
+ SiPixelPhase1TrackClustersOnTrackShape,
SiPixelPhase1TrackClustersOnTrackNClusters,
SiPixelPhase1TrackClustersOnTrackPositionB,
SiPixelPhase1TrackClustersOnTrackPositionF,
- SiPixelPhase1TrackClustersOffTrackCharge,
- SiPixelPhase1TrackClustersOffTrackSize,
- SiPixelPhase1TrackClustersOffTrackNClusters,
- SiPixelPhase1TrackClustersOffTrackPositionB,
- SiPixelPhase1TrackClustersOffTrackPositionF,
-
SiPixelPhase1TrackClustersNTracks,
SiPixelPhase1TrackClustersNTracksInVolume,
- SiPixelPhase1ClustersSizeVsEtaOnTrack
+
+ SiPixelPhase1ClustersSizeVsEtaOnTrackOuter,
+ SiPixelPhase1ClustersSizeVsEtaOnTrackInner,
+ SiPixelPhase1TrackClustersOnTrackChargeOuter,
+ SiPixelPhase1TrackClustersOnTrackChargeInner,
+
+ SiPixelPhase1TrackClustersOnTrackShapeOuter,
+ SiPixelPhase1TrackClustersOnTrackShapeInner,
+
+ SiPixelPhase1TrackClustersOnTrackSizeXOuter,
+ SiPixelPhase1TrackClustersOnTrackSizeXInner,
+ SiPixelPhase1TrackClustersOnTrackSizeYOuter,
+ SiPixelPhase1TrackClustersOnTrackSizeYInner,
+
+ SiPixelPhase1TrackClustersOnTrackSizeXYOuter,
+ SiPixelPhase1TrackClustersOnTrackSizeXYInner
+
)
diff --git a/DQM/SiPixelPhase1TrackClusters/src/SiPixelPhase1TrackClusters.cc b/DQM/SiPixelPhase1TrackClusters/src/SiPixelPhase1TrackClusters.cc
index 5c620263e2e67..1bf6a6dc5b57a 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,37 +17,102 @@
#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"
+#include "RecoTracker/Record/interface/CkfComponentsRecord.h"
+#include "RecoPixelVertexing/PixelLowPtUtilities/interface/ClusterShapeHitFilter.h"
+#include "DataFormats/SiPixelCluster/interface/SiPixelClusterShapeCache.h"
-SiPixelPhase1TrackClusters::SiPixelPhase1TrackClusters(const edm::ParameterSet& iConfig) :
- SiPixelPhase1Base(iConfig)
-{
- clustersToken_ = consumes>(iConfig.getParameter("clusters"));
+namespace {
- tracksToken_ = consumes(iConfig.getParameter("tracks"));
+class SiPixelPhase1TrackClusters final : public SiPixelPhase1Base {
+enum { // copy paste from cfy: the only safe way to doit....
+ SiPixelPhase1TrackClustersOnTrackCharge,
+ SiPixelPhase1TrackClustersOnTrackSize,
+ SiPixelPhase1TrackClustersOnTrackShape,
+ SiPixelPhase1TrackClustersOnTrackNClusters,
+ SiPixelPhase1TrackClustersOnTrackPositionB,
+ SiPixelPhase1TrackClustersOnTrackPositionF,
- offlinePrimaryVerticesToken_ = consumes(std::string("offlinePrimaryVertices"));
+ SiPixelPhase1TrackClustersNTracks,
+ SiPixelPhase1TrackClustersNTracksInVolume,
- applyVertexCut_=iConfig.getUntrackedParameter("VertexCut",true);
-}
+ SiPixelPhase1ClustersSizeVsEtaOnTrackOuter,
+ SiPixelPhase1ClustersSizeVsEtaOnTrackInner,
+ SiPixelPhase1TrackClustersOnTrackChargeOuter,
+ SiPixelPhase1TrackClustersOnTrackChargeInner,
+
+ SiPixelPhase1TrackClustersOnTrackShapeOuter,
+ SiPixelPhase1TrackClustersOnTrackShapeInner,
+
+ SiPixelPhase1TrackClustersOnTrackSizeXOuter,
+ SiPixelPhase1TrackClustersOnTrackSizeXInner,
+ SiPixelPhase1TrackClustersOnTrackSizeYOuter,
+ SiPixelPhase1TrackClustersOnTrackSizeYInner,
+
+ SiPixelPhase1TrackClustersOnTrackSizeXYOuter,
+ SiPixelPhase1TrackClustersOnTrackSizeXYInner,
+
+
+ SiPixelPhase1TrackClustersEnumSize
+};
+
+public:
+ explicit SiPixelPhase1TrackClusters(const edm::ParameterSet& conf);
+ void analyze(const edm::Event&, const edm::EventSetup&) override;
+
+private:
+ const bool applyVertexCut_;
+
+ const edm::EDGetTokenT tracksToken_;
+ const edm::EDGetTokenT offlinePrimaryVerticesToken_;
+ const edm::EDGetTokenT pixelClusterShapeCacheToken_;
+};
+
+
+
+SiPixelPhase1TrackClusters::SiPixelPhase1TrackClusters(const edm::ParameterSet& iConfig) :
+ SiPixelPhase1Base(iConfig),
+ applyVertexCut_(iConfig.getUntrackedParameter("VertexCut",true)),
+ tracksToken_(consumes(iConfig.getParameter("tracks"))),
+ offlinePrimaryVerticesToken_(applyVertexCut_ ?
+ consumes(std::string("offlinePrimaryVertices")) :
+ 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)) return;
+ if (histo.size() != SiPixelPhase1TrackClustersEnumSize) {
+ edm::LogError("SiPixelPhase1TrackClusters") << "incompatible configuration " << histo.size()
+ << "!=" << SiPixelPhase1TrackClustersEnumSize << std::endl;
+ return;
+ }
// get geometry
edm::ESHandle tracker;
iSetup.get().get(tracker);
assert(tracker.isValid());
-
+
+ edm::ESHandle tTopoHandle;
+ iSetup.get().get(tTopoHandle);
+ auto const & tkTpl = *tTopoHandle;
+
+ edm::ESHandle shapeFilterH;
+ iSetup.get().get("ClusterShapeHitFilter", shapeFilterH);
+ auto const & shapeFilter = *shapeFilterH;
+
+
edm::Handle vertices;
- iEvent.getByToken(offlinePrimaryVerticesToken_, vertices);
+ if(applyVertexCut_) {
+ iEvent.getByToken(offlinePrimaryVerticesToken_, vertices);
+ if (!vertices.isValid() || vertices->empty()) return;
+ }
- if (applyVertexCut_ && (!vertices.isValid() || vertices->size() == 0)) return;
//get the map
edm::Handle tracks;
@@ -58,123 +122,120 @@ void SiPixelPhase1TrackClusters::analyze(const edm::Event& iEvent, const edm::Ev
edm::LogWarning("SiPixelPhase1TrackClusters") << "track collection is not valid";
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);
+ edm::Handle pixelClusterShapeCacheH;
+ iEvent.getByToken(pixelClusterShapeCacheToken_, pixelClusterShapeCacheH);
+ auto const & pixelClusterShapeCache = *pixelClusterShapeCacheH;
+
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];
+
+ auto 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
+
+
+ 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[SiPixelPhase1TrackClustersOnTrackPositionB].fill(clustgp.z(), clustgp.phi(), id, &iEvent);
+ histo[SiPixelPhase1TrackClustersOnTrackPositionF].fill(clustgp.x(), clustgp.y(), id, &iEvent);
+
+ if(tkTpl.pxbLadder(id)%2==1) {
+ 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);
- }
- }
-
- 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[SiPixelPhase1TrackClustersNTracksInVolume].fill(0, DetId(0), &iEvent);
}
}
- histo[ONTRACK_NCLUSTERS].executePerEventHarvesting(&iEvent);
- histo[OFFTRACK_NCLUSTERS].executePerEventHarvesting(&iEvent);
+ histo[SiPixelPhase1TrackClustersOnTrackNClusters].executePerEventHarvesting(&iEvent);
}
+}// namespace
+
+#include "FWCore/Framework/interface/MakerMacros.h"
DEFINE_FWK_MODULE(SiPixelPhase1TrackClusters);