39 ttree_track_hits_strip_(
nullptr),
40 trackerHitAssociatorConfig_(consumesCollector()) {
67 ttree_track_hits_strip_->Branch(
"strip_rechitx", &
strip_rechitx,
"strip_rechitx/F", bufsize);
68 ttree_track_hits_strip_->Branch(
"strip_rechity", &
strip_rechity,
"strip_rechity/F", bufsize);
69 ttree_track_hits_strip_->Branch(
"strip_rechitz", &
strip_rechitz,
"strip_rechitz/F", bufsize);
71 ttree_track_hits_strip_->Branch(
"strip_rechiterrx", &
strip_rechiterrx,
"strip_rechiterrx/F", bufsize);
72 ttree_track_hits_strip_->Branch(
"strip_rechiterry", &
strip_rechiterry,
"strip_rechiterry/F", bufsize);
74 ttree_track_hits_strip_->Branch(
"strip_rechitresx", &
strip_rechitresx,
"strip_rechitresx/F", bufsize);
76 ttree_track_hits_strip_->Branch(
"strip_rechitresx2", &
strip_rechitresx2,
"strip_rechitresx2/F", bufsize);
78 ttree_track_hits_strip_->Branch(
"strip_rechitresy", &
strip_rechitresy,
"strip_rechitresy/F", bufsize);
80 ttree_track_hits_strip_->Branch(
"strip_rechitpullx", &
strip_rechitpullx,
"strip_rechitpullx/F", bufsize);
81 ttree_track_hits_strip_->Branch(
"strip_rechitpully", &
strip_rechitpully,
"strip_rechitpully/F", bufsize);
83 ttree_track_hits_strip_->Branch(
"strip_is_stereo", &
strip_is_stereo,
"strip_is_stereo/I", bufsize);
84 ttree_track_hits_strip_->Branch(
"strip_hit_type", &
strip_hit_type,
"strip_hit_type/I", bufsize);
85 ttree_track_hits_strip_->Branch(
"detector_type", &
detector_type,
"detector_type/I", bufsize);
87 ttree_track_hits_strip_->Branch(
"strip_trk_pt", &
strip_trk_pt,
"strip_trk_pt/F", bufsize);
88 ttree_track_hits_strip_->Branch(
"strip_cotalpha", &
strip_cotalpha,
"strip_cotalpha/F", bufsize);
89 ttree_track_hits_strip_->Branch(
"strip_cotbeta", &
strip_cotbeta,
"strip_cotbeta/F", bufsize);
90 ttree_track_hits_strip_->Branch(
"strip_locbx", &
strip_locbx,
"strip_locbx/F", bufsize);
91 ttree_track_hits_strip_->Branch(
"strip_locby", &
strip_locby,
"strip_locby/F", bufsize);
92 ttree_track_hits_strip_->Branch(
"strip_locbz", &
strip_locbz,
"strip_locbz/F", bufsize);
93 ttree_track_hits_strip_->Branch(
"strip_charge", &
strip_charge,
"strip_charge/F", bufsize);
94 ttree_track_hits_strip_->Branch(
"strip_size", &
strip_size,
"strip_size/I", bufsize);
96 ttree_track_hits_strip_->Branch(
"strip_edge", &
strip_edge,
"strip_edge/I", bufsize);
97 ttree_track_hits_strip_->Branch(
"strip_nsimhit", &
strip_nsimhit,
"strip_nsimhit/I", bufsize);
98 ttree_track_hits_strip_->Branch(
"strip_pidhit", &
strip_pidhit,
"strip_pidhit/I", bufsize);
99 ttree_track_hits_strip_->Branch(
"strip_simproc", &
strip_simproc,
"strip_simproc/I", bufsize);
101 ttree_track_hits_strip_->Branch(
"strip_subdet_id", &
strip_subdet_id,
"strip_subdet_id/I", bufsize);
103 ttree_track_hits_strip_->Branch(
"strip_tib_layer", &
strip_tib_layer,
"strip_tib_layer/I", bufsize);
104 ttree_track_hits_strip_->Branch(
"strip_tib_module", &
strip_tib_module,
"strip_tib_module/I", bufsize);
105 ttree_track_hits_strip_->Branch(
"strip_tib_order", &
strip_tib_order,
"strip_tib_order/I", bufsize);
106 ttree_track_hits_strip_->Branch(
"strip_tib_side", &
strip_tib_side,
"strip_tib_side/I", bufsize);
107 ttree_track_hits_strip_->Branch(
109 ttree_track_hits_strip_->Branch(
111 ttree_track_hits_strip_->Branch(
113 ttree_track_hits_strip_->Branch(
115 ttree_track_hits_strip_->Branch(
117 ttree_track_hits_strip_->Branch(
119 ttree_track_hits_strip_->Branch(
121 ttree_track_hits_strip_->Branch(
123 ttree_track_hits_strip_->Branch(
"strip_tib_is_rphi", &
strip_tib_is_rphi,
"strip_tib_is_rphi/I", bufsize);
124 ttree_track_hits_strip_->Branch(
"strip_tib_is_stereo", &
strip_tib_is_stereo,
"strip_tib_is_stereo/I", bufsize);
125 ttree_track_hits_strip_->Branch(
"strip_tob_layer", &
strip_tob_layer,
"strip_tob_layer/I", bufsize);
126 ttree_track_hits_strip_->Branch(
"strip_tob_module", &
strip_tob_module,
"strip_tob_module/I", bufsize);
127 ttree_track_hits_strip_->Branch(
"strip_tob_side", &
strip_tob_side,
"strip_tob_side/I", bufsize);
128 ttree_track_hits_strip_->Branch(
130 ttree_track_hits_strip_->Branch(
132 ttree_track_hits_strip_->Branch(
134 ttree_track_hits_strip_->Branch(
136 ttree_track_hits_strip_->Branch(
"strip_tob_rod_number", &
strip_tob_rod_number,
"strip_tob_rod_number/I", bufsize);
137 ttree_track_hits_strip_->Branch(
140 ttree_track_hits_strip_->Branch(
"strip_prob", &
strip_prob,
"strip_prob/F", bufsize);
141 ttree_track_hits_strip_->Branch(
"strip_qbin", &
strip_qbin,
"strip_qbin/I", bufsize);
143 ttree_track_hits_strip_->Branch(
"strip_nprm", &
strip_nprm,
"strip_nprm/I", bufsize);
145 ttree_track_hits_strip_->Branch(
"strip_pidhit1", &
strip_pidhit1,
"strip_pidhit1/I", bufsize);
146 ttree_track_hits_strip_->Branch(
"strip_simproc1", &
strip_simproc1,
"strip_simproc1/I", bufsize);
148 ttree_track_hits_strip_->Branch(
"strip_pidhit2", &
strip_pidhit2,
"strip_pidhit2/I", bufsize);
149 ttree_track_hits_strip_->Branch(
"strip_simproc2", &
strip_simproc2,
"strip_simproc2/I", bufsize);
151 ttree_track_hits_strip_->Branch(
"strip_pidhit3", &
strip_pidhit3,
"strip_pidhit3/I", bufsize);
152 ttree_track_hits_strip_->Branch(
"strip_simproc3", &
strip_simproc3,
"strip_simproc3/I", bufsize);
154 ttree_track_hits_strip_->Branch(
"strip_pidhit4", &
strip_pidhit4,
"strip_pidhit4/I", bufsize);
155 ttree_track_hits_strip_->Branch(
"strip_simproc4", &
strip_simproc4,
"strip_simproc4/I", bufsize);
157 ttree_track_hits_strip_->Branch(
"strip_pidhit5", &
strip_pidhit5,
"strip_pidhit5/I", bufsize);
158 ttree_track_hits_strip_->Branch(
"strip_simproc5", &
strip_simproc5,
"strip_simproc5/I", bufsize);
160 ttree_track_hits_strip_->Branch(
"strip_split", &
strip_split,
"strip_split/I", bufsize);
162 ttree_track_hits_strip_->Branch(
"strip_clst_err_x", &
strip_clst_err_x,
"strip_clst_err_x/F", bufsize);
163 ttree_track_hits_strip_->Branch(
"strip_clst_err_y", &
strip_clst_err_y,
"strip_clst_err_y/F", bufsize);
383 cout <<
"evt = " <<
evt << endl;
386 float radtodeg = 180.0 /
math_pi;
390 float mindist = 999999.9;
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) {
777 auto& stripCharges = cluster->amplitudes();
779 for (
unsigned int i = 0;
i < stripCharges.size(); ++
i) {
780 charge += stripCharges[
i];
787 float mindist = 999999.9;
794 if (!matched.empty()) {
799 for (vector<PSimHit>::const_iterator
m = matched.begin();
m < matched.end(); ++
m) {
800 float dist =
abs((hit2d)->localPosition().
x() - (*m).localPosition().x());
802 if (dist < mindist) {
846 for (TrackerGeometry::DetContainer::const_iterator it = pDD->
dets().begin(); it != pDD->
dets().end(); it++) {
847 DetId detId = ((*it)->geographicalId());
850 if (dsmatch == recHitColl->
end())
860 for (; pixeliter != pixelrechitRangeIteratorEnd; ++pixeliter) {
865 if (matched.empty()) {
866 cout <<
"SiPixelErrorEstimation::analyze: rechits without associated simhit !!!!!!!" << endl;
1007 cout <<
"SiPixelErrorEstimation::analyze: Not in a pixel detector !!!!!" << endl;
1015 if (pixeliter->cluster()->getSplitClusterErrorX() > 0.0 && pixeliter->cluster()->getSplitClusterErrorY() > 0.0) {
1024 const int maxPixelCol = pixeliter->cluster()->maxPixelCol();
1025 const int maxPixelRow = pixeliter->cluster()->maxPixelRow();
1026 const int minPixelCol = pixeliter->cluster()->minPixelCol();
1027 const int minPixelRow = pixeliter->cluster()->minPixelRow();
1063 if (tmp_nrows == 80)
1065 else if (tmp_nrows == 160)
1068 cout <<
"-------------------------------------------------- Wrong module size !!!" << endl;
1097 LocalError le = pixeliter->localPositionError();
1101 bool found_hit_from_generated_particle =
false;
1104 float closest_dist = 99999.9;
1105 std::vector<PSimHit>::const_iterator closest_simhit = matched.begin();
1107 for (std::vector<PSimHit>::const_iterator
m = matched.begin();
m < matched.end();
m++) {
1109 int pid = (*m).particleType();
1114 float simhitx = 0.5 * ((*m).entryPoint().x() + (*m).exitPoint().x());
1115 float simhity = 0.5 * ((*m).entryPoint().y() + (*m).exitPoint().y());
1117 float x_res = simhitx -
rechitx;
1118 float y_res = simhity -
rechity;
1120 float dist =
sqrt(x_res * x_res + y_res * y_res);
1122 if (dist < closest_dist) {
1123 closest_dist = dist;
1125 found_hit_from_generated_particle =
true;
1131 if (
checkType_ && !found_hit_from_generated_particle)
1134 all_x1 = (*closest_simhit).entryPoint().x();
1135 all_y1 = (*closest_simhit).entryPoint().y();
1136 all_z1 = (*closest_simhit).entryPoint().z();
1137 all_x2 = (*closest_simhit).exitPoint().x();
1138 all_y2 = (*closest_simhit).exitPoint().y();
1139 all_z2 = (*closest_simhit).exitPoint().z();
1141 (*closest_simhit).entryPoint().x(), (*closest_simhit).entryPoint().y(), (*closest_simhit).entryPoint().z()));
1143 (*closest_simhit).exitPoint().x(), (*closest_simhit).exitPoint().y(), (*closest_simhit).exitPoint().z()));
1152 (*closest_simhit).entryPoint().x(), (*closest_simhit).entryPoint().y(), (*closest_simhit).entryPoint().z()));
1154 (*closest_simhit).exitPoint().x(), (*closest_simhit).exitPoint().y(), (*closest_simhit).exitPoint().z()));
1191 all_simpx = (*closest_simhit).momentumAtEntry().x();
1192 all_simpy = (*closest_simhit).momentumAtEntry().y();
1193 all_simpz = (*closest_simhit).momentumAtEntry().z();
1194 all_eloss = (*closest_simhit).energyLoss();
1197 all_pidhit = (*closest_simhit).particleType();
1198 all_trkid = (*closest_simhit).trackId();
1207 SimTrackContainer::const_iterator trksiter;
1208 for (trksiter = trks.begin(); trksiter != trks.end(); trksiter++)
1209 if ((
int)trksiter->trackId() ==
all_trkid) {
1221 const std::vector<SiPixelCluster::Pixel>& pixvector = clust->pixels();
1222 for (
int i = 0;
i < (
int)pixvector.size(); ++
i) {
1253 reco::TrackCollection::const_iterator tciter;
1255 if (!tracks->empty()) {
1257 for (tciter = tracks->begin(); tciter != tracks->end(); ++tciter) {
1259 for (
auto const hit : tciter->recHits()) {
1323 position =
hit->localPosition();
1324 error =
hit->localPositionError();
1337 if (matchedhit->
cluster()->getSplitClusterErrorX() > 0.0 &&
1338 matchedhit->
cluster()->getSplitClusterErrorY() > 0.0)
1358 if (!matched.empty()) {
1360 float distx, disty, dist;
1361 bool found_hit_from_generated_particle =
false;
1363 int n_assoc_muon = 0;
1365 vector<PSimHit>::const_iterator closestit = matched.begin();
1366 for (vector<PSimHit>::const_iterator
m = matched.begin();
m < matched.end(); ++
m) {
1368 int pid = (*m).particleType();
1373 float simhitx = 0.5 * ((*m).entryPoint().x() + (*m).exitPoint().x());
1374 float simhity = 0.5 * ((*m).entryPoint().y() + (*m).exitPoint().y());
1376 distx = fabs(
rechitx - simhitx);
1377 disty = fabs(
rechity - simhity);
1378 dist =
sqrt(distx * distx + disty * disty);
1380 if (dist < mindist) {
1385 found_hit_from_generated_particle =
true;
1391 if (
checkType_ && !found_hit_from_generated_particle)
1400 DetId detId =
hit->geographicalId();
1406 pidhit = (*closestit).particleType();
1409 simhitx = 0.5 * ((*closestit).entryPoint().x() + (*closestit).exitPoint().x());
1410 simhity = 0.5 * ((*closestit).entryPoint().y() + (*closestit).exitPoint().y());
1417 float simhitpx = (*closestit).momentumAtEntry().x();
1418 float simhitpy = (*closestit).momentumAtEntry().y();
1419 float simhitpz = (*closestit).momentumAtEntry().z();
1421 beta = atan2(simhitpz, simhitpy) * radtodeg;
1422 alpha = atan2(simhitpz, simhitpx) * radtodeg;
1428 float locx = simhitpx;
1429 float locy = simhitpy;
1430 float locz = simhitpz;
1432 bool isFlipped =
false;
1440 trk_alpha = acos(locx /
sqrt(locx * locx + locz * locz)) * radtodeg;
1444 trk_beta = acos(locy /
sqrt(locy * locy + locz * locz)) * radtodeg;
1446 phi = tciter->momentum().phi() / math_pi * 180.0;
1447 eta = tciter->momentum().eta();
1449 const int maxPixelCol = (*matchedhit).cluster()->maxPixelCol();
1450 const int maxPixelRow = (*matchedhit).cluster()->maxPixelRow();
1451 const int minPixelCol = (*matchedhit).cluster()->minPixelCol();
1452 const int minPixelRow = (*matchedhit).cluster()->minPixelRow();
1480 if (tmp_nrows == 80)
1482 else if (tmp_nrows == 160)
1485 cout <<
"-------------------------------------------------- Wrong module size !!!" << endl;
1520 cout <<
"---------------- RecHit with no associated SimHit !!! -------------------------- " << endl;
1542 cout <<
"---------------------------------------------- Not a pixel detector !!!!!!!!!!!!!!" << endl;
1549 float xcenter = cl.
x();
1550 float ycenter = cl.
y();
1558 float gp_mod =
sqrt(gp.
x() * gp.
x() + gp.
y() * gp.
y() + gp.
z() * gp.
z());
1561 float gpx = gp.
x() / gp_mod;
1562 float gpy = gp.
y() / gp_mod;
1563 float gpz = gp.
z() / gp_mod;
1590 float gv_dot_gvx = gv.
x() * gvx.
x() + gv.
y() * gvx.
y() + gv.
z() * gvx.
z();
1591 float gv_dot_gvy = gv.
x() * gvy.
x() + gv.
y() * gvy.
y() + gv.
z() * gvy.
z();
1592 float gv_dot_gvz = gv.
x() * gvz.
x() + gv.
y() * gvz.
y() + gv.
z() * gvz.
z();
1595 alpha = atan2(gv_dot_gvz, gv_dot_gvx);
1596 beta = atan2(gv_dot_gvz, gv_dot_gvy);
ClusterRef cluster() const
GlobalPoint toGlobal(const Point2DBase< Scalar, LocalTag > lp) const
T getParameter(std::string const &) const
EventNumber_t event() const
T getUntrackedParameter(std::string const &, T const &) const
virtual int nrows() const =0
boost::transform_iterator< IterHelp, const_IdIter > const_iterator
bool tobIsDoubleSide(const DetId &id) const
const_iterator end(bool update=false) 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
TTree * ttree_track_hits_
bool tobIsStereo(const DetId &id) const
TrackerHitAssociator::Config trackerHitAssociatorConfig_
bool getByToken(EDGetToken token, Handle< PROD > &result) const
int strip_tib_is_z_minus_side
virtual bool isItEdgePixelInX(int ixbin) const =0
int strip_tob_is_z_minus_side
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
void analyze(const edm::Event &, const edm::EventSetup &) override
virtual bool isItEdgePixelInY(int iybin) const =0
unsigned int pxbModule(const DetId &id) const
LocalVector toLocal(const reco::Track::Vector &v, const Surface &s)
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
const DetContainer & dets() const override
Returm a vector of all GeomDet (including all GeomDetUnits)
const TrackerGeomDet * idToDetUnit(DetId) const override
Return the pointer to the GeomDetUnit corresponding to a given DetId.
unsigned int tibSide(const DetId &id) const
int strip_tob_module_number
Measurement2DPoint MeasurementPoint
Measurement points are two-dimensional by default.
bool tibIsExternalString(const DetId &id) const
#define DEFINE_FWK_MODULE(type)
bool tibIsRPhi(const DetId &id) const
edm::EDGetTokenT< edm::SimTrackContainer > tSimTrackContainer
bool tibIsZMinusSide(const DetId &id) const
Local3DPoint localPosition() const
std::shared_ptr< TrackingRecHit const > ConstRecHitPointer
bool tobIsZPlusSide(const DetId &id) const
virtual bool containsBigPixelInX(int ixmin, int ixmax) const =0
unsigned int tobSide(const DetId &id) const
virtual MeasurementPoint measurementPosition(const LocalPoint &) const =0
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)
SiPixelErrorEstimation(const edm::ParameterSet &)
ClusterRef cluster() const
int strip_tob_layer_number
LocalVector momentum() const
Momentum vector in the local frame.
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
Point3DBase< float, LocalTag > Local3DPoint
Detector identifier class for the strip tracker.
unsigned int stereo() const
stereo
virtual TrackingRecHit const * hit() const
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.
virtual LocalPoint localPosition(const MeasurementPoint &) const =0
unsigned short processType() const
unsigned int tobModule(const DetId &id) const
int strip_tib_string_number
const_iterator find(id_type i, bool update=false) const
Pixel cluster – collection of neighboring pixels above threshold.
virtual int ncolumns() const =0
static int position[264][3]
int strip_tib_module_number
const TrackerGeomDet * idToDet(DetId) const override
~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
unsigned int tobRod(const DetId &id) const
float all_pixel_clst_err_x
ModuleGeometry moduleGeometry() const
bool tibIsInternalString(const DetId &id) const
const PositionType & position() const
T const * product() const
std::vector< SimTrack > SimTrackContainer
int strip_tib_is_double_side
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
virtual bool containsBigPixelInY(int iymin, int iymax) const =0