37 ttree_all_hits_(nullptr),
38 ttree_track_hits_(nullptr),
39 ttree_track_hits_strip_(nullptr),
40 trackerHitAssociatorConfig_(consumesCollector()) {
70 ttree_track_hits_strip_->Branch(
"strip_rechitx", &
strip_rechitx,
"strip_rechitx/F", bufsize);
71 ttree_track_hits_strip_->Branch(
"strip_rechity", &
strip_rechity,
"strip_rechity/F", bufsize);
72 ttree_track_hits_strip_->Branch(
"strip_rechitz", &
strip_rechitz,
"strip_rechitz/F", bufsize);
74 ttree_track_hits_strip_->Branch(
"strip_rechiterrx", &
strip_rechiterrx,
"strip_rechiterrx/F", bufsize);
75 ttree_track_hits_strip_->Branch(
"strip_rechiterry", &
strip_rechiterry,
"strip_rechiterry/F", bufsize);
77 ttree_track_hits_strip_->Branch(
"strip_rechitresx", &
strip_rechitresx,
"strip_rechitresx/F", bufsize);
79 ttree_track_hits_strip_->Branch(
"strip_rechitresx2", &
strip_rechitresx2,
"strip_rechitresx2/F", bufsize);
81 ttree_track_hits_strip_->Branch(
"strip_rechitresy", &
strip_rechitresy,
"strip_rechitresy/F", bufsize);
83 ttree_track_hits_strip_->Branch(
"strip_rechitpullx", &
strip_rechitpullx,
"strip_rechitpullx/F", bufsize);
84 ttree_track_hits_strip_->Branch(
"strip_rechitpully", &
strip_rechitpully,
"strip_rechitpully/F", bufsize);
86 ttree_track_hits_strip_->Branch(
"strip_is_stereo", &
strip_is_stereo,
"strip_is_stereo/I", bufsize);
87 ttree_track_hits_strip_->Branch(
"strip_hit_type", &
strip_hit_type,
"strip_hit_type/I", bufsize);
88 ttree_track_hits_strip_->Branch(
"detector_type", &
detector_type,
"detector_type/I", bufsize);
90 ttree_track_hits_strip_->Branch(
"strip_trk_pt", &
strip_trk_pt,
"strip_trk_pt/F", bufsize);
91 ttree_track_hits_strip_->Branch(
"strip_cotalpha", &
strip_cotalpha,
"strip_cotalpha/F", bufsize);
92 ttree_track_hits_strip_->Branch(
"strip_cotbeta", &
strip_cotbeta,
"strip_cotbeta/F", bufsize);
93 ttree_track_hits_strip_->Branch(
"strip_locbx", &
strip_locbx,
"strip_locbx/F", bufsize);
94 ttree_track_hits_strip_->Branch(
"strip_locby", &
strip_locby,
"strip_locby/F", bufsize);
95 ttree_track_hits_strip_->Branch(
"strip_locbz", &
strip_locbz,
"strip_locbz/F", bufsize);
96 ttree_track_hits_strip_->Branch(
"strip_charge", &
strip_charge,
"strip_charge/F", bufsize);
97 ttree_track_hits_strip_->Branch(
"strip_size", &
strip_size,
"strip_size/I", bufsize);
99 ttree_track_hits_strip_->Branch(
"strip_edge", &
strip_edge,
"strip_edge/I", bufsize);
100 ttree_track_hits_strip_->Branch(
"strip_nsimhit", &
strip_nsimhit,
"strip_nsimhit/I", bufsize);
101 ttree_track_hits_strip_->Branch(
"strip_pidhit", &
strip_pidhit,
"strip_pidhit/I", bufsize);
102 ttree_track_hits_strip_->Branch(
"strip_simproc", &
strip_simproc,
"strip_simproc/I", bufsize);
104 ttree_track_hits_strip_->Branch(
"strip_subdet_id", &
strip_subdet_id,
"strip_subdet_id/I", bufsize);
106 ttree_track_hits_strip_->Branch(
"strip_tib_layer", &
strip_tib_layer,
"strip_tib_layer/I", bufsize);
107 ttree_track_hits_strip_->Branch(
"strip_tib_module", &
strip_tib_module,
"strip_tib_module/I", bufsize);
108 ttree_track_hits_strip_->Branch(
"strip_tib_order", &
strip_tib_order,
"strip_tib_order/I", bufsize);
109 ttree_track_hits_strip_->Branch(
"strip_tib_side", &
strip_tib_side,
"strip_tib_side/I", bufsize);
110 ttree_track_hits_strip_->Branch(
112 ttree_track_hits_strip_->Branch(
114 ttree_track_hits_strip_->Branch(
116 ttree_track_hits_strip_->Branch(
118 ttree_track_hits_strip_->Branch(
120 ttree_track_hits_strip_->Branch(
122 ttree_track_hits_strip_->Branch(
124 ttree_track_hits_strip_->Branch(
126 ttree_track_hits_strip_->Branch(
"strip_tib_is_rphi", &
strip_tib_is_rphi,
"strip_tib_is_rphi/I", bufsize);
127 ttree_track_hits_strip_->Branch(
"strip_tib_is_stereo", &
strip_tib_is_stereo,
"strip_tib_is_stereo/I", bufsize);
128 ttree_track_hits_strip_->Branch(
"strip_tob_layer", &
strip_tob_layer,
"strip_tob_layer/I", bufsize);
129 ttree_track_hits_strip_->Branch(
"strip_tob_module", &
strip_tob_module,
"strip_tob_module/I", bufsize);
130 ttree_track_hits_strip_->Branch(
"strip_tob_side", &
strip_tob_side,
"strip_tob_side/I", bufsize);
131 ttree_track_hits_strip_->Branch(
133 ttree_track_hits_strip_->Branch(
135 ttree_track_hits_strip_->Branch(
137 ttree_track_hits_strip_->Branch(
139 ttree_track_hits_strip_->Branch(
"strip_tob_rod_number", &
strip_tob_rod_number,
"strip_tob_rod_number/I", bufsize);
140 ttree_track_hits_strip_->Branch(
143 ttree_track_hits_strip_->Branch(
"strip_prob", &
strip_prob,
"strip_prob/F", bufsize);
144 ttree_track_hits_strip_->Branch(
"strip_qbin", &
strip_qbin,
"strip_qbin/I", bufsize);
146 ttree_track_hits_strip_->Branch(
"strip_nprm", &
strip_nprm,
"strip_nprm/I", bufsize);
148 ttree_track_hits_strip_->Branch(
"strip_pidhit1", &
strip_pidhit1,
"strip_pidhit1/I", bufsize);
149 ttree_track_hits_strip_->Branch(
"strip_simproc1", &
strip_simproc1,
"strip_simproc1/I", bufsize);
151 ttree_track_hits_strip_->Branch(
"strip_pidhit2", &
strip_pidhit2,
"strip_pidhit2/I", bufsize);
152 ttree_track_hits_strip_->Branch(
"strip_simproc2", &
strip_simproc2,
"strip_simproc2/I", bufsize);
154 ttree_track_hits_strip_->Branch(
"strip_pidhit3", &
strip_pidhit3,
"strip_pidhit3/I", bufsize);
155 ttree_track_hits_strip_->Branch(
"strip_simproc3", &
strip_simproc3,
"strip_simproc3/I", bufsize);
157 ttree_track_hits_strip_->Branch(
"strip_pidhit4", &
strip_pidhit4,
"strip_pidhit4/I", bufsize);
158 ttree_track_hits_strip_->Branch(
"strip_simproc4", &
strip_simproc4,
"strip_simproc4/I", bufsize);
160 ttree_track_hits_strip_->Branch(
"strip_pidhit5", &
strip_pidhit5,
"strip_pidhit5/I", bufsize);
161 ttree_track_hits_strip_->Branch(
"strip_simproc5", &
strip_simproc5,
"strip_simproc5/I", bufsize);
163 ttree_track_hits_strip_->Branch(
"strip_split", &
strip_split,
"strip_split/I", bufsize);
165 ttree_track_hits_strip_->Branch(
"strip_clst_err_x", &
strip_clst_err_x,
"strip_clst_err_x/F", bufsize);
166 ttree_track_hits_strip_->Branch(
"strip_clst_err_y", &
strip_clst_err_y,
"strip_clst_err_y/F", bufsize);
385 cout <<
"evt = " <<
evt << endl;
387 float math_pi = 3.14159265;
388 float radtodeg = 180.0 / math_pi;
392 float mindist = 999999.9;
394 std::vector<PSimHit> matched;
414 for (vector<Trajectory>::const_iterator it = trajCollectionHandle->begin(); it != trajCollectionHandle->end(); ++it) {
415 vector<TrajectoryMeasurement> tmColl = it->measurements();
416 for (vector<TrajectoryMeasurement>::const_iterator itTraj = tmColl.begin(); itTraj != tmColl.end(); ++itTraj) {
417 if (!itTraj->updatedState().isValid())
505 if (trans_trk_rec_hit_point ==
nullptr)
510 if (trk_rec_hit ==
nullptr)
513 DetId detid = (trk_rec_hit)->geographicalId();
526 if (!matchedhit && !hit2d && !hit1d)
529 position = (trk_rec_hit)->localPosition();
530 error = (trk_rec_hit)->localPositionError();
553 float locx = localDir.
x();
554 float locy = localDir.
y();
555 float locz = localDir.
z();
565 if (StripSubdet.
stereo() == 0)
575 if (strip_geom_det_unit !=
nullptr) {
652 if (cluster->getSplitClusterError() > 0.0)
661 const auto& stripCharges = cluster->amplitudes();
663 for (
unsigned int i = 0;
i < stripCharges.size(); ++
i) {
664 charge += stripCharges[
i];
671 float mindist = 999999.9;
678 if (!matched.empty()) {
683 int strip_nprimaries = 0;
684 int current_index = 0;
686 for (vector<PSimHit>::const_iterator
m = matched.begin();
m < matched.end(); ++
m) {
689 if ((*m).processType() == 2)
692 if (current_index == 1) {
695 }
else if (current_index == 2) {
698 }
else if (current_index == 3) {
701 }
else if (current_index == 4) {
704 }
else if (current_index == 5) {
709 float dist =
abs((hit1d)->localPosition().
x() - (*m).localPosition().x());
711 if (dist < mindist) {
773 auto& stripCharges = cluster->amplitudes();
775 for (
unsigned int i = 0;
i < stripCharges.size(); ++
i) {
776 charge += stripCharges[
i];
783 float mindist = 999999.9;
790 if (!matched.empty()) {
795 for (vector<PSimHit>::const_iterator
m = matched.begin();
m < matched.end(); ++
m) {
796 float dist =
abs((hit2d)->localPosition().
x() - (*m).localPosition().x());
798 if (dist < mindist) {
842 for (TrackerGeometry::DetContainer::const_iterator it = pDD->dets().begin(); it != pDD->dets().end(); it++) {
843 DetId detId = ((*it)->geographicalId());
846 if (dsmatch == recHitColl->end())
853 std::vector<PSimHit> matched;
856 for (; pixeliter != pixelrechitRangeIteratorEnd; ++pixeliter) {
861 if (matched.empty()) {
862 cout <<
"SiPixelErrorEstimation::analyze: rechits without associated simhit !!!!!!!" << endl;
1003 cout <<
"SiPixelErrorEstimation::analyze: Not in a pixel detector !!!!!" << endl;
1011 if (pixeliter->cluster()->getSplitClusterErrorX() > 0.0 && pixeliter->cluster()->getSplitClusterErrorY() > 0.0) {
1020 const int maxPixelCol = pixeliter->cluster()->maxPixelCol();
1021 const int maxPixelRow = pixeliter->cluster()->maxPixelRow();
1022 const int minPixelCol = pixeliter->cluster()->minPixelCol();
1023 const int minPixelRow = pixeliter->cluster()->minPixelRow();
1059 if (tmp_nrows == 80)
1061 else if (tmp_nrows == 160)
1064 cout <<
"-------------------------------------------------- Wrong module size !!!" << endl;
1082 std::cout <<
"We are not in the pixel detector" << (int)detId.
subdetId() << endl;
1093 LocalError le = pixeliter->localPositionError();
1097 bool found_hit_from_generated_particle =
false;
1100 float closest_dist = 99999.9;
1101 std::vector<PSimHit>::const_iterator closest_simhit = matched.begin();
1103 for (std::vector<PSimHit>::const_iterator
m = matched.begin();
m < matched.end();
m++) {
1105 int pid = (*m).particleType();
1110 float simhitx = 0.5 * ((*m).entryPoint().x() + (*m).exitPoint().x());
1111 float simhity = 0.5 * ((*m).entryPoint().y() + (*m).exitPoint().y());
1113 float x_res = simhitx -
rechitx;
1114 float y_res = simhity -
rechity;
1116 float dist =
sqrt(x_res * x_res + y_res * y_res);
1118 if (dist < closest_dist) {
1119 closest_dist = dist;
1121 found_hit_from_generated_particle =
true;
1127 if (
checkType_ && !found_hit_from_generated_particle)
1130 all_x1 = (*closest_simhit).entryPoint().x();
1131 all_y1 = (*closest_simhit).entryPoint().y();
1132 all_z1 = (*closest_simhit).entryPoint().z();
1133 all_x2 = (*closest_simhit).exitPoint().x();
1134 all_y2 = (*closest_simhit).exitPoint().y();
1135 all_z2 = (*closest_simhit).exitPoint().z();
1137 (*closest_simhit).entryPoint().x(), (*closest_simhit).entryPoint().y(), (*closest_simhit).entryPoint().z()));
1139 (*closest_simhit).exitPoint().x(), (*closest_simhit).exitPoint().y(), (*closest_simhit).exitPoint().z()));
1148 (*closest_simhit).entryPoint().x(), (*closest_simhit).entryPoint().y(), (*closest_simhit).entryPoint().z()));
1150 (*closest_simhit).exitPoint().x(), (*closest_simhit).exitPoint().y(), (*closest_simhit).exitPoint().z()));
1187 all_simpx = (*closest_simhit).momentumAtEntry().x();
1188 all_simpy = (*closest_simhit).momentumAtEntry().y();
1189 all_simpz = (*closest_simhit).momentumAtEntry().z();
1190 all_eloss = (*closest_simhit).energyLoss();
1193 all_pidhit = (*closest_simhit).particleType();
1194 all_trkid = (*closest_simhit).trackId();
1203 SimTrackContainer::const_iterator trksiter;
1204 for (trksiter = trks.begin(); trksiter != trks.end(); trksiter++)
1205 if ((
int)trksiter->trackId() ==
all_trkid) {
1217 const std::vector<SiPixelCluster::Pixel>& pixvector = clust->pixels();
1218 for (
int i = 0;
i < (int)pixvector.size(); ++
i) {
1249 reco::TrackCollection::const_iterator tciter;
1251 if (!tracks->empty()) {
1253 for (tciter = tracks->begin(); tciter != tracks->end(); ++tciter) {
1255 for (
auto const hit : tciter->recHits()) {
1333 if (matchedhit->
cluster()->getSplitClusterErrorX() > 0.0 &&
1334 matchedhit->
cluster()->getSplitClusterErrorY() > 0.0)
1352 nsimhit = (int)matched.size();
1354 if (!matched.empty()) {
1356 float distx, disty, dist;
1357 bool found_hit_from_generated_particle =
false;
1359 int n_assoc_muon = 0;
1361 vector<PSimHit>::const_iterator closestit = matched.begin();
1362 for (vector<PSimHit>::const_iterator
m = matched.begin();
m < matched.end(); ++
m) {
1364 int pid = (*m).particleType();
1369 float simhitx = 0.5 * ((*m).entryPoint().x() + (*m).exitPoint().x());
1370 float simhity = 0.5 * ((*m).entryPoint().y() + (*m).exitPoint().y());
1372 distx = fabs(
rechitx - simhitx);
1373 disty = fabs(
rechity - simhity);
1374 dist =
sqrt(distx * distx + disty * disty);
1376 if (dist < mindist) {
1381 found_hit_from_generated_particle =
true;
1387 if (
checkType_ && !found_hit_from_generated_particle)
1396 DetId detId =
hit->geographicalId();
1402 pidhit = (*closestit).particleType();
1403 simproc = (int)(*closestit).processType();
1405 simhitx = 0.5 * ((*closestit).entryPoint().x() + (*closestit).exitPoint().x());
1406 simhity = 0.5 * ((*closestit).entryPoint().y() + (*closestit).exitPoint().y());
1413 float simhitpx = (*closestit).momentumAtEntry().x();
1414 float simhitpy = (*closestit).momentumAtEntry().y();
1415 float simhitpz = (*closestit).momentumAtEntry().z();
1417 beta = atan2(simhitpz, simhitpy) * radtodeg;
1418 alpha = atan2(simhitpz, simhitpx) * radtodeg;
1424 float locx = simhitpx;
1425 float locy = simhitpy;
1426 float locz = simhitpz;
1428 bool isFlipped =
false;
1436 trk_alpha = acos(locx /
sqrt(locx * locx + locz * locz)) * radtodeg;
1440 trk_beta = acos(locy /
sqrt(locy * locy + locz * locz)) * radtodeg;
1442 phi = tciter->momentum().phi() / math_pi * 180.0;
1443 eta = tciter->momentum().eta();
1445 const int maxPixelCol = (*matchedhit).cluster()->maxPixelCol();
1446 const int maxPixelRow = (*matchedhit).cluster()->maxPixelRow();
1447 const int minPixelCol = (*matchedhit).cluster()->minPixelCol();
1448 const int minPixelRow = (*matchedhit).cluster()->minPixelRow();
1476 if (tmp_nrows == 80)
1478 else if (tmp_nrows == 160)
1481 cout <<
"-------------------------------------------------- Wrong module size !!!" << endl;
1516 cout <<
"---------------- RecHit with no associated SimHit !!! -------------------------- " << endl;
1538 cout <<
"---------------------------------------------- Not a pixel detector !!!!!!!!!!!!!!" << endl;
1545 float xcenter = cl.
x();
1546 float ycenter = cl.
y();
1554 float gp_mod =
sqrt(gp.
x() * gp.
x() + gp.
y() * gp.
y() + gp.
z() * gp.
z());
1557 float gpx = gp.
x() / gp_mod;
1558 float gpy = gp.
y() / gp_mod;
1559 float gpz = gp.
z() / gp_mod;
1586 float gv_dot_gvx = gv.
x() * gvx.
x() + gv.
y() * gvx.
y() + gv.
z() * gvx.
z();
1587 float gv_dot_gvy = gv.
x() * gvy.
x() + gv.
y() * gvy.
y() + gv.
z() * gvy.
z();
1588 float gv_dot_gvz = gv.
x() * gvz.
x() + gv.
y() * gvz.
y() + gv.
z() * gvz.
z();
1591 alpha = atan2(gv_dot_gvz, gv_dot_gvx);
1592 beta = atan2(gv_dot_gvz, gv_dot_gvy);
edm::ESGetToken< TrackerGeometry, TrackerDigiGeometryRecord > trackerGeomToken_
ClusterRef cluster() const
GlobalPoint toGlobal(const Point2DBase< Scalar, LocalTag > lp) const
EventNumber_t event() const
T getUntrackedParameter(std::string const &, T const &) const
bool tobIsDoubleSide(const DetId &id) const
Point3DBase< Scalar, LocalTag > LocalPoint
float clusterProbability(unsigned int flags=0) const
bool tibIsDoubleSide(const DetId &id) const
unsigned int tibLayer(const DetId &id) const
unsigned int tibString(const DetId &id) const
int strip_tib_is_internal_string
virtual LocalPoint localPosition(const MeasurementPoint &) const =0
TTree * ttree_track_hits_
bool tobIsStereo(const DetId &id) const
virtual int ncolumns() const =0
TrackerHitAssociator::Config trackerHitAssociatorConfig_
bool getByToken(EDGetToken token, Handle< PROD > &result) const
int strip_tib_is_z_minus_side
int strip_tob_is_z_minus_side
#define DEFINE_FWK_MODULE(type)
unsigned int pxfDisk(const DetId &id) const
edm::EDGetTokenT< reco::TrackCollection > tTrackCollection
unsigned int pxbLadder(const DetId &id) const
std::vector< Track > TrackCollection
collection of Tracks
virtual int nrows() const =0
void analyze(const edm::Event &, const edm::EventSetup &) override
unsigned int pxbModule(const DetId &id) const
auto const & tracks
cannot be loose
int strip_tob_is_z_plus_side
bool tobIsRPhi(const DetId &id) const
const Plane & surface() const
The nominal surface of the GeomDet.
int strip_tob_is_double_side
bool tibIsZPlusSide(const DetId &id) const
unsigned int tibSide(const DetId &id) const
int strip_tob_module_number
Measurement2DPoint MeasurementPoint
Measurement points are two-dimensional by default.
virtual bool isItEdgePixelInX(int ixbin) const =0
bool tibIsExternalString(const DetId &id) const
bool tibIsRPhi(const DetId &id) const
edm::EDGetTokenT< edm::SimTrackContainer > tSimTrackContainer
virtual bool containsBigPixelInY(int iymin, int iymax) const =0
bool tibIsZMinusSide(const DetId &id) const
Local3DPoint localPosition() const
std::shared_ptr< TrackingRecHit const > ConstRecHitPointer
bool tobIsZPlusSide(const DetId &id) const
unsigned int tobSide(const DetId &id) const
bool tobIsZMinusSide(const DetId &id) const
constexpr int subdetId() const
get the contents of the subdetector field (not cast into any detector's numbering enum) ...
Abs< T >::type abs(const T &t)
virtual bool containsBigPixelInX(int ixmin, int ixmax) const =0
SiPixelErrorEstimation(const edm::ParameterSet &)
ClusterRef cluster() const
int strip_tob_layer_number
virtual MeasurementPoint measurementPosition(const LocalPoint &) const =0
LocalVector momentum() const
Momentum vector in the local frame.
static constexpr auto TOB
LocalVector toLocal(const reco::Track::Vector &v, const Surface &s)
unsigned int tibModule(const DetId &id) const
unsigned int pxfModule(const DetId &id) const
unsigned int pxbLayer(const DetId &id) const
edm::EDGetTokenT< std::vector< Trajectory > > tTrajectory
Detector identifier class for the strip tracker.
boost::transform_iterator< IterHelp, const_IdIter > const_iterator
unsigned int stereo() const
stereo
virtual TrackingRecHit const * hit() const
static constexpr auto TIB
float all_pixel_clst_err_y
int strip_tib_is_z_plus_side
T const * product() const
void computeAnglesFromDetPosition(const SiPixelCluster &cl, const GeomDetUnit &det, float &alpha, float &beta)
ClusterRef cluster() const
bool tibIsStereo(const DetId &id) const
virtual const PixelTopology & specificTopology() const
Returns a reference to the pixel proxy topology.
T const * product() const
T getParameter(std::string const &) const
unsigned short processType() const
edm::ESGetToken< MagneticField, IdealMagneticFieldRecord > magneticFieldToken_
unsigned int tobModule(const DetId &id) const
int strip_tib_string_number
Pixel cluster – collection of neighboring pixels above threshold.
virtual bool isItEdgePixelInY(int iybin) const =0
edm::ESGetToken< TrackerTopology, TrackerTopologyRcd > trackerTopoToken_
static int position[264][3]
int strip_tib_module_number
~SiPixelErrorEstimation() override
unsigned int pxfSide(const DetId &id) const
std::vector< PSimHit > associateHit(const TrackingRecHit &thit) const
int strip_tib_layer_number
edm::EDGetTokenT< SiPixelRecHitCollection > tPixRecHitCollection
TTree * ttree_track_hits_strip_
int strip_tib_is_external_string
ESHandle< T > getHandle(const ESGetToken< T, R > &iToken) const
unsigned int tobRod(const DetId &id) const
float all_pixel_clst_err_x
bool tibIsInternalString(const DetId &id) const
const PositionType & position() const
std::vector< SimTrack > SimTrackContainer
int strip_tib_is_double_side
tuple size
Write out results.
unsigned int pxfPanel(const DetId &id) const
unsigned int pxfBlade(const DetId &id) const
unsigned int tobLayer(const DetId &id) const
unsigned int tibOrder(const DetId &id) const
SiStripModuleGeometry moduleGeometry() const
Point3DBase< float, LocalTag > Local3DPoint