372 if (!t || (range && !iaxis))
return;
375 Double_t betanorm=t->
GetBeta();
377 if (energy<=0 || betanorm<=0)
return;
385 Double_t bvec[3]={0,0,1};
386 if (
fB.GetNorm()>0)
fB.GetVector(bvec,
"car");
406 Double_t c=2.99792458e8/scale;
409 Double_t w=9e7*(t->
GetCharge()*
fB.GetNorm())/energy;
427 if (iaxis>0) beta.
GetVector(betavec,
"car");
428 if (iaxis<0) betaprim.
GetVector(betavec,
"car");
429 if (fabs(betavec[abs(iaxis)-1])/betanorm<1e-10)
return;
433 Double_t loc[3]={0,0,0};
452 if (scalex>0 && (scalex/scale>1.1 || scale/scalex>1.1)) rx*=scalex/scale;
456 SetHelix(loc,vel,w,0,kUnchanged,bvec);
459 if (fabs(w)>0 && fabs(fVt)>0) bend=1;
465 Double_t tmin=0,tmax=0;
470 Double_t vec1[3]={0,0,0};
471 Double_t vec2[3]={0,0,0};
487 tmin=(range[0]-loc[iaxis-1])/vel[iaxis-1];
488 tmax=(range[1]-loc[iaxis-1])/vel[iaxis-1];
495 tmin=(range[0]-loc[abs(iaxis)-1])/velprim[abs(iaxis)-1];
496 tmax=(range[1]-loc[abs(iaxis)-1])/velprim[abs(iaxis)-1];
515 SetNextPoint(
float(vec1[0]),
float(vec1[1]),
float(vec1[2]));
519 SetNextPoint(
float(vec2[0]),
float(vec2[1]),
float(vec2[2]));
523 SetNextPoint(
float(vec2[0]),
float(vec2[1]),
float(vec2[2]));
532 if (fabs(fVz)>0) tmin=-fZ0/fVz;
544 if (scale1/scale>1.1 || scale/scale1>1.1) r1*=scale1/scale;
554 if (scale2/scale>1.1 || scale/scale2>1.1) r2*=scale2/scale;
561 SetNextPoint(
float(vec1[0]),
float(vec1[1]),
float(vec1[2]));
562 SetNextPoint(
float(vec2[0]),
float(vec2[1]),
float(vec2[2]));
578 if (fabs(fVz)>0) tmin=-fZ0/fVz;
599 if (scale1/scale>1.1 || scale/scale1>1.1) r1*=scale1/scale;
602 if (fabs(fVz)>0) tmin=(vec1[2]-fZ0)/fVz;
610 if (scale2/scale>1.1 || scale/scale2>1.1) r2*=scale2/scale;
612 if (fabs(fVz)>0) tmax=(vec2[2]-fZ0)/fVz;
621 SetRange(tmin,tmax,kHelixT);
625 vec1[abs(iaxis)-1]=range[0];
626 vec2[abs(iaxis)-1]=range[1];
641 for (Int_t i=0; i<3; i++)
643 test=fabs(vec1[i]-vec2[i]);
651 Double_t rmin=vec1[imax];
652 Double_t rmax=vec2[imax];
661 Double_t xmin=fX0-fVt/fW;
662 Double_t xmax=fX0+fVt/fW;
663 Double_t ymin=fY0-fVt/fW;
664 Double_t ymax=fY0+fVt/fW;
680 if (imax==2 && dmax>0) SetRange(rmin,rmax,kHelixZ);
684 if (rmin<=ymin) rmin=ymin+1e-6*dmax;
685 if (rmax>=ymax) rmax=ymax-1e-6*dmax;
686 if (rmin<rmax) SetRange(rmin,rmax,kHelixY);
691 if (rmin<=xmin) rmin=xmin+1e-6*dmax;
692 if (rmax>=xmax) rmax=xmax-1e-6*dmax;
693 if (rmin<rmax) SetRange(rmin,rmax,kHelixX);
753 if (!t || (range && !iaxis))
return;
759 Int_t np=GetLastPoint()+1;
762 Float_t* points=GetP();
763 TPolyLine3D* curve=
new TPolyLine3D(np,points);
765 curve->SetLineWidth(fLineWidth);
769 curve->SetLineColor(kGreen);
770 if (q>0) curve->SetLineColor(kRed);
771 if (q<0) curve->SetLineColor(kBlue);
775 curve->SetLineColor(fLineColor);
789 TPolyMarker3D* m=
new TPolyMarker3D();
790 m->SetPoint(0,points[0],points[1],points[2]);
793 Int_t col=curve->GetLineColor();
795 m->SetMarkerColor(col);
952 if (!t || !pars)
return fExt;
977 range[0]=pars[0]-fabs(pars[1])/2.;
978 range[1]=pars[0]+fabs(pars[1])/2.;
980 Int_t iaxis=int(pars[2]);
984 Int_t np=GetLastPoint()+1;
985 if (!np)
return fExt;
987 Float_t* points=GetP();
991 Float_t first[3]={points[3*ip],points[3*ip+1],points[3*ip+2]};
995 Float_t last[3]={points[3*ip],points[3*ip+1],points[3*ip+2]};
999 err[0]=fabs(first[0]-last[0]);
1000 err[1]=fabs(first[1]-last[1]);
1001 err[2]=fabs(first[2]-last[2]);
1005 Float_t imp[3]={points[3*ip],points[3*ip+1],points[3*ip+2]};
1008 fExt->SetUnitScale(scale);
1009 fExt->SetPosition(imp,
"car");
1010 fExt->SetPositionErrors(err,
"car");