16 #define LOG2 (double)6.93147180559945286e-01
17 # define M_PI 3.14159265358979323846
55 fChannelWidthInt = -1;
62 fWithPoleZeroCorrection =
kFALSE;
63 fWithInterpolation =
kFALSE;
64 fMinimumValueForAmplitude = 0;
211 Info(
"SetData",
"called with points number=%d", nn);
217 for (np = 1; np < nn; np += 1) {
373 if (nameat ==
"Detector" || nameat ==
"Signal" || nameat ==
"RunRange") {
377 Warning(
"UpdatePSAParameter",
"Not supported PSA parameter : %d %s\n", ii, nameat.
Data());
389 Info(
"LoadPSAParameters",
"To be defined in child class");
408 Info(
"TreateSignal",
"To be defined in child class");
419 printf(
"\tAssociated to the detector %s\n",
fDetName.
Data());
421 printf(
"################\nPSA parameters:\n");
424 printf(
"\tTauRC: %lf\n",
GetTauRC());
447 for (np = 1; np <
GetN(); np += 1) {
477 for (
Int_t ii = 0; ii <
GetN(); ii += 1) {
527 if (qend < qstart || qstart <= 0 || qend <= 0)
611 for (
int i = 0; i < np; i++)
fAdc.
AddAt(copy.
GetAt(np - i - 1), i);
659 if (!(tdelay < (1 - threshold)*rtime))
663 double time =
GetAmplitude() / ((1 - threshold) * (rtime / tdelay));
682 if (-data[i] > LEVEL && -data[i + 1] > LEVEL)
717 "stop position greater than number of samples %d/%d, set stop to %d",
GetN(), stop,
GetN());
722 "start position unrealistic %d, set start to 0", start);
726 for (
Int_t ii = start; ii < stop; ii += 1) {
734 Error(
"ComputeMeanAndSigma",
"values cannot be computed with 0 sample");
841 if (tflat < 0) tflat = trise / 2.;
853 for (
int i = irise; i <
N; i++) data[i] -= datao[i - irise];
854 for (
int i = irise + iflat; i <
N; i++) data[i] -= datao[i - irise - iflat];
855 for (
int i = 2 * irise + iflat; i <
N; i++) data[i] += datao[i - 2 * irise - iflat];
860 for (
int i = 1; i <
N; i++) data[i] = data[i] / amp + data[i - 1];
894 for (; x2 < NSamples; x2++)
if (data[x2] < fmax)
break;
905 inline unsigned int ReverseBits(
unsigned int p_nIndex,
unsigned int p_nBits)
910 for (i = rev = 0; i < p_nBits; i++) {
911 rev = (rev << 1) | (p_nIndex & 1);
930 switch (window_type) {
932 for (
int n = 0;
n <=
N;
n++)
936 for (
int n = 0;
n <=
N;
n++)
940 for (
int n = 0;
n <=
N;
n++)
944 for (
int n = 0;
n <=
N;
n++)
948 printf(
"ERROR in %s: windowtype %d not valid!\n", __PRETTY_FUNCTION__, window_type);
963 double* p_lpRealIn,
double* p_lpImagIn,
964 double* p_lpRealOut,
double* p_lpImagOut)
969 if (!p_lpRealIn || !p_lpRealOut || !p_lpImagOut) {
970 printf(
"ERROR in %s: NULL vectors!\n", __PRETTY_FUNCTION__);
975 unsigned int NumBits;
976 unsigned int i, j, k,
n;
977 unsigned int BlockSize, BlockEnd;
979 double angle_numerator = 2.0 *
M_PI;
986 if (p_nSamples < 2 || p_nSamples & (p_nSamples - 1)) {
987 printf(
"ERROR in %s: %d not a power of two!\n", __PRETTY_FUNCTION__, p_nSamples);
991 if (p_bInverseTransform) angle_numerator = -angle_numerator;
994 for (NumBits = 0; ; NumBits++) {
995 if (p_nSamples & (1 << NumBits))
break;
998 for (i = 0; i < p_nSamples; i++) {
1000 p_lpRealOut[j] = p_lpRealIn[i];
1001 p_lpImagOut[j] = (p_lpImagIn == NULL) ? 0.0 : p_lpImagIn[i];
1006 for (BlockSize = 2; BlockSize <= p_nSamples; BlockSize <<= 1) {
1007 double delta_angle = angle_numerator / (
double)BlockSize;
1008 double sm2 =
sin(-2 * delta_angle);
1009 double sm1 =
sin(-delta_angle);
1010 double cm2 =
cos(-2 * delta_angle);
1011 double cm1 =
cos(-delta_angle);
1013 double ar[3], ai[3];
1015 for (i = 0; i < p_nSamples; i += BlockSize) {
1023 for (j = i,
n = 0;
n < BlockEnd; j++,
n++) {
1025 ar[0] = w * ar[1] - ar[2];
1029 ai[0] = w * ai[1] - ai[2];
1034 tr = ar[0] * p_lpRealOut[k] - ai[0] * p_lpImagOut[k];
1035 ti = ar[0] * p_lpImagOut[k] + ai[0] * p_lpRealOut[k];
1037 p_lpRealOut[k] = p_lpRealOut[j] - tr;
1038 p_lpImagOut[k] = p_lpImagOut[j] - ti;
1040 p_lpRealOut[j] += tr;
1041 p_lpImagOut[j] += ti;
1046 BlockEnd = BlockSize;
1051 if (p_bInverseTransform) {
1052 double denom = (
double)p_nSamples;
1054 for (i = 0; i < p_nSamples; i++) {
1055 p_lpRealOut[i] /= denom;
1056 p_lpImagOut[i] /= denom;
1071 int KVSignal::FFT(
bool p_bInverseTransform,
double* p_lpRealOut,
double* p_lpImagOut)
1074 static double* buffer = NULL;
1075 static int bufflen = 0;
1080 if (buffer != NULL && bufflen < NSA) {
1086 if (buffer == NULL) {
1088 buffer =
new double [NSA];
1092 for (
unsigned int i = 0; i <
N; i++)
1093 buffer[i] = data[i];
1095 memset(buffer +
N, 0, (NSA -
N)*
sizeof(
double));
1096 int r =
FFT(NSA, p_bInverseTransform, buffer, NULL, p_lpRealOut, p_lpImagOut);
1097 if (
r < 0)
return r;
1107 double* re =
new double [2 *
N];
1108 double* im =
new double [2 *
N];
1109 int NFFT =
FFT(0, re, im);
1111 printf(
"ERROR in %s: FFT returned %d!\n", __PRETTY_FUNCTION__, NFFT);
1118 if (!hh)
h =
new TH1F(
"hfft",
"FFT of FSignal", NF, 0, 1. /
fChannelWidth * 1000 / 2);
1122 for (
int i = 0; i < NF; i++) {
1137 printf(
"ERROR in %s: output=%d not valid!!\n", __PRETTY_FUNCTION__, output);
1145 if (output != 1)
return h;
1148 for (
int i = 1; i < NF; i++)
1152 for (
int i = 0; i < NF; i++)
1170 double xi0 = (fmax - data[x2]) / (data[x2 + 1] - data[x2]);
1185 double a3 = 0.5 * data[x2] - (1. / 6.) * data[x2 - 1] + (1. / 6.) * data[x2 + 2] - 0.5 * data[x2 + 1];
1186 double a2 = (-data[x2] + 0.5 * data[x2 + 1] + 0.5 * data[x2 - 1]);
1187 double a1 = (- 0.5 * data[x2] - 1. / 6. *data[x2 + 2] + data[x2 + 1] - 1. / 3.* data[x2 - 1]);
1188 double a0 = data[x2];
1190 for (
int rec = 0; rec < Nrecurr; rec++) {
1191 xi += (fmax - a0 - a1 * xi - a2 * xi * xi - a3 * xi * xi * xi) / (a1 + 2 * a2 * xi + 3 * a3 * xi * xi);
1206 if (
n <= 0)
return fAdc.
At(0);
1227 double a3 = 0.5 * data[x2] - (1. / 6.) * data[x2 - 1] + (1. / 6.) * data[x2 + 2] - 0.5 * data[x2 + 1];
1228 double a2 = (-data[x2] + 0.5 * data[x2 + 1] + 0.5 * data[x2 - 1]);
1229 double a1 = (- 0.5 * data[x2] - 1. / 6. *data[x2 + 2] + data[x2 + 1] - 1. / 3.* data[x2 - 1]);
1230 double a0 = data[x2];
1232 return a3 * xi * xi * xi + a2 * xi * xi + a1 * xi + a0;
1246 int xk_index = (int)(t /
h);
1251 int dimensione = 18;
1256 TArrayD data_e(dimensione * dimensione);
1257 for (
int k = 0, i = 0; i < dimensione; i++) {
1259 if ((k + 1) <
pow(dimensione, 2)) data_e[k + 1] = 1.;
1260 if ((k - 1) > 0) data_e[k - 1] = 1.;
1261 k += dimensione + 1;
1267 double dati_b[] = { -1, 3, -3, 1, 3, -6, 3, 0, -3, 0, 3, 0, 1, 4, 1, 0};
1276 if (xk_index < (dimensione / 2 - 1)) {
1279 else if (xk_index > (
N - dimensione / 2 - 1)) {
1288 coeff.
Mult(
e, samples);
1291 if (xk_index < (dimensione / 2 - 1)) {
1292 if (xk_index == 0) {
1293 cm1 = (*samples_interp) * 6 *
h - ((*ck) * 4 + (*(ck + 1)));
1294 float caso_zero[4] = {cm1, *ck, *(ck + 1), *(ck + 2)};
1299 else if (xk_index > (
N - dimensione / 2 - 1)) {
1300 if (xk_index ==
N - 2) {
1301 cNm1 = (*(samples_interp + dimensione - 1)) * 6 *
h - (*(ck + dimensione - 1) * 4 + (*(ck + dimensione - 2)));
1302 float casoN[4] = {*(ck + dimensione - 3), *(ck + dimensione - 2), *(ck + dimensione - 1), cNm1};
1305 else coefficienti.
SetMatrixArray(ck + dimensione - (
N - xk_index + 1));
1312 b.Mult(delta, coefficienti);
1313 float* b_interp =
b.GetMatrixArray();
1314 float a0 = *b_interp;
1315 float a1 = *(b_interp + 1);
1316 float a2 = *(b_interp + 2);
1317 float a3 = *(b_interp + 3);
1319 return (1. / 6 /
h * (a3 + a2 *
s + a1 *
s *
s + a0 *
s *
s *
s));
1335 interpo.
Set((
int)(Nsa * tau / taufinal));
1336 int nlast = interpo.
GetSize() - (int)(3 * tau / taufinal);
1337 if (nlast <= 0)
return;
1370 interpo.
Set((
int)(Nsa * tau / taufinal));
1371 int nlast = interpo.
GetSize() - (int)(3 * tau / taufinal);
1372 if (nlast <= 0)
return;
1377 for (
int i = 0; i < nlast; i++)
fAdc.
AddAt(interpo.
At(i), i);
1408 interpo.
Set((
int)(Nsa * tau / taufinal));
1409 int nlast = interpo.
GetSize() - (int)(3 * tau);
1410 if (nlast <= 0)
return;
1415 for (
int i = 0; i < nlast; i++)
fAdc.
AddAt(interpo.
At(i), i);
1443 if (
l < 0.1)
return -1;
1446 double r =
sqrt(x0);
1447 double a = (1 - 24 *
l) / (6 *
l);
1448 double cphi = -
a *
r / (2 * (
r *
r + 1));
1449 if ((cphi < -1) || (cphi > 1) || (
l < 0.1)) {
1450 printf(
"Error Aborting on FIR_ApplySmoothingSpline\n");
1453 double sphi =
sqrt(1 - cphi * cphi);
1454 double Re =
sqrt(x0) * cphi;
1455 double Im =
sqrt(x0) * sphi;
1456 double a1, a2, b1, b2, t;
1457 t = 4 * Re * Re * (x0 - 1) / (x0 + 1) + 1 - x0 * x0;
1459 a2 = -2 * Re * x0 * b2 / (1 + x0);
1464 czi = (-a1 * Re - b1) / (2 * Im);
1466 phiz =
atan2(sphi, cphi);
1467 phib =
atan2(czi, czr);
1469 roB =
sqrt(czr * czr + czi * czi);
1470 double roZ =
sqrt(x0);
1481 imax = ((nbits + 1) *
log(2) +
log(roB)) /
log(roZ) - 1.;
1484 fmax = std::abs(-2 * roB *
cos(phib - (nmax + 1) * phiz) /
pow(roZ, nmax + 1));
1485 if (fmax *
pow(2, nfloat + 1) < 1) nmax--;
1487 while (fmax *
pow(2, nfloat + 1) < 1);
1489 double* xvec =
new double[2 * nmax + 1];
1490 double* yvec =
new double[2 * nmax + 1];
1492 for (i = 0; i <= nmax; i++) {
1493 yvec[nmax + i] = yvec[nmax - i] = 0;
1494 xvec[nmax + i] = xvec[nmax - i] = ((
double)
floor(-2 * roB *
cos(phib - (i + 1) * phiz) /
pow(roZ, i + 1) *
pow(2, nfloat) + 0.5)) /
pow(2, nfloat);
1498 for (i = 0; i <= nmax; i++) {
1499 yvec[nmax + i] = yvec[nmax - i] = 0;
1500 xvec[nmax + i] = xvec[nmax - i] = -2 * roB *
cos(phib - (i + 1) * phiz) /
pow(roZ, i + 1);
1517 double a = (1 - 24 *
l) / (6 *
l);
1518 double b = (4 + 36 *
l) / (6 *
l);
1520 double B = 2 +
a *
a - 2 *
b;
1527 fx =
pow(x1, 4) + A *
pow(x1, 3) + B *
pow(x1, 2) + A * x1 + 1;
1532 der = 4 *
pow(x1, 3) + 3 * A *
pow(x1, 2) + 2 * B * x1 + A;
1538 x1 = (x1 + x0) / 2.;
1541 else if (x1 == x3) {
1542 x1 = (x1 + x0 + x2) / 3.;
1545 if ((x1 == x0) && (x1 == x2) && (x1 == x3)) fexit = 1;
1546 if (loopcount == 100) fexit = 1;
1548 fx =
pow(x1, 4) + A *
pow(x1, 3) + B *
pow(x1, 2) + A * x1 + 1;
1550 while (((fx > 0.000000001) || (fxold1 != fx)) && (fexit == 0));
1561 int n0 =
floor(tsamp);
1562 double tres = tsamp - n0;
1564 if (n0 == 0)
return 0;
1566 for (
int i = -1; i < 3; i++) {
1580 if (ax > 2)
return 0;
1581 else if (ax > 1)
return pow(2 - ax, 3) / 6.;
1582 else return pow(ax, 3) / 2. - ax * ax + 2. / 3.;
1601 if (x2 <= 0 || x2 >= NSamples)
return -1;
1602 for (; x2 > 0 ; x2--)
1603 if (data[x2] > fmax)
1636 #define DUEPI 6.28318530717958623
1662 double a0 = (1 +
x) / 2.;
1663 double a1 = -(1 +
x) / 2.;
1679 double* datay =
new double[NSamples];
1686 for (i = 0; i <
N; i++) {
1687 datay[i] = a0 * datax[i];
1688 for (k = 0; k < i; k++)
1689 datay[i] +=
a[k] * datax[i - k - 1] +
b[k] * datay[i - k - 1];
1691 for (i =
N; i < NSamples; i++) {
1692 datay[i] = a0 * datax[i];
1693 for (k = 0; k <
N; k++)
1694 datay[i] +=
a[k] * datax[i - k - 1] +
b[k] * datay[i - k - 1];
1698 for (i = 0; i <
N; i++) {
1699 datay[NSamples - 1 - i] = a0 * datax[NSamples - 1 - i];
1700 for (k = 0; k < i; k++)
1701 datay[NSamples - 1 - i] +=
a[k] * datax[NSamples - 1 - (i - k - 1)]
1702 +
b[k] * datay[NSamples - 1 - (i - k - 1)];
1704 for (i =
N; i < NSamples; i++) {
1705 datay[NSamples - 1 - i] = a0 * datax[NSamples - 1 - i];
1706 for (k = 0; k <
N; k++)
1707 datay[NSamples - 1 - i] +=
a[k] * datax[NSamples - 1 - (i - k - 1)]
1708 +
b[k] * datay[NSamples - 1 - (i - k - 1)];
1717 printf(
"ERROR in %s: reverse=%d not supported\n", __PRETTY_FUNCTION__, reverse);
1722 for (
int i = 0; i < NSamples; i++)
1723 datax[i] = (
float)datay[i];
1738 data[
n] = data[
n - 1] + (datao[
n] - datao[
n - npoints]) / npoints;
1739 for (
int n = 0;
n < npoints;
n++) data[
n] = data[npoints];
1768 if (!newSignal) newSignal =
this;
1771 if (nsa > 0 && nsa < nn) nn = nsa;
1809 if (shift == 0)
return;
1828 if (shift == 0)
return;
1833 for (
int i = 0; i < shift; i++)
1858 ::Error(
"KVSignal::MakeSignal",
"No plugin found for : %s", sig_type);
ClassImp(KVPartitionList) void KVPartitionList
Initialisation.
unsigned int ReverseBits(unsigned int p_nIndex, unsigned int p_nBits)
double atan2(double, double)
double pow(double, double)
char * Form(const char *fmt,...)
static TPluginHandler * LoadPlugin(const Char_t *base, const Char_t *uri="0")
To store calibration parameters in a database ,.
KVNameValueList * GetParameters()
const Char_t * GetDataSetEnv(const Char_t *type, const Char_t *defval="") const
static KVDigitalFilter BuildRCLowPassDeconv(const double &tau_usec, const double &tau_clk)
void ApplyTo(double *data, const int N, int reverse=0) const
static KVDigitalFilter BuildIntegrator(const double &tau_clk)
static KVDigitalFilter CombineStagesMany(const KVDigitalFilter *f1, const KVDigitalFilter *f2, const KVDigitalFilter *f3=NULL, const KVDigitalFilter *f4=NULL, const KVDigitalFilter *f5=NULL, const KVDigitalFilter *f6=NULL, const KVDigitalFilter *f7=NULL, const KVDigitalFilter *f8=NULL, const KVDigitalFilter *f9=NULL, const KVDigitalFilter *f10=NULL)
se ne devi combinare + di 1 IN CASCATA!
Double_t GetDoubleValue(const Char_t *name) const
const Char_t * GetNameAt(Int_t idx) const
void SetTauRC(Int_t taurc)
Double_t ComputeCFDThreshold(Double_t threshold=0.5)
calculate the time during which the signal is higher than th*fAmplitude
void FIR_ApplyMovingAverage(int npoints)
Double_t CubicInterpolation(float *data, int x2, double fmax, int Nrecurr)
const Char_t * GetType() const
Bool_t IsLongEnough() const
TString fType
string to identify the signal type : "QH1", "I2" etc ...
void Copy(TObject &obj) const
void ChangeChannelWidth(Double_t newwidth)
Double_t GetShaperRiseTime() const
virtual void UpdatePSAParameter(KVDBParameterList *par)
virtual Double_t ComputeDuration(Double_t th=0.2)
calculate the time during which the signal is higher than th*fAmplitude
static int FFT(unsigned int p_nSamples, bool p_bInverseTransform, double *p_lpRealIn, double *p_lpImagIn, double *p_lpRealOut, double *p_lpImagOut)
void SetInterpolation(Bool_t with=kTRUE)
void ApplyModifications(TGraph *newSignal=0, Int_t nsa=-1)
apply modifications of fAdc to the original signal
virtual void RemoveBaseLine()
Double_t fEndLine
mean value of the signal line at the end
Double_t fYmax
raw min/max of the signal
void SetShaperRiseTime(Double_t rise)
void FIR_ApplyRCLowPass(double time_usec, int reverse=0)
Double_t fAmplitude
results of signal treatement
double FindTzeroCFDCubic_rev(double level, double tend, int Nrecurr)
virtual void TreateSignal()
virtual Double_t ComputeBaseLine()
virtual void BuildCubicSplineSignal()
Bool_t ComputeMeanAndSigma(Int_t start, Int_t stop, Double_t &mean, Double_t &sigma)
compute mean value and rms of a subset of samples
Double_t GetPSAParameter(const Char_t *parname)
DeduceFromName has to be called before.
virtual double EvalCubicSpline(double X)
Double_t fSigmaBase
base line rms
virtual double GetDataInter(double t)
void SetData(Int_t nn, Double_t *xx, Double_t *yy)
operation on data arrays
void SetInterpolatedChannelWidth(double width)
virtual double GetDataCubicSpline(double t)
see HSIEH S.HOU IEEE Trans. Acoustic Speech, vol. ASSP-26, NO.6, DECEMBER 1978
void ApplyWindowing(int window_type=3)
fast fourier transform and windowing of the signal (modify only fAdc)
Int_t GetNSamples() const
virtual void LoadPSAParameters()
TString fDetName
name of the detector, the signal is linked to, needed to find it in the KVMultiDetector
Int_t fFPGAOutputNumbers
ASsociated FPGA energy outputs.
Double_t GetAmplitude() const
void SetPoleZeroCorrection(Bool_t with=kTRUE)
Bool_t fWithInterpolation
use of interpolation or not
Double_t fChannelWidth
channel width in ns
Double_t GetBLFirst() const
static KVSignal * MakeSignal(const char *sig_type)
Create new KVSignal instance corresponding to sig_type.
void ShiftLeft(double)
---------------— OPERATORI ------------------—//
Double_t fSigmaEnd
rms value of the signal line at the end
Double_t fBaseLine
base line mean value
Double_t ARC_CFD(Double_t threshold=0.3, Double_t tdelay=10)
Interpolations.
Double_t fChannelWidthInt
internal parameter channel width of interpolated signal in ns
void SetBaseLineLength(Int_t length, Int_t first=0)
Double_t fIMax
position of the maximum in channel
virtual double GetDataInterCubic(double t)
Double_t ComputeAmplitude()
Compute and return the absolute value of the signal amplitude.
KVSignal()
Default constructor.
void Multiply(Double_t fact)
multiply the signal (modify only fAdc)
virtual void BuildSmoothingSplineSignal()
void Print(Option_t *chopt="") const
void FIR_ApplyRCHighPass(double time_usec, int reverse=0)
virtual double GetDataSmoothingSplineLTI(double t)
void SetShaperFlatTop(Double_t flat)
int FIR_ApplySmoothingSpline(double l, int nbits=-1)
virtual void Set(Int_t n)
Int_t fLastBL
first and last channel number to compute the base line
Bool_t IsFired()
ComputeBaseLine and ComputeEndLine methods have to be called before.
void SetChannelWidth(double width)
Int_t fIndex
index deduced from block, quartet and telescope numbering
Double_t GetBLLength() const
Double_t GetShaperFlatTop() const
Double_t ComputeRiseTime()
Double_t fTMax
position of the maximum in ns
Double_t GetInterpolatedChannelWidth() const
void FIR_ApplyTrapezoidal(double trise, double tflat)
different shapers (modify only fAdc)
virtual void SetDefaultValues()
To be defined in child class.
void FIR_ApplyRecursiveFilter(double a0, int N, double *a, double *b, int reverse)
signal will be: y[n]=a0*x[n]+sum a[k] x[k] + sum b[k] y[k]
KVSignal * ConvertTo(const Char_t *type)
double ApplyNewton(double l, double x0)
virtual void ComputeRawAmplitude(void)
Double_t FindTzeroCFDCubic(double level, int Nrecurr)
void FIR_ApplySemigaus(double tau_usec)
Bool_t fWithPoleZeroCorrection
use or nor pole zero correction
double FindTzeroLeadingEdgeCubic(double LEVEL, int Nrecurr)
Double_t fRiseTime
rise time of the signal
void TreateOldSignalName()
Bool_t fPSAIsDone
indicate if PSA has been done
TH1 * FFT2Histo(int output, TH1 *hh=0)
void PoleZeroSuppression(Double_t tauRC)
virtual void BuildCubicSignal()
void BuildReverseTimeSignal()
Double_t GetTauRC() const
virtual ~KVSignal()
Destructor.
virtual Double_t ComputeEndLine()
Double_t GetRiseTime() const
Double_t GetChannelWidth() const
void SetAmplitudeTriggerValue(Double_t val)
Extension of ROOT TString class which allows backwards compatibility with ROOT v3....
void Begin(TString delim) const
KVString Next(Bool_t strip_whitespace=kFALSE) const
Int_t GetNValues(TString delim) const
Double_t GetAt(Int_t i) const
Float_t At(Int_t i) const
void AddAt(Float_t c, Int_t i)
static TClass * GetClass(Bool_t load=kTRUE, Bool_t silent=kFALSE)
virtual const char * GetValue(const char *name, const char *dflt) const
virtual void SetPoint(Int_t i, Double_t x, Double_t y)
virtual void SetNameTitle(const char *name="", const char *title="")
virtual void Draw(Option_t *chopt="")
virtual void Set(Int_t n)
virtual Int_t GetPoint(Int_t i, Double_t &x, Double_t &y) const
virtual Double_t GetBinCenter(Int_t bin) const
virtual Int_t Fill(const char *name, Double_t w)
virtual void SetBinContent(Int_t bin, Double_t content)
virtual Double_t GetBinContent(Int_t bin) const
virtual void SetStats(Bool_t stats=kTRUE)
virtual TMatrixTBase< Element > & SetMatrixArray(const Element *data, Option_t *option="")
virtual Element * GetMatrixArray()
void Mult(const TMatrixT< Element > &a, const TMatrixT< Element > &b)
virtual const char * GetName() const
virtual void SetTitle(const char *title="")
virtual const char * GetTitle() const
virtual void Warning(const char *method, const char *msgfmt,...) const
virtual Bool_t InheritsFrom(const char *classname) const
virtual void Error(const char *method, const char *msgfmt,...) const
virtual void Info(const char *method, const char *msgfmt,...) const
Longptr_t ExecPlugin(int nargs, const T &... params)
Bool_t BeginsWith(const char *s, ECaseCompare cmp=kExact) const
const char * Data() const
void Form(const char *fmt,...)
TString & ReplaceAll(const char *s1, const char *s2)
VecExpr< UnaryOp< Sqrt< T >, SVector< T, D >, T >, T, D > sqrt(const SVector< T, D > &rhs)
Double_t Sqrt(Double_t x)
Double_t Max(Double_t a, Double_t b)