StRoot  1
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Groups Pages
viz.C
1 //usr/bin/env root -l -b -q $0'('$1')'; exit $?
2 #include "TFile.h"
3 #include "TH1F.h"
4 #include "TH2F.h"
5 #include "TTree.h"
6 
7 TFile * fData;
8 TTree * fwd;
9 TH2 * hFrame;
10 TCanvas *gCan;
11 TPad *padRZ, *padXY, *padStat;
12 
13 float LegendX, LegendY;
14 float lineScale = 1.5;
15 
16 enum ProjectionType { kXY, kRZ, kRZSigned, kXZ, kYZ };
17 
18 float xx( float x, float y, float z, ProjectionType proj = kRZ ){
19 
20  if ( proj == kRZ || proj == kRZSigned){
21  return z;//(TMath::ATan2( y, x ) + 2*3.1415926 )/ (2*3.14159) * 360;
22  } else if ( proj == kXY ){
23  return x;
24  } else if ( proj == kXZ ){
25  return z;
26  } else if ( proj == kYZ ){
27  return z;
28  }
29 
30  return x;
31 }
32 
33 float yy( float x, float y, float z, ProjectionType proj = kRZ ){
34 
35  if ( proj == kRZ ){
36  float r = sqrt( pow(x, 2) + pow(y, 2) );
37  return r;
38  } else if ( proj == kXY ){
39  return y;
40  } else if ( proj == kRZSigned ){
41  float r = sqrt( pow(x, 2) + pow(y, 2) );
42  if ( y == 0 ) return r;
43  r *= y / fabs(y);
44  return r;
45  } else if ( proj == kXZ ){
46  return x;
47  } else if ( proj == kYZ ){
48  return y;
49  }
50 
51  return y;
52 }
53 
54 void viz_points(const char* name, const char* cmd, int color, int eventIndex, ProjectionType projType, bool Legend = false ){
55 
56  fwd->Draw( cmd, "", "goff", 1, eventIndex );
57  int N = fwd->GetSelectedRows();
58  printf( "%s : has %d results \n", cmd, N );
59  printf( "Projection Mode : %d \n", projType );
60 
61  auto cmdX = fwd->GetV1();
62  auto cmdY = fwd->GetV2();
63  auto cmdZ = fwd->GetV3();
64  auto cmdE = fwd->GetV4();
65  if ( cmdE != nullptr ){
66  printf( "TOWERS\n" );
67  }
68  float vizX; //change from array-AGE
69  float vizY;
70 
71  TText *t = new TText(.5,.5,"Hello World !");
72  // t->SetTextAlign(22);
73  t->SetTextColor(kBlack);
74  t->SetTextFont(43);
75  t->SetTextSize(20);
76 
77  int zColorStep = 90;
78  int slc = color;
79  int zColors[50]; // fst1 fst2 fst3 ftt1 ftt2 ftt3 ftt4 epd ecal hcal
80  float zSizes[] = {2.5, 2.5, 2.0, 1.5, 1.5, 1.5, 1.5, 1.5, 2.5, 2.0, 1.5}; //first element is for hits that don't match any positions (only goes to ftt3--changing to allow all)
81  for ( int i = 0; i < 50; i++ )
82  zColors[i] = TColor::GetColorPalette(i*zColorStep % 255 );
83 
84 
85  bool lgZ = false;
86  float alpha = 0.6;
87  for ( int i = 0; i < N; i++ ){
88 
89  vizX = xx( cmdX[i], cmdY[i], cmdZ[i], projType );
90  vizY = yy( cmdX[i], cmdY[i], cmdZ[i], projType );
91  printf( "\tpoint at (%f, %f, %f) -> (%f, %f)\n", cmdX[i], cmdY[i], cmdZ[i], vizX, vizY );
92 
93  int zIndex = 0;
94  if ( fabs( cmdZ[i] - 151.75) < 2.5 ) zIndex = 1;
95  if ( fabs( cmdZ[i] - 165.25) < 2.5 ) zIndex = 2;
96  if ( fabs( cmdZ[i] - 178.75) < 2.5 ) zIndex = 3;
97 
98  //add locations of other detectors-AGE
99  //FTT--approximate locations
100  if ( fabs( cmdZ[i] - 281) < 2.5 ) zIndex = 4;
101  if ( fabs( cmdZ[i] - 304) < 2.5 ) zIndex = 5;
102  if ( fabs( cmdZ[i] - 325) < 2.5 ) zIndex = 6;
103  if ( fabs( cmdZ[i] - 348) < 2.5 ) zIndex = 7;
104  //EPD--approx.
105  if ( fabs( cmdZ[i] - 375) < 2.5 ) zIndex = 8;
106  //FCS--approx.
107  //if ( fabs( cmdZ[i] - 721) < 2.5 ) zIndex = 9; //wcal
108  //if ( fabs( cmdZ[i] - 804) < 2.5 ) zIndex = 10; //hcal
109 
110  TMarker *mk = new TMarker( vizX, vizY, 20 );
111 
112  mk->SetMarkerSize( 2.5 );
113  if (zIndex >= 1 && zIndex < 50){ //see if should be changed to zIndex < 9-AGE
114  slc = zColors[zIndex];
115  }
116  mk->SetMarkerSize( zSizes[zIndex] );
117 
118 
119 
120 
121  // mk->SetMarkerSize( (float)(zIndex) * 0.5 + 0.5 );
122 
123  alpha = 0.6;
124  if ( zIndex != 8 && (cmdE != nullptr && projType == kRZSigned) ){ //FCS for RZ
125  //mk->SetMarkerStyle( 21 ); //sets marker to a square, change to use TBox instead-AGE
126  //mk->SetMarkerSize( 0.5 + 0.5 * cmdE[i] );
127  mk->SetMarkerSize(0);
128  alpha = (cmdE[i] / 10.0);
129  if (alpha>=1) alpha = 1;
130  TBox *box = new TBox( vizX-0.05*cmdE[i], vizY-0.5, vizX, vizY+0.5 );
131  box->SetFillColor(210);
132  if ( name == "WCal Clusters" || name == "HCal CLusters" ){
133  box->SetFillColor(880);
134  mk->SetMarkerSize(1);
135  }
136  box->Draw("same");
137  }
138  if ( name == "FTT Clusters" && projType == kXY ){
139  mk->SetMarkerSize(0);
140  TLine XCluster;
141  XCluster.SetLineWidth(1);
142  XCluster.SetLineColor(9); //dark blue
143  TLine YCluster;
144  YCluster.SetLineWidth(1);
145  YCluster.SetLineColor(46); //dark red
146  float x0;
147  float x1;
148  float y0;
149  float y1;
150  if (vizX < 0){
151  x0 = -50;
152  x1 = 0;
153  } else if(vizX >= 0){
154  x0 = 0;
155  x1 = 50;
156  }
157  if (vizY < 0){
158  y0 = -50;
159  y1 = 0;
160  } else if (vizY >= 0){
161  y0 = 0;
162  y1 = 50;
163  }
164 
165  XCluster.DrawLine(vizX, y0, vizX, y1);
166  YCluster.DrawLine(x0, vizY, x1, vizY);
167 
168  }
169 
170  if ( cmdE != nullptr && (zIndex == 8 || projType != kRZSigned) ){ //EPD for RZ and EPD and FCS for XY
171  mk->SetMarkerStyle(21);
172  mk->SetMarkerSize( 0.005 * cmdE[i]);
173  }
174 
175  printf( "\tzIndex = %d -> color = %d \n", zIndex, slc );
176 
177  mk->SetMarkerColorAlpha( slc, alpha );
178  if ( zIndex >= 1 ){
179  mk->SetMarkerColorAlpha( slc, alpha );
180  lgZ = true;
181  }
182 
183  //change marker style etc. for projected points only-AGE
184  /*if( name == "Proj" ){
185  mk->SetMarkerStyle(23);
186  mk->SetMarkerColor(2);
187  mk->SetMarkerSize(1.5);
188  }*/
189 
190  mk->Draw("same");
191 
192  }
193 
194  if ( lgZ ){
195  /*for ( int i = 1; i < 4; i++){
196  TMarker *mk1 = new TMarker( LegendX, LegendY, 20 );
197  mk1->SetMarkerSize( 2.5 );
198  mk1->SetMarkerColorAlpha( zColors[i], 0.5 );
199  mk1->Draw("same");
200  t->DrawText( LegendX + 2, LegendY - 0.5, TString::Format( "%s: %d", name, i ) );
201 
202  LegendY -= 5;
203  }*/
204  if (name == "FST"){
205  for ( int i = 1; i < 4; i++ ){
206  TMarker *mk1 = new TMarker( LegendX, LegendY, 20 );
207  mk1->SetMarkerSize( 2.5 );
208  mk1->SetMarkerColorAlpha( zColors[i], 0.5 );
209  mk1->Draw("same");
210  t->DrawText( LegendX + 2, LegendY - 0.5, TString::Format( "%s: %d", name, i ) );
211 
212  LegendY -= 5;
213  }
214  } else if (name == "FTT"){
215  for ( int i = 1; i < 5; i++ ){
216  TMarker *mk1 = new TMarker( LegendX, LegendY, 20 );
217  mk1->SetMarkerSize( 2.5 );
218  mk1->SetMarkerColorAlpha( zColors[i+3], 0.5 );
219  mk1->Draw("same");
220  t->DrawText( LegendX + 2, LegendY - 0.5, TString::Format( "%s: %d", name, i ) );
221 
222  LegendY -= 5;
223  }
224  } else if (name == "FCS"){
225  for ( int i = 1; i < 3; i++ ){
226  TMarker *mk1 = new TMarker( LegendX, LegendY, 20 );
227  mk1->SetMarkerSize( 2.5 );
228  mk1->SetMarkerColorAlpha( zColors[i], 0.5 );
229  mk1->Draw("same");
230  t->DrawText( LegendX + 2, LegendY - 0.5, TString::Format( "%s: %d", name, i ) );
231 
232  LegendY -= 5;
233  }
234  }
235 
236  } else {
237  TMarker *mk1 = new TMarker( LegendX, LegendY, 20 );
238  mk1->SetMarkerSize( 2.5 );
239  mk1->SetMarkerColor( color );
240  mk1->Draw("same");
241  t->DrawText( LegendX + 2, LegendY - 0.5, TString::Format( "%s:", name ) );
242 
243  LegendY -= 5;
244  }
245 }
246 
247 //add function for seed finding-AGE
248 void viz_seed( const char* name, const char* cmd, int eventIndex, ProjectionType projType = kRZSigned){
249 
250  fwd->Draw( "reco.mChi2", "", "goff", 1, eventIndex );
251  int nTrks = fwd->GetSelectedRows();
252 
253  TLine line;
254  line.SetLineWidth(2);
255  line.SetLineColor(1);
256  TLine proj;
257  for (int i = 0; i < nTrks; i++){ //loop over number of tracks
258 
259  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 );
260  auto nHits = fwd->GetSelectedRows();
261  auto projX = fwd->GetV1();
262  auto projY = fwd->GetV2();
263  auto projZ = fwd->GetV3();
264  /*std::vector<double> projX;
265  std::vector<double> projY;
266  std::vector<double> projZ;
267 
268  for (int hit = 0; hit < nHits; ++hit) {
269  projX.push_back(fwd->GetV1()[hit]);
270  projY.push_back(fwd->GetV2()[hit]);
271  projZ.push_back(fwd->GetV3()[hit]);
272  }*/
273 
274  //select only the seeds that have same track id as track number
275  fwd->Draw( cmd, TString::Format("seeds.trackId == %d", i), "goff", 1, eventIndex );
276  //fwd->Draw( TString::Format("seeds[%d].pos.fX:seeds[%d].pos.fY:seeds[%d].pos.fZ", i, i, i), "", "goff", 1, eventIndex );
277  int numSeeds = fwd->GetSelectedRows();
278  auto newX = fwd->GetV1();
279  auto newY = fwd->GetV2();
280  auto newZ = fwd->GetV3();
281 
282  for ( int j = 0; j < numSeeds - 1; j++){
283 
284  float x0 = xx( newX[j], newY[j], newZ[j], projType );
285  float y0 = yy( newX[j], newY[j], newZ[j], projType );
286  float x1 = xx( newX[j+1], newY[j+1], newZ[j+1], projType );
287  float y1 = yy( newX[j+1], newY[j+1], newZ[j+1], projType );
288 
289  /*if ( fabs(x0 - projX[j+1]) <= 1 ){
290  line.SetLineColor(1);
291  }*/
292 
293 
294 void viz_tracks(int nTrk, int eventIndex, ProjectionType projType, bool seeds = false, int iTrack = -1, bool filter = false){
295  TLine ll;
296  ll.SetLineWidth(lineScale);
297 
298  // ll.DrawLine( 150, 10, 250, 20 );
299  // Tracks
300  int NumTracksFound = 0;
301  for ( int i = 0; i < nTrk; i++ ){
302  if ( iTrack >= 0 && i != iTrack ) continue;
303 
304  // fwd->Draw( TString::Format("reco[%d].projs.mXYZ.fX:reco[%d].projs.mXYZ.fY:reco[%d].projs.mXYZ.fZ", i, i, i), TString::Format("reco[%d].status>=1 && fabs(reco[%d].mChi2) > 0.5", i, i), "goff", 1, eventIndex );
305  fwd->Draw( TString::Format("reco[%d].mProjections.mXYZ.fX:reco[%d].mProjections.mXYZ.fY:reco[%d].mProjections.mXYZ.fZ:reco[%d].mChi2:reco[%d].mDidFitConverge:reco[%d].mCharge", i, i, i, i, i, i), "", "goff", 1, eventIndex );
306  // fwd->Draw( TString::Format("0:5:reco[%d].projs.mXYZ.fZ", i, i, i), "", "goff", 1, eventIndex );
307  auto trkX = fwd->GetV1();
308  auto trkY = fwd->GetV2();
309  auto trkZ = fwd->GetV3();
310  auto trkChi2 = fwd->GetV4();
311  auto trkConv = fwd->GetVal(4);
312  auto trkQ = fwd->GetVal(5);
313 
314  TText text;
315  text.SetTextFont(43);
316  text.SetTextSize(36);
317  if (iTrack >= 0){
318  text.DrawTextNDC( 0.05, 0.7, TString::Format( "chi2=%f", trkChi2[0] ) );
319  text.DrawTextNDC( 0.05, 0.65, TString::Format( "converge=%d", trkConv[0] ) );
320  }else {
321  // if ( trkChi2[0] > 100 ) continue;
322  }
323 
324  }
325 }
326 
327 //add function for track projection
328 void viz_proj( int eventIndex, ProjectionType projType = kRZSigned, bool markers = false ){
329 
330  //get number of tracks
331  fwd->Draw( "reco.mChi2", "", "goff", 1, eventIndex); //check if this is correct data to use to get nTrks
332  int nTrks = fwd->GetSelectedRows();
333 
334  //create line for track
335  TLine trkproj;
336  trkproj.SetLineWidth(1.5);
337  trkproj.SetLineColor(24); //light green
338 
339  //loop over each track in the event
340  for ( int i = 0; i < nTrks; i++ ){
341 
342  //get hits in i'th track
343  fwd->Draw( TString::Format("reco[%d].projs.mXYZ.fX:reco[%d].projs.mXYZ.fY:reco[%d].projs.mXYZ.fZ", i, i, i), "", "goff", 1, eventIndex );
344  auto nHits = fwd->GetSelectedRows();
345  auto projX = fwd->GetV1();
346  auto projY = fwd->GetV2();
347  auto projZ = fwd->GetV3();
348 
349 
350  //loop over hits in each track
351  for ( int j = 0; j < nHits - 1; j++ ){
352 
353  //assign the x and y positions of the track projection
354  float x0 = xx( projX[j], projY[j], projZ[j], projType );
355  float y0 = yy( projX[j], projY[j], projZ[j], projType );
356  float x1 = xx( projX[j+1], projY[j+1], projZ[j+1], projType );
357  float y1 = yy( projX[j+1], projY[j+1], projZ[j+1], projType );
358 
359  /*trkproj.SetLineColor(i+2);
360  if (i == 0 || i == 10 ){
361  trkproj.SetLineColor(1);
362  }*/
363  trkproj.DrawLine(x0, y0, x1, y1);
364  }
365 
366  //add markers
367  if (markers){
368  for ( int j = 0; j < nHits; j++ ){
369 
370  float x = xx( projX[j], projY[j], projZ[j], projType );
371  float y = yy( projX[j], projY[j], projZ[j], projType );
372 
373  TMarker *mk = new TMarker( x, y, 20);
374  mk->SetMarkerStyle(23);
375  mk->SetMarkerColor(2);
376  mk->SetMarkerSize(1.5);
377 
378  mk->Draw("same");
379  }
380  }
381  }
382 
383  if (seeds == false) return;
384 
385  for ( int i = 0; i < nTrk; i++ ){
386  if ( iTrack >= 0 && i != iTrack ) continue;
387 
388  fwd->Draw( TString::Format("reco[%d].seeds.pos.fX:reco[%d].seeds.pos.fY:reco[%d].seeds.pos.fZ", i, i, i), TString::Format("reco[%d].mDidFitConverge!=0", i), "goff", 1, eventIndex );
389  auto seedX = fwd->GetV1();
390  auto seedY = fwd->GetV2();
391  auto seedZ = fwd->GetV3();
392 
393  // printf( "Found %d seeds for track %d\n", fwd->GetSelectedRows(), i );
394  // int slc = TColor::GetColorPalette(i*100 % 255);
395  ll.SetLineColor(kGreen);
396 
397  for ( int j = 0; j < fwd->GetSelectedRows()-1; j++ ){
398 
399  float seedX1 = xx( seedX[j], seedY[j], seedZ[j], projType );
400  float seedY1 = yy( seedX[j], seedY[j], seedZ[j], projType );
401 
402  // printf( "seed(x=%f, y=%f, z=%)->(xx=%f, yy=%f)\n", seedX[j], seedY[j], seedZ[j], seedX1, seedY1 );
403 
404  float seedX2 = xx( seedX[j+1], seedY[j+1], seedZ[j+1], projType );
405  float seedY2 = yy( seedX[j+1], seedY[j+1], seedZ[j+1], projType );
406 
407  // printf( "(%f, %f) -> (%f, %f)\n", seedX1, seedY1, seedX2, seedY2 );
408  ll.DrawLine( seedX1, seedY1, seedX2, seedY2 );
409 
410  TMarker *mk1 = new TMarker( seedX1, seedY1, 20 );
411  mk1->SetMarkerSize( 2.5 );
412  mk1->SetMarkerColor(kBlue);
413  mk1->Draw("same");
414 
415  TMarker *mk2 = new TMarker( seedX2, seedY2, 20 );
416  mk2->SetMarkerSize( 2.5 );
417  mk2->SetMarkerColor(kBlue);
418  mk2->Draw("same");
419  } // end loop j
420  } // end loop i
421 
422 
423 //add function to compare lines
424 //float comp_lines()
425 
426 
427 float statTextY = 0.97;
428 void n() { statTextY -= 0.05; }
429 void viz_stats( int eventIndex ){
430  statTextY = 0.97;
431  TText text;
432  text.SetTextFont(43);
433  text.SetTextSize(36);
434 
435 
436  /*fwd->Draw( "fstX:fstY:fstZ", "", "goff", 1, eventIndex );
437  int numEpd = fwd->GetSelectedRows();
438  fwd->Draw( "fttX:fttY:fttZ", "", "goff", 1, eventIndex );
439  int numEpd = fwd->GetSelectedRows();
440  fwd->Draw( "epdX:epdY:epdZ", "", "goff", 1, eventIndex );
441  int numEpd = fwd->GetSelectedRows();
442  fwd->Draw( "fcsX:fcsY:fcsZ", "", "goff", 1, eventIndex );
443  int numEpd = fwd->GetSelectedRows();*/
444 
445  fwd->Draw( "reco.mChi2", "", "goff", 1, eventIndex );
446  int numTracks = fwd->GetSelectedRows();
447  fwd->Draw( "fst.pos.fX:fst.pos.fY:fst.pos.fZ", "", "goff", 1, eventIndex );
448  int numFst = fwd->GetSelectedRows();
449  fwd->Draw( "ftt.pos.fX:ftt.pos.fY:ftt.pos.fZ", "", "goff", 1, eventIndex );
450  int numFtt = fwd->GetSelectedRows();
451  //fwd->Draw( "EPD hits", "", "goff", 1, eventIndex );
452  //int numEpd = fwd->GetSelectedRows();
453  fwd->Draw( "wcalHits.starXYZ.fX:wcalHits.starXYZ.fY:wcalHits.starXYZ.fZ", "", "goff", 1, eventIndex );
454  int numWcalHits = fwd->GetSelectedRows();
455  fwd->Draw( "hcalHits.starXYZ.fX:hcalHits.starXYZ.fY:hcalHits.starXYZ.fZ", "", "goff", 1, eventIndex );
456  int numHcalHits = fwd->GetSelectedRows();
457  fwd->Draw( "wcalClusters.pos.fX:wcalClusters.pos.fY:wcalClusters.pos.fZ", "", "goff", 1, eventIndex );
458  int numWcal = fwd->GetSelectedRows();
459  fwd->Draw( "hcalClusters.pos.fX:hcalClusters.pos.fY:hcalClusters.pos.fZ", "", "goff", 1, eventIndex );
460  int numHcal = fwd->GetSelectedRows();
461 
462  text.DrawTextNDC( 0.05, statTextY, TString::Format("Event : %d", eventIndex) ); n();
463  text.DrawTextNDC( 0.05, statTextY, TString::Format("Tracks : %d", numTracks) ); n();
464  text.DrawTextNDC( 0.05, statTextY, TString::Format("FST Hits : %d", numFst) ); n();
465  text.DrawTextNDC( 0.05, statTextY, TString::Format("FTT Hits : %d", numFtt) ); n();
466  //text.DrawTextNDC( 0.05, statTextY, TString::Format("EPD Hits : %d", numEpd) ); n();
467  //text.DrawTextNDC( 0.05, statTextY, TString::Format("WCal Hits : %d", numWcalHits) ); n();
468  //text.DrawTextNDC( 0.05, statTextY, TString::Format("HCal Hits : %d", numHcalHits) ); n();
469  text.DrawTextNDC( 0.05, statTextY, TString::Format("WCal Clusters : %d", numWcal) ); n();
470  text.DrawTextNDC( 0.05, statTextY, TString::Format("HCal Clusters : %d", numHcal) ); n();
471 
472  fwd->Draw( "reco.mPrimaryMomentum.fX", "", "goff", 1, eventIndex );
473  text.DrawTextNDC( 0.05, statTextY, TString::Format("#Tracks : %d", fwd->GetSelectedRows()) ); n();
474 
475  fwd->Draw( "reco.mPrimaryMomentum.fX", "reco.mChi2<100", "goff", 1, eventIndex );
476  text.DrawTextNDC( 0.05, statTextY, TString::Format("#Tracks (good) : %d", fwd->GetSelectedRows()) ); n();
477 
478  fwd->Draw( "reco.mPrimaryMomentum.fX", "reco.mChi2<100 && reco.mCharge==1", "goff", 1, eventIndex );
479  text.DrawTextNDC( 0.05, statTextY, TString::Format("#Pos Tracks (good) : %d", fwd->GetSelectedRows()) ); n();
480  fwd->Draw( "reco.mPrimaryMomentum.fX", "reco.mChi2<100 && reco.mCharge==-1", "goff", 1, eventIndex );
481  text.DrawTextNDC( 0.05, statTextY, TString::Format("#Neg Tracks (good) : %d", fwd->GetSelectedRows()) ); n();
482 
483  // fwd->Draw( "seeds.trackId", "", "goff", 1, eventIndex );
484  // fwd->Draw( "nSeedTracks", "", "goff", 1, eventIndex );
485  // mTotalSeeds = fwd->GetV1()[0];
486  text.DrawTextNDC( 0.05, statTextY, TString::Format("#Seeds : %d", mTotalSeeds ) ); n();
487 }
488 
489 
490 int viz_event( int eventIndex, ProjectionType projType = kRZSigned ){
491 
492  if ( projType == kRZSigned || projType == kXZ || projType == kYZ ){
493  hFrame = new TH2F( "hFrame", ";z;R", 520, -30, 900, 260, -130, 130 );
494  hFrame->SetTitle( "Event Visualization (RZ Signed)" );
495  LegendX = 10;
496  LegendY = 60;
497  } else if ( projType == kRZ ){
498  hFrame = new TH2F( "hFrame", ";z;R", 500, 0, 900, 60, 0, 60 );
499  hFrame->SetTitle( "Event Visualization (RZ Signed)" );
500  LegendX = 10;
501  LegendY = 60;
502  } else if ( projType == kXY ){
503  hFrame = new TH2F( "hFrame", ";x;y", 5, -50, 50, 5, -50, 50 );
504  hFrame->SetTitle( "Event Visualization (XY)" );
505  LegendX = -40;
506  LegendY = 40;
507  }
508 
509  printf( "Visualizing Event %d \n", eventIndex );
510 
511  fwd->Draw( "reco.mPrimaryMomentum.fX", "", "goff", 1, eventIndex );
512  int nTrk = fwd->GetSelectedRows();
513  printf( "Event has %lld Tracks \n", nTrk );
514 
515 
516  hFrame->Draw("colz");
517 
518  viz_points( "FTT", "fttPoints.mXYZ.fX:fttPoints.mXYZ.fY:fttPoints.mXYZ.fZ", kRed, eventIndex, projType );
519  // viz_points( "FTC", "fttClusters.pos.fX:fttClusters.pos.fY:-fttClusters.pos.fZ", kGreen, eventIndex, projType, "fttClusters.mNStrips>2" );
520  viz_points( "FST", "fstHits.mXYZ.fX:fstHits.mXYZ.fY:fstHits.mXYZ.fZ", kRed, eventIndex, projType );
521  viz_points( "FCS", "wcalClusters.mXYZ.fX:wcalClusters.mXYZ.Y():wcalClusters.mXYZ.Z():wcalClusters.mClu.mEnergy", kGray, eventIndex, projType );
522 
523  TLine *fst1 = new TLine(151.75, -28.3, 151.75, 28.3);
524  fst1->SetLineWidth(2);
525  fst1->SetLineColor(12);
526  fst1->Draw("same");
527  TLine *fst2 = new TLine(165.25, -28.3, 165.25, 28.3);
528  fst2->SetLineWidth(2);
529  fst2->SetLineColor(12);
530  fst2->Draw("same");
531  TLine *fst3 = new TLine(178.75, -28.3, 178.75, 28.3);
532  fst3->SetLineWidth(2);
533  fst3->SetLineColor(12);
534  fst3->Draw("same");
535 
536 
537  viz_tracks(nTrk, eventIndex, projType, false);
538  //viz_seeds(nTrk, eventIndex, projType);
539 
540  TLine *epd = new TLine(375, -130, 375, 130);
541  epd->SetLineWidth(2);
542  epd->SetLineColor(12);
543  epd->Draw("same");
544 
545  //add tboxes for fcs
546  TBox *wcal = new TBox( 720, -120, 735, 120 );
547  wcal->SetFillColorAlpha(4, 0.2);
548  wcal->Draw("same");
549  TBox *hcal = new TBox( 800, -120, 815, 120 );
550  hcal->SetFillColorAlpha(2, 0.2);
551  hcal->Draw("same");
552 
553  }
554 
555  //viz_points( "FST", "fstX:fstY:fstZ", kGray, eventIndex, projType/*, true*/ );
556  //viz_points( "EPD", "epdX:epdY:epdZ:epdE", kBlue, eventIndex, projType/*, true*/ ); //epd hits (only in fwdtree2)-AGE
557  //viz_points( "FCS", "fcsX:fcsY:fcsZ:fcsE", kGreen, eventIndex, projType/*, true*/ );
558  viz_points( "FST", "fst.mXYZ.fX:fst.mXYZ.fY:fst.mXYZ.fZ", kGray, eventIndex, projType, true );
559  viz_points( "FTT", "ftt.mXYZ.fX:ftt.mXYZ.fY:ftt.mXYZ.fZ", kRed, eventIndex, projType );
560  // viz_points( "FTT Clusters", "fttClusters.pos.fX:fttClusters.pos.fY:fttClusters.pos.fZ", kRed, eventIndex, projType );
561  // viz_points( "WCal Hits", "wcalHits.starXYZ.fX:wcalHits.starXYZ.fY:wcalHits.starXYZ.fZ+705:100*wcalHits.energy", kBlue, eventIndex, projType );
562  // viz_points( "HCal Hits", "hcalHits.starXYZ.fX:hcalHits.starXYZ.fY:hcalHits.starXYZ.fZ+785:100*wcalClusters.mEnergy", kTeal, eventIndex, projType/*, true*/ );
563  // viz_points( "WCal Clusters", "wcalClusters.pos.fX:wcalClusters.pos.fY:wcalClusters.pos.fZ+705:100*wcalClusters.mEnergy", kViolet, eventIndex, projType/*, true*/ );
564  // viz_points( "HCal Clusters", "hcalClusters.pos.fX:hcalClusters.pos.fY:hcalClusters.pos.fZ+785:100*wcalClusters.mEnergy", kGreen, eventIndex, projType/*, true*/ ); //add fcs hits-AGE
565 
566  // viz_seed( "Se-=[eds", "seeds.pos.fX:seeds.pos.fY:seeds.pos.fZ", eventIndex, projType );
567  //viz_proj( eventIndex, projType, false);
568  //viz_points( "Proj", "reco.reco.projs.mXYZ.fX:reco.reco.projs.mXYZ.fY:reco.reco.projs.mXYZ.fZ", kRed, eventIndex, projType);
569  return nTrk;
570 }
571 
572 
573 //change to name of file being used-AGE
574 void viz( int maxEvents = 10, TString fn = "fwdtree.root", int view = kXY) {
575 
576 void viz( int mode = 0, int maxEvents = 10, TString fn = "fwdtree.root") {
577 
578  fData = new TFile( fn );
579  fwd = (TTree*)fData->Get( "fwd" );
580 
581  gStyle->SetOptStat(0);
582 
583  float canWidth = 19 * 100;
584  float canHeight = 16 * 100;
585  gCan = new TCanvas( "g", "", canWidth, canHeight );
586  gCan->SetMargin( 0, 0, 0, 0);
587  gCan->cd();
588  gCan->Draw();
589 
590  padRZ = new TPad( "padRZ", "", 0.0, 0.5, 0.95, 0.99 );
591  padRZ->SetMargin( .05,.01,.05,.01 );
592  padRZ->Draw("same");
593  padRZ->cd();
594 
595  gCan->cd();
596  padXY = new TPad( "padXY", "", 0.0, 0.0, 0.5, 0.5 );
597  padXY->SetMargin( .1,.02,.05,.01 );
598  padXY->Draw("same");
599  padXY->cd();
600 
601  gCan->cd();
602  padStat = new TPad( "padStat", "", 0.5, 0.0, 1.0, 0.5 );
603  padStat->SetMargin( .1,.02,.05,.01 );
604  padStat->Draw("same");
605  padStat->cd();
606 
607  // gPad->SetMargin(0.1, 0.05, 0.15, 0.05);
608 
609  int nEvents = fwd->GetEntries();
610  if (nEvents > maxEvents) nEvents = maxEvents;
611  // nEvents = 1;
612  for ( int iEvent = 0; iEvent < nEvents; iEvent ++ ){
613 
614  printf( "Event: %d\n", iEvent );
615  padRZ->cd();
616 
617  //TBox *wcal = new TBox( 720, -60, 735, 60 );
618  //wcal->SetFillColor(4);
619  //wcal->Draw("");
620  int nTrk = viz_event( iEvent, kRZSigned );
621 
622 
623  padXY->cd();
624  viz_event( iEvent, kXY );
625  if (nTrk > -1){
626  padRZ->Update();
627  padXY->Update();
628 
629  padStat->cd();
630  padStat->Clear();
631  // viz_stats( iEvent ); //changed to provide number of tracks as well-AGE
632  padStat->Update();
633  gCan->Update();
634  gCan->Print( TString::Format( "out_event%d.pdf", iEvent ) );
635  }
636 
637 
638  // cin.get();
639  // if (viz_event( iEvent ) > 0 )
640  // break;
641 
642  hFrame->Reset();
643  }
644 
645  if ( mode != 1 ) return;
646  // visualize the event one track at a time
647  for ( int inEvent = 0; inEvent < nEvents; inEvent++ ){
648  fwd->Draw( "reco.mPrimaryMomentum.fX", "", "goff", 1, inEvent );
649  int nTrk = fwd->GetSelectedRows();
650  printf( "Event %d has %lld Tracks \n", inEvent, nTrk );
651 
652  for ( int iTrack = 0; iTrack < nTrk; iTrack ++ ){
653 
654  printf( "Track: %d\n", iTrack );
655 
656  padRZ->cd();
657  // int nTrk = viz_event( iEvent, kRZSigned );
658  viz_event( inEvent, kRZSigned, true );
659  viz_tracks(nTrk, inEvent, kRZSigned, true, iTrack);
660  padXY->cd();
661  viz_event( inEvent, kXY, true );
662  viz_tracks(nTrk, inEvent, kXY, true, iTrack);
663  if (nTrk > -1){
664  padRZ->Update();
665  padXY->Update();
666 
667  padStat->cd();
668  padStat->Clear();
669  // viz_stats( iEvent );
670  padStat->Update();
671  gCan->Update();
672  gCan->Print( TString::Format( "out_event%d_track%d.pdf", inEvent, iTrack ) );
673  }
674  hFrame->Reset();
675  }
676  }
677 
678 }