12 #include "StXiFinderMaker.h"
13 #include "StMessMgr.h"
14 #include "StEvent/StEventTypes.h"
17 #include "tables/St_exi_exipar_Table.h"
18 #include "PhysicalConstants.h"
19 #include "phys_constants.h"
22 StSPtrVecXiVertex* vecXi=0;
27 StXiFinderMaker::StXiFinderMaker(
const char *name):
StV0FinderMaker(name),
28 exipar(0),parsXi(0),xiVertex(0),det_id_xi(0){}
31 StXiFinderMaker::~StXiFinderMaker() {}
33 Int_t StXiFinderMaker::Init()
35 if ((useTracker!=kTrackerUseTPT) && (useTracker!=kTrackerUseITTF) && (useTracker!=kTrackerUseBOTH))
36 {gMessMgr->Error(
"StXiFinderMaker::Init() : wrong TrackerUsage parameter set.");
39 if ((useSVT!=kNoSVT) && (useSVT!=kUseSVT))
40 {gMessMgr->Error(
"StXiFinderMaker::Init() : wrong SVTUsage parameter set.");
43 if ((useEventModel!=kUseStEvent) && (useEventModel!=kUseMuDst))
44 {gMessMgr->Error(
"StXiFinderMaker::Init() : wrong EventModelUsage parameter set.");
47 if ((useLikesign!=kLikesignUseStandard) && (useLikesign!=kLikesignUseLikesign))
48 {gMessMgr->Error(
"StXiFinderMaker::Init() : wrong LikesignUsage parameter set.");
51 if ((useRotating!=kRotatingUseStandard) && (useRotating!=kRotatingUseRotating) && (useRotating!=kRotatingUseSymmetry) && (useRotating!=kRotatingUseRotatingAndSymmetry))
52 {gMessMgr->Error(
"StXiFinderMaker::Init() : wrong RotatingUsage parameter set.");
56 if (useTracker == kTrackerUseTPT) gMessMgr->Info()<<
"StXiFinderMaker : use TPT tracks."<<endm;
57 if (useTracker == kTrackerUseITTF) gMessMgr->Info()<<
"StXiFinderMaker : use ITTF tracks."<<endm;
58 if (useTracker == kTrackerUseBOTH) gMessMgr->Info()<<
"StXiFinderMaker : use TPT *and* ITTF tracks."<<endm;
59 if (useSVT == kUseSVT) gMessMgr->Info()<<
"StXiFinderMaker : use SVT points if possible."<<endm;
60 if (useSVT == kNoSVT) gMessMgr->Info()<<
"StXiFinderMaker : do not use SVT points."<<endm;
61 if (useEventModel == kUseStEvent) gMessMgr->Info()<<
"StXiFinderMaker : expect StEvent files in input."<<endm;
62 if (useEventModel == kUseMuDst) gMessMgr->Info()<<
"StXiFinderMaker : expect MuDst files in input."<<endm;
63 if (useLikesign == kLikesignUseLikesign) gMessMgr->Info()<<
"StXiFinderMaker : does like-sign finding."<<endm;
64 if (useRotating == kRotatingUseRotating) gMessMgr->Info()<<
"StXiFinderMaker : does rotating finding."<<endm;
65 if (useRotating == kRotatingUseSymmetry) gMessMgr->Info()<<
"StXiFinderMaker : does symmetry finding."<<endm;
66 if (useRotating == kRotatingUseRotatingAndSymmetry) gMessMgr->Info()<<
"StXiFinderMaker : does rotating + symmetry finding."<<endm;
68 if (useLanguage != kLanguageUseSpecial)
69 {a=(bool)(1&(useLanguage>>2));
70 b=(bool)(1&(useLanguage>>1));
71 c=(bool)(1&useLanguage);
72 useV0Language=2*(!(a^c))+(a|c);
73 useXiLanguage=4*(b&(!(a^c)))+2*(a&b&(!c))+(a|c);
76 {
case kLanguageUseOldRun : gMessMgr->Info()<<
"StXiFinderMaker : Fortran run."<<endm;
78 case kLanguageUseRun : gMessMgr->Info()<<
"StXiFinderMaker : C++ run."<<endm;
80 case kLanguageUseTestV0Finder : gMessMgr->Info()<<
"StXiFinderMaker : Test V0Finder."<<endm;
82 case kLanguageUseTestXiFinder : gMessMgr->Info()<<
"StXiFinderMaker : Test XiFinder."<<endm;
84 case kLanguageUseTestBothFinders : gMessMgr->Info()<<
"StXiFinderMaker : Test V0Finder and XiFinder."<<endm;
86 case kLanguageUseSpecial :
break;
87 default : gMessMgr->Error(
"StXiFinderMaker::Init() : wrong LanguageUsage parameter set.");
90 if ((useXiLanguage!=kXiLanguageUseFortran) && (useXiLanguage!=kXiLanguageUseCppOnFortranV0) && (useXiLanguage!=kXiLanguageUseCppOnCppV0) && (useXiLanguage!=kXiLanguageUseFortranAndCppOnFortranV0) && (useXiLanguage!=kXiLanguageUseFortranAndCppOnCppV0) && (useXiLanguage!=kXiLanguageUseBothCpp) && (useXiLanguage!=kXiLanguageUseAll))
91 {gMessMgr->Error(
"StXiFinderMaker::Init() : wrong XiLanguageUsage parameter set.");
94 switch (useV0Language)
95 {
case kV0LanguageUseFortran :
if ((useXiLanguage!=kXiLanguageUseFortran) && (useXiLanguage!=kXiLanguageUseCppOnFortranV0) && (useXiLanguage!=kXiLanguageUseFortranAndCppOnFortranV0))
96 {gMessMgr->Info()<<
"StXiFinderMaker : BE CAREFUL : impossible combination asked."<<endm;
97 gMessMgr->Info()<<
"StXiFinderMaker : Set it to testXiFinder."<<endm;
98 useXiLanguage=kXiLanguageUseFortranAndCppOnFortranV0;
101 case kV0LanguageUseCpp :
if (useXiLanguage!=kXiLanguageUseCppOnCppV0)
102 {gMessMgr->Info()<<
"StXiFinderMaker : BE CAREFUL : impossible combination asked."<<endm;
103 gMessMgr->Info()<<
"StXiFinderMaker : Set it to normalRun."<<endm;
104 useXiLanguage=kXiLanguageUseCppOnCppV0;
107 case kV0LanguageUseBoth :
break;
108 default : gMessMgr->Error(
"StXiFinderMaker::Init() : wrong V0LanguageUsage parameter set.");
111 if (1&useV0Language) gMessMgr->Info()<<
"StXiFinderMaker : Will store Fortran V0s."<<endm;
112 if (2&useV0Language) gMessMgr->Info()<<
"StXiFinderMaker : Will store C++ V0s."<<endm;
113 if (1&useXiLanguage) gMessMgr->Info()<<
"StXiFinderMaker : Will store Fortran Xis."<<endm;
114 if (2&useXiLanguage) gMessMgr->Info()<<
"StXiFinderMaker : Will store C++ Xis made with Fortran V0s."<<endm;
115 if (4&useXiLanguage) gMessMgr->Info()<<
"StXiFinderMaker : Will store C++ Xis made with C++ V0s."<<endm;
119 if(!mMuDstMaker) gMessMgr->Warning(
"StXiFinderMaker::Init can't find a valid MuDst.");
122 return StMaker::Init();
125 Int_t StXiFinderMaker::InitRun(
int runumber) {
126 exipar = (St_exi_exipar*) GetDataBase(
"global/vertices/exipar");
128 {gMessMgr->Error(
"StXiFinderMaker::Init() : could not find exipar in database.");
131 return StMaker::InitRun(runumber);
141 if (iRes !=
kStOk)
return iRes;
143 StSPtrVecXiVertex& xiVertices =
event->xiVertices();
144 gMessMgr->Info()<<
"StXiFinderMaker : coming in I have "<<xiVertices.size()<<
" Xis."<<endm;
157 if (!(1&useXiLanguage) && !((4&useXiLanguage) && (!(1&useV0Language))))
159 gMessMgr->Info() <<
"StXiFinderMaker : pre-existing Xis deleted." << endm;
160 StSPtrVecXiVertex xiVertices2;
161 xiVertices = xiVertices2;
169 {StSPtrVecV0Vertex& v0Vertices =
event->v0Vertices();
170 unsigned int nV0s = v0Vertices.size();
172 for (
unsigned int i=0; i<nV0s; i++)
173 {v0Vertex = v0Vertices[i];
174 if (v0Vertex)
UseV0();
177 if ((4&useXiLanguage) || (2&useV0Language))
179 if (iRes !=
kStOk)
return iRes;
182 gMessMgr->Info()<<
"StXiFinderMaker : now I have "<<xiVertices.size()<<
" Xis."<<endm;
189 Bool_t usedV0 = kFALSE;
191 if ((!(2&useXiLanguage)) && (!(4&useXiLanguage)))
return usedV0;
194 if ((2&useXiLanguage) && (v0Vertex->chiSquared()<0))
return usedV0;
195 if ((4&useXiLanguage) && (v0Vertex->chiSquared()>=0))
return usedV0;
198 long myChi = -1*(long)v0Vertex->chiSquared();
200 if( !useSVT && (myChi&((
long)1<<3)))
return usedV0;
201 if( useSVT && !(myChi&((
long)1<<3)))
return usedV0;
206 int iflag1,i,charge,tries,negKey,posKey;
207 double mlam,mala,ptV0,ptBach,radiusBach,rsq;
214 double xc,yc,xd,yd,atmp,btmp,ctmp,dtmp,abtmp,xOut[2],yOut[2],dist;
217 double arg,axb,ds,dz;
221 double dv0dotdb,denom,s2,valid,xAns,yAns,yy,zz,s1;
226 double ptot_v02,bdotx,vdotx,ppar,pper;
231 double pt_tmp,bcharge_tmp,curvature_tmp,dip_tmp,phase_tmp;
235 double epsDipAngle,cstPsi;
240 StSPtrVecXiVertex& xiVertices = *vecXi;
243 negKey=v0Vertex->daughter(negative)->key();
244 posKey=v0Vertex->daughter(positive)->key();
245 parsXi = exipar->GetTable(det_id_v0-1);
246 xV0=v0Vertex->position();
249 if (impact.mag2() < (parsXi->rv_v0*parsXi->rv_v0))
return usedV0;
250 pV0=v0Vertex->momentum();
251 dpV0.setX(pV0.x()/abs(pV0));
252 dpV0.setY(pV0.y()/abs(pV0));
253 dpV0.setZ(pV0.z()/abs(pV0));
254 ptV0=::sqrt(pV0.x()*pV0.x()+pV0.y()*pV0.y());
261 epsMomentum.setX(1.);
262 epsMomentum.setY(1.);
263 epsMomentum.setZ(1.);
269 {epsOrigin.setX(-1.);
271 epsMomentum.setX(-1.);
272 epsMomentum.setY(-1.);
274 cstOrigin.setX(2*xPvx.x());
275 cstOrigin.setY(2*xPvx.y());
280 epsMomentum.setZ(-1.);
281 cstOrigin.setZ(2*xPvx.z());
285 const StThreeVectorF& posVec3 = v0Vertex->momentumOfDaughter(positive);
286 const StThreeVectorF& negVec3 = v0Vertex->momentumOfDaughter(negative);
287 posVec.setVect(posVec3);
288 negVec.setVect(negVec3);
289 float pVmag2 = posVec3.mag2();
290 float nVmag2 = negVec3.mag2();
292 posVec.setE(TMath::Sqrt(pVmag2+proton_mass_c2*proton_mass_c2));
293 negVec.setE(TMath::Sqrt(nVmag2+pion_minus_mass_c2*pion_minus_mass_c2));
294 mlam = (posVec+negVec).m();
295 Bool_t lamCand = (TMath::Abs(mlam-lambda_mass_c2) < parsXi->dmass);
297 posVec.setE(TMath::Sqrt(pVmag2+pion_plus_mass_c2*pion_plus_mass_c2));
298 negVec.setE(TMath::Sqrt(nVmag2+proton_mass_c2*proton_mass_c2));
299 mala = (posVec+negVec).m();
300 Bool_t alaCand = (TMath::Abs(mala-lambda_mass_c2) < parsXi->dmass);
306 if (v0Vertex->dcaDaughterToPrimaryVertex(positive) < parsXi->bpn_v0)
313 if (v0Vertex->dcaDaughterToPrimaryVertex(negative) < parsXi->bpn_v0)
321 charge=-(useLikesign-1)*charge;
324 if (bachGeom == NULL) {gMessMgr->Info()<<
"StXiFinderMaker : CAUTION : pointer bachGeom is null."<<endm;
return usedV0;}
326 if (bachGeom2 == NULL) {gMessMgr->Info()<<
"StXiFinderMaker : CAUTION : pointer bachGeom2 is null."<<endm;
return usedV0;}
329 for (k=0; k<trks; k++)
330 {bachGeom->setCharge(trk[k]->geometry()->charge());
331 bachGeom->setHelicity(trk[k]->geometry()->helicity());
332 bachGeom->setCurvature(trk[k]->geometry()->curvature());
333 bachGeom->setPsi(trk[k]->geometry()->psi()+cstPsi);
334 bachGeom->setDipAngle(epsDipAngle*trk[k]->geometry()->dipAngle());
335 bachGeom->setOrigin(cstOrigin+epsOrigin.pseudoProduct(trk[k]->geometry()->origin()));
336 bachGeom->setMomentum(epsMomentum.pseudoProduct(trk[k]->geometry()->momentum()));
338 if (charge*bachGeom->charge() < 0)
continue;
340 if (GetTrackerUsage() == kTrackerUseBOTH)
343 if ((v0Vertex->dcaDaughters() <= 0) && (trk[k]->fittingMethod() != ITTFflag))
continue;
344 if ((v0Vertex->dcaDaughters() >= 0) && (trk[k]->fittingMethod() == ITTFflag))
continue;
347 if (trkID[k] == negKey)
continue;
348 if (trkID[k] == posKey)
continue;
352 det_id_xi=TMath::Max(det_id_v0,detId[k]);
354 parsXi=exipar->GetTable(det_id_xi-1);
357 bachGeom2->setCharge(bachGeom->charge());
358 bachGeom2->setHelicity(bachGeom->helicity());
359 bachGeom2->setCurvature(bachGeom->curvature());
360 bachGeom2->setPsi(bachGeom->psi());
361 bachGeom2->setDipAngle(bachGeom->dipAngle());
362 bachGeom2->setOrigin(bachGeom->origin());
363 bachGeom2->setMomentum(bachGeom->momentum());
364 if ((bachGeom->origin().x()==0) && (bachGeom->origin().y()==0) && (bachGeom->origin().z()==0))
365 {gMessMgr->Info()<<
"StXiFinderMaker : CAUTION : bachelor candidate has all parameters = 0."<<endm;
369 radiusBach=1./bachGeom->curvature();
370 rsq=radiusBach*radiusBach;
375 xc=bachGeom->origin().x()-bachGeom->helicity()*radiusBach*TMath::Sin(bachGeom->psi());
376 yc=bachGeom->origin().y()+bachGeom->helicity()*radiusBach*TMath::Cos(bachGeom->psi());
384 {atmp=pV0.y()/pV0.x();
387 ctmp=dtmp*rsq-btmp*btmp;
389 {dist=fabs(xd*pV0.y()-yd*pV0.x())/ptV0;
390 if (dist >= (radiusBach+parsXi->dca_max)) iflag1=0;
393 ctmp=::sqrt(rsq/(atmp*atmp+1.));
395 btmp=dtmp*xd+ctmp*yd;
407 {
if (ctmp == 0) iflag1=1;
411 xOut[0]=(-abtmp+ctmp)/dtmp+xc;
412 xOut[1]=(-abtmp-ctmp)/dtmp+xc;
413 yOut[0]=atmp*(xOut[0]-xc)+btmp;
414 yOut[1]=atmp*(xOut[1]-xc)+btmp;
422 {dist=fabs(xd*pV0.y()-yd*pV0.x())/ptV0;
423 if (dist >= (radiusBach+parsXi->dca_max)) iflag1=0;
427 if (xV0.x() > xc) xOut[0]=xc+radiusBach;
428 else xOut[0]=xc-radiusBach;
432 {
if (ctmp == 0) iflag1=1;
440 if (iflag1 == 0)
continue;
443 for (i=0;i<iflag1;i++)
445 axb=(bachGeom->origin().x()-xc)*(yOut[i]-yc)-(bachGeom->origin().y()-yc)*(xOut[i]-xc);
447 if (arg > 1.) arg=1.;
448 if (arg < -1.) arg=-1.;
449 ds=radiusBach*TMath::ASin(arg);
450 dz=ds*TMath::Tan(bachGeom->dipAngle());
452 if (xOut[i] == 0.) xOrig.setX(0.01);
454 xOrig.setZ(bachGeom->origin().z()-(bachGeom->charge()*(Bfield/tesla)/fabs(bachGeom->charge()*(Bfield/tesla)))*dz);
455 bachGeom2->setOrigin(xOrig);
456 bachGeom2->setPsi(bachGeom->psi()+TMath::ASin(arg));
460 xOrig=bachGeom2->momentum();
461 xOrig.setX(ptBach*TMath::Cos(bachGeom2->psi()));
462 xOrig.setY(ptBach*TMath::Sin(bachGeom2->psi()));
465 pBach.setX(xOrig.x()/abs(xOrig));
466 pBach.setY(xOrig.y()/abs(xOrig));
467 pBach.setZ(xOrig.z()/abs(xOrig));
468 dv0dotdb=dpV0.x()*pBach.x()+dpV0.y()*pBach.y()+dpV0.z()*pBach.z();
469 diffc.setX(xV0.x()-xOut[i]);
470 diffc.setY(xV0.y()-yOut[i]);
471 diffc.setZ(xV0.z()-bachGeom2->origin().z());
474 denom=dv0dotdb*dv0dotdb-1.;
475 s2=(dpV0.x()*dv0dotdb-pBach.x())*diffc.x() + (dpV0.y()*dv0dotdb-pBach.y())*diffc.y() + (dpV0.z()*dv0dotdb-pBach.z())*diffc.z();
480 valid=fabs(s2*s2*(pBach.x()*pBach.x()+pBach.y()*pBach.y()));
482 while ((valid < (0.0004*rsq)) && (tries < 4) && (valid > (rsq*1.e-6)))
484 batv.setX(pBach.x()*s2+xOut[i]);
485 batv.setY(pBach.y()*s2+yOut[i]);
486 batv.setZ(pBach.z()*s2+bachGeom2->origin().z());
492 {
if (dtmp >= 0) xAns=xc-radiusBach;
493 else xAns=xc+radiusBach;
498 yy=radiusBach/::sqrt(ctmp*ctmp+1.);
514 axb=(bachGeom->origin().x()-xc)*(yOut[i]-yc)-(bachGeom->origin().y()-yc)*(xOut[i]-xc);
516 if (arg > 1.) arg=1.;
517 if (arg < -1.) arg=-1.;
518 ds=radiusBach*TMath::ASin(arg);
519 dz=ds*TMath::Tan(bachGeom->dipAngle());
521 if (xOut[i] == 0.) xOrig.setX(0.01);
523 xOrig.setZ(bachGeom->origin().z()-(bachGeom->charge()*(Bfield/tesla)/fabs(bachGeom->charge()*(Bfield/tesla)))*dz);
524 bachGeom2->setOrigin(xOrig);
525 bachGeom2->setPsi(bachGeom->psi()+TMath::ASin(arg));
529 xOrig=bachGeom2->momentum();
530 xOrig.setX(ptBach*TMath::Cos(bachGeom2->psi()));
531 xOrig.setY(ptBach*TMath::Sin(bachGeom2->psi()));
534 pBach.setX(xOrig.x()/abs(xOrig));
535 pBach.setY(xOrig.y()/abs(xOrig));
536 pBach.setZ(xOrig.z()/abs(xOrig));
537 dv0dotdb=dpV0.x()*pBach.x()+dpV0.y()*pBach.y()+dpV0.z()*pBach.z();
538 diffc.setX(xV0.x()-xOut[i]);
539 diffc.setY(xV0.y()-yOut[i]);
540 diffc.setZ(xV0.z()-bachGeom2->origin().z());
541 denom=dv0dotdb*dv0dotdb-1.;
542 s2=(dpV0.x()*dv0dotdb-pBach.x())*diffc.x() + (dpV0.y()*dv0dotdb-pBach.y())*diffc.y() + (dpV0.z()*dv0dotdb-pBach.z())*diffc.z();
544 valid=fabs(s2*s2*(pBach.x()*pBach.x()+pBach.y()*pBach.y()));
547 if ((valid < (0.0004*rsq)) && (tries < 4))
548 {batv.setX(pBach.x()*s2+xOut[i]);
549 batv.setY(pBach.y()*s2+yOut[i]);
550 batv.setZ(pBach.z()*s2+bachGeom2->origin().z());
552 s1=(pBach.x()*dv0dotdb-dpV0.x())*diffc.x() + (pBach.y()*dv0dotdb-dpV0.y())*diffc.y() + (pBach.z()*dv0dotdb-dpV0.z())*diffc.z();
554 v0atv.setX(dpV0.x()*s1+xV0.x());
555 v0atv.setY(dpV0.y()*s1+xV0.y());
556 v0atv.setZ(dpV0.z()*s1+xV0.z());
559 if (((xV0.x()-v0atv.x())*pV0.x() + (xV0.y()-v0atv.y())*pV0.y() + (xV0.z()-v0atv.z())*pV0.z()) <= 0.)
continue;
560 dca=(v0atv.x()-batv.x())*(v0atv.x()-batv.x()) + (v0atv.y()-batv.y())*(v0atv.y()-batv.y()) + (v0atv.z()-batv.z())*(v0atv.z()-batv.z());
562 if (dca > (parsXi->dca_max*parsXi->dca_max))
continue;
563 xpp.setX((v0atv.x()+batv.x())/2.);
564 xpp.setY((v0atv.y()+batv.y())/2.);
565 xpp.setZ((v0atv.z()+batv.z())/2.);
567 if (((xpp.x()-xPvx.x())*(xpp.x()-xPvx.x())+(xpp.y()-xPvx.y())*(xpp.y()-xPvx.y())+(xpp.z()-xPvx.z())*(xpp.z()-xPvx.z())) <= (parsXi->rv_xi*parsXi->rv_xi))
continue;
569 pXi.setX(pV0.x()+xOrig.x());
570 pXi.setY(pV0.y()+xOrig.y());
571 pXi.setZ(pV0.z()+xOrig.z());
573 if (((xpp.x()-xPvx.x())*pXi.x()+(xpp.y()-xPvx.y())*pXi.y()+(xpp.z()-xPvx.z())*pXi.z()) < 0.0)
continue;
575 ptot_v02=ptV0*ptV0+pV0.z()*pV0.z();
576 bdotx=xOrig.x()*pXi.x()+xOrig.y()*pXi.y()+xOrig.z()*pXi.z();
577 vdotx=pV0.x()*pXi.x()+pV0.y()*pXi.y()+pV0.z()*pXi.z();
578 if (bachGeom->charge() > 0)
579 {ppar=bdotx/pXi.mag();
580 pper=(ptot[k]*ptot[k]-ppar*ppar);
581 pper=(pper>0)? ::sqrt(ptot[k]*ptot[k]-ppar*ppar):0;
584 {ppar=vdotx/pXi.mag();
585 pper=(ptot_v02-ppar*ppar);
586 pper=(pper>0)? ::sqrt(ptot_v02-ppar*ppar):0;
589 if (pper > 0.33)
continue;
592 pt_tmp = ::sqrt(pXi.x()*pXi.x()+pXi.y()*pXi.y());
593 bcharge_tmp = charge*(Bfield/kilogauss);
594 curvature_tmp = TMath::Abs(bcharge_tmp)*C_D_CURVATURE/pt_tmp;
595 dip_tmp = atan(pXi.z()/pt_tmp);
596 h_tmp = ((bcharge_tmp > 0) ? -1 : 1);
597 phase_tmp = atan2(pXi.y(),pXi.x())-(h_tmp*M_PI_2);
598 origin_tmp.setX(xpp.x());
599 origin_tmp.setY(xpp.y());
600 origin_tmp.setZ(xpp.z());
601 StHelixD *globHelix =
new StHelixD(curvature_tmp, dip_tmp, phase_tmp, origin_tmp, h_tmp);
605 if (bxi > parsXi->bxi_max)
613 if (p3.mag2() > p2.mag2()) bxi=-bxi;
617 xiVertex->setPosition(xpp);
618 xiVertex->addDaughter(trk[k]);
619 xiVertex->setDcaBachelorToPrimaryVertex(trk[k]->impactParameter());
620 xiVertex->setMomentumOfBachelor(xOrig);
621 xiVertex->setDcaDaughters(::sqrt(dca));
622 xiVertex->setDcaParentToPrimaryVertex(bxi);
623 xiVertex->setV0Vertex(v0Vertex);
627 long int v0ChiSq = -1*(
long int)v0Vertex->chiSquared();
628 if(detId[k]==2 || detId[k]==3)
630 v0ChiSq |=((
long int)1 << 0);
633 xiVertex->setChiSquared((
float)v0ChiSq);
636 xiVertices.push_back(xiVertex);
double distance(const StThreeVector< double > &p, bool scanPeriods=true) const
minimal distance between point and helix
pair< double, double > pathLength(double r) const
path length at given r (cylindrical r)
double ycenter() const
x-center of circle in xy-plane
double xcenter() const
aziumth in xy-plane measured from ring center