KaliVeda  1.12/06
Heavy-Ion Analysis Toolkit
KVSpIdGUI.cpp
Go to the documentation of this file.
1 //Created by KVClassFactory on Wed Nov 28 13:11:32 2012
2 //Author: dgruyer
3 
4 #include "KVSpIdGUI.h"
5 #include "Riostream.h"
6 #include "KVIDGridManager.h"
7 #include "TGFileDialog.h"
8 #include "TPad.h"
9 #include <TGMsgBox.h>
10 #include <TTimer.h>
11 #include <TClass.h>
12 #include <TROOT.h>
13 #include <TGLayout.h>
14 #include <TCanvas.h>
15 #include "KVConfig.h"
16 #include "KVNucleus.h"
17 #include "TStyle.h"
18 #include "TBox.h"
19 #include "TLine.h"
20 #include "KVNuclearChart.h"
21 #include "KVHistoManipulator.h"
22 
34 
36 
37 
38 
39 
41 KVSpIdGUI::KVSpIdGUI(KVIDGraph* g, TH2* data_histo, Double_t xm, Double_t ym, Double_t pdx, Double_t pdy, const char* opt)
42 {
43  fOption = opt;
44  fHisto = data_histo;
45  fGrid = g;
46  fScaledHisto = 0;
47  fIdentificator = 0;
48 
49  fXm = xm;
50  fYm = ym;
51  fPdx = pdx;
52  fPdy = pdy;
53 
54  fUserParameter = (fZp > 0);
55  fSfx = 1.;
56  fSfy = 1.;
57 
58  if (fHisto) {
59  fSfx = fHisto->GetNbinsX() * 1. / (fHisto->GetXaxis()->GetXmax());
60  fSfy = fHisto->GetNbinsY() * 1 / (fHisto->GetYaxis()->GetXmax());
61  }
62 
63  //Dialog box for testing identification grid
64  fMain = new TGTransientFrame(gClient->GetDefaultRoot(), gClient->GetDefaultRoot(), 10, 10);
65  fMain->Connect("CloseWindow()", "KVSpIdGUI", this, "DoClose()");
66  fMain->DontCallClose(); // to avoid double deletions.
67 
68  fGrid = g;
69  // use hierarchical cleaning
70  fMain->SetCleanup(kDeepCleanup);
71 
72  /******* frame for initialization **************/
73  fInitFrame = new TGGroupFrame(fMain, "Initialization");
74 
75  fZpFrame = new TGHorizontalFrame(fInitFrame);
76  fZpLabel = new TGLabel(fZpFrame, "Z ");
77  fZpEntry = new TGNumberEntry(fZpFrame, fZp, 6, 0,
79  fZpEntry->SetState(kTRUE);
80 
81  fZpFrame->AddFrame(fZpLabel, new TGLayoutHints(kLHintsLeft, 2, 2, 2, 2));
82  fZpFrame->AddFrame(fZpEntry, new TGLayoutHints(kLHintsLeft, 2, 2, 2, 2));
83 
84  fSpiderFactorLabel = new TGLabel(fZpFrame, "Parameter ");
85  fSpiderFactorEntry = new TGNumberEntry(fZpFrame, fSpFactor, 6, 0,
87  fSpiderFactorRadio = new TGCheckButton(fZpFrame);
88  fSpiderFactorRadio->Connect("Toggled(Bool_t)", "KVSpIdGUI", this, "SetUserParameter(Bool_t)");
89 
90  SetUserParameter(fUserParameter);
91 
92  fZpFrame->AddFrame(fSpiderFactorRadio, new TGLayoutHints(kLHintsRight, 2, 2, 2, 2));
93  fZpFrame->AddFrame(fSpiderFactorEntry, new TGLayoutHints(kLHintsRight, 2, 2, 2, 2));
94  fZpFrame->AddFrame(fSpiderFactorLabel, new TGLayoutHints(kLHintsRight, 5, 2, 2, 2));
95  fInitFrame->AddFrame(fZpFrame, new TGLayoutHints(kLHintsExpandX, 2, 2, 2, 2));
96 
97 
98  /******* frame for options **************/
99  fOptFrame = new TGGroupFrame(fMain, "Options");
100 
101  fTypeFrame = new TGHorizontalFrame(fOptFrame);
102  fTypeLabel = new TGLabel(fTypeFrame, "Grid ");
103 
104  fTypeChoice = new TGComboBox(fTypeFrame);
105  fTypeChoice->AddEntry("Si-CsI", 0);
106  fTypeChoice->AddEntry("Si-Si", 1);
107  fTypeChoice->AddEntry("ChIo-Si", 2);
108  fTypeChoice->AddEntry("Other", 3);
109  fTypeChoice->Resize(80, 22);
110  fTypeChoice->Select(fMatrixType);
111 
112  fTypeFrame->AddFrame(fTypeLabel, new TGLayoutHints(kLHintsLeft, 2, 2, 2, 2));
113  fTypeFrame->AddFrame(fTypeChoice, new TGLayoutHints(kLHintsLeft, 2, 2, 2, 2));
114 
115 
116  fNPointsLabel = new TGLabel(fTypeFrame, "Np : ");
117  fNPointsEntry = new TGNumberEntry(fTypeFrame, fNPoints, 4, 0,
119 
120  fTypeFrame->AddFrame(fNPointsEntry, new TGLayoutHints(kLHintsRight, 2, 2, 2, 2));
121  fTypeFrame->AddFrame(fNPointsLabel, new TGLayoutHints(kLHintsRight, 2, 2, 2, 2));
122 
123  fPiedLabel = new TGLabel(fTypeFrame, " Piedestal ");
124 
125  fPiedChoice = new TGComboBox(fTypeFrame);
126  fPiedChoice->AddEntry("User", 0);
127  fPiedChoice->AddEntry("Auto", 1);
128  fPiedChoice->AddEntry("None", 2);
129  fPiedChoice ->Resize(80, 22);
130  fPiedChoice->Select(fPiedType);
131 
132  fTypeFrame->AddFrame(fPiedChoice, new TGLayoutHints(kLHintsRight, 2, 2, 2, 2));
133  fTypeFrame->AddFrame(fPiedLabel, new TGLayoutHints(kLHintsRight, 2, 2, 2, 2));
134 
135  fOptFrame->AddFrame(fTypeFrame, new TGLayoutHints(kLHintsExpandX, 2, 2, 2, 2));
136 
137  fDebugFrame = new TGHorizontalFrame(fOptFrame);
138  fDebugBut = new TGCheckButton(fDebugFrame, "Debug");
139  fDebugBut->SetState((!fDebug ? kButtonUp : kButtonDown), kFALSE);
140  fDebugBut->Connect("Toggled(Bool_t)", "KVSpIdGUI", this, "SetDebug(Bool_t)");
141 
142  fCutBut = new TGCheckButton(fDebugFrame, "Keep cuts");
143  fCutBut->SetState((!fUseCut ? kButtonUp : kButtonDown), kFALSE);
144  fCutBut->Connect("Toggled(Bool_t)", "KVSpIdGUI", this, "SetUseCut(Bool_t)");
145 
146  fDebugFrame->AddFrame(fCutBut, new TGLayoutHints(kLHintsCenterX, 2, 2, 2, 2));
147  fDebugFrame->AddFrame(fDebugBut, new TGLayoutHints(kLHintsCenterX, 2, 2, 2, 2));
148  fOptFrame->AddFrame(fDebugFrame, new TGLayoutHints(kLHintsExpandX, 2, 2, 2, 2));
149 
150 
151  /******* frame for advanced options **************/
152  fAdOptFrame = new TGGroupFrame(fMain, "Advanced options");
153 
154  fAngleUpFrame = new TGHorizontalFrame(fAdOptFrame);
155  fAngleUpLabel = new TGLabel(fAngleUpFrame, "Angles : above");
156  fAngleUpEntry = new TGNumberEntry(fAngleUpFrame, fAnglesUp, 4, 0,
158 
159  fAngleUpFrame->AddFrame(fAngleUpLabel, new TGLayoutHints(kLHintsLeft, 2, 2, 2, 2));
160  fAngleUpFrame->AddFrame(fAngleUpEntry, new TGLayoutHints(kLHintsLeft, 2, 2, 2, 2));
161 
162  fAngleDownLabel = new TGLabel(fAngleUpFrame, " below");
163  fAngleDownEntry = new TGNumberEntry(fAngleUpFrame, fAnglesDown, 4, 0,
165 
166  fAngleUpFrame->AddFrame(fAngleDownLabel, new TGLayoutHints(kLHintsLeft, 2, 2, 2, 2));
167  fAngleUpFrame->AddFrame(fAngleDownEntry, new TGLayoutHints(kLHintsLeft, 2, 2, 2, 2));
168 
169  fApertureLabel = new TGLabel(fAngleUpFrame, " alpha");
170  fApertureUpEntry = new TGNumberEntry(fAngleUpFrame, fAlpha, 4, 0,
172 
173  fAngleUpFrame->AddFrame(fApertureLabel, new TGLayoutHints(kLHintsLeft, 2, 2, 2, 2));
174  fAngleUpFrame->AddFrame(fApertureUpEntry, new TGLayoutHints(kLHintsLeft, 2, 2, 2, 2));
175  fAdOptFrame->AddFrame(fAngleUpFrame, new TGLayoutHints(kLHintsExpandX, 2, 2, 2, 2));
176 
177  /********** progress bar **********/
178  fProgressBar = new TGHProgressBar(fMain, TGProgressBar::kFancy, 300);
179  fProgressBar->SetFillType(TGProgressBar::kBlockFill);
180  fProgressBar->ShowPosition();
181  fProgressBar->SetBarColor("red");
182 
183  /************buttons***************/
184  fButtonsFrame = new TGHorizontalFrame(fMain, 100, 50);
185  fTestButton = new TGTextButton(fButtonsFrame, "&Spider");
186  fTestButton->Connect("Clicked()", "KVSpIdGUI", this,
187  "SpiderIdentification()");
188  fCloseButton = new TGTextButton(fButtonsFrame, "&Close");
189  fCloseButton->Connect("Clicked()", "KVSpIdGUI", this,
190  "DoClose()");
191 
192  fButtonsFrame->AddFrame(fTestButton,
195  kLHintsCenterY, 2, 2, 5, 5));
196  fButtonsFrame->AddFrame(fCloseButton,
199  kLHintsCenterY, 2, 2, 5, 5));
200 
201 
202  fMain->AddFrame(fInitFrame, new TGLayoutHints(kLHintsLeft | kLHintsTop | kLHintsExpandX, 2, 2, 10, 2));
203  fMain->AddFrame(fOptFrame, new TGLayoutHints(kLHintsLeft | kLHintsTop | kLHintsExpandX, 2, 2, 2, 2));
204  fMain->AddFrame(fAdOptFrame, new TGLayoutHints(kLHintsLeft | kLHintsTop | kLHintsExpandX, 2, 2, 2, 2));
205  fMain->AddFrame(fProgressBar, new TGLayoutHints(kLHintsCenterX | kLHintsTop, 5, 5, 5, 5));
206  fMain->AddFrame(fButtonsFrame, new TGLayoutHints(kLHintsCenterX | kLHintsTop, 2, 2, 2, 2));
207 
208  //layout and display window
209  fMain->MapSubwindows();
210  fMain->Resize(fMain->GetDefaultSize());
211 
212  // position relative to the parent's window
213  fMain->CenterOnParent();
214 
215  fMain->SetWindowName("Spider Identification");
216  fMain->MapWindow();
217 
218 }
219 
220 
221 
223 
225 {
226  TTimer::SingleShot(150, "KVSpIdGUI", this, "CloseWindow()");
227 }
228 
229 
230 
232 
234 {
235  delete this;
236 }
237 
238 
239 
242 
244 {
245  //Delete all widgets
246  if ((fIdentificator) && (!fDebug)) delete fIdentificator;
247  if ((fScaledHisto) && (!fDebug)) delete fScaledHisto;
248  delete fMain;
249 }
250 
251 
252 
253 
260 
262 {
263  // Copy constructor
264  // This ctor is used to make a copy of an existing object (for example
265  // when a method returns an object), and it is always a good idea to
266  // implement it.
267  // If your class allocates memory in its constructor(s) then it is ESSENTIAL :-)
268 
269 }
270 
271 
272 
274 
276 {
277  fUserParameter = par;
281 }
282 
283 
284 
286 
288 {
289  Double_t fact = TMath::Sqrt((fXm - fPdx) * (fXm - fPdx) * (fSfx * fSfx) + (fYm - fPdy) * (fYm - fPdy) * (fSfy * fSfy)) / (20.*fZp * 12.);
290  return fact;
291 }
292 
293 
294 
296 
298 {
299  if ((!fHisto) || (!fGrid)) return;
300 
301  TVirtualPad* pad = fGrid->GetPad();
302  fGrid->UnDraw();
303 
307 
315 
316  TH2* tmpHisto = fHisto;
317  TList* tmpCut = 0;
318  if (fUseCut) {
319  tmpHisto = (TH2*)fHisto->Clone(Form("%s_cut", fHisto->GetName()));
320  tmpHisto->Reset();
321  for (int i = 1; i <= fHisto->GetNbinsX(); i++) {
322  for (int j = 1; j <= fHisto->GetNbinsY(); j++) {
323  Stat_t ww = fHisto->GetBinContent(i, j);
324  Axis_t x0 = fHisto->GetXaxis()->GetBinCenter(i);
325  Axis_t y0 = fHisto->GetYaxis()->GetBinCenter(j);
326  if (fGrid->IsIdentifiable(x0, y0)) tmpHisto->Fill(x0, y0, ww);
327  }
328  }
329  tmpCut = (TList*)fGrid->GetCuts()->Clone("tmpCuts");
330  }
331 
332  fGrid->Clear();
333 
334  if (fScaledHisto) delete fScaledHisto;
336 
337  TF1 RtLt("RtLt", Form("x*%lf", fSfx), 0, tmpHisto->GetXaxis()->GetXmax());
338  TF1 RtLty("RtLty", Form("x*%lf", fSfy), 0, tmpHisto->GetXaxis()->GetXmax());
339  fScaledHisto = (TH2F*)hm.ScaleHisto(tmpHisto, &RtLt, &RtLty);
340 
341  if (fIdentificator) delete fIdentificator;
343 
344  switch (fPiedType) {
345  case kUser:
348  break;
349  case kAuto:
350  break;
351  case kNone:
352  fIdentificator->SetX0(0.);
353  fIdentificator->SetY0(0.);
354  }
355 
359 
361  fProgressBar->Reset();
362  fIdentificator->Connect("Increment(Float_t)", "TGHProgressBar", fProgressBar, "SetPosition(Float_t)");
363 
369 
370  fIdentificator->Disconnect("Increment(Float_t)", fProgressBar, "SetPosition(Float_t)");
371  fProgressBar->Reset();
372 
374 
376 
377  KVIDZALine* TheLine = 0;
378  int zmax = 0;
379 
380  KVSpiderLine* spline = 0;
381  TIter next_line(ll);
382  while ((spline = (KVSpiderLine*)next_line())) {
383  if ((spline->GetN() > 10)) { //&&(spline->GetX(0)<=fIdentificator->GetX0()+200.))
384  TF1* ff1 = 0;
385 
386 // printf("#%s# z=%d\n",spline->GetName(),spline->GetZ());
387 
388  if (type == KVSpiderIdentificator::kSiCsI) ff1 = spline->GetFunction(fPdx * fSfx, TMath::Max(fScaledHisto->GetXaxis()->GetXmax() * 0.9, spline->GetX(spline->GetN() - 1)));
389  else if (type == KVSpiderIdentificator::kSiSi) ff1 = spline->GetFunction(fPdx * fSfx, TMath::Min(fScaledHisto->GetXaxis()->GetXmax() * 0.9, spline->GetX(spline->GetN() - 1) * 1.5));
390  else if (type == KVSpiderIdentificator::kChIoSi) ff1 = spline->GetFunction(fPdx * fSfx, TMath::Min(fScaledHisto->GetXaxis()->GetXmax() * 0.9, spline->GetX(spline->GetN() - 1) * 1.5));
391  else ff1 = spline->GetFunction();
392 
393  /*
394  if ((type == kSiCsI) && (ff1->GetParameter(1) >= 3000. || (ff1->GetParameter(2) <= 0.35) || (ff1->GetParameter(2) >= 1.))) {
395  Info("SpiderIdentification", "Z = %d has been rejected (fit parameters)", spline->GetZ());
396  continue;
397  }
398  */
399  TheLine = (KVIDZALine*)((KVIDZAGrid*)fGrid)->NewLine("ID");
400  TheLine->SetZ(spline->GetZ());
401  double min, max;
402  ff1->GetRange(min, max);
403  max = TMath::Min(max, fHisto->GetXaxis()->GetXmax() * 0.95);
404 // double step = TMath::Min((max - min) /fNPoints, 20.); //20.;
405  double step = (max - min) / fNPoints; //20.;
406  double stepmax = 5.*step; //800.;
407 
408  double x = 0.;
409  for (x = min + 1; x < max; x += step) {
410  if (step < stepmax) step *= 1.2;
411  TheLine->SetPoint(TheLine->GetN(), x, ff1->Eval(x));
412  }
413  if (max > x) TheLine->SetPoint(TheLine->GetN(), max, ff1->Eval(max));
414 
415  fGrid->Add("ID", TheLine);
416  if (spline->GetZ() >= zmax) zmax = spline->GetZ();
417  }
418  else {
419  Info("SpiderIdentification", "Z = %d has been rejected (too few points)", spline->GetZ());
420  }
421  }
422 
423  TF1 fx("fx12", Form("x/%lf", fSfx), 0., fScaledHisto->GetNbinsX() * 1.);
424  TF1 fy("fy12", Form("x/%lf", fSfy), 0., fScaledHisto->GetNbinsY() * 1.);
425  fGrid->Scale(&fx, &fy);
426 
427  if (fUseCut) delete tmpHisto;
428 
429  if (tmpCut) fGrid->GetCuts()->AddAll(tmpCut);
430  pad->cd();
431  fGrid->Draw();
432  pad->Modified();
433  pad->Update();
434 
435  DoClose();
436 }
437 
438 
439 
440 
int Int_t
ClassImp(KVPartitionList) void KVPartitionList
Initialisation.
const Bool_t kFALSE
bool Bool_t
double Axis_t
double Double_t
double Stat_t
const Bool_t kTRUE
kButtonDown
kButtonUp
#define gClient
kDeepCleanup
kLHintsRight
kLHintsLeft
kLHintsCenterY
kLHintsCenterX
kLHintsTop
kLHintsExpandX
int type
char * Form(const char *fmt,...)
Toolkit for various operations on histograms & graphs not provided by ROOT.
TH1 * ScaleHisto(TH1 *hh, TF1 *fx, TF1 *fy=NULL, Int_t nx=-1, Int_t ny=-1, Double_t xmin=-1., Double_t xmax=-1., Double_t ymin=-1., Double_t ymax=-1., Option_t *norm="")
Base class for particle identification in a 2D map.
Definition: KVIDGraph.h:31
void Add(TString, KVIDentifier *)
Definition: KVIDGraph.cpp:853
void Scale(Double_t sx=-1, Double_t sy=-1)
Called by SetX/YScaleFactor methods to rescale every point of every object in the grid.
Definition: KVIDGraph.cpp:1130
void Draw(Option_t *opt="")
Definition: KVIDGraph.cpp:903
TVirtualPad * GetPad() const
Definition: KVIDGraph.h:127
void UnDraw()
Definition: KVIDGraph.cpp:981
virtual Bool_t IsIdentifiable(Double_t, Double_t, TString *rejected_by=nullptr) const
Definition: KVIDGraph.cpp:1257
KVList * GetCuts() const
Definition: KVIDGraph.h:290
virtual void Clear(Option_t *opt="")
Definition: KVIDGraph.cpp:220
Identification grid with lines corresponding to different nuclear isotopes (KVIDZALine)
Definition: KVIDZAGrid.h:65
Base class for identification ridge lines corresponding to different nuclear species.
Definition: KVIDZALine.h:32
virtual void SetZ(Int_t ztnum)
Definition: KVIDentifier.h:82
static Double_t fSpFactor
Definition: KVSpIdGUI.h:105
virtual ~KVSpIdGUI()
Delete all widgets.
Definition: KVSpIdGUI.cpp:243
static Double_t fAlpha
Definition: KVSpIdGUI.h:106
TString fOption
Definition: KVSpIdGUI.h:126
static Bool_t fUseCut
Definition: KVSpIdGUI.h:110
TGComboBox * fPiedChoice
Definition: KVSpIdGUI.h:68
static Int_t fZp
Definition: KVSpIdGUI.h:104
TGNumberEntry * fSpiderFactorEntry
Definition: KVSpIdGUI.h:56
static Int_t fAnglesUp
Definition: KVSpIdGUI.h:111
static Bool_t fDebug
Definition: KVSpIdGUI.h:107
Double_t fXm
Definition: KVSpIdGUI.h:117
Double_t fYm
Definition: KVSpIdGUI.h:118
void SpiderIdentification()
Definition: KVSpIdGUI.cpp:297
TH2F * fScaledHisto
Definition: KVSpIdGUI.h:100
Double_t fSfy
Definition: KVSpIdGUI.h:123
TGNumberEntry * fNPointsEntry
Definition: KVSpIdGUI.h:72
TGTextButton * fCloseButton
Definition: KVSpIdGUI.h:96
Double_t fSfx
Definition: KVSpIdGUI.h:122
Double_t fPdx
Definition: KVSpIdGUI.h:119
Bool_t fUserParameter
Definition: KVSpIdGUI.h:125
TH2 * fHisto
Definition: KVSpIdGUI.h:99
static Int_t fPiedType
Definition: KVSpIdGUI.h:114
Double_t GetFactor()
Definition: KVSpIdGUI.cpp:287
TGNumberEntry * fAngleDownEntry
Definition: KVSpIdGUI.h:86
static Int_t fMatrixType
Definition: KVSpIdGUI.h:113
TGNumberEntry * fZpEntry
Definition: KVSpIdGUI.h:51
static Int_t fAnglesDown
Definition: KVSpIdGUI.h:112
static Bool_t fPiedestal
Definition: KVSpIdGUI.h:108
TGComboBox * fTypeChoice
Definition: KVSpIdGUI.h:64
TGNumberEntry * fApertureUpEntry
Definition: KVSpIdGUI.h:89
TGHProgressBar * fProgressBar
Progress Bar and buttons.
Definition: KVSpIdGUI.h:92
void DoClose()
Definition: KVSpIdGUI.cpp:224
void SetUserParameter(Bool_t par)
Definition: KVSpIdGUI.cpp:275
void CloseWindow()
Definition: KVSpIdGUI.cpp:233
TGTransientFrame * fMain
Definition: KVSpIdGUI.h:40
KVIDGraph * fGrid
Definition: KVSpIdGUI.h:98
TGTextButton * fTestButton
Definition: KVSpIdGUI.h:95
TGNumberEntry * fAngleUpEntry
Definition: KVSpIdGUI.h:83
Double_t fPdy
Definition: KVSpIdGUI.h:120
TGCheckButton * fSpiderFactorRadio
Definition: KVSpIdGUI.h:57
KVSpIdGUI(KVIDGraph *g=0, TH2 *data_histo=0, Double_t xm=-1., Double_t ym=-1., Double_t pdx=-1., Double_t pdy=-1., const char *opt="DRLF")
Definition: KVSpIdGUI.cpp:41
static Int_t fNPoints
Definition: KVSpIdGUI.h:115
KVSpiderIdentificator * fIdentificator
Definition: KVSpIdGUI.h:102
Semi-automatic identification grid generator.
void SetNangles(Int_t up, Int_t down)
void SetParameters(double bining_=1.)
void Draw(Option_t *opt_="")
Part of Spider Identification.
Definition: KVSpiderLine.h:18
virtual Double_t GetBinCenter(Int_t bin) const
Double_t GetXmax() const
virtual void AddAll(const TCollection *col)
virtual TObject * Clone(const char *newname="") const
virtual void GetRange(Double_t &xmin, Double_t &xmax) const
virtual Double_t Eval(Double_t x, Double_t y=0, Double_t z=0, Double_t t=0) const
virtual void SetEnabled(Bool_t e=kTRUE)
virtual void SetState(EButtonState state, Bool_t emit=kFALSE)
virtual Int_t GetSelected() const
virtual void SetState(Bool_t enable=kTRUE)
virtual Long_t GetIntNumber() const
virtual Double_t GetNumber() const
void SetRange(Float_t min, Float_t max)
virtual void Reset()
virtual void SetPoint(Int_t i, Double_t x, Double_t y)
Int_t GetN() const
virtual Int_t GetNbinsY() const
TAxis * GetXaxis()
TAxis * GetYaxis()
TObject * Clone(const char *newname=0) const
virtual Int_t GetNbinsX() const
virtual Int_t Fill(const char *namex, const char *namey, Double_t w)
virtual void Reset(Option_t *option="")
virtual Double_t GetBinContent(Int_t bin) const
virtual const char * GetName() const
const char * Data() const
static void SingleShot(Int_t milliSec, const char *receiver_class, void *receiver, const char *method)
virtual void Modified(Bool_t flag=1)=0
virtual void Update()=0
virtual TVirtualPad * cd(Int_t subpadnumber=0)=0
Double_t x[n]
const long double g
masses
Definition: KVUnits.h:72
void Info(const char *location, const char *va_(fmt),...)
Double_t Min(Double_t a, Double_t b)
Double_t Sqrt(Double_t x)
Double_t Max(Double_t a, Double_t b)
void spline(double x[], double y[], int n, double yp1, double ypn, double *y2)