CMS 3D CMS Logo

SiPixelErrorEstimation.cc
Go to the documentation of this file.
1 // Package: SiPixelErrorEstimation
2 // Class: SiPixelErrorEstimation
3 // Original Author: Gavril Giurgiu (JHU)
4 // Created: Fri May 4 17:48:24 CDT 2007
5 
6 #include <iostream>
8 
11 
15 
21 
23 
25 
28 
31 
32 using namespace std;
33 using namespace edm;
34 
36  : tfile_(nullptr),
37  ttree_all_hits_(nullptr),
38  ttree_track_hits_(nullptr),
39  ttree_track_hits_strip_(nullptr),
40  trackerHitAssociatorConfig_(consumesCollector()) {
41  //Read config file
42  outputFile_ = ps.getUntrackedParameter<string>("outputFile", "SiPixelErrorEstimation_Ntuple.root");
43 
44  // Replace "ctfWithMaterialTracks" with "generalTracks"
45  //src_ = ps.getUntrackedParameter<std::string>( "src", "ctfWithMaterialTracks" );
46  src_ = ps.getUntrackedParameter<std::string>("src", "generalTracks");
47 
48  checkType_ = ps.getParameter<bool>("checkType");
49  genType_ = ps.getParameter<int>("genType");
50  include_trk_hits_ = ps.getParameter<bool>("include_trk_hits");
51 
52  tTrajectory = consumes<std::vector<Trajectory>>(src_);
53  tPixRecHitCollection = consumes<SiPixelRecHitCollection>(edm::InputTag("siPixelRecHits"));
54  tSimTrackContainer = consumes<edm::SimTrackContainer>(edm::InputTag("g4SimHits"));
55  tTrackCollection = consumes<reco::TrackCollection>(src_);
56 }
57 
59 
61  int bufsize = 64000;
62 
63  tfile_ = new TFile(outputFile_.c_str(), "RECREATE");
64 
65  ttree_track_hits_strip_ = new TTree("TrackHitNtupleStrip", "TrackHitNtupleStrip");
66 
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);
70 
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);
73 
74  ttree_track_hits_strip_->Branch("strip_rechitresx", &strip_rechitresx, "strip_rechitresx/F", bufsize);
75 
76  ttree_track_hits_strip_->Branch("strip_rechitresx2", &strip_rechitresx2, "strip_rechitresx2/F", bufsize);
77 
78  ttree_track_hits_strip_->Branch("strip_rechitresy", &strip_rechitresy, "strip_rechitresy/F", bufsize);
79 
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);
82 
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);
86 
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);
95 
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);
100 
101  ttree_track_hits_strip_->Branch("strip_subdet_id", &strip_subdet_id, "strip_subdet_id/I", bufsize);
102 
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(
108  "strip_tib_is_double_side", &strip_tib_is_double_side, "strip_tib_is_double_side/I", bufsize);
109  ttree_track_hits_strip_->Branch(
110  "strip_tib_is_z_plus_side", &strip_tib_is_z_plus_side, "strip_tib_is_z_plus_side/I", bufsize);
111  ttree_track_hits_strip_->Branch(
112  "strip_tib_is_z_minus_side", &strip_tib_is_z_minus_side, "strip_tib_is_z_minus_side/I", bufsize);
113  ttree_track_hits_strip_->Branch(
114  "strip_tib_layer_number", &strip_tib_layer_number, "strip_tib_layer_number/I", bufsize);
115  ttree_track_hits_strip_->Branch(
116  "strip_tib_string_number", &strip_tib_string_number, "strip_tib_string_number/I", bufsize);
117  ttree_track_hits_strip_->Branch(
118  "strip_tib_module_number", &strip_tib_module_number, "strip_tib_module_number/I", bufsize);
119  ttree_track_hits_strip_->Branch(
120  "strip_tib_is_internal_string", &strip_tib_is_internal_string, "strip_tib_is_internal_string/I", bufsize);
121  ttree_track_hits_strip_->Branch(
122  "strip_tib_is_external_string", &strip_tib_is_external_string, "strip_tib_is_external_string/I", bufsize);
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(
129  "strip_tob_is_double_side", &strip_tob_is_double_side, "strip_tob_is_double_side/I", bufsize);
130  ttree_track_hits_strip_->Branch(
131  "strip_tob_is_z_plus_side", &strip_tob_is_z_plus_side, "strip_tob_is_z_plus_side/I", bufsize);
132  ttree_track_hits_strip_->Branch(
133  "strip_tob_is_z_minus_side", &strip_tob_is_z_minus_side, "strip_tob_is_z_minus_side/I", bufsize);
134  ttree_track_hits_strip_->Branch(
135  "strip_tob_layer_number", &strip_tob_layer_number, "strip_tob_layer_number/I", bufsize);
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(
138  "strip_tob_module_number", &strip_tob_module_number, "strip_tob_module_number/I", bufsize);
139 
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);
142 
143  ttree_track_hits_strip_->Branch("strip_nprm", &strip_nprm, "strip_nprm/I", bufsize);
144 
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);
147 
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);
150 
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);
153 
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);
156 
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);
159 
160  ttree_track_hits_strip_->Branch("strip_split", &strip_split, "strip_split/I", bufsize);
161 
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);
164 
165  if (include_trk_hits_) {
166  //tfile_ = new TFile ("SiPixelErrorEstimation_Ntuple.root" , "RECREATE");
167  //const char* tmp_name = outputFile_.c_str();
168 
169  ttree_track_hits_ = new TTree("TrackHitNtuple", "TrackHitNtuple");
170 
171  ttree_track_hits_->Branch("evt", &evt, "evt/I", bufsize);
172  ttree_track_hits_->Branch("run", &run, "run/I", bufsize);
173 
174  ttree_track_hits_->Branch("subdetId", &subdetId, "subdetId/I", bufsize);
175 
176  ttree_track_hits_->Branch("layer", &layer, "layer/I", bufsize);
177  ttree_track_hits_->Branch("ladder", &ladder, "ladder/I", bufsize);
178  ttree_track_hits_->Branch("mod", &mod, "mod/I", bufsize);
179 
180  ttree_track_hits_->Branch("side", &side, "side/I", bufsize);
181  ttree_track_hits_->Branch("disk", &disk, "disk/I", bufsize);
182  ttree_track_hits_->Branch("blade", &blade, "blade/I", bufsize);
183  ttree_track_hits_->Branch("panel", &panel, "panel/I", bufsize);
184  ttree_track_hits_->Branch("plaq", &plaq, "plaq/I", bufsize);
185 
186  ttree_track_hits_->Branch("half", &half, "half/I", bufsize);
187  ttree_track_hits_->Branch("flipped", &flipped, "flipped/I", bufsize);
188 
189  ttree_track_hits_->Branch("rechitx", &rechitx, "rechitx/F", bufsize);
190  ttree_track_hits_->Branch("rechity", &rechity, "rechity/F", bufsize);
191  ttree_track_hits_->Branch("rechitz", &rechitz, "rechitz/F", bufsize);
192 
193  ttree_track_hits_->Branch("rechiterrx", &rechiterrx, "rechiterrx/F", bufsize);
194  ttree_track_hits_->Branch("rechiterry", &rechiterry, "rechiterry/F", bufsize);
195 
196  ttree_track_hits_->Branch("rechitresx", &rechitresx, "rechitresx/F", bufsize);
197  ttree_track_hits_->Branch("rechitresy", &rechitresy, "rechitresy/F", bufsize);
198 
199  ttree_track_hits_->Branch("rechitpullx", &rechitpullx, "rechitpullx/F", bufsize);
200  ttree_track_hits_->Branch("rechitpully", &rechitpully, "rechitpully/F", bufsize);
201 
202  ttree_track_hits_->Branch("npix", &npix, "npix/I", bufsize);
203  ttree_track_hits_->Branch("nxpix", &nxpix, "nxpix/I", bufsize);
204  ttree_track_hits_->Branch("nypix", &nypix, "nypix/I", bufsize);
205  ttree_track_hits_->Branch("charge", &charge, "charge/F", bufsize);
206 
207  ttree_track_hits_->Branch("edgex", &edgex, "edgex/I", bufsize);
208  ttree_track_hits_->Branch("edgey", &edgey, "edgey/I", bufsize);
209 
210  ttree_track_hits_->Branch("bigx", &bigx, "bigx/I", bufsize);
211  ttree_track_hits_->Branch("bigy", &bigy, "bigy/I", bufsize);
212 
213  ttree_track_hits_->Branch("alpha", &alpha, "alpha/F", bufsize);
214  ttree_track_hits_->Branch("beta", &beta, "beta/F", bufsize);
215 
216  ttree_track_hits_->Branch("trk_alpha", &trk_alpha, "trk_alpha/F", bufsize);
217  ttree_track_hits_->Branch("trk_beta", &trk_beta, "trk_beta/F", bufsize);
218 
219  ttree_track_hits_->Branch("phi", &phi, "phi/F", bufsize);
220  ttree_track_hits_->Branch("eta", &eta, "eta/F", bufsize);
221 
222  ttree_track_hits_->Branch("simhitx", &simhitx, "simhitx/F", bufsize);
223  ttree_track_hits_->Branch("simhity", &simhity, "simhity/F", bufsize);
224 
225  ttree_track_hits_->Branch("nsimhit", &nsimhit, "nsimhit/I", bufsize);
226  ttree_track_hits_->Branch("pidhit", &pidhit, "pidhit/I", bufsize);
227  ttree_track_hits_->Branch("simproc", &simproc, "simproc/I", bufsize);
228 
229  ttree_track_hits_->Branch("pixel_split", &pixel_split, "pixel_split/I", bufsize);
230 
231  ttree_track_hits_->Branch("pixel_clst_err_x", &pixel_clst_err_x, "pixel_clst_err_x/F", bufsize);
232  ttree_track_hits_->Branch("pixel_clst_err_y", &pixel_clst_err_y, "pixel_clst_err_y/F", bufsize);
233 
234  } // if ( include_trk_hits_ )
235 
236  // ----------------------------------------------------------------------
237 
238  ttree_all_hits_ = new TTree("AllHitNtuple", "AllHitNtuple");
239 
240  ttree_all_hits_->Branch("evt", &evt, "evt/I", bufsize);
241  ttree_all_hits_->Branch("run", &run, "run/I", bufsize);
242 
243  ttree_all_hits_->Branch("subdetid", &all_subdetid, "subdetid/I", bufsize);
244 
245  ttree_all_hits_->Branch("layer", &all_layer, "layer/I", bufsize);
246  ttree_all_hits_->Branch("ladder", &all_ladder, "ladder/I", bufsize);
247  ttree_all_hits_->Branch("mod", &all_mod, "mod/I", bufsize);
248 
249  ttree_all_hits_->Branch("side", &all_side, "side/I", bufsize);
250  ttree_all_hits_->Branch("disk", &all_disk, "disk/I", bufsize);
251  ttree_all_hits_->Branch("blade", &all_blade, "blade/I", bufsize);
252  ttree_all_hits_->Branch("panel", &all_panel, "panel/I", bufsize);
253  ttree_all_hits_->Branch("plaq", &all_plaq, "plaq/I", bufsize);
254 
255  ttree_all_hits_->Branch("half", &all_half, "half/I", bufsize);
256  ttree_all_hits_->Branch("flipped", &all_flipped, "flipped/I", bufsize);
257 
258  ttree_all_hits_->Branch("cols", &all_cols, "cols/I", bufsize);
259  ttree_all_hits_->Branch("rows", &all_rows, "rows/I", bufsize);
260 
261  ttree_all_hits_->Branch("rechitx", &all_rechitx, "rechitx/F", bufsize);
262  ttree_all_hits_->Branch("rechity", &all_rechity, "rechity/F", bufsize);
263  ttree_all_hits_->Branch("rechitz", &all_rechitz, "rechitz/F", bufsize);
264 
265  ttree_all_hits_->Branch("rechiterrx", &all_rechiterrx, "rechiterrx/F", bufsize);
266  ttree_all_hits_->Branch("rechiterry", &all_rechiterry, "rechiterry/F", bufsize);
267 
268  ttree_all_hits_->Branch("rechitresx", &all_rechitresx, "rechitresx/F", bufsize);
269  ttree_all_hits_->Branch("rechitresy", &all_rechitresy, "rechitresy/F", bufsize);
270 
271  ttree_all_hits_->Branch("rechitpullx", &all_rechitpullx, "rechitpullx/F", bufsize);
272  ttree_all_hits_->Branch("rechitpully", &all_rechitpully, "rechitpully/F", bufsize);
273 
274  ttree_all_hits_->Branch("npix", &all_npix, "npix/I", bufsize);
275  ttree_all_hits_->Branch("nxpix", &all_nxpix, "nxpix/I", bufsize);
276  ttree_all_hits_->Branch("nypix", &all_nypix, "nypix/I", bufsize);
277 
278  ttree_all_hits_->Branch("edgex", &all_edgex, "edgex/I", bufsize);
279  ttree_all_hits_->Branch("edgey", &all_edgey, "edgey/I", bufsize);
280 
281  ttree_all_hits_->Branch("bigx", &all_bigx, "bigx/I", bufsize);
282  ttree_all_hits_->Branch("bigy", &all_bigy, "bigy/I", bufsize);
283 
284  ttree_all_hits_->Branch("alpha", &all_alpha, "alpha/F", bufsize);
285  ttree_all_hits_->Branch("beta", &all_beta, "beta/F", bufsize);
286 
287  ttree_all_hits_->Branch("simhitx", &all_simhitx, "simhitx/F", bufsize);
288  ttree_all_hits_->Branch("simhity", &all_simhity, "simhity/F", bufsize);
289 
290  ttree_all_hits_->Branch("nsimhit", &all_nsimhit, "nsimhit/I", bufsize);
291  ttree_all_hits_->Branch("pidhit", &all_pidhit, "pidhit/I", bufsize);
292  ttree_all_hits_->Branch("simproc", &all_simproc, "simproc/I", bufsize);
293 
294  ttree_all_hits_->Branch("vtxr", &all_vtxr, "vtxr/F", bufsize);
295  ttree_all_hits_->Branch("vtxz", &all_vtxz, "vtxz/F", bufsize);
296 
297  ttree_all_hits_->Branch("simpx", &all_simpx, "simpx/F", bufsize);
298  ttree_all_hits_->Branch("simpy", &all_simpy, "simpy/F", bufsize);
299  ttree_all_hits_->Branch("simpz", &all_simpz, "simpz/F", bufsize);
300 
301  ttree_all_hits_->Branch("eloss", &all_eloss, "eloss/F", bufsize);
302 
303  ttree_all_hits_->Branch("simphi", &all_simphi, "simphi/F", bufsize);
304  ttree_all_hits_->Branch("simtheta", &all_simtheta, "simtheta/F", bufsize);
305 
306  ttree_all_hits_->Branch("trkid", &all_trkid, "trkid/I", bufsize);
307 
308  ttree_all_hits_->Branch("x1", &all_x1, "x1/F", bufsize);
309  ttree_all_hits_->Branch("x2", &all_x2, "x2/F", bufsize);
310  ttree_all_hits_->Branch("y1", &all_x1, "y1/F", bufsize);
311  ttree_all_hits_->Branch("y2", &all_x2, "y2/F", bufsize);
312  ttree_all_hits_->Branch("z1", &all_x1, "z1/F", bufsize);
313  ttree_all_hits_->Branch("z2", &all_x2, "z2/F", bufsize);
314 
315  ttree_all_hits_->Branch("row1", &all_row1, "row1/F", bufsize);
316  ttree_all_hits_->Branch("row2", &all_row2, "row2/F", bufsize);
317  ttree_all_hits_->Branch("col1", &all_col1, "col1/F", bufsize);
318  ttree_all_hits_->Branch("col2", &all_col2, "col2/F", bufsize);
319 
320  ttree_all_hits_->Branch("gx1", &all_gx1, "gx1/F", bufsize);
321  ttree_all_hits_->Branch("gx2", &all_gx2, "gx2/F", bufsize);
322  ttree_all_hits_->Branch("gy1", &all_gx1, "gy1/F", bufsize);
323  ttree_all_hits_->Branch("gy2", &all_gx2, "gy2/F", bufsize);
324  ttree_all_hits_->Branch("gz1", &all_gx1, "gz1/F", bufsize);
325  ttree_all_hits_->Branch("gz2", &all_gx2, "gz2/F", bufsize);
326 
327  ttree_all_hits_->Branch("simtrketa", &all_simtrketa, "simtrketa/F", bufsize);
328  ttree_all_hits_->Branch("simtrkphi", &all_simtrkphi, "simtrkphi/F", bufsize);
329 
330  ttree_all_hits_->Branch("clust_row", &all_clust_row, "clust_row/F", bufsize);
331  ttree_all_hits_->Branch("clust_col", &all_clust_col, "clust_col/F", bufsize);
332 
333  ttree_all_hits_->Branch("clust_x", &all_clust_x, "clust_x/F", bufsize);
334  ttree_all_hits_->Branch("clust_y", &all_clust_y, "clust_y/F", bufsize);
335 
336  ttree_all_hits_->Branch("clust_q", &all_clust_q, "clust_q/F", bufsize);
337 
338  ttree_all_hits_->Branch("clust_maxpixcol", &all_clust_maxpixcol, "clust_maxpixcol/I", bufsize);
339  ttree_all_hits_->Branch("clust_maxpixrow", &all_clust_maxpixrow, "clust_maxpixrow/I", bufsize);
340  ttree_all_hits_->Branch("clust_minpixcol", &all_clust_minpixcol, "clust_minpixcol/I", bufsize);
341  ttree_all_hits_->Branch("clust_minpixrow", &all_clust_minpixrow, "clust_minpixrow/I", bufsize);
342 
343  ttree_all_hits_->Branch("clust_geoid", &all_clust_geoid, "clust_geoid/I", bufsize);
344 
345  ttree_all_hits_->Branch("clust_alpha", &all_clust_alpha, "clust_alpha/F", bufsize);
346  ttree_all_hits_->Branch("clust_beta", &all_clust_beta, "clust_beta/F", bufsize);
347 
348  ttree_all_hits_->Branch("rowpix", all_pixrow, "row[npix]/F", bufsize);
349  ttree_all_hits_->Branch("colpix", all_pixcol, "col[npix]/F", bufsize);
350  ttree_all_hits_->Branch("adc", all_pixadc, "adc[npix]/F", bufsize);
351  ttree_all_hits_->Branch("xpix", all_pixx, "x[npix]/F", bufsize);
352  ttree_all_hits_->Branch("ypix", all_pixy, "y[npix]/F", bufsize);
353  ttree_all_hits_->Branch("gxpix", all_pixgx, "gx[npix]/F", bufsize);
354  ttree_all_hits_->Branch("gypix", all_pixgy, "gy[npix]/F", bufsize);
355  ttree_all_hits_->Branch("gzpix", all_pixgz, "gz[npix]/F", bufsize);
356 
357  ttree_all_hits_->Branch("hit_probx", &all_hit_probx, "hit_probx/F", bufsize);
358  ttree_all_hits_->Branch("hit_proby", &all_hit_proby, "hit_proby/F", bufsize);
359 
360  ttree_all_hits_->Branch("all_pixel_split", &all_pixel_split, "all_pixel_split/I", bufsize);
361 
362  ttree_all_hits_->Branch("all_pixel_clst_err_x", &all_pixel_clst_err_x, "all_pixel_clst_err_x/F", bufsize);
363  ttree_all_hits_->Branch("all_pixel_clst_err_y", &all_pixel_clst_err_y, "all_pixel_clst_err_y/F", bufsize);
364 }
365 
367  tfile_->Write();
368  tfile_->Close();
369 }
370 
372  //Retrieve tracker topology from geometry
373  edm::ESHandle<TrackerTopology> tTopoHandle;
374  es.get<TrackerTopologyRcd>().get(tTopoHandle);
375  const TrackerTopology* const tTopo = tTopoHandle.product();
376 
377  using namespace edm;
378 
379  run = e.id().run();
380  evt = e.id().event();
381 
382  if (evt % 1000 == 0)
383  cout << "evt = " << evt << endl;
384 
385  float math_pi = 3.14159265;
386  float radtodeg = 180.0 / math_pi;
387 
390  float mindist = 999999.9;
391 
392  std::vector<PSimHit> matched;
394 
396  es.get<TrackerDigiGeometryRecord>().get(pDD);
397  const TrackerGeometry* tracker = &(*pDD);
398 
399  //cout << "...1..." << endl;
400 
402  es.get<IdealMagneticFieldRecord>().get(magneticField);
403  //const MagneticField* magField_ = magFieldHandle.product();
404 
405  edm::FileInPath FileInPath_;
406 
407  // Strip hits ==============================================================================================================
408 
409  edm::Handle<vector<Trajectory>> trajCollectionHandle;
410 
411  e.getByToken(tTrajectory, trajCollectionHandle);
412  //e.getByLabel( "generalTracks", trajCollectionHandle);
413 
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())
418  continue;
419 
420  strip_rechitx = -9999999.9;
421  strip_rechity = -9999999.9;
422  strip_rechitz = -9999999.9;
423  strip_rechiterrx = -9999999.9;
424  strip_rechiterry = -9999999.9;
425  strip_rechitresx = -9999999.9;
426  strip_rechitresx2 = -9999999.9;
427 
428  strip_rechitresy = -9999999.9;
429  strip_rechitpullx = -9999999.9;
430  strip_rechitpully = -9999999.9;
431  strip_is_stereo = -9999999;
432  strip_hit_type = -9999999;
433  detector_type = -9999999;
434 
435  strip_trk_pt = -9999999.9;
436  strip_cotalpha = -9999999.9;
437  strip_cotbeta = -9999999.9;
438  strip_locbx = -9999999.9;
439  strip_locby = -9999999.9;
440  strip_locbz = -9999999.9;
441  strip_charge = -9999999.9;
442  strip_size = -9999999;
443 
444  strip_edge = -9999999;
445  strip_nsimhit = -9999999;
446  strip_pidhit = -9999999;
447  strip_simproc = -9999999;
448 
449  strip_subdet_id = -9999999;
450 
451  strip_tib_layer = -9999999;
452  strip_tib_module = -9999999;
453  strip_tib_order = -9999999;
454  strip_tib_side = -9999999;
455  strip_tib_is_double_side = -9999999;
456  strip_tib_is_z_plus_side = -9999999;
457  strip_tib_is_z_minus_side = -9999999;
458  strip_tib_layer_number = -9999999;
459  strip_tib_string_number = -9999999;
460  strip_tib_module_number = -9999999;
461  strip_tib_is_internal_string = -9999999;
462  strip_tib_is_external_string = -9999999;
463  strip_tib_is_rphi = -9999999;
464  strip_tib_is_stereo = -9999999;
465 
466  strip_tob_layer = -9999999;
467  strip_tob_module = -9999999;
468  strip_tob_side = -9999999;
469  strip_tob_is_double_side = -9999999;
470  strip_tob_is_z_plus_side = -9999999;
471  strip_tob_is_z_minus_side = -9999999;
472  strip_tob_layer_number = -9999999;
473  strip_tob_rod_number = -9999999;
474  strip_tob_module_number = -9999999;
475 
476  strip_tob_is_rphi = -9999999;
477  strip_tob_is_stereo = -9999999;
478 
479  strip_prob = -9999999.9;
480  strip_qbin = -9999999;
481 
482  strip_nprm = -9999999;
483 
484  strip_pidhit1 = -9999999;
485  strip_simproc1 = -9999999;
486 
487  strip_pidhit2 = -9999999;
488  strip_simproc2 = -9999999;
489 
490  strip_pidhit3 = -9999999;
491  strip_simproc3 = -9999999;
492 
493  strip_pidhit4 = -9999999;
494  strip_simproc4 = -9999999;
495 
496  strip_pidhit5 = -9999999;
497  strip_simproc5 = -9999999;
498 
499  strip_split = -9999999;
500  strip_clst_err_x = -9999999.9;
501  strip_clst_err_y = -9999999.9;
502 
503  const TransientTrackingRecHit::ConstRecHitPointer trans_trk_rec_hit_point = itTraj->recHit();
504 
505  if (trans_trk_rec_hit_point == nullptr)
506  continue;
507 
508  const TrackingRecHit* trk_rec_hit = (*trans_trk_rec_hit_point).hit();
509 
510  if (trk_rec_hit == nullptr)
511  continue;
512 
513  DetId detid = (trk_rec_hit)->geographicalId();
514 
515  strip_subdet_id = (int)detid.subdetId();
516 
517  if ((int)detid.subdetId() != (int)(StripSubdetector::TIB) &&
518  (int)detid.subdetId() != (int)(StripSubdetector::TOB))
519  continue;
520 
521  const SiStripMatchedRecHit2D* matchedhit =
522  dynamic_cast<const SiStripMatchedRecHit2D*>((*trans_trk_rec_hit_point).hit());
523  const SiStripRecHit2D* hit2d = dynamic_cast<const SiStripRecHit2D*>((*trans_trk_rec_hit_point).hit());
524  const SiStripRecHit1D* hit1d = dynamic_cast<const SiStripRecHit1D*>((*trans_trk_rec_hit_point).hit());
525 
526  if (!matchedhit && !hit2d && !hit1d)
527  continue;
528 
529  position = (trk_rec_hit)->localPosition();
530  error = (trk_rec_hit)->localPositionError();
531 
532  strip_rechitx = position.x();
533  strip_rechity = position.y();
534  strip_rechitz = position.z();
535  strip_rechiterrx = sqrt(error.xx());
536  strip_rechiterry = sqrt(error.yy());
537 
538  //cout << "strip_rechitx = " << strip_rechitx << endl;
539  //cout << "strip_rechity = " << strip_rechity << endl;
540  //cout << "strip_rechitz = " << strip_rechitz << endl;
541 
542  //cout << "strip_rechiterrx = " << strip_rechiterrx << endl;
543  //cout << "strip_rechiterry = " << strip_rechiterry << endl;
544 
545  TrajectoryStateOnSurface tsos = itTraj->updatedState();
546 
547  strip_trk_pt = tsos.globalMomentum().perp();
548 
549  LocalTrajectoryParameters ltp = tsos.localParameters();
550 
551  LocalVector localDir = ltp.momentum() / ltp.momentum().mag();
552 
553  float locx = localDir.x();
554  float locy = localDir.y();
555  float locz = localDir.z();
556 
557  //alpha_ = atan2( locz, locx );
558  //beta_ = atan2( locz, locy );
559 
560  strip_cotalpha = locx / locz;
561  strip_cotbeta = locy / locz;
562 
563  StripSubdetector StripSubdet = (StripSubdetector)detid;
564 
565  if (StripSubdet.stereo() == 0)
566  strip_is_stereo = 0;
567  else
568  strip_is_stereo = 1;
569 
570  SiStripDetId si_strip_det_id = SiStripDetId(detid);
571 
572  //const StripGeomDetUnit* strip_geom_det_unit = dynamic_cast<const StripGeomDetUnit*> ( tracker->idToDet( detid ) );
573  const StripGeomDetUnit* strip_geom_det_unit = (const StripGeomDetUnit*)tracker->idToDetUnit(detid);
574 
575  if (strip_geom_det_unit != nullptr) {
576  LocalVector lbfield = (strip_geom_det_unit->surface())
577  .toLocal((*magneticField).inTesla(strip_geom_det_unit->surface().position()));
578 
579  strip_locbx = lbfield.x();
580  strip_locby = lbfield.y();
581  strip_locbz = lbfield.z();
582  }
583 
584  //enum ModuleGeometry {UNKNOWNGEOMETRY, IB1, IB2, OB1, OB2, W1A, W2A, W3A, W1B, W2B, W3B, W4, W5, W6, W7};
585 
586  if (si_strip_det_id.moduleGeometry() == 1) {
587  detector_type = 1;
588  //cout << "si_strip_det_id.moduleGeometry() = IB1" << endl;
589  //cout << "si_strip_det_id.moduleGeometry() = " << si_strip_det_id.moduleGeometry() << endl;
590  } else if (si_strip_det_id.moduleGeometry() == 2) {
591  detector_type = 2;
592  //cout << "si_strip_det_id.moduleGeometry() = IB2" << endl;
593  //cout << "si_strip_det_id.moduleGeometry() = " << si_strip_det_id.moduleGeometry() << endl;
594  } else if (si_strip_det_id.moduleGeometry() == 3) {
595  detector_type = 3;
596  //cout << "si_strip_det_id.moduleGeometry() = OB1" << endl;
597  //cout << "si_strip_det_id.moduleGeometry() = " << si_strip_det_id.moduleGeometry() << endl;
598  } else if (si_strip_det_id.moduleGeometry() == 4) {
599  detector_type = 4;
600  //cout << "si_strip_det_id.moduleGeometry() = OB2" << endl;
601  //cout << "si_strip_det_id.moduleGeometry() = " << si_strip_det_id.moduleGeometry() << endl;
602  }
603 
604  // Store ntuple variables
605 
606  if ((int)detid.subdetId() == int(StripSubdetector::TIB)) {
607  strip_tib_layer = (int)tTopo->tibLayer(detid);
608  strip_tib_module = (int)tTopo->tibModule(detid);
609  strip_tib_order = (int)tTopo->tibOrder(detid);
610  strip_tib_side = (int)tTopo->tibSide(detid);
614  strip_tib_layer_number = (int)tTopo->tibLayer(detid);
615  strip_tib_string_number = (int)tTopo->tibString(detid);
616  strip_tib_module_number = (int)tTopo->tibModule(detid);
619  strip_tib_is_rphi = (int)tTopo->tibIsRPhi(detid);
620  strip_tib_is_stereo = (int)tTopo->tibIsStereo(detid);
621  }
622 
623  if ((int)detid.subdetId() == int(StripSubdetector::TOB)) {
624  strip_tob_layer = (int)tTopo->tobLayer(detid);
625  strip_tob_module = (int)tTopo->tobModule(detid);
626 
627  strip_tob_side = (int)tTopo->tobSide(detid);
631  strip_tob_layer_number = (int)tTopo->tobLayer(detid);
632  strip_tob_rod_number = (int)tTopo->tobRod(detid);
633  strip_tob_module_number = (int)tTopo->tobModule(detid);
634 
635  strip_tob_is_rphi = (int)tTopo->tobIsRPhi(detid);
636  strip_tob_is_stereo = (int)tTopo->tobIsStereo(detid);
637  }
638 
639  if (matchedhit) {
640  //cout << endl << endl << endl;
641  //cout << "Found a SiStripMatchedRecHit2D !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! " << endl;
642  //cout << endl << endl << endl;
643  strip_hit_type = 0;
644 
645  } // if ( matchedhit )
646 
647  if (hit1d) {
648  strip_hit_type = 1;
649 
650  const SiStripRecHit1D::ClusterRef& cluster = hit1d->cluster();
651 
652  if (cluster->getSplitClusterError() > 0.0)
653  strip_split = 1;
654  else
655  strip_split = 0;
656 
657  strip_clst_err_x = cluster->getSplitClusterError();
658  //strip_clst_err_y = ...
659 
660  // Get cluster total charge
661  const auto& stripCharges = cluster->amplitudes();
662  uint16_t charge = 0;
663  for (unsigned int i = 0; i < stripCharges.size(); ++i) {
664  charge += stripCharges[i];
665  }
666 
667  strip_charge = (float)charge;
668  strip_size = (int)((cluster->amplitudes()).size());
669 
670  // Association of the rechit to the simhit
671  float mindist = 999999.9;
672  matched.clear();
673 
674  matched = associate.associateHit(*hit1d);
675 
676  strip_nsimhit = (int)matched.size();
677 
678  if (!matched.empty()) {
679  PSimHit closest;
680 
681  // Get the closest simhit
682 
683  int strip_nprimaries = 0;
684  int current_index = 0;
685 
686  for (vector<PSimHit>::const_iterator m = matched.begin(); m < matched.end(); ++m) {
687  ++current_index;
688 
689  if ((*m).processType() == 2)
690  ++strip_nprimaries;
691 
692  if (current_index == 1) {
693  strip_pidhit1 = (*m).particleType();
694  strip_simproc1 = (*m).processType();
695  } else if (current_index == 2) {
696  strip_pidhit2 = (*m).particleType();
697  strip_simproc2 = (*m).processType();
698  } else if (current_index == 3) {
699  strip_pidhit3 = (*m).particleType();
700  strip_simproc3 = (*m).processType();
701  } else if (current_index == 4) {
702  strip_pidhit4 = (*m).particleType();
703  strip_simproc4 = (*m).processType();
704  } else if (current_index == 5) {
705  strip_pidhit5 = (*m).particleType();
706  strip_simproc5 = (*m).processType();
707  }
708 
709  float dist = abs((hit1d)->localPosition().x() - (*m).localPosition().x());
710 
711  if (dist < mindist) {
712  mindist = dist;
713  closest = (*m);
714  }
715 
716  } // for ( vector<PSimHit>::const_iterator m=matched.begin(); m<matched.end(); ++m)
717 
718  strip_nprm = strip_nprimaries;
719 
722 
723  strip_rechitresx2 = strip_rechitx - matched[0].localPosition().x();
724 
727 
728  strip_pidhit = closest.particleType();
729  strip_simproc = closest.processType();
730 
731  } // if( !matched.empty())
732 
733  //strip_prob = (hit1d)->getTemplProb();
734  //strip_qbin = (hit1d)->getTemplQbin();
735 
736  //cout << endl;
737  //cout << "SiPixelErrorEstimation 1d hit: " << endl;
738  //cout << "prob 1d = " << strip_prob << endl;
739  //cout << "qbin 1d = " << strip_qbin << endl;
740  //cout << endl;
741 
742  // Is the cluster on edge ?
743  /*
744  SiStripDetInfoFileReader* reader;
745 
746  FileInPath_("CalibTracker/SiStripCommon/data/SiStripDetInfo.dat");
747 
748  reader = new SiStripDetInfoFileReader( FileInPath_.fullPath() );
749 
750  uint16_t firstStrip = cluster->firstStrip();
751  uint16_t lastStrip = firstStrip + (cluster->amplitudes()).size() -1;
752  unsigned short Nstrips;
753  Nstrips = reader->getNumberOfApvsAndStripLength(id1).first*128;
754 
755  if ( firstStrip == 0 || lastStrip == (Nstrips-1) )
756  strip_edge = 1;
757  else
758  strip_edge = 0;
759  */
760 
761  } // if ( hit1d )
762 
763  if (hit2d) {
764  strip_hit_type = 2;
765 
766  const SiStripRecHit1D::ClusterRef& cluster = hit2d->cluster();
767 
768  //if ( cluster->getSplitClusterError() > 0.0 )
769  //strip_split = 1;
770  //else
771  //strip_split = 0;
772 
773  //strip_clst_err_x = cluster->getSplitClusterError();
774  //strip_clst_err_y = ...
775 
776  // Get cluster total charge
777  auto& stripCharges = cluster->amplitudes();
778  uint16_t charge = 0;
779  for (unsigned int i = 0; i < stripCharges.size(); ++i) {
780  charge += stripCharges[i];
781  }
782 
783  strip_charge = (float)charge;
784  strip_size = (int)((cluster->amplitudes()).size());
785 
786  // Association of the rechit to the simhit
787  float mindist = 999999.9;
788  matched.clear();
789 
790  matched = associate.associateHit(*hit2d);
791 
792  strip_nsimhit = (int)matched.size();
793 
794  if (!matched.empty()) {
795  PSimHit closest;
796 
797  // Get the closest simhit
798 
799  for (vector<PSimHit>::const_iterator m = matched.begin(); m < matched.end(); ++m) {
800  float dist = abs((hit2d)->localPosition().x() - (*m).localPosition().x());
801 
802  if (dist < mindist) {
803  mindist = dist;
804  closest = (*m);
805  }
806  }
807 
810 
813 
814  strip_pidhit = closest.particleType();
815  strip_simproc = closest.processType();
816 
817  } // if( !matched.empty())
818 
819  //strip_prob = (hit2d)->getTemplProb();
820  //strip_qbin = (hit2d)->getTemplQbin();
821 
822  //cout << endl;
823  //cout << "SiPixelErrorEstimation 2d hit: " << endl;
824  //cout << "prob 2d = " << strip_prob << endl;
825  //cout << "qbin 2d = " << strip_qbin << endl;
826  //cout << endl;
827 
828  } // if ( hit2d )
829 
830  ttree_track_hits_strip_->Fill();
831 
832  } // for ( vector<TrajectoryMeasurement>::const_iterator itTraj = tmColl.begin(); itTraj!=tmColl.end(); ++itTraj )
833 
834  } // for( vector<Trajectory>::const_iterator it = trajCollectionHandle->begin(); it!=trajCollectionHandle->end(); ++it)
835 
836  //cout << "...2..." << endl;
837 
838  // --------------------------------------- all hits -----------------------------------------------------------
840  e.getByToken(tPixRecHitCollection, recHitColl);
841 
843  e.getByToken(tSimTrackContainer, simtracks);
844 
845  //-----Iterate over detunits
846  for (TrackerGeometry::DetContainer::const_iterator it = pDD->dets().begin(); it != pDD->dets().end(); it++) {
847  DetId detId = ((*it)->geographicalId());
848 
849  SiPixelRecHitCollection::const_iterator dsmatch = recHitColl->find(detId);
850  if (dsmatch == recHitColl->end())
851  continue;
852 
853  SiPixelRecHitCollection::DetSet pixelrechitRange = *dsmatch;
854  SiPixelRecHitCollection::DetSet::const_iterator pixelrechitRangeIteratorBegin = pixelrechitRange.begin();
855  SiPixelRecHitCollection::DetSet::const_iterator pixelrechitRangeIteratorEnd = pixelrechitRange.end();
856  SiPixelRecHitCollection::DetSet::const_iterator pixeliter = pixelrechitRangeIteratorBegin;
857  std::vector<PSimHit> matched;
858 
859  //----Loop over rechits for this detId
860  for (; pixeliter != pixelrechitRangeIteratorEnd; ++pixeliter) {
861  matched.clear();
862  matched = associate.associateHit(*pixeliter);
863  // only consider rechits that have associated simhit
864  // otherwise cannot determine residiual
865  if (matched.empty()) {
866  cout << "SiPixelErrorEstimation::analyze: rechits without associated simhit !!!!!!!" << endl;
867  continue;
868  }
869 
870  all_subdetid = -9999;
871 
872  all_layer = -9999;
873  all_ladder = -9999;
874  all_mod = -9999;
875 
876  all_side = -9999;
877  all_disk = -9999;
878  all_blade = -9999;
879  all_panel = -9999;
880  all_plaq = -9999;
881 
882  all_half = -9999;
883  all_flipped = -9999;
884 
885  all_cols = -9999;
886  all_rows = -9999;
887 
888  all_rechitx = -9999;
889  all_rechity = -9999;
890  all_rechitz = -9999;
891 
892  all_simhitx = -9999;
893  all_simhity = -9999;
894 
895  all_rechiterrx = -9999;
896  all_rechiterry = -9999;
897 
898  all_rechitresx = -9999;
899  all_rechitresy = -9999;
900 
901  all_rechitpullx = -9999;
902  all_rechitpully = -9999;
903 
904  all_npix = -9999;
905  all_nxpix = -9999;
906  all_nypix = -9999;
907 
908  all_edgex = -9999;
909  all_edgey = -9999;
910 
911  all_bigx = -9999;
912  all_bigy = -9999;
913 
914  all_alpha = -9999;
915  all_beta = -9999;
916 
917  all_simphi = -9999;
918  all_simtheta = -9999;
919 
920  all_simhitx = -9999;
921  all_simhity = -9999;
922 
923  all_nsimhit = -9999;
924  all_pidhit = -9999;
925  all_simproc = -9999;
926 
927  all_vtxr = -9999;
928  all_vtxz = -9999;
929 
930  all_simpx = -9999;
931  all_simpy = -9999;
932  all_simpz = -9999;
933 
934  all_eloss = -9999;
935 
936  all_trkid = -9999;
937 
938  all_x1 = -9999;
939  all_x2 = -9999;
940  all_y1 = -9999;
941  all_y2 = -9999;
942  all_z1 = -9999;
943  all_z2 = -9999;
944 
945  all_row1 = -9999;
946  all_row2 = -9999;
947  all_col1 = -9999;
948  all_col2 = -9999;
949 
950  all_gx1 = -9999;
951  all_gx2 = -9999;
952  all_gy1 = -9999;
953  all_gy2 = -9999;
954  all_gz1 = -9999;
955  all_gz2 = -9999;
956 
957  all_simtrketa = -9999;
958  all_simtrkphi = -9999;
959 
960  all_clust_row = -9999;
961  all_clust_col = -9999;
962 
963  all_clust_x = -9999;
964  all_clust_y = -9999;
965 
966  all_clust_q = -9999;
967 
968  all_clust_maxpixcol = -9999;
969  all_clust_maxpixrow = -9999;
970  all_clust_minpixcol = -9999;
971  all_clust_minpixrow = -9999;
972 
973  all_clust_geoid = -9999;
974 
975  all_clust_alpha = -9999;
976  all_clust_beta = -9999;
977 
978  /*
979  for (int i=0; i<all_npix; ++i)
980  {
981  all_pixrow[i] = -9999;
982  all_pixcol[i] = -9999;
983  all_pixadc[i] = -9999;
984  all_pixx[i] = -9999;
985  all_pixy[i] = -9999;
986  all_pixgx[i] = -9999;
987  all_pixgy[i] = -9999;
988  all_pixgz[i] = -9999;
989  }
990  */
991 
992  all_hit_probx = -9999;
993  all_hit_proby = -9999;
994  all_hit_cprob0 = -9999;
995  all_hit_cprob1 = -9999;
996  all_hit_cprob2 = -9999;
997 
998  all_pixel_split = -9999;
999  all_pixel_clst_err_x = -9999.9;
1000  all_pixel_clst_err_y = -9999.9;
1001 
1002  all_nsimhit = (int)matched.size();
1003 
1004  all_subdetid = (int)detId.subdetId();
1005  // only consider rechits in pixel barrel and pixel forward
1006  if (!(all_subdetid == 1 || all_subdetid == 2)) {
1007  cout << "SiPixelErrorEstimation::analyze: Not in a pixel detector !!!!!" << endl;
1008  continue;
1009  }
1010 
1011  const PixelGeomDetUnit* theGeomDet = dynamic_cast<const PixelGeomDetUnit*>(tracker->idToDet(detId));
1012 
1013  const PixelTopology* topol = &(theGeomDet->specificTopology());
1014 
1015  if (pixeliter->cluster()->getSplitClusterErrorX() > 0.0 && pixeliter->cluster()->getSplitClusterErrorY() > 0.0) {
1016  all_pixel_split = 1;
1017  } else {
1018  all_pixel_split = 0;
1019  }
1020 
1021  all_pixel_clst_err_x = pixeliter->cluster()->getSplitClusterErrorX();
1022  all_pixel_clst_err_y = pixeliter->cluster()->getSplitClusterErrorY();
1023 
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();
1028 
1029  //all_hit_probx = (float)pixeliter->probabilityX();
1030  //all_hit_proby = (float)pixeliter->probabilityY();
1031  all_hit_cprob0 = (float)pixeliter->clusterProbability(0);
1032  all_hit_cprob1 = (float)pixeliter->clusterProbability(1);
1033  all_hit_cprob2 = (float)pixeliter->clusterProbability(2);
1034 
1035  // check whether the cluster is at the module edge
1036  if (topol->isItEdgePixelInX(minPixelRow) || topol->isItEdgePixelInX(maxPixelRow))
1037  all_edgex = 1;
1038  else
1039  all_edgex = 0;
1040 
1041  if (topol->isItEdgePixelInY(minPixelCol) || topol->isItEdgePixelInY(maxPixelCol))
1042  all_edgey = 1;
1043  else
1044  all_edgey = 0;
1045 
1046  // check whether this rechit contains big pixels
1047  if (topol->containsBigPixelInX(minPixelRow, maxPixelRow))
1048  all_bigx = 1;
1049  else
1050  all_bigx = 0;
1051 
1052  if (topol->containsBigPixelInY(minPixelCol, maxPixelCol))
1053  all_bigy = 1;
1054  else
1055  all_bigy = 0;
1056 
1057  if ((int)detId.subdetId() == (int)PixelSubdetector::PixelBarrel) {
1058  all_layer = tTopo->pxbLayer(detId);
1059  all_ladder = tTopo->pxbLadder(detId);
1060  all_mod = tTopo->pxbModule(detId);
1061 
1062  int tmp_nrows = theGeomDet->specificTopology().nrows();
1063  if (tmp_nrows == 80)
1064  all_half = 1;
1065  else if (tmp_nrows == 160)
1066  all_half = 0;
1067  else
1068  cout << "-------------------------------------------------- Wrong module size !!!" << endl;
1069 
1070  float tmp1 = theGeomDet->surface().toGlobal(Local3DPoint(0., 0., 0.)).perp();
1071  float tmp2 = theGeomDet->surface().toGlobal(Local3DPoint(0., 0., 1.)).perp();
1072 
1073  if (tmp2 < tmp1)
1074  all_flipped = 1;
1075  else
1076  all_flipped = 0;
1077  } else if ((int)detId.subdetId() == (int)PixelSubdetector::PixelEndcap) {
1078  all_side = tTopo->pxfSide(detId);
1079  all_disk = tTopo->pxfDisk(detId);
1080  all_blade = tTopo->pxfBlade(detId);
1081  all_panel = tTopo->pxfPanel(detId);
1082  all_plaq = tTopo->pxfModule(detId); // also known as plaquette
1083 
1084  } // else if ( detId.subdetId()==PixelSubdetector::PixelEndcap )
1085  else
1086  std::cout << "We are not in the pixel detector" << (int)detId.subdetId() << endl;
1087 
1088  all_cols = theGeomDet->specificTopology().ncolumns();
1089  all_rows = theGeomDet->specificTopology().nrows();
1090 
1091  LocalPoint lp = pixeliter->localPosition();
1092  // gavril: change this name
1093  all_rechitx = lp.x();
1094  all_rechity = lp.y();
1095  all_rechitz = lp.z();
1096 
1097  LocalError le = pixeliter->localPositionError();
1098  all_rechiterrx = sqrt(le.xx());
1099  all_rechiterry = sqrt(le.yy());
1100 
1101  bool found_hit_from_generated_particle = false;
1102 
1103  //---Loop over sim hits, fill closest
1104  float closest_dist = 99999.9;
1105  std::vector<PSimHit>::const_iterator closest_simhit = matched.begin();
1106 
1107  for (std::vector<PSimHit>::const_iterator m = matched.begin(); m < matched.end(); m++) {
1108  if (checkType_) {
1109  int pid = (*m).particleType();
1110  if (abs(pid) != genType_)
1111  continue;
1112  }
1113 
1114  float simhitx = 0.5 * ((*m).entryPoint().x() + (*m).exitPoint().x());
1115  float simhity = 0.5 * ((*m).entryPoint().y() + (*m).exitPoint().y());
1116 
1117  float x_res = simhitx - rechitx;
1118  float y_res = simhity - rechity;
1119 
1120  float dist = sqrt(x_res * x_res + y_res * y_res);
1121 
1122  if (dist < closest_dist) {
1123  closest_dist = dist;
1124  closest_simhit = m;
1125  found_hit_from_generated_particle = true;
1126  }
1127  } // end sim hit loop
1128 
1129  // If this recHit does not have any simHit with the same particleType as the particles generated
1130  // ignore it as most probably comes from delta rays.
1131  if (checkType_ && !found_hit_from_generated_particle)
1132  continue;
1133 
1134  all_x1 = (*closest_simhit).entryPoint().x(); // width (row index, in col direction)
1135  all_y1 = (*closest_simhit).entryPoint().y(); // length (col index, in row direction)
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();
1140  GlobalPoint GP1 = theGeomDet->surface().toGlobal(Local3DPoint(
1141  (*closest_simhit).entryPoint().x(), (*closest_simhit).entryPoint().y(), (*closest_simhit).entryPoint().z()));
1142  GlobalPoint GP2 = theGeomDet->surface().toGlobal(Local3DPoint(
1143  (*closest_simhit).exitPoint().x(), (*closest_simhit).exitPoint().y(), (*closest_simhit).exitPoint().z()));
1144  all_gx1 = GP1.x();
1145  all_gx2 = GP2.x();
1146  all_gy1 = GP1.y();
1147  all_gy2 = GP2.y();
1148  all_gz1 = GP1.z();
1149  all_gz2 = GP2.z();
1150 
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()));
1155  all_row1 = mp1.x();
1156  all_col1 = mp1.y();
1157  all_row2 = mp2.x();
1158  all_col2 = mp2.y();
1159 
1160  all_simhitx = 0.5 * (all_x1 + all_x2);
1161  all_simhity = 0.5 * (all_y1 + all_y2);
1162 
1165 
1168 
1169  SiPixelRecHit::ClusterRef const& clust = pixeliter->cluster();
1170 
1171  all_npix = clust->size();
1172  all_nxpix = clust->sizeX();
1173  all_nypix = clust->sizeY();
1174 
1175  all_clust_row = clust->x();
1176  all_clust_col = clust->y();
1177 
1179  all_clust_x = lp2.x();
1180  all_clust_y = lp2.y();
1181 
1182  all_clust_q = clust->charge();
1183 
1184  all_clust_maxpixcol = clust->maxPixelCol();
1185  all_clust_maxpixrow = clust->maxPixelRow();
1186  all_clust_minpixcol = clust->minPixelCol();
1187  all_clust_minpixrow = clust->minPixelRow();
1188 
1189  all_clust_geoid = 0; // never set!
1190 
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();
1195  all_simphi = (*closest_simhit).phiAtEntry();
1196  all_simtheta = (*closest_simhit).thetaAtEntry();
1197  all_pidhit = (*closest_simhit).particleType();
1198  all_trkid = (*closest_simhit).trackId();
1199 
1200  //--- Fill alpha and beta -- more useful for exploring the residuals...
1201  all_beta = atan2(all_simpz, all_simpy);
1202  all_alpha = atan2(all_simpz, all_simpx);
1203 
1204  all_simproc = (int)closest_simhit->processType();
1205 
1206  const edm::SimTrackContainer& trks = *(simtracks.product());
1207  SimTrackContainer::const_iterator trksiter;
1208  for (trksiter = trks.begin(); trksiter != trks.end(); trksiter++)
1209  if ((int)trksiter->trackId() == all_trkid) {
1210  all_simtrketa = trksiter->momentum().eta();
1211  all_simtrkphi = trksiter->momentum().phi();
1212  }
1213 
1214  all_vtxz = theGeomDet->surface().position().z();
1215  all_vtxr = theGeomDet->surface().position().perp();
1216 
1217  //computeAnglesFromDetPosition(clust,
1218  // theGeomDet,
1219  // all_clust_alpha, all_clust_beta )
1220 
1221  const std::vector<SiPixelCluster::Pixel>& pixvector = clust->pixels();
1222  for (int i = 0; i < (int)pixvector.size(); ++i) {
1223  SiPixelCluster::Pixel holdpix = pixvector[i];
1224  all_pixrow[i] = holdpix.x;
1225  all_pixcol[i] = holdpix.y;
1226  all_pixadc[i] = holdpix.adc;
1227  LocalPoint lp = topol->localPosition(MeasurementPoint(holdpix.x, holdpix.y));
1228  all_pixx[i] = lp.x();
1229  all_pixy[i] = lp.y();
1230  GlobalPoint GP = theGeomDet->surface().toGlobal(Local3DPoint(lp.x(), lp.y(), lp.z()));
1231  all_pixgx[i] = GP.x();
1232  all_pixgy[i] = GP.y();
1233  all_pixgz[i] = GP.z();
1234  }
1235 
1236  ttree_all_hits_->Fill();
1237 
1238  } // for ( ; pixeliter != pixelrechitRangeIteratorEnd; ++pixeliter)
1239 
1240  } // for (TrackerGeometry::DetContainer::const_iterator it = pDD->dets().begin(); it != pDD->dets().end(); it++)
1241 
1242  // ------------------------------------------------ all hits ---------------------------------------------------------------
1243 
1244  //cout << "...3..." << endl;
1245 
1246  // ------------------------------------------------ track hits only --------------------------------------------------------
1247 
1248  if (include_trk_hits_) {
1249  // Get tracks
1251  e.getByToken(tTrackCollection, trackCollection);
1252  const reco::TrackCollection* tracks = trackCollection.product();
1253  reco::TrackCollection::const_iterator tciter;
1254 
1255  if (!tracks->empty()) {
1256  // Loop on tracks
1257  for (tciter = tracks->begin(); tciter != tracks->end(); ++tciter) {
1258  // First loop on hits: find matched hits
1259  for (auto const hit : tciter->recHits()) {
1260  // Is it a matched hit?
1261  const SiPixelRecHit* matchedhit = dynamic_cast<const SiPixelRecHit*>(hit);
1262 
1263  if (matchedhit) {
1264  rechitx = -9999.9;
1265  rechity = -9999.9;
1266  rechitz = -9999.9;
1267  rechiterrx = -9999.9;
1268  rechiterry = -9999.9;
1269  rechitresx = -9999.9;
1270  rechitresy = -9999.9;
1271  rechitpullx = -9999.9;
1272  rechitpully = -9999.9;
1273 
1274  npix = -9999;
1275  nxpix = -9999;
1276  nypix = -9999;
1277  charge = -9999.9;
1278 
1279  edgex = -9999;
1280  edgey = -9999;
1281 
1282  bigx = -9999;
1283  bigy = -9999;
1284 
1285  alpha = -9999.9;
1286  beta = -9999.9;
1287 
1288  phi = -9999.9;
1289  eta = -9999.9;
1290 
1291  subdetId = -9999;
1292 
1293  layer = -9999;
1294  ladder = -9999;
1295  mod = -9999;
1296  side = -9999;
1297  disk = -9999;
1298  blade = -9999;
1299  panel = -9999;
1300  plaq = -9999;
1301 
1302  half = -9999;
1303  flipped = -9999;
1304 
1305  nsimhit = -9999;
1306  pidhit = -9999;
1307  simproc = -9999;
1308 
1309  simhitx = -9999.9;
1310  simhity = -9999.9;
1311 
1312  hit_probx = -9999.9;
1313  hit_proby = -9999.9;
1314  hit_cprob0 = -9999.9;
1315  hit_cprob1 = -9999.9;
1316  hit_cprob2 = -9999.9;
1317 
1318  pixel_split = -9999;
1319 
1320  pixel_clst_err_x = -9999.9;
1321  pixel_clst_err_y = -9999.9;
1322 
1323  position = hit->localPosition();
1324  error = hit->localPositionError();
1325 
1326  rechitx = position.x();
1327  rechity = position.y();
1328  rechitz = position.z();
1329  rechiterrx = sqrt(error.xx());
1330  rechiterry = sqrt(error.yy());
1331 
1332  npix = matchedhit->cluster()->size();
1333  nxpix = matchedhit->cluster()->sizeX();
1334  nypix = matchedhit->cluster()->sizeY();
1335  charge = matchedhit->cluster()->charge();
1336 
1337  if (matchedhit->cluster()->getSplitClusterErrorX() > 0.0 &&
1338  matchedhit->cluster()->getSplitClusterErrorY() > 0.0)
1339  pixel_split = 1;
1340  else
1341  pixel_split = 0;
1342 
1343  pixel_clst_err_x = matchedhit->cluster()->getSplitClusterErrorX();
1344  pixel_clst_err_y = matchedhit->cluster()->getSplitClusterErrorY();
1345 
1346  //hit_probx = (float)matchedhit->probabilityX();
1347  //hit_proby = (float)matchedhit->probabilityY();
1348  hit_cprob0 = (float)matchedhit->clusterProbability(0);
1349  hit_cprob1 = (float)matchedhit->clusterProbability(1);
1350  hit_cprob2 = (float)matchedhit->clusterProbability(2);
1351 
1352  //Association of the rechit to the simhit
1353  matched.clear();
1354  matched = associate.associateHit(*matchedhit);
1355 
1356  nsimhit = (int)matched.size();
1357 
1358  if (!matched.empty()) {
1359  mindist = 999999.9;
1360  float distx, disty, dist;
1361  bool found_hit_from_generated_particle = false;
1362 
1363  int n_assoc_muon = 0;
1364 
1365  vector<PSimHit>::const_iterator closestit = matched.begin();
1366  for (vector<PSimHit>::const_iterator m = matched.begin(); m < matched.end(); ++m) {
1367  if (checkType_) { // only consider associated simhits with the generated pid (muons)
1368  int pid = (*m).particleType();
1369  if (abs(pid) != genType_)
1370  continue;
1371  }
1372 
1373  float simhitx = 0.5 * ((*m).entryPoint().x() + (*m).exitPoint().x());
1374  float simhity = 0.5 * ((*m).entryPoint().y() + (*m).exitPoint().y());
1375 
1376  distx = fabs(rechitx - simhitx);
1377  disty = fabs(rechity - simhity);
1378  dist = sqrt(distx * distx + disty * disty);
1379 
1380  if (dist < mindist) {
1381  n_assoc_muon++;
1382 
1383  mindist = dist;
1384  closestit = m;
1385  found_hit_from_generated_particle = true;
1386  }
1387  } // for (vector<PSimHit>::const_iterator m=matched.begin(); m<matched.end(); m++)
1388 
1389  // This recHit does not have any simHit with the same particleType as the particles generated
1390  // Ignore it as most probably come from delta rays.
1391  if (checkType_ && !found_hit_from_generated_particle)
1392  continue;
1393 
1394  //if ( n_assoc_muon > 1 )
1395  //{
1396  // // cout << " ----- This is not good: n_assoc_muon = " << n_assoc_muon << endl;
1397  // // cout << "evt = " << evt << endl;
1398  //}
1399 
1400  DetId detId = hit->geographicalId();
1401 
1402  const PixelGeomDetUnit* theGeomDet = dynamic_cast<const PixelGeomDetUnit*>((*tracker).idToDet(detId));
1403 
1404  const PixelTopology* theTopol = &(theGeomDet->specificTopology());
1405 
1406  pidhit = (*closestit).particleType();
1407  simproc = (int)(*closestit).processType();
1408 
1409  simhitx = 0.5 * ((*closestit).entryPoint().x() + (*closestit).exitPoint().x());
1410  simhity = 0.5 * ((*closestit).entryPoint().y() + (*closestit).exitPoint().y());
1411 
1414  rechitpullx = (rechitx - simhitx) / sqrt(error.xx());
1415  rechitpully = (rechity - simhity) / sqrt(error.yy());
1416 
1417  float simhitpx = (*closestit).momentumAtEntry().x();
1418  float simhitpy = (*closestit).momentumAtEntry().y();
1419  float simhitpz = (*closestit).momentumAtEntry().z();
1420 
1421  beta = atan2(simhitpz, simhitpy) * radtodeg;
1422  alpha = atan2(simhitpz, simhitpx) * radtodeg;
1423 
1424  //beta = fabs(atan2(simhitpz, simhitpy)) * radtodeg;
1425  //alpha = fabs(atan2(simhitpz, simhitpx)) * radtodeg;
1426 
1427  // calculate alpha and beta exactly as in PixelCPEBase.cc
1428  float locx = simhitpx;
1429  float locy = simhitpy;
1430  float locz = simhitpz;
1431 
1432  bool isFlipped = false;
1433  float tmp1 = theGeomDet->surface().toGlobal(Local3DPoint(0., 0., 0.)).perp();
1434  float tmp2 = theGeomDet->surface().toGlobal(Local3DPoint(0., 0., 1.)).perp();
1435  if (tmp2 < tmp1)
1436  isFlipped = true;
1437  else
1438  isFlipped = false;
1439 
1440  trk_alpha = acos(locx / sqrt(locx * locx + locz * locz)) * radtodeg;
1441  if (isFlipped) // &&& check for FPIX !!!
1442  trk_alpha = 180.0 - trk_alpha;
1443 
1444  trk_beta = acos(locy / sqrt(locy * locy + locz * locz)) * radtodeg;
1445 
1446  phi = tciter->momentum().phi() / math_pi * 180.0;
1447  eta = tciter->momentum().eta();
1448 
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();
1453 
1454  // check whether the cluster is at the module edge
1455  if (theTopol->isItEdgePixelInX(minPixelRow) || theTopol->isItEdgePixelInX(maxPixelRow))
1456  edgex = 1;
1457  else
1458  edgex = 0;
1459 
1460  if (theTopol->isItEdgePixelInY(minPixelCol) || theTopol->isItEdgePixelInY(maxPixelCol))
1461  edgey = 1;
1462  else
1463  edgey = 0;
1464 
1465  // check whether this rechit contains big pixels
1466  if (theTopol->containsBigPixelInX(minPixelRow, maxPixelRow))
1467  bigx = 1;
1468  else
1469  bigx = 0;
1470 
1471  if (theTopol->containsBigPixelInY(minPixelCol, maxPixelCol))
1472  bigy = 1;
1473  else
1474  bigy = 0;
1475 
1476  subdetId = (int)detId.subdetId();
1477 
1478  if ((int)detId.subdetId() == (int)PixelSubdetector::PixelBarrel) {
1479  int tmp_nrows = theGeomDet->specificTopology().nrows();
1480  if (tmp_nrows == 80)
1481  half = 1;
1482  else if (tmp_nrows == 160)
1483  half = 0;
1484  else
1485  cout << "-------------------------------------------------- Wrong module size !!!" << endl;
1486 
1487  float tmp1 = theGeomDet->surface().toGlobal(Local3DPoint(0., 0., 0.)).perp();
1488  float tmp2 = theGeomDet->surface().toGlobal(Local3DPoint(0., 0., 1.)).perp();
1489 
1490  if (tmp2 < tmp1)
1491  flipped = 1;
1492  else
1493  flipped = 0;
1494 
1495  layer = tTopo->pxbLayer(detId); // Layer: 1,2,3.
1496  ladder = tTopo->pxbLadder(detId); // Ladder: 1-20, 32, 44.
1497  mod = tTopo->pxbModule(detId); // Mod: 1-8.
1498  } else if ((int)detId.subdetId() == (int)PixelSubdetector::PixelEndcap) {
1499  side = tTopo->pxfSide(detId);
1500  disk = tTopo->pxfDisk(detId);
1501  blade = tTopo->pxfBlade(detId);
1502  panel = tTopo->pxfPanel(detId);
1503  plaq = tTopo->pxfModule(detId); // also known as plaquette
1504 
1505  float tmp1 = theGeomDet->surface().toGlobal(Local3DPoint(0., 0., 0.)).perp();
1506  float tmp2 = theGeomDet->surface().toGlobal(Local3DPoint(0., 0., 1.)).perp();
1507 
1508  if (tmp2 < tmp1)
1509  flipped = 1;
1510  else
1511  flipped = 0;
1512 
1513  } // else if ( detId.subdetId()==PixelSubdetector::PixelEndcap )
1514  //else std::// cout << "We are not in the pixel detector. detId.subdetId() = " << (int)detId.subdetId() << endl;
1515 
1516  ttree_track_hits_->Fill();
1517 
1518  } // if ( !matched.empty() )
1519  else
1520  cout << "---------------- RecHit with no associated SimHit !!! -------------------------- " << endl;
1521 
1522  } // if ( matchedhit )
1523 
1524  } // end of loop on hits
1525 
1526  } //end of loop on track
1527 
1528  } // tracks > 0.
1529 
1530  } // if ( include_trk_hits_ )
1531 
1532  // ----------------------------------------------- track hits only -----------------------------------------------------------
1533 }
1534 
1536  const GeomDetUnit& det,
1537  float& alpha,
1538  float& beta) {
1539  //--- This is a new det unit, so cache it
1540  const PixelGeomDetUnit* theDet = dynamic_cast<const PixelGeomDetUnit*>(&det);
1541  if (!theDet) {
1542  cout << "---------------------------------------------- Not a pixel detector !!!!!!!!!!!!!!" << endl;
1543  assert(0);
1544  }
1545 
1546  const PixelTopology* theTopol = &(theDet->specificTopology());
1547 
1548  // get cluster center of gravity (of charge)
1549  float xcenter = cl.x();
1550  float ycenter = cl.y();
1551 
1552  // get the cluster position in local coordinates (cm)
1553  LocalPoint lp = theTopol->localPosition(MeasurementPoint(xcenter, ycenter));
1554  //float lp_mod = sqrt( lp.x()*lp.x() + lp.y()*lp.y() + lp.z()*lp.z() );
1555 
1556  // get the cluster position in global coordinates (cm)
1557  GlobalPoint gp = theDet->surface().toGlobal(lp);
1558  float gp_mod = sqrt(gp.x() * gp.x() + gp.y() * gp.y() + gp.z() * gp.z());
1559 
1560  // normalize
1561  float gpx = gp.x() / gp_mod;
1562  float gpy = gp.y() / gp_mod;
1563  float gpz = gp.z() / gp_mod;
1564 
1565  // make a global vector out of the global point; this vector will point from the
1566  // origin of the detector to the cluster
1567  GlobalVector gv(gpx, gpy, gpz);
1568 
1569  // make local unit vector along local X axis
1570  const Local3DVector lvx(1.0, 0.0, 0.0);
1571 
1572  // get the unit X vector in global coordinates/
1573  GlobalVector gvx = theDet->surface().toGlobal(lvx);
1574 
1575  // make local unit vector along local Y axis
1576  const Local3DVector lvy(0.0, 1.0, 0.0);
1577 
1578  // get the unit Y vector in global coordinates
1579  GlobalVector gvy = theDet->surface().toGlobal(lvy);
1580 
1581  // make local unit vector along local Z axis
1582  const Local3DVector lvz(0.0, 0.0, 1.0);
1583 
1584  // get the unit Z vector in global coordinates
1585  GlobalVector gvz = theDet->surface().toGlobal(lvz);
1586 
1587  // calculate the components of gv (the unit vector pointing to the cluster)
1588  // in the local coordinate system given by the basis {gvx, gvy, gvz}
1589  // note that both gv and the basis {gvx, gvy, gvz} are given in global coordinates
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();
1593 
1594  // calculate angles
1595  alpha = atan2(gv_dot_gvz, gv_dot_gvx);
1596  beta = atan2(gv_dot_gvz, gv_dot_gvy);
1597 
1598  // calculate cotalpha and cotbeta
1599  // cotalpha_ = 1.0/tan(alpha_);
1600  // cotbeta_ = 1.0/tan(beta_ );
1601  // or like this
1602  //cotalpha_ = gv_dot_gvx / gv_dot_gvz;
1603  //cotbeta_ = gv_dot_gvy / gv_dot_gvz;
1604 }
1605 
1606 //define this as a plug-in
RunNumber_t run() const
Definition: EventID.h:39
ClusterRef cluster() const
size
Write out results.
GlobalPoint toGlobal(const Point2DBase< Scalar, LocalTag > lp) const
Definition: Surface.h:106
T getParameter(std::string const &) const
EventNumber_t event() const
Definition: EventID.h:41
T getUntrackedParameter(std::string const &, T const &) const
float xx() const
Definition: LocalError.h:24
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
Definition: Definitions.h:32
float clusterProbability(unsigned int flags=0) const
T y() const
Definition: PV2DBase.h:46
bool tibIsDoubleSide(const DetId &id) const
T perp() const
Definition: PV3DBase.h:72
unsigned int tibLayer(const DetId &id) const
unsigned int tibString(const DetId &id) const
bool tobIsStereo(const DetId &id) const
TrackerHitAssociator::Config trackerHitAssociatorConfig_
bool getByToken(EDGetToken token, Handle< PROD > &result) const
Definition: Event.h:517
virtual bool isItEdgePixelInX(int ixbin) const =0
unsigned int pxfDisk(const DetId &id) const
edm::EDGetTokenT< reco::TrackCollection > tTrackCollection
#define nullptr
unsigned int pxbLadder(const DetId &id) const
std::vector< Track > TrackCollection
collection of Tracks
Definition: TrackFwd.h:15
T y() const
Definition: PV3DBase.h:63
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)
bool tobIsRPhi(const DetId &id) const
const Plane & surface() const
The nominal surface of the GeomDet.
Definition: GeomDet.h:42
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
Measurement2DPoint MeasurementPoint
Measurement points are two-dimensional by default.
bool tibIsExternalString(const DetId &id) const
#define DEFINE_FWK_MODULE(type)
Definition: MakerMacros.h:16
T mag() const
Definition: PV3DBase.h:67
bool tibIsRPhi(const DetId &id) const
edm::EDGetTokenT< edm::SimTrackContainer > tSimTrackContainer
float yy() const
Definition: LocalError.h:26
bool tibIsZMinusSide(const DetId &id) const
Local3DPoint localPosition() const
Definition: PSimHit.h:52
std::shared_ptr< TrackingRecHit const > ConstRecHitPointer
T sqrt(T t)
Definition: SSEVec.h:18
T z() const
Definition: PV3DBase.h:64
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&#39;s numbering enum) ...
Definition: DetId.h:41
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
SiPixelErrorEstimation(const edm::ParameterSet &)
ClusterRef cluster() const
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
Definition: LocalPoint.h:9
Detector identifier class for the strip tracker.
Definition: SiStripDetId.h:17
Definition: DetId.h:18
unsigned int stereo() const
stereo
virtual TrackingRecHit const * hit() const
T const * product() const
Definition: Handle.h:74
void computeAnglesFromDetPosition(const SiPixelCluster &cl, const GeomDetUnit &det, float &alpha, float &beta)
ClusterRef cluster() const
Definition: SiPixelRecHit.h:49
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
Definition: PSimHit.h:120
unsigned int tobModule(const DetId &id) const
const_iterator find(id_type i, bool update=false) const
edm::EventID id() const
Definition: EventBase.h:59
Pixel cluster – collection of neighboring pixels above threshold.
HLT enums.
virtual int ncolumns() const =0
int particleType() const
Definition: PSimHit.h:89
iterator end()
Definition: DetSetNew.h:70
static int position[264][3]
Definition: ReadPGInfo.cc:509
T get() const
Definition: EventSetup.h:71
const TrackerGeomDet * idToDet(DetId) const override
float y() const
unsigned int pxfSide(const DetId &id) const
std::vector< PSimHit > associateHit(const TrackingRecHit &thit) const
edm::EDGetTokenT< SiPixelRecHitCollection > tPixRecHitCollection
unsigned int tobRod(const DetId &id) const
ModuleGeometry moduleGeometry() const
Definition: SiStripDetId.h:106
bool tibIsInternalString(const DetId &id) const
T x() const
Definition: PV2DBase.h:45
T x() const
Definition: PV3DBase.h:62
const PositionType & position() const
T const * product() const
Definition: ESHandle.h:86
std::vector< SimTrack > SimTrackContainer
float x() const
unsigned int pxfPanel(const DetId &id) const
unsigned int pxfBlade(const DetId &id) const
unsigned int tobLayer(const DetId &id) const
Our base class.
Definition: SiPixelRecHit.h:23
unsigned int tibOrder(const DetId &id) const
virtual bool containsBigPixelInY(int iymin, int iymax) const =0
iterator begin()
Definition: DetSetNew.h:67