12 TPad *padRZ, *padXY, *padStat;
14 float LegendX, LegendY;
15 float lineScale = 1.5;
17 enum ProjectionType { kXY, kRZ, kRZSigned, kXZ, kYZ };
19 float xx(
float x,
float y,
float z, ProjectionType proj = kRZ ){
21 if ( proj == kRZ || proj == kRZSigned){
23 }
else if ( proj == kXY ){
25 }
else if ( proj == kXZ ){
27 }
else if ( proj == kYZ ){
34 float yy(
float x,
float y,
float z, ProjectionType proj = kRZ ){
37 float r = sqrt( pow(x, 2) + pow(y, 2) );
39 }
else if ( proj == kXY ){
41 }
else if ( proj == kRZSigned ){
42 float r = sqrt( pow(x, 2) + pow(y, 2) );
43 if ( y == 0 )
return r;
46 }
else if ( proj == kXZ ){
48 }
else if ( proj == kYZ ){
55 void viz_points(
const char* name,
const char* cmd,
int color,
int eventIndex, ProjectionType projType,
bool Legend =
false ){
57 fwd->Draw( cmd,
"",
"goff", 1, eventIndex );
58 int N = fwd->GetSelectedRows();
59 printf(
"%s : has %d results \n", cmd, N );
60 printf(
"Projection Mode : %d \n", projType );
62 auto cmdX = fwd->GetV1();
63 auto cmdY = fwd->GetV2();
64 auto cmdZ = fwd->GetV3();
65 auto cmdE = fwd->GetV4();
66 if ( cmdE !=
nullptr ){
72 TText *t =
new TText(.5,.5,
"Hello World !");
74 t->SetTextColor(kBlack);
81 float zSizes[] = {2.5, 2.5, 2.0, 1.5, 1.5, 1.5, 1.5, 1.5, 2.5, 2.0, 1.5};
82 for (
int i = 0; i < 50; i++ )
83 zColors[i] = TColor::GetColorPalette(i*zColorStep % 255 );
88 for (
int i = 0; i < N; i++ ){
90 vizX = xx( cmdX[i], cmdY[i], cmdZ[i], projType );
91 vizY = yy( cmdX[i], cmdY[i], cmdZ[i], projType );
92 printf(
"\tpoint at (%f, %f, %f) -> (%f, %f)\n", cmdX[i], cmdY[i], cmdZ[i], vizX, vizY );
95 if ( fabs( cmdZ[i] - 151.75) < 2.5 ) zIndex = 1;
96 if ( fabs( cmdZ[i] - 165.25) < 2.5 ) zIndex = 2;
97 if ( fabs( cmdZ[i] - 178.75) < 2.5 ) zIndex = 3;
101 if ( fabs( cmdZ[i] - 281) < 2.5 ) zIndex = 4;
102 if ( fabs( cmdZ[i] - 304) < 2.5 ) zIndex = 5;
103 if ( fabs( cmdZ[i] - 325) < 2.5 ) zIndex = 6;
104 if ( fabs( cmdZ[i] - 348) < 2.5 ) zIndex = 7;
106 if ( fabs( cmdZ[i] - 375) < 2.5 ) zIndex = 8;
111 TMarker *mk =
new TMarker( vizX, vizY, 20 );
113 mk->SetMarkerSize( 2.5 );
114 if (zIndex >= 1 && zIndex < 50){
115 slc = zColors[zIndex];
117 mk->SetMarkerSize( zSizes[zIndex] );
125 if ( zIndex != 8 && (cmdE !=
nullptr && projType == kRZSigned) ){
128 mk->SetMarkerSize(0);
129 alpha = (cmdE[i] / 10.0);
130 if (alpha>=1) alpha = 1;
131 TBox *box =
new TBox( vizX-0.05*cmdE[i], vizY-0.5, vizX, vizY+0.5 );
132 box->SetFillColor(210);
133 if ( name ==
"WCal Clusters" || name ==
"HCal CLusters" ){
134 box->SetFillColor(880);
135 mk->SetMarkerSize(1);
139 if ( name ==
"FTT Clusters" && projType == kXY ){
140 mk->SetMarkerSize(0);
142 XCluster.SetLineWidth(1);
143 XCluster.SetLineColor(9);
145 YCluster.SetLineWidth(1);
146 YCluster.SetLineColor(46);
154 }
else if(vizX >= 0){
161 }
else if (vizY >= 0){
166 XCluster.DrawLine(vizX, y0, vizX, y1);
167 YCluster.DrawLine(x0, vizY, x1, vizY);
171 if ( cmdE !=
nullptr && (zIndex == 8 || projType != kRZSigned) ){
172 mk->SetMarkerStyle(21);
173 mk->SetMarkerSize( 0.005 * cmdE[i]);
176 printf(
"\tzIndex = %d -> color = %d \n", zIndex, slc );
178 mk->SetMarkerColorAlpha( slc, alpha );
180 mk->SetMarkerColorAlpha( slc, alpha );
206 for (
int i = 1; i < 4; i++ ){
207 TMarker *mk1 =
new TMarker( LegendX, LegendY, 20 );
208 mk1->SetMarkerSize( 2.5 );
209 mk1->SetMarkerColorAlpha( zColors[i], 0.5 );
211 t->DrawText( LegendX + 2, LegendY - 0.5, TString::Format(
"%s: %d", name, i ) );
215 }
else if (name ==
"FTT"){
216 for (
int i = 1; i < 5; i++ ){
217 TMarker *mk1 =
new TMarker( LegendX, LegendY, 20 );
218 mk1->SetMarkerSize( 2.5 );
219 mk1->SetMarkerColorAlpha( zColors[i+3], 0.5 );
221 t->DrawText( LegendX + 2, LegendY - 0.5, TString::Format(
"%s: %d", name, i ) );
225 }
else if (name ==
"FCS"){
226 for (
int i = 1; i < 3; i++ ){
227 TMarker *mk1 =
new TMarker( LegendX, LegendY, 20 );
228 mk1->SetMarkerSize( 2.5 );
229 mk1->SetMarkerColorAlpha( zColors[i], 0.5 );
231 t->DrawText( LegendX + 2, LegendY - 0.5, TString::Format(
"%s: %d", name, i ) );
238 TMarker *mk1 =
new TMarker( LegendX, LegendY, 20 );
239 mk1->SetMarkerSize( 2.5 );
240 mk1->SetMarkerColor( color );
242 t->DrawText( LegendX + 2, LegendY - 0.5, TString::Format(
"%s:", name ) );
249 void viz_seed(
const char* name,
const char* cmd,
int eventIndex, ProjectionType projType = kRZSigned){
251 fwd->Draw(
"reco.mChi2",
"",
"goff", 1, eventIndex );
252 int nTrks = fwd->GetSelectedRows();
255 line.SetLineWidth(2);
256 line.SetLineColor(1);
258 for (
int i = 0; i < nTrks; i++){
260 fwd->Draw( TString::Format(
"reco[%d].mProjections.mXYZ.fX:reco[%d].mProjections.mXYZ.fY:reco[%d].mProjections.mXYZ.fZ", i, i, i),
"",
"goff", 1, eventIndex );
261 auto nHits = fwd->GetSelectedRows();
262 auto projX = fwd->GetV1();
263 auto projY = fwd->GetV2();
264 auto projZ = fwd->GetV3();
276 fwd->Draw( cmd, TString::Format(
"seeds.mTrackId == %d", i),
"goff", 1, eventIndex );
278 int numSeeds = fwd->GetSelectedRows();
279 auto newX = fwd->GetV1();
280 auto newY = fwd->GetV2();
281 auto newZ = fwd->GetV3();
283 for (
int j = 0; j < numSeeds - 1; j++){
285 float x0 = xx( newX[j], newY[j], newZ[j], projType );
286 float y0 = yy( newX[j], newY[j], newZ[j], projType );
287 float x1 = xx( newX[j+1], newY[j+1], newZ[j+1], projType );
288 float y1 = yy( newX[j+1], newY[j+1], newZ[j+1], projType );
294 line.DrawLine(x0, y0, x1, y1);
301 void viz_proj(
int eventIndex, ProjectionType projType = kRZSigned,
bool markers =
false ){
304 fwd->Draw(
"reco.mChi2",
"",
"goff", 1, eventIndex);
305 int nTrks = fwd->GetSelectedRows();
309 trkproj.SetLineWidth(1.5);
310 trkproj.SetLineColor(24);
313 for (
int i = 0; i < nTrks; i++ ){
316 fwd->Draw( TString::Format(
"reco[%d].mProjections.mXYZ.fX:reco[%d].mProjections.mXYZ.fY:reco[%d].mProjections.mXYZ.fZ", i, i, i),
"",
"goff", 1, eventIndex );
317 auto nHits = fwd->GetSelectedRows();
318 auto projX = fwd->GetV1();
319 auto projY = fwd->GetV2();
320 auto projZ = fwd->GetV3();
324 for (
int j = 0; j < nHits - 1; j++ ){
327 float x0 = xx( projX[j], projY[j], projZ[j], projType );
328 float y0 = yy( projX[j], projY[j], projZ[j], projType );
329 float x1 = xx( projX[j+1], projY[j+1], projZ[j+1], projType );
330 float y1 = yy( projX[j+1], projY[j+1], projZ[j+1], projType );
336 trkproj.DrawLine(x0, y0, x1, y1);
341 for (
int j = 0; j < nHits; j++ ){
343 float x = xx( projX[j], projY[j], projZ[j], projType );
344 float y = yy( projX[j], projY[j], projZ[j], projType );
346 TMarker *mk =
new TMarker( x, y, 20);
347 mk->SetMarkerStyle(23);
348 mk->SetMarkerColor(2);
349 mk->SetMarkerSize(1.5);
357 TText *t =
new TText(.5,.5,
"Hello World !");
358 t->SetTextColor(kBlack);
362 if ( projType == kRZSigned ){
364 }
else if (projType == kXY ){
367 TMarker *mk1 =
new TMarker( LegendX, LegendY, 23 );
368 mk1->SetMarkerSize( 2.5 );
369 mk1->SetMarkerColor( 2 );
371 t->DrawText( LegendX + 2, LegendY - 0.5, TString::Format(
"Projected Hits ") );
381 float statTextY = 0.97;
382 void n() { statTextY -= 0.05; }
383 void viz_stats(
int eventIndex ){
386 text.SetTextFont(43);
387 text.SetTextSize(36);
399 fwd->Draw(
"reco.mChi2",
"",
"goff", 1, eventIndex );
400 int numTracks = fwd->GetSelectedRows();
401 fwd->Draw(
"fstHits.mXYZ.fX:fstHits.mXYZ.fY:fstHits.mXYZ.fZ",
"",
"goff", 1, eventIndex );
402 int numFst = fwd->GetSelectedRows();
403 fwd->Draw(
"fttPoints.mXYZ.fX:fttPoints.mXYZ.fY:fttPoints.mXYZ.fZ",
"",
"goff", 1, eventIndex );
404 int numFtt = fwd->GetSelectedRows();
407 fwd->Draw(
"wcalHits.mXYZ.fX:wcalHits.mXYZ.fY:wcalHits.mXYZ.fZ",
"",
"goff", 1, eventIndex );
408 int numWcalHits = fwd->GetSelectedRows();
409 fwd->Draw(
"hcalHits.mXYZ.fX:hcalHits.mXYZ.fY:hcalHits.mXYZ.fZ",
"",
"goff", 1, eventIndex );
410 int numHcalHits = fwd->GetSelectedRows();
411 fwd->Draw(
"wcalClusters.mXYZ.fX:wcalClusters.mXYZ.fY:wcalClusters.mXYZ.fZ",
"",
"goff", 1, eventIndex );
412 int numWcal = fwd->GetSelectedRows();
413 fwd->Draw(
"hcalClusters.mXYZ.fX:hcalClusters.mXYZ.fY:hcalClusters.mXYZ.fZ",
"",
"goff", 1, eventIndex );
414 int numHcal = fwd->GetSelectedRows();
416 text.DrawTextNDC( 0.05, statTextY, TString::Format(
"Event : %d", eventIndex) ); n();
417 text.DrawTextNDC( 0.05, statTextY, TString::Format(
"Tracks : %d", numTracks) ); n();
418 text.DrawTextNDC( 0.05, statTextY, TString::Format(
"FST Hits : %d", numFst) ); n();
419 text.DrawTextNDC( 0.05, statTextY, TString::Format(
"FTT Hits : %d", numFtt) ); n();
423 text.DrawTextNDC( 0.05, statTextY, TString::Format(
"WCal Clusters : %d", numWcal) ); n();
424 text.DrawTextNDC( 0.05, statTextY, TString::Format(
"HCal Clusters : %d", numHcal) ); n();
435 int viz_event(
int eventIndex, ProjectionType projType = kRZSigned ){
437 if ( projType == kRZSigned || projType == kXZ || projType == kYZ ){
438 hFrame =
new TH2F(
"hFrame",
";z;R", 520, -30, 900, 260, -130, 130 );
439 hFrame->SetTitle(
"Event Visualization (RZ Signed)" );
442 }
else if ( projType == kRZ ){
443 hFrame =
new TH2F(
"hFrame",
";z;R", 500, 0, 900, 60, 0, 60 );
444 hFrame->SetTitle(
"Event Visualization (RZ Signed)" );
447 }
else if ( projType == kXY ){
448 hFrame =
new TH2F(
"hFrame",
";x;y", 5, -50, 50, 5, -50, 50 );
449 hFrame->SetTitle(
"Event Visualization (XY)" );
454 printf(
"Visualizing Event %d \n", eventIndex );
456 fwd->Draw(
"reco.mChi2",
"",
"", 1, eventIndex );
457 int nTrk = fwd->GetSelectedRows();
458 printf(
"Event has %d Tracks \n", nTrk );
461 hFrame->Draw(
"colz");
464 if (projType == kRZSigned){
466 TLine *fst1 =
new TLine(151.75, -28.3, 151.75, 28.3);
467 fst1->SetLineWidth(2);
468 fst1->SetLineColor(12);
470 TLine *fst2 =
new TLine(165.25, -28.3, 165.25, 28.3);
471 fst2->SetLineWidth(2);
472 fst2->SetLineColor(12);
474 TLine *fst3 =
new TLine(178.75, -28.3, 178.75, 28.3);
475 fst3->SetLineWidth(2);
476 fst3->SetLineColor(12);
479 TLine *ftt1 =
new TLine(281, -60, 281, 60);
480 ftt1->SetLineWidth(2);
481 ftt1->SetLineColor(12);
483 TLine *ftt2 =
new TLine(304, -60, 304, 60);
484 ftt2->SetLineWidth(2);
485 ftt2->SetLineColor(12);
487 TLine *ftt3 =
new TLine(325, -60, 325, 60);
488 ftt3->SetLineWidth(2);
489 ftt3->SetLineColor(12);
491 TLine *ftt4 =
new TLine(348, -60, 348, 60);
492 ftt4->SetLineWidth(2);
493 ftt4->SetLineColor(12);
496 TLine *epd =
new TLine(375, -130, 375, 130);
497 epd->SetLineWidth(2);
498 epd->SetLineColor(12);
502 TBox *wcal =
new TBox( 720, -120, 735, 120 );
503 wcal->SetFillColorAlpha(4, 0.2);
505 TBox *hcal =
new TBox( 800, -120, 815, 120 );
506 hcal->SetFillColorAlpha(2, 0.2);
514 viz_points(
"FST",
"fstHits.mXYZ.fX:fstHits.mXYZ.fY:fstHits.mXYZ.fZ", kGray, eventIndex, projType,
true );
515 viz_points(
"FTT",
"fttPoints.mXYZ.fX:fttPoints.mXYZ.fY:fttPoints.mXYZ.fZ", kRed, eventIndex, projType );
517 viz_points(
"WCal Hits",
"wcalHits.mXYZ.fX:wcalHits.mXYZ.fY:wcalHits.mXYZ.fZ+705:100*wcalHits.mHit.mEnergy", kBlue, eventIndex, projType );
518 viz_points(
"HCal Hits",
"hcalHits.mXYZ.fX:hcalHits.mXYZ.fY:hcalHits.mXYZ.fZ+785:100*wcalClusters.mClu.mEnergy", kTeal, eventIndex, projType );
519 viz_points(
"WCal Clusters",
"wcalClusters.mXYZ.fX:wcalClusters.mXYZ.fY:wcalClusters.mXYZ.fZ:100*wcalClusters.mClu.mEnergy", kViolet, eventIndex, projType );
520 viz_points(
"HCal Clusters",
"hcalClusters.mXYZ.fX:hcalClusters.mXYZ.fY:hcalClusters.mXYZ.fZ:100*wcalClusters.mClu.mEnergy", kGreen, eventIndex, projType );
522 viz_seed(
"Seeds",
"seeds.mXYZ.fX:seeds.mXYZ.fY:seeds.mXYZ.fZ", eventIndex, projType );
523 viz_proj( eventIndex, projType,
false);
524 viz_points(
"Proj",
"reco.mProjections.mXYZ.fX:reco.mProjections.mXYZ.fY:reco.mProjections.mXYZ.fZ", kRed, eventIndex, projType);
530 void viz2( TString fn =
"fwdtree.root",
int view = kXY) {
532 ProjectionType pjt = (ProjectionType)view;
533 fData =
new TFile( fn );
534 fwd = (TTree*)fData->Get(
"fwd" );
536 gStyle->SetOptStat(0);
538 float canWidth = 19 * 100;
539 float canHeight = 16 * 100;
540 gCan =
new TCanvas(
"g",
"", canWidth, canHeight );
541 gCan->SetMargin( 0, 0, 0, 0);
545 padRZ =
new TPad(
"padRZ",
"", 0.0, 0.5, 0.95, 0.99 );
546 padRZ->SetMargin( .05,.01,.05,.01 );
551 padXY =
new TPad(
"padXY",
"", 0.0, 0.0, 0.5, 0.5 );
552 padXY->SetMargin( .1,.02,.05,.01 );
557 padStat =
new TPad(
"padStat",
"", 0.5, 0.0, 1.0, 0.5 );
558 padStat->SetMargin( .1,.02,.05,.01 );
559 padStat->Draw(
"same");
564 int nEvents = fwd->GetEntries();
567 for (
int iEvent = 0; iEvent < nEvents; iEvent ++ ){
569 printf(
"Event: %d\n", iEvent );
575 int nTrk = viz_event( iEvent, kRZSigned );
579 viz_event( iEvent, kXY );
589 gCan->Print( TString::Format(
"out_event%d.pdf", iEvent ) );