KaliVeda  1.13/01
Heavy-Ion Analysis Toolkit
KVTestIDGridDialog.cpp
Go to the documentation of this file.
1 #include "KVTestIDGridDialog.h"
2 #include "Riostream.h"
3 #include "KVIDGridManager.h"
4 #include "TGFileDialog.h"
5 #include "TPad.h"
6 #include <TGMsgBox.h>
7 #include <TTimer.h>
8 #include <TClass.h>
9 #include <TROOT.h>
10 #include <TGLayout.h>
11 #include <TCanvas.h>
12 #include "KVConfig.h"
13 #include "KVNucleus.h"
14 #include "TStyle.h"
15 #include "TBox.h"
16 #include "TLine.h"
17 #include "KVNuclearChart.h"
18 #include "KVIdentificationResult.h"
19 #include "KVIDZAFromZGrid.h"
20 
33 
35 
37  const TGWindow* main, UInt_t w,
38  UInt_t h, KVIDGraph* g, TH2* data_histo)
39 {
40  if (data_histo) {
41  fNameData.Form("%s", data_histo->GetName());
42  fNameZreal.Form("PID:H=%s_G=%s", data_histo->GetName(), g->GetName());
43  fNameZvsE.Form("PIDvsEres:H=%s_G=%s", data_histo->GetName(), g->GetName());
44  hzvsexmax = data_histo->GetXaxis()->GetXmax();
45  }
46  // set PID limits from grid
47  g->GetIdentifiers()->Sort(); // make sure lines are in order of increasing PID
48  hzrealxmin = ((KVIDentifier*)g->GetIdentifiers()->First())->GetPID() - 1.0;
49  hzrealxmax = ((KVIDentifier*)g->GetIdentifiers()->Last())->GetPID() + 1.0;
50  hzvseymin = hzrealxmin;
51  hzvseymax = hzrealxmax;
52 
53  if (g->HasMassIDCapability() && !g->InheritsFrom("KVIDZAFromZGrid")) {// KLUDGE! replaces if(!g->IsOnlyZId()) {
54  hzrealbins = 150 * (hzrealxmax - hzrealxmin);
55  hzvseybins = hzrealbins;
56  }
57 
58  //Dialog box for testing identification grid
59  fMain = new TGTransientFrame(p, main, w, h);
60  fMain->Connect("CloseWindow()", "KVTestIDGridDialog", this,
61  "DoClose()");
62  fMain->DontCallClose(); // to avoid double deletions.
63 
64  fSelectedGrid = g;
65  // use hierarchical cleaning
66  fMain->SetCleanup(kDeepCleanup);
67 
68  /******* frame for name of data histo ********/
69  fHdataFrame = new TGHorizontalFrame(fMain);
70  fHdataNameLabel = new TGLabel(fHdataFrame, "Name of data histo (TH2F)");
71  fHdataNameEntry = new TGTextEntry(fNameData, fHdataFrame);
72  fHdataNameEntry->SetWidth(150);
73  fHdataFrame->AddFrame(fHdataNameEntry,
74  new TGLayoutHints(kLHintsRight, 5, 5, 2, 2));
75  fHdataFrame->AddFrame(fHdataNameLabel,
76  new TGLayoutHints(kLHintsRight, 5, 5, 2, 2));
77 
78  /******* frame for Zreal histo **************/
79  fHzrealFrame = new TGGroupFrame(fMain, "ID test histo");
80  fHzrealNameFrame = new TGHorizontalFrame(fHzrealFrame);
81  fHzrealNameLabel =
82  new TGLabel(fHzrealNameFrame, "Name of PID histo (TH1F)");
83  fHzrealNameEntry = new TGTextEntry(fNameZreal, fHzrealNameFrame);
84  fHzrealNameEntry->SetWidth(150);
85  fHzrealNameFrame->AddFrame(fHzrealNameEntry,
86  new TGLayoutHints(kLHintsRight, 5, 5, 2, 2));
87  fHzrealNameFrame->AddFrame(fHzrealNameLabel,
88  new TGLayoutHints(kLHintsRight, 5, 5, 2, 2));
89  fHzrealBinsFrame = new TGHorizontalFrame(fHzrealFrame);
90  fHzrealBinsLabel = new TGLabel(fHzrealBinsFrame, "nbins");
91  fHzrealBinsEntry =
92  new TGNumberEntry(fHzrealBinsFrame, hzrealbins, 4, 0,
95  fHzrealXminLabel = new TGLabel(fHzrealBinsFrame, "xmin");
96  fHzrealXminEntry =
97  new TGNumberEntry(fHzrealBinsFrame, hzrealxmin, 4, 0,
100  fHzrealXmaxLabel = new TGLabel(fHzrealBinsFrame, "xmax");
101  fHzrealXmaxEntry =
102  new TGNumberEntry(fHzrealBinsFrame, hzrealxmax, 4, 0,
105  fHzrealBinsFrame->AddFrame(fHzrealXmaxEntry,
106  new TGLayoutHints(kLHintsRight, 5, 5, 2, 2));
107  fHzrealBinsFrame->AddFrame(fHzrealXmaxLabel,
108  new TGLayoutHints(kLHintsRight, 5, 5, 2, 2));
109  fHzrealBinsFrame->AddFrame(fHzrealXminEntry,
110  new TGLayoutHints(kLHintsRight, 5, 5, 2, 2));
111  fHzrealBinsFrame->AddFrame(fHzrealXminLabel,
112  new TGLayoutHints(kLHintsRight, 5, 5, 2, 2));
113  fHzrealBinsFrame->AddFrame(fHzrealBinsEntry,
114  new TGLayoutHints(kLHintsRight, 5, 5, 2, 2));
115  fHzrealBinsFrame->AddFrame(fHzrealBinsLabel,
116  new TGLayoutHints(kLHintsRight, 5, 5, 2, 2));
117  fHzrealFrame->AddFrame(fHzrealNameFrame,
118  new TGLayoutHints(kLHintsNormal, 5, 5, 2, 2));
119  fHzrealFrame->AddFrame(fHzrealBinsFrame,
120  new TGLayoutHints(kLHintsNormal, 5, 5, 2, 2));
121 
122  /******* frame for ZvsE histo **************/
123  fHzvseFrame = new TGGroupFrame(fMain, "PID vs. E histo");
124  fHzvseNameFrame = new TGHorizontalFrame(fHzvseFrame);
125  fHzvseNameLabel = new TGLabel(fHzvseNameFrame, "Name of histo (TH2F)");
126  fHzvseNameEntry = new TGTextEntry(fNameZvsE, fHzvseNameFrame);
127  fHzvseNameEntry->SetWidth(150);
128  fHzvseNameFrame->AddFrame(fHzvseNameEntry,
129  new TGLayoutHints(kLHintsRight, 5, 5, 2, 2));
130  fHzvseNameFrame->AddFrame(fHzvseNameLabel,
131  new TGLayoutHints(kLHintsRight, 5, 5, 2, 2));
132  fHzvseXBinsFrame = new TGHorizontalFrame(fHzvseFrame);
133  fHzvseXBinsLabel = new TGLabel(fHzvseXBinsFrame, "nbins");
134  fHzvseXBinsEntry =
135  new TGNumberEntry(fHzvseXBinsFrame, hzvsexbins, 4, 0,
138  fHzvseXminLabel = new TGLabel(fHzvseXBinsFrame, "E : min");
139  fHzvseXminEntry =
140  new TGNumberEntry(fHzvseXBinsFrame, hzvsexmin, 4, 0,
142  fHzvseXmaxLabel = new TGLabel(fHzvseXBinsFrame, "max");
143  fHzvseXmaxEntry =
144  new TGNumberEntry(fHzvseXBinsFrame, hzvsexmax, 4, 0,
146  fHzvseXBinsFrame->AddFrame(fHzvseXmaxEntry,
147  new TGLayoutHints(kLHintsRight, 5, 5, 2, 2));
148  fHzvseXBinsFrame->AddFrame(fHzvseXmaxLabel,
149  new TGLayoutHints(kLHintsRight, 5, 5, 2, 2));
150  fHzvseXBinsFrame->AddFrame(fHzvseXminEntry,
151  new TGLayoutHints(kLHintsRight, 5, 5, 2, 2));
152  fHzvseXBinsFrame->AddFrame(fHzvseXminLabel,
153  new TGLayoutHints(kLHintsRight, 5, 5, 2, 2));
154  fHzvseXBinsFrame->AddFrame(fHzvseXBinsEntry,
155  new TGLayoutHints(kLHintsRight, 5, 5, 2, 2));
156  fHzvseXBinsFrame->AddFrame(fHzvseXBinsLabel,
157  new TGLayoutHints(kLHintsRight, 5, 5, 2, 2));
158  fHzvseYBinsFrame = new TGHorizontalFrame(fHzvseFrame);
159  fHzvseYBinsLabel = new TGLabel(fHzvseYBinsFrame, "nbins");
160  fHzvseYBinsEntry =
161  new TGNumberEntry(fHzvseYBinsFrame, hzvseybins, 4, 0,
164  fHzvseYminLabel = new TGLabel(fHzvseYBinsFrame, "PID : min");
165  fHzvseYminEntry =
166  new TGNumberEntry(fHzvseYBinsFrame, hzvseymin, 4, 0,
169  fHzvseYmaxLabel = new TGLabel(fHzvseYBinsFrame, "max");
170  fHzvseYmaxEntry =
171  new TGNumberEntry(fHzvseYBinsFrame, hzvseymax, 4, 0,
174  fHzvseYBinsFrame->AddFrame(fHzvseYmaxEntry,
175  new TGLayoutHints(kLHintsRight, 5, 5, 2, 2));
176  fHzvseYBinsFrame->AddFrame(fHzvseYmaxLabel,
177  new TGLayoutHints(kLHintsRight, 5, 5, 2, 2));
178  fHzvseYBinsFrame->AddFrame(fHzvseYminEntry,
179  new TGLayoutHints(kLHintsRight, 5, 5, 2, 2));
180  fHzvseYBinsFrame->AddFrame(fHzvseYminLabel,
181  new TGLayoutHints(kLHintsRight, 5, 5, 2, 2));
182  fHzvseYBinsFrame->AddFrame(fHzvseYBinsEntry,
183  new TGLayoutHints(kLHintsRight, 5, 5, 2, 2));
184  fHzvseYBinsFrame->AddFrame(fHzvseYBinsLabel,
185  new TGLayoutHints(kLHintsRight, 5, 5, 2, 2));
186  fHzvseFrame->AddFrame(fHzvseNameFrame,
187  new TGLayoutHints(kLHintsNormal, 5, 5, 2, 2));
188  fHzvseFrame->AddFrame(fHzvseXBinsFrame,
189  new TGLayoutHints(kLHintsNormal, 5, 5, 2, 2));
190  fHzvseFrame->AddFrame(fHzvseYBinsFrame,
191  new TGLayoutHints(kLHintsNormal, 5, 5, 2, 2));
192 
193  /********** progress bar **********/
194  fProgressBar = new TGHProgressBar(fMain, TGProgressBar::kFancy, 300);
195  fProgressBar->SetFillType(TGProgressBar::kBlockFill);
196  fProgressBar->ShowPosition();
197  fProgressBar->SetBarColor("red");
198 
199  /************buttons***************/
200  fButtonsFrame = new TGHorizontalFrame(fMain, 100, 50);
201  fTestButton = new TGTextButton(fButtonsFrame, "&Test");
202  fTestButton->Connect("Clicked()", "KVTestIDGridDialog", this,
203  "TestGrid()");
204  fCloseButton = new TGTextButton(fButtonsFrame, "&Close");
205  fCloseButton->Connect("Clicked()", "KVTestIDGridDialog", this,
206  "DoClose()");
207 
208  fButtonsFrame->AddFrame(fTestButton,
211  kLHintsCenterY, 2, 2, 5, 5));
212  fButtonsFrame->AddFrame(fCloseButton,
215  kLHintsCenterY, 2, 2, 5, 5));
216 
217  fMain->AddFrame(fHdataFrame,
218  new TGLayoutHints(kLHintsLeft | kLHintsTop, 2, 2, 15,
219  5));
220  fMain->AddFrame(fHzrealFrame,
221  new TGLayoutHints(kLHintsLeft | kLHintsTop, 2, 2, 5,
222  5));
223  fMain->AddFrame(fHzvseFrame,
224  new TGLayoutHints(kLHintsLeft | kLHintsTop, 2, 2, 5,
225  10));
226  fMain->AddFrame(fProgressBar,
227  new TGLayoutHints(kLHintsCenterX | kLHintsTop, 2, 2, 5,
228  5));
229  fMain->AddFrame(fButtonsFrame,
230  new TGLayoutHints(kLHintsCenterX | kLHintsTop, 2, 2, 5,
231  5));
232 
233  //layout and display window
234  fMain->MapSubwindows();
235  fMain->Resize(fMain->GetDefaultSize());
236 
237  // position relative to the parent's window
238  fMain->CenterOnParent();
239 
240  fMain->SetWindowName("Test ID grid");
241  fMain->MapWindow();
242 
243  // clean up results histograms
244  histos.SetOwner();
245 }
246 
248 {
249  TTimer::SingleShot(150, "KVTestIDGridDialog", this, "CloseWindow()");
250 }
251 
253 {
254  delete this;
255 }
256 
257 KVTestIDGridDialog::~KVTestIDGridDialog()
258 {
259  //Delete all widgets
260 
261  gStyle->SetOptTitle(0);
262  delete fMain;
263 }
264 
266 {
267  //read current values of all fields, find/create the histograms,
268  //and test the identification
269 
273 
275  || !CheckNameOK(fNameZvsE)) {
276 
277  new TGMsgBox(gClient->GetRoot(), fMain, "Test ID Grid",
278  "Give a valid name for each histo", kMBIconExclamation);
279  return;
280  }
281 
285 
289 
293 
294  Int_t hnmin = ((KVIDentifier*)fSelectedGrid->GetIdentifiers()->First())->GetA() - ((KVIDentifier*)fSelectedGrid->GetIdentifiers()->First())->GetZ() - 1.0;
295  Int_t hnmax = ((KVIDentifier*)fSelectedGrid->GetIdentifiers()->Last())->GetA() - ((KVIDentifier*)fSelectedGrid->GetIdentifiers()->Last())->GetZ() + 1.0;
296  Int_t hamin = ((KVIDentifier*)fSelectedGrid->GetIdentifiers()->First())->GetA();
297  Int_t hamax = ((KVIDentifier*)fSelectedGrid->GetIdentifiers()->Last())->GetA();
298  Int_t hzmin = ((KVIDentifier*)fSelectedGrid->GetIdentifiers()->First())->GetZ();
299  Int_t hzmax = ((KVIDentifier*)fSelectedGrid->GetIdentifiers()->Last())->GetZ();
300  if (fSelectedGrid->InheritsFrom("KVIDZAFromZGrid")) {
301  KVList* is_list = ((KVIDZAFromZGrid*)fSelectedGrid)->GetIntervalSets();
302  if (is_list && is_list->GetEntries()) {
303  KVList* iv_list = ((interval_set*)is_list->Last())->GetIntervals();
304  if (iv_list && iv_list->GetEntries()) {
305  interval* itv = (interval*)iv_list->Last();
306  hnmax = itv->GetA() - itv->GetZ();
307  hamax = itv->GetA();
308  hzmax = itv->GetZ();
309  itv = (interval*)((interval_set*)is_list->First())->GetIntervals()->First();
310  if (itv) {
311  hamin = itv->GetA();
312  hzmin = itv->GetZ();
313  }
314  }
315  }
316  }
317 
318  TH2F* hdata = (TH2F*) gROOT->FindObject(fNameData.Data());
319  if (!hdata) {
320 
321  new TGMsgBox(gClient->GetRoot(), fMain, "Test ID Grid",
322  "Check name of data histogram", kMBIconExclamation);
323  return;
324  }
325 
326  KVNameValueList histo_names;
327 
328  // clear any previous results
329  histos.Clear();
330 
331  // make results histograms
332  auto hzreal =
333  new TH1F(fNameZreal.Data(), "PID distribution", hzrealbins,
335  add_histo(hzreal);
336  histo_names.SetValue("ID_REAL", fNameZreal.Data());
337 
338  auto hzvse =
339  new TH2F(fNameZvsE.Data(), "PID vs. E_{res}", hzvsexbins, hzvsexmin,
341 
342  histo_names.SetValue("ID_REAL_VS_ERES", fNameZvsE.Data());
343  add_histo(hzvse);
344 
345  // A vs Z map in case of mass identification
346  // A dist for isotopically identified particles
348 
349  // make sure to always begin from Z=1 N=0
350  hnmin = 0;
351  auto mapzrealxmin = 0;
352  auto hazreal = new TH2F("AZMap", "N vs. Z [Z&A identified]", 30 * (hnmax - hnmin + 1.5), hnmin - 0.5, hnmax + 2, 30 * (hzrealxmax - mapzrealxmin + 1), mapzrealxmin - 1, hzrealxmax + 1);
353 
354  histo_names.SetValue("Z_A_REAL", "AZMap");
355  add_histo(hazreal);
356 
357  auto adist_aident = new TH2F("ZADIST_AIDENT", "A vs. Z distribution [Z&A identified]", hzmax - hzmin + 1, hzmin - .5, hzmax + .5, hamax - hamin + 1, hamin - .5, hamax + .5);
358  histo_names.SetValue("ZADIST_AIDENT", "ZADIST_AIDENT");
359  add_histo(adist_aident);
360 
361  auto hzreal_aident = new TH1F("ID_REAL_AIDENT", "PID distribution [Z&A identified]",
363  histo_names.SetValue("ID_REAL_AIDENT", "ID_REAL_AIDENT");
364  add_histo(hzreal_aident);
365 
366  auto hzreal_zident = new TH1F("ID_REAL_ZIDENT", "PID distribution [only Z identified]",
368  histo_names.SetValue("ID_REAL_ZIDENT", "ID_REAL_ZIDENT");
369  add_histo(hzreal_zident);
370 
371  auto hzvse =
372  new TH2F(fNameZvsE.Data(), "PID vs. E_{res}", hzvsexbins, hzvsexmin,
374 
375  histo_names.SetValue("ID_REAL_VS_ERES", fNameZvsE.Data());
376  add_histo(hzvse);
377 
378  auto hzvse_aident =
379  new TH2F("ID_REAL_VS_ERES_AIDENT", "PID vs. E_{res} [Z&A identified]", hzvsexbins, hzvsexmin,
381 
382  histo_names.SetValue("ID_REAL_VS_ERES_AIDENT", "ID_REAL_VS_ERES_AIDENT");
383  add_histo(hzvse_aident);
384 
385  auto hzvse_zident =
386  new TH2F("ID_REAL_VS_ERES_ZIDENT", "PID vs. E_{res} [only Z identified]", hzvsexbins, hzvsexmin,
388 
389  histo_names.SetValue("ID_REAL_VS_ERES_ZIDENT", "ID_REAL_VS_ERES_ZIDENT");
390  add_histo(hzvse_zident);
391  }
392 
393  //progress bar set up
394  fProgressBar->SetRange(0, hdata->GetSum());
395  fProgressBar->Reset();
396  fSelectedGrid->Connect("Increment(Float_t)", "TGHProgressBar",
397  fProgressBar, "SetPosition(Float_t)");
398 #ifdef __WITHOUT_TGBUTTON_SETENABLED
399 #define SetEnabled(flag) \
400  SetState( flag ? kButtonUp : kButtonDisabled )
401 #endif
404  fSelectedGrid->TestIdentification(hdata, histos, histo_names);
407 #ifdef __WITHOUT_TGBUTTON_SETENABLED
408 #undef SetEnabled
409 #endif
410  fSelectedGrid->Disconnect("Increment(Float_t)", fProgressBar,
411  "SetPosition(Float_t)");
412  fProgressBar->Reset();
413 
414  TCanvas* cc = new TCanvas;
415  resultsCanvas.reset(cc);
416 
417  gStyle->SetOptTitle(); // display histo title in pads
418 
420  cc->Divide(2, 3);
421  cc->SetWindowPosition(100, 100);
422  cc->SetWindowSize(1000, 1300);
423  }
424  else {
425  cc->Divide(2, 1);
426  cc->SetWindowPosition(100, 100);
427  cc->SetWindowSize(1000, 500);
428  }
429 
430  int ipad = 1;
431 
432  // show results in canvas
433  auto pad = cc->cd(ipad++);
434  pad->SetGridx();
435  pad->SetGridy();
436  hzreal->SetStats(kFALSE);
437  hzreal->Draw("hist");
438  pad->Modified();
439  pad->Update();
440 
441  pad = cc->cd(ipad++);
442  pad->SetLogz(kTRUE);
443  pad->SetGridx();
444  pad->SetGridy();
445  hzvse->SetStats(kFALSE);
446  hzvse->Draw("zcol");
447  pad->Modified();
448  pad->Update();
449 
451  pad = cc->cd(ipad++);
452  pad->SetGridx();
453  pad->SetGridy();
454  hzreal = histos.get_object<TH1F>("ID_REAL_AIDENT");
455  hzreal->SetStats(kFALSE);
456  hzreal->Draw("hist");
457  pad->Modified();
458  pad->Update();
459 
460  pad = cc->cd(ipad++);
461  pad->SetLogz(kTRUE);
462  pad->SetGridx();
463  pad->SetGridy();
464  hzvse = histos.get_object<TH2F>("ID_REAL_VS_ERES_AIDENT");
465  hzvse->SetStats(kFALSE);
466  hzvse->Draw("zcol");
467  pad->Modified();
468  pad->Update();
469 
470  pad = cc->cd(ipad++);
471  pad->SetGridx();
472  pad->SetGridy();
473  hzreal = histos.get_object<TH1F>("ID_REAL_ZIDENT");
474  hzreal->SetStats(kFALSE);
475  hzreal->Draw("hist");
476  pad->Modified();
477  pad->Update();
478 
479  pad = cc->cd(ipad++);
480  pad->SetLogz(kTRUE);
481  pad->SetGridx();
482  pad->SetGridy();
483  hzvse = histos.get_object<TH2F>("ID_REAL_VS_ERES_ZIDENT");
484  hzvse->SetStats(kFALSE);
485  hzvse->Draw("zcol");
486  pad->Modified();
487  pad->Update();
488 
489  auto kvc = new KVCanvas;
490  resultsKVCanvas.reset(kvc);
491  kvc->SetWindowPosition(1000, 100);
492  kvc->SetWindowSize(900, 900);
493  kvc->SetLogz();
494  auto hazreal = histos.get_object<TH2F>("AZMap");
495  hazreal->Draw("col");
496 
497  TAxis* ax = 0;
498  ax = hazreal->GetXaxis();
499  ax->SetNdivisions(000);
500  ax->SetLabelOffset(-0.04);
501  ax->SetTickLength(0);
502 
503  ax = hazreal->GetYaxis();
504  ax->SetNdivisions(000);
505  ax->SetLabelOffset(-0.03);
506  ax->SetTickLength(0);
507  hazreal->SetMinimum(1);
508  DrawChart(kvc, -1, hzrealxmax, -1, hnmax + 2);
509  kvc->Modified();
510  kvc->Update();
511  }
512 
513 }
514 
515 
517 {
518  Double_t marging = 0.001;
519  pp->SetTopMargin(marging);
520  pp->SetRightMargin(marging);
521  pp->SetBottomMargin(marging);
522  pp->SetLeftMargin(marging);
523 
524  KVNuclearChart* nucChar = new KVNuclearChart(nmin + 1, nmax, zmin, zmax);
525  nucChar->SetShowSymbol();
526  nucChar->Draw("same");
527 
528  return;
529 }
530 
531 
532 
533 
534 
535 
536 
537 
int Int_t
unsigned int UInt_t
ClassImp(KVPartitionList) void KVPartitionList
Initialisation.
const Bool_t kFALSE
double Double_t
const Bool_t kTRUE
#define gClient
kDeepCleanup
kLHintsRight
kLHintsLeft
kLHintsCenterY
kLHintsNormal
kLHintsCenterX
kLHintsTop
kLHintsExpandX
kMBIconExclamation
#define gROOT
R__EXTERN TStyle * gStyle
TCanvas with mouse-controlled dynamic zoom and pan & scan.
Definition: KVCanvas.h:53
Base class for particle identification in a 2D map.
Definition: KVIDGraph.h:31
virtual void TestIdentification(TH2F *data, KVHashList &histos, KVNameValueList &histo_names)
Definition: KVIDGraph.cpp:1706
virtual Bool_t HasMassIDCapability() const
Definition: KVIDGraph.h:168
const KVList * GetIdentifiers() const
Definition: KVIDGraph.h:297
Hybrid charge & mass identification grid.
Base class for graphical cuts used in particle identification.
Definition: KVIDentifier.h:27
Extended TList class which owns its objects by default.
Definition: KVList.h:27
Handles lists of named parameters with different types, a list of KVNamedParameter objects.
void SetValue(const Char_t *name, value_type value)
Used to draw nuclear chart.
void SetShowSymbol(Int_t value=1)
void Draw(Option_t *option="")
T * get_object(const TString &name) const
virtual TObject * Last() const
virtual void Clear(Option_t *option="")
virtual TObject * First() const
GUI for testing identification grids.
static TString fNameZvsE
std::unique_ptr< KVCanvas > resultsKVCanvas
TGNumberEntry * fHzrealXminEntry
TGNumberEntry * fHzvseXmaxEntry
TGTextButton * fTestButton
TGNumberEntry * fHzvseYmaxEntry
TGTextEntry * fHdataNameEntry
TGHProgressBar * fProgressBar
TGNumberEntry * fHzvseXBinsEntry
void DrawChart(TVirtualPad *cc, Int_t zmin, Int_t zmax, Int_t nmin, Int_t nmax)
TGTextEntry * fHzvseNameEntry
Bool_t CheckNameOK(const TString &name)
TGNumberEntry * fHzrealXmaxEntry
TGNumberEntry * fHzvseXminEntry
static Double_t hzvsexmax
static TString fNameData
TGNumberEntry * fHzvseYminEntry
TGTextEntry * fHzrealNameEntry
TGTransientFrame * fMain
std::unique_ptr< TCanvas > resultsCanvas
TGNumberEntry * fHzvseYBinsEntry
static Double_t hzvsexmin
static TString fNameZreal
TGTextButton * fCloseButton
TGNumberEntry * fHzrealBinsEntry
Stat_t GetSum() const
virtual void SetLabelOffset(Float_t offset=0.005)
virtual void SetNdivisions(Int_t n1, Int_t n2, Int_t n3, Bool_t optim=kTRUE)
virtual void SetTickLength(Float_t length=0.03)
virtual void SetBottomMargin(Float_t bottommargin)
virtual void SetLeftMargin(Float_t leftmargin)
virtual void SetRightMargin(Float_t rightmargin)
virtual void SetTopMargin(Float_t topmargin)
virtual Int_t GetEntries() const
virtual void SetEnabled(Bool_t e=kTRUE)
virtual Long_t GetIntNumber() const
virtual Double_t GetNumber() const
void SetRange(Float_t min, Float_t max)
virtual void Reset()
const char * GetText() const
virtual void Draw(Option_t *option="")
virtual void SetStats(Bool_t stats=kTRUE)
virtual Bool_t InheritsFrom(const char *classname) const
const char * Data() const
void SetOptTitle(Int_t tit=1)
static void SingleShot(Int_t milliSec, const char *receiver_class, void *receiver, const char *method)
int main(int argc, char **argv)
TH1 * h
const long double g
masses
Definition: KVUnits.h:72
const long double cc
volumes
Definition: KVUnits.h:83