#include <TrigL2Vertex.h>
Definition at line 104 of file TrigL2Vertex.h.
◆ TrigVertexFitConstraint() [1/2]
two-track mass constraint
Definition at line 343 of file TrigL2Vertex.cxx.
346{
350}
std::list< const TrigVertexFitInputTrack * > m_trackList
◆ TrigVertexFitConstraint() [2/2]
◆ ~TrigVertexFitConstraint()
| TrigVertexFitConstraint::~TrigVertexFitConstraint |
( |
| ) |
|
◆ calculateInvariantMass()
| double TrigVertexFitConstraint::calculateInvariantMass |
( |
TrigL2Vertex * | pV | ) |
|
|
private |
Definition at line 367 of file TrigL2Vertex.cxx.
368{
369 const double C=0.029997;
370 const double B=20.84;
371
373 double P[3];
double E=0.0;
374
376
378 for(
int i=0;
i<3;
i++)
P[i]=0.0;
379
380 for(std::list<const TrigVertexFitInputTrack*>::iterator it=
m_trackList.begin();it!=
m_trackList.end();++it)
381 {
382 offset=3+3*(*it)->getIndex();
383 double mass=(*it)->getMass()/1000.0;
384 double pT=fabs(Rk[offset+2]);
385 double p=
pT/
sin(Rk[offset+1]);
386
387 double psi=-asin(alpha*(Rk[0]*
cos(Rk[offset])+Rk[1]*
sin(Rk[offset]))/Rk[offset+2]);
388 double phiV=Rk[
offset]+psi;
391 P[2]+=
pT*
cos(Rk[offset+1])/
sin(Rk[offset+1]);
392 E+=sqrt(mass*mass+p*p);
393 }
395
397}
double * getParametersVector()
returns vector of vertex fit parameters: vertex position + refitted track momenta at-perigee (sic !...
double invMass(const I4Momentum &pA, const I4Momentum &pB)
invariant mass from two I4momentum references
◆ getChi2Distance()
| double TrigVertexFitConstraint::getChi2Distance |
( |
class TrigL2Vertex * | pV | ) |
|
|
virtual |
implementation of abstract method from the base class
Implements TrigVertexFittingNode.
Definition at line 400 of file TrigL2Vertex.cxx.
401{
402 const double C=0.029997;
403 const double B=20.84;
404
409 bool linFailed=false;
410 double* Rk = pV->getParametersVector();
411
413 for(i=0;
i<3;
i++)
P[i]=0.0;
414
415 int nSize=3+3*pV->getTracks()->size();
416
417 for(std::list<const TrigVertexFitInputTrack*>::iterator it=
m_trackList.begin();it!=
m_trackList.end();++it)
418 {
419 offset=3+3*(*it)->getIndex();
420 double mass=(*it)->getMass()/1000.0;
421 double pT=fabs(Rk[offset+2]);
422 double p=
pT/
sin(Rk[offset+1]);
423
424 double psi=-asin(alpha*(Rk[0]*
cos(Rk[offset])+Rk[1]*
sin(Rk[offset]))/Rk[offset+2]);
425 double phiV=Rk[
offset]+psi;
428 P[2]+=
pT*
cos(Rk[offset+1])/
sin(Rk[offset+1]);
429 E+=sqrt(mass*mass+p*p);
430 }
432
434 m_D[0][0]=0.0;
m_D[0][1]=0.0;
m_D[0][2]=0.0;
435
436 for(std::list<const TrigVertexFitInputTrack*>::iterator it=
m_trackList.begin();it!=
m_trackList.end();++it)
437 {
438 offset=3+3*(*it)->getIndex();
439
440 double mass=(*it)->getMass()/1000.0;
441 double Ck=(Rk[
offset+2]<0.0)?-1.0:1.0;
442 double sinT=
sin(Rk[offset+1]);
443 double cosT=
cos(Rk[offset+1]);
444 double pT=fabs(Rk[offset+2]);
446 double e=sqrt(p*p+mass*mass);
447 double sinF=
sin(Rk[offset]);
448 double cosF=
cos(Rk[offset]);
449
450 double sinPsi=-
alpha*(Rk[0]*cosF+Rk[1]*sinF)/Rk[offset+2];
451 if(fabs(sinPsi)>1.0)
452 {
453 linFailed=true;
454 break;
455 }
456 double psi=asin(sinPsi);
457 double cosPsi=sqrt(1.0-sinPsi*sinPsi);
458 double phiV=Rk[
offset]+psi;
459
460 double aCos=
alpha*Ck/cosPsi;
461 double dP=
P[1]*
cos(phiV)-
P[0]*
sin(phiV);
463
464 m_D[0][0]+=dP*cosF*aCos;
465 m_D[0][1]+=dP*sinF*aCos;
468 m_D[0][
offset+2]=eE/sinT-Ck*(
P[0]*
cos(phiV)+
P[1]*
sin(phiV)+
P[2]*cosT/sinT)+dP*Ck*sinPsi/cosPsi;
469 }
470 for(i=0;
i<nSize;
i++)
m_D[0][i]/=invMass;
471 if(linFailed) return -999.9;
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
495
497 {
498 for(j=i;j<nSize;j++)
499 {
500 double dCov=pV->m_Gk[
i][j]*
m_D[0][
i]*
m_D[0][j];
501 if(i!=j) dCov*=2.0;
502 covM+=dCov;
503 }
504 }
507}
double m_D[2][MAX_SIZE_VERT_COVM]
◆ getValue()
| double TrigVertexFitConstraint::getValue |
( |
| ) |
|
◆ report()
| MsgStream & TrigVertexFitConstraint::report |
( |
MsgStream & | out | ) |
const |
|
virtual |
◆ updateVertex()
| void TrigVertexFitConstraint::updateVertex |
( |
class TrigL2Vertex * | pV | ) |
|
|
virtual |
implementation of abstract method from the base class
Implements TrigVertexFittingNode.
Definition at line 509 of file TrigL2Vertex.cxx.
510{
513 const int nSize=3+3*pV->getTracks()->size();
515
517 {
519 for(j=0;j<nSize;j++) gain+=pV->m_Gk[i][j]*
m_D[0][j];
522 }
524 {
525 pV->getParametersVector()[
i]+=K[
i]*
m_resid[0];
526 for(j=i;j<nSize;j++)
527 {
528 pV->m_Gk[
i][j]-=K[
i]*
m_D[1][j];
529 pV->m_Gk[j][
i]=pV->m_Gk[
i][j];
530 }
531 }
532}
#define MAX_SIZE_VERT_COVM
◆ m_D
◆ m_resid
| double TrigVertexFittingNode::m_resid[2] {} |
|
protectedinherited |
◆ m_trackList
◆ m_V
| double TrigVertexFittingNode::m_V[2][2] {} |
|
protectedinherited |
◆ m_value
| double TrigVertexFitConstraint::m_value |
|
private |
The documentation for this class was generated from the following files: