560 RtGraph* rtg = m_rtbinning.find(
't')==std::string::npos ?
new RtGraph(rtHist,1,std::string(
"abs(rtrack)").
data(),!bequiet,
dir) :
new RtGraph(rtHist,0,std::string(
"t-t0").
data(),!bequiet,
dir);
562 TF1 dtfitfunc(
"dtfitfunc",
"gaus(0)");
564 gStyle->SetOptFit(1111);
565 gStyle->SetPalette(1);
568 TF1 *trfunc,*rtfunc,*oldrtfunc;
573 trfunc->SetParameters(0.3, 1.0, 0.05, -3.);
574 double rmin0Limits[2]={0.0,2.0};
575 double rhoLimits[2]={0.0,10.};
576 double vLimits[2]={0.0,1.0};
577 trfunc->SetParLimits(0,rmin0Limits[0],rmin0Limits[1]);
578 trfunc->SetParLimits(1,rhoLimits[0],rhoLimits[1]);
579 trfunc->SetParLimits(2,vLimits[0],vLimits[1]);
580 rtg->
trgr->SetTitle(
"Dines' R-t sqrt(..)");
583 trfunc =
new TF1(
"trfunc",
pol3deg,0,3,4);
586 trfunc->SetParameters(0.0, 0.0, 0.0, 0.0);
587 rtg->
trgr->SetTitle(
"Polynomial R-t");
591 trfunc->SetRange(0,2);
592 if (
opt.find(
'3')==std::string::npos) trfunc->FixParameter(3,0);
593 trfunc->SetLineColor(4) ;
594 rtg->
trgr->Fit(trfunc,
"QR");
595 if (!bequiet) rtg->
trgr->Write();
599 rtfunc->SetRange(0,45);
600 if (
opt.find(
'3')==std::string::npos) rtfunc->FixParameter(3,0);
601 rtfunc->SetLineColor(4) ;
603 rtfunc->SetParameters(trfunc->GetParameter(0),trfunc->GetParameter(1),trfunc->GetParameter(2),trfunc->GetParameter(3));
607 rtfunc->SetParameters(0.000000
e+00, 6.269950
e-02, -3.370054
e-04, -1.244642
e-07);
608 if(rtg->
rtgr !=
nullptr) {
609 rtg->
rtgr->Fit(rtfunc,
"QR");
610 for (
int ipnt=0; ipnt<rtg->
rtgr->GetN(); ipnt++){
611 float deriv = rtfunc->Derivative(rtg->
rtgr->GetX()[ipnt]);
612 if(fabs(deriv)<1.0
e-24) deriv=0.05;
613 rtg->
rtgr->SetPointError(ipnt , rtg->
rtgr->GetEY()[ipnt]/deriv , rtg->
rtgr->GetEY()[ipnt]);
615 rtg->
rtgr->Fit(rtfunc,
"R");
619 if (!bequiet and (rtg->
rtgr !=
nullptr)) rtg->
rtgr->Write();
622 oldrtfunc->SetRange(0,45);
623 oldrtfunc->SetLineColor(1) ;
624 oldrtfunc->SetLineStyle(2) ;
625 oldrtfunc->SetLineWidth(1) ;
628 if (!bequiet) oldrtfunc->Write();
630 rtpars[0] = rtfunc->GetParameter(0);
631 rtpars[1] = rtfunc->GetParameter(1);
632 rtpars[2] = rtfunc->GetParameter(2);
633 rtpars[3] = rtfunc->GetParameter(3);
641 float precision = 0.0001;
644 float driftradius = rtpars[0]+tdrift*(rtpars[1]+tdrift*(rtpars[2]));
645 float residual = std::abs(rdrift) - driftradius;
646 while (std::abs(
residual) > precision) {
648 drdt = rtpars[1]+tdrift*(2*rtpars[2]);
649 if(fabs(drdt)<1.0e-24) drdt=0.05;
652 driftradius = rtpars[0]+tdrift*(rtpars[1]+tdrift*(rtpars[2]));
656 if (ntries>maxtries){
662 if (
opt.find(
'0')==std::string::npos) {
664 data[
key].rtpar[0] = rtpars[0];
665 data[
key].rtpar[1] = rtpars[1];
666 data[
key].rtpar[2] = rtpars[2];
670 data[
key].rtpar[1] = rtpars[1] + 2*tdrift*rtpars[2] + 3*tdrift*tdrift*rtpars[3];
671 data[
key].rtpar[2] = rtpars[2] + 3*tdrift*rtpars[3];
672 data[
key].rtpar[3] = rtpars[3];
676 data[
key].rtpar[0] = rtpars[0];
677 data[
key].rtpar[1] = rtpars[1];
678 data[
key].rtpar[2] = rtpars[2];
679 data[
key].rtpar[3] = rtpars[3];