248 if (re)
fReIn.Set(n);
249 if (im)
fImIn.Set(n);
251 for (Int_t i=0; i<n; i++)
253 if (re)
fReIn.SetAt(re[i],i);
254 if (im)
fImIn.SetAt(im[i],i);
284 if (re) nre=re->GetSize();
285 if (im) nim=im->GetSize();
289 if (nre && nim>nre) n=nre;
290 if (nim && nre>nim) n=nim;
295 if (nre)
fReIn.Set(n);
296 if (nim)
fImIn.Set(n);
300 for (Int_t i=0; i<n; i++)
305 fReIn.SetAt(valre,i);
310 fImIn.SetAt(valim,i);
339 cout <<
" *" << ClassName() <<
"::Load* No input sample specified." << endl;
347 if (n<1 || !store || dim<1 || i<1 || i>dim)
349 cout <<
" *" << ClassName() <<
"::Load* Inconsistent input for NcSample treatment." << endl;
350 cout <<
" Store Mode:" << store <<
" Entries:" << n <<
" Dimension:" << dim <<
" i:" << i <<
" f:" <<
fSample << endl;
358 for (Int_t idx=1; idx<=n; idx++)
361 fReIn.SetAt(val,idx-1);
389 cout <<
" *" << ClassName() <<
"::Load* No input sample specified." << endl;
399 if (n<1 || !store || dim<1 || !i)
401 cout <<
" *" << ClassName() <<
"::Load* Inconsistent input for NcSample treatment." << endl;
402 cout <<
" Store Mode:" << store <<
" Entries:" << n <<
" Dimension:" << dim <<
" name:" << name <<
" f:" <<
fSample << endl;
431 cout <<
" *" << ClassName() <<
"::Load* No input histogram specified." << endl;
435 Int_t nbins=h->GetNbinsX();
436 Double_t nentries=h->GetEntries();
438 if (!nbins || !nentries)
440 cout <<
" *" << ClassName() <<
"::Load* Inconsistent input for histogram treatment." << endl;
441 cout <<
" Nbins:" << nbins <<
" Nentries:" << nentries <<
" f:" <<
fSample << endl;
449 for (Int_t i=1; i<=nbins; i++)
451 val=h->GetBinContent(i);
452 fReIn.SetAt(val,i-1);
478 cout <<
" *" << ClassName() <<
"::Load* No input TGraph object specified." << endl;
486 cout <<
" *" << ClassName() <<
"::Load* Inconsistent input for TGraph treatment." << endl;
487 cout <<
" n:" << n <<
" f:" <<
fSample << endl;
498 for (Int_t i=0; i<n; i++)
555 if (sel.Contains(
"RE") && sel.Contains(
"in"))
return fReIn;
556 if (sel.Contains(
"IM") && sel.Contains(
"in"))
return fImIn;
557 if (sel.Contains(
"RE") && sel.Contains(
"out"))
return fReOut;
558 if (sel.Contains(
"IM") && sel.Contains(
"out"))
return fImOut;
561 Double_t pi=acos(-1.);
566 for (Int_t i=0; i<
fN; i++)
568 if (sel.Contains(
"in"))
573 if (sel.Contains(
"out"))
578 amp=sqrt(re*re+im*im);
580 if (im || re) phi=atan2(im,re);
582 if (sel.Contains(
"AMP")) data.SetAt(amp,i);
583 if (sel.Contains(
"PHIR")) data.SetAt(phi,i);
584 if (sel.Contains(
"PHID")) data.SetAt(phi*180./pi,i);
645 if (sel.Contains(
"n") || sel.Contains(
"t") || sel.Contains(
"2"))
654 if (mode==
"C2C") opt=
"C2CFORWARD";
655 if (mode==
"C2CI") opt=
"C2CBACKWARD";
665 fProc=TVirtualFFT::FFT(1,&
fN,opt);
668 Int_t nReIn=
fReIn.GetSize();
669 Int_t nImIn=
fImIn.GetSize();
672 Double_t* data=
fReIn.GetArray();
673 fProc->SetPoints(data);
677 for (Int_t i=0; i<
fN; i++)
680 if (nReIn && !nImIn)
fProc->SetPoint(i,
fReIn[i],0);
681 if (!nReIn && nImIn)
fProc->SetPoint(i,0,
fImIn[i]);
695 for (Int_t i=0; i<
fN; i++)
697 fProc->GetPointComplex(i,re,im);
706 if ((sel.Contains(
"Hz") || sel.Contains(
"t")) &&
fSample<=0)
return;
710 if (mode==
"C2R" || mode==
"C2CI") title+=
"Inverse ";
718 if (sel.Contains(
"k"))
720 hist->SetBins(n,0,n-1);
721 title+=
"index frequency domain";
722 if (mode==
"C2R" || mode==
"C2CI")
728 title2.Form(
" (DAQ: %-.3g samples/sec)",
fSample);
732 if (sel.Contains(
"RE")) title+=
";Re(Q[k])";
733 if (sel.Contains(
"IM")) title+=
";Im(Q[k])";
734 if (sel.Contains(
"AMP")) title+=
";Amplitude |Q[k]|";
735 if (sel.Contains(
"PHIR")) title+=
";Phase #varphi[k] (rad)";
736 if (sel.Contains(
"PHID")) title+=
";Phase #varphi[k] (deg)";
738 if (sel.Contains(
"f"))
740 hist->SetBins(n,0,maxfrac);
741 title+=
"fractional frequency domain";
742 if (mode==
"C2R" || mode==
"C2CI")
748 title2.Form(
" (DAQ: %-.3g samples/sec)",
fSample);
751 title+=
";Fraction f of sampling rate";
752 if (sel.Contains(
"RE")) title+=
";Re(Q[f])";
753 if (sel.Contains(
"IM")) title+=
";Im(Q[f])";
754 if (sel.Contains(
"AMP")) title+=
";Amplitude |Q[f]|";
755 if (sel.Contains(
"PHIR")) title+=
";Phase #varphi[f] (rad)";
756 if (sel.Contains(
"PHID")) title+=
";Phase #varphi[f] (deg)";
758 if (sel.Contains(
"Hz"))
760 hist->SetBins(n,0,maxfrac*
fSample);
761 title+=
"actual frequency domain";
762 if (mode==
"C2R" || mode==
"C2CI")
768 title2.Form(
" (DAQ: %-.3g samples/sec)",
fSample);
771 title+=
";Frequency #nu (Hz)";
772 if (sel.Contains(
"RE")) title+=
";Re(Q[#nu])";
773 if (sel.Contains(
"IM")) title+=
";Im(Q[#nu])";
774 if (sel.Contains(
"AMP")) title+=
";Amplitude |Q[#nu]|";
775 if (sel.Contains(
"PHIR")) title+=
";Phase #varphi[#nu] (rad)";
776 if (sel.Contains(
"PHID")) title+=
";Phase #varphi[#nu] (deg)";
779 if (sel.Contains(
"n"))
781 hist->SetBins(
fN,0,
fN);
782 title+=
"sampling time domain";
783 if (mode==
"R2C" || mode==
"C2C") title+=
" input";
786 title+=
";Sample number n";
787 if (mode==
"R2C" || mode==
"C2R")
789 title+=
";Value X[n]";
793 if (sel.Contains(
"RE")) title+=
";Re(X[n])";
794 if (sel.Contains(
"IM")) title+=
";Im(X[n])";
795 if (sel.Contains(
"AMP")) title+=
";Amplitude |X[n]|";
796 if (sel.Contains(
"PHIR")) title+=
";Phase #varphi[n] (rad)";
797 if (sel.Contains(
"PHID")) title+=
";Phase #varphi[n] (deg)";
800 if (sel.Contains(
"t"))
803 title+=
"actual time domain";
804 if (mode==
"R2C" || mode==
"C2C") title+=
" input";
807 title+=
";Time t (seconds)";
808 if (mode==
"R2C" || mode==
"C2R")
810 title+=
";Value X[t]";
814 if (sel.Contains(
"RE")) title+=
";Re(X[t])";
815 if (sel.Contains(
"IM")) title+=
";Im(X[t])";
816 if (sel.Contains(
"AMP")) title+=
";Amplitude |X[t]|";
817 if (sel.Contains(
"PHIR")) title+=
";Phase #varphi[t] (rad)";
818 if (sel.Contains(
"PHID")) title+=
";Phase #varphi[t] (deg)";
822 hist->SetTitle(title);
824 Double_t pi=acos(-1.);
829 for (Int_t i=0; i<n; i++)
831 if (sel.Contains(
"n") || sel.Contains(
"t"))
835 if (nReIn) hist->SetBinContent(i+1,
fReIn.At(i));
840 hist->SetBinContent(i+1,
fReOut.At(i));
845 if (nReIn) re=
fReIn.At(i);
846 if (nImIn) im=
fImIn.At(i);
856 if (mode==
"C2R" || mode==
"C2CI")
858 if (nReIn) re=
fReIn.At(i);
859 if (nImIn) im=
fImIn.At(i);
867 amp=sqrt(re*re+im*im);
869 if (im || re) phi=atan2(im,re);
871 if (sel.Contains(
"RE")) hist->SetBinContent(i+1,re);
872 if (sel.Contains(
"IM")) hist->SetBinContent(i+1,im);
873 if (sel.Contains(
"AMP")) hist->SetBinContent(i+1,amp);
874 if (sel.Contains(
"PHIR")) hist->SetBinContent(i+1,phi);
875 if (sel.Contains(
"PHID")) hist->SetBinContent(i+1,phi*180./pi);
934 if (!mode ||
fN<1)
return;
938 if (sel.Contains(
"n") || sel.Contains(
"t") || sel.Contains(
"2"))
951 fProc=TVirtualFFT::FFT(1,&
fN,
"DHT ES K");
954 Double_t* data=
fReIn.GetArray();
955 fProc->SetPoints(data);
966 for (Int_t i=0; i<
fN; i++)
968 re=
fProc->GetPointReal(i,kFALSE);
975 if ((sel.Contains(
"Hz") || sel.Contains(
"t")) &&
fSample<=0)
return;
979 if (mode<0) title+=
"Inverse ";
985 if (sel.Contains(
"k"))
987 hist->SetBins(n,0,n-1);
988 title+=
"index frequency domain";
995 title2.Form(
" (DAQ: %-.3g samples/sec)",
fSample);
998 title+=
";Index k;Q[k]";
1000 if (sel.Contains(
"f"))
1002 hist->SetBins(n,0,maxfrac);
1003 title+=
"fractional frequency domain";
1010 title2.Form(
" (DAQ: %-.3g samples/sec)",
fSample);
1013 title+=
";Fraction f of sampling rate;Q[f]";
1015 if (sel.Contains(
"Hz"))
1017 hist->SetBins(n,0,maxfrac*
fSample);
1018 title+=
"actual frequency domain";
1025 title2.Form(
" (DAQ: %-.3g samples/sec)",
fSample);
1028 title+=
";Frequency #nu (Hz);Q[#nu]";
1031 if (sel.Contains(
"n"))
1033 hist->SetBins(
fN,0,
fN);
1034 title+=
"sampling time domain";
1035 if (mode>0) title+=
" input";
1038 title+=
";Sample number n;Value X[n]";
1040 if (sel.Contains(
"t"))
1043 title+=
"actual time domain";
1044 if (mode>0) title+=
" input";
1047 title+=
";Time t (seconds);Value X[t]";
1050 hist->SetTitle(title);
1052 for (Int_t i=0; i<n; i++)
1056 if (sel.Contains(
"n") || sel.Contains(
"t"))
1058 hist->SetBinContent(i+1,
fReIn.At(i));
1062 hist->SetBinContent(i+1,
fReOut.At(i));
1067 if (sel.Contains(
"n") || sel.Contains(
"t"))
1069 hist->SetBinContent(i+1,
fReOut.At(i));
1073 hist->SetBinContent(i+1,
fReIn.At(i));
1138 if (abs(type)<1 || abs(type)>4 ||
fN<1 || (abs(type)==1 &&
fN<2))
return;
1142 if (type==-1 || type==-4) type2=abs(type);
1143 if (type==-2) type2=3;
1144 if (type==-3) type2=2;
1147 Float_t maxfrac=0.5;
1148 if (sel.Contains(
"n") || sel.Contains(
"t") || sel.Contains(
"2"))
1164 fProc=TVirtualFFT::SineCosine(1,&
fN,&kind,
"ES");
1167 Double_t* data=
fReIn.GetArray();
1168 fProc->SetPoints(data);
1179 for (Int_t i=0; i<
fN; i++)
1181 re=
fProc->GetPointReal(i,kFALSE);
1184 re/=sqrt(2.*(rN-1.));
1195 if ((sel.Contains(
"Hz") || sel.Contains(
"t")) &&
fSample<=0)
return;
1199 if (type<0) title+=
"Inverse ";
1201 if (abs(type)==1) title+=
"I";
1202 if (abs(type)==2) title+=
"II";
1203 if (abs(type)==3) title+=
"III";
1204 if (abs(type)==4) title+=
"IV";
1210 if (sel.Contains(
"k"))
1212 hist->SetBins(n,0,n-1);
1213 title+=
"index frequency domain";
1220 title2.Form(
" (DAQ: %-.3g samples/sec)",
fSample);
1223 title+=
";Index k;Q[k]";
1225 if (sel.Contains(
"f"))
1227 hist->SetBins(n,0,maxfrac);
1228 title+=
"fractional frequency domain";
1235 title2.Form(
" (DAQ: %-.3g samples/sec)",
fSample);
1238 title+=
";Fraction f of sampling rate;Q[f]";
1240 if (sel.Contains(
"Hz"))
1242 hist->SetBins(n,0,maxfrac*
fSample);
1243 title+=
"actual frequency domain";
1250 title2.Form(
" (DAQ: %-.3g samples/sec)",
fSample);
1253 title+=
";Frequency #nu (Hz);Q[#nu]";
1256 if (sel.Contains(
"n"))
1258 hist->SetBins(
fN,0,
fN);
1259 title+=
"sampling time domain";
1260 if (type>0) title+=
" input";
1263 title+=
";Sample number n;Value X[n]";
1265 if (sel.Contains(
"t"))
1268 title+=
"actual time domain";
1269 if (type>0) title+=
" input";
1272 title+=
";Time t (seconds);Value X[t]";
1275 hist->SetTitle(title);
1278 Double_t fstep=1./(2.*rN);
1279 if (type==1) fstep=1./(2.*double(
fN-1));
1282 for (Int_t i=0; i<n; i++)
1285 if (type2==3 || type2==4) x+=0.5;
1288 if (sel.Contains(
"n") || sel.Contains(
"t"))
1292 hist->SetBinContent(i+1,
fReIn.At(i));
1296 hist->SetBinContent(i+1,
fReOut.At(i));
1299 else if (sel.Contains(
"k"))
1303 hist->SetBinContent(i+1,
fReOut.At(i));
1307 hist->SetBinContent(i+1,
fReIn.At(i));
1310 else if (sel.Contains(
"f"))
1314 hist->Fill(x,
fReOut.At(i));
1318 hist->Fill(x,
fReIn.At(i));
1326 hist->Fill(x,
fReOut.At(i));
1330 hist->Fill(x,
fReIn.At(i));
1393 if (abs(type)<1 || abs(type)>4 ||
fN<1 || (abs(type)==1 &&
fN<2))
return;
1397 if (type==-1 || type==-4) type2=abs(type);
1398 if (type==-2) type2=3;
1399 if (type==-3) type2=2;
1402 Float_t maxfrac=0.5;
1403 if (sel.Contains(
"n") || sel.Contains(
"t") || sel.Contains(
"2"))
1419 fProc=TVirtualFFT::SineCosine(1,&
fN,&kind,
"ES K");
1422 Double_t* data=
fReIn.GetArray();
1423 fProc->SetPoints(data);
1434 for (Int_t i=0; i<
fN; i++)
1436 re=
fProc->GetPointReal(i,kFALSE);
1439 re/=sqrt(2.*(rN+1.));
1450 if ((sel.Contains(
"Hz") || sel.Contains(
"t")) &&
fSample<=0)
return;
1454 if (type<0) title+=
"Inverse ";
1456 if (abs(type)==1) title+=
"I";
1457 if (abs(type)==2) title+=
"II";
1458 if (abs(type)==3) title+=
"III";
1459 if (abs(type)==4) title+=
"IV";
1465 if (sel.Contains(
"k"))
1467 hist->SetBins(n,0,n-1);
1468 title+=
"index frequency domain";
1475 title2.Form(
" (DAQ: %-.3g samples/sec)",
fSample);
1478 title+=
";Index k;Q[k]";
1480 if (sel.Contains(
"f"))
1482 hist->SetBins(n,0,maxfrac);
1483 title+=
"fractional frequency domain";
1490 title2.Form(
" (DAQ: %-.3g samples/sec)",
fSample);
1493 title+=
";Fraction f of sampling rate;Q[f]";
1495 if (sel.Contains(
"Hz"))
1497 hist->SetBins(n,0,maxfrac*
fSample);
1498 title+=
"actual frequency domain";
1505 title2.Form(
" (DAQ: %-.3g samples/sec)",
fSample);
1508 title+=
";Frequency #nu (Hz);Q[#nu]";
1511 if (sel.Contains(
"n"))
1513 hist->SetBins(
fN,0,
fN);
1514 title+=
"sampling time domain";
1515 if (type>0) title+=
" input";
1518 title+=
";Sample number n;Value X[n]";
1520 if (sel.Contains(
"t"))
1523 title+=
"actual time domain";
1524 if (type>0) title+=
" input";
1527 title+=
";Time t (seconds);Value X[t]";
1530 hist->SetTitle(title);
1533 Double_t fstep=1./(2.*rN);
1534 if (type==1) fstep=1./(2.*double(
fN+1));
1537 for (Int_t i=0; i<n; i++)
1540 if (type2==3 || type2==4) x-=0.5;
1543 if (sel.Contains(
"n") || sel.Contains(
"t"))
1547 hist->SetBinContent(i+1,
fReIn.At(i));
1551 hist->SetBinContent(i+1,
fReOut.At(i));
1554 else if (sel.Contains(
"k"))
1558 hist->SetBinContent(i+1,
fReOut.At(i));
1562 hist->SetBinContent(i+1,
fReIn.At(i));
1565 else if (sel.Contains(
"f"))
1569 hist->Fill(x,
fReOut.At(i));
1573 hist->Fill(x,
fReIn.At(i));
1581 hist->Fill(x,
fReOut.At(i));
1585 hist->Fill(x,
fReIn.At(i));
1606 if (strlen(name)) q->SetName(name);
Sampling and statistics tools for various multi-dimensional data samples.
Int_t GetStoreMode() const
Int_t GetIndex(TString name) const
Int_t GetDimension() const
Double_t GetEntry(Int_t i, Int_t j, Int_t mode=0, Int_t k=0)