FairRoot/PandaRoot
guiEventDisplay.C
Go to the documentation of this file.
1 #include <TGClient.h>
2 #include <TCanvas.h>
3 #include <TF1.h>
4 #include <TRandom.h>
5 #include <TGButton.h>
6 #include <TGFrame.h>
7 #include <TObjArray.h>
8 #include <TPolyLine.h>
9 #include <TRootEmbeddedCanvas.h>
10 #include <TStopwatch.h>
11 #include <RQ_OBJECT.h>
12 
14 
15 class MyMainFrame {
16 
17  RQ_OBJECT("MyMainFrame")
18 
19 
20  private:
21  TGMainFrame *fMain;
22 
23  TRootEmbeddedCanvas *fEcanvas;
24 
25  TGStatusBar *fInfoStatusBar;
26 
27  TGNumberEntryField *fPSizeEntry;
28  TGNumberEntryField *fPCenXEntry;
29  TGNumberEntryField *fPCenYEntry;
30  TGNumberEntryField *fPCenZEntry;
31 
32  TGNumberEntryField *fEventToDrawEntry;
33  TGNumberEntryField *fPointToDrawEntry;
34 
35  TStopwatch fTimer;
36 
41 
42  Int_t fDrawStation;
43  Int_t fNofStations;
44 
45  TObjArray* fRealStations;
46  TObjArray* fStations;
47 
51 
53 
55  Int_t fNofMCTracks;
56  Int_t fNofGemHits;
57  Int_t fNofGemDigis;
58 
61 
62  TFile* fSimFile;
63  TTree* fSimTree;
64  TClonesArray *fGemPointArray;
65  TClonesArray *fMCTrackArray;
66 
67  TFile* fDigiFile;
68  TTree* fDigiTree;
69  TFile* fHitsFile;
70  TTree* fHitsTree;
71  TClonesArray *fGemHitArray;
72  TClonesArray *fGemDigiArray;
73 
75 
77 
78 public:
79  MyMainFrame(const TGWindow *p,UInt_t w,UInt_t h);
80  virtual ~MyMainFrame();
81 
82  void DrawPoints();
83  void DrawDigis();
84  void DrawHitErrors();
85  void DrawHits();
86  void DoDraw();
87 
88  void ReadParameters();
89 
90  void SetDigitSchemeToDraw(Int_t itemp) {fDigitSchemeToDraw = itemp-1; DoDraw(); };
91 
92  void ReadEvent();
93  void ChangeBaseString (char* carr) { fBaseString = Form("%s",carr); };
94  void ChangeParFString (char* carr) { fParFString = Form("%s",carr); };
95 
96  void ChangePlotParams ();
97  void ChangePlotSize (char* tempD) { fPlotSize = atof(tempD); };
98  void ChangePlotCenterX (char* tempD) { fPlotCenterX = atof(tempD); };
99  void ChangePlotCenterY (char* tempD) { fPlotCenterY = atof(tempD); };
100  void ChangePlotCenterZ (char* tempD) { fPlotCenterZ = atof(tempD); };
101 
110 
113 
114  void PrevStat () {
115  if ( fDrawStation == 0 ) fDrawStation = fNofStations;
118  }
119  void NextStat () {
121  if ( fDrawStation == fNofStations ) fDrawStation = 0;
123  }
124 
125  void DoInfoStatusBar(Int_t event, Int_t x, Int_t y, TObject *sel);
126 
127  void SaveCanvas();
128 
129 };
130 
131 MyMainFrame::MyMainFrame(const TGWindow *p,UInt_t w,UInt_t h) {
132 
133  // Create a main frame
134  fSimRecoFilesRead = kFALSE;
135 
136  fMain = new TGMainFrame(p,w,h);
137 
138  ChangeBaseString("Gem_3Stations_15GeV_n1000");
139  ChangeParFString("$VMCWORKDIR/macro/params/gem_3Stations.digi.par");
140 
141  fDigitSchemeToDraw = 0;
142 
143  ReadParameters();
144 
145  fDrawStation = 0;
146  /* fNofStations = 4;
147  fStationsInnerRadius[0] = 5.0; fStationsInnerRadius[1] = 5.0; fStationsInnerRadius[2] = 5.0; fStationsInnerRadius[3] = 5.0;
148  fStationsOuterRadius[0] = 42.0; fStationsOuterRadius[1] = 42.0; fStationsOuterRadius[2] = 66.0; fStationsOuterRadius[3] = 90.0;
149  fStationsZPosition [0] = 90.0; fStationsZPosition [1] = 120.0; fStationsZPosition [2] = 150.0; fStationsZPosition [3] = 180.0;*/
150 
151  ChangePlotSize ("100.0");
152  ChangePlotCenterX ("0.0");
153  ChangePlotCenterY ("0.0");
154  ChangePlotCenterZ ("0.0");
155 
156  // Create canvas widget
157  TGHorizontalFrame *hframe = new TGHorizontalFrame(fMain,fWindowSize*1.2,fWindowSize);
158 
159  TGVerticalFrame *v1frame = new TGVerticalFrame(fMain,fWindowSize*.9,fWindowSize);
160 
161  fEcanvas = new TRootEmbeddedCanvas("Ecanvas",v1frame,fWindowSize*.8,fWindowSize*.8);
162  v1frame->AddFrame(fEcanvas, new TGLayoutHints(kLHintsLeft| kLHintsTop,
163  1,1,1,1));
164 
165  hframe->AddFrame(v1frame, new TGLayoutHints(kLHintsLeft,2,2,2,2));
166 
167 
168  TGVerticalFrame *v2frame = new TGVerticalFrame(hframe,fWindowSize*.25,fWindowSize*1);
169 
170  fScanvas = new TRootEmbeddedCanvas("Scanvas",v2frame,fWindowSize*.25,fWindowSize*.25);
171  v2frame->AddFrame(fScanvas, new TGLayoutHints(kLHintsCenterX| kLHintsTop,
172  1,1,1,1));
173 
174  TGHorizontalFrame *h2frame = new TGHorizontalFrame(v2frame,fWindowSize*.1,fWindowSize*.300);
175 
176  TGVerticalFrame *v2bframe = new TGVerticalFrame(v2frame,fWindowSize*.050,fWindowSize*.500);
177 
178  TGTextEntry *spStText = new TGTextEntry(v2bframe,fBaseString.Data());
179  v2bframe->AddFrame(spStText, new TGLayoutHints(kLHintsCenterX,5,5,3,4));
180  spStText->Connect("TextChanged(char*)","MyMainFrame",this,"ChangeBaseString(char*)");
181 
182  TGTextEntry *teParFText = new TGTextEntry(v2bframe,fParFString.Data());
183  v2bframe->AddFrame(teParFText, new TGLayoutHints(kLHintsCenterX,5,5,3,4));
184  teParFText->Connect("TextChanged(char*)","MyMainFrame",this,"ChangeParFString(char*)");
185 
186 // TGCompositeFrame* frameEventPoint = new TGCompositeFrame(v2bframe);
187 // frameEventPoint->SetLayoutManager(new TGMatrixLayout(frameEventPoint,2,3,0));
188 // v2bframe->AddFrame(frameEventPoint, new TGLayoutHints(kLHintsCenterX,5,5,3,4));
189 
190  TGHorizontalFrame *eventFrame = new TGHorizontalFrame(v2bframe,fWindowSize*.1,fWindowSize*.300);
191  v2bframe->AddFrame(eventFrame, new TGLayoutHints(kLHintsCenterX|kLHintsCenterY,2,2,2,2));
192 
193  TGTextButton *readEv = new TGTextButton(eventFrame,"&Draw event");
194  readEv->Connect("Clicked()","MyMainFrame",this,"ReadEvent()");
195  eventFrame->AddFrame(readEv, new TGLayoutHints(kLHintsCenterX,5,5,3,4));
196 
197  fEventToDrawEntry = new TGNumberEntryField(eventFrame,-1,0,
198  TGNumberFormat::kNESInteger);
199  eventFrame->AddFrame(fEventToDrawEntry, new TGLayoutHints(kLHintsCenterX,5,5,3,4));
200 
201  TGHorizontalFrame *pointFrame = new TGHorizontalFrame(v2bframe,fWindowSize*.1,fWindowSize*.300);
202  v2bframe->AddFrame(pointFrame, new TGLayoutHints(kLHintsCenterX|kLHintsCenterY,2,2,2,2));
203 
204  TGTextButton *readPnt = new TGTextButton(pointFrame,"&Draw point");
205  readPnt->Connect("Clicked()","MyMainFrame",this,"ReadPoint()");
206  pointFrame->AddFrame(readPnt, new TGLayoutHints(kLHintsCenterX,5,5,3,4));
207 
208  fPointToDrawEntry = new TGNumberEntryField(pointFrame,-1,0,
209  TGNumberFormat::kNESInteger);
210  pointFrame->AddFrame(fPointToDrawEntry, new TGLayoutHints(kLHintsCenterX,5,5,3,4));
211 
212  v2frame->AddFrame(v2bframe, new TGLayoutHints(kLHintsCenterX|kLHintsCenterY,2,2,2,2));
213 
214  TGVerticalFrame *v2cframe = new TGVerticalFrame(h2frame,fWindowSize*.050,fWindowSize*.500);
215 
216  TGTextButton *saveCanv = new TGTextButton(v2cframe,"&Save canvas");
217  saveCanv->Connect("Clicked()","MyMainFrame",this,"SaveCanvas()");
218  v2cframe->AddFrame(saveCanv, new TGLayoutHints(kLHintsCenterX,5,5,3,4));
219 
220  TGTextButton *exit = new TGTextButton(v2cframe,"&Exit",
221  "gApplication->Terminate(0)");
222  v2cframe->AddFrame(exit, new TGLayoutHints(kLHintsCenterX,5,5,3,4));
223 
224  // TGButtonGroup *digitBGroup = new TGButtonGroup(v2cframe,"Digitization layer",kVerticalFrame);
225  // v2cframe->AddFrame(digitBGroup,new TGLayoutHints(kLHintsCenterX,5,5,3,4));
226 
227  // TGRadioButton *digitButton[4];
228  // digitButton[0] = new TGRadioButton(digitBGroup,"theta strips");
229  // digitButton[1] = new TGRadioButton(digitBGroup,"theta+ strips");
230  // digitButton[2] = new TGRadioButton(digitBGroup,"theta- strips");
231  // digitButton[3] = new TGRadioButton(digitBGroup,"radial strips");
232  // digitButton[fDigitSchemeToDraw]->SetState(kButtonDown);
233  // digitBGroup->Connect("Pressed(Int_t)","MyMainFrame",this,"SetDigitSchemeToDraw(Int_t)");
234 
235  h2frame->AddFrame(v2cframe, new TGLayoutHints(kLHintsCenterX|kLHintsCenterY,2,2,2,2));
236 
237  v2frame->AddFrame(h2frame, new TGLayoutHints(kLHintsCenterX|kLHintsCenterY,2,2,2,2));
238 
239  TGGroupFrame *posizeFr = new TGGroupFrame(v2frame, "Size and positions", kVerticalFrame);
240  posizeFr->SetTitlePos(TGGroupFrame::kRight); // right aligned
241  v2frame->AddFrame(posizeFr, new TGLayoutHints(kLHintsLeft,2,2,2,2));
242 
243  posizeFr->SetLayoutManager(new TGMatrixLayout(posizeFr, 0, 2, 10));
244 
245  posizeFr->AddFrame(new TGLabel(posizeFr, new TGHotString("Size, cm")));
246  fPSizeEntry = new TGNumberEntryField(posizeFr,-1,fPlotSize,
247  TGNumberFormat::kNESRealThree);
248  posizeFr->AddFrame(fPSizeEntry, new TGLayoutHints(kLHintsCenterX,5,5,3,4));
249  fPSizeEntry->Connect("TextChanged(char*)","MyMainFrame",this,"ChangePlotSize(char*)");
250 
251  posizeFr->AddFrame(new TGLabel(posizeFr, new TGHotString("X center, cm")));
252  fPCenXEntry = new TGNumberEntryField(posizeFr,-1,fPlotCenterX,
253  TGNumberFormat::kNESRealThree);
254  posizeFr->AddFrame(fPCenXEntry, new TGLayoutHints(kLHintsCenterX,5,5,3,4));
255  fPCenXEntry->Connect("TextChanged(char*)","MyMainFrame",this,"ChangePlotCenterX(char*)");
256 
257  posizeFr->AddFrame(new TGLabel(posizeFr, new TGHotString("Y center, cm")));
258  fPCenYEntry = new TGNumberEntryField(posizeFr,-1,fPlotCenterY,
259  TGNumberFormat::kNESRealThree);
260  posizeFr->AddFrame(fPCenYEntry, new TGLayoutHints(kLHintsCenterX,5,5,3,4));
261  fPCenYEntry->Connect("TextChanged(char*)","MyMainFrame",this,"ChangePlotCenterY(char*)");
262 
263  posizeFr->AddFrame(new TGLabel(posizeFr, new TGHotString("Z center, cm")));
264  fPCenZEntry = new TGNumberEntryField(posizeFr,-1,fPlotCenterZ,
265  TGNumberFormat::kNESRealThree);
266  posizeFr->AddFrame(fPCenZEntry, new TGLayoutHints(kLHintsCenterX,5,5,3,4));
267  fPCenZEntry->Connect("TextChanged(char*)","MyMainFrame",this,"ChangePlotCenterZ(char*)");
268 
269  TGGroupFrame *horMframe = new TGGroupFrame(v2frame, "Navigation", kHorizontalFrame);
270  horMframe->SetTitlePos(TGGroupFrame::kRight); // right aligned
271  // TGHorizontalFrame *horMframe = new TGHorizontalFrame(v2frame,100,300);
272 
273  TGVerticalFrame *vHMframe = new TGVerticalFrame(horMframe,fWindowSize*.040,fWindowSize*.300);
274 
275  TGTextButton *moveUPBut = new TGTextButton(vHMframe,"UP");
276  moveUPBut->Connect("Clicked()","MyMainFrame",this,"MoveUP()");
277  moveUPBut->SetToolTipText("move up by half frame");
278  vHMframe->AddFrame(moveUPBut, new TGLayoutHints(kLHintsCenterX,5,5,5,5));
279  moveUPBut->Resize(100,50);
280  TGTextButton *moveupBut = new TGTextButton(vHMframe,"up");
281  moveupBut->Connect("Clicked()","MyMainFrame",this,"Moveup()");
282  moveupBut->SetToolTipText("move up by tenth frame");
283  vHMframe->AddFrame(moveupBut, new TGLayoutHints(kLHintsCenterX,5,5,5,5));
284 
285  TGHorizontalFrame *butVHMframe = new TGHorizontalFrame(vHMframe,fWindowSize*.040,fWindowSize*.300);
286 
287  TGTextButton *moveLEFTBut = new TGTextButton(butVHMframe,"LEFT");
288  moveLEFTBut->Connect("Clicked()","MyMainFrame",this,"MoveLEFT()");
289  moveLEFTBut->SetToolTipText("move left by half frame");
290  butVHMframe->AddFrame(moveLEFTBut, new TGLayoutHints(kLHintsCenterX,5,5,5,5));
291  TGTextButton *moveleftBut = new TGTextButton(butVHMframe,"left");
292  moveleftBut->Connect("Clicked()","MyMainFrame",this,"Moveleft()");
293  moveleftBut->SetToolTipText("move left by tenth frame");
294  butVHMframe->AddFrame(moveleftBut, new TGLayoutHints(kLHintsCenterX,5,5,5,5));
295  TGTextButton *drawBut = new TGTextButton(butVHMframe,"&Draw");
296  drawBut->Connect("Clicked()","MyMainFrame",this,"DoDraw()");
297  butVHMframe->AddFrame(drawBut, new TGLayoutHints(kLHintsCenterX,5,5,5,5));
298  TGTextButton *moverightBut = new TGTextButton(butVHMframe,"right");
299  moverightBut->Connect("Clicked()","MyMainFrame",this,"Moveright()");
300  moverightBut->SetToolTipText("move right by tenth frame");
301  butVHMframe->AddFrame(moverightBut, new TGLayoutHints(kLHintsCenterX,5,5,5,5));
302  TGTextButton *moveRIGHTBut = new TGTextButton(butVHMframe,"RIGHT");
303  moveRIGHTBut->Connect("Clicked()","MyMainFrame",this,"MoveRIGHT()");
304  moveRIGHTBut->SetToolTipText("move right by half frame");
305  butVHMframe->AddFrame(moveRIGHTBut, new TGLayoutHints(kLHintsCenterX,5,5,5,5));
306 
307  vHMframe->AddFrame(butVHMframe, new TGLayoutHints(kLHintsCenterX,0,0,0,0));
308 
309  TGTextButton *movedownBut = new TGTextButton(vHMframe,"down");
310  movedownBut->Connect("Clicked()","MyMainFrame",this,"Movedown()");
311  movedownBut->SetToolTipText("move down by tenth frame");
312  vHMframe->AddFrame(movedownBut, new TGLayoutHints(kLHintsCenterX,5,5,5,5));
313  TGTextButton *moveDOWNBut = new TGTextButton(vHMframe,"DOWN");
314  moveDOWNBut->Connect("Clicked()","MyMainFrame",this,"MoveDOWN()");
315  moveDOWNBut->SetToolTipText("move down by half frame");
316  vHMframe->AddFrame(moveDOWNBut, new TGLayoutHints(kLHintsCenterX,5,5,5,5));
317 
318  horMframe->AddFrame(vHMframe, new TGLayoutHints(kLHintsCenterX,0,0,0,0));
319 
320  TGVerticalFrame *vHM2frame = new TGVerticalFrame(horMframe,fWindowSize*.030,fWindowSize*.300);
321 
322  TGTextButton *zoominBut = new TGTextButton(vHM2frame,"Zoom in");
323  zoominBut->Connect("Clicked()","MyMainFrame",this,"ZoomIn()");
324  vHM2frame->AddFrame(zoominBut, new TGLayoutHints(kLHintsCenterX|kLHintsCenterY,5,5,5,5));
325  TGTextButton *zoomoutBut = new TGTextButton(vHM2frame,"Zoom out");
326  zoomoutBut->Connect("Clicked()","MyMainFrame",this,"ZoomOut()");
327  vHM2frame->AddFrame(zoomoutBut, new TGLayoutHints(kLHintsCenterX|kLHintsCenterY,5,5,5,5));
328 
329  TGTextButton *prevStBut = new TGTextButton(vHM2frame,"Prev stat");
330  prevStBut->Connect("Clicked()","MyMainFrame",this,"PrevStat()");
331  vHM2frame->AddFrame(prevStBut, new TGLayoutHints(kLHintsCenterX|kLHintsCenterY,5,5,5,5));
332  TGTextButton *nextStBut = new TGTextButton(vHM2frame,"Next stat");
333  nextStBut->Connect("Clicked()","MyMainFrame",this,"NextStat()");
334  vHM2frame->AddFrame(nextStBut, new TGLayoutHints(kLHintsCenterX|kLHintsCenterY,5,5,5,5));
335 
336  horMframe->AddFrame(vHM2frame, new TGLayoutHints(kLHintsCenterX|kLHintsCenterY,0,0,0,0));
337 
338  v2frame->AddFrame(horMframe, new TGLayoutHints(kLHintsCenterX,0,0,0,0));
339 
340  hframe->AddFrame(v2frame, new TGLayoutHints(kLHintsLeft,2,2,2,2));
341 
342  fMain->AddFrame(hframe, new TGLayoutHints(kLHintsLeft,2,2,2,2));
343 
344  Int_t parts[] = {5, 6, 6, 4, 4, 4, 4, 4, 15, 18, 30};
345  fInfoStatusBar = new TGStatusBar(fMain,50,10,kHorizontalFrame);
346  fInfoStatusBar->SetParts(parts,11);
347  fMain->AddFrame(fInfoStatusBar,new TGLayoutHints(kLHintsBottom | kLHintsLeft |
348  kLHintsExpandX,0,0,2,0));
349 
351  DoDraw();
352 
353  fMain->SetWindowName("Simple Example");
354  // Map all subwindows of main frame
355  fMain->MapSubwindows();
356  // Initialize the layout algorithm
357  fMain->Resize(fMain->GetDefaultSize());
358  // Map main frame
359  fMain->MapWindow();
360 }
361 //-----------------------------------------------------------------------------
362 
363 //-----------------------------------------------------------------------------
364 void MyMainFrame::DoDraw() {
365  fTimer.Start();
366 
367  TCanvas *fCanvas = fEcanvas->GetCanvas();
368 
369  fEcanvas->SetName(Form("Station %d",fDrawStation+1));
370 
371  fCanvas->Clear();
372 
373  // cout << "plot size " << fPlotSize << " at " << fPlotCenterX << " " << fPlotCenterY << " " << fPlotCenterZ << endl;
374 
375  Double_t markerSize = 2.;
376 
377  if ( fPlotSize > 1.1 ) markerSize = 1.;
378 
379  if ( fPlotSize == 0. ) fPlotSize = 0.001;
380 
385 
386  fCanvas->Range(minX,minY,maxX,maxY);
387  fCanvas->SetFillColor(0);
388  fCanvas->SetBorderSize(0);
389  fCanvas->SetBorderMode(0);
390  fCanvas->SetFrameFillColor(0);
391  fCanvas->SetGrid(0,0);
392  fCanvas->SetLogy(0);
393 
394  TEllipse* outerRim = new TEllipse(0.,0.,fStationsOuterRadius[fDrawStation],fStationsOuterRadius[fDrawStation]);
395  outerRim->Draw();
396 
397 
398  if ( fSimRecoFilesRead ) {
399  // cout << "TRYING TO DRAW !!!" << endl;
400  DrawHitErrors();
401  DrawDigis();
402  DrawPoints();
403  DrawHits();
404  }
405  fInfoStatusBar->SetText(Form("Station %d",fDrawStation+1),0);
406 
407  TEllipse* innerRim = new TEllipse(0.,0.,fStationsInnerRadius[fDrawStation],fStationsInnerRadius[fDrawStation]);
408  innerRim->SetFillStyle(0);
409  innerRim->Draw();
410 
411  TLatex* tx = new TLatex(.2*minX+.8*maxX,.05*minY+.95*maxY,Form("Station #%d",fDrawStation+1)); tx->SetTextSize(0.03); tx->Draw();
412  Double_t sizeScale = TMath::Ceil(TMath::Log10(fPlotSize));
413  TLine* scale = new TLine(.15*minX+.85*maxX-10**(sizeScale-2),.07*minY+.93*maxY,.15*minX+.85*maxX,.07*minY+.93*maxY);
414  TLatex* ts = new TLatex(.2*minX+.8*maxX,.1*minY+.9*maxY,Form("%.2f cm",10**(sizeScale-2))); ts->SetTextSize(0.03); ts->Draw();
415  scale->SetLineWidth(2);
416  scale->Draw();
417 
418  // TLatex* tc = new TLatex(.2*minX+.8*maxX,.15*minY+.85*maxY,Form("%d channels",nofStrips)); tc->SetTextSize(0.03); tc->Draw();
419 
420  fCanvas->Connect("ProcessedEvent(Int_t,Int_t,Int_t,TObject*)",
421  "MyMainFrame", this,"DoInfoStatusBar(Int_t,Int_t,Int_t,TObject*)");
422  fCanvas->cd();
423  fCanvas->Update();
424 
425  // cout << " DoDraw() END --> time = " << fTimer.RealTime() << endl;
426 }
427 //-----------------------------------------------------------------------------
428 
429 //-----------------------------------------------------------------------------
431  Double_t markerSize = 2.;
432  if ( fPlotSize > 1.1 ) markerSize = 1.;
433  Int_t markerColor = 1;
434 
435  PndGemMCPoint* pointToDraw;
436  for ( Int_t ipoint = 0 ; ipoint < fNofGemPoints ; ipoint++ ) {
437  markerColor = 1;
438 
439  pointToDraw = (PndGemMCPoint*)fGemPointArray->At(ipoint);
440 
441  //return stationNr*256+sensorNr*16+segmentNr;
442 
443  // TString stationIdentifier = pointToDraw->GetDetName();
444  Int_t stationNr = pointToDraw->GetSensorId();
445  Int_t segmentNr = stationNr%16;
446  Int_t sensorNr = (stationNr/16)%16;
447  stationNr = stationNr/256;
448  // cout << "point at " << pointToDraw->GetZ() << ", sid = " << pointToDraw->GetSensorId() << " : " << stationNr << " / " << sensorNr << " / " << segmentNr << endl;
449  // if ( !stationIdentifier.Contains(Form("Disk%d",fDrawStation+1)) ) continue;
450  if ( stationNr != fDrawStation+1 ) continue;
451 
452  TMarker* pointCenter = new TMarker(pointToDraw->GetX(),pointToDraw->GetY(),20);
453  pointCenter->SetUniqueID(ipoint);
454  // cout << "set uid to " << ipoint << endl;
455 
456  // if ( stationIdentifier.Contains("Gem1") ) markerColor = 3;
457  // if ( stationIdentifier.Contains("Pad") ) markerColor = 2;
458  // if ( stationIdentifier.Contains("Gem6") ) markerColor = 4;
459  if ( sensorNr == 1 ) markerColor = 3;
460  if ( sensorNr == 2 ) markerColor = 4;
461 
462  pointCenter->SetMarkerColor(markerColor);
463  pointCenter->Draw();
464 
465  // if ( stationIdentifier.Contains("Pad") ) {
466  if ( sensorNr == 2 ) {
467  PndMCTrack* trackSel = (PndMCTrack*)fMCTrackArray->At(pointToDraw->GetTrackID());
468  TVector3 startVertex = trackSel->GetStartVertex();
469 
470  Int_t textColor = 2;
471  if ( startVertex.Mag() < 0.001 ) textColor = 3;
472 
473  TPaveText* trackNoText = new TPaveText(pointToDraw->GetX(),pointToDraw->GetY(),
474  pointToDraw->GetX(),pointToDraw->GetY());
475  TText* textNumber = trackNoText->AddText(Form("%d",pointToDraw->GetTrackID()));
476 
477  // trackNoText->AddText("center");
478  textNumber->SetTextSize(0.05);
479  textNumber->SetTextColor(textColor);
480  trackNoText->Draw();
481 
482  Double_t posY = pointToDraw->GetY();
483 
484  TPaveText* trackPdgText = new TPaveText(pointToDraw->GetX(),posY-fPlotSize/20.,
485  pointToDraw->GetX(),posY-fPlotSize/20.);
486 
487  trackPdgText->AddText(Form("%d",trackSel->GetPdgCode()));
488  trackPdgText->SetTextSize(0.02);
489  trackPdgText->SetTextColor(textColor);
490  trackPdgText->Draw();
491 
492  }
493 
494  }
495 }
496 //-----------------------------------------------------------------------------
497 
498 //-----------------------------------------------------------------------------
500  PndGemDigi* digiToDraw;
501  PndGemStation* digiStation;
502  PndGemSensor* digiSensor;
503  Int_t digiStationNr ;
504  Int_t digiSensorNr ;
505  Int_t digiSide ;
506  Int_t channelNumber ;
507 
508  for ( Int_t idigi = 0 ; idigi < fNofGemDigis ; idigi++ ) {
509  // cout << "drawing digi " << idigi << endl;
510 
511  // if ( idigi < fNofGemDigis ) {
512  digiToDraw = (PndGemDigi*)fGemDigiArray->At(idigi);
513  digiStationNr = digiToDraw->GetStationNr();
514  digiSensorNr = digiToDraw->GetSensorNr();
515  digiSide = digiToDraw->GetSide();
516  channelNumber = digiToDraw->GetChannelNr();
517  /* }
518  else {
519  if ( idigi < fNofGemDigis+4 ) {
520  digiStationNr = 1;
521  digiSensorNr = 1+(idigi-fNofGemDigis)/2;
522  digiSide = (idigi-fNofGemDigis)%2;
523  channelNumber = 1;
524  }
525  else {
526  digiStationNr = 1;
527  digiSensorNr = 1+(idigi-4-fNofGemDigis)/2;
528  digiSide = (idigi-4-fNofGemDigis)%2;
529  channelNumber = 1047;
530  }
531  }*/
532 
533  // cout << " digi is in station " << digiStationNr << endl;
534  if ( digiStationNr != fDrawStation+1 ) continue;
535  // cout << " digi is in sensor " << flush << digiSensorNr << endl;
536  digiStation = (PndGemStation*)fStations->At(fDrawStation);
537  digiSensor = (PndGemSensor*) digiStation->GetSensorByNr(digiSensorNr);
538  // digiSensor->Print();
539 
540  if ( digiSensor->GetStripAngle(digiSide) > 89. ) {
541  // cout << "to draw ellipse strip" << endl;
542  Double_t rRadius = digiSensor->GetInnerRadius() + channelNumber*digiSensor->GetPitch(digiSide);
543  TEllipse* rStrip = new TEllipse(0.,0.,rRadius,rRadius);
544  rStrip->SetFillStyle(0);
545  rStrip->SetLineColor(2);
546  rStrip->Draw("");
547  Double_t lRadius = digiSensor->GetInnerRadius() + (channelNumber-1)*digiSensor->GetPitch(digiSide);
548  TEllipse* lStrip = new TEllipse(0.,0.,lRadius,lRadius);
549  lStrip->SetFillStyle(0);
550  lStrip->SetLineColor(2);
551  lStrip->Draw("");
552 
553  }
554  else {
555  // cout << "to draw radial strip" << endl;
556  Double_t deltaTheta = TMath::DegToRad()*digiSensor->GetStripAngle(digiSide);
557  Double_t innerPStripPitch = digiSensor->GetPitch(digiSide);
558 
559  // Double_t innerCirc = digiSensor->GetInnerRadius()*2.*TMath::Pi();
560  Int_t nofStrips = (digiSide?digiSensor->GetNChannelsBack():digiSensor->GetNChannelsFront());
561 
562  // if ( digiSensor->GetStripAngle(digiSide) == 0. ) cout << "channel number = " << channelNumber << endl;
563  Double_t radialStripSpan = TMath::ATan(digiSensor->GetPitch(digiSide)/digiSensor->GetInnerRadius());
564 
565  // Double_t channelTheta = (channelNumber-1) * 2.*TMath::Pi()/((Double_t)(nofStrips));
566  Double_t channelTheta = (channelNumber-1) * radialStripSpan;//2.*TMath::Pi()/((Double_t)(nofStrips));
567  Double_t cosCT = TMath::Cos(channelTheta);
568  Double_t sinCT = TMath::Sin(channelTheta);
569 
570  // Double_t radialStripSpan = 2.*TMath::Pi()/((Double_t)(nofStrips));
571  Double_t cosRSS = TMath::Cos(radialStripSpan);
572  Double_t sinRSS = TMath::Sin(radialStripSpan);
573 
574  Double_t xBot = 0;
575  Double_t xTop = TMath::Sin(deltaTheta)*digiSensor->GetOuterRadius();
576  Double_t yBot = digiSensor->GetInnerRadius();
577  Double_t yTop = TMath::Cos(deltaTheta)*digiSensor->GetOuterRadius();
578 
579  Double_t xpstr[5];
580  Double_t ypstr[5];
581 
582  xpstr[0] = xBot*cosCT+yBot*sinCT;
583  ypstr[0] =-xBot*sinCT+yBot*cosCT;
584  xpstr[1] = xTop*cosCT+yTop*sinCT;
585  ypstr[1] =-xTop*sinCT+yTop*cosCT;
586 
587  xpstr[2] = xpstr[1]*cosRSS+ypstr[1]*sinRSS;
588  ypstr[2] =-xpstr[1]*sinRSS+ypstr[1]*cosRSS;
589  xpstr[3] = xpstr[0]*cosRSS+ypstr[0]*sinRSS;
590  ypstr[3] =-xpstr[0]*sinRSS+ypstr[0]*cosRSS;
591  xpstr[4] = xpstr[0];
592  ypstr[4] = ypstr[0];
593 
594  Int_t colorCode = 4;
595  if ( digiSensor->GetStripAngle(digiSide) > 0. ) {
596  colorCode = 1;
597  }
598  if ( digiSensor->GetStripAngle(digiSide) < 0. ) {
599  colorCode = 6;
600  }
601 
602  TPolyLine* strip = new TPolyLine(5,xpstr,ypstr);
603  strip->SetUniqueID(666666);
604  // cout << "this strip has id = " << strip->GetUniqueID() << endl;
605  strip->SetLineWidth(2);
606  strip->SetLineColor(colorCode);
607  strip->SetFillColor(colorCode);
608  strip->Draw("");
609 
610  }
611  // cout << "done" << endl;
612  }
613 }
614 //-----------------------------------------------------------------------------
615 
616 //-----------------------------------------------------------------------------
618  Double_t markerSize = 2.;
619  if ( fPlotSize > 1.1 ) markerSize = 1.;
620  Int_t markerColor = 1;
621  Int_t markerStyle = 29;
622 
623  PndGemHit* hitToDraw;
624  for ( Int_t ihit = 0 ; ihit < fNofGemHits ; ihit++ ) {
625  markerColor = 1;
626  markerStyle = 29;
627  markerSize = 3.;
628  if ( fPlotSize > 1.1 ) markerSize = 1.5;
629 
630  hitToDraw = (PndGemHit*)fGemHitArray->At(ihit);
631 
632  Int_t hitStationNr = hitToDraw->GetStationNr();
633 
634  if ( hitStationNr != fDrawStation+1 ) continue;
635 
636  Double_t hitX = hitToDraw->GetX();
637  Double_t hitY = hitToDraw->GetY();
638  TMarker* hitCenter = new TMarker(hitX,hitY,markerStyle);
639  if ( hitToDraw->GetRefIndex() >= 0 ) {
640  hitCenter->SetUniqueID(hitToDraw->GetRefIndex());
641  hitCenter->SetMarkerColor(markerColor);
642  hitCenter->SetMarkerSize(markerSize);
643  }
644  else {
645  hitCenter->SetUniqueID(666666);
646  hitCenter->SetMarkerColor(2);
647  hitCenter->SetMarkerSize(markerSize);
648  }
649 
650  hitCenter->Draw();
651 
652  }
653 }
654 //-----------------------------------------------------------------------------
655 
656 //-----------------------------------------------------------------------------
658  Double_t markerSize = 2.;
659  if ( fPlotSize > 1.1 ) markerSize = 1.;
660  Int_t markerColor = 13;
661  Int_t markerStyle = 29;
662 
663  PndGemHit* hitToDraw;
664  for ( Int_t ihit = 0 ; ihit < fNofGemHits ; ihit++ ) {
665  markerColor = 11;
666 
667  hitToDraw = (PndGemHit*)fGemHitArray->At(ihit);
668 
669  Int_t hitStationNr = hitToDraw->GetStationNr();
670 
671  if ( hitStationNr != fDrawStation+1 ) continue;
672 
673  Double_t hitX = hitToDraw->GetX();
674  Double_t hitY = hitToDraw->GetY();
675 
676  Double_t errRValue = hitToDraw->GetDr()*TMath::Sqrt(3.);
677  Double_t errPValue = hitToDraw->GetDp()*TMath::Sqrt(3.);
678  // Double_t phiAValue = 0.;
679  Double_t phiAValue = TMath::ATan(hitX/hitY);
680  if ( hitY < 0 ) phiAValue += TMath::Pi();
681  else if ( hitX < 0 ) phiAValue += 2.*TMath::Pi();
682 
683  Double_t cosPhi = TMath::Cos(phiAValue);
684  Double_t sinPhi = TMath::Sin(phiAValue);
685 
686  Double_t xErr[5], yErr[5];
687  xErr[0] = hitX-errPValue*cosPhi+errRValue*sinPhi; yErr[0] = hitY+errPValue*sinPhi+errRValue*cosPhi;
688  xErr[1] = hitX+errPValue*cosPhi+errRValue*sinPhi; yErr[1] = hitY-errPValue*sinPhi+errRValue*cosPhi;
689  xErr[2] = hitX+errPValue*cosPhi-errRValue*sinPhi; yErr[2] = hitY-errPValue*sinPhi-errRValue*cosPhi;
690  xErr[3] = hitX-errPValue*cosPhi-errRValue*sinPhi; yErr[3] = hitY+errPValue*sinPhi-errRValue*cosPhi;
691  xErr[4] = xErr[0]; yErr[4] = yErr[0];
692 
693  TPolyLine* errorBox = new TPolyLine(5,xErr,yErr);
694  if ( hitToDraw->GetRefIndex() > 0 )
695  errorBox->SetUniqueID(hitToDraw->GetRefIndex());
696  else
697  errorBox->SetUniqueID(666666);
698 
699  errorBox->SetLineWidth(0);
700  errorBox->SetLineColor(markerColor);
701  errorBox->SetFillColor(markerColor);
702  errorBox->Draw("");
703 
704  }
705 }
706 //-----------------------------------------------------------------------------
707 
708 //-----------------------------------------------------------------------------
710  // cout << "problem here?" << endl;
712  // cout << fPSizeEntry << endl;
713  // cout << "plot size " << fPlotSize << " at " << fPlotCenterX << " " << fPlotCenterY << " " << fPlotCenterZ << endl;
714  TString tempString = Form("%1.3f",(Float_t)fPlotSize);
715  fPSizeEntry->SetText(tempString.Data());
716  tempString = Form("%1.3f",(Float_t)fPlotCenterX);
717  fPCenXEntry->SetText(tempString.Data());
718  tempString = Form("%1.3f",(Float_t)fPlotCenterY);
719  fPCenYEntry->SetText(tempString.Data());
720  tempString = Form("%1.3f",(Float_t)fPlotCenterZ);
721  fPCenZEntry->SetText(tempString.Data());
722  // cout << "seems so" << endl;
723 }
724 //-----------------------------------------------------------------------------
725 
726 //-----------------------------------------------------------------------------
728  TCanvas *fCanvas = fEcanvas->GetCanvas();
729 
730  TString saveToFile = "outputFile.gif";
731  cout << "will save canvas as \"" << saveToFile.Data() << "\"" << endl;
732 
733  fCanvas->SaveAs(saveToFile.Data());
734 }
735 //-----------------------------------------------------------------------------
736 
737 //-----------------------------------------------------------------------------
738 void MyMainFrame::ReadPoint() {
739  Int_t iPoint = fPointToDrawEntry->GetIntNumber();
740 
741  if ( iPoint >= fNofGemPoints ) { cout << "last point reached" << endl; return; }
742 
744 
745  fPlotSize = 0.5;
746  fPlotCenterX = fGemPoint->GetX();
747  fPlotCenterY = fGemPoint->GetY();
748  fPlotCenterZ = fGemPoint->GetZ();
749 
750  TString stationIdentifier = fGemPoint->GetDetName();
751  stationIdentifier.Remove(stationIdentifier.Last('/'),stationIdentifier.Length());
752  stationIdentifier.Remove(0,stationIdentifier.Last('/')+1);
753  stationIdentifier.Remove(0,8);
754  stationIdentifier.Remove(1,9);
755 
756  fDrawStation = stationIdentifier.Atoi()-1;
757 
758  /* cout << "POINT #" << iPoint << " at ("
759  << fPlotCenterX << ","
760  << fPlotCenterY << ","
761  << fPlotCenterZ << ") in \""
762  << fGemPoint->GetDetName() << "\" -> " << stationIdentifier.Data() << endl;
763  */
764 
766 
767  DoDraw();
768 
769  TString tempString = Form("%d",iPoint+1);
770  fPointToDrawEntry->SetText(tempString.Data());
771 
772 }
773 //-----------------------------------------------------------------------------
774 
775 //-----------------------------------------------------------------------------
777  if ( !fSimRecoFilesRead ) {
778  fSimFile = TFile::Open(Form("%s.root",fBaseString.Data()));
779 
780  if ( !fSimFile )
781  return;
782 
783  cout << "simulation file \"" << fSimFile->GetName() << "\" loaded" << endl;
784  fSimTree = (TTree*) fSimFile->Get("pndsim");
785 
786  fGemPointArray = new TClonesArray("PndGemMCPoint");
787  fSimTree->SetBranchAddress("GEMPoint",&fGemPointArray) ;
788 
789  fMCTrackArray = new TClonesArray("PndMCTrack");
790  fSimTree->SetBranchAddress("MCTrack",&fMCTrackArray) ;
791 
792  fDigiFile = TFile::Open(Form("%s_digi.root",fBaseString.Data()));
793  fHitsFile = TFile::Open(Form("%s_hits.root",fBaseString.Data()));
794 
795  if ( !fDigiFile || !fHitsFile )
796  return;
797 
798  cout << "digi file \"" << fDigiFile->GetName() << "\" loaded" << endl;
799  fDigiTree = (TTree*) fDigiFile->Get("pndsim");
800  fGemDigiArray = new TClonesArray("PndGemDigi");
801  fDigiTree->SetBranchAddress("GEMDigi",&fGemDigiArray) ;
802 
803  cout << "hits file \"" << fHitsFile->GetName() << "\" loaded" << endl;
804  fHitsTree = (TTree*) fHitsFile->Get("pndsim");
805  fGemHitArray = new TClonesArray("PndGemHit");
806  fHitsTree->SetBranchAddress("GEMHit",&fGemHitArray) ;
807 
808  fSimRecoFilesRead = kTRUE;
809  }
810 
811  Int_t iEvent = fEventToDrawEntry->GetIntNumber();
812 
813  fSimTree->GetEntry(iEvent);
814  fDigiTree->GetEntry(iEvent);
815  fHitsTree->GetEntry(iEvent);
816 
817  fNofGemPoints = fGemPointArray->GetEntriesFast();
818  fNofMCTracks = fMCTrackArray ->GetEntriesFast();
819  fNofGemHits = fGemHitArray ->GetEntriesFast();
820  fNofGemDigis = fGemDigiArray ->GetEntriesFast();
821 
822  Int_t falseHits = 0;
823  PndGemHit* hitToDraw;
824  for ( Int_t ihit = 0 ; ihit < fNofGemHits ; ihit++ ) {
825  hitToDraw = (PndGemHit*)fGemHitArray->At(ihit);
826  if ( hitToDraw->GetRefIndex() == -1 )
827  falseHits ++;
828 // cout << "GOT FALSE HIT" << endl;
829  }
830 
831  cout << " --> Event #" << iEvent << ": "
832  << fNofGemPoints << " points, "
833  << fNofMCTracks << " MCtracks, "
834  << fNofGemHits << " hits, "
835  << fNofGemDigis << " digis. # of false hits: " << falseHits << endl;
836 
837 
838  TString tempString = Form("%d",iEvent+1);
839  fEventToDrawEntry->SetText(tempString.Data());
840 
841  DoDraw();
842 }
843 //-----------------------------------------------------------------------------
844 
845 //-----------------------------------------------------------------------------
847  fStations = new TObjArray(10);
848  fRealStations = new TObjArray(10);
849 
850  TString dir = getenv("VMCWORKDIR");
851  TString geoFileName = fParFString.Data();
852  geoFileName.ReplaceAll("$VMCWORKDIR",dir.Data());
853 
854  ifstream fin(geoFileName.Data());
855 
856  string dummyText; //dummy text
857 
858  if(!fin) { cout << "sorry, no file \"" << geoFileName.Data() << "\"" << endl; return; }
859 
860  TString check;
861 
862  do {
863  getline(fin,dummyText);
864  }
865  while ( dummyText.find('#') != -1 );
866  getline(fin,dummyText);
867  // cout << "finished reading the beginning" << endl;
868  Double_t parameters[1000];
869  Int_t nofParameters = 0;
870 
871  TString bufNumber;
872 
873  while ( fin ) {
874  getline(fin,dummyText);
875  if ( dummyText.find("TrackFinder") != -1 ) break;
876  // cout << "reading " << dummyText << endl;
877  dummyText.replace(0,dummyText.find_first_not_of(' '),"");
878  // cout << "now it is " << dummyText << endl;
879  while ( dummyText.find(',') != -1 ) {
880  parameters[nofParameters++] = atof(dummyText.c_str());
881  // cout << "parameter[" << nofParameters-1 << "] = " << parameters[nofParameters-1] << endl;
882  dummyText.replace(0,dummyText.find(',')+1,"");
883  // cout << " and it is " << dummyText << endl;
884  }
885  if ( atof(dummyText.c_str()) != 0. )
886  parameters[nofParameters++] = atof(dummyText.c_str());
887  // cout << " --> " << nofParameters << " parameters" << endl;
888  }
889  //cout << "parameter[" << nofParameters-1 << "] = " << parameters[nofParameters-1] << endl;
890  fin.close();
891 
892  Int_t arrayIndex = 0;
893 
894  Int_t stationNr = 0;
895  TString stationName = "";
896  Int_t nofSensors = 0;
897  Int_t sensorNr = 0;
898  TString sensorName = "";
899  PndGemStation* station = NULL;
900  PndGemSensor* sensor = NULL;
901 
902  PndGemStation* realStation = NULL;
903  PndGemSensor* realSensor = NULL;
904 
905 
906  while ( arrayIndex < nofParameters ) {
907  stationNr = (Int_t)parameters[arrayIndex+0];
908  stationName = Form("Gem_Station_%d",stationNr);
909 
910  station = new PndGemStation(stationName.Data(), stationNr, parameters[arrayIndex+1], TMath::Pi()*parameters[arrayIndex+2]/180. );
911  realStation = new PndGemStation(stationName.Data(), stationNr, parameters[arrayIndex+1], TMath::Pi()*parameters[arrayIndex+2]/180. );
912 
913  fStationsZPosition [stationNr-1] = station->GetZ();
914  cout << "ADDING STATION AT " << station->GetZ() << endl;
915  fStations->Add(station);
916  fRealStations->Add(realStation);
917 
918  arrayIndex += 4;
919 
920  nofSensors = (Int_t)parameters[arrayIndex-1];
921 
922  for ( Int_t isec = 0 ; isec < nofSensors ; isec++ ) {
923  if ( isec == 0 ) {
924  fStationsInnerRadius[stationNr-1] = parameters[arrayIndex+ 6];
925  fStationsOuterRadius[stationNr-1] = parameters[arrayIndex+ 7];
926  }
927 
928  sensorNr = (Int_t)parameters[arrayIndex+0];
929  sensorName = Form("Gem_Disk%d_Gem%s_Sensor_kapton",stationNr,(sensorNr==1?"1":"6"));
930 
931  realSensor = new PndGemSensor(sensorName.Data(), stationNr, sensorNr, (Int_t)parameters[arrayIndex+1],
932  parameters[arrayIndex+ 2], parameters[arrayIndex+ 3], parameters[arrayIndex+ 4],
933  -TMath::Pi()*parameters[arrayIndex+ 5]/180.,
934  parameters[arrayIndex+ 6], parameters[arrayIndex+ 7],
935  parameters[arrayIndex+ 8],
936  parameters[arrayIndex+ 9], parameters[arrayIndex+10],
937  parameters[arrayIndex+11], parameters[arrayIndex+12]);
938 
939  for ( Int_t itemp = 0 ; itemp < 2 ; itemp++ ) {
940  if ( TMath::Abs(parameters[arrayIndex+ 9+itemp]) < 1. ||
941  TMath::Abs(parameters[arrayIndex+ 9+itemp]) > 89. )
942  continue;
943 
944  Double_t c = TMath::Cos((180.-parameters[arrayIndex+ 9+itemp])*TMath::DegToRad());
945  Double_t i = parameters[arrayIndex+ 6];
946  Double_t r = parameters[arrayIndex+ 7];
947  Double_t m = i*c+TMath::Sqrt(i*i*c*c-i*i+r*r);
948 
949  Double_t b = TMath::ACos((i*i+r*r-m*m)/(2.*i*r))*TMath::RadToDeg();
950 
951  if ( parameters[arrayIndex+ 9+itemp] > 0. ) parameters[arrayIndex+ 9+itemp] = b;
952  if ( parameters[arrayIndex+ 9+itemp] < 0. ) parameters[arrayIndex+ 9+itemp] = -b;
953 
954  cout << "angle = " << parameters[arrayIndex+ 9+itemp] << endl;
955  }
956 
957  sensor = new PndGemSensor(sensorName.Data(), stationNr, sensorNr, (Int_t)parameters[arrayIndex+1],
958  parameters[arrayIndex+ 2], parameters[arrayIndex+ 3], parameters[arrayIndex+ 4],
959  -TMath::Pi()*parameters[arrayIndex+ 5]/180.,
960  parameters[arrayIndex+ 6], parameters[arrayIndex+ 7],
961  parameters[arrayIndex+ 8],
962  parameters[arrayIndex+ 9], parameters[arrayIndex+10],
963  parameters[arrayIndex+11], parameters[arrayIndex+12]);
964 
965  station->AddSensor(sensor);
966  realStation->AddSensor(realSensor);
967 
968  arrayIndex+=13;
969  }
970  }
971  fNofStations = fStations->GetEntries();
972  cout << "Made " << fNofStations << " stations." << endl;
973 }
974 //-----------------------------------------------------------------------------
975 
976 //-----------------------------------------------------------------------------
977 void MyMainFrame::DoInfoStatusBar(Int_t event, Int_t x, Int_t y,
978  TObject *sel) {
979  TString selName = sel->GetName();
980  TCanvas *fCanvas = fEcanvas->GetCanvas();
981  // cout << "cursor at " << fCanvas->AbsPixeltoX(x) << " " << fCanvas->AbsPixeltoY(y) << endl;
982 
983  Double_t xReal = fCanvas->AbsPixeltoX(x);
984  Double_t yReal = fCanvas->AbsPixeltoY(y);
985 
986  TString colorName[2][2] = {"blue","red","green","yellow"};
987 
988  if (event == kMouseMotion){
989  // cout << "being at " << selName.Data() << " " << sel->GetUniqueID() << endl;
990  fInfoStatusBar->SetText(Form("%.6f",xReal),1);
991  fInfoStatusBar->SetText(Form("%.6f",yReal),2);
992 
993  // cout << "it is " << selName.Data() << " with id = " << sel->GetUniqueID() << endl;
994 
995  if ( ( selName.Contains("TMarker") || selName.Contains("TPolyLine") ) && sel->GetUniqueID()!= 666666 ) {
996  cout << "it is " << selName.Data() << " with id = " << sel->GetUniqueID() << endl;
997  fInfoStatusBar->SetText(Form("%d",sel->GetUniqueID()),7);
998  PndGemMCPoint* pointSel = (PndGemMCPoint*)fGemPointArray->At(sel->GetUniqueID());
999  cout << "pointSel at " << pointSel->GetX() << " " << pointSel->GetY() << " " << pointSel->GetZ() << endl;
1000  fInfoStatusBar->SetText(Form("pos: (%.4f,%.4f,%.4f)",
1001  pointSel->GetX(),
1002  pointSel->GetY(),
1003  pointSel->GetZ()),8);
1004  Double_t px = pointSel->GetPx();
1005  Double_t py = pointSel->GetPy();
1006  Double_t pz = pointSel->GetPz();
1007  fInfoStatusBar->SetText(Form("mom: (%.4f,%.4f,%.4f) -> %.4f",
1008  px,py,pz,
1009  TMath::Sqrt(px*px+py*py+pz*pz)),9);
1010  PndMCTrack* trackSel = (PndMCTrack*)fMCTrackArray->At(pointSel->GetTrackID());
1011  TVector3 startVertex = trackSel->GetStartVertex();
1012  TVector3 startMomentum = trackSel->GetMomentum();
1013  px = startMomentum.X();
1014  py = startMomentum.Y();
1015  pz = startMomentum.Z();
1016 
1017  fInfoStatusBar->SetText(Form("%d from (%.2f,%.2f,%.2f), mom: (%.2f,%.2f,%.2f)-> %.4f",
1018  trackSel->GetPdgCode(),startVertex.X(),startVertex.Y(),startVertex.Z(),
1019  px,py,pz,
1020  TMath::Sqrt(px*px+py*py+pz*pz)),10);
1021  }
1022  else {
1023  fInfoStatusBar->SetText("",7);
1024  fInfoStatusBar->SetText("",8);
1025  fInfoStatusBar->SetText("",9);
1026  fInfoStatusBar->SetText("",10);
1027  }
1028 
1029  PndGemStation* digiStation;
1030  PndGemSensor* digiSensor;
1031  digiStation = (PndGemStation*)fRealStations->At(fDrawStation);
1032 
1033  for ( Int_t isens = 0 ; isens < digiStation->GetNSensors() ; isens++ ) {
1034  digiSensor = (PndGemSensor*) digiStation->GetSensorByNr(isens+1);
1035  for ( Int_t iside = 0 ; iside < 2 ; iside++ ) {
1036  Int_t channelNumber = digiSensor->GetChannel(xReal,yReal,iside);
1037  fInfoStatusBar->SetText(Form("%d",channelNumber),3+isens*2+iside);
1038  TGCompositeFrame* barPart = fInfoStatusBar->GetBarPart(3+isens*2+iside);
1039 
1040  Pixel_t colorPix;
1041  if ( channelNumber == - 1 ) {
1042  gClient->GetColorByName("grey",colorPix);
1043  barPart->SetBackgroundColor(colorPix);
1044  }
1045  else {
1046  gClient->GetColorByName(colorName[isens][iside].Data(),colorPix);
1047  barPart->SetBackgroundColor(colorPix);
1048 // gClient->GetColorByName("red",colorPix);
1049 // barPart->SetForegroundColor(colorPix);
1050  }
1051  }
1052  }
1053  }
1054 
1055 }
1056 //-----------------------------------------------------------------------------
1057 
1058 //-----------------------------------------------------------------------------
1060  // Clean up used widgets: frames, buttons, layouthints
1061  fMain->Cleanup();
1062  delete fMain;
1063 }
1064 //-----------------------------------------------------------------------------
1065 
1066 //-----------------------------------------------------------------------------
1068  // Popup the GUI...
1069  new MyMainFrame(gClient->GetRoot(),fWindowSize*1.2,fWindowSize);
1070  return 0;
1071 }
1072 //-----------------------------------------------------------------------------
1073 
void ChangePlotCenterZ(char *tempD)
TClonesArray * fGemHitArray
int guiEventDisplay()
Double_t p
Definition: anasim.C:58
Double_t fPlotCenterZ
void DrawHitErrors()
void DoInfoStatusBar(Int_t event, Int_t x, Int_t y, TObject *sel)
double r
Definition: RiemannTest.C:14
Int_t i
Definition: run_full.C:25
__m128 m
Definition: P4_F32vec4.h:28
TTree * b
Int_t GetStationNr() const
Definition: PndGemDigi.h:84
exit(0)
PndGemMCPoint * fGemPoint
Double_t fWindowSize
static T Sqrt(const T &x)
Definition: PndCAMath.h:37
Int_t GetPdgCode() const
Definition: PndMCTrack.h:73
void ChangePlotSize(char *tempD)
TGNumberEntryField * fPCenXEntry
Double_t GetZ(Int_t it=0)
Double_t GetInnerRadius() const
Definition: PndGemSensor.h:102
static T Sin(const T &x)
Definition: PndCAMath.h:42
TVector3 GetMomentum() const
Definition: PndMCTrack.h:78
TGeoVolume * sensor
void AddSensor(PndGemSensor *sensor)
Int_t GetNChannelsBack() const
Definition: PndGemSensor.h:112
static T Log10(const T &x)
Definition: PndCAMath.h:41
Bool_t fSimRecoFilesRead
static T Cos(const T &x)
Definition: PndCAMath.h:43
TTree * fSimTree
TGNumberEntryField * fPCenZEntry
void ChangePlotCenterY(char *tempD)
TObjArray * fRealStations
MyMainFrame(const TGWindow *p, UInt_t w, UInt_t h)
Double_t fStationsZPosition[10]
int isec
Definition: f_Init.h:19
static T Abs(const T &x)
Definition: PndCAMath.h:39
Int_t GetSensorNr() const
Definition: PndGemDigi.h:86
Int_t fDrawStation
Int_t fNofGemPoints
int strip
Definition: anaMvdDigi.C:135
Int_t GetNSensors() const
Definition: PndGemStation.h:60
PndGemSensor * GetSensorByNr(Int_t sensorNr)
Int_t GetSensorId() const
Definition: PndGemMCPoint.h:90
Double_t fPlotCenterX
Int_t GetChannel(Double_t x, Double_t y, Int_t iSide)
Int_t fNofStations
Int_t fNofGemDigis
void ChangePlotCenterX(char *tempD)
TObjArray * fStations
Double_t
Int_t fNofMCTracks
TFile * fDigiFile
Double_t GetDp() const
Definition: PndGemHit.h:76
Double_t GetChannelNr() const
Definition: PndGemDigi.h:80
TGStatusBar * fInfoStatusBar
TTree * fDigiTree
TStopwatch fTimer
void ReadParameters()
TFile * fHitsFile
TTree * fHitsTree
Int_t GetStationNr() const
Definition: PndGemHit.h:81
TGNumberEntryField * fPCenYEntry
TGMainFrame * fMain
Int_t GetNChannelsFront() const
Definition: PndGemSensor.h:111
void ChangeBaseString(char *carr)
Double_t fPlotCenterY
Double_t x
void ChangeParFString(char *carr)
void ChangePlotParams()
TGNumberEntryField * fPSizeEntry
void SetDigitSchemeToDraw(Int_t itemp)
TGNumberEntryField * fEventToDrawEntry
Double_t GetOuterRadius() const
Definition: PndGemSensor.h:103
TGNumberEntryField * fPointToDrawEntry
Double_t GetPitch(Int_t index) const
Definition: PndGemSensor.h:106
Double_t y
TVector3 GetStartVertex() const
Definition: PndMCTrack.h:76
Double_t GetDr() const
Definition: PndGemHit.h:75
TString fParFString
PndPidEmcAssociatorTask * ts
TClonesArray * fMCTrackArray
TFile * fSimFile
Double_t Pi
Int_t fDigitSchemeToDraw
TClonesArray * fGemDigiArray
Int_t GetSide() const
Definition: PndGemDigi.h:88
Double_t fStationsInnerRadius[10]
TRootEmbeddedCanvas * fEcanvas
Double_t fStationsOuterRadius[10]
Double_t GetStripAngle(Int_t index) const
Definition: PndGemSensor.h:105
double pz[39]
Definition: pipisigmas.h:14
TString fBaseString
Double_t fPlotSize
TClonesArray * fGemPointArray