17 #include <JANA/JApplication.h>
18 #include <JANA/JFactory.h>
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,
70 static uint32_t evntCount=0;
75 loop->GetSingle(locTrigger);
79 vector<const DChargedTrack *> chargedTrackVector;
80 loop->Get(chargedTrackVector);
82 for (
size_t i = 0; i < chargedTrackVector.size(); i++){
86 if (bestHypothesis == NULL)
continue;
89 double trackingFOM = TMath::Prob(locTrackTimeBased->chisq, locTrackTimeBased->Ndof);
93 float trackingFOMCut = 0.001;
94 int trackingNDFCut = 5;
96 if(trackingFOM < trackingFOMCut)
continue;
97 if( locTrackTimeBased->Ndof < trackingNDFCut)
continue;
99 double phi = bestHypothesis->
momentum().Phi()*TMath::RadToDeg();
100 double theta = bestHypothesis->
momentum().Theta()*TMath::RadToDeg();
101 double pmag = bestHypothesis->
momentum().Mag();
103 if (pmag < 0.5)
continue;
108 "Tracking FOM", 200, 0.0, 1.0);
111 "P Vs. #theta; #theta [deg.]; |P| [GeV/c]", 70, 0.0, 140.0, 50, 0.0, 10.0);
114 "#phi Vs. #theta; #theta [deg.]; #phi [deg.]", 70, 0.0, 140.0, 180, -180.0, 180.0);
117 "P Vs. #phi; #phi [deg.]; |P| [GeV/c]", 180, -180, 180.0, 50, 0.0, 10.0);
122 if (!thisTimeBasedTrack->IsSmoothed){
123 Fill1DHistogram(
"TrackingPulls",
"TrackInfo_SmoothFailure",
"Tracking FOM",
125 "Tracking FOM", 200, 0.0, 1.0);
126 Fill2DHistogram(
"TrackingPulls",
"TrackInfo_SmoothFailure",
"P Vs. Theta",
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",
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",
134 "P Vs. #phi; #phi [deg.]; |P| [GeV/c]", 180, -180, 180.0, 50, 0.0, 10.0);
138 Fill1DHistogram(
"TrackingPulls",
"TrackInfo_SmoothSuccess",
"Tracking FOM",
140 "Tracking FOM", 200, 0.0, 1.0);
141 Fill2DHistogram(
"TrackingPulls",
"TrackInfo_SmoothSuccess",
"P Vs. Theta",
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",
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",
149 "P Vs. #phi; #phi [deg.]; |P| [GeV/c]", 180, -180, 180.0, 50, 0.0, 10.0);
152 vector<DTrackFitter::pull_t> pulls = thisTimeBasedTrack->pulls;
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;
162 Fill1DHistogram(
"TrackingPulls",
"TrackInfo_SmoothSuccess_NaN",
"Tracking FOM",
164 "Tracking FOM", 200, 0.0, 1.0);
165 Fill2DHistogram(
"TrackingPulls",
"TrackInfo_SmoothSuccess_NaN",
"P Vs. Theta",
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",
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",
173 "P Vs. #phi; #phi [deg.]; |P| [GeV/c]", 180, -180, 180.0, 50, 0.0, 10.0);
177 for (
size_t iPull = 0; iPull < pulls.size(); iPull++){
180 double resi = pulls[iPull].resi;
181 double err = pulls[iPull].err;
183 double tdrift = pulls[iPull].tdrift;
186 const DFDCPseudo *fdc_hit = pulls[iPull].fdc_hit;
188 double z = pulls[iPull].z;
190 double resic = pulls[iPull].resic;
191 double errc = pulls[iPull].errc;
195 "Residual/Error", 100, -5.0, 5.0);
198 ";|P| ;Residual/Error", 100, 0.0, 10.0, 100, -5.0, 5.0);
201 ";#phi ;Residual/Error", 180, -180.0, 180.0, 100, -5.0, 5.0);
204 ";#theta ;Residual/Error", 140, 0.0, 140.0, 100, -5.0, 5.0);
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){
214 "Wire Residual Error", 100, 0.0, 0.1);
217 "Cathode Residual Error", 100, 0.0, 0.1);
222 "Residual Error", 100, 0.0, 0.1);
228 static int nextPlane = 1;
229 static int nextRing = 1;
231 if (fdc_hit !=
nullptr && fdc_hit->
wire->
layer <= nextPlane){
232 if(fdc_hit->
wire->
layer == nextPlane) nextPlane++;
235 "Residual/Error", 100, -5.0, 5.0);
238 "Residual/Error", 100, -5.0, 5.0);
241 "Residual", 100, -0.1, 0.1);
244 "Residual", 100, -0.1, 0.1);
245 Fill2DHistogram(
"TrackingPulls",
"FDCPulls",
"All Wire Residuals Vs. Plane",
247 ";plane ;Residual", 24, 0.5, 24.5, 100, -0.1, 0.1);
248 Fill2DHistogram(
"TrackingPulls",
"FDCPulls",
"All Cathode Residuals Vs. Plane",
250 ";plane ;Residual", 24, 0.5, 24.5, 100, -0.1, 0.1);
251 Fill2DHistogram(
"TrackingPulls",
"FDCPulls",
"All Wire Pulls Vs. Plane",
253 ";plane ;Residual/Error", 24, 0.5, 24.5, 100, -5.0, 5.0);
254 Fill2DHistogram(
"TrackingPulls",
"FDCPulls",
"All Cathode Pulls Vs. Plane",
256 ";plane ;Residual/Error", 24, 0.5, 24.5, 100, -5.0, 5.0);
257 Fill2DHistogram(
"TrackingPulls",
"FDCPulls",
"All Wire Residuals Vs Drift Time",
259 ";Drift Time;Residual", 170, -20.0, 150.0, 100, -0.1, 0.1);
260 Fill2DHistogram(
"TrackingPulls",
"FDCPulls",
"All Wire Pulls Vs Drift Time",
262 ";Drift Time;Residual/Error", 170, -20.0, 150.0, 100, -5.0, 5.0);
265 ";|P| ;Residual/Error", 100, 0.0, 10.0, 100, -5.0, 5.0);
268 ";#phi ;Residual/Error", 180, -180.0, 180.0, 100, -5.0, 5.0);
269 Fill2DHistogram(
"TrackingPulls",
"FDCPulls",
"All Wire Pulls Vs. Theta",
271 ";#theta ;Residual/Error", 50, 0.0, 25.0, 100, -5.0, 5.0);
274 ";|P| ;Residual/Error", 100, 0.0, 10.0, 100, -5.0, 5.0);
275 Fill2DHistogram(
"TrackingPulls",
"FDCPulls",
"All Cathode Pulls Vs. Phi",
277 ";#phi ;Residual/Error", 180, -180.0, 180.0, 100, -5.0, 5.0);
278 Fill2DHistogram(
"TrackingPulls",
"FDCPulls",
"All Cathode Pulls Vs. Theta",
280 ";#theta ;Residual/Error", 50, 0.0, 25.0, 100, -5.0, 5.0);
281 Fill2DHistogram(
"TrackingPulls",
"FDCPulls",
"All Wire Residuals Vs. P",
283 ";|P| ;Residual/Error", 100, 0.0, 10.0, 100, -0.1, 0.1);
284 Fill2DHistogram(
"TrackingPulls",
"FDCPulls",
"All Wire Residuals Vs. Phi",
286 ";#phi ;Residual/Error", 180, -180.0, 180.0, 100, -0.1, 0.1);
287 Fill2DHistogram(
"TrackingPulls",
"FDCPulls",
"All Wire Residuals Vs. Theta",
289 ";#theta ;Residual/Error", 50, 0.0, 25.0, 100, -0.1, 0.1);
290 Fill2DHistogram(
"TrackingPulls",
"FDCPulls",
"All Cathode Residuals Vs. P",
292 ";|P| ;Residual/Error", 100, 0.0, 10.0, 100, -0.1, 0.1);
293 Fill2DHistogram(
"TrackingPulls",
"FDCPulls",
"All Cathode Residuals Vs. Phi",
295 ";#phi ;Residual/Error", 180, -180.0, 180.0, 100, -0.1, 0.1);
296 Fill2DHistogram(
"TrackingPulls",
"FDCPulls",
"All Cathode Residuals Vs. Theta",
298 ";#theta ;Residual/Error", 50, 0.0, 25.0, 100, -0.1, 0.1);
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);
318 "Residual/Error", 100, -5.0, 5.0);
321 "Residual/Error", 100, -5.0, 5.0);
324 "Residual", 100, -0.1, 0.1);
327 "Residual", 100, -0.1, 0.1);
328 Fill2DHistogram(
"TrackingPulls", planeName,
"All Wire Residuals Vs Drift Time",
330 ";Drift Time;Residual", 170, -20.0, 150.0, 100, -0.1, 0.1);
331 Fill2DHistogram(
"TrackingPulls", planeName,
"All Wire Pulls Vs Drift Time",
333 ";Drift Time;Residual/Error", 170, -20.0, 150.0, 100, -5.0, 5.0);
336 ";|P| ;Residual/Error", 100, 0.0, 10.0, 100, -5.0, 5.0);
339 ";#phi ;Residual/Error", 180, -180.0, 180.0, 100, -5.0, 5.0);
342 ";#theta ;Residual/Error", 50, 0.0, 25.0, 100, -5.0, 5.0);
345 ";|P| ;Residual", 100, 0.0, 10.0, 100, -0.1, 0.1);
346 Fill2DHistogram(
"TrackingPulls", planeName,
"All Wire Residuals Vs. Phi",
348 ";#phi ;Residual", 180, -180.0, 180.0, 100, -0.1, 0.1);
349 Fill2DHistogram(
"TrackingPulls", planeName,
"All Wire Residuals Vs. Theta",
351 ";#theta ;Residual", 50, 0.0, 25.0, 100, -0.1, 0.1);
354 ";|P| ;Residual/Error", 100, 0.0, 10.0, 100, -5.0, 5.0);
355 Fill2DHistogram(
"TrackingPulls", planeName,
"All Cathode Pulls Vs. Phi",
357 ";#phi ;Residual/Error", 180, -180.0, 180.0, 100, -5.0, 5.0);
358 Fill2DHistogram(
"TrackingPulls", planeName,
"All Cathode Pulls Vs. Theta",
360 ";#theta ;Residual/Error", 50, 0.0, 25.0, 100, -5.0, 5.0);
361 Fill2DHistogram(
"TrackingPulls", planeName,
"All Cathode Residuals Vs. P",
363 ";|P| ;Residual", 100, 0.0, 10.0, 100, -0.1, 0.1);
364 Fill2DHistogram(
"TrackingPulls", planeName,
"All Cathode Residuals Vs. Phi",
366 ";#phi ;Residual", 180, -180.0, 180.0, 100, -0.1, 0.1);
367 Fill2DHistogram(
"TrackingPulls", planeName,
"All Cathode Residuals Vs. Theta",
369 ";#theta ;Residual", 50, 0.0, 25.0, 100, -0.1, 0.1);
372 ";Wire Number ;Residual/Error", 96, 0.5, 96.5, 100, -5.0, 5.0);
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.);
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.);
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.);
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.);
411 if (cdc_hit !=
nullptr && cdc_hit->
wire->
ring <= nextRing && (nextPlane == 25 || evntCount > 1000)){
412 if(cdc_hit->
wire->
ring == nextRing) nextRing++;
416 "Residual", 100, -0.1, 0.1);
419 "Residual/Error", 100, -5.0, 5.0);
422 ";ring ;Residual/Error", 28, 0.5, 28.5, 100, -5.0, 5.0);
425 ";ring ;Residual", 28, 0.5, 28.5, 100, -0.1, 0.1);
428 ";tdrift [ns] ;Residual/Error", 200, 0.0, 1000.0, 100, -5.0, 5.0);
429 Fill2DHistogram(
"TrackingPulls",
"CDCPulls",
"All Residuals Vs. tdrift",
431 ";tdrift [ns] ;Residual", 200, 0.0, 1000.0, 100, -0.1, 0.1);
434 ";|P| ;Residual/Error", 50, 0.0, 10.0, 100, -5.0, 5.0);
437 ";#phi ;Residual/Error", 180, -180.0, 180.0, 100, -5.0, 5.0);
440 ";#theta ;Residual/Error", 140, 0.0, 140.0, 100, -5.0, 5.0);
443 ";|P| ;Residual", 50, 0.0, 10.0, 100, -0.1, 0.1);
446 ";#phi ;Residual", 180, -180.0, 180.0, 100, -0.1, 0.1);
449 ";#theta ;Residual", 140, 0.0, 140.0, 100, -0.1, 0.1);
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);
463 "Residual", 100, -0.1, 0.1);
466 "Residual/Error", 100, -5.0, 5.0);
469 ";tdrift [ns] ;Residual/Error", 200, 0.0, 1000.0, 100, -5.0, 5.0);
472 ";z [cm] ;Residual/Error", 200, -30., 200., 100, -5.0, 5.0);
475 ";tdrift [ns] ;Residual", 200, 0.0, 1000.0, 100, -0.1, 0.1);
478 ";z [cm] ;Residual", 200, -30., 200.0, 100, -0.1, 0.1);
481 ";|P| ;Residual/Error", 50, 0.0, 10.0, 100, -5.0, 5.0);
484 ";#phi ;Residual/Error", 180, -180.0, 180.0, 100, -5.0, 5.0);
487 ";#theta ;Residual/Error", 140, 0.0, 140.0, 100, -5.0, 5.0);
490 ";|P| ;Residual", 50, 0.0, 10.0, 100, -0.1, 0.1);
493 ";#phi ;Residual", 180, -180.0, 180.0, 100, -0.1, 0.1);
496 ";#theta ;Residual", 140, 0.0, 140.0, 100, -0.1, 0.1);
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();
503 ";Straw Number ;Residual/Error", nStraw, 0.5, nStraw+0.5, 100, -5.0, 5.0);
506 ";Straw Number ;Residual", nStraw, 0.5, nStraw+0.5, 100, -0.1, 0.1);
508 if (fabs(resi) < 0.1){
509 Fill2DProfile(
"TrackingPulls", ringName,
"Residual Vs Phi-Theta",
511 ";#theta;#phi", 70, 0.0, 140.0, 180, -180.0, 180.0);
512 Fill2DProfile(
"TrackingPulls", ringName,
"Residual Vs Phi-z",
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",
520 ";#theta;|P|", 70, 0.0, 140.0, 50, 0.0, 10.0);
DVector2 xy
rough x,y coordinates in lab coordinate system
jerror_t brun(jana::JEventLoop *eventLoop, int32_t runnumber)
Called everytime a new run number is detected.
sprintf(text,"Post KinFit Cut")
~JEventProcessor_TrackingPulls()
const DTrackTimeBased * Get_TrackTimeBased(void) const
const DFDCWire * wire
DFDCWire for this wire.
uint32_t Get_L1FrontPanelTriggerBits(void) const
class DFDCPseudo: definition for a reconstructed point in the FDC
jerror_t erun(void)
Called everytime run number changes, provided brun has been called.
jerror_t init(void)
Called once at program start.
jerror_t evnt(jana::JEventLoop *eventLoop, uint64_t eventnumber)
Called every event.
double s
< wire position computed from cathode data, assuming the avalanche occurs at the wire ...
void cdc_hit(Int_t &, Int_t &, Int_t &, Int_t[], Int_t, Int_t, Int_t, Int_t, Int_t, Int_t)
const DVector3 & momentum(void) const
jerror_t fini(void)
Called after last event of last event source has been processed.
JEventProcessor_TrackingPulls()