本文整理汇总了C++中Trajectory::node方法的典型用法代码示例。如果您正苦于以下问题:C++ Trajectory::node方法的具体用法?C++ Trajectory::node怎么用?C++ Trajectory::node使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类Trajectory
的用法示例。
在下文中一共展示了Trajectory::node方法的2个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: ComputeMomFromParabola
//*****************************************************************************
void fitter::ComputeMomFromParabola(const Trajectory& traj, int nplanes, int firsthit, EVector& V){
//*****************************************************************************
//Some catchers for pointless returns.
int fitcatch;
//
int nfit, sign;
int fitRange[3];
const int fitpoints = nplanes - firsthit;
double xpos[fitpoints], ypos[fitpoints], zpos[fitpoints];
double upos[fitpoints], vpos[fitpoints];
int pos = 0;
EVector currentpos = EVector(3,0);
EVector currentB = EVector(3,0);
EVector z = EVector(3,0);
z[2] = 1;
double Bmean=0;
for( int ipoint=firsthit; ipoint < nplanes; ipoint ++ ){
xpos[pos] = traj.node(ipoint).measurement().position()[0];
ypos[pos] = traj.node(ipoint).measurement().position()[1];
zpos[pos] = traj.node(ipoint).measurement().position()[2]
- traj.node(firsthit).measurement().position()[2];
currentpos[0] = traj.node(ipoint).measurement().position()[0];
currentpos[1] = traj.node(ipoint).measurement().position()[1];
currentpos[2] = 0.;
currentB = _geom.getBField(currentpos);
upos[pos] = xpos[pos] > 0 ? asin(ypos[pos]/currentpos.norm())
: -asin(ypos[pos]/currentpos.norm());
vpos[pos] = dot(currentpos,crossprod(z,currentB))/currentB.norm();
Bmean += currentB.norm();
++pos;
}
Bmean /= pos;
Bmean /= tesla;
if (fitpoints <= 15) { nfit = 1; fitRange[0] = fitpoints;}
else if (fitpoints <= 40) {
nfit = 2;
fitRange[0] = 15; fitRange[1] = (int)(0.7*fitpoints);
}
else if (fitpoints > 40) {
nfit = 3;
fitRange[0] = 15; fitRange[1] = (int)(fitpoints/2); fitRange[2] = (int)(0.7*fitpoints);
}
for (int ifit = 0;ifit < nfit;ifit++) {
TGraph *trajFitXZ = new TGraph(fitRange[ifit],zpos, xpos);
TGraph *trajFitYZ = new TGraph(fitRange[ifit],zpos, ypos);
TGraph *trajFitUZ = new TGraph(fitRange[ifit],zpos, upos);
TGraph *trajFitVZ = new TGraph(fitRange[ifit],zpos, vpos);
TF1 *func = new TF1("fit",fitf2,-3,3,3);
func->SetParameters(0.,0.,0.001,0.0001,0.0001);
func->SetParNames("a", "b", "c", "d", "e");
TF1 *func2 = new TF1("fit2",fitf2,-3,3,3);
func2->SetParameters(0.,0.,0.001,0.0001,0.0001);
func2->SetParNames("f", "g", "h", "i", "j");
TF1 *func3 = new TF1("fit3",fitf2,-3,3,3);
func->SetParameters(0.,0.,0.001,0.0001,0.0001);
func->SetParNames("a1", "b1", "c1", "d1", "e1");
TF1 *func4 = new TF1("fit4",fitf2,-3,3,3);
func2->SetParameters(0.,0.,0.001,0.0001,0.0001);
func2->SetParNames("f1", "g1", "h1", "i1", "j1");
fitcatch = trajFitXZ->Fit("fit", "QN");
fitcatch = trajFitYZ->Fit("fit2", "QN");
fitcatch = trajFitUZ->Fit("fit3", "QN");
fitcatch = trajFitVZ->Fit("fit4", "QN");
double b = func->GetParameter(1);
double c = func->GetParameter(2);
double g = func2->GetParameter(1);
/*double f = func2->GetParameter(0);
double a = func->GetParameter(0);
double h = func2->GetParameter(2);
double a1 = func3->GetParameter(0);
double b1 = func3->GetParameter(1);
double c1 = func3->GetParameter(2);
double f1 = func4->GetParameter(0);*////
double g1 = func4->GetParameter(1);
double h1 = func4->GetParameter(2);
if (ifit == 0) {
V[4] = g; //func2->GetParameter(1);
V[3] = b;
if (h1!=0) {
V[5] = 1./(-0.3*Bmean*pow((1+g1*g1),3./2.)/
(2*h1)*0.01);
V[5] /= GeV;
sign = (int)( V[5]/fabs( V[5] ));
} else V[5] = 0;
} else {
//.........这里部分代码省略.........
示例2: ComputeMomFromRange
//*****************************************************************************
void fitter::ComputeMomFromRange(const Trajectory& traj, int nplanes, int firsthit, EVector& V){
//*****************************************************************************
//Some catchers for pointless returns.
int fitcatch;
//
/// int nfit;
/// int fitRange[3];
const int fitpoints = nplanes - firsthit;
///double meanchange = 0;
double xpos[fitpoints], ypos[fitpoints], zpos[fitpoints];
double upos[fitpoints];/// wpos[fitpoints];
std::vector<EVector> dr;
std::vector<EVector> B;
bool isContained = true, cuspfound = false;
double Xmax = _geom.getPlaneX() - 1*cm;
double Ymax = _geom.getPlaneY() - 1*cm;
/// double Zmax = _geom.getPlaneZ() - 1*cm;
//double dx[fitpoints-1], dy[fitpoints-1], dz[fitpoints-1];
// double ax[fitpoints-2], ay[fitpoints-2], az[fitpoints-2];
// double bx[fitpoints-2], by[fitpoints-2], bz[fitpoints-2];
///double ds0=0, ds1=0;
double Bmean=0;
double pathlength=0;
int Npts=0;
///double initR = 0;
double sumDR = 0;
int minindex = nplanes - firsthit;
///double minR = 999999.9999;
double pdR = 0.0;
EVector Z = EVector(3,0); Z[2] = 1;
for (int ipoint=firsthit;ipoint < nplanes;ipoint++){
xpos[ipoint-firsthit] = traj.node(ipoint).measurement().position()[0];
ypos[ipoint-firsthit] = traj.node(ipoint).measurement().position()[1];
zpos[ipoint-firsthit] = traj.node(ipoint).measurement().position()[2]
- traj.node(firsthit).measurement().position()[2];
if(fabs(xpos[ipoint-firsthit]) > Xmax || fabs(ypos[ipoint-firsthit]) > Ymax)
isContained = false;
else if(fabs(ypos[ipoint-firsthit]) >
(1 + tan(atan(1.)/2.)) * Xmax - fabs(xpos[ipoint-firsthit]))
isContained = false;
EVector pos0 = EVector(3,0);
pos0[0] = xpos[ipoint-firsthit];
pos0[1] = ypos[ipoint-firsthit];
pos0[2] = zpos[ipoint-firsthit];
EVector B0 = _geom.getBField(pos0);
B.push_back(B0);
Bmean += B0.norm();
upos[ipoint-firsthit] = // sqrt(pos0[0]*pos0[0] + pos0[1]*pos0[1]);
dot(pos0,crossprod(Z, B0))/crossprod(Z, B0).norm();
//if(!cuspfound)
// if(ipoint == firsthit) initR = upos[ipoint-firsthit];
// else {
//sumDR += initR - upos[ipoint-firsthit];
//initR = upos[ipoint - firsthit];
// }
Npts++;
if ( ipoint > firsthit){
EVector drtemp = EVector(3,0);
drtemp[0] = xpos[ipoint-firsthit] - xpos[ipoint-firsthit-1];
drtemp[1] = ypos[ipoint-firsthit] - ypos[ipoint-firsthit-1];
drtemp[2] = zpos[ipoint-firsthit] - zpos[ipoint-firsthit-1];
dr.push_back(drtemp);
pathlength += drtemp.norm();
if ( ipoint > firsthit + 1 ) {
int k = ipoint-firsthit-1;
EVector dr0 = dr[k-1];
EVector dr1 = dr[k];
EVector ddr = dr1 + dr0;
EVector Ddr = dr1 - dr0;
EVector pos = EVector(3,0);
pos[0] = xpos[k-1]; pos[1] = ypos[k-1]; pos[2] = zpos[k-1];
EVector B = _geom.getBField(pos);
double dR = dot(ddr, crossprod(Z, B0))/ (crossprod(Z,B0).norm());
double DR = dot(Ddr, crossprod(Z, B0))/ (crossprod(Z,B0).norm());
if(pdR != 0.0){
if(!cuspfound && DR/fabs(DR) == pdR/fabs(pdR)){
// sumDR += fabs(dR) > 0.0 ? dR/fabs(dR):0.0;
sumDR += dR;
// pdR = dR;
pdR = dR;
}
else if(dR/fabs(dR) != pdR/fabs(pdR)){
// cuspfound = true;
minindex = ipoint - firsthit - 1;
pdR = dR;
// std::cout<<"At cusp, sumDR = "<<sumDR<<std::endl;
}
}
//.........这里部分代码省略.........