HARPO  5.1.1
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
HarpoRecoMonitorGui.cxx
Go to the documentation of this file.
1 //
2 // File HarpoRecoMonitorGui.cxx
3 //
12 #include "HarpoRecoMonitorGui.h"
13 
14 #include "Pmm2Event.h"
15 #include "HarpoRecoEvent.h"
16 #include "HarpoSimEvent.h"
17 #include "HarpoClustering.h"
18 #include "HarpoTrackingPh.h"
19 
20 #include "HarpoAnalyseVertex3D.h"
21 #include "HarpoAnalyseBertrand.h"
22 #include "HarpoMatchingVertex.h"
23 #include "HarpoAnalyseEtrack.h"
24 #include "HarpoAnalysePattern.h"
25 #include "HarpoAnalyseTemplate.h"
27 
28 #include <TPad.h>
29 #include <TH1.h>
30 #include <TH2.h>
31 #include <TH3F.h>
32 #include <TGraph2D.h>
33 #include <THStack.h>
34 #include <TLine.h>
35 #include <TArrow.h>
36 #include <TEllipse.h>
37 #include <TPolyLine3D.h>
38 #include <TCanvas.h>
39 #include <TRootEmbeddedCanvas.h>
40 #include <TGFrame.h>
41 #include <TGComboBox.h>
42 #include <TGButton.h>
43 #include <TGLabel.h>
44 #include <TGText.h>
45 #include <TGButtonGroup.h>
46 #include <TGNumberEntry.h>
47 #include <TGListBox.h>
48 #include <TObjArray.h>
49 #include <TLegend.h>
50 #include <TClonesArray.h>
51 #include <TSystemDirectory.h>
52 #include <TSystem.h>
53 #include <TStyle.h>
54 #include <TSpectrum.h>
55 #include <TChain.h>
56 #include <TProfile.h>
57 #include <TGraph.h>
58 #include <TLatex.h>
59 #include <TMath.h>
60 
61 #include "MakeNiceHisto.h"
62 
63 #include <TGTab.h>
64 #include <TApplication.h>
65 
66 #include "TThread.h"
67 #include "TMethodCall.h"
68 #include "TMapFile.h"
69 
70 #include <math.h>
71 
72 #include <iostream>
73 using namespace std;
74 #include <fstream>
75 
76 
97 };
98 
99 HarpoRecoMonitorGui::HarpoRecoMonitorGui(const TGWindow *p, UInt_t w, UInt_t h, UInt_t opt, int argc, char **argv)
100  : TGMainFrame(p, w, h, opt)
101 {
102 
103  ecTabRaw = 0;
104  ecTabNoiseSuppr = 0;
105  ecTabClusters = 0;
107  ecTabTracks = 0;
108  ecTabMatching = 0;
109  ecTab3D = 0;
110  ecTabSim = 0;
111  ecTabVertex = 0;
112  ecSideSummary = 0;
113  fInfoBox = 0;
114  // cTabEvent = 0;
115  // cTab3D = 0;
116  cSideSummary = 0;
117 
118  fFrameMain = 0;
119  fChooseRun = 0;
120  fChooseEvent = 0;
121  fChooseNEvents = 0;
122  fDisplayEvent = 0;
123  fNextEvent = 0;
124  fDisplay = 0;
125  fDisplayBox = 0;
126  fSave = 0;
127 
128  fChooseNch = 0;
129  fChooseSig = 0;
130  fChooseDelta = 0;
131 
132 
133  fRunNumber = 0;
134 
135  fAutoRefresh = kTRUE;
137 
138 
139  // HarpoRunHeader *hdr;
140 
141  HarpoConfig *cfg = new HarpoConfig(argc,argv,0x17);
142  cfg->Init();
143  cfg->print();
144 
145  // fClusteringType = CLUSTERING_NONE;
146  // fTrackingType = TRACKING_NONE;
147  // fMatchingType = MATCHING_NONE;
148  // fVertexingType = VERTEXING_NONE;
149  // fAnalysisType = ANALYSIS_NONE;
156  hDoca = new TH1F("hDoca",";DOCA [mm]",500,0,50);
157  hOpenAngle = new TH1F("hOpenAngle",";#theta [^{o}]",360,-180,180);
158  hOmegaAngle = new TH1F("hOmegaAngle",";#theta [^{o}]",360,-180,180);
159  Long64_t clusteringType;
160  if ( ! gHConfig->Lookup("monitor.Clustering",clusteringType) )
161  Info("Constructor","Default Clustering: %d",fClusteringType);
162  else
163  fClusteringType = clusteringType;
164  Long64_t trackingType;
165  if ( ! gHConfig->Lookup("monitor.Tracking",trackingType) )
166  Info("Constructor","Default Tracking: %d",fTrackingType);
167  else
168  fTrackingType = trackingType;
169 
170 
171 
175  for(UInt_t i = 0; i<kNclustering; i++){
176  if(i == CLUSTERING_NONE) continue;
177  fClustering[i]->Init();
178  }
179 
185  //fTracking1->Init();
186  for(UInt_t i = 0; i<kNtracking; i++){
187  if(i == TRACKING_NONE) continue;
188  fTracking[i]->Init();
189  fTracking[i]->SetConfig();
190  }
191 
195  for(UInt_t i = 0; i<kNmatching; i++){
196  if(i == MATCHING_NONE) continue;
197  fMatching[i]->Init();
198  fMatching[i]->SetConfig();
199  }
200 
203  for(UInt_t i = 0; i<kNvertexing; i++){
204  if(i == VERTEXING_NONE) continue;
205  fVertexing[i]->Init();
206  fVertexing[i]->SetConfig();
207  }
208 
216  for(UInt_t i = 0; i<kNanalysis; i++){
217  if(i == ANALYSIS_NONE) continue;
218  fAnalysis[i]->Init();
219  fAnalysis[i]->SetConfig();
220  }
221 
223  fSaturation->Init();
224 
225 
226 
228  fTrackFitting->Init();
229 
231  fBaselineFluct->Init();
232 
238  for(UInt_t i = 0; i<kNselector; i++){
239  if(i == SELECTOR_NONE) continue;
240  fSelector[i]->Init();
241  fSelector[i]->SetConfig();
242  }
243  // fEventSelector = new HarpoEventSelector();
244  // fEventSelector->Init();
245  // fSelectorSelectorVertex = new HarpoSelectorVertex();
246  // fSelectorSelectorVertex->Init();
247  // fSelectorSelectorPileUp = new HarpoSelectorPileUp();
248  // fSelectorSelectorPileUp->Init();
249  // fSelectorSelectorStraightTracks = new HarpoSelectorStraightTracks();
250  // fSelectorSelectorStraightTracks->Init();
251 
252  fReader = new HarpoReader( cfg );
253 
254 
255  if ( fReader->Init(hSyncTime) ) {
256  // hdr = fReader->GetRunHeader();
257  }else{
258  printf ("Int ERROR exiting ...\n");
259  return;
260  }
261 
262  printf ("Initialized\n");
263 
264  fNevt = 0;
265 
266  fEvent = 0;
267 
268  fHistEvent[0] = new TH2F("fHistEventX",";time [30ns bin]; X channel",512,0,512,288,0,288);
269  fHistEvent[1] = new TH2F("fHistEventY",";time [30ns bin]; Y channel",512,0,512,288,0,288);
270 
271  fHistSpectrum[0] = new TH1F("fHistSpectrumX",";time [30ns bin]; X Q [ADC]",512,0,512);
272  fHistSpectrum[1] = new TH1F("fHistSpectrumY",";time [30ns bin]; Y Q [ADC]",512,0,512);
273 
274  fHistEventEmpty[0] = new TH2F("fHistEventEmptyX",";time [30ns bin]; X channel",512,0,512,288,0,288);
275  fHistEventEmpty[1] = new TH2F("fHistEventEmptyY",";time [30ns bin]; Y channel",512,0,512,288,0,288);
276 
277  UInt_t xsize1 = 200;
278  UInt_t xsize2 = 800;
279  UInt_t mainx = xsize1 + xsize2;
280  UInt_t mainy = 700;
281 
282  gStyle->SetFrameBorderMode(1);
283  gStyle->SetFrameBorderSize(1);
284  gStyle->SetOptStat(0);
285 
286  TGVerticalFrame* f1 = new TGVerticalFrame(this,xsize1,mainy,kVerticalFrame);
287  TGVerticalFrame* f2 = new TGVerticalFrame(this,xsize2,mainy,kVerticalFrame);
288  this->AddFrame(f1,new TGLayoutHints(kLHintsLeft | kLHintsExpandY,5,5,5,5));
289  this->AddFrame(f2,new TGLayoutHints(kLHintsExpandX | kLHintsExpandY,5,5,5,5));
290  TGVerticalFrame* f20 = new TGVerticalFrame(f2,xsize2,mainy,kVerticalFrame);
291  f2->AddFrame(f20,new TGLayoutHints(kLHintsExpandX | kLHintsExpandY,5,5,5,5));
292  TGHorizontalFrame* f21 = new TGHorizontalFrame(f2,xsize2,150,kHorizontalFrame);
293  f2->AddFrame(f21,new TGLayoutHints(kLHintsExpandX | kLHintsBottom ,5,5,5,5));
294 
295  BuildButtonsFrame(f1);
296  BuildDisplayFrame(f20);
297  BuildInfoFrame(f21);
298 
299  MapSubwindows();
300  MapWindow();
301  SetWindowName("HARPO Reco Monitor");
302  MoveResize(0,0,mainx,mainy);
303 
304  Layout();
305 
306  fAutoScale = kFALSE;
307 
308  SetStyle();
309 
310 
311  DisplayEvent();
312 
313 }
314 
315 
316 
318 {
319  // Got close message for this MainFrame. Terminate the application
320  // or returns from the TApplication event loop (depending on the
321  // argument specified in TApplication::Run()).
322 
323  gApplication->Terminate(0);
324 
325 
326 }
327 
328 
329 
330 void HarpoRecoMonitorGui::BuildDisplayFrame(TGVerticalFrame* f20)
331 {
332 
333  UInt_t xsize2 = f20->GetWidth();
334  UInt_t mainy = f20->GetHeight();
335 
336  fEventLabel = new TGLabel(f20,"NO DATA");
337  fEventLabel->SetHeight(40);
338  f20->AddFrame(fEventLabel,new TGLayoutHints(kLHintsExpandX,5,5,5,5));
339 
340  fTab = new TGTab(f20, xsize2, mainy);
341 
342  TGCompositeFrame *tf = fTab->AddTab("Raw maps");
343  ecTabRaw = new TRootEmbeddedCanvas("ecTabRaw",tf,xsize2,mainy);
344  tf->AddFrame(ecTabRaw,new TGLayoutHints(kLHintsExpandX | kLHintsExpandY,5,5,5,5));
345 
346  tf = fTab->AddTab("Noise Suppr");
347  ecTabNoiseSuppr = new TRootEmbeddedCanvas("ecTabNoiseSuppr",tf,xsize2,mainy);
348  tf->AddFrame(ecTabNoiseSuppr,new TGLayoutHints(kLHintsExpandX | kLHintsExpandY,5,5,5,5));
349 
350  tf = fTab->AddTab("Clusters");
351  ecTabClusters = new TRootEmbeddedCanvas("ecTabClusters",tf,xsize2,mainy);
352  tf->AddFrame(ecTabClusters,new TGLayoutHints(kLHintsExpandX | kLHintsExpandY,5,5,5,5));
353 
354  tf = fTab->AddTab("Tracking");
355  ecTabClustersTracks = new TRootEmbeddedCanvas("ecTabClustersTracks",tf,xsize2,mainy);
356  tf->AddFrame(ecTabClustersTracks,new TGLayoutHints(kLHintsExpandX | kLHintsExpandY,5,5,5,5));
357 
358  tf = fTab->AddTab("Tracks");
359  ecTabTracks = new TRootEmbeddedCanvas("ecTabTracks",tf,xsize2,mainy);
360  tf->AddFrame(ecTabTracks,new TGLayoutHints(kLHintsExpandX | kLHintsExpandY,5,5,5,5));
361 
362  tf = fTab->AddTab("Matching");
363  ecTabMatching = new TRootEmbeddedCanvas("ecTabMatching",tf,xsize2,mainy);
364  tf->AddFrame(ecTabMatching,new TGLayoutHints(kLHintsExpandX | kLHintsExpandY,5,5,5,5));
365 
366  tf = fTab->AddTab("Vertexing");
367  ecTabVertexing = new TRootEmbeddedCanvas("ecTabVertex",tf,xsize2,mainy);
368  tf->AddFrame(ecTabVertexing,new TGLayoutHints(kLHintsExpandX | kLHintsExpandY,5,5,5,5));
369 
370  tf = fTab->AddTab("Vertexes");
371  ecTabVertex = new TRootEmbeddedCanvas("ecTabVertex",tf,xsize2,mainy);
372  tf->AddFrame(ecTabVertex,new TGLayoutHints(kLHintsExpandX | kLHintsExpandY,5,5,5,5));
373 
374  tf = fTab->AddTab("3D");
375  ecTab3D = new TRootEmbeddedCanvas("ecTab3D",tf,xsize2,mainy);
376  tf->AddFrame(ecTab3D,new TGLayoutHints(kLHintsExpandX | kLHintsExpandY,5,5,5,5));
377 
378  tf = fTab->AddTab("Sim");
379  ecTabSim = new TRootEmbeddedCanvas("ecTabSim",tf,xsize2,mainy);
380  tf->AddFrame(ecTabSim,new TGLayoutHints(kLHintsExpandX | kLHintsExpandY,5,5,5,5));
381 
382  tf = fTab->AddTab("Analysis");
383  ecTabAnalysis = new TRootEmbeddedCanvas("ecTabAnalysis",tf,xsize2,mainy);
384  tf->AddFrame(ecTabAnalysis,new TGLayoutHints(kLHintsExpandX | kLHintsExpandY,5,5,5,5));
385 
386  f20->AddFrame(fTab,new TGLayoutHints(kLHintsExpandX | kLHintsExpandY,5,5,5,5));
387 
388 
389 
390  ecTabRaw->GetCanvas()->SetName("cTabRaw");
391  ecTabRaw->GetCanvas()->Divide(2);
392  ecTabNoiseSuppr->GetCanvas()->SetName("cTabNoiseSuppr");
393  ecTabNoiseSuppr->GetCanvas()->Divide(2);
394  ecTabClusters->GetCanvas()->SetName("cTabClusters");
395  ecTabClusters->GetCanvas()->Divide(2);
396  ecTabClustersTracks->GetCanvas()->SetName("cTabClustersTracks");
397  ecTabClustersTracks->GetCanvas()->Divide(2);
398  // ((HarpoTrackingPh*)fTracking2)->SetCanvas(ecTabClustersTracks->GetCanvas()->GetPad(1),0);
399  // ((HarpoTrackingPh*)fTracking2)->SetHist(fHistEvent[0],0);
400  // ((HarpoTrackingPh*)fTracking2)->SetCanvas(ecTabClustersTracks->GetCanvas()->GetPad(2),1);
401  // ((HarpoTrackingPh*)fTracking2)->SetHist(fHistEvent[1],1);
402  ecTabTracks->GetCanvas()->SetName("cTabTracks");
403  ecTabTracks->GetCanvas()->Divide(2);
404  ecTabMatching->GetCanvas()->SetName("cTabMatching");
405  ecTabMatching->GetCanvas()->Divide(2);
406  ecTab3D->GetCanvas()->SetName("cTab3D");
407  ecTab3D->GetCanvas()->Divide(2);
408  ecTabSim->GetCanvas()->SetName("cTabSim");
409  ecTabSim->GetCanvas()->Divide(2);
410  ecTabVertexing->GetCanvas()->SetName("cTabVertexing");
411  ecTabVertexing->GetCanvas()->Divide(2);
412  ecTabVertex->GetCanvas()->SetName("cTabVertex");
413  ecTabVertex->GetCanvas()->Divide(2);
414  ecTabAnalysis->GetCanvas()->SetName("cTabAnalysis");
415  ecTabAnalysis->GetCanvas()->Divide(2);
416 
417 }
418 
419 void HarpoRecoMonitorGui::BuildInfoFrame(TGHorizontalFrame* f21)
420 {
421 
422  UInt_t xsize = f21->GetWidth();
423  // UInt_t xsize2 = xsize/4;
424  UInt_t ysize = f21->GetHeight();
425  // UInt_t ysize2 = 20;
426 
427  // TGLayoutHints* fLayout1 = new TGLayoutHints(kLHintsLeft ,5,5,5,5);
428  // TGLayoutHints* fLayout2 = new TGLayoutHints(kLHintsRight ,5,5,5,5);
429  TGLayoutHints* fLayout3 = new TGLayoutHints(kLHintsTop | kLHintsExpandX ,5,5,5,5);
430  // TGLayoutHints* fLayout4 = new TGLayoutHints(kLHintsTop | kLHintsLeft,5,5,5,5);
431 
432 
433  // ecSideSummary = new TRootEmbeddedCanvas("ecSideSummary",f1,xsize1,300);
434  fInfoBox = new TGListBox(f21);
435  fInfoBox->Resize(xsize,ysize);
436  f21->AddFrame(fInfoBox,fLayout3);
437 
438  // TGVerticalFrame* f211 = new TGVerticalFrame(f21,xsize2,ysize,kVerticalFrame);
439  // TGLabel* fBaselineLabel = new TGLabel(f211, "Noise suppression");
440  // TGHorizontalFrame* f2111 = new TGHorizontalFrame(f211,xsize2,ysize2,kHorizontalFrame);
441  // TGLabel* fNchLabel = new TGLabel(f2111, "#channels");
442  // fChooseNch = new TGNumberEntry(f2111);
443  // fChooseNch->SetNumber(30);
444  // TGHorizontalFrame* f2112 = new TGHorizontalFrame(f211,xsize2,ysize2,kHorizontalFrame);
445  // TGLabel* fSigLabel = new TGLabel(f2112, "#sigma");
446  // fChooseSig = new TGNumberEntry(f2112);
447  // fChooseSig->SetNumber(20);
448  // TGHorizontalFrame* f2113 = new TGHorizontalFrame(f211,xsize2,ysize2,kHorizontalFrame);
449  // TGLabel* fDeltaLabel = new TGLabel(f2113, "#delta");
450  // fChooseDelta = new TGNumberEntry(f2113);
451  // fChooseDelta->SetNumber(5);
452  // TGHorizontalFrame* f2114 = new TGHorizontalFrame(f211,xsize2,ysize2,kHorizontalFrame);
453  // TGLabel* fTruncLLabel = new TGLabel(f2114, "TruncL");
454  // fChooseTruncL = new TGNumberEntry(f2114);
455  // fChooseTruncL->SetNumber(10);
456  // TGHorizontalFrame* f2115 = new TGHorizontalFrame(f211,xsize2,ysize2,kHorizontalFrame);
457  // TGLabel* fTruncHLabel = new TGLabel(f2115, "TruncH");
458  // fChooseTruncH = new TGNumberEntry(f2115);
459  // fChooseTruncH->SetNumber(70);
460  // f21->AddFrame(f211,fLayout4);
461  // f211->AddFrame(fBaselineLabel,fLayout3);
462  // f211->AddFrame(f2111,fLayout3);
463  // f211->AddFrame(f2112,fLayout3);
464  // f211->AddFrame(f2113,fLayout3);
465  // f211->AddFrame(f2114,fLayout3);
466  // f211->AddFrame(f2115,fLayout3);
467  // f2111->AddFrame(fNchLabel,fLayout1);
468  // f2111->AddFrame(fChooseNch,fLayout2);
469  // f2112->AddFrame(fChooseSig,fLayout2);
470  // f2112->AddFrame(fSigLabel,fLayout1);
471  // f2113->AddFrame(fChooseDelta,fLayout2);
472  // f2113->AddFrame(fDeltaLabel,fLayout1);
473  // f2114->AddFrame(fChooseTruncL,fLayout2);
474  // f2114->AddFrame(fTruncLLabel,fLayout1);
475  // f2115->AddFrame(fChooseTruncH,fLayout2);
476  // f2115->AddFrame(fTruncHLabel,fLayout1);
477 
478 
479 
480  // TGVerticalFrame* f212 = new TGVerticalFrame(f21,xsize2,ysize,kVerticalFrame);
481  // TGLabel* fClusteringLabel = new TGLabel(f212, "Clustering");
482  // TGHorizontalFrame* f2121 = new TGHorizontalFrame(f212,xsize2,ysize2,kHorizontalFrame);
483  // TGLabel* fThrLabel = new TGLabel(f2121, "Threshold");
484  // fChooseThr = new TGNumberEntry(f2121);
485  // Double_t thr = 3;
486  // gHConfig->Lookup("Clustering.Thr",thr);
487  // fChooseThr->SetNumber(thr);
488  // TGHorizontalFrame* f2122 = new TGHorizontalFrame(f212,xsize2,ysize2,kHorizontalFrame);
489  // TGLabel* fNoiseThrLabel = new TGLabel(f2122, "Noise Thr");
490  // fChooseNoiseThr = new TGNumberEntry(f2122);
491  // Double_t noiseThr = 10;
492  // gHConfig->Lookup("Clustering.NoiseThr",noiseThr);
493  // fChooseNoiseThr->SetNumber(noiseThr);
494  // f21->AddFrame(f212,fLayout4);
495  // f212->AddFrame(fClusteringLabel,fLayout3);
496  // f212->AddFrame(f2121,fLayout3);
497  // f212->AddFrame(f2122,fLayout3);
498  // f2121->AddFrame(fThrLabel,fLayout1);
499  // f2121->AddFrame(fChooseThr,fLayout2);
500  // f2122->AddFrame(fNoiseThrLabel,fLayout1);
501  // f2122->AddFrame(fChooseNoiseThr,fLayout2);
502 
503 
504 }
505 
506 void HarpoRecoMonitorGui::BuildButtonsFrame(TGVerticalFrame* f1)
507 {
508 
509  UInt_t xsize1 = f1->GetWidth();
510  UInt_t ysize = 20;
511  // TGLayoutHints* fLayout1 = new TGLayoutHints(kLHintsExpandX | kLHintsExpandY,5,5,5,5);
512  //TGLayoutHints* fLayout12 = new TGLayoutHints(kLHintsLeft,5,5,5,5);
513  TGLayoutHints* fLayout2 = new TGLayoutHints(kLHintsExpandX | kLHintsTop,5,5,5,5);
514  // TGLayoutHints* fLayout3 = new TGLayoutHints(kLHintsBottom | kLHintsCenterX,5,5,5,5);
515  //TGLayoutHints* fLayout3 = new TGLayoutHints(kLHintsBottom ,5,5,5,5);
516 
517  TGHorizontalFrame* autorefreshFrame = new TGHorizontalFrame(f1,xsize1,ysize,kHorizontalFrame);
518  TGLabel* fDelayLabel = new TGLabel(f1, "");
519  fChooseDelay = new TGNumberEntry(autorefreshFrame);
520  fChooseDelay->Resize(xsize1 -20 ,ysize);
521  fAutoRefreshButton = new TGTextButton(autorefreshFrame, "Get Event", M_DISPLAY_EVENT);
522  fAutoRefreshButton->Resize(20, ysize);
523  fAutoRefreshButton->Associate(this);
524  // fChooseDir->Select(1);
525  autorefreshFrame->AddFrame(fAutoRefreshButton,fLayout2);
526  autorefreshFrame->AddFrame(fDelayLabel,fLayout2);//new TGLayoutHints(kLHintsExpandX | kLHintsCenterY,5,5,5,5));
527  autorefreshFrame->AddFrame(fChooseDelay,fLayout2);
528  Int_t firstevent = gHConfig->GetFromEvent();
529  fChooseDelay->SetNumber(firstevent);
530 
531 
532  fDisplayEvent = new TGTextButton(f1,"Display Current Event",M_DISPLAY_EVENT);
533  fDisplayEvent->Associate(this);
534 
535  fSave = new TGTextButton(f1,"Save Current Event",M_SAVE);
536  fSave->Associate(this);
537 
538  fNextEvent = new TGTextButton(f1,"Next Event",M_NEXT_EVENT);
539  fNextEvent->Associate(this);
540  // fNextEvent->SetState(kButtonDisabled,kFALSE);
541 
542  fPrevEvent = new TGTextButton(f1,"Previous Event",M_PREV_EVENT);
543  fPrevEvent->Associate(this);
544  // fPrevEvent->SetState(kButtonDisabled,kFALSE);
545 
546  fFindEvent = new TGTextButton(f1,"Find Next Event",M_FIND_EVENT);
547  fFindEvent->Associate(this);
548  // fPrevEvent->SetState(kButtonDisabled,kFALSE);
549 
550  TGHorizontalFrame* fCheckShowSpectrumFrame = new TGHorizontalFrame(f1,xsize1,ysize,kHorizontalFrame);
551  TGLabel* fCheckShowSpectrumLabel = new TGLabel(fCheckShowSpectrumFrame, "Show spectrum");
552  fCheckShowSpectrum = new TGCheckButton(fCheckShowSpectrumFrame);
553  fCheckShowSpectrumFrame->AddFrame(fCheckShowSpectrum,new TGLayoutHints(kLHintsLeft,5,5,5,5));
554  fCheckShowSpectrumFrame->AddFrame(fCheckShowSpectrumLabel,new TGLayoutHints(kLHintsLeft,5,5,5,5));
555 
556  TGHorizontalFrame* fCheckAnimClusteringFrame = new TGHorizontalFrame(f1,xsize1,ysize,kHorizontalFrame);
557  TGLabel* fCheckAnimClusteringLabel = new TGLabel(fCheckAnimClusteringFrame, "Show clustering");
558  fCheckAnimClustering = new TGCheckButton(fCheckAnimClusteringFrame);
559  fCheckAnimClusteringFrame->AddFrame(fCheckAnimClustering,new TGLayoutHints(kLHintsLeft,5,5,5,5));
560  fCheckAnimClusteringFrame->AddFrame(fCheckAnimClusteringLabel,new TGLayoutHints(kLHintsLeft,5,5,5,5));
561 
562  TGHorizontalFrame* fCheckAnimTrackingFrame = new TGHorizontalFrame(f1,xsize1,ysize,kHorizontalFrame);
563  TGLabel* fCheckAnimTrackingLabel = new TGLabel(fCheckAnimTrackingFrame, "Show Kalman tracking");
564  fCheckAnimTracking = new TGCheckButton(fCheckAnimTrackingFrame);
565  fCheckAnimTrackingFrame->AddFrame(fCheckAnimTracking,new TGLayoutHints(kLHintsLeft,5,5,5,5));
566  fCheckAnimTrackingFrame->AddFrame(fCheckAnimTrackingLabel,new TGLayoutHints(kLHintsLeft,5,5,5,5));
567 
568  TGHorizontalFrame* fCheckAnimFittingFrame = new TGHorizontalFrame(f1,xsize1,ysize,kHorizontalFrame);
569  TGLabel* fCheckAnimFittingLabel = new TGLabel(fCheckAnimFittingFrame, "Show Kalman fitting");
570  fCheckAnimFitting = new TGCheckButton(fCheckAnimFittingFrame);
571  fCheckAnimFittingFrame->AddFrame(fCheckAnimFitting,new TGLayoutHints(kLHintsLeft,5,5,5,5));
572  fCheckAnimFittingFrame->AddFrame(fCheckAnimFittingLabel,new TGLayoutHints(kLHintsLeft,5,5,5,5));
573 
574  TGHorizontalFrame* triggerFrame = new TGHorizontalFrame(f1,xsize1,ysize,kHorizontalFrame);
575  fChooseTrigger = new TGComboBox(triggerFrame, "Trigger");
576  fChooseTrigger->AddEntry("All Trigger Lines",-2);
577  fChooseTrigger->AddEntry("Unknown",-1);
578  fChooseTrigger->AddEntry("TTZ",0);
579  fChooseTrigger->AddEntry("Gamma",2);
580  fChooseTrigger->AddEntry("No Mesh",3);
581  fChooseTrigger->AddEntry("Inv Mesh",4);
582  fChooseTrigger->AddEntry("No Up",5);
583  fChooseTrigger->AddEntry("---",6);
584  fChooseTrigger->AddEntry("Gamma, L",7);
585  fChooseTrigger->AddEntry("No Mesh, L",8);
586  fChooseTrigger->AddEntry("Inv Mesh, L",9);
587  fChooseTrigger->AddEntry("No Up, L",10);
588  fChooseTrigger->AddEntry("No PM, L",11);
589  fChooseTrigger->AddEntry("No L",12);
590  fChooseTrigger->AddEntry("---",13);
591  fChooseTrigger->AddEntry("Cosmic",14);
592  fChooseTrigger->AddEntry("---",15);
593  fChooseTrigger->Select(-2);
594  fChooseTrigger->Resize(xsize1 -20 ,ysize);
595  triggerFrame->AddFrame(fChooseTrigger,fLayout2);
596 
597  TGHorizontalFrame* eventTypeFrame = new TGHorizontalFrame(f1,xsize1,ysize,kHorizontalFrame);
598  fChooseEventType = new TGComboBox(eventTypeFrame, "Event Type");
599  fChooseEventType->AddEntry("All events",-1);
600  fChooseEventType->AddEntry("Empty",0);
601  fChooseEventType->AddEntry("Depot",1);
602  fChooseEventType->AddEntry("Traversing",3);
603  fChooseEventType->AddEntry("Created",4);
604  fChooseEventType->AddEntry("Contained",5);
605  fChooseEventType->AddEntry("Gamma Candidate",6);
606  fChooseEventType->AddEntry("Delta",7);
607  fChooseEventType->AddEntry("2 Tracks other",8);
608  fChooseEventType->AddEntry("Shower",9);
609  fChooseEventType->AddEntry("Other",10);
610  fChooseEventType->AddEntry("Good Gamma Candidate",11);
611  fChooseEventType->AddEntry("Good Triplet Candidate",12);
612  fChooseEventType->Select(6);
613  fChooseEventType->Resize(xsize1 -20 ,ysize);
614  eventTypeFrame->AddFrame(fChooseEventType,fLayout2);
615 
616  TGHorizontalFrame* clusteringTypeFrame = new TGHorizontalFrame(f1,xsize1,ysize,kHorizontalFrame);
617  TGLabel* clusteringLabel = new TGLabel(clusteringTypeFrame, "Clustering");
618  fChooseClusteringType = new TGComboBox(clusteringTypeFrame, "Clustering");
619  for(UInt_t i = 0; i<kNclustering; i++){
620  switch(i){
621  case CLUSTERING_NONE: fChooseClusteringType->AddEntry("NONE",i); break;
622  case CLUSTERING_BASIC: fChooseClusteringType->AddEntry("Peaks",i); break;
623  case CLUSTERING_BLOCS: fChooseClusteringType->AddEntry("2D blocs",i); break;
624  default: fChooseClusteringType->AddEntry("UNKNOWN",i); break;
625  }
626  }
627  // fChooseClusteringType->AddEntry("Basic (obsolete)",1);
628  // fChooseClusteringType->AddEntry("Peaks",2);
629  // fChooseClusteringType->AddEntry("2D blocs",3);
631  fChooseClusteringType->Resize(xsize1 -20 ,ysize);
632  clusteringTypeFrame->AddFrame(clusteringLabel,fLayout2);
633  clusteringTypeFrame->AddFrame(fChooseClusteringType,fLayout2);
634  TGTextButton* fConfClustering = new TGTextButton(clusteringTypeFrame,"Config",M_CONF_CLUSTERING);
635  fConfClustering->Associate(this);
636  clusteringTypeFrame->AddFrame(fConfClustering,fLayout2);
637 
638  TGHorizontalFrame* trackingTypeFrame = new TGHorizontalFrame(f1,xsize1,ysize,kHorizontalFrame);
639  TGLabel* trackingLabel = new TGLabel(trackingTypeFrame, "Tracking");
640  fChooseTrackingType = new TGComboBox(trackingTypeFrame, "Tracking");
641  for(UInt_t i = 0; i<kNtracking; i++){
642  switch(i){
643  case TRACKING_NONE: fChooseTrackingType->AddEntry("NONE",i); break;
644  case TRACKING_HOUGH: fChooseTrackingType->AddEntry("Hough multiscale",i); break;
645  case TRACKING_KALMAN: fChooseTrackingType->AddEntry("Kalman",i); break;
646  case TRACKING_KALMANNEW: fChooseTrackingType->AddEntry("Kalman (new)",i); break;
647  case TRACKING_PH: fChooseTrackingType->AddEntry("Kalman (old)",i); break;
648  }
649  }
650  // fChooseTrackingType->AddEntry("NONE",0);
651  // fChooseTrackingType->AddEntry("Hough, fixed binning (obsolete)",1);
652  // fChooseTrackingType->AddEntry("Kalman",2);
653  // fChooseTrackingType->AddEntry("Hough multiscale",3);
655  fChooseTrackingType->Resize(xsize1 -20 ,ysize);
656  trackingTypeFrame->AddFrame(trackingLabel,fLayout2);
657  trackingTypeFrame->AddFrame(fChooseTrackingType,fLayout2);
658  TGTextButton* fConfTracking = new TGTextButton(trackingTypeFrame,"Config",M_CONF_TRACKING);
659  fConfTracking->Associate(this);
660  trackingTypeFrame->AddFrame(fConfTracking,fLayout2);
661 
662  TGHorizontalFrame* matchingTypeFrame = new TGHorizontalFrame(f1,xsize1,ysize,kHorizontalFrame);
663  TGLabel* matchingLabel = new TGLabel(matchingTypeFrame, "Matching");
664  fChooseMatchingType = new TGComboBox(matchingTypeFrame, "Matching");
665  for(UInt_t i = 0; i<kNmatching; i++){
666  switch(i){
667  case MATCHING_NONE: fChooseMatchingType->AddEntry("NONE",i); break;
668  case MATCHING_BASIC: fChooseMatchingType->AddEntry("Basic",i); break;
669  case MATCHING_VERTEX: fChooseMatchingType->AddEntry("Vertex",i); break;
670  }
671  }
673  fChooseMatchingType->Resize(xsize1 -20 ,ysize);
674  matchingTypeFrame->AddFrame(matchingLabel,fLayout2);
675  matchingTypeFrame->AddFrame(fChooseMatchingType,fLayout2);
676  TGTextButton* fConfMatching = new TGTextButton(matchingTypeFrame,"Config",M_CONF_MATCHING);
677  fConfMatching->Associate(this);
678  matchingTypeFrame->AddFrame(fConfMatching,fLayout2);
679 
680  TGHorizontalFrame* vertexingTypeFrame = new TGHorizontalFrame(f1,xsize1,ysize,kHorizontalFrame);
681  TGLabel* vertexingLabel = new TGLabel(vertexingTypeFrame, "Vertexing");
682  fChooseVertexingType = new TGComboBox(vertexingTypeFrame, "Vertexing");
683  for(UInt_t i = 0; i<kNvertexing; i++){
684  switch(i){
685  case VERTEXING_NONE: fChooseVertexingType->AddEntry("NONE",i); break;
686  case VERTEXING_BASIC: fChooseVertexingType->AddEntry("Basic",i); break;
687  }
688  }
690  fChooseVertexingType->Resize(xsize1 -20 ,ysize);
691  vertexingTypeFrame->AddFrame(vertexingLabel,fLayout2);
692  vertexingTypeFrame->AddFrame(fChooseVertexingType,fLayout2);
693  TGTextButton* fConfVertexing = new TGTextButton(vertexingTypeFrame,"Config",M_CONF_VERTEXING);
694  fConfVertexing->Associate(this);
695  vertexingTypeFrame->AddFrame(fConfVertexing,fLayout2);
696 
697  TGHorizontalFrame* analysisTypeFrame = new TGHorizontalFrame(f1,xsize1,ysize,kHorizontalFrame);
698  TGLabel* analysisLabel = new TGLabel(analysisTypeFrame, "Analysis");
699  fChooseAnalysisType = new TGComboBox(analysisTypeFrame, "Analysis");
700  for(UInt_t i = 0; i<kNanalysis; i++){
701  switch(i){
702  case ANALYSIS_NONE: fChooseAnalysisType->AddEntry("NONE",i); break;
703  case ANALYSIS_ANALYSEBERTRAND: fChooseAnalysisType->AddEntry("AnalyseBertrand",i); break;
704  case ANALYSIS_ANALYSEVERTEX3D: fChooseAnalysisType->AddEntry("AnalyseVertex3D",i); break;
705  case ANALYSIS_ANALYSEETRACK: fChooseAnalysisType->AddEntry("AnalyseEtrack",i); break;
706  case ANALYSIS_ANALYSEPATTERN: fChooseAnalysisType->AddEntry("AnalysePattern",i); break;
707  case ANALYSIS_ANALYSEPEDESTALSHIFT: fChooseAnalysisType->AddEntry("AnalysePedestalShift",i); break;
708  case ANALYSIS_TEMPLATE: fChooseAnalysisType->AddEntry("Template",i); break;
709  }
710  }
712  fChooseAnalysisType->Resize(xsize1 -20 ,ysize);
713  analysisTypeFrame->AddFrame(analysisLabel,fLayout2);
714  analysisTypeFrame->AddFrame(fChooseAnalysisType,fLayout2);
715  TGTextButton* fConfAnalysis = new TGTextButton(analysisTypeFrame,"Config",M_CONF_ANALYSIS);
716  fConfAnalysis->Associate(this);
717  analysisTypeFrame->AddFrame(fConfAnalysis,fLayout2);
718 
719  TGHorizontalFrame* selectorTypeFrame = new TGHorizontalFrame(f1,xsize1,ysize,kHorizontalFrame);
720  TGLabel* selectorLabel = new TGLabel(selectorTypeFrame, "Selector");
721  fChooseSelectorType = new TGComboBox(selectorTypeFrame, "Event Selector");
722  // fChooseEventSelector->AddEntry("NONE",0);
723  // fChooseEventSelector->AddEntry("HarpoSelectorStraightTracks",2);
724  // fChooseEventSelector->AddEntry("HarpoSelectorPileUp",3);
725  // fChooseEventSelector->AddEntry("HarpoSelectorVertex",4);
726  // fChooseEventSelector->AddEntry("HarpoEventSelector",1);
727  // fChooseEventSelector->Resize(xsize1 -20 ,ysize);
728  // eventSelectorFrame->AddFrame(fChooseEventSelector,fLayout2);
729  for(UInt_t i = 0; i<kNselector; i++){
730  switch(i){
731  case SELECTOR_NONE: fChooseSelectorType->AddEntry("NONE",i); break;
732  case SELECTOR_TEMPLATE: fChooseSelectorType->AddEntry("Template",i); break;
733  case SELECTOR_PILEUP: fChooseSelectorType->AddEntry("PileUp",i); break;
734  case SELECTOR_VERTEX: fChooseSelectorType->AddEntry("Vertex",i); break;
735  case SELECTOR_STRAIGHTTRACKS: fChooseSelectorType->AddEntry("StraightTracks",i); break;
736  }
737  }
739  fChooseSelectorType->Resize(xsize1 -20 ,ysize);
740  selectorTypeFrame->AddFrame(selectorLabel,fLayout2);
741  selectorTypeFrame->AddFrame(fChooseSelectorType,fLayout2);
742  TGTextButton* fConfSelector = new TGTextButton(selectorTypeFrame,"Config",M_CONF_SELECTOR);
743  fConfSelector->Associate(this);
744  selectorTypeFrame->AddFrame(fConfSelector,fLayout2);
745 
746 
747 
748 
749  f1->AddFrame(autorefreshFrame,fLayout2);
750  f1->AddFrame(fDisplayEvent,fLayout2);
751  f1->AddFrame(fSave,fLayout2);
752  f1->AddFrame(fNextEvent,fLayout2);
753  f1->AddFrame(fPrevEvent,fLayout2);
754  f1->AddFrame(fFindEvent,fLayout2);
755  f1->AddFrame(fCheckShowSpectrumFrame,fLayout2);
756  f1->AddFrame(fCheckAnimClusteringFrame,fLayout2);
757  f1->AddFrame(fCheckAnimTrackingFrame,fLayout2);
758  f1->AddFrame(fCheckAnimFittingFrame,fLayout2);
759  f1->AddFrame(triggerFrame,fLayout2);
760  f1->AddFrame(eventTypeFrame,fLayout2);
761  f1->AddFrame(clusteringTypeFrame,fLayout2);
762  f1->AddFrame(trackingTypeFrame,fLayout2);
763  f1->AddFrame(matchingTypeFrame,fLayout2);
764  f1->AddFrame(vertexingTypeFrame,fLayout2);
765  f1->AddFrame(analysisTypeFrame,fLayout2);
766  f1->AddFrame(selectorTypeFrame,fLayout2);
767  //f1->AddFrame(ecSideSummary,fLayout1);
768 }
769 
770 
771 
772 
773 
774 
775 
776 void HarpoRecoMonitorGui::SetListOfRuns(TGComboBox* /* box */, const char* /* dirname */)
777 {
778 }
779 
780 
782 {
783 
784  return kTRUE;
785 
786 }
787 
789 {
790  Info("DisplayMap","%p",evt);
791 
792  if(fEvent == 0) return;
793 
794  for(Int_t ndet=0;ndet<2;ndet++) {
795  if(!gHDetSet->isExist(ndet)) continue;
796  HarpoDccMap * m = evt->GetDccMap(ndet);
797  if ( m == NULL ) continue;
798  fHistEvent[ndet]->Reset();
799  fHistSpectrum[ndet]->Reset();
800  for(Int_t i=1;i<NADC;i++){ //Time bins
801  // Double_t sigmaQ = 0;
802  Double_t Qt=0;
803  for(Int_t j=0;j<NCHAN;j++){ // Channels
804  Double_t q = m->GetData(j,i);
805  fHistEvent[ndet]->SetBinContent(i+1,j+1,q);
806  if(q >= 0)
807  Qt=Qt+q;
808  }
809  fHistSpectrum[ndet]->SetBinContent(i+1,Qt);
810  }
811  fHistEvent[ndet]->SetMinimum(1);
812  fHistEvent[ndet]->SetMaximum(4096);
813  }
814 }
815 
816 
817 void HarpoRecoMonitorGui::DisplayMap(TRootEmbeddedCanvas* ecTab,Int_t proj,Int_t copy)
818 {
819  Info("DisplayMap","%p",fEvent);
820 
821  if(fEvent == 0) return;
822 
823  // if(!cTabEvent){
824  TCanvas* cTab = ecTab->GetCanvas();
825  cTab->GetPad(1)->Delete();
826  cTab->GetPad(2)->Delete();
827  cTab->Divide(2);
828  if(proj){
829  cTab->GetPad(1)->Divide(1,2);
830  cTab->GetPad(2)->Divide(1,2);
831  }
832 
833  TLatex* latex = new TLatex();
834  latex->SetTextFont(132);
835  latex->SetTextAlign(12);
836  latex->SetTextSize(0.08);
837 
838  for(Int_t ndet=0;ndet<2;ndet++) {
839  if(!gHDetSet->isExist(ndet)) continue;
840  HarpoDccMap * m = fEvent->GetDccMap(ndet);
841  if ( m == NULL ) continue;
842  Int_t color = ndet? kRed : kBlue;
843  latex->SetTextColor(color);
844  // TH2F* hEvent = new TH2F("hEvent",";time [tb]; channel",508,0,508,304,0,304);
845  // fHistEvent[ndet]->Reset();
846  // fHistSpectrum[ndet]->Reset();
847  // for(Int_t i=1;i<NADC;i++){ //Time bins
848  // Double_t sigmaQ = 0;
849  // Double_t Qt=0;
850  // for(Int_t j=0;j<NCHAN;j++){ // Channels
851  // Double_t q = m->GetData(j,i);
852  // if(proj && q <= -1000) q = 0;
853  // // hEvent->SetBinContent(i+1,j+1,q);
854  // fHistEvent[ndet]->SetBinContent(i+1,j+1,q);
855  // Qt=Qt+q;
856  // }
857  // fHistSpectrum[ndet]->SetBinContent(i+1,Qt);
858  // }
859  // hEvent->SetMinimum(0.1);
860  // hEvent->SetMaximum(4096);
861  //fHistEvent[ndet]->SetMinimum(0.1);
862  fHistEvent[ndet]->SetMinimum(1);
863  fHistEvent[ndet]->SetMaximum(4096);
864 
865  if(proj){
866  MakeNiceHisto(fHistEvent[ndet],cTab->GetPad(ndet+1)->GetPad(1),"col",copy);
867  }else
868  MakeNiceHisto(fHistEvent[ndet],cTab->GetPad(ndet+1),"colz",copy);
869  // MakeNiceHisto(hEvent,cTab->GetPad(ndet+1),"colz",1);
870 
871  TLine* line = new TLine();
872  line->SetLineWidth(2);
873  line->SetLineStyle(2);
874  line->DrawLine(0,194,511,194);
875  line->DrawLine(0,94,511,94);
876 
877  if(ndet==0){
878  line->SetLineWidth(1);
879  line->SetLineStyle(3);
880  line->DrawLine(0,259,511,259);
881  line->DrawLine(0,226,511,226);
882  line->DrawLine(0,160.5,511,160.5);
883  line->DrawLine(0,127.5,511,127.5);
884  line->DrawLine(0,61.5,511,61.5);
885  line->DrawLine(0,28.5,511,28.5);
886  }
887  //hEvent->Delete();
888  }
889 
890 
891 
892  // MakeNiceHisto(hEvent,cTab->GetPad(ndet+1)->GetPad(1),"colz");
893  // TH1D* hEventProj = hEvent->ProjectionX();
894  if(proj){
895  TH1D* hEventProjX = fHistEvent[0]->ProjectionX();
896 
897  hEventProjX->SetLineColor(kBlue);
898  TH1D* hEventProjY = fHistEvent[1]->ProjectionX();
899  hEventProjY->SetLineColor(kRed);
900  MakeNiceHisto(hEventProjX,cTab->GetPad(1)->GetPad(2),"");
901  hEventProjY->DrawCopy("same");
902  TH1D* hRatio = (TH1D*)hEventProjX->Clone();
903  hRatio->SetLineColor(kBlack);
904  hRatio->Divide(hEventProjY);
905  hRatio->SetMinimum(0);
906  hRatio->SetMaximum(2);
907  MakeNiceHisto(hRatio,cTab->GetPad(2)->GetPad(2),"");
908 
909 
910  TLine* line = new TLine();
911  line->SetLineWidth(1);
912  line->SetLineStyle(2);
913  line->DrawLine(0,1,511,1);
914  // cTab->GetPad(ndet+1)->cd(1);
915  }
916  cTab->Update();
917 }
918 
919 
920 
921 void HarpoRecoMonitorGui::DisplayEmptyMap(TRootEmbeddedCanvas* ecTab,Int_t copy)
922 {
923  Info("DisplayMap","%p",fEvent);
924 
925  if(fEvent == 0) return;
926 
927  // if(!cTabEvent){
928  TCanvas* cTab = ecTab->GetCanvas();
929  cTab->GetPad(1)->Delete();
930  cTab->GetPad(2)->Delete();
931  cTab->Divide(2);
932 
933  TLatex* latex = new TLatex();
934  latex->SetTextFont(132);
935  latex->SetTextAlign(12);
936  latex->SetTextSize(0.08);
937 
938  for(Int_t ndet=0;ndet<2;ndet++) {
939  if(!gHDetSet->isExist(ndet)) continue;
940  Int_t color = ndet? kRed : kBlue;
941  latex->SetTextColor(color);
942  // TH2F* hEvent = new TH2F("hEvent",";time [tb]; channel",508,0,508,304,0,304);
943  // fHistEvent[ndet]->Reset();
944 
945  MakeNiceHisto(fHistEventEmpty[ndet],cTab->GetPad(ndet+1),"col",copy);
946 
947  TLine* line = new TLine();
948  line->SetLineWidth(2);
949  line->SetLineStyle(2);
950  line->DrawLine(0,194,511,194);
951  line->DrawLine(0,94,511,94);
952 
953  if(ndet==0){
954  line->SetLineWidth(1);
955  line->SetLineStyle(3);
956  line->DrawLine(0,259,511,259);
957  line->DrawLine(0,226,511,226);
958  line->DrawLine(0,160.5,511,160.5);
959  line->DrawLine(0,127.5,511,127.5);
960  line->DrawLine(0,61.5,511,61.5);
961  line->DrawLine(0,28.5,511,28.5);
962  }
963  //hEvent->Delete();
964  }
965 
966  cTab->Update();
967 }
968 
969 
970 
971 
972 // void HarpoRecoMonitorGui::DisplayClusters(TRootEmbeddedCanvas* ecTab)
973 // {
974 
975 // TCanvas* cTab = ecTab->GetCanvas();
976 // HarpoRecoEvent* reco = fEvent->GetRecoEvent();
977 // TClonesArray* clArray = reco->GetClustersArray();
978 // Int_t nCl = clArray->GetEntries();
979 
980 // TGraph* gCX = new TGraph();
981 // TGraph* gCY = new TGraph();
982 // TGraph* gTX = new TGraph();
983 // TGraph* gTY = new TGraph();
984 
985 // TGraph* gTXnoise = new TGraph();
986 // TGraph* gTYnoise = new TGraph();
987 // gTXnoise->SetMarkerStyle(28);
988 // gTYnoise->SetMarkerStyle(28);
989 // // TGraph* gCXnotrack = new TGraph();
990 // // TGraph* gCYnotrack = new TGraph();
991 // // TGraph* gTXnotrack = new TGraph();
992 // // TGraph* gTYnotrack = new TGraph();
993 
994 // for(Int_t icl = 0; icl<nCl; icl++){
995 // HarpoRecoClusters* cluster = (HarpoRecoClusters*)clArray->At(icl);
996 // Int_t ind = cluster->GetIndex();
997 // Double_t mean = cluster->GetMean();
998 // Int_t plane = cluster->GetPlane();
999 // Int_t type = cluster->GetType();
1000 // Int_t width = cluster->GetWidth();
1001 // Double_t q = cluster->GetQ();
1002 // Int_t idcluster = cluster->GetIdClusterTrack();
1003 // if(plane!=XPLANE && plane !=YPLANE) continue;
1004 // // if(type == CCLUSTER && width<10) continue;
1005 // // if(type == TCLUSTER && width>10) continue;
1006 // if(plane==XPLANE && type == CCLUSTER) gCX->SetPoint(gCX->GetN(),mean,ind+0.5);
1007 // if(plane==XPLANE && type == TCLUSTER) gTX->SetPoint(gTX->GetN(),ind+0.5,mean);
1008 // if(plane==YPLANE && type == CCLUSTER) gCY->SetPoint(gCY->GetN(),mean,ind+0.5);
1009 // if(plane==YPLANE && type == TCLUSTER) gTY->SetPoint(gTY->GetN(),ind+0.5,mean);
1010 
1011 
1012 
1013 // if(cluster->GetQuality()<0){
1014 // // std::cout << "Noisy cluster: " << icl << " " << cluster->GetQuality() << std::endl;
1015 // if(plane==XPLANE && type == TCLUSTER) gTXnoise->SetPoint(gTXnoise->GetN(),ind+0.5,mean);
1016 // if(plane==YPLANE && type == TCLUSTER) gTYnoise->SetPoint(gTYnoise->GetN(),ind+0.5,mean);
1017 // }
1018 // // if(idcluster>=0) continue;
1019 // // if(plane==0 && type == 0) gCXnotrack->SetPoint(gCXnotrack->GetN(),mean,ind);
1020 // // if(plane==0 && type == 1) gTXnotrack->SetPoint(gTXnotrack->GetN(),ind,mean);
1021 // // if(plane==1 && type == 0) gCYnotrack->SetPoint(gCYnotrack->GetN(),mean,ind);
1022 // // if(plane==1 && type == 1) gTYnotrack->SetPoint(gTYnotrack->GetN(),ind,mean);
1023 // }
1024 
1025 // gCX->SetMarkerStyle(7);
1026 // gTX->SetMarkerStyle(7);
1027 // gCY->SetMarkerStyle(7);
1028 // gTY->SetMarkerStyle(7);
1029 // gCX->SetMarkerSize(0.5);
1030 // gTX->SetMarkerSize(0.5);
1031 // gCY->SetMarkerSize(0.5);
1032 // gTY->SetMarkerSize(0.5);
1033 // gCX->SetMarkerColor(kGray);
1034 // gCY->SetMarkerColor(kGray);
1035 // // gCXnotrack->SetMarkerStyle(7);
1036 // // gTXnotrack->SetMarkerStyle(7);
1037 // // gCYnotrack->SetMarkerStyle(7);
1038 // // gTYnotrack->SetMarkerStyle(7);
1039 
1040 // std::cout << gCX->GetN() << " " << gCY->GetN() << " " << gTX->GetN() << " " << gTY->GetN() << std::endl;
1041 
1042 
1043 // cTab->cd(1);
1044 // if(gCX->GetN()>0) gCX->Draw("Psame");
1045 // if(gTX->GetN()>0) gTX->Draw("Psame");
1046 // if(gTXnoise->GetN()>0) gTXnoise->Draw("Psame");
1047 // cTab->cd(2);
1048 // if(gCY->GetN()>0) gCY->Draw("Psame");
1049 // if(gTY->GetN()>0) gTY->Draw("Psame");
1050 // if(gTYnoise->GetN()>0) gTYnoise->Draw("Psame");
1051 
1052 // cTab->Update();
1053 // }
1054 
1055 void HarpoRecoMonitorGui::DisplayClustersTracks(TRootEmbeddedCanvas* ecTab)
1056 {
1057 
1058  TCanvas* cTab = ecTab->GetCanvas();
1059  HarpoRecoEvent* reco = fEvent->GetRecoEvent();
1060  TClonesArray* clArray = reco->GetClustersArray();
1061  Int_t nCl = clArray->GetEntries();
1062 
1063 
1064 
1065  TGraph* gX[10];
1066  TGraph* gY[10];
1067  TGraph* gXnoise[10];
1068  TGraph* gYnoise[10];
1069  for(Int_t i = 0; i<10; i++){
1070  gX[i] = new TGraph();
1071  gY[i] = new TGraph();
1072  gX[i]->SetMarkerStyle(7);
1073  gY[i]->SetMarkerStyle(7);
1074  gX[i]->SetMarkerSize(0.5);
1075  gY[i]->SetMarkerSize(0.5);
1076  gX[i]->SetMarkerColor(i+2);
1077  gY[i]->SetMarkerColor(i+2);
1078 
1079  gXnoise[i] = new TGraph();
1080  gYnoise[i] = new TGraph();
1081  gXnoise[i]->SetMarkerStyle(28);
1082  gYnoise[i]->SetMarkerStyle(28);
1083  gXnoise[i]->SetMarkerSize(1);
1084  gYnoise[i]->SetMarkerSize(1);
1085  gXnoise[i]->SetMarkerColor(i+2);
1086  gYnoise[i]->SetMarkerColor(i+2);
1087  }
1088 
1089  for(Int_t icl = 0; icl<nCl; icl++){
1090  HarpoRecoClusters* cluster = (HarpoRecoClusters*)clArray->At(icl);
1091  Int_t ind = cluster->GetIndex();
1092  Double_t mean = cluster->GetMean();
1093  Int_t plane = cluster->GetPlane();
1094  Int_t type = cluster->GetType();
1095  Int_t nTr = cluster->GetNtr();
1096  for(Int_t k = 0; k<nTr; k++){
1097  Int_t itr = cluster->GetIdClusterTrack(k);
1098  // std::cout << "Track: " << itr << std::endl;
1099  if(itr<0) continue;
1100  if(itr>=10) continue;
1101  if(plane!=XPLANE && plane !=YPLANE) continue;
1102  if(plane==XPLANE && type == CCLUSTER) gX[itr]->SetPoint(gX[itr]->GetN(),mean,ind+0.5);
1103  if(plane==XPLANE && type == TCLUSTER) gX[itr]->SetPoint(gX[itr]->GetN(),ind+0.5,mean);
1104  if(plane==YPLANE && type == CCLUSTER) gY[itr]->SetPoint(gY[itr]->GetN(),mean,ind+0.5);
1105  if(plane==YPLANE && type == TCLUSTER) gY[itr]->SetPoint(gY[itr]->GetN(),ind+0.5,mean);
1106  if(cluster->GetQuality()<0){
1107  if(plane==XPLANE && type == CCLUSTER) gXnoise[itr]->SetPoint(gXnoise[itr]->GetN(),mean,ind+0.5);
1108  if(plane==XPLANE && type == TCLUSTER) gXnoise[itr]->SetPoint(gXnoise[itr]->GetN(),ind+0.5,mean);
1109  if(plane==YPLANE && type == CCLUSTER) gYnoise[itr]->SetPoint(gYnoise[itr]->GetN(),mean,ind+0.5);
1110  if(plane==YPLANE && type == TCLUSTER) gYnoise[itr]->SetPoint(gYnoise[itr]->GetN(),ind+0.5,mean);
1111  }
1112  }
1113  }
1114 
1115  TLegend* lX = new TLegend(0.1,0.5,0.3,0.98);
1116  TLegend* lY = new TLegend(0.1,0.5,0.3,0.98);
1117  for(Int_t i = 0; i<10; i++){
1118  cTab->cd(1);
1119  if(gX[i]->GetN()>0){
1120  std::cout << "gX[" << i << "] => " << gX[i]->GetN() << endl;
1121  gX[i]->Draw("Psame");
1122  gXnoise[i]->Draw("Psame");
1123  lX->AddEntry(gX[i],Form("%d",i),"P");
1124  }
1125  cTab->cd(2);
1126  if(gY[i]->GetN()>0){
1127  std::cout << "gY[" << i << "] => " << gY[i]->GetN() << endl;
1128  gY[i]->Draw("Psame");
1129  gYnoise[i]->Draw("Psame");
1130  lY->AddEntry(gY[i],Form("%d",i),"P");
1131  }
1132  // if(fTrackingType==2)
1133  // fTracking2->hNcl->Draw();
1134  }
1135  cTab->cd(1);
1136  lX->Draw();
1137  cTab->cd(2);
1138  lY->Draw();
1139  cTab->Update();
1140 }
1141 
1142 void HarpoRecoMonitorGui::DisplayTracks(TRootEmbeddedCanvas* ecTab)
1143 {
1144 
1145  TFile* savefile = NULL;
1146  Char_t filename[256];
1147  sprintf(filename,"plots/tracking/run%d_evt%ld.root",
1148  fEvent->GetRunHeader()->GetRun(),
1149  fEvent->GetHeader()->GetEvtNo());
1150  Bool_t save = !gSystem->AccessPathName(filename);
1151  if(save) savefile = new TFile(filename,"update");
1152 
1153  TCanvas* cTab = ecTab->GetCanvas();
1154  HarpoRecoEvent* reco = fEvent->GetRecoEvent();
1155  TClonesArray* trArray = reco->GetTracksArray();
1156  Int_t nTr = trArray->GetEntries();
1157  // Info("DisplayTracks","Ntracks = %d (%d)",nTr,reco->GetTrackType());
1158  TClonesArray* clArray = reco->GetClustersArray();
1159  Int_t nCl = clArray->GetEntries();
1160  // Int_t colorList[2][nTr];
1161 
1162  TLegend* l[2];
1163  l[0] = new TLegend(0.1,0.5,0.3,0.98);
1164  l[1] = new TLegend(0.1,0.5,0.3,0.98);
1165  TLatex* latex = new TLatex();
1166  latex->SetTextFont(132);
1167  latex->SetTextAlign(12);
1168  latex->SetTextSize(0.08);
1169 
1170  Double_t angleX[10], angleY[10];
1171  Int_t nclX[10], nclY[10];
1172  // Int_t planeTr[10];
1173  TF1* line[2][nTr];
1174  TGraph* g[2][nTr];
1175  // Int_t color = 2;
1176 
1177 
1178  TGraph* gAll[2];
1179  gAll[0] = new TGraph();
1180  gAll[1] = new TGraph();
1181  gAll[0]->SetMarkerStyle(6);
1182  gAll[1]->SetMarkerStyle(6);
1183  gAll[0]->SetMarkerColor(kGray);
1184  gAll[1]->SetMarkerColor(kGray);
1185  for(Int_t icl = 0; icl<nCl; icl++){
1186  HarpoRecoClusters* cluster = (HarpoRecoClusters*)clArray->At(icl);
1187  Int_t ndet = cluster->GetPlane();
1188  Double_t x = cluster->GetX();
1189  Double_t z = cluster->GetZ();
1190  gAll[ndet]->SetPoint(gAll[ndet]->GetN(),z,x);
1191  }
1192  cTab->cd(1);
1193  gAll[0]->Draw("Psame");
1194  cTab->cd(2);
1195  gAll[1]->Draw("Psame");
1196 
1197  for(Int_t itr = 0; itr<nTr; itr++){
1198 
1199  HarpoRecoTracks* track = (HarpoRecoTracks*)trArray->At(itr);
1200 
1201  Int_t ndet = track->GetPlane();
1202  Int_t trId = track->GetNtrack();
1203  Int_t color = trId+2;
1204 
1205  //TGraph*
1206  g[ndet][itr] = new TGraph();
1207  g[ndet][itr]->SetMarkerStyle(6);
1208  g[ndet][itr]->SetMarkerColor(color);
1209  for(Int_t icl = 0; icl<nCl; icl++){
1210  HarpoRecoClusters* cluster = (HarpoRecoClusters*)clArray->At(icl);
1211  if(cluster->GetPlane()!=ndet) continue;
1212  Bool_t test = kFALSE;
1213  Int_t nTr = cluster->GetNtr();
1214  for(Int_t i = 0; i<nTr; i++)
1215  if(cluster->GetIdClusterTrack(i)==trId) test = kTRUE;
1216  if(!test) continue;
1217  //if(cluster->GetIdClusterTrack()!=trId) continue;
1218  Double_t x = cluster->GetX();
1219  Double_t z = cluster->GetZ();
1220  //Info("DisplayTracks","%g %g",z,x);
1221  g[ndet][itr]->SetPoint(g[ndet][itr]->GetN(),z,x);
1222  }
1223 
1224  Double_t x0 = track->GetX0();
1225  Double_t slope = track->GetAngleTrack();
1226 
1227  Double_t xStart = track->GetXstart();
1228  Double_t zStart = track->GetZstart();
1229  Double_t xEnd = track->GetXend();
1230  Double_t zEnd = track->GetZend();
1231  Info("DisplayTracks","%g %g %g %g",xStart,zStart,xEnd,zEnd);
1232 
1233  cTab->cd(ndet+1);
1234  TEllipse* eStart = new TEllipse(zStart,xStart,4);
1235  eStart->SetFillColor(color);
1236  eStart->Draw();
1237  TEllipse* eEnd = new TEllipse(zEnd,xEnd,4);
1238  eEnd->SetFillColor(color);
1239  eEnd->Draw();
1240 
1241  if(0){
1242  HarpoDccMap* m = fEvent->GetDccMap(ndet);
1243  Int_t n = 0;
1244  TGraph* gStart = new TGraph();
1245  Int_t l = 0, start = 1000;
1246  Bool_t empty = kFALSE;
1247  for(Int_t i=0;i<1000;i++){
1248  Double_t phi = i*4*TMath::Pi()/1000;
1249  Double_t xTmp = xStart + 30*TMath::Cos(phi);
1250  Double_t zTmp = zStart + 30*TMath::Sin(phi);
1251  Int_t channel = Int_t(xTmp);
1252  Int_t timebin = Int_t(zTmp);
1253  if(channel<0 || channel>=NCHAN) continue;
1254  if(timebin<0 || timebin>=NADC) continue;
1255  Int_t q = m->GetData(channel,timebin);
1256  if(q>0){
1257  gStart->SetPoint(n,zTmp,xTmp);
1258  n++;
1259  empty = kFALSE;
1260  }else{
1261  if(!empty) start = i;
1262  if(i-start>l) l = i-start;
1263  empty = kTRUE;
1264  }
1265  }
1266  gStart->SetLineWidth(2);
1267  gStart->SetLineStyle(2);
1268  gStart->Draw("Lsame");
1269  latex->DrawLatex(zStart,xStart,Form("%d",l));
1270  n = 0;
1271  l = 0; start = 1000;
1272  TGraph* gEnd = new TGraph();
1273  for(Int_t i=0;i<1000;i++){
1274  Double_t phi = i*4*TMath::Pi()/1000;
1275  Double_t xTmp = xEnd + 30*TMath::Cos(phi);
1276  Double_t zTmp = zEnd + 30*TMath::Sin(phi);
1277  Int_t channel = Int_t(xTmp);
1278  Int_t timebin = Int_t(zTmp);
1279  Int_t q;
1280  if(channel<0 || channel>=NCHAN || timebin<0 || timebin>=NADC) q = 0;
1281  else q = m->GetData(channel,timebin);
1282  if(q>0){
1283  gEnd->SetPoint(n,zTmp,xTmp);
1284  n++;
1285  empty = kFALSE;
1286  }else{
1287  if(!empty) start = i;
1288  if(i-start>l) l = i-start;
1289  empty = kTRUE;
1290  }
1291  }
1292  gEnd->SetLineWidth(2);
1293  gEnd->SetLineStyle(3);
1294  gEnd->Draw("Lsame");
1295  latex->DrawLatex(zEnd,xEnd,Form("%d",l));
1296  // Double_t frac = n*0.001
1297  }
1298 
1299 
1300 
1301  Double_t zmin, zmax;
1302  if(zEnd<zStart){
1303  zmin = zEnd;
1304  zmax = zStart;
1305  }else{
1306  zmax = zEnd;
1307  zmin = zStart;
1308  }
1309  line[ndet][itr] = new TF1(Form("line%d_%d",itr,ndet),"pol1",zmin,zmax);
1310 
1311  line[ndet][itr]->SetParameter(0,x0);// + z0*slope);
1312  line[ndet][itr]->SetParameter(1,slope);
1313 
1314  l[ndet]->AddEntry(line[ndet][itr],Form("%d (%d)",trId,track->GetQtTrack()),"L");
1315  line[ndet][itr]->SetLineColor(color);
1316  g[ndet][itr]->Draw("Psame");
1317  line[ndet][itr]->DrawCopy("same");
1318  if(save){
1319  g[ndet][itr]->Write(Form("g_%d_%d",itr,ndet));
1320  line[ndet][itr]->Write(Form("line_%d_%d",itr,ndet));
1321  }
1322  }
1323  if(save) savefile->Close();
1324  cTab->cd(1);
1325  l[0]->Draw();
1326  cTab->cd(2);
1327  l[1]->Draw();
1328  cTab->Update();
1329 
1330 
1331  return;
1332  // if(fTracksCanvas && stheta && ctheta && nDraw == 10){
1333  // //Info("FindTrack","%g %g", x + RouteHough*sigtrans*ctheta, y + RouteHough*sigtrans*stheta);
1334  // // fGraphRoute[mtrack]->SetPoint(fGraphRoute[mtrack]->GetN(), x + RouteHough*sigtrans*ctheta, y + RouteHough*sigtrans*stheta);
1335  // // fGraphRoute[mtrack]->SetPoint(fGraphRoute[mtrack]->GetN(), x - RouteHough*sigtrans*ctheta, y - RouteHough*sigtrans*stheta);
1336  // fGraphRoute[mtrack]->SetPoint(fGraphRoute[mtrack]->GetN(), x + sigtrans*ctheta, y + sigtrans*stheta);
1337  // fGraphRoute[mtrack]->SetPoint(fGraphRoute[mtrack]->GetN(), x - sigtrans*ctheta, y - sigtrans*stheta);
1338  // // gRoute->SetPoint(gRoute->GetN(), x + RouteHough*sigtrans*ctheta, y + RouteHough*sigtrans*stheta);
1339  // // gRoute->SetPoint(gRoute->GetN(), x - RouteHough*sigtrans*ctheta, y - RouteHough*sigtrans*stheta);
1340  // nDraw = 0;
1341  // }
1342 
1343 
1344  if(fTrackingType==2){
1345 
1346 
1347  TClonesArray* trArrayK = reco->GetKalmanTracksArray();
1348  Int_t nTrK = trArrayK->GetEntries();
1349  TGraph* g2[2][nTrK];
1350  for(Int_t i = 0; i<nTrK; i++){
1351  g2[0][i] = new TGraph();
1352  g2[1][i] = new TGraph();
1353  }
1354  for(Int_t icl = 0; icl<nCl; icl++){
1355  HarpoRecoClusters* cluster = (HarpoRecoClusters*)clArray->At(icl);
1356  Int_t plane = cluster->GetPlane();
1357  Int_t idTr = cluster->GetIdClusterTrack();
1358  if(plane!=XPLANE && plane !=YPLANE) continue;
1359  if(idTr<0) continue;
1360  if(idTr>=nTrK) continue;
1361  g2[plane][idTr]->SetPoint(g2[plane][idTr]->GetN(),cluster->GetZfit(0),cluster->GetXfit(0));
1362  }
1363 
1364  Info("DisplayTracks","NtracksK = %d",nTrK);
1365  // TLine* line[nTrK];
1366  for(Int_t itr = 0; itr<nTrK; itr++){
1367  HarpoRecoKalmanTracks* track = (HarpoRecoKalmanTracks*)trArrayK->At(itr);
1368  Int_t plane = track->GetPlane();
1369  Int_t trId = track->GetNtrack();
1370  cTab->cd(plane+1);
1371  if(!g2[plane][trId]) continue;
1372  if(g2[plane][trId]->GetN()<1) continue;
1373  Info("DisplayTracks","Plane %d, Tr %d => Ncl = %d",plane, trId,g2[plane][trId]->GetN());
1374  g2[plane][trId]->SetMarkerColor(trId+2);
1375  g2[plane][trId]->SetMarkerStyle(6);
1376  g2[plane][trId]->Draw("Psame");
1377  l[plane]->AddEntry(g2[plane][trId],Form("%d",trId),"P");
1378 
1379  // line[plane][itr] = new TLine();
1380  // // lineT->SetLineStyle(10);
1381  // // lineT->SetLineWidth(2);
1382  // line[plane][itr]->SetLineColor(trId+2);
1383  // line[plane][itr]->DrawLine(track->GetZstart(),track->GetXstart(),track->GetZstart()+100*track->GetPzStart(),track->GetXstart()+100*track->GetPxStart());
1384  // line[plane][itr]->DrawLine(track->GetZend(),track->GetXend(),track->GetZend()+100*track->GetPzEnd(),track->GetXend()+100*track->GetPxEnd());
1385 
1386 
1387 
1388  }
1389  cTab->cd(1);
1390  l[0]->Draw();
1391  cTab->cd(2);
1392  l[1]->Draw();
1393  cTab->Update();
1394  return;
1395  }
1396 
1397 
1398 
1399 
1400  for(Int_t itr = 0; itr<nTr; itr++){
1401 
1402  HarpoRecoTracks* track = (HarpoRecoTracks*)trArray->At(itr);
1403 
1404  Int_t ndet = track->GetPlane();
1405  // Double_t theta = track->GetMtheta();
1406  // Double_t rho = track->GetMrho();
1407  if(fTrackingType == 3){
1408  fInfoBox->NewEntry(Form("SigRho = %g",((HarpoRecoHoughTracks*)track)->GetSigrho()));
1409  Info("DisplayTracks","SigRho = %g",((HarpoRecoHoughTracks*)track)->GetSigrho());
1410  if(!((HarpoRecoHoughTracks*)track)->GetSigrho()) continue;
1411  }
1412  Double_t angX=track->GetAngleTrack();;
1413  if(ndet==0) cout<<"angle="<<angX<<endl;
1414  // planeTr[itr] = ndet;
1415  if(ndet==0) angleX[itr]=track->GetAngleTrack();
1416  if(ndet==1) angleY[itr]=track->GetAngleTrack();
1417  if(ndet==0) nclX[itr]=track->GetNclusterTrack();
1418  if(ndet==1) nclY[itr]=track->GetNclusterTrack();
1419  // Int_t rlambda=0;
1420  Int_t trId = track->GetNtrack();
1421 
1422  Int_t color = trId+2;//colorList[ndet][trId];//itr+2;
1423 
1424  Double_t x0 = track->GetX0();//start();
1425  // fInfoBox->NewEntry(Form("X0 = %g",x0));
1426  // Double_t z0 = 0;//track->GetZstart();
1427  // Double_t slope = TMath::Tan(track->GetAngleTrack());
1428  Double_t slope = track->GetAngleTrack();
1429 
1430  Double_t zmin, zmax;
1431  if(track->GetZend()<track->GetZstart()){
1432  zmin = track->GetZend();
1433  zmax = track->GetZstart();
1434  }else{
1435  zmax = track->GetZend();
1436  zmin = track->GetZstart();
1437  }
1438  line[ndet][itr] = new TF1(Form("line%d",itr),"pol1",zmin,zmax);
1439 
1440  line[ndet][itr]->SetParameter(0,x0);// + z0*slope);
1441  line[ndet][itr]->SetParameter(1,slope);
1442 
1443  l[ndet]->AddEntry(line[ndet][itr],Form("%d (%d)",trId,track->GetQtTrack()),"L");
1444  line[ndet][itr]->SetLineColor(color);
1445  cTab->cd(ndet+1);
1446  line[ndet][itr]->DrawCopy("same");
1447 
1448  cTab->cd(ndet+1);
1449  }
1450  cTab->cd(1);
1451  l[0]->Draw();
1452  cTab->cd(2);
1453  l[1]->Draw();
1454 
1455  if(fTrackingType==2){
1456  cTab->Update();
1457  return;
1458  }
1459 
1460  // TGraph* gXT[10];
1461  // TGraph* gYT[10];
1462  TGraph* gCXAssoc[10];
1463  TGraph* gTXAssoc[10];
1464  TGraph* gCYAssoc[10];
1465  TGraph* gTYAssoc[10];
1466 
1467  for(Int_t i = 0; i<10; i++){
1468  // gXT[i] = new TGraph();
1469  // gYT[i] = new TGraph();
1470  gCXAssoc[i] = new TGraph();
1471  gCYAssoc[i] = new TGraph();
1472  gTXAssoc[i] = new TGraph();
1473  gTYAssoc[i] = new TGraph();
1474  // Info("DisplayTracks","*Draw Track %d %p",i,gCXAssoc[i]);
1475 
1476  angleX[i]=100.;
1477  angleY[i]=100.;
1478  nclX[i] = -1;
1479  nclY[i] = -1;
1480 
1481  Int_t color = i+2;
1482  // gXT[i]->SetMarkerStyle(10);
1483  // gYT[i]->SetMarkerStyle(10);
1484  // gXT[i]->SetLineColor(color);
1485  // gYT[i]->SetLineColor(color);
1486  // gXT[i]->SetMarkerColor(color);
1487  // gYT[i]->SetMarkerColor(color);
1488 
1489  gCXAssoc[i] -> SetMarkerStyle(7);
1490  gCYAssoc[i] -> SetMarkerStyle(7);
1491  gTXAssoc[i] -> SetMarkerStyle(7);
1492  gTYAssoc[i] -> SetMarkerStyle(7);
1493 
1494  gCXAssoc[i] -> SetMarkerSize(0.5);
1495  gCYAssoc[i] -> SetMarkerSize(0.5);
1496  gTXAssoc[i] -> SetMarkerSize(0.5);
1497  gTYAssoc[i] -> SetMarkerSize(0.5);
1498 
1499  gCXAssoc[i] -> SetMarkerColor(color);
1500  gCYAssoc[i] -> SetMarkerColor(color);
1501  gTXAssoc[i] -> SetMarkerColor(color);
1502  gTYAssoc[i] -> SetMarkerColor(color);
1503  }
1504  Info("DisplayTracks","Draw Track %p (%d)",gCXAssoc[0],nTr);
1505 
1506  // Info("DisplayTracks","Draw Track %p",gCXAssoc[0]);
1507 
1508  for(Int_t icl = 0; icl<nCl; icl++){
1509  HarpoRecoClusters* cluster = (HarpoRecoClusters*)clArray->At(icl);
1510  Int_t ind = cluster->GetIndex();
1511  Double_t mean = cluster->GetMean();
1512  Int_t plane = cluster->GetPlane();
1513  Int_t type = cluster->GetType();
1514  // Int_t idcluster = cluster->GetIdClusterTrack();
1515  if(plane!=XPLANE && plane !=YPLANE) continue;
1516 
1517  for(Int_t i = 0; i<10; i++){
1518  Int_t itr = cluster->GetIdClusterTrack(i);
1519  //std::cout << "****** " << i << " => " << itr << " ******" << std::endl;
1520  if(itr<0) continue;
1521  if(itr>=10) continue;
1522  //if(planeTr[itr] != plane) continue;
1523  //if(planeTr[itr] == plane){
1524  // if(ndet==0 && plane==0 && type == 0 && idcluster==itr) gCXAssoc[itr]->SetPoint(gCXAssoc[itr]->GetN(),mean,ind);
1525  // if(ndet==0 && plane==0 && type == 1 && idcluster==itr) gTXAssoc[itr]->SetPoint(gTXAssoc[itr]->GetN(),ind,mean);
1526  // if(ndet==1 && plane==1 && type == 0 && idcluster==itr) gCYAssoc[itr]->SetPoint(gCYAssoc[itr]->GetN(),mean,ind);
1527  // if(ndet==1 && plane==1 && type == 1 && idcluster==itr) gTYAssoc[itr]->SetPoint(gTYAssoc[itr]->GetN(),ind,mean);
1528  if(plane==XPLANE && type == CCLUSTER) gCXAssoc[itr]->SetPoint(gCXAssoc[itr]->GetN(),mean,ind);
1529  if(plane==XPLANE && type == TCLUSTER) gTXAssoc[itr]->SetPoint(gTXAssoc[itr]->GetN(),ind,mean);
1530  if(plane==YPLANE && type == CCLUSTER) gCYAssoc[itr]->SetPoint(gCYAssoc[itr]->GetN(),mean,ind);
1531  if(plane==YPLANE && type == TCLUSTER) gTYAssoc[itr]->SetPoint(gTYAssoc[itr]->GetN(),ind,mean);
1532 
1533  //}
1534  //}
1535  }
1536 
1537  }
1538  // Info("DisplayTracks","Draw Track %p",gCXAssoc[0]);
1539 
1540  Double_t ylatexX = 280, ylatexY = 280;
1541  for(Int_t i = 0; i<10; i++){
1542  cTab->cd(1);
1543  // if(!gXT[i]) continue;
1544  // if(gXT[i]->GetN()>0) gXT[i]->Draw("Psame");
1545  //Info("DisplayTracks","Draw Track %d %p",i,gCXAssoc[i]);
1546  if(!gCXAssoc[i]) continue;
1547  if(gCXAssoc[i]->GetN()>0)
1548  gCXAssoc[i]->Draw("Psame");
1549  if(gTXAssoc[i]->GetN()>0)
1550  gTXAssoc[i]->Draw("Psame");
1551  latex->SetTextSize(0.06);
1552  latex->SetTextColor(i+2);
1553  if(angleX[i] != 100){
1554  latex->DrawLatex(10,ylatexX,Form("track %d: %.2f %d",i, angleX[i]*180./TMath::Pi(), nclX[i]));
1555  ylatexX -= 20;
1556  }
1557 
1558  // if(fTrackingType == 3 && planeTr[i] == XPLANE){
1559  // TGraph* gRouteX = fTracking3->GetGraphRoute(i);
1560  // gRouteX->SetMarkerColor(i+2);
1561  // gRouteX->SetLineColor(i+2);
1562  // gRouteX->SetLineStyle(3);
1563  // if(gRouteX) gRouteX->Draw("Lsame");
1564  // }
1565 
1566  cTab->cd(2);
1567  // if(gYT[i]->GetN()>0) gYT[i]->Draw("Psame");
1568  if(gCYAssoc[i]->GetN()>0) gCYAssoc[i]->Draw("Psame");
1569  if(gTYAssoc[i]->GetN()>0) gTYAssoc[i]->Draw("Psame");
1570  latex->SetTextSize(0.06);
1571  latex->SetTextColor(i+2);
1572  if(angleY[i] != 100){
1573  latex->DrawLatex(10,ylatexY,Form("track %d: %.2f %d",i, angleY[i]*180./TMath::Pi(),nclY[i]));
1574  ylatexY -= 20;
1575  }
1576  // if(fTrackingType == 3 && planeTr[i] == YPLANE){
1577  // TGraph* gRouteY = fTracking3->GetGraphRoute(i);
1578  // gRouteY->SetMarkerColor(i+2);
1579  // gRouteY->SetLineColor(i+2);
1580  // gRouteY->SetLineStyle(3);
1581  // if(gRouteY) gRouteY->Draw("Lsame");
1582  // }
1583 
1584  // gTXAssoc[i]->Delete();
1585  // gCXAssoc[i]->Delete();
1586  // gTYAssoc[i]->Delete();
1587  // gCYAssoc[i]->Delete();
1588  }
1589 
1590  cTab->Update();
1591 
1592 }
1593 
1594 
1595 
1596 void HarpoRecoMonitorGui::DisplayVertex(TRootEmbeddedCanvas* ecTab)
1597 {
1598 
1599  TCanvas* c = ecTab->GetCanvas();
1600  TClonesArray* vArray = fEvent->GetRecoEvent()->GetVertexArray();
1601  Int_t nV = vArray->GetEntries();
1602  Info("DisplayAnalysis","nV = %d",nV);
1603  for(Int_t i = 0; i<nV; i++){
1604  HarpoRecoVertex* vertex = (HarpoRecoVertex*)vArray->At(i);
1605  Int_t plane = vertex->GetPlane();
1606  Double_t xV = vertex->GetXvertex();
1607  Double_t zV = vertex->GetZvertex();
1608  Double_t pxV = vertex->GetPxVertex();
1609  Double_t pzV = vertex->GetPzVertex();
1610  Double_t thV = vertex->GetThetaVertex();
1611  c->cd(plane+1);
1612  Info("DisplayAnalysis","%d %g %g",plane,zV,xV);
1613  TEllipse* eStart = new TEllipse(zV,xV,4);
1614  eStart->SetLineColor(kGray);
1615  if(vertex->GetChi2Vertex()<0)
1616  eStart->SetFillColor(kGray);
1617  else
1618  eStart->SetFillColor(kGreen);
1619  eStart->Draw();
1620 
1621  TArrow* arrow = new TArrow();
1622  arrow->SetLineColor(kGray);
1623  arrow->SetFillColor(kGray);
1624  arrow->SetArrowSize(0.01);
1625  arrow->DrawArrow(zV,xV,zV+30*pzV,xV+30*pxV);
1626 
1627  Double_t cTh = TMath::Cos(thV*0.5);
1628  Double_t sTh = TMath::Sin(thV*0.5);
1629  Double_t px1 = pxV*cTh + pzV*sTh;
1630  Double_t pz1 = pzV*cTh - pxV*sTh;
1631  Double_t px2 = pxV*cTh - pzV*sTh;
1632  Double_t pz2 = pzV*cTh + pxV*sTh;
1633  TLine* l1 = new TLine();
1634  l1->SetLineColor(kGray);
1635  l1->SetLineWidth(3);
1636  l1->DrawLine(zV,xV,zV+30*pz1,xV+30*px1);
1637  TLine* l2 = new TLine();
1638  l2->SetLineColor(kGray);
1639  l2->SetLineWidth(2);
1640  l2->DrawLine(zV,xV,zV+30*pz2,xV+30*px2);
1641 
1642  // Double_t x[5], z[5];
1643  // Double_t a[5] = {-20, 60, 60,-20,-20};
1644  // Double_t b[5] = { 30, 30,-30,-30, 30};
1645  // for(Int_t k = 0; k<5; k++){
1646  // x[k] = xV + a[k]*pxV + b[k]*pzV;
1647  // z[k] = zV + a[k]*pzV - b[k]*pxV;
1648  // }
1649  // TPolyLine* box = new TPolyLine(5,z,x);
1650  // box->Draw();
1651 
1652 
1653 
1654  }
1655  c->Update();
1656  return;
1657 }
1658 
1659 
1660 
1661 void HarpoRecoMonitorGui::Display3D(TRootEmbeddedCanvas* ecTab)
1662 {
1663 
1664 
1665  TCanvas* cTab = ecTab->GetCanvas();
1666  // cTab->GetPad(1)->Delete();
1667  // cTab->GetPad(2)->Delete();
1668  // cTab->Divide(2);
1669  // cTab->GetPad(2)->Divide(1,2);
1670 
1671  HarpoRecoEvent* reco = fEvent->GetRecoEvent();
1672  TClonesArray* vertex3DArray = reco->GetVertex3DArray();
1673  Int_t nV3D = vertex3DArray->GetEntries();
1674  // fInfoBox->RemoveAll();
1675  for(Int_t i = 0; i<nV3D; i++){
1676  HarpoRecoVertex3D* vertex = (HarpoRecoVertex3D*)vertex3DArray->At(i);
1677  Double_t x = vertex->GetXvertex3D();
1678  Double_t y = vertex->GetYvertex3D();
1679  Double_t z = vertex->GetZvertex3D();
1680  Double_t px1 = vertex->GetPx1Vertex3D();
1681  Double_t py1 = vertex->GetPy1Vertex3D();
1682  Double_t pz1 = vertex->GetPz1Vertex3D();
1683  Double_t px2 = vertex->GetPx2Vertex3D();
1684  Double_t py2 = vertex->GetPy2Vertex3D();
1685  Double_t pz2 = vertex->GetPz2Vertex3D();
1686  Double_t angle_omega = atan2(pz2*px1-pz1*px2,pz2*py1-pz1*py2);
1687 
1688  Int_t color = i+2;
1689 
1690  cTab->cd(1);
1691  TEllipse* eStartX = new TEllipse(z,x,3);
1692  eStartX->SetLineColor(color);
1693  eStartX->SetFillColor(color);
1694  eStartX->Draw();
1695 
1696  TLine* l1x = new TLine();
1697  l1x->SetLineColor(color);
1698  l1x->SetLineWidth(2);
1699  l1x->SetLineStyle(2);
1700  l1x->DrawLine(z,x,z+100*pz1,x+100*px1);
1701  TLine* l2x = new TLine();
1702  l2x->SetLineColor(color);
1703  l2x->SetLineWidth(2);
1704  l2x->SetLineStyle(3);
1705  l2x->DrawLine(z,x,z+100*pz2,x+100*px2);
1706 
1707  cTab->cd(2);
1708  TEllipse* eStartY = new TEllipse(z,y,3);
1709  eStartY->SetLineColor(color);
1710  eStartY->SetFillColor(color);
1711  eStartY->Draw();
1712 
1713  TLine* l1y = new TLine();
1714  l1y->SetLineColor(color);
1715  l1y->SetLineWidth(2);
1716  l1y->SetLineStyle(2);
1717  l1y->DrawLine(z,y,z+100*pz1,y+100*py1);
1718  TLine* l2y = new TLine();
1719  l2y->SetLineColor(color);
1720  l2y->SetLineWidth(2);
1721  l2y->SetLineStyle(3);
1722  l2y->DrawLine(z,y,z+100*pz2,y+100*py2);
1723 
1724  if(z>350) continue;
1725 
1726  if(angle_omega>0.5*TMath::Pi()) angle_omega -= TMath::Pi();
1727  if(angle_omega<-0.5*TMath::Pi()) angle_omega += TMath::Pi();
1728  fInfoBox->NewEntry(Form("%d: omega = %g",i,angle_omega));
1729 
1730  }
1731 
1732 
1733 
1734  if (gHDetSet->isExist(SIMDET)){
1736  // Int_t nIonTr = simEvt->GetNtracks();
1737  // for(Int_t i = 0; i<nIonTr; i++){
1738  // TpcSimIonisationTrack* tr = simEvt->GetIonisationTrack(i);
1739  // Int_t nPoints = tr->GetNpoints();
1740  // for(Int_t j = 0; j<nPoints; j++){
1741  // TpcSimIonisationPoint* point = tr->GetPoint(j);
1742  // //hNeSim->Fill(point->GetNe());
1743  // }
1744  // }
1745  Double_t angle_omega_sim = 0;
1746  Double_t psim[2][3];
1747  TpcSimMCEvent* mcEvent = simEvt->GetMCEvent();
1748  Int_t nMCtr = mcEvent->GetNtracks();
1749  if(nMCtr==2){
1750  for(Int_t i = 0; i<nMCtr; i++){
1751  TpcSimMCTrack* track = mcEvent->GetTrack(i);
1752  Double_t x = track->GetX0() + 149.3;
1753  Double_t y = track->GetY0() + 149.3;
1754  Double_t z = track->GetZ0() + 228.5;
1755  Double_t px = track->GetPx();
1756  Double_t py = track->GetPy();
1757  Double_t pz = track->GetPz();
1758 
1759  TLine* lx = new TLine();
1760  lx->SetLineColor(kBlack);
1761  lx->SetLineWidth(2);
1762  lx->SetLineStyle(2+i);
1763  cTab->cd(1);
1764  lx->DrawLine(z,x,z+100*pz,x+100*px);
1765  TLine* ly = new TLine();
1766  ly->SetLineColor(kBlack);
1767  ly->SetLineWidth(2);
1768  ly->SetLineStyle(2+i);
1769  cTab->cd(2);
1770  ly->DrawLine(z,y,z+100*pz,y+100*py);
1771  }
1772 
1773 
1774  Double_t norm[2] = {0,0};
1775  for(Int_t i = 0; i<nMCtr; i++){
1776  TpcSimMCTrack* track = mcEvent->GetTrack(i);
1777  psim[i][0] = track->GetPy();
1778  psim[i][1] = track->GetPx();
1779  psim[i][2] = track->GetPz();
1780  norm[i] = TMath::Sqrt(psim[i][0]*psim[i][0]+psim[i][1]*psim[i][1]+psim[i][2]*psim[i][2]);
1781  //hPsim->Fill(track->GetPx(),track->GetPy(),track->GetPz());
1782  }
1783  Double_t u1u2 = 0;
1784  for(Int_t k = 0; k<3; k++){
1785  psim[0][k] /= norm[0];
1786  psim[1][k] /= norm[1];
1787  u1u2 += psim[0][k]*psim[1][k];
1788  }
1789 
1790  angle_omega_sim = atan2((psim[1][2]*psim[0][0]-psim[0][2]*psim[1][0]),(psim[1][2]*psim[0][1]-psim[0][2]*psim[1][1]));
1791 
1792  if(angle_omega_sim>0.5*TMath::Pi()) angle_omega_sim -= TMath::Pi();
1793  if(angle_omega_sim<-0.5*TMath::Pi()) angle_omega_sim += TMath::Pi();
1794  fInfoBox->NewEntry(Form("omega_sim = %g",angle_omega_sim));
1795  }
1796  }
1797 
1798 
1799 
1800 
1801 
1802 
1803 
1804 
1805 
1806 
1807 
1808 
1809 
1810 
1811  // TH3F* hDummy3D = new TH3F("hDummy3D",";Z;X;Y",10,0,511,10,0,288,10,0,288);
1812  // cTab->cd(1);
1813  // hDummy3D->Draw();
1814  // for(Int_t i = 0; i<nV3D; i++){
1815  // HarpoRecoVertex3D* vertex = (HarpoRecoVertex3D*)vertex3DArray->At(i);
1816  // Double_t x = vertex->GetXvertex3D();
1817  // Double_t y = vertex->GetYvertex3D();
1818  // Double_t z = vertex->GetZvertex3D();
1819  // Double_t px1 = vertex->GetPx1Vertex3D();
1820  // Double_t py1 = vertex->GetPy1Vertex3D();
1821  // Double_t pz1 = vertex->GetPz1Vertex3D();
1822  // Double_t px2 = vertex->GetPx2Vertex3D();
1823  // Double_t py2 = vertex->GetPy2Vertex3D();
1824  // Double_t pz2 = vertex->GetPz2Vertex3D();
1825 
1826 
1827  // TPolyLine3D *l1 = new TPolyLine3D(2);
1828  // l1->SetPoint(0,z,x,y);
1829  // l1->SetPoint(1,z+100*pz1,x+100*px1,y+100*py1);
1830  // l1->SetLineColor(kRed);
1831  // l1->Draw();
1832  // TPolyLine3D *l2 = new TPolyLine3D(2);
1833  // l2->SetPoint(0,z,x,y);
1834  // l2->SetPoint(1,z+100*pz2,x+100*px2,y+100*py2);
1835  // l2->SetLineColor(kBlue);
1836  // l2->Draw();
1837  // }
1838 
1839  // TClonesArray* matchArray = reco->GetMatchingArray();
1840  // Int_t nMatch = matchArray->GetEntries();
1841  // TClonesArray* trArray = reco->GetTracksArray();
1842  // Int_t nTr = trArray->GetEntries();
1843  // fInfoBox->NewEntry(Form("nMatch = %d (%d)",matchArray->GetEntries(),nTr));
1844  // if(nMatch<1) return;
1845 
1846  // TH3F* hDummy3D = new TH3F("hDummy3D",";Z;X;Y",10,0,511,10,0,288,10,0,288);
1847  // cTab->cd(1);
1848  // hDummy3D->Draw();
1849  // // MakeNiceHisto(hDummy3D,cTab->GetPad(1),"lego");
1850  // Int_t used[NTRACK][NTRACK];
1851  // for(Int_t i = 0; i<NTRACK; i++)
1852  // for(Int_t j = 0; j<NTRACK; j++)
1853  // used[i][j] = kBlack;
1854  // Int_t color = 2;
1855  // Double_t x0[nMatch], y0[nMatch], z0[nMatch], slopeX[nMatch], slopeY[nMatch];
1856  // Double_t x1[nMatch], y1[nMatch], z1[nMatch];
1857  // for(Int_t i = 0; i<nMatch; i++){
1858  // x0[i] = -1000;
1859  // y0[i] = -1000;
1860  // z0[i] = -1000;
1861  // x1[i] = -1000;
1862  // y1[i] = -1000;
1863  // z1[i] = -1000;
1864  // slopeX[i] = -1000;
1865  // slopeY[i] = -1000;
1866  // cTab->cd(1);
1867  // HarpoRecoMatching* match = (HarpoRecoMatching*)matchArray->At(i);
1868 
1869  // Int_t trX = match->GetiMatchTrX();
1870  // Int_t trY = match->GetiMatchTrY();
1871  // Int_t trX2 = match->GetiMatchTrX2();
1872  // Int_t trY2 = match->GetiMatchTrY2();
1873  // fInfoBox->NewEntry(Form("%d: (%d,%d) (%d,%d)",i,trX,trX2,trY,trY2));
1874  // if(used[trX][trY] == kBlack){
1875  // used[trX][trY] = color;
1876  // color++;
1877  // }
1878 
1879  // // if(g){
1880  // // g->SetMarkerStyle(7);
1881  // // g->Draw("Psame");
1882  // // g->SetMarkerColor(used[trX][trY]);
1883  // // }
1884 
1885  // for(Int_t itr = 0; itr<nTr; itr++){
1886 
1887  // HarpoRecoTracks* track = (HarpoRecoTracks*)trArray->At(itr);
1888  // Int_t trId = track->GetNtrack();
1889  // Int_t plane = track->GetPlane();
1890 
1891  // std::cout << "TRACK " << itr << " " << trId << " (" << trX << "," << trY << ")" << std::endl;
1892 
1893  // if(trId == trX && plane == XPLANE){
1894  // // x0[i] = track->GetMrho();
1895  // // slopeX[i] = track->GetMtheta();
1896  // slopeX[i] = TMath::Tan(track->GetAngleTrack());
1897  // x0[i] = track->GetXstart();// - track->GetZstart()*slopeX[i];
1898  // z0[i] = track->GetZstart();
1899  // x1[i] = track->GetXend();// - track->GetZstart()*slopeX[i];
1900  // z1[i] = track->GetZend();
1901  // }
1902  // if(trId == trY && plane == YPLANE){
1903  // // y0[i] = track->GetMrho();
1904  // // slopeY[i] = track->GetMtheta();
1905  // slopeY[i] = TMath::Tan(track->GetAngleTrack());
1906  // y0[i] = track->GetXstart();// - track->GetZstart()*slopeY[i];
1907  // y1[i] = track->GetXend();// - track->GetZstart()*slopeY[i];
1908  // }
1909  // }
1910  // TPolyLine3D *l = new TPolyLine3D(2);
1911  // // l->SetPoint(0,0,x0[i],y0[i]);
1912  // // l->SetPoint(1,500,x0[i]+500*slopeX[i],y0[i]+500*slopeY[i]);
1913  // l->SetPoint(0,z0[i],x0[i],y0[i]);
1914  // l->SetPoint(1,500,x0[i]+(500-z0[i])*slopeX[i],y0[i]+(500-z0[i])*slopeY[i]);
1915  // l->SetLineColor(used[trX][trY]);
1916  // l->Draw();
1917  // fInfoBox->NewEntry(Form("3D track %d: z0=%.3g, x0=%.3g, y0=%.3g, sX=%.3g, sY=%.3g", i, z0[i], x0[i], y0[i], slopeX[i], slopeY[i]));
1918  // }
1919 
1920 
1921  // for(Int_t i = 0; i<nMatch; i++){
1922  // //fInfoBox->NewEntry(Form("3D track %d: x0=%.3g, y0=%.3g, sX=%.3g, sY=%.3g", i, x0, y0, slopeX[i], slopeY[i]));
1923 
1924  // Double_t p1[3] = {slopeX[i], slopeY[i], 1};
1925  // Double_t x1[3] = {x0[i], y0[i], 0};
1926  // Double_t norm1 = 0;
1927  // for(Int_t k = 0; k<3; k++) norm1 += p1[k]*p1[k];
1928  // norm1 = TMath::Sqrt(norm1);
1929  // for(Int_t k = 0; k<3; k++) p1[k] /= norm1;
1930  // for(Int_t j = i+1; j<nMatch; j++){
1931  // Double_t p2[3] = {slopeX[j], slopeY[j], 1};
1932  // Double_t x2[3] = {x0[j], y0[j], 0};
1933  // Double_t norm2 = 0;
1934  // for(Int_t k = 0; k<3; k++) norm2 += p2[k]*p2[k];
1935  // norm2 = TMath::Sqrt(norm2);
1936  // for(Int_t k = 0; k<3; k++) p2[k] /= norm2;
1937  // Double_t u1u2 = 0, u1dX = 0, u2dX = 0;
1938  // for(Int_t k = 0; k<3; k++){
1939  // u1u2 += p1[k]*p2[k];
1940  // u1dX += p1[k]*(x1[k]-x2[k]);
1941  // u2dX += p2[k]*(x1[k]-x2[k]);
1942  // }
1943 
1944  // Double_t t1 = (u1u2*u2dX - u1dX)/(1 - u1u2*u1u2);
1945  // Double_t t2 = - (u1u2*u1dX - u2dX)/(1 - u1u2*u1u2);
1946 
1947 
1948  // Double_t xPoca1[3], xPoca2[3];
1949  // Double_t doca = 0;
1950  // for(Int_t k = 0; k<3; k++){
1951  // xPoca1[k] = x1[k] + t1*p1[k];
1952  // xPoca2[k] = x2[k] + t2*p2[k];
1953  // doca += (xPoca1[k]-xPoca2[k])*(xPoca1[k]-xPoca2[k]);
1954  // }
1955  // doca = TMath::Sqrt(doca);
1956  // if(doca>0.01){
1957  // hDoca->Fill(doca);
1958  // TPolyLine3D *lPoca = new TPolyLine3D(2);
1959  // lPoca->SetPoint(0,xPoca1[2],xPoca1[0],xPoca1[1]);
1960  // lPoca->SetPoint(1,xPoca2[2],xPoca2[0],xPoca2[1]);
1961  // lPoca->Draw();
1962  // }
1963 
1964  // Double_t angle_open=acos(u1u2/(norm1*norm2));
1965 
1966  // Double_t angle_omega = atan2((p2[2]*p1[0]-p1[2]*p2[0]),(p2[2]*p1[1]-p1[2]*p2[1]));
1967  // hOpenAngle->Fill(angle_open*180./TMath::Pi());
1968  // hOmegaAngle->Fill(angle_omega*180./TMath::Pi());
1969 
1970  // //fInfoBox->NewEntry(Form("%d %d: doca=%.3gmm, #theta=%.3g^{o}, #omega=%.3g^{o}", i, j, doca,angle_open*180./TMath::Pi(),angle_omega*180./TMath::Pi()));
1971 
1972 
1973  // }
1974  // }
1975 
1976 
1977  // MakeNiceHisto(hDoca,cTab->GetPad(2)->GetPad(1));
1978  // MakeNiceHisto(hOpenAngle,cTab->GetPad(2)->GetPad(2));
1979  // hOmegaAngle->SetLineColor(kRed);
1980  // hOmegaAngle->DrawCopy("same");
1981 
1982  cTab->Update();
1983  return;
1984 
1985 
1986 
1987 }
1988 
1989 
1990 
1991 void HarpoRecoMonitorGui::DisplaySim(TRootEmbeddedCanvas* ecTab)
1992 {
1993 
1994  TCanvas* cTab = ecTab->GetCanvas();
1995 
1996 
1997  if (!gHDetSet->isExist(SIMDET)) return;
1998 
2000  Int_t nIonTr = simEvt->GetNtracks();
2001  for(Int_t i = 0; i<nIonTr; i++){
2002  TpcSimIonisationTrack* tr = simEvt->GetIonisationTrack(i);
2003  Int_t nPoints = tr->GetNpoints();
2004  TGraph* gX = new TGraph();
2005  gX->SetMarkerStyle(7);
2006  gX->SetMarkerColor(2+i);
2007  TGraph* gY = new TGraph();
2008  gY->SetMarkerStyle(7);
2009  gY->SetMarkerColor(2+i);
2010  for(Int_t j = 0; j<nPoints; j++){
2011  TpcSimIonisationPoint* point = tr->GetPoint(j);
2012  gX->SetPoint(j,point->GetZ()+ 88.5,point->GetX()+ 150.5);
2013  gY->SetPoint(j,point->GetZ()+ 88.5,point->GetY()+ 150.5);
2014  //hNeSim->Fill(point->GetNe());
2015  }
2016  cTab->cd(1);
2017  gX->Draw("Psame");
2018  cTab->cd(2);
2019  gY->Draw("Psame");
2020  }
2021  // Double_t angle_omega_sim = 0;
2022  // Double_t psim[2][3];
2023  TpcSimMCEvent* mcEvent = simEvt->GetMCEvent();
2024  Int_t nMCtr = mcEvent->GetNtracks();
2025  for(Int_t i = 0; i<nMCtr; i++){
2026  TpcSimMCTrack* track = mcEvent->GetTrack(i);
2027  Double_t x = track->GetX0() + 149.3;
2028  Double_t y = track->GetY0() + 149.3;
2029  Double_t z = track->GetZ0() + 228.5;
2030  Double_t px = track->GetPx();
2031  Double_t py = track->GetPy();
2032  Double_t pz = track->GetPz();
2033 
2034 
2035  fInfoBox->NewEntry(Form("PDG Code: %d", track->GetPdgCode()));
2036 
2037  Int_t color = kBlack;
2038  if(track->GetPdgCode() == 22){
2039  px = -px; py = -py; pz = -pz;
2040  color = kMagenta;
2041  }
2042 
2043  TLine* lx = new TLine();
2044  lx->SetLineColor(color);
2045  lx->SetLineWidth(2);
2046  lx->SetLineStyle(2+i);
2047  cTab->cd(1);
2048  lx->DrawLine(z,x,z+100*pz,x+100*px);
2049  TLine* ly = new TLine();
2050  ly->SetLineColor(color);
2051  ly->SetLineWidth(2);
2052  ly->SetLineStyle(2+i);
2053  cTab->cd(2);
2054  ly->DrawLine(z,y,z+100*pz,y+100*py);
2055  }
2056 
2057  cTab->Update();
2058 
2059 }
2060 
2062 {
2063  // Info("SetBaselineFluctParam","%f %f %f %f %f",fChooseNch->GetNumber(),fChooseSig->GetNumber(),fChooseDelta->GetNumber(),fChooseTruncL->GetNumber()*0.01,fChooseTruncH->GetNumber()*0.01);
2064  // fBaselineFluct->SetLimNch(fChooseNch->GetNumber());
2065  // fBaselineFluct->SetLimSig(fChooseSig->GetNumber());
2066  // fBaselineFluct->SetLimDelta(fChooseDelta->GetNumber());
2067  // fBaselineFluct->SetLimTruncL(fChooseTruncL->GetNumber()*0.01);
2068  // fBaselineFluct->SetLimTruncH(fChooseTruncH->GetNumber()*0.01);
2069 }
2070 
2071 
2073 {
2074  fClusteringType = fChooseClusteringType->GetSelected();
2075  if(fClusteringType<0 || fClusteringType>=(Int_t)kNclustering)
2077  fTrackingType = fChooseTrackingType->GetSelected();
2078  if(fTrackingType<0 || fTrackingType>=(Int_t)kNtracking)
2080  fMatchingType = fChooseMatchingType->GetSelected();
2081  if(fMatchingType<0 || fMatchingType>=(Int_t)kNmatching)
2083  fVertexingType = fChooseVertexingType->GetSelected();
2084  if(fVertexingType<0 || fVertexingType>=(Int_t)kNvertexing)
2086 
2087  fAnalysisType = fChooseAnalysisType->GetSelected();
2088  if(fAnalysisType<0 || fAnalysisType>=(Int_t)kNanalysis)
2090  fSelectorType = fChooseSelectorType->GetSelected();
2091  if(fSelectorType<0 || fSelectorType>=(Int_t)kNselector)
2093 
2094 }
2095 
2097 {
2098 
2099  // if(fEventSelector){
2100  // fEventSelector->SetChooseEventType(fChooseSelectorType->GetSelected());
2101  // }
2102 }
2103 
2105 {
2106 
2107  fInfoBox->RemoveAll();
2108 
2109  Double_t qtot[2];
2110 
2111  for(Int_t ndet=0;ndet<2;ndet++) {
2112  if(!gHDetSet->isExist(ndet)) continue;
2113  HarpoDccMap * m = fEvent->GetDccMap(ndet);
2114  if ( m == NULL ) continue;
2115  for(Int_t i=1;i<NADC;i++){ //Time bins
2116  for(Int_t j=0;j<NCHAN;j++){ // Channels
2117  Double_t q = m->GetData(j,i);
2118  if(q<=-1000) continue;
2119  qtot[ndet] += q;
2120  }
2121  }
2122  }
2123 
2124  Double_t ratio = -1;
2125  if(qtot[1]) ratio = qtot[0]/qtot[1];
2126 
2127  fInfoBox->NewEntry(Form("Ratio: %g", ratio));
2128 
2129 
2130 
2131 
2132  if (!gHDetSet->isExist(XDCC)) return;
2133  if (!gHDetSet->isExist(YDCC)) return;
2134  // Process RAW data
2135  HarpoDccMap* mX = event->GetDccMap(XDCC);
2136  HarpoDccMap* mY = event->GetDccMap(YDCC);
2137  if ( mX == NULL ) return;
2138  if ( mY == NULL ) return;
2139 
2140  Int_t i2 = 0;
2141  Double_t qTotX3 = 0, qTotY3 = 0;
2142  Double_t meanX3 = 0, meanY3 = 0;
2143  Double_t meanXevt = 0, meanYevt = 0;
2144 
2145  for(Int_t i=0;i<NADC;i++){ //Time bins
2146  Double_t qTotX = 0, qTotY = 0;
2147  Double_t meanX = 0, meanY = 0;
2148  for(Int_t j=0;j<NCHAN;j++){ // Channels
2149  Double_t qX = mX->GetData(j,i);
2150  Double_t qY = mY->GetData(j,i);
2151  if(qX > 0){
2152  qTotX += qX;
2153  meanX += j*qX;
2154  qTotX3 += qX;
2155  meanX3 += j*qX;
2156  }
2157  if(qY > 0){
2158  qTotY += qY;
2159  meanY += j*qY;
2160  qTotY3 += qY;
2161  meanY3 += j*qY;
2162  }
2163  }
2164  if(qTotX*qTotY == 0) continue;
2165  meanX /= qTotX;
2166  meanY /= qTotY;
2167  if(i2 == 2){
2168  meanXevt = meanX3/qTotX3;
2169  meanYevt = meanY3/qTotY3;
2170  fInfoBox->NewEntry(Form("X = %g, Y = %g", meanXevt, meanYevt));
2171  if(TMath::Abs(meanXevt-144)>10) break;
2172  if(TMath::Abs(meanYevt-144)>10) break;
2173  }
2174  i2++;
2175  if(i<150 && i2>2) break;
2176  if(i2 == 3){
2177  Double_t xMin = 400, yMin = 400, xMax = -1, yMax = -1;
2178  for(Int_t J=0;J<NCHAN;J++){ // Channels
2179  Double_t qXch = 0, qYch = 0;
2180  for(Int_t I=i-1;I<i+100 && I<NADC;I++){ //Time bins
2181  Double_t qX = mX->GetData(J,I);
2182  Double_t qY = mY->GetData(J,I);
2183  if(qX > 0)
2184  qXch += qX;
2185  if(qY > 0)
2186  qYch += qY;
2187  }
2188  if(qXch>1000 && J<xMin) xMin = J;
2189  if(qYch>1000 && J<yMin) yMin = J;
2190  if(qXch>1000 && J>xMax) xMax = J;
2191  if(qYch>1000 && J>yMax) yMax = J;
2192  }
2193  std::cout << xMin << " " << yMin << " " << xMax << " " <<yMax << std::endl;
2194  Int_t widthX = xMax-xMin+1;
2195  Int_t widthY = yMax-yMin+1;
2196  fInfoBox->NewEntry(Form("wX = %d, wY = %d", widthX, widthY));
2197 
2198  }
2199 
2200 
2201  }
2202 
2203 
2204 }
2205 
2206 
2208 {
2209  Info("DisplayEvent","%p",fEvent);
2210  if(event == 0) return;
2213  fNevt++;
2214 
2215  DisplayInfo(event);
2216 
2217  InitEvent(event);
2218 
2220 
2222  fBaselineFluct->ProcessEvent(event);
2224 
2225 
2226  SetConfig();
2228 
2229 
2234  }
2235 
2236  // if(fCheckAnimClustering->IsOn()){
2237  // fTab->SetTab(2);
2238  // fClustering2->SetCanvas(ecTabClusters->GetCanvas()->GetPad(1),ecTabClusters->GetCanvas()->GetPad(2));
2239  // fClustering2->SetHist(fHistEvent[0],fHistEvent[1]);
2240  // }else{
2241  // fClustering2->SetCanvas(NULL,NULL);
2242  // fClustering2->SetHist(NULL,NULL);
2243  // }
2244  // if(fClusteringType != 0) event->GetRecoEvent()->ResetClustersArray();
2245  // switch(fClusteringType){
2246  // // case 1: fClustering1->ProcessEvent(event); break;
2247  // case 2:
2248  // fClustering2->ProcessEvent(event);
2249  // fClustering2->DisplayAnalysis(ecTabClusters,fInfoBox);
2250  // fClustering2->DisplayAnalysis(ecTabClustersTracks,fInfoBox);
2251  // break;
2252  // case 3:
2253  // fClustering3->ProcessEvent(event);
2254  // fClustering3->DisplayAnalysis(ecTabClusters,fInfoBox);
2255  // fClustering3->DisplayAnalysis(ecTabClustersTracks,fInfoBox);
2256  // break;
2257  // // default: fClustering1->ProcessEvent(event); break;
2258  // }
2259  std::cout << "**** " << event->GetRecoEvent()->GetClustersArray()->GetEntries() << " ****" << std::endl;
2260  // DisplayClusters(ecTabClusters);
2261 
2262  // SetTrackingParam();
2263  std::cout << "**** " << event->GetRecoEvent()->GetClustersArray()->GetEntries() << " ****" << std::endl;
2265 
2266  // fTracking3->SetCanvas(ecTabClustersTracks->GetCanvas());
2267  // fTracking3->SetTracksCanvas(ecTabTracks->GetCanvas());
2268  // DisplayClusters(ecTabClustersTracks);
2271  event->GetRecoEvent()->ResetTracksArray();
2275  }
2278  }
2279 
2280  fSaturation->ProcessEvent(event);
2281 
2283  event->GetRecoEvent()->ResetVertexArray();
2286  }
2289 
2291  if(fCheckAnimTracking->IsOn()){
2292  fTab->SetTab(3);
2293  ((HarpoKalmanNew*)fTracking[fTrackingType])->SetCanvas(ecTabClustersTracks->GetCanvas()->GetPad(1),0);
2294  ((HarpoKalmanNew*)fTracking[fTrackingType])->SetHist(fHistEventEmpty[0],0);
2295  ((HarpoKalmanNew*)fTracking[fTrackingType])->SetCanvas(ecTabClustersTracks->GetCanvas()->GetPad(2),1);
2296  ((HarpoKalmanNew*)fTracking[fTrackingType])->SetHist(fHistEventEmpty[1],1);
2297  }else{
2298  ((HarpoKalmanNew*)fTracking[fTrackingType])->SetCanvas(0,0);
2299  ((HarpoKalmanNew*)fTracking[fTrackingType])->SetHist(0,0);
2300  ((HarpoKalmanNew*)fTracking[fTrackingType])->SetCanvas(0,1);
2301  ((HarpoKalmanNew*)fTracking[fTrackingType])->SetHist(0,1);
2302  }
2303  }
2304 
2307  event->GetRecoEvent()->ResetTracksArray();
2311  }
2314  }
2315 
2316 
2319  event->GetRecoEvent()->ResetMatchingArray();
2321  event->GetRecoEvent()->ResetVertex3DArray();
2324  }
2325 
2326 
2327 
2329  Display3D(ecTab3D);
2330 
2333 
2334 
2338  }
2339 
2340  std::cout << "**** " << event->GetRecoEvent()->GetClustersArray()->GetEntries() << " ****" << std::endl;
2341  return;
2342 
2343  if(fCheckAnimFitting->IsOn()){
2344  fTab->SetTab(3);
2345  (fTrackFitting)->SetCanvas(ecTabClustersTracks->GetCanvas()->GetPad(1),0);
2346  (fTrackFitting)->SetHist(fHistEventEmpty[0],0);
2347  (fTrackFitting)->SetCanvas(ecTabClustersTracks->GetCanvas()->GetPad(2),1);
2348  (fTrackFitting)->SetHist(fHistEventEmpty[1],1);
2349  }else{
2350  (fTrackFitting)->SetCanvas(0,0);
2351  (fTrackFitting)->SetHist(0,0);
2352  (fTrackFitting)->SetCanvas(0,1);
2353  (fTrackFitting)->SetHist(0,1);
2354  }
2355  fTrackFitting->ProcessEvent(event);
2356  std::cout << "**** " << event->GetRecoEvent()->GetClustersArray()->GetEntries() << " ****" << std::endl;
2357  return;
2358 }
2359 
2360 
2362 {
2363 
2364  // if(HarpoConfig::gHReaderType!=hRootReader) return;
2365 
2366  Int_t Event = Int_t(fChooseDelay->GetNumber()) + 1;
2367  fChooseDelay->SetNumber(Event);
2368  Bool_t test = fReader->NextEvent();
2369  if(test)
2370  fEvent = fReader->GetEvent();
2371  else
2372  fEvent = 0;
2373  // fAna->ProcessEvent(evt);
2374  // evt->Delete();
2375 
2377  return;
2378 }
2379 
2380 
2382 {
2383 
2385  Warning("PrevEvent","Cannot navigate back with RAW Reader");
2386  return;
2387  }
2388  Int_t Event = Int_t(fChooseDelay->GetNumber()) - 1;
2389  fChooseDelay->SetNumber(Event);
2390  Bool_t test = fReader->Find(Event);
2391  if(test)
2392  fEvent = fReader->GetEvent();
2393  else
2394  fEvent = 0;
2395 
2397  return;
2398 
2399 }
2400 
2401 
2403 {
2404  Int_t Event = Int_t(fChooseDelay->GetNumber());
2405 
2406  Bool_t test = fReader->Find(Event);
2407  std::cout << "############ " << test << " ##############" << std::endl;
2408  if(test)
2409  fEvent = fReader->GetEvent();
2410  else
2411  fEvent = NULL;
2412 
2414  return;
2415 }
2416 
2417 
2418 
2420 {
2421 
2422 
2423 
2424 
2425  for(Int_t i = 0; i<nEvents; i++){
2426  Bool_t test = fReader->NextEvent();
2427  if(test){
2428  fEvent = fReader->GetEvent();
2430  }else{
2431  fEvent = 0;
2432  break;
2433  }
2434  }
2435  return;
2436 }
2437 
2438 
2439 
2441 {
2442 
2443  SetSelectorParam();
2444  while(1){
2445  Bool_t test = fReader->NextEvent();
2446  if(test){
2447  std::cout << "." << std::flush;
2448  fEvent = fReader->GetEvent();
2449 
2450  // Int_t select = fChooseEventSelector->GetSelected();
2453  Info("FindEvent","****** EvAnaStatus %d *******",fEvent->GetHeader()->GetEvAnaStatus());
2454 
2455  Int_t triggerType = -1;
2456  if(gHDetSet->isExist(PMM2)) {
2457  Pmm2Event *anaEvt = static_cast<Pmm2Event *>(fEvent->GetDetEvent(PMM2));
2458  triggerType = anaEvt->GetTriggerType();
2459  }
2460  if(fChooseTrigger->GetSelected() != -2 &&
2461  triggerType != fChooseTrigger->GetSelected()) continue;
2462 
2463  // cout << "Trigger Type" << fChooseTrigger->GetSelected() << " " << triggerType << endl;
2464  // if(fChooseTrigger->GetSelected() != -2 &&
2465  // triggerType != fChooseTrigger->GetSelected()) return false;
2466 
2467  // switch(fChooseEventSelector->GetSelected()){
2468  // case 1: fEventSelector->ProcessEvent(fEvent); break;
2469  // case 4: fSelectorSelectorVertex->ProcessEvent(fEvent); break;
2470  // case 3: fSelectorSelectorPileUp->ProcessEvent(fEvent); break;
2471  // case 2: fSelectorSelectorStraightTracks->ProcessEvent(fEvent); break;
2472  // }
2473  if(!fEvent->GetHeader()) continue;
2474  Info("FindEvent","****** EvAnaStatus %d *******",fEvent->GetHeader()->GetEvAnaStatus());
2475  if(fEvent->GetHeader()->GetEvAnaStatus() == 0) break;
2476  }else{
2477  fEvent = 0;
2478  break;
2479  }
2480  }
2481  fChooseDelay->SetNumber(fReader->GetReadEvts()-1); // Current event = nevents - 1
2483  return;
2484 }
2485 
2487 {
2488 
2489 
2490  // Int_t EventType;
2491  // if(event->GetRecoEvent()->GetEventType()<11)
2492  // EventType = event->GetRecoEvent()->GetEventType();
2493  // if(fEventSelector->IsGamma==1)
2494  // EventType =11;
2495  // if(fEventSelector->IsTriplet==1)
2496  // EventType =12;
2497 
2498  // cout<<"Good Gamma event" << fEventSelector->IsGamma<<endl;
2499  // cout << "Event Type" << fChooseEventType->GetSelected() << " " << EventType << endl;
2500 
2501  // if(fChooseEventType->GetSelected() != -1 &&
2502  // EventType != fChooseEventType->GetSelected()) return false;
2503 
2504  // // Int_t TTZType=event->GetRecoEvent()->GetEventTTZ();
2505 
2506  // Int_t triggerType = -1;
2507  // if(gHDetSet->isExist(PMM2)) {
2508  // Pmm2Event *anaEvt = static_cast<Pmm2Event *>(event->GetDetEvent(PMM2));
2509  // triggerType = anaEvt->GetTriggerType();
2510  // }
2511 
2512  // cout << "Trigger Type" << fChooseTrigger->GetSelected() << " " << triggerType << endl;
2513  // if(fChooseTrigger->GetSelected() != -2 &&
2514  // triggerType != fChooseTrigger->GetSelected()) return false;
2515 
2516  return kTRUE;
2517 }
2518 
2519 
2521 {
2522 
2523  // TCanvas* c = new TCanvas("c","",1600,800);
2524  // c->Divide(2);
2525  // TCanvas* c = ecTabRaw->GetCanvas();
2526 
2527  // for(Int_t ndet = 0; ndet<2; ndet++){
2528  // h1Ev2D[ndet]->SetMinimum(0.1);
2529  // MakeNiceHisto(h1Ev2D[ndet],c->GetPad(ndet+1),"colz");
2530  // }
2531 
2532  // const char* savedir="plots/events";
2533  // const char* savedir = gSystem->ExpandPathName("$HARPO_ANA_DIR/reco");
2534  // const char* savedir = gSystem->ExpandPathName(Form("$HARPO_ANA_DIR/reco/run%d/event%li",fReader->GetRunHeader()->GetRun(),fReader->GetReadEvts()));
2535  Char_t savedir[512];
2536  sprintf(savedir,"$HARPO_ANA_DIR/reco/run%d/event%li",fReader->GetRunHeader()->GetRun(),fReader->GetReadEvts());
2537  gSystem->Exec(Form("mkdir -p %s",savedir));
2538  if(!gSystem->AccessPathName(savedir)){
2539  ecTabRaw->GetCanvas()->SaveAs(Form("%s/run%d_event%li_all.pdf[",savedir,fReader->GetRunHeader()->GetRun(),fReader->GetReadEvts()));
2540  ecTabNoiseSuppr->GetCanvas()->SaveAs(Form("%s/run%d_event%li_all.pdf",savedir,fReader->GetRunHeader()->GetRun(),fReader->GetReadEvts()));
2541  ecTabClusters->GetCanvas()->SaveAs(Form("%s/run%d_event%li_all.pdf",savedir,fReader->GetRunHeader()->GetRun(),fReader->GetReadEvts()));
2542  ecTabClustersTracks->GetCanvas()->SaveAs(Form("%s/run%d_event%li_all.pdf",savedir,fReader->GetRunHeader()->GetRun(),fReader->GetReadEvts()));
2543  ecTabTracks->GetCanvas()->SaveAs(Form("%s/run%d_event%li_all.pdf",savedir,fReader->GetRunHeader()->GetRun(),fReader->GetReadEvts()));
2544  ecTabMatching->GetCanvas()->SaveAs(Form("%s/run%d_event%li_all.pdf",savedir,fReader->GetRunHeader()->GetRun(),fReader->GetReadEvts()));
2545  ecTabVertex->GetCanvas()->SaveAs(Form("%s/run%d_event%li_all.pdf",savedir,fReader->GetRunHeader()->GetRun(),fReader->GetReadEvts()));
2546  ecTab3D->GetCanvas()->SaveAs(Form("%s/run%d_event%li_all.pdf]",savedir,fReader->GetRunHeader()->GetRun(),fReader->GetReadEvts()));
2547  // c->SaveAs(Form("%s/run%d_event%li_all.pdf",savedir,fReader->GetRunHeader()->GetRun(),fReader->GetReadEvts()));
2548  // c->SaveAs(Form("%s/run%d_event%li.png",savedir,fReader->GetRunHeader()->GetRun(),fReader->GetReadEvts()));
2549  }else{
2550  ecTabRaw->GetCanvas()->SaveAs(Form("run%d_event%li_all.pdf[",fReader->GetRunHeader()->GetRun(),fReader->GetReadEvts()));
2551  ecTabNoiseSuppr->GetCanvas()->SaveAs(Form("run%d_event%li_all.pdf",fReader->GetRunHeader()->GetRun(),fReader->GetReadEvts()));
2552  ecTabClusters->GetCanvas()->SaveAs(Form("run%d_event%li_all.pdf",fReader->GetRunHeader()->GetRun(),fReader->GetReadEvts()));
2553  ecTabClustersTracks->GetCanvas()->SaveAs(Form("run%d_event%li_all.pdf",fReader->GetRunHeader()->GetRun(),fReader->GetReadEvts()));
2554  ecTabTracks->GetCanvas()->SaveAs(Form("run%d_event%li_all.pdf",fReader->GetRunHeader()->GetRun(),fReader->GetReadEvts()));
2555  ecTabMatching->GetCanvas()->SaveAs(Form("run%d_event%li_all.pdf",fReader->GetRunHeader()->GetRun(),fReader->GetReadEvts()));
2556  ecTabVertex->GetCanvas()->SaveAs(Form("run%d_event%li_all.pdf",fReader->GetRunHeader()->GetRun(),fReader->GetReadEvts()));
2557  ecTab3D->GetCanvas()->SaveAs(Form("run%d_event%li_all.pdf]",fReader->GetRunHeader()->GetRun(),fReader->GetReadEvts()));
2558  // c->SaveAs(Form("run%d_event%li._allpdf",fReader->GetRunHeader()->GetRun(),fReader->GetReadEvts()));
2559  // c->SaveAs(Form("run%d_event%li.png",fReader->GetRunHeader()->GetRun(),fReader->GetReadEvts()));
2560  }
2561 
2562  SaveEvent(fEvent,savedir);
2563 
2564 }
2565 
2566 
2567 void HarpoRecoMonitorGui::SaveEvent(HarpoEvent* evt, const char* savedir)
2568 {
2569 
2570  InitEvent(evt);
2571 
2572  TLatex* latex = new TLatex();
2573  latex->SetTextFont(132);
2574  latex->SetTextAlign(12);
2575  latex->SetTextSize(0.08);
2576 
2577  HarpoRecoEvent* reco = evt->GetRecoEvent();
2578  TClonesArray* matchArray = reco->GetMatchingArray();
2579  TClonesArray* trArray = reco->GetTracksArray();
2580  Int_t nMatch = matchArray->GetEntries();
2581 
2582  TCanvas* cSave;
2583  cSave = new TCanvas("cSave","c",1100,1100);
2584  // cSave->Divide(2,1);
2585 
2586  TCanvas* cSaveLog;
2587  cSaveLog = new TCanvas("cSaveLog","log",1100,1100);
2588  // cSaveLog->Divide(2,1);
2589 
2590  TCanvas* cSaveSp;
2591  cSaveSp = new TCanvas("cSaveSp","spectrum",1100,1100);
2592  // cSaveSp->Divide(2,1);
2593 
2594  TCanvas* cSaveAll;
2595  cSaveAll = new TCanvas("cSaveAll","all",1500,500);
2596  cSaveAll->Divide(3);
2597  TVirtualPad* cSaveAll1 = cSaveAll->GetPad(1);
2598  cSaveAll1->SetName("cSaveAll1");
2599  TVirtualPad* cSaveAll2 = cSaveAll->GetPad(2);
2600  cSaveAll2->SetName("cSaveAll2");
2601 
2602  Int_t nPlanes = 2;
2603  Double_t left = 0.12, right = 0.12, bottom = 0.07, top = 0.01;
2604  /* TClonesArray* pads = */CanvasPartition(cSave,1,nPlanes,left,right,bottom,top);
2605  /* TClonesArray* padsLog = */CanvasPartition(cSaveLog,1,nPlanes,left,right,bottom,top);
2606  // TClonesArray* padsSp = CanvasPartition(cSaveSp,1,nPlanes,left,right,bottom,top);
2607  /* TClonesArray* padsAll1 = */ CanvasPartition(cSaveAll1,1,nPlanes,left,right,bottom,top);
2608  /* TClonesArray* padsAll2 = */ CanvasPartition(cSaveAll2,1,nPlanes,left,right,bottom,top);
2609 
2610  // Double_t vcorr = 455./545, hcorr = 1;
2611  Double_t vcorr = ((1. - bottom - top)/2. + top)/((1. - bottom - top)/2. + bottom); //, hcorr = 1;
2612 
2613  TLine* lineT = new TLine();
2614  lineT->SetLineStyle(10);
2615  lineT->SetLineWidth(2);
2616  lineT->SetLineColor(kGray+1);
2617  Double_t tmin = 90., tmax = 415.;
2618 
2620  for(Int_t i = 0; i<nMatch; i++){
2621  HarpoRecoMatching* match = (HarpoRecoMatching*)matchArray->At(i);
2622  TCanvas* cMatch = new TCanvas(Form("cMatch%d",i));
2623  ((HarpoMatching*)fMatching[fMatchingType])->DrawMatching(match,cMatch);
2624  Int_t iTrX1 = match->GetiMatchTrX();
2625  Int_t iTrX2 = match->GetiMatchTrX2();
2626  Int_t iTrY1 = match->GetiMatchTrY();
2627  Int_t iTrY2 = match->GetiMatchTrY2();
2628  cMatch->SaveAs(Form("%s/run%d_event%ld_match_%d-%d_%d-%d.png",savedir,fReader->GetRunHeader()->GetRun(),fReader->GetReadEvts(),iTrX1,iTrX2,iTrY1,iTrY2));
2629  cMatch->SaveAs(Form("%s/run%d_event%ld_match_%d-%d_%d-%d.pdf",savedir,fReader->GetRunHeader()->GetRun(),fReader->GetReadEvts(),iTrX1,iTrX2,iTrY1,iTrY2));
2630  }
2631  }
2632 
2633  if(fReader->GetRunHeader()->GetSimDataFlag()){ // FIXME
2634  for(Int_t plane = 0; plane<2; plane++){
2635  for(Int_t i = 0; i<NADC-35; i++){
2636  for(Int_t j = 0; j<NCHAN; j++){
2637  fHistEvent[plane]->SetBinContent(NADC-i+1,j+1,fHistEvent[plane]->GetBinContent(NADC-35-i+1,j+1));
2638  }
2639  }
2640  }
2641  }
2642 
2643  char name[16];
2644  sprintf(name,"%s_%i_%i",cSave->GetName(),0,1);
2645  std::cout << name << std::endl;
2646  cSave->cd(0);
2647  ((TPad*) gROOT->FindObject(name))->Draw();
2648  ((TPad*) gROOT->FindObject(name))->cd();
2650  fHistEvent[0]->DrawCopy("colz");
2651  lineT->DrawLine(tmin,1,tmin,288);
2652  lineT->DrawLine(tmax,1,tmax,288);
2653  sprintf(name,"%s_%i_%i",cSave->GetName(),0,0);
2654  std::cout << name << std::endl;
2655  cSave->cd(0);
2656  ((TPad*) gROOT->FindObject(name))->Draw();
2657  ((TPad*) gROOT->FindObject(name))->cd();
2659  fHistEvent[1]->GetYaxis()->SetLabelSize(fHistEvent[1]->GetYaxis()->GetLabelSize()*vcorr);
2660  fHistEvent[1]->GetYaxis()->SetTitleSize(fHistEvent[1]->GetYaxis()->GetTitleSize()*vcorr);
2661  fHistEvent[1]->GetYaxis()->SetTitleOffset(fHistEvent[1]->GetYaxis()->GetTitleOffset()/vcorr);
2662  fHistEvent[1]->DrawCopy("colz");
2663  lineT->DrawLine(tmin,1,tmin,288);
2664  lineT->DrawLine(tmax,1,tmax,288);
2665 
2666  sprintf(name,"%s_%i_%i",cSaveLog->GetName(),0,1);
2667  std::cout << name << std::endl;
2668  cSaveLog->cd(0);
2669  ((TPad*) gROOT->FindObject(name))->Draw();
2670  ((TPad*) gROOT->FindObject(name))->SetLogz();
2671  ((TPad*) gROOT->FindObject(name))->cd();
2672  //SetHistStyle(fHistEvent[0]);
2673  fHistEvent[0]->DrawCopy("colz");
2674  lineT->DrawLine(tmin,1,tmin,288);
2675  lineT->DrawLine(tmax,1,tmax,288);
2676  sprintf(name,"%s_%i_%i",cSaveLog->GetName(),0,0);
2677  std::cout << name << std::endl;
2678  cSaveLog->cd(0);
2679  ((TPad*) gROOT->FindObject(name))->Draw();
2680  ((TPad*) gROOT->FindObject(name))->SetLogz();
2681  ((TPad*) gROOT->FindObject(name))->cd();
2682  //SetHistStyle(fHistEvent[1]);
2683  fHistEvent[1]->DrawCopy("colz");
2684  lineT->DrawLine(tmin,1,tmin,288);
2685  lineT->DrawLine(tmax,1,tmax,288);
2686 
2687 
2688 
2689 
2690  sprintf(name,"%s_%i_%i",cSaveAll1->GetName(),0,1);
2691  std::cout << name << std::endl;
2692  cSaveAll1->cd(0);
2693  ((TPad*) gROOT->FindObject(name))->Draw();
2694  ((TPad*) gROOT->FindObject(name))->cd();
2696  fHistEvent[0]->DrawCopy("colz");
2697  lineT->DrawLine(tmin,1,tmin,288);
2698  lineT->DrawLine(tmax,1,tmax,288);
2699  sprintf(name,"%s_%i_%i",cSaveAll1->GetName(),0,0);
2700  std::cout << name << std::endl;
2701  cSaveAll1->cd(0);
2702  ((TPad*) gROOT->FindObject(name))->Draw();
2703  ((TPad*) gROOT->FindObject(name))->cd();
2705  fHistEvent[1]->GetYaxis()->SetLabelSize(fHistEvent[1]->GetYaxis()->GetLabelSize()*vcorr);
2706  fHistEvent[1]->GetYaxis()->SetTitleSize(fHistEvent[1]->GetYaxis()->GetTitleSize()*vcorr);
2707  fHistEvent[1]->GetYaxis()->SetTitleOffset(fHistEvent[1]->GetYaxis()->GetTitleOffset()/vcorr);
2708  fHistEvent[1]->DrawCopy("colz");
2709  lineT->DrawLine(tmin,1,tmin,288);
2710  lineT->DrawLine(tmax,1,tmax,288);
2711 
2712 
2713 
2714 
2715 
2718  fHistEventEmpty[1]->GetYaxis()->SetLabelSize(fHistEventEmpty[1]->GetYaxis()->GetLabelSize()*vcorr);
2719  fHistEventEmpty[1]->GetYaxis()->SetTitleSize(fHistEventEmpty[1]->GetYaxis()->GetTitleSize()*vcorr);
2720  fHistEventEmpty[1]->GetYaxis()->SetTitleOffset(fHistEventEmpty[1]->GetYaxis()->GetTitleOffset()/vcorr);
2721 
2722  Int_t nTr = trArray->GetEntries();
2723  if(fTrackingType==2){
2724  Int_t ntrX = ((HarpoKalmanTracking*)fTracking[2])->GetNtr(0);
2725  Int_t ntrY = ((HarpoKalmanTracking*)fTracking[2])->GetNtr(1);
2726  if(ntrX>ntrY) ntrY = ntrX;
2727  // const Int_t ntr = ntrY;//fTracking2->GetNtr(plane);
2728  // TGraph* g[2][ntr];
2729  TLegend* l[2];
2730 
2731  TClonesArray* trArrayK = reco->GetKalmanTracksArray();
2732  Int_t nTrK = trArrayK->GetEntries();
2733  TGraph* g2[2][nTrK];
2734  for(Int_t i = 0; i<nTrK; i++){
2735  g2[0][i] = new TGraph();
2736  g2[1][i] = new TGraph();
2737  }
2738  TClonesArray* clArray = reco->GetClustersArray();
2739  Int_t nCl = clArray->GetEntries();
2740  for(Int_t icl = 0; icl<nCl; icl++){
2741  HarpoRecoClusters* cluster = (HarpoRecoClusters*)clArray->At(icl);
2742  Int_t plane = cluster->GetPlane();
2743  Int_t idTr = cluster->GetIdClusterTrack();
2744  if(plane!=XPLANE && plane !=YPLANE) continue;
2745  if(idTr<0) continue;
2746  // Int_t idTr = fTracking2->GetId(idcluster,plane);
2747  //Info("DisplayTracks","plane = %d, idTr = %d (%g, %g)", plane, idTr,cluster->GetZfit(0),cluster->GetXfit(0));
2748 
2749  g2[plane][idTr]->SetPoint(g2[plane][idTr]->GetN(),cluster->GetZfit(0),cluster->GetXfit(0));
2750  }
2751 
2752 
2753 
2754  // Int_t colorList[2][ntr];
2755  for(Int_t plane = 0; plane<2; plane++){
2756  sprintf(name,"%s_%i_%i",cSaveAll2->GetName(),0,1-plane);
2757  std::cout << name << std::endl;
2758  cSaveAll2->cd(0);
2759  ((TPad*) gROOT->FindObject(name))->Draw();
2760  ((TPad*) gROOT->FindObject(name))->cd();
2761  fHistEventEmpty[plane]->DrawCopy();
2762  lineT->DrawLine(tmin,1,tmin,288);
2763  lineT->DrawLine(tmax,1,tmax,288);
2764  l[plane] = new TLegend(0.1,0.7 + 0.01*plane,0.3,.99 + 0.01*plane);
2765  // Int_t color = 2;
2766  for(Int_t itr = 0; itr<nTrK; itr++){
2767  HarpoRecoKalmanTracks* track = (HarpoRecoKalmanTracks*)trArrayK->At(itr);
2768  Int_t trId = track->GetNtrack();
2769  if(plane != track->GetPlane()) continue;
2770  if(!g2[plane][trId]) continue;
2771  if(g2[plane][trId]->GetN()<1) continue;
2772  Info("DisplayTracks","Plane %d, Tr %d => Ncl = %d",plane, trId,g2[plane][trId]->GetN());
2773  g2[plane][trId]->SetMarkerColor(trId+2);
2774  g2[plane][trId]->SetMarkerStyle(6);
2775  g2[plane][trId]->Draw("Psame");
2776  l[plane]->AddEntry(g2[plane][trId],Form("%d",trId),"P");
2777  }
2778  // for(Int_t itr = 0; itr<ntr; itr++){
2779  // g[plane][itr] = fTracking2->GetGraph(itr,plane);
2780  // if(!g[plane][itr]) continue;
2781  // // if(g[plane][itr] == 0) continue;
2782  // // cout << itr << " ===> " << g[plane][itr]->GetN() << endl;
2783  // if(g[plane][itr]->GetN()<1) continue;
2784  // g[plane][itr]->SetMarkerStyle(6);
2785  // g[plane][itr]->SetMarkerColor(color);
2786  // colorList[plane][itr] = color;
2787  // color++;
2788  // g[plane][itr]->Draw("Psame");
2789  // l[plane]->AddEntry(g[plane][itr],Form("%d",itr),"P");
2790  // }
2791  //l[plane]->Draw();
2792  }
2793 
2794 
2795  }
2796 
2797 
2798 
2799  //Double_t angleX[10], angleY[10];
2800  // Int_t nclX[10], nclY[10];
2801  //Int_t planeTr[10];
2802  for(Int_t itr = 0; itr<nTr; itr++){
2803 
2804  HarpoRecoTracks* track = (HarpoRecoTracks*)trArray->At(itr);
2805 
2806  Int_t ndet = track->GetPlane();
2807  // Double_t theta = track->GetMtheta();
2808  // Double_t rho = track->GetMrho();
2809  // fInfoBox->NewEntry(Form("SigRho = %g",track->GetSigrho()));
2810  // Info("DisplayTracks","SigRho = %g",track->GetSigrho());
2811  Double_t angX=track->GetAngleTrack();;
2812  if(ndet==0) cout<<"angle="<<angX<<endl;
2813  // planeTr[itr] = ndet;
2814  // if(ndet==0) angleX[itr]=track->GetAngleTrack();
2815  // if(ndet==1) angleY[itr]=track->GetAngleTrack();
2816  // if(ndet==0) nclX[itr]=track->GetNclusterTrack();
2817  // if(ndet==1) nclY[itr]=track->GetNclusterTrack();
2818  // Int_t rlambda=0;
2819 
2820  // Int_t color = itr+2;
2821  sprintf(name,"%s_%i_%i",cSaveAll2->GetName(),0,1-ndet);
2822  std::cout << name << std::endl;
2823  cSaveAll2->cd(0);
2824  //((TPad*) gROOT->FindObject(name))->Draw();
2825  ((TPad*) gROOT->FindObject(name))->cd();
2826 
2827  // TF1* line = new TF1("line","pol1",0,511);
2828  // // if(rho<0){ theta = TMath::Pi()/2 - theta; }
2829  // // else rho = -rho;
2830  // line->SetParameter(0,rho/TMath::Cos(theta) + 511./2.*TMath::Tan(theta) + 144);
2831  // // line->SetParameter(1, - 1./TMath::Tan(theta));
2832  // line->SetParameter(1, - TMath::Tan(theta));
2833  // line->SetLineColor(color);
2834 
2835  // line->DrawCopy("same");
2836  // line->Delete();
2837 
2838  // TEllipse* pStart = new TEllipse();
2839  // pStart->SetFillColor(color);
2840  // pStart->DrawEllipse(track->GetZstart(),track->GetXstart(),5,0,0,360,0);
2841  // pStart->Delete();
2842  // TEllipse* pEnd = new TEllipse();
2843  // pEnd->SetFillColor(color);
2844  // pEnd->SetFillStyle(3001);
2845  // pEnd->DrawEllipse(track->GetZend(),track->GetXend(),5,0,0,360,0);
2846  // pEnd->Delete();
2847 
2848  // TLine* line = new TLine();
2849  // line->SetLineColor(color);
2850 
2851  }
2852 
2853 
2854 
2855 
2856  fInfoBox->NewEntry(Form("nMatch = %d",matchArray->GetEntries()));
2857  // if(nMatch<1) return;
2858 
2859  TH3F* hDummy3D = new TH3F("hDummy3D",";Z;X;Y",10,0,511,10,0,288,10,0,288);
2860  cSaveAll->cd(3);
2861  hDummy3D->Draw();
2862  // MakeNiceHisto(hDummy3D,cTab->GetPad(1),"lego");
2863  Int_t used[NTRACK][NTRACK];
2864  for(Int_t i = 0; i<NTRACK; i++)
2865  for(Int_t j = 0; j<NTRACK; j++)
2866  used[i][j] = kBlack;
2867  Int_t color = 2;
2868  Double_t z0[nMatch], /* z1[nMatch], */ x0[nMatch], y0[nMatch], slopeX[nMatch], slopeY[nMatch];
2869  for(Int_t i = 0; i<nMatch; i++){
2870  x0[i] = -1000;
2871  y0[i] = -1000;
2872  slopeX[i] = -1000;
2873  slopeY[i] = -1000;
2874  cSaveAll->cd(3);
2875  HarpoRecoMatching* match = (HarpoRecoMatching*)matchArray->At(i);
2876  Int_t trX = match->GetiMatchTrX();
2877  Int_t trY = match->GetiMatchTrY();
2878  if(used[trX][trY] == kBlack){
2879  used[trX][trY] = color;
2880  color++;
2881  }
2882 
2883  // g->SetMarkerColor(used[trX][trY]);
2884 
2885 
2886  for(Int_t itr = 0; itr<nTr; itr++){
2887 
2888  HarpoRecoTracks* track = (HarpoRecoTracks*)trArray->At(itr);
2889  Int_t trId = track->GetNtrack();
2890  Int_t plane = track->GetPlane();
2891 
2892  if(trId == trX && plane == XPLANE){
2893  // x0[i] = track->GetMrho();
2894  if(track->GetZstart()<track->GetZend()){
2895  z0[i] = track->GetZstart();
2896  // z1[i] = track->GetZend();
2897  }else{
2898  // z1[i] = track->GetZstart();
2899  z0[i] = track->GetZend();
2900  }
2901  // slopeX[i] = track->GetMtheta();
2902  slopeX[i] = TMath::Tan(track->GetAngleTrack());
2903  x0[i] = track->GetXstart() - track->GetZstart()*slopeX[i];
2904  }
2905  if(trId == trY && plane == YPLANE){
2906  // y0[i] = track->GetMrho();
2907  //slopeY[i] = track->GetMtheta();
2908  slopeY[i] = TMath::Tan(track->GetAngleTrack());
2909  y0[i] = track->GetXstart() - track->GetZstart()*slopeY[i];
2910  }
2911  }
2912  TPolyLine3D *l = new TPolyLine3D(2);
2913  l->SetPoint(0,z0[i],x0[i] + z0[i]*slopeX[i],y0[i] + z0[i]*slopeY[i]);
2914  l->SetPoint(1,500,x0[i] + 500*slopeX[i],y0[i]+500*slopeY[i]);
2915  l->SetLineColor(used[trX][trY]);
2916  l->Draw();
2917  }
2918 
2919  Double_t egamma = fReader->GetRunHeader()->GetEgamma();
2920  const Int_t kNeReal = 13;
2921  Double_t eGammaReal[kNeReal] = {1.74, 2.73, 3.93, 4.68, 6.76, 11.8, 16.9, 18.5, 26.6, 33.3, 38.1, 52.1, 74.3};
2922  for(Int_t i = 0; i<kNeReal; i++)
2923  if(eGammaReal[i]-egamma>0 && eGammaReal[i]-egamma<2) egamma = eGammaReal[i];
2924  if(egamma>0){
2925  Info("Save","Egamma = %g",egamma);
2926  sprintf(name,"%s_%i_%i",cSave->GetName(),0,1);
2927  cSave->cd(0);
2928  ((TPad*) gROOT->FindObject(name))->cd();
2929  latex->SetTextSize(0.12);
2930  //latex->DrawLatex(20,260,Form("E_{#gamma} = %.3g MeV",egamma));
2931  }
2932  cSave->SaveAs(Form("%s/run%d_event%ld_linZ.png",savedir,fReader->GetRunHeader()->GetRun(),fReader->GetReadEvts()));
2933  cSave->SaveAs(Form("%s/run%d_event%ld_linZ.pdf",savedir,fReader->GetRunHeader()->GetRun(),fReader->GetReadEvts()));
2934  cSave->SaveAs(Form("%s/run%d_event%ld_linZ.C",savedir,fReader->GetRunHeader()->GetRun(),fReader->GetReadEvts()));
2935  cSaveLog->SaveAs(Form("%s/run%d_event%ld_logZ.pdf",savedir,fReader->GetRunHeader()->GetRun(),fReader->GetReadEvts()));
2936  cSaveSp->SaveAs(Form("%s/run%d_event%ld_Spectrum.pdf",savedir,fReader->GetRunHeader()->GetRun(),fReader->GetReadEvts()));
2937  cSaveSp->SaveAs(Form("%s/run%d_event%ld_Spectrum.png",savedir,fReader->GetRunHeader()->GetRun(),fReader->GetReadEvts()));
2938  cSaveAll->SaveAs(Form("%s/run%d_event%ld_all.png",savedir,fReader->GetRunHeader()->GetRun(),fReader->GetReadEvts()));
2939  cSaveAll->SaveAs(Form("%s/run%d_event%ld_all.pdf",savedir,fReader->GetRunHeader()->GetRun(),fReader->GetReadEvts()));
2940  cSaveAll->SaveAs(Form("%s/run%d_event%ld_all.C",savedir,fReader->GetRunHeader()->GetRun(),fReader->GetReadEvts()));
2941 
2942 
2943 
2944 
2945  std::ofstream textfile;
2946  textfile.open(Form("%s/run%d_event%ld_X.txt",savedir,fReader->GetRunHeader()->GetRun(),fReader->GetReadEvts()), std::ofstream::out);
2947  for(Int_t i = 1; i<=fHistEvent[0]->GetXaxis()->GetNbins(); i++)
2948  for(Int_t j = 1; j<=fHistEvent[0]->GetYaxis()->GetNbins(); j++)
2949  if(fHistEvent[0]->GetBinContent(i,j)>0)
2950  textfile << i << "\t" << j << endl;
2951  textfile.close();
2952  textfile.open(Form("%s/run%d_event%ld_X_2.txt",savedir,fReader->GetRunHeader()->GetRun(),fReader->GetReadEvts()), std::ofstream::out);
2953  for(Int_t i = 1; i<=fHistEvent[0]->GetXaxis()->GetNbins(); i++)
2954  for(Int_t j = 1; j<=fHistEvent[0]->GetYaxis()->GetNbins(); j++)
2955  if(fHistEvent[0]->GetBinContent(i,j)>0)
2956  textfile << i << "\t" << j << "\t" << fHistEvent[0]->GetBinContent(i,j) << endl;
2957  textfile.close();
2958  textfile.open(Form("%s/run%d_event%ld_Y.txt",savedir,fReader->GetRunHeader()->GetRun(),fReader->GetReadEvts()), std::ofstream::out);
2959  for(Int_t i = 1; i<=fHistEvent[1]->GetXaxis()->GetNbins(); i++)
2960  for(Int_t j = 1; j<=fHistEvent[1]->GetYaxis()->GetNbins(); j++)
2961  if(fHistEvent[1]->GetBinContent(i,j)>0)
2962  textfile << i << "\t" << j << endl;
2963  textfile.close();
2964  textfile.open(Form("%s/run%d_event%ld_Y_2.txt",savedir,fReader->GetRunHeader()->GetRun(),fReader->GetReadEvts()), std::ofstream::out);
2965  for(Int_t i = 1; i<=fHistEvent[0]->GetXaxis()->GetNbins(); i++)
2966  for(Int_t j = 1; j<=fHistEvent[0]->GetYaxis()->GetNbins(); j++)
2967  if(fHistEvent[1]->GetBinContent(i,j)>0)
2968  textfile << i << "\t" << j << "\t" << fHistEvent[1]->GetBinContent(i,j) << endl;
2969  textfile.close();
2970 
2971 }
2972 
2973 
2974 // //__________________________________________________________________
2975 // void HarpoRecoMonitorGui::Hist2dClicked(TVirtualPad* pad, TObject* select, Int_t event)
2976 // {
2977 // //this action function is called whenever you click the mouse
2978 // //it just prints the pad coordinates and channel number, and
2979 // //displays the pulse in time in another window
2980 
2981 // if (event != kButton1Down) return; //has to click to see pad signal in time
2982 // if (!select) return;
2983 // if (!select->InheritsFrom("TH2F")) return;
2984 // TH2F *hist = (TH2F*)select;
2985 // }
2986 
2987 
2988 //---------------------------------
2989 
2990 
2991 
2992 
2993 
2994 
2995 Bool_t HarpoRecoMonitorGui::ProcessMessage(Long_t msg, Long_t parm1, Long_t)
2996 {
2997 
2998  SetConfig();
2999  switch(GET_MSG(msg)){
3000  case kC_COMMAND:
3001  switch(GET_SUBMSG(msg)){
3002  case kCM_BUTTON:
3003  switch(parm1){
3004  case M_DISPLAY_EVENT: DisplayEvent(); break;
3005  case M_NEXT_EVENT: NextEvent(); break;
3006  case M_FIND_EVENT: FindEvent(); break;
3007  case M_SET_CONF_TRACKING:
3009  break;
3010  case M_CONF_TRACKING:
3012  break;
3013  case M_SET_CONF_CLUSTERING:
3015  break;
3016  case M_CONF_CLUSTERING:
3018  break;
3019  case M_SET_CONF_MATCHING:
3021  break;
3022  case M_CONF_MATCHING:
3024  break;
3025  case M_SET_CONF_VERTEXING:
3027  break;
3028  case M_CONF_VERTEXING:
3030  break;
3031  case M_SET_CONF_ANALYSIS:
3033  break;
3034  case M_CONF_ANALYSIS:
3036  break;
3037  case M_SET_CONF_SELECTOR:
3039  break;
3040  case M_CONF_SELECTOR:
3042  break;
3043  // case M_DISPLAY: Display(); break;
3044  case M_SAVE: Save(); break;
3045  case M_PREV_EVENT: PrevEvent(); break;
3046  case M_AUTOREFRESH:
3047  LoopEvents(fChooseDelay->GetNumber());
3048  break;
3049  default: cout << "Unknown button" << endl; break;
3050  }
3051  default:
3052  break;
3053  }
3054  default:
3055  break;
3056  }
3057 
3058  return kTRUE;
3059 }
3060 
3061 
3062 
3064 {
3065 
3066 }
3067 
3068 
3069 
3070 
3071 Double_t HarpoRecoMonitorGui::TruncSigma(TArrayD* vect, Double_t &truncS, Double_t &truncM, Double_t tl, Double_t th)
3072 {
3073  //
3074  // Calculates the truncated mean mean of the non zero value in vect
3075  // The truncation is done on the 100*tl% lowest and 100*(1-th) highest value
3076  //
3077  // debug(2,"truncated mean");
3078 
3079 
3080  Int_t size = vect->GetSize();
3081  Double_t truncMean = 0;
3082  Double_t truncSigma = 0;
3083  Int_t* index = new Int_t[size];
3084  TMath::Sort(size,vect->GetArray(),index,kFALSE);
3085  Int_t t = 0, tLow, tHigh;
3086 
3087 
3088  while(vect->At(index[t])<10&&t<size-1) t++;
3089  tLow = TMath::FloorNint(t + (size - t)*tl);
3090  tHigh = TMath::FloorNint(t + (size - t)*th);
3091 
3092  for(Int_t tind = tLow; tind<tHigh; tind++){
3093  truncMean += vect->At(index[tind]);
3094  truncSigma += vect->At(index[tind])*vect->At(index[tind]);
3095  }
3096 
3097  truncM = 0;
3098  truncS = 0;
3099  if(tHigh-tLow == 0) return 0;
3100 
3101  truncMean /= (tHigh-tLow);
3102  truncSigma /= (tHigh-tLow);
3103  truncSigma -= truncMean*truncMean;
3104 
3105  truncM = truncMean;
3106  truncS = TMath::Sqrt(truncSigma);
3107 
3108 
3109  return truncSigma;
3110 }
Double_t GetZvertex3D()
Double_t GetYvertex3D()
HarpoAnalyse * fSelector[kNselector]
void SetListOfRuns(TGComboBox *box, const char *dirname)
#define NTRACK
Double_t GetZfit(Int_t i=0)
HarpoKalmanFitting * fTrackFitting
virtual void Init()
Definition: HarpoAnalyse.h:56
Dcc Plane Y.
Definition: HarpoDet.h:20
TpcSimIonisationTrack * GetIonisationTrack(Int_t iTr)
Dummy analysis to run as test and example. Give basic histograms of the data.
TRootEmbeddedCanvas * ecTabSim
HarpoRecoMonitorGui(const TGWindow *p, UInt_t w, UInt_t h, UInt_t opt, int argc, char **argv)
const ULong_t kNanalysis
Long_t Find(Long_t eventNo)
Find raw event by event number.
Definition: HarpoReader.h:82
HarpoRecoEvent * GetRecoEvent()
Definition: HarpoEvent.h:46
TRootEmbeddedCanvas * ecTabVertexing
TClonesArray * GetKalmanTracksArray()
#define XPLANE
Definition: HarpoConfig.h:24
TGComboBox * fChooseClusteringType
TGComboBox * fChooseAnalysisType
Double_t GetY0()
Definition: TpcSimMCEvent.h:24
#define NCHAN
Definition: HarpoDccMap.h:16
Double_t GetPz1Vertex3D()
Double_t GetPy2Vertex3D()
Double_t GetMean()
TGCheckButton * fCheckAnimTracking
Double_t GetZvertex()
TGNumberEntry * fChooseNEvents
Dummy analysis to run as test and example. Give basic histograms of the data.
Double_t GetPz()
Definition: TpcSimMCEvent.h:32
Int_t GetNtracks()
Definition: HarpoSimEvent.h:54
TRootEmbeddedCanvas * ecTabClusters
Int_t GetEvAnaStatus()
Get Event Analise status.
TGTextButton * fAutoRefreshButton
Analysis and suppression of baseline fluctuations.
HarpoMatchingVertex.
void Display3D(TRootEmbeddedCanvas *c)
Double_t GetData(Int_t i, Int_t j)
Set/Get Data Cell.
Definition: HarpoDccMap.cxx:84
void BuildDisplayFrame(TGVerticalFrame *f)
Bool_t Init(hReadMode mode=hSyncTime)
Definition: HarpoReader.h:73
HarpoAnalyse * fClustering[kNclustering]
HarpoAnalyseBaselineFluct * fBaselineFluct
Double_t GetXend()
HarpoAnalyse * fTracking[kNtracking]
Double_t GetThetaVertex()
Double_t GetZ0()
Definition: TpcSimMCEvent.h:25
Bool_t isExist(ULong_t det)
Detecror date exist //! Number of Real Detectors.
Definition: HarpoDetSet.h:33
Int_t GetPdgCode()
Definition: TpcSimMCEvent.h:43
TGCheckButton * fCheckAnimFitting
HarpoAnalyse * fAnalysis[kNanalysis]
Double_t GetAngleTrack()
Track object, containing position, angle, charge and quality information.
Dcc Plane X.
Definition: HarpoDet.h:19
Object containing the reconstruction information for one event (with array of HarpoRecoClusters Harpo...
TRootEmbeddedCanvas * ecTabVertex
Matching object, containing matched track number, and quality info.
TRootEmbeddedCanvas * ecTabMatching
Dummy analysis to run as test and example. Give basic histograms of the data.
Dummy analysis to run as test and example. Give basic histograms of the data.
TGCheckButton * fCheckShowSpectrum
A class which instantiate the real top level reader.
Definition: HarpoReader.h:33
virtual void SetConfig()
Definition: HarpoAnalyse.h:67
2D vertex object, containing position, angle and associated track numbers, and quality info ...
Long_t GetEvtNo()
Get Event Number.
const ULong_t kNvertexing
TClonesArray * GetMatchingArray()
Bool_t NextEvent()
Definition: HarpoReader.h:62
Dummy analysis to run as test and example. Give basic histograms of the data.
TRootEmbeddedCanvas * ecTab3D
Double_t TruncSigma(TArrayD *vect, Double_t &truncS, Double_t &truncM, Double_t tl, Double_t th)
TClonesArray * CanvasPartition(TVirtualPad *C, const Int_t Nx, const Int_t Ny, Float_t lMargin, Float_t rMargin, Float_t bMargin, Float_t tMargin)
HarpoRunHeader * GetRunHeader()
Definition: HarpoEvent.h:43
ETestCommandIdentifiers
void DisplayTracks(TRootEmbeddedCanvas *c)
Track finder with Kalman filter.
TGComboBox * fChooseTrackingType
Double_t GetPy()
Definition: TpcSimMCEvent.h:31
TpcSimIonisationPoint * GetPoint(Int_t i)
Double_t GetPzVertex()
A virtual class which define intrafece between HARPO Reader and Event Analysis code.
TGNumberEntry * fChooseEvent
Int_t GetTriggerType()
Definition: Pmm2Event.h:29
const ULong_t kNclustering
const ULong_t kNselector
TClonesArray * GetVertexArray()
void SaveEvent(HarpoEvent *evt, const char *savedir)
Dummy analysis to run as test and example. Give basic histograms of the data.
A class store HARPO row DCC event data and header. End provide access metods to the row data...
Definition: HarpoSimEvent.h:24
Double_t GetPx1Vertex3D()
void LoopEvents(Int_t nEvents=1)
Dummy analysis to run as test and example. Give basic histograms of the data.
HarpoAnalysePedestalShift * fSaturation
Bool_t TestEvent(HarpoEvent *event)
HarpoRecoTracks object, Obtained with Kalman filter.
Double_t GetX0()
Cluster object, containing position, charge and quality information.
void Init()
Definition: HarpoConfig.h:63
void DisplayInfo(HarpoEvent *event)
virtual void DisplayAnalysis(TRootEmbeddedCanvas *, TGListBox *)
Definition: HarpoAnalyse.h:64
static int type
Bool_t GetSimDataFlag()
void BuildInfoFrame(TGHorizontalFrame *f)
unpacked dcc data The class contains the data map for DCC or Feminos The data is stored as a 2D TMatr...
Definition: HarpoDccMap.h:29
HarpoDetEvent * GetDetEvent(Long_t plane=XDCC)
Definition: HarpoEvent.cxx:93
TGComboBox * fChooseMatchingType
Double_t GetPy1Vertex3D()
Bool_t ProcessMessage(Long_t msg, Long_t parm1, Long_t parm2)
const ULong_t kNtracking
HarpoAnalyse * fVertexing[kNvertexing]
Data from Keller temperuture and pressure sensors.
Definition: HarpoDet.h:22
TRootEmbeddedCanvas * ecTabTracks
Dummy analysis to run as test and example. Give basic histograms of the data.
Double_t GetZstart()
TVirtualPad * MakeNiceHisto(TH1 *hist, TVirtualPad *c1, const char *opt, Bool_t copy)
Int_t GetNtracks()
void DisplayEmptyMap(TRootEmbeddedCanvas *c, Int_t copy=0)
Int_t GetIdClusterTrack()
void SetRunHeader(HarpoRunHeader *rh)
Definition: HarpoEvent.h:42
TGNumberEntry * fChooseDelay
TpcSimMCTrack * GetTrack(Int_t i)
Definition: TpcSimMCEvent.h:91
#define NADC
Definition: HarpoDccMap.h:18
TRootEmbeddedCanvas * ecSideSummary
TGComboBox * fChooseVertexingType
HarpoAnalyse * fMatching[kNmatching]
void SetHistStyle(TH1 *hist)
void DisplayVertex(TRootEmbeddedCanvas *c)
TGComboBox * fChooseSelectorType
TGTextButton * fDisplayEvent
Double_t GetX0()
Definition: TpcSimMCEvent.h:23
void DisplayClustersTracks(TRootEmbeddedCanvas *c)
Dummy analysis to run as test and example. Give basic histograms of the data.
#define TCLUSTER
Float_t GetEgamma()
#define YPLANE
Definition: HarpoConfig.h:25
HarpoEvent * GetEvent()
Definition: HarpoReader.h:68
void InitEvent(HarpoEvent *evt)
Unknown Detector.
Definition: HarpoDet.h:18
TRootEmbeddedCanvas * ecTabRaw
TpcSimMCEvent * GetMCEvent()
Definition: HarpoSimEvent.h:57
virtual void ProcessEvent(HarpoEvent *event)
Set pointer to new event for analyse, anlyse event , and delete.
TGNumberEntry * fChooseNch
Double_t GetChi2Vertex()
void BuildButtonsFrame(TGVerticalFrame *f)
Bool_t Lookup(const char *path, Bool_t &val)
Lookup function for scalar values.
Harpo Event Simulation.
Definition: HarpoConfig.h:32
A virtual class which define intrafece between HARPO Reader and Event Analysis code.
A class store HARPO raw PMM2 event buffer and header. End provide access metods to the row data...
Definition: Pmm2Event.h:19
TGCheckButton * fCheckAnimClustering
TClonesArray * GetVertex3DArray()
Long_t GetReadEvts()
Number of readed events.
Definition: HarpoReader.h:87
void DisplayMap(TRootEmbeddedCanvas *c, Int_t proj=0, Int_t copy=0)
const ULong_t tmax
HarpoEventHeader * GetHeader()
Definition: HarpoEvent.cxx:80
void print() const
Read config file in libconfig format.
Long64_t GetFromEvent()
Get First Event to process.
Definition: HarpoConfig.h:120
A class store HARPO row event data and header. Provide access metods to the row event data...
Definition: HarpoEvent.h:29
TRootEmbeddedCanvas * ecTabClustersTracks
Double_t GetPx2Vertex3D()
Double_t GetXstart()
TRootEmbeddedCanvas * ecTabAnalysis
Double_t GetPz2Vertex3D()
Dummy analysis to run as test and example. Give basic histograms of the data.
Double_t GetPxVertex()
const ULong_t kNmatching
#define CCLUSTER
void SetEvtNo(Long_t rnum)
Set Event Number.
virtual void ConfigFrame(TGMainFrame *, Int_t)
Definition: HarpoAnalyse.h:66
Double_t GetXfit(Int_t i=0)
HarpoConfig * gHConfig
TClonesArray * GetTracksArray()
TGNumberEntry * fChooseDelta
HarpoDccMap * GetDccMap(Long_t plane=XDCC)
Definition: HarpoEvent.cxx:108
A virtual class which define intrafece between HARPO Reader and Event Analysis code.
Int_t GetNclusterTrack()
static hReaderType gHReaderType
Reader Type.
Definition: HarpoConfig.h:179
TGTextButton * fDisplayBox
Double_t GetPx()
Definition: TpcSimMCEvent.h:30
HarpoRunHeader * GetRunHeader()
Definition: HarpoReader.h:70
Double_t GetXvertex()
Clustering algorithm, runs on RAW data (HarpoMap), produces HarpoRecoClusters objects.
Double_t GetZend()
HarpoRecoTracks object, obtained with Hough tracking method.
TClonesArray * GetClustersArray()
A class which keeps track of the entire configuration of the analysis.
Definition: HarpoConfig.h:50
R__EXTERN HarpoDetSet * gHDetSet
Definition: HarpoDetSet.h:71
Double_t GetXvertex3D()
void DisplaySim(TRootEmbeddedCanvas *c)
TGNumberEntry * fChooseSig
Dummy analysis to run as test and example. Give basic histograms of the data.
TRootEmbeddedCanvas * ecTabNoiseSuppr
3D vertex object, containing position, angle and associated 2D vertexes, and quality info ...