Hall-D Software  alpha
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
JEventProcessor_TrackingPulls.cc
Go to the documentation of this file.
1 // $Id$
2 //
3 // File: JEventProcessor_TrackingPulls.cc
4 // Created: Thu Nov 3 14:30:19 EDT 2016
5 // Creator: mstaib (on Linux ifarm1401 2.6.32-431.el6.x86_64 x86_64)
6 //
7 
9 #include "HistogramTools.h"
11 #include "PID/DChargedTrack.h"
12 #include "TRIGGER/DTrigger.h"
13 
14 using namespace jana;
15 
16 // Routine used to create our JEventProcessor
17 #include <JANA/JApplication.h>
18 #include <JANA/JFactory.h>
19 extern "C"{
20 void InitPlugin(JApplication *app){
21  InitJANAPlugin(app);
22  app->AddProcessor(new JEventProcessor_TrackingPulls());
23 }
24 } // "C"
25 
26 
27 //------------------
28 // JEventProcessor_TrackingPulls (Constructor)
29 //------------------
31 {
32 
33 }
34 
35 //------------------
36 // ~JEventProcessor_TrackingPulls (Destructor)
37 //------------------
39 {
40 
41 }
42 
43 //------------------
44 // init
45 //------------------
47 {
48  // This is called once at program startup.
49 
50  return NOERROR;
51 }
52 
53 //------------------
54 // brun
55 //------------------
56 jerror_t JEventProcessor_TrackingPulls::brun(JEventLoop *eventLoop, int32_t runnumber)
57 {
58  // This is called whenever the run number changes
59  return NOERROR;
60 }
61 
62 //------------------
63 // evnt
64 //------------------
65 jerror_t JEventProcessor_TrackingPulls::evnt(JEventLoop *loop, uint64_t eventnumber)
66 {
67  unsigned int numstraws[28]={42,42,54,54,66,66,80,80,93,93,106,106,123,123,
68  135,135,146,146,158,158,170,170,182,182,197,197,
69  209,209};
70  static uint32_t evntCount=0;
71  evntCount++;
72  // Loop over the tracks, get the tracking pulls, and fill some histograms. Easy peasy
73 
74  const DTrigger* locTrigger = NULL;
75  loop->GetSingle(locTrigger);
76  if(locTrigger->Get_L1FrontPanelTriggerBits() != 0)
77  return NOERROR;
78 
79  vector<const DChargedTrack *> chargedTrackVector;
80  loop->Get(chargedTrackVector);
81 
82  for (size_t i = 0; i < chargedTrackVector.size(); i++){
83  // TODO: Should be changed to use PID FOM when ready
84  const DChargedTrackHypothesis *bestHypothesis = chargedTrackVector[i]->Get_BestTrackingFOM();
85 
86  if (bestHypothesis == NULL) continue;
87 
88  auto locTrackTimeBased = bestHypothesis->Get_TrackTimeBased();
89  double trackingFOM = TMath::Prob(locTrackTimeBased->chisq, locTrackTimeBased->Ndof);
90 
91  // Some quality cuts for the tracks we will use
92  // Keep this minimal for now and investigate later
93  float trackingFOMCut = 0.001;
94  int trackingNDFCut = 5;
95 
96  if(trackingFOM < trackingFOMCut) continue;
97  if( locTrackTimeBased->Ndof < trackingNDFCut) continue;
98 
99  double phi = bestHypothesis->momentum().Phi()*TMath::RadToDeg();
100  double theta = bestHypothesis->momentum().Theta()*TMath::RadToDeg();
101  double pmag = bestHypothesis->momentum().Mag();
102 
103  if (pmag < 0.5) continue;
104 
105  // Fill some track information
106  Fill1DHistogram("TrackingPulls", "TrackInfo", "Tracking FOM",
107  trackingFOM,
108  "Tracking FOM", 200, 0.0, 1.0);
109  Fill2DHistogram("TrackingPulls", "TrackInfo", "P Vs. Theta",
110  theta, pmag,
111  "P Vs. #theta; #theta [deg.]; |P| [GeV/c]", 70, 0.0, 140.0, 50, 0.0, 10.0);
112  Fill2DHistogram("TrackingPulls", "TrackInfo", "Phi Vs. Theta",
113  theta, phi,
114  "#phi Vs. #theta; #theta [deg.]; #phi [deg.]", 70, 0.0, 140.0, 180, -180.0, 180.0);
115  Fill2DHistogram("TrackingPulls", "TrackInfo", "P Vs. Phi",
116  phi, pmag,
117  "P Vs. #phi; #phi [deg.]; |P| [GeV/c]", 180, -180, 180.0, 50, 0.0, 10.0);
118 
119  // Get the pulls vector from the track
120  auto thisTimeBasedTrack = bestHypothesis->Get_TrackTimeBased();
121 
122  if (!thisTimeBasedTrack->IsSmoothed){
123  Fill1DHistogram("TrackingPulls", "TrackInfo_SmoothFailure", "Tracking FOM",
124  trackingFOM,
125  "Tracking FOM", 200, 0.0, 1.0);
126  Fill2DHistogram("TrackingPulls", "TrackInfo_SmoothFailure", "P Vs. Theta",
127  theta, pmag,
128  "P Vs. #theta; #theta [deg.]; |P| [GeV/c]", 70, 0.0, 140.0, 50, 0.0, 10.0);
129  Fill2DHistogram("TrackingPulls", "TrackInfo_SmoothFailure", "Phi Vs. Theta",
130  theta, phi,
131  "#phi Vs. #theta; #theta [deg.]; #phi [deg.]", 70, 0.0, 140.0, 180, -180.0, 180.0);
132  Fill2DHistogram("TrackingPulls", "TrackInfo_SmoothFailure", "P Vs. Phi",
133  phi, pmag,
134  "P Vs. #phi; #phi [deg.]; |P| [GeV/c]", 180, -180, 180.0, 50, 0.0, 10.0);
135  continue;
136  }
137  else{
138  Fill1DHistogram("TrackingPulls", "TrackInfo_SmoothSuccess", "Tracking FOM",
139  trackingFOM,
140  "Tracking FOM", 200, 0.0, 1.0);
141  Fill2DHistogram("TrackingPulls", "TrackInfo_SmoothSuccess", "P Vs. Theta",
142  theta, pmag,
143  "P Vs. #theta; #theta [deg.]; |P| [GeV/c]", 70, 0.0, 140.0, 50, 0.0, 10.0);
144  Fill2DHistogram("TrackingPulls", "TrackInfo_SmoothSuccess", "Phi Vs. Theta",
145  theta, phi,
146  "#phi Vs. #theta; #theta [deg.]; #phi [deg.]", 70, 0.0, 140.0, 180, -180.0, 180.0);
147  Fill2DHistogram("TrackingPulls", "TrackInfo_SmoothSuccess", "P Vs. Phi",
148  phi, pmag,
149  "P Vs. #phi; #phi [deg.]; |P| [GeV/c]", 180, -180, 180.0, 50, 0.0, 10.0);
150  }
151 
152  vector<DTrackFitter::pull_t> pulls = thisTimeBasedTrack->pulls;
153 
154  // Check for NaNs
155  bool anyNaN=false;
156  for (size_t iPull = 0; iPull < pulls.size(); iPull++){
157  double err = pulls[iPull].err;
158  double errc = pulls[iPull].errc;
159  if ( err != err || errc != errc) anyNaN=true;
160  }
161  if(anyNaN){
162  Fill1DHistogram("TrackingPulls", "TrackInfo_SmoothSuccess_NaN", "Tracking FOM",
163  trackingFOM,
164  "Tracking FOM", 200, 0.0, 1.0);
165  Fill2DHistogram("TrackingPulls", "TrackInfo_SmoothSuccess_NaN", "P Vs. Theta",
166  theta, pmag,
167  "P Vs. #theta; #theta [deg.]; |P| [GeV/c]", 70, 0.0, 140.0, 50, 0.0, 10.0);
168  Fill2DHistogram("TrackingPulls", "TrackInfo_SmoothSuccess_NaN", "Phi Vs. Theta",
169  theta, phi,
170  "#phi Vs. #theta; #theta [deg.]; #phi [deg.]", 70, 0.0, 140.0, 180, -180.0, 180.0);
171  Fill2DHistogram("TrackingPulls", "TrackInfo_SmoothSuccess_NaN", "P Vs. Phi",
172  phi, pmag,
173  "P Vs. #phi; #phi [deg.]; |P| [GeV/c]", 180, -180, 180.0, 50, 0.0, 10.0);
174  continue;
175  }
176 
177  for (size_t iPull = 0; iPull < pulls.size(); iPull++){
178  // Here is all of the information currently stored in the pulls from the fit
179  // From TRACKING/DTrackFitter.h
180  double resi = pulls[iPull].resi; // residual of measurement
181  double err = pulls[iPull].err; // estimated error of measurement
182  //double s = pulls[iPull].s;
183  double tdrift = pulls[iPull].tdrift; // drift time of this measurement
184  //double d = pulls[iPull].d; // doca to wire
185  const DCDCTrackHit *cdc_hit = pulls[iPull].cdc_hit;
186  const DFDCPseudo *fdc_hit = pulls[iPull].fdc_hit;
187  //double docaphi = pulls[iPull].docaphi; // phi of doca in CDC straws
188  double z = pulls[iPull].z;// z position at doca
189  //double tcorr = pulls[iPull].tcorr; // drift time with correction for B
190  double resic = pulls[iPull].resic; // residual for FDC cathode measuremtns
191  double errc = pulls[iPull].errc;
192 
193  Fill1DHistogram("TrackingPulls", "TrackPulls","All Pulls",
194  resi/err,
195  "Residual/Error", 100, -5.0, 5.0);
196  Fill2DHistogram("TrackingPulls", "TrackPulls","All Pulls Vs. P",
197  pmag, resi/err,
198  ";|P| ;Residual/Error", 100, 0.0, 10.0, 100, -5.0, 5.0);
199  Fill2DHistogram("TrackingPulls", "TrackPulls","All Pulls Vs. Phi",
200  phi, resi/err,
201  ";#phi ;Residual/Error", 180, -180.0, 180.0, 100, -5.0, 5.0);
202  Fill2DHistogram("TrackingPulls", "TrackPulls","All Pulls Vs. Theta",
203  theta, resi/err,
204  ";#theta ;Residual/Error", 140, 0.0, 140.0, 100, -5.0, 5.0);
205  Fill2DHistogram("TrackingPulls", "TrackPulls","All Pulls Vs. NDF",
206  locTrackTimeBased->Ndof, resi/err,
207  ";Track NDF ;Residual/Error", 140, 0.0, 140.0, 100, -5.0, 5.0);
208  Fill2DHistogram("TrackingPulls", "TrackPulls","All Pulls Vs. Tracking FOM",
209  trackingFOM, resi/err,
210  ";Track FOM ;Residual/Error", 140, 0.0, 140.0, 100, -5.0, 5.0);
211  if(fdc_hit != nullptr){
212  Fill1DHistogram("TrackingPulls", "TrackPulls","FDC Wire Error",
213  err,
214  "Wire Residual Error", 100, 0.0, 0.1);
215  Fill1DHistogram("TrackingPulls", "TrackPulls","FDC Cathode Error",
216  errc,
217  "Cathode Residual Error", 100, 0.0, 0.1);
218  }
219  else{
220  Fill1DHistogram("TrackingPulls", "TrackPulls","CDCError",
221  err,
222  "Residual Error", 100, 0.0, 0.1);
223  }
224 
225 
226  // Fill some detector specific info
227  // Fill them in order = super-hacked
228  static int nextPlane = 1;
229  static int nextRing = 1;
230 
231  if (fdc_hit != nullptr && fdc_hit->wire->layer <= nextPlane){
232  if(fdc_hit->wire->layer == nextPlane) nextPlane++;
233  Fill1DHistogram("TrackingPulls", "FDCPulls","All Wire Pulls",
234  resi/err,
235  "Residual/Error", 100, -5.0, 5.0);
236  Fill1DHistogram("TrackingPulls", "FDCPulls","All Cathode Pulls",
237  resic/errc,
238  "Residual/Error", 100, -5.0, 5.0);
239  Fill1DHistogram("TrackingPulls", "FDCPulls","All Wire Residuals",
240  resi,
241  "Residual", 100, -0.1, 0.1);
242  Fill1DHistogram("TrackingPulls", "FDCPulls","All Cathode Residuals",
243  resic,
244  "Residual", 100, -0.1, 0.1);
245  Fill2DHistogram("TrackingPulls", "FDCPulls","All Wire Residuals Vs. Plane",
246  fdc_hit->wire->layer, resi,
247  ";plane ;Residual", 24, 0.5, 24.5, 100, -0.1, 0.1);
248  Fill2DHistogram("TrackingPulls", "FDCPulls","All Cathode Residuals Vs. Plane",
249  fdc_hit->wire->layer, resic,
250  ";plane ;Residual", 24, 0.5, 24.5, 100, -0.1, 0.1);
251  Fill2DHistogram("TrackingPulls", "FDCPulls","All Wire Pulls Vs. Plane",
252  fdc_hit->wire->layer, resi/err,
253  ";plane ;Residual/Error", 24, 0.5, 24.5, 100, -5.0, 5.0);
254  Fill2DHistogram("TrackingPulls", "FDCPulls","All Cathode Pulls Vs. Plane",
255  fdc_hit->wire->layer, resic/errc,
256  ";plane ;Residual/Error", 24, 0.5, 24.5, 100, -5.0, 5.0);
257  Fill2DHistogram("TrackingPulls", "FDCPulls","All Wire Residuals Vs Drift Time",
258  tdrift, resi,
259  ";Drift Time;Residual", 170, -20.0, 150.0, 100, -0.1, 0.1);
260  Fill2DHistogram("TrackingPulls", "FDCPulls","All Wire Pulls Vs Drift Time",
261  tdrift, resi/err,
262  ";Drift Time;Residual/Error", 170, -20.0, 150.0, 100, -5.0, 5.0);
263  Fill2DHistogram("TrackingPulls", "FDCPulls","All Wire Pulls Vs. P",
264  pmag, resi/err,
265  ";|P| ;Residual/Error", 100, 0.0, 10.0, 100, -5.0, 5.0);
266  Fill2DHistogram("TrackingPulls", "FDCPulls","All Wire Pulls Vs. Phi",
267  phi, resi/err,
268  ";#phi ;Residual/Error", 180, -180.0, 180.0, 100, -5.0, 5.0);
269  Fill2DHistogram("TrackingPulls", "FDCPulls","All Wire Pulls Vs. Theta",
270  theta, resi/err,
271  ";#theta ;Residual/Error", 50, 0.0, 25.0, 100, -5.0, 5.0);
272  Fill2DHistogram("TrackingPulls", "FDCPulls","All Cathode Pulls Vs. P",
273  pmag, resic/errc,
274  ";|P| ;Residual/Error", 100, 0.0, 10.0, 100, -5.0, 5.0);
275  Fill2DHistogram("TrackingPulls", "FDCPulls","All Cathode Pulls Vs. Phi",
276  phi, resic/errc,
277  ";#phi ;Residual/Error", 180, -180.0, 180.0, 100, -5.0, 5.0);
278  Fill2DHistogram("TrackingPulls", "FDCPulls","All Cathode Pulls Vs. Theta",
279  theta, resic/errc,
280  ";#theta ;Residual/Error", 50, 0.0, 25.0, 100, -5.0, 5.0);
281  Fill2DHistogram("TrackingPulls", "FDCPulls","All Wire Residuals Vs. P",
282  pmag, resi,
283  ";|P| ;Residual/Error", 100, 0.0, 10.0, 100, -0.1, 0.1);
284  Fill2DHistogram("TrackingPulls", "FDCPulls","All Wire Residuals Vs. Phi",
285  phi, resi,
286  ";#phi ;Residual/Error", 180, -180.0, 180.0, 100, -0.1, 0.1);
287  Fill2DHistogram("TrackingPulls", "FDCPulls","All Wire Residuals Vs. Theta",
288  theta, resi,
289  ";#theta ;Residual/Error", 50, 0.0, 25.0, 100, -0.1, 0.1);
290  Fill2DHistogram("TrackingPulls", "FDCPulls","All Cathode Residuals Vs. P",
291  pmag, resic,
292  ";|P| ;Residual/Error", 100, 0.0, 10.0, 100, -0.1, 0.1);
293  Fill2DHistogram("TrackingPulls", "FDCPulls","All Cathode Residuals Vs. Phi",
294  phi, resic,
295  ";#phi ;Residual/Error", 180, -180.0, 180.0, 100, -0.1, 0.1);
296  Fill2DHistogram("TrackingPulls", "FDCPulls","All Cathode Residuals Vs. Theta",
297  theta, resic,
298  ";#theta ;Residual/Error", 50, 0.0, 25.0, 100, -0.1, 0.1);
299  Fill2DHistogram("TrackingPulls", "FDCPulls","All Wire Pulls Vs. NDF",
300  locTrackTimeBased->Ndof, resi/err,
301  ";Track NDF ;Residual/Error", 50, 0.5, 50.5, 100, -5.0, 5.0);
302  Fill2DHistogram("TrackingPulls", "FDCPulls","All Wire Pulls Vs. Tracking FOM",
303  trackingFOM, resi/err,
304  ";Track FOM ;Residual/Error", 100, 0.0, 1.0, 100, -5.0, 5.0);
305  Fill2DHistogram("TrackingPulls", "FDCPulls","All Cathode Pulls Vs. NDF",
306  locTrackTimeBased->Ndof, resic/errc,
307  ";Track NDF ;Residual/Error", 50, 0.5, 50.5, 100, -5.0, 5.0);
308  Fill2DHistogram("TrackingPulls", "FDCPulls","All Cathode Pulls Vs. Tracking FOM",
309  trackingFOM, resic/errc,
310  ";Track FOM ;Residual/Error", 100, 0.0, 1.0, 100, -5.0, 5.0);
311 
312  // Make the Per-Plane Histograms
313  char planeName[256];
314  sprintf(planeName,"FDCPulls_Plane%.2i", fdc_hit->wire->layer);
315 
316  Fill1DHistogram("TrackingPulls", planeName,"All Wire Pulls",
317  resi/err,
318  "Residual/Error", 100, -5.0, 5.0);
319  Fill1DHistogram("TrackingPulls", planeName,"All Cathode Pulls",
320  resic/errc,
321  "Residual/Error", 100, -5.0, 5.0);
322  Fill1DHistogram("TrackingPulls", planeName,"All Wire Residuals",
323  resi,
324  "Residual", 100, -0.1, 0.1);
325  Fill1DHistogram("TrackingPulls", planeName,"All Cathode Residuals",
326  resic,
327  "Residual", 100, -0.1, 0.1);
328  Fill2DHistogram("TrackingPulls", planeName,"All Wire Residuals Vs Drift Time",
329  tdrift, resi,
330  ";Drift Time;Residual", 170, -20.0, 150.0, 100, -0.1, 0.1);
331  Fill2DHistogram("TrackingPulls", planeName,"All Wire Pulls Vs Drift Time",
332  tdrift, resi/err,
333  ";Drift Time;Residual/Error", 170, -20.0, 150.0, 100, -5.0, 5.0);
334  Fill2DHistogram("TrackingPulls", planeName,"All Wire Pulls Vs. P",
335  pmag, resi/err,
336  ";|P| ;Residual/Error", 100, 0.0, 10.0, 100, -5.0, 5.0);
337  Fill2DHistogram("TrackingPulls", planeName,"All Wire Pulls Vs. Phi",
338  phi, resi/err,
339  ";#phi ;Residual/Error", 180, -180.0, 180.0, 100, -5.0, 5.0);
340  Fill2DHistogram("TrackingPulls", planeName,"All Wire Pulls Vs. Theta",
341  theta, resi/err,
342  ";#theta ;Residual/Error", 50, 0.0, 25.0, 100, -5.0, 5.0);
343  Fill2DHistogram("TrackingPulls", planeName,"All Wire Residuals Vs. P",
344  pmag, resi,
345  ";|P| ;Residual", 100, 0.0, 10.0, 100, -0.1, 0.1);
346  Fill2DHistogram("TrackingPulls", planeName,"All Wire Residuals Vs. Phi",
347  phi, resi,
348  ";#phi ;Residual", 180, -180.0, 180.0, 100, -0.1, 0.1);
349  Fill2DHistogram("TrackingPulls", planeName,"All Wire Residuals Vs. Theta",
350  theta, resi,
351  ";#theta ;Residual", 50, 0.0, 25.0, 100, -0.1, 0.1);
352  Fill2DHistogram("TrackingPulls", planeName,"All Cathode Pulls Vs. P",
353  pmag, resic/errc,
354  ";|P| ;Residual/Error", 100, 0.0, 10.0, 100, -5.0, 5.0);
355  Fill2DHistogram("TrackingPulls", planeName,"All Cathode Pulls Vs. Phi",
356  phi, resic/errc,
357  ";#phi ;Residual/Error", 180, -180.0, 180.0, 100, -5.0, 5.0);
358  Fill2DHistogram("TrackingPulls", planeName,"All Cathode Pulls Vs. Theta",
359  theta, resic/errc,
360  ";#theta ;Residual/Error", 50, 0.0, 25.0, 100, -5.0, 5.0);
361  Fill2DHistogram("TrackingPulls", planeName,"All Cathode Residuals Vs. P",
362  pmag, resic,
363  ";|P| ;Residual", 100, 0.0, 10.0, 100, -0.1, 0.1);
364  Fill2DHistogram("TrackingPulls", planeName,"All Cathode Residuals Vs. Phi",
365  phi, resic,
366  ";#phi ;Residual", 180, -180.0, 180.0, 100, -0.1, 0.1);
367  Fill2DHistogram("TrackingPulls", planeName,"All Cathode Residuals Vs. Theta",
368  theta, resic,
369  ";#theta ;Residual", 50, 0.0, 25.0, 100, -0.1, 0.1);
370  Fill2DHistogram("TrackingPulls", planeName,"Wire Pulls",
371  fdc_hit->wire->wire,resi/err,
372  ";Wire Number ;Residual/Error", 96, 0.5, 96.5, 100, -5.0, 5.0);
373  Fill2DHistogram("TrackingPulls", planeName,"Wire Residuals",
374  fdc_hit->wire->wire,resi,
375  ";Wire Number ;Residual", 96, 0.5, 96.5, 100, -0.1, 0.1);
376  if(fabs(resi/err) < 5.0){
377  Fill2DProfile("TrackingPulls", planeName,"2D Wire Hit Pulls",
378  fdc_hit->xy.X(), fdc_hit->xy.Y(), resi/err,
379  "Mean of Wire Pulls vs. PseudoHit XY",
380  100, -50., 50., 100, -50., 50.);
381  }
382  if(fabs(resi) < 0.1){
383  Fill2DProfile("TrackingPulls", planeName,"2D Wire Hit Residuals",
384  fdc_hit->xy.X(), fdc_hit->xy.Y(), resi,
385  "Mean of Wire Residuals vs. PseudoHit XY",
386  100, -50., 50., 100, -50., 50.);
387  Fill2DProfile("TrackingPulls", planeName,"2D Wire Hit Residuals Local",
388  fdc_hit->w, fdc_hit->s, resi,
389  "Mean of Wire Residuals vs. PseudoHit WS;Perpendicular Distance to Wire; Distance Along the Wire",
390  100, -50., 50., 100, -50., 50.);
391  }
392  if(fabs(resic/errc) < 5.0){
393  Fill2DProfile("TrackingPulls", planeName,"2D Cathode Hit Pulls",
394  fdc_hit->xy.X(), fdc_hit->xy.Y(), resic/errc,
395  "Mean of Cathode Pulls vs. PseudoHit XY",
396  100, -50., 50., 100, -50., 50.);
397  }
398  if(fabs(resic) < 0.1){
399  Fill2DProfile("TrackingPulls", planeName,"2D Cathode Hit Residuals",
400  fdc_hit->xy.X(), fdc_hit->xy.Y(), resic,
401  "Mean of Cathode Residuals vs. PseudoHit XY",
402  100, -50., 50., 100, -50., 50.);
403  Fill2DProfile("TrackingPulls", planeName,"2D Cathode Hit Residuals Local",
404  fdc_hit->w, fdc_hit->s, resic,
405  "Mean of Cathode Residuals vs. PseudoHit WS;Perpendicular Distance to Wire; Distance Along the Wire",
406  100, -50., 50., 100, -50., 50.);
407  }
408  }
409 
410  // Once we are done with the FDC, move on to the CDC.
411  if (cdc_hit != nullptr && cdc_hit->wire->ring <= nextRing && (nextPlane == 25 || evntCount > 1000)){
412  if(cdc_hit->wire->ring == nextRing) nextRing++;
413 
414  Fill1DHistogram("TrackingPulls", "CDCPulls","All Residuals",
415  resi,
416  "Residual", 100, -0.1, 0.1);
417  Fill1DHistogram("TrackingPulls", "CDCPulls","All Pulls",
418  resi/err,
419  "Residual/Error", 100, -5.0, 5.0);
420  Fill2DHistogram("TrackingPulls", "CDCPulls","All Pulls Vs. Ring",
421  cdc_hit->wire->ring, resi/err,
422  ";ring ;Residual/Error", 28, 0.5, 28.5, 100, -5.0, 5.0);
423  Fill2DHistogram("TrackingPulls", "CDCPulls","All Residuals Vs. Ring",
424  cdc_hit->wire->ring, resi,
425  ";ring ;Residual", 28, 0.5, 28.5, 100, -0.1, 0.1);
426  Fill2DHistogram("TrackingPulls", "CDCPulls","All Pulls Vs. tdrift",
427  tdrift, resi/err,
428  ";tdrift [ns] ;Residual/Error", 200, 0.0, 1000.0, 100, -5.0, 5.0);
429  Fill2DHistogram("TrackingPulls", "CDCPulls","All Residuals Vs. tdrift",
430  tdrift, resi,
431  ";tdrift [ns] ;Residual", 200, 0.0, 1000.0, 100, -0.1, 0.1);
432  Fill2DHistogram("TrackingPulls", "CDCPulls","All Pulls Vs. P",
433  pmag, resi/err,
434  ";|P| ;Residual/Error", 50, 0.0, 10.0, 100, -5.0, 5.0);
435  Fill2DHistogram("TrackingPulls", "CDCPulls","All Pulls Vs. Phi",
436  phi, resi/err,
437  ";#phi ;Residual/Error", 180, -180.0, 180.0, 100, -5.0, 5.0);
438  Fill2DHistogram("TrackingPulls", "CDCPulls","All Pulls Vs. Theta",
439  theta, resi/err,
440  ";#theta ;Residual/Error", 140, 0.0, 140.0, 100, -5.0, 5.0);
441  Fill2DHistogram("TrackingPulls", "CDCPulls","All Residuals Vs. P",
442  pmag, resi,
443  ";|P| ;Residual", 50, 0.0, 10.0, 100, -0.1, 0.1);
444  Fill2DHistogram("TrackingPulls", "CDCPulls","All Residuals Vs. Phi",
445  phi, resi,
446  ";#phi ;Residual", 180, -180.0, 180.0, 100, -0.1, 0.1);
447  Fill2DHistogram("TrackingPulls", "CDCPulls","All Residuals Vs. Theta",
448  theta, resi,
449  ";#theta ;Residual", 140, 0.0, 140.0, 100, -0.1, 0.1);
450  Fill2DHistogram("TrackingPulls", "CDCPulls","All Pulls Vs. NDF",
451  locTrackTimeBased->Ndof, resi/err,
452  ";Track NDF ;Residual/Error", 50, 0.5, 50.5, 100, -5.0, 5.0);
453  Fill2DHistogram("TrackingPulls", "CDCPulls","All Pulls Vs. Tracking FOM",
454  trackingFOM, resi/err,
455  ";Track FOM ;Residual/Error", 100, 0.0, 1.0, 100, -5.0, 5.0);
456 
457  // Make the Per-Ring Histograms
458  char ringName[256];
459  sprintf(ringName,"CDCPulls_Ring%.2i", cdc_hit->wire->ring);
460 
461  Fill1DHistogram("TrackingPulls", ringName,"All Residuals",
462  resi,
463  "Residual", 100, -0.1, 0.1);
464  Fill1DHistogram("TrackingPulls", ringName,"All Pulls",
465  resi/err,
466  "Residual/Error", 100, -5.0, 5.0);
467  Fill2DHistogram("TrackingPulls", ringName,"All Pulls Vs. tdrift",
468  tdrift, resi/err,
469  ";tdrift [ns] ;Residual/Error", 200, 0.0, 1000.0, 100, -5.0, 5.0);
470  Fill2DHistogram("TrackingPulls", ringName,"All Pulls Vs. z",
471  z, resi/err,
472  ";z [cm] ;Residual/Error", 200, -30., 200., 100, -5.0, 5.0);
473  Fill2DHistogram("TrackingPulls", ringName,"All Residuals Vs. tdrift",
474  tdrift, resi,
475  ";tdrift [ns] ;Residual", 200, 0.0, 1000.0, 100, -0.1, 0.1);
476  Fill2DHistogram("TrackingPulls", ringName,"All Residuals Vs. z",
477  z, resi,
478  ";z [cm] ;Residual", 200, -30., 200.0, 100, -0.1, 0.1);
479  Fill2DHistogram("TrackingPulls", ringName,"All Pulls Vs. P",
480  pmag, resi/err,
481  ";|P| ;Residual/Error", 50, 0.0, 10.0, 100, -5.0, 5.0);
482  Fill2DHistogram("TrackingPulls", ringName,"All Pulls Vs. Phi",
483  phi, resi/err,
484  ";#phi ;Residual/Error", 180, -180.0, 180.0, 100, -5.0, 5.0);
485  Fill2DHistogram("TrackingPulls", ringName,"All Pulls Vs. Theta",
486  theta, resi/err,
487  ";#theta ;Residual/Error", 140, 0.0, 140.0, 100, -5.0, 5.0);
488  Fill2DHistogram("TrackingPulls", ringName,"All Residuals Vs. P",
489  pmag, resi,
490  ";|P| ;Residual", 50, 0.0, 10.0, 100, -0.1, 0.1);
491  Fill2DHistogram("TrackingPulls", ringName,"All Residuals Vs. Phi",
492  phi, resi,
493  ";#phi ;Residual", 180, -180.0, 180.0, 100, -0.1, 0.1);
494  Fill2DHistogram("TrackingPulls", ringName,"All Residuals Vs. Theta",
495  theta, resi,
496  ";#theta ;Residual", 140, 0.0, 140.0, 100, -0.1, 0.1);
497 
498  double nStraw = numstraws[cdc_hit->wire->ring-1];
499  double phiIntersect = (cdc_hit->wire->origin + (z-92.0)*cdc_hit->wire->udir).Phi() * TMath::RadToDeg();
500 
501  Fill2DHistogram("TrackingPulls", ringName,"Per Straw Pulls",
502  cdc_hit->wire->straw, resi/err,
503  ";Straw Number ;Residual/Error", nStraw, 0.5, nStraw+0.5, 100, -5.0, 5.0);
504  Fill2DHistogram("TrackingPulls", ringName,"Per Straw Residuals",
505  cdc_hit->wire->straw, resi,
506  ";Straw Number ;Residual", nStraw, 0.5, nStraw+0.5, 100, -0.1, 0.1);
507 
508  if (fabs(resi) < 0.1){
509  Fill2DProfile("TrackingPulls", ringName, "Residual Vs Phi-Theta",
510  theta, phi, resi,
511  ";#theta;#phi", 70, 0.0, 140.0, 180, -180.0, 180.0);
512  Fill2DProfile("TrackingPulls", ringName, "Residual Vs Phi-z",
513  z, phi, resi,
514  ";z;#phi", 200, 0.0, 200.0, 180, -180.0, 180.0);
515  Fill2DProfile("TrackingPulls", ringName, "Residual Vs PhiIntersect-z",
516  z, phiIntersect, resi,
517  ";z;#phi Intersect", 200, 0.0, 200.0, nStraw, -180.0, 180.0);
518  Fill2DProfile("TrackingPulls", ringName, "Residual Vs P-Theta",
519  theta, pmag, resi,
520  ";#theta;|P|", 70, 0.0, 140.0, 50, 0.0, 10.0);
521  }
522 
523  }
524  }
525  }
526 
527  return NOERROR;
528 }
529 
530 //------------------
531 // erun
532 //------------------
534 {
535  // This is called whenever the run number changes, before it is
536  // changed to give you a chance to clean up before processing
537  // events from the next run number.
538  return NOERROR;
539 }
540 
541 //------------------
542 // fini
543 //------------------
545 {
546  // Called before program exit after event processing is finished.
547  return NOERROR;
548 }
549 
DVector2 xy
rough x,y coordinates in lab coordinate system
Definition: DFDCPseudo.h:100
const DCDCWire * wire
Definition: DCDCTrackHit.h:37
jerror_t brun(jana::JEventLoop *eventLoop, int32_t runnumber)
Called everytime a new run number is detected.
sprintf(text,"Post KinFit Cut")
const DTrackTimeBased * Get_TrackTimeBased(void) const
const DFDCWire * wire
DFDCWire for this wire.
Definition: DFDCPseudo.h:92
uint32_t Get_L1FrontPanelTriggerBits(void) const
class DFDCPseudo: definition for a reconstructed point in the FDC
Definition: DFDCPseudo.h:74
jerror_t erun(void)
Called everytime run number changes, provided brun has been called.
int layer
1-24
Definition: DFDCWire.h:16
InitPlugin_t InitPlugin
jerror_t init(void)
Called once at program start.
int straw
Definition: DCDCWire.h:81
jerror_t evnt(jana::JEventLoop *eventLoop, uint64_t eventnumber)
Called every event.
double s
&lt; wire position computed from cathode data, assuming the avalanche occurs at the wire ...
Definition: DFDCPseudo.h:91
void Fill1DHistogram(const char *plugin, const char *directoryName, const char *name, const double value, const char *title, int nBins, double xmin, double xmax, bool print=false)
void Fill2DHistogram(const char *plugin, const char *directoryName, const char *name, const double valueX, const double valueY, const char *title, int nBinsX, double xmin, double xmax, int nBinsY, double ymin, double ymax, bool print=false)
double w
Definition: DFDCPseudo.h:89
void cdc_hit(Int_t &, Int_t &, Int_t &, Int_t[], Int_t, Int_t, Int_t, Int_t, Int_t, Int_t)
Definition: fa125fns.h:55
const DVector3 & momentum(void) const
int wire
1-N
Definition: DFDCWire.h:17
int ring
Definition: DCDCWire.h:80
jerror_t fini(void)
Called after last event of last event source has been processed.
void Fill2DProfile(const char *plugin, const char *directoryName, const char *name, const double valueX, const double valueY, const double valueZ, const char *title, int nBinsX, double xmin, double xmax, int nBinsY, double ymin, double ymax, bool print=false)