1#include "VertexFit/KalmanKinematicFit.h"
4#include "VertexFit/HTrackParameter.h"
5#include "VertexFit/KinematicConstraints.h"
8const int KalmanKinematicFit::NTRKPAR = 4;
9const int KalmanKinematicFit::Resonance = 1;
10const int KalmanKinematicFit::TotalEnergy = 2;
11const int KalmanKinematicFit::TotalMomentum = 4;
12const int KalmanKinematicFit::Position = 8;
13const int KalmanKinematicFit::ThreeMomentum = 16;
14const int KalmanKinematicFit::FourMomentum = 32;
15const int KalmanKinematicFit::EqualMass = 64;
22 if ( m_pointer )
return m_pointer;
23 m_pointer =
new KalmanKinematicFit();
27KalmanKinematicFit::KalmanKinematicFit() { ; }
56 m_collideangle = 11e-3;
60 m_cpu = HepVector( 10, 0 );
61 m_virtual_wtrk.clear();
94 std::vector<int> tlis =
AddList(
n1,
n2, n3, n4, n5 );
100 std::vector<int> tlis =
AddList(
n1,
n2, n3, n4, n5, n6 );
105 int n5,
int n6,
int n7 ) {
106 std::vector<int> tlis =
AddList(
n1,
n2, n3, n4, n5, n6, n7 );
111 int n5,
int n6,
int n7,
int n8 ) {
112 std::vector<int> tlis =
AddList(
n1,
n2, n3, n4, n5, n6, n7, n8 );
117 int n5,
int n6,
int n7,
int n8,
int n9 ) {
118 std::vector<int> tlis =
AddList(
n1,
n2, n3, n4, n5, n6, n7, n8, n9 );
123 int n5,
int n6,
int n7,
int n8,
int n9,
int n10 ) {
124 std::vector<int> tlis =
AddList(
n1,
n2, n3, n4, n5, n6, n7, n8, n9, n10 );
129 int n5,
int n6,
int n7,
int n8,
int n9,
int n10,
131 std::vector<int> tlis =
AddList(
n1,
n2, n3, n4, n5, n6, n7, n8, n9, n10, n11 );
136 int n5,
int n6,
int n7,
int n8,
int n9,
int n10,
138 std::vector<int> tlis =
AddList(
n1,
n2, n3, n4, n5, n6, n7, n8, n9, n10, n11, n12 );
144 HepSymMatrix Vre = HepSymMatrix( 1, 0 );
146 m_kc.push_back( kc );
147 if ( (
unsigned int)number != m_kc.size() - 1 )
148 std::cout <<
"wrong kinematic constraints index" << std::endl;
177 std::vector<int> tlis =
AddList(
n1,
n2, n3, n4, n5 );
182 int n4,
int n5,
int n6 ) {
183 std::vector<int> tlis =
AddList(
n1,
n2, n3, n4, n5, n6 );
188 int n4,
int n5,
int n6,
int n7 ) {
189 std::vector<int> tlis =
AddList(
n1,
n2, n3, n4, n5, n6, n7 );
194 int n4,
int n5,
int n6,
int n7,
int n8 ) {
195 std::vector<int> tlis =
AddList(
n1,
n2, n3, n4, n5, n6, n7, n8 );
200 int n4,
int n5,
int n6,
int n7,
int n8,
int n9 ) {
201 std::vector<int> tlis =
AddList(
n1,
n2, n3, n4, n5, n6, n7, n8, n9 );
206 int n4,
int n5,
int n6,
int n7,
int n8,
int n9,
208 std::vector<int> tlis =
AddList(
n1,
n2, n3, n4, n5, n6, n7, n8, n9, n10 );
213 int n4,
int n5,
int n6,
int n7,
int n8,
int n9,
215 std::vector<int> tlis =
AddList(
n1,
n2, n3, n4, n5, n6, n7, n8, n9, n10, n11 );
220 int n4,
int n5,
int n6,
int n7,
int n8,
int n9,
221 int n10,
int n11,
int n12 ) {
222 std::vector<int> tlis =
AddList(
n1,
n2, n3, n4, n5, n6, n7, n8, n9, n10, n11, n12 );
229 m_kc.push_back( kc );
230 if ( (
unsigned int)number != m_kc.size() - 1 )
231 std::cout <<
"wrong kinematic constraints index" << std::endl;
260 std::vector<int> tlis =
AddList(
n1,
n2, n3, n4, n5 );
265 int n4,
int n5,
int n6 ) {
266 std::vector<int> tlis =
AddList(
n1,
n2, n3, n4, n5, n6 );
271 int n4,
int n5,
int n6,
int n7 ) {
272 std::vector<int> tlis =
AddList(
n1,
n2, n3, n4, n5, n6, n7 );
277 int n4,
int n5,
int n6,
int n7,
int n8 ) {
278 std::vector<int> tlis =
AddList(
n1,
n2, n3, n4, n5, n6, n7, n8 );
283 int n4,
int n5,
int n6,
int n7,
int n8,
int n9 ) {
284 std::vector<int> tlis =
AddList(
n1,
n2, n3, n4, n5, n6, n7, n8, n9 );
289 int n4,
int n5,
int n6,
int n7,
int n8,
int n9,
291 std::vector<int> tlis =
AddList(
n1,
n2, n3, n4, n5, n6, n7, n8, n9, n10 );
296 int n4,
int n5,
int n6,
int n7,
int n8,
int n9,
298 std::vector<int> tlis =
AddList(
n1,
n2, n3, n4, n5, n6, n7, n8, n9, n10, n11 );
303 int n4,
int n5,
int n6,
int n7,
int n8,
int n9,
304 int n10,
int n11,
int n12 ) {
305 std::vector<int> tlis =
AddList(
n1,
n2, n3, n4, n5, n6, n7, n8, n9, n10, n11, n12 );
312 m_kc.push_back( kc );
313 if ( (
unsigned int)number != m_kc.size() - 1 )
314 std::cout <<
"wrong kinematic constraints index" << std::endl;
321 std::vector<int> tlis2 ) {
323 HepSymMatrix Vne = HepSymMatrix( 1, 0 );
325 m_kc.push_back( kc );
326 if ( (
unsigned int)number != m_kc.size() - 1 )
327 std::cout <<
"wrong kinematic constraints index" << std::endl;
335 std::vector<int> tlis;
340 for (
int i = 0; i <
numberWTrack(); i++ ) { tlis.push_back( i ); }
342 m_kc.push_back( kc );
343 if ( (
unsigned int)number != m_kc.size() - 1 )
344 std::cout <<
"wrong kinematic constraints index" << std::endl;
353 std::vector<int> tlis;
357 for (
int i = 0; i <
numberWTrack(); i++ ) { tlis.push_back( i ); }
359 HepSymMatrix Vme = HepSymMatrix( 4, 0 );
360 Vme[0][0] = 2 * m_espread * m_espread *
sin( m_collideangle ) *
sin( m_collideangle );
361 Vme[0][3] = 2 * m_espread * m_espread *
sin( m_collideangle );
362 Vme[3][3] = 2 * m_espread * m_espread;
365 m_kc.push_back( kc );
366 if ( (
unsigned int)number != m_kc.size() - 1 )
367 std::cout <<
"wrong kinematic constraints index" << std::endl;
372 HepLorentzVector p4( 0.0, 0.0, 0.0,
etot );
373 std::vector<int> tlis;
377 for (
int i = 0; i <
numberWTrack(); i++ ) { tlis.push_back( i ); }
378 HepSymMatrix Vme = HepSymMatrix( 4, 0 );
379 Vme[3][3] = 2 * m_espread * m_espread;
381 m_kc.push_back( kc );
382 if ( (
unsigned int)number != m_kc.size() - 1 )
383 std::cout <<
"wrong kinematic constraints index" << std::endl;
386void KalmanKinematicFit::fit() {
396 HepSymMatrix AC( m_nc, 0 );
397 AC = m_C0.similarity( m_A );
399 m_cpu[1] += timer.CpuTime();
404 m_W = HepSymMatrix( m_nc, 0 );
405 m_W = ( m_Vm + m_C0.similarity( m_A ) ).inverse( ifail );
408 m_Dinv = m_D0inv + m_W.similarity( m_B.T() );
409 m_D = m_Dinv.inverse( ifailD );
411 m_cpu[2] += timer.CpuTime();
415 HepVector G( m_nc, 0 );
416 G = m_A * ( m_p0 -
m_p ) + m_B * ( m_q0 -
m_q ) + m_G;
418 m_KQ = HepMatrix(
numbertwo(), m_nc, 0 );
419 m_KQ = m_D * m_BT * m_W;
421 m_KP = HepMatrix(
numberone(), m_nc, 0 );
422 m_KP = m_C0 * m_AT * m_W - m_C0 * m_AT * m_W * m_B * m_KQ;
424 m_p = m_p0 - m_KP * G;
425 m_q = m_q0 - m_KQ * G;
427 m_cpu[4] += timer.CpuTime();
431 m_chi = ( m_W.similarity( G.T() ) - m_Dinv.similarity( (
m_q - m_q0 ).T() ) )[0][0];
433 m_cpu[3] += timer.CpuTime();
435 if ( m_dynamicerror == 1 ) gda();
438 m_cpu[6] += timer.CpuTime();
441void KalmanKinematicFit::upCovmtx() {
443 E = -m_C0 * m_A.T() * m_KQ.T();
444 m_C = m_C0 - m_W.similarity( ( m_A * m_C0 ).T() ) + m_Dinv.similarity( E );
447void KalmanKinematicFit::fit(
int n ) {
448 if ( m_chisq.size() == 0 )
450 for (
unsigned int i = 0; i < m_kc.size(); i++ ) m_chisq.push_back( 9999.0 );
453 KinematicConstraints kc;
458 HepSymMatrix
AC( m_nc, 0 );
459 AC = m_C0.similarity( m_A );
463 m_W = HepSymMatrix( m_nc, 0 );
464 m_W = ( m_Vm + m_C0.similarity( m_A ) ).inverse( ifail );
467 m_Dinv = m_D0inv + m_W.similarity( m_B.T() );
468 m_D = m_Dinv.inverse( ifailD );
471 HepVector G( m_nc, 0 );
472 G = m_A * ( m_p0 - m_p ) + m_B * ( m_q0 - m_q ) + m_G;
474 m_KQ = HepMatrix(
numbertwo(), m_nc, 0 );
475 m_KQ = m_D * m_BT * m_W;
477 m_KP = HepMatrix(
numberone(), m_nc, 0 );
478 m_KP = m_C0 * m_AT * m_W - m_C0 * m_AT * m_W * m_B * m_KQ;
480 m_p = m_p0 - m_KP * G;
481 m_q = m_q0 - m_KQ * G;
484 m_chisq[
n] = ( m_W.similarity( G.T() ) - m_Dinv.similarity( ( m_q - m_q0 ).T() ) )[0][0];
485 if ( m_dynamicerror == 1 ) gda();
498 m_D0inv = HepSymMatrix(
numbertwo(), 0 );
501 HepVector m_p_tmp = HepVector(
numberone(), 0 );
502 HepVector m_q_tmp = HepVector(
numbertwo(), 0 );
504 HepSymMatrix m_W_tmp;
506 HepSymMatrix m_Dinv_tmp;
516 HepVector w1( 4, 0 );
517 HepSymMatrix Ew1( 4, 0 );
518 for (
int j = 0; j < 3; j++ ) { w1[j] =
wTrackOrigin( i ).w()[j]; }
521 for (
int m = 0; m < 3; m++ )
525 setPOrigin( pa, w1 );
527 setCOrigin( pa, Ew1 );
531 setPOrigin( pa, (
wTrackOrigin( i ).plmp() ).sub( 1, 4 ) );
532 setPInfit( pa, (
wTrackOrigin( i ).plmp() ).sub( 1, 4 ) );
533 setCOrigin( pa, (
wTrackOrigin( i ).Vplm() ).sub( 1, 4 ) );
537 setQOrigin( pb, (
wTrackOrigin( i ).
w() ).sub( 1, NTRKPAR ) );
538 setQInfit( pb, (
wTrackOrigin( i ).
w() ).sub( 1, NTRKPAR ) );
539 HepSymMatrix Dinv( 4, 0 );
540 setDOriginInv( pb, Dinv );
544 setPOrigin( pa, (
wTrackOrigin( i ).plmp() ).sub( 3, 3 ) );
545 setPInfit( pa, (
wTrackOrigin( i ).plmp() ).sub( 3, 3 ) );
546 setCOrigin( pa, (
wTrackOrigin( i ).Vplm() ).sub( 3, 3 ) );
547 setQOrigin( pb, (
wTrackOrigin( i ).plmp() ).sub( 1, 2 ) );
548 setQInfit( pb, (
wTrackOrigin( i ).plmp() ).sub( 1, 2 ) );
549 setQOrigin( pb + 2, (
wTrackOrigin( i ).plmp() ).sub( 4, 4 ) );
550 setQInfit( pb + 2, (
wTrackOrigin( i ).plmp() ).sub( 4, 4 ) );
551 HepSymMatrix Dinv( 3, 0 );
552 setDOriginInv( pb, Dinv );
556 setPOrigin( pa, (
wTrackOrigin( i ).plmp() ).sub( 1, 2 ) );
557 setPInfit( pa, (
wTrackOrigin( i ).plmp() ).sub( 1, 2 ) );
558 setCOrigin( pa, (
wTrackOrigin( i ).Vplm() ).sub( 1, 2 ) );
559 setQOrigin( pb, (
wTrackOrigin( i ).plmp() ).sub( 3, 4 ) );
560 setQInfit( pb, (
wTrackOrigin( i ).plmp() ).sub( 3, 4 ) );
561 HepSymMatrix Dinv( 2, 0 );
562 setDOriginInv( pb, Dinv );
566 setPOrigin( pa, (
wTrackOrigin( i ).plmp() ).sub( 1, 3 ) );
567 setPInfit( pa, (
wTrackOrigin( i ).plmp() ).sub( 1, 3 ) );
568 setCOrigin( pa, (
wTrackOrigin( i ).Vplm() ).sub( 1, 3 ) );
569 setQOrigin( pb, (
wTrackOrigin( i ).plmp() ).sub( 4, 4 ) );
570 setQInfit( pb, (
wTrackOrigin( i ).plmp() ).sub( 4, 4 ) );
571 HepSymMatrix Dinv( 1, 0 );
572 setDOriginInv( pb, Dinv );
580 setCOrigin( pa, (
wTrackOrigin( i ).Ew() ).sub( 5, 7 ) );
581 setCOrigin( pa + 3, (
wTrackOrigin( i ).Ew() ).sub( 4, 4 ) );
582 HepVector beam( 3, 0 );
586 setQOrigin( pb, beam );
587 setQInfit( pb, beam );
588 HepSymMatrix Dinv( 3, 0 );
591 setDOriginInv( pb, Dinv );
595 HepVector w1( 4, 0 );
596 HepSymMatrix Ew1( 4, 0 );
597 for (
int j = 0; j < 3; j++ ) { w1[j] =
wTrackOrigin( i ).w()[j]; }
600 for (
int m = 0; m < 3; m++ )
604 setPOrigin( pa, w1 );
606 setCOrigin( pa, Ew1 );
616 std::vector<double>
chisq;
619 for (
int i = 0; i < m_kc.size(); i++ ) nc += m_kc[i].nc();
625 m_G = HepVector( nc, 0 );
626 m_Vm = HepSymMatrix( nc, 0 );
628 for (
unsigned int i = 0; i < m_kc.size(); i++ )
635 double tmp_chisq = 999;
637 for (
int it = 0; it < m_niter; it++ )
641 for (
unsigned int i = 0; i < m_kc.size(); i++ )
644 updateConstraints( kc );
647 m_cpu[0] += timer.CpuTime();
717 chisq.push_back( m_chi );
721 if ( fabs( delchi ) < m_chiter )
728 if ( !flag_break ) {
return okfit; }
729 if ( m_chi > m_chicut )
return okfit;
732 m_cpu[5] += timer.CpuTime();
739 if (
n < 0 || (
unsigned int)
n >= m_kc.size() )
return okfit;
747 m_D0inv = HepSymMatrix(
numbertwo(), 0 );
759 HepVector w1( 4, 0 );
760 HepSymMatrix Ew1( 4, 0 );
761 for (
int j = 0; j < 3; j++ ) { w1[j] =
wTrackOrigin( i ).w()[j]; }
764 for (
int m = 0; m < 3; m++ )
768 setPOrigin( pa, w1 );
770 setCOrigin( pa, Ew1 );
774 setPOrigin( pa, (
wTrackOrigin( i ).plmp() ).sub( 1, 4 ) );
775 setPInfit( pa, (
wTrackOrigin( i ).plmp() ).sub( 1, 4 ) );
776 setCOrigin( pa, (
wTrackOrigin( i ).Vplm() ).sub( 1, 4 ) );
780 setQOrigin( pb, (
wTrackOrigin( i ).
w() ).sub( 1, NTRKPAR ) );
781 setQInfit( pb, (
wTrackOrigin( i ).
w() ).sub( 1, NTRKPAR ) );
782 HepSymMatrix Dinv( 4, 0 );
783 setDOriginInv( pb, Dinv );
787 setPOrigin( pa, (
wTrackOrigin( i ).plmp() ).sub( 3, 3 ) );
788 setPInfit( pa, (
wTrackOrigin( i ).plmp() ).sub( 3, 3 ) );
789 setCOrigin( pa, (
wTrackOrigin( i ).Vplm() ).sub( 3, 3 ) );
792 HepSymMatrix Dinv( 3, 0 );
793 setDOriginInv( pb, Dinv );
797 setPOrigin( pa, (
wTrackOrigin( i ).plmp() ).sub( 1, 2 ) );
798 setPInfit( pa, (
wTrackOrigin( i ).plmp() ).sub( 1, 2 ) );
799 setCOrigin( pa, (
wTrackOrigin( i ).Vplm() ).sub( 1, 2 ) );
800 setQOrigin( pb, (
wTrackOrigin( i ).plmp() ).sub( 3, 4 ) );
801 setQInfit( pb, (
wTrackOrigin( i ).plmp() ).sub( 3, 4 ) );
802 HepSymMatrix Dinv( 2, 0 );
803 setDOriginInv( pb, Dinv );
807 setPOrigin( pa, (
wTrackOrigin( i ).plmp() ).sub( 1, 3 ) );
808 setPInfit( pa, (
wTrackOrigin( i ).plmp() ).sub( 1, 3 ) );
809 setCOrigin( pa, (
wTrackOrigin( i ).Vplm() ).sub( 1, 3 ) );
810 setQOrigin( pb, (
wTrackOrigin( i ).plmp() ).sub( 4, 4 ) );
811 setQInfit( pb, (
wTrackOrigin( i ).plmp() ).sub( 4, 4 ) );
812 HepSymMatrix Dinv( 1, 0 );
813 setDOriginInv( pb, Dinv );
821 setCOrigin( pa, (
wTrackOrigin( i ).Ew() ).sub( 5, 7 ) );
822 setCOrigin( pa + 3, (
wTrackOrigin( i ).Ew() ).sub( 4, 4 ) );
823 HepVector beam( 3, 0 );
827 setQOrigin( pb, beam );
828 setQInfit( pb, beam );
829 HepSymMatrix Dinv( 3, 0 );
833 setDOriginInv( pb, Dinv );
838 HepVector w1( 4, 0 );
839 HepSymMatrix Ew1( 4, 0 );
840 for (
int j = 0; j < 3; j++ ) { w1[j] =
wTrackOrigin( i ).w()[j]; }
843 for (
int m = 0; m < 3; m++ )
847 setPOrigin( pa, w1 );
849 setCOrigin( pa, Ew1 );
859 std::vector<double>
chisq;
869 m_G = HepVector( nc, 0 );
870 m_Vm = HepSymMatrix( nc, 0 );
875 for (
int it = 0; it < m_niter; it++ )
879 updateConstraints( kc );
882 chisq.push_back( m_chisq[
n] );
888 if ( fabs( delchi ) < m_chiter )
break;
891 if ( m_chisq[
n] >= m_chicut ) {
return okfit; }
903 int ntrk = ( kc.
Ltrk() ).size();
906 HepSymMatrix ew1( 7, 0 );
907 HepSymMatrix ew2( 7, 0 );
908 HepVector w4( 4, 0 );
909 HepSymMatrix ew4( 4, 0 );
910 HepMatrix dwdp( 4, 4, 0 );
915 for (
int i = 0; i < ntrk; i++ )
917 int itk = ( kc.
Ltrk() )[i];
919 w4 = w4 + dwdp * pInfit( itk );
923 for (
int j2 = 0; j2 < ntrk; j2++ )
925 I[0][0 + j2 * 4] = 1;
926 I[1][1 + j2 * 4] = 1;
927 I[2][2 + j2 * 4] = 1;
928 I[3][3 + j2 * 4] = 1;
930 ew4 = m_C.similarity(
I );
931 HepMatrix J( 7, 4, 0 );
936 double pt = sqrt( px * px + py * py );
937 double p0 = sqrt( px * px + py * py + pz * pz );
938 double m = sqrt( e * e - p0 * p0 );
940 J[0][1] = -( pz * px * pt ) / ( p0 * p0 );
941 J[0][2] = -m * px / ( p0 * p0 );
942 J[0][3] = e * px / ( p0 * p0 );
944 J[1][1] = -( pz * py * pt ) / ( p0 * p0 );
945 J[1][2] = -m * py / ( p0 * p0 );
946 J[1][3] = e * py / ( p0 * p0 );
948 J[2][1] = pt * pt * pt / ( p0 * p0 );
949 J[2][2] = -m * pz / ( p0 * p0 );
950 J[2][3] = e * pz / ( p0 * p0 );
955 ew1 = ew4.similarity( J );
956 ew2[0][0] = ew1[0][0];
957 ew2[1][1] = ew1[1][1];
958 ew2[2][2] = ew1[2][2];
959 ew2[3][3] = ew1[3][3];
969 m_virtual_wtrk.push_back( vwtrk );
972void KalmanKinematicFit::gda() {
987 HepSymMatrix Ew( NTRKPAR, 0 );
988 HepLorentzVector
p1 = p4Infit( i );
989 HepLorentzVector
p2 = p4Origin( i );
990 double eorigin = pOrigin( i )[3];
991 HepMatrix dwda1( NTRKPAR, 3, 0 );
993 dwda1[1][1] = -(
p2.e() *
p2.e() ) / (
p2.px() *
p2.px() +
p2.py() *
p2.py() );
996 HepSymMatrix emcmea1( 3, 0 );
1002 ( 1 / ( 1 -
p2.cosTheta() *
p2.cosTheta() ) ) *
1003 ( 1 / ( 1 -
p2.cosTheta() *
p2.cosTheta() ) );
1016 Ew[0][0] = emcmea1[0][0];
1017 Ew[1][1] = emcmea1[1][1];
1018 Ew[3][3] = emcmea1[2][2];
1020 if (
ptype == 6 ) setCOrigin( pa + 3, Ew.sub( 4, 4 ) );
1021 else setCOrigin( pa, Ew );
1034 HepVector W( 7, 0 );
1035 HepSymMatrix Ew( 7, 0 );
1036 HepVector W1( 7, 0 );
1037 HepSymMatrix Ew1( 7, 0 );
1041 for (
int i = 0; i < 4; i++ ) { W[i] = pInfit(
n )[i]; }
1042 for (
int j = 0; j < 4; j++ )
1044 for (
int k = 0; k < 4; k++ ) { Ew[j][k] =
getCInfit(
n )[j][k]; }
1047 double px = p4Infit(
n ).px();
1048 double py = p4Infit(
n ).py();
1049 double pz = p4Infit(
n ).pz();
1050 double m = p4Infit(
n ).m();
1051 double e = p4Infit(
n ).e();
1052 HepMatrix J( 7, 7, 0 );
1063 Ew1 = Ew.similarity( J );
1071 HepVector
a0 = horigin.
hel();
1072 HepVector a1 = hinfit.
hel();
1073 HepSymMatrix v0 = horigin.
eHel();
1074 HepSymMatrix v1 = hinfit.
eHel();
1075 HepVector
pull( 9, 0 );
1076 for (
int k = 0; k < 5; k++ )
1077 {
pull[k] = (
a0[k] - a1[k] ) / sqrt(
abs( v0[k][k] - v1[k][k] ) ); }
1078 for (
int l = 5; l < 9; l++ )
1088 HepVector
a0( 4, 0 );
1089 HepVector a1( 4, 0 );
1090 a0 = m_p0.sub( pa, pa + 3 );
1091 a1 = m_p.sub( pa, pa + 3 );
1094 HepVector
pull( 3, 0 );
1095 for (
int k = 0; k < 2; k++ )
1096 {
pull[k] = (
a0[k] - a1[k] ) / sqrt( v0[k][k] - v1[k][k] ); }
1097 pull[2] = (
a0[3] - a1[3] ) / sqrt( v0[3][3] - v1[3][3] );
1114 HepLorentzVector p0 = p4Origin(
n );
1115 HepLorentzVector
p1 = p4Infit(
n );
1116 HepVector
a0( 2, 0 );
1117 HepVector a1( 2, 0 );
1118 a0[0] = p4Origin(
n ).phi();
1119 a1[0] = p4Infit(
n ).phi();
1120 a0[1] = p4Origin(
n ).pz() / p4Origin(
n ).perp();
1121 a1[1] = p4Infit(
n ).pz() / p4Infit(
n ).perp();
1122 HepMatrix Jacobi( 2, 4, 0 );
1123 Jacobi[0][0] = -p4Infit(
n ).py() / p4Infit(
n ).perp2();
1124 Jacobi[0][1] = p4Infit(
n ).px() / p4Infit(
n ).perp2();
1125 Jacobi[1][0] = -( p4Infit(
n ).px() / p4Infit(
n ).perp() ) *
1126 ( p4Infit(
n ).pz() / p4Infit(
n ).perp2() );
1127 Jacobi[1][1] = -( p4Infit(
n ).py() / p4Infit(
n ).perp() ) *
1128 ( p4Infit(
n ).pz() / p4Infit(
n ).perp2() );
1129 Jacobi[1][2] = 1 / p4Infit(
n ).perp();
1130 HepSymMatrix v1 =
getCInfit(
n ).similarity( Jacobi );
1132 HepVector
pull( 2, 0 );
1133 for (
int k = 0; k < 2; k++ )
1134 {
pull[k] = (
a0[k] - a1[k] ) / sqrt( v0[k][k] - v1[k][k] ); }
1140 std::cerr << __FILE__ <<
":" << __LINE__ <<
" Should not reach here!" << std::endl;
1144HepVector KalmanKinematicFit::pInfit(
int n )
const {
1151 double mass =
m_p.sub( pa + 3, pa + 3 )[0];
1152 HepVector p4( 4, 0 );
1153 p4[0] =
m_p.sub( pa, pa )[0];
1154 p4[1] =
m_p.sub( pa + 1, pa + 1 )[0];
1155 p4[2] =
m_p.sub( pa + 2, pa + 2 )[0];
1156 p4[3] = sqrt( p4[0] * p4[0] + p4[1] * p4[1] + p4[2] * p4[2] +
mass *
mass );
1161 double phi = m_p.sub( pa, pa )[0];
1162 double lambda = m_p.sub( pa + 1, pa + 1 )[0];
1163 double mass = m_p.sub( pa + 2, pa + 2 )[0];
1164 double E = m_p.sub( pa + 3, pa + 3 )[0];
1165 double p0 = sqrt( E * E -
mass *
mass );
1166 HepVector p4( 4, 0 );
1167 p4[0] = p0 *
cos( phi ) / sqrt( 1 + lambda * lambda );
1168 p4[1] = p0 *
sin( phi ) / sqrt( 1 + lambda * lambda );
1169 p4[2] = p0 * lambda / sqrt( 1 + lambda * lambda );
1170 p4[3] = sqrt( p0 * p0 +
mass *
mass );
1175 return m_q.sub( pb, pb + 3 );
1179 double mass = ( m_p.sub( pa, pa ) )[0];
1180 double phi = m_q.sub( pb, pb )[0];
1181 double lambda = m_q.sub( pb + 1, pb + 1 )[0];
1182 double E = m_q.sub( pb + 2, pb + 2 )[0];
1183 double p0 = sqrt( E * E -
mass *
mass );
1184 HepVector p4( 4, 0 );
1185 p4[0] = p0 *
cos( phi ) / sqrt( 1 + lambda * lambda );
1186 p4[1] = p0 *
sin( phi ) / sqrt( 1 + lambda * lambda );
1187 p4[2] = p0 * lambda / sqrt( 1 + lambda * lambda );
1188 p4[3] = sqrt( p0 * p0 +
mass *
mass );
1193 double phi = m_p.sub( pa, pa )[0];
1194 double lambda = m_p.sub( pa + 1, pa + 1 )[0];
1195 double mass = m_q.sub( pb, pb )[0];
1196 double E = m_q.sub( pb + 1, pb + 1 )[0];
1197 double p0 = sqrt( E * E -
mass *
mass );
1198 HepVector p4( 4, 0 );
1199 p4[0] = p0 *
cos( phi ) / sqrt( 1 + lambda * lambda );
1200 p4[1] = p0 *
sin( phi ) / sqrt( 1 + lambda * lambda );
1201 p4[2] = p0 * lambda / sqrt( 1 + lambda * lambda );
1202 p4[3] = sqrt( p0 * p0 +
mass *
mass );
1207 double phi = m_p.sub( pa, pa )[0];
1208 double lambda = m_p.sub( pa + 1, pa + 1 )[0];
1209 double mass = m_p.sub( pa + 2, pa + 2 )[0];
1210 double p0 = m_q.sub( pb, pb )[0];
1211 HepVector p4( 4, 0 );
1212 p4[0] = p0 *
cos( phi ) / sqrt( 1 + lambda * lambda );
1213 p4[1] = p0 *
sin( phi ) / sqrt( 1 + lambda * lambda );
1214 p4[2] = p0 * lambda / sqrt( 1 + lambda * lambda );
1215 p4[3] = sqrt( p0 * p0 +
mass *
mass );
1220 double x = m_p.sub( pa, pa )[0] - m_q.sub( pb, pb )[0];
1221 double y = m_p.sub( pa + 1, pa + 1 )[0] - m_q.sub( pb + 1, pb + 1 )[0];
1222 double z = m_p.sub( pa + 2, pa + 2 )[0] - m_q.sub( pb + 2, pb + 2 )[0];
1223 double p0 = m_p.sub( pa + 3, pa + 3 )[0];
1224 double R = sqrt(
x *
x + y * y + z * z );
1225 HepVector p4( 4, 0 );
1234 double mass = m_p.sub( pa + 3, pa + 3 )[0];
1235 HepVector p4( 4, 0 );
1236 p4[0] = m_p.sub( pa, pa )[0];
1237 p4[1] = m_p.sub( pa + 1, pa + 1 )[0];
1238 p4[2] = m_p.sub( pa + 2, pa + 2 )[0];
1239 p4[3] = sqrt( p4[0] * p4[0] + p4[1] * p4[1] + p4[2] * p4[2] +
mass *
mass );
1245 std::cerr << __FILE__ <<
":" << __LINE__ <<
" Should not reach here!" << std::endl;
1249HepVector KalmanKinematicFit::pOrigin(
int n )
const {
1256 double mass = m_p0.sub( pa + 3, pa + 3 )[0];
1257 HepVector p4( 4, 0 );
1258 p4[0] = m_p0.sub( pa, pa )[0];
1259 p4[1] = m_p0.sub( pa + 1, pa + 1 )[0];
1260 p4[2] = m_p0.sub( pa + 2, pa + 2 )[0];
1261 p4[3] = sqrt( p4[0] * p4[0] + p4[1] * p4[1] + p4[2] * p4[2] +
mass *
mass );
1266 double phi = m_p0.sub( pa, pa )[0];
1267 double lambda = m_p0.sub( pa + 1, pa + 1 )[0];
1268 double mass = m_p0.sub( pa + 2, pa + 2 )[0];
1269 double E = m_p0.sub( pa + 3, pa + 3 )[0];
1270 double p0 = sqrt( E * E -
mass *
mass );
1271 HepVector p4( 4, 0 );
1272 p4[0] = p0 *
cos( phi ) / sqrt( 1 + lambda * lambda );
1273 p4[1] = p0 *
sin( phi ) / sqrt( 1 + lambda * lambda );
1274 p4[2] = p0 * lambda / sqrt( 1 + lambda * lambda );
1275 p4[3] = sqrt( p0 * p0 +
mass *
mass );
1280 return m_q0.sub( pb, pb + 3 );
1284 double mass = ( m_p0.sub( pa, pa ) )[0];
1285 double phi = m_q0.sub( pb, pb )[0];
1286 double lambda = m_q0.sub( pb + 1, pb + 1 )[0];
1287 double E = m_q0.sub( pb + 2, pb + 2 )[0];
1288 double p0 = sqrt( E * E -
mass *
mass );
1289 HepVector p4( 4, 0 );
1290 p4[0] = p0 *
cos( phi ) / sqrt( 1 + lambda * lambda );
1291 p4[1] = p0 *
sin( phi ) / sqrt( 1 + lambda * lambda );
1292 p4[2] = p0 * lambda / sqrt( 1 + lambda * lambda );
1293 p4[3] = sqrt( p0 * p0 +
mass *
mass );
1298 double phi = m_p0.sub( pa, pa )[0];
1299 double lambda = m_p0.sub( pa + 1, pa + 1 )[0];
1300 double mass = m_q0.sub( pb, pb )[0];
1301 double E = m_q0.sub( pb + 1, pb + 1 )[0];
1302 double p0 = sqrt( E * E -
mass *
mass );
1303 HepVector p4( 4, 0 );
1304 p4[0] = p0 *
cos( phi ) / sqrt( 1 + lambda * lambda );
1305 p4[1] = p0 *
sin( phi ) / sqrt( 1 + lambda * lambda );
1306 p4[2] = p0 * lambda / sqrt( 1 + lambda * lambda );
1307 p4[3] = sqrt( p0 * p0 +
mass *
mass );
1312 double phi = m_p0.sub( pa, pa )[0];
1313 double lambda = m_p0.sub( pa + 1, pa + 1 )[0];
1314 double mass = m_p0.sub( pa + 2, pa + 2 )[0];
1315 double p0 = m_q0.sub( pb, pb )[0];
1316 HepVector p4( 4, 0 );
1317 p4[0] = p0 *
cos( phi ) / sqrt( 1 + lambda * lambda );
1318 p4[1] = p0 *
sin( phi ) / sqrt( 1 + lambda * lambda );
1319 p4[2] = p0 * lambda / sqrt( 1 + lambda * lambda );
1320 p4[3] = sqrt( p0 * p0 +
mass *
mass );
1325 double x = m_p0.sub( pa, pa )[0] - m_q0.sub( pb, pb )[0];
1326 double y = m_p0.sub( pa + 1, pa + 1 )[0] - m_q0.sub( pb + 1, pb + 1 )[0];
1327 double z = m_p0.sub( pa + 2, pa + 2 )[0] - m_q0.sub( pb + 2, pb + 2 )[0];
1328 double p0 = m_p0.sub( pa + 3, pa + 3 )[0];
1329 double R = sqrt(
x *
x + y * y + z * z );
1330 HepVector p4( 4, 0 );
1339 double mass = m_p0.sub( pa + 3, pa + 3 )[0];
1340 HepVector p4( 4, 0 );
1341 p4[0] = m_p0.sub( pa, pa )[0];
1342 p4[1] = m_p0.sub( pa + 1, pa + 1 )[0];
1343 p4[2] = m_p0.sub( pa + 2, pa + 2 )[0];
1344 p4[3] = sqrt( p4[0] * p4[0] + p4[1] * p4[1] + p4[2] * p4[2] +
mass *
mass );
1350 std::cerr << __FILE__ <<
":" << __LINE__ <<
" Should not reach here!" << std::endl;
1361 return m_C0.sub( pa, pa + NTRKPAR - 1 );
1365 return m_C0.sub( pa, pa + NTRKPAR - 1 );
1369 return m_C0.sub( pa, pa );
1373 return m_C0.sub( pa, pa + 1 );
1377 return m_C0.sub( pa, pa + 2 );
1381 return m_C0.sub( pa, pa + NTRKPAR - 1 );
1386 std::cerr << __FILE__ <<
":" << __LINE__ <<
" Should not reach here!" << std::endl;
1397 return m_C.sub( pa, pa + NTRKPAR - 1 );
1401 return m_C.sub( pa, pa + NTRKPAR - 1 );
1405 return m_C.sub( pa, pa );
1409 return m_C.sub( pa, pa + 1 );
1413 return m_C.sub( pa, pa + 2 );
1417 return m_C.sub( pa, pa + NTRKPAR - 1 );
1422 std::cerr << __FILE__ <<
":" << __LINE__ <<
" Should not reach here!" << std::endl;
1436 double mres = kc.
mres();
1437 HepLorentzVector pmis;
1438 for (
unsigned int j = 0; j < ( kc.
Ltrk() ).size(); j++ )
1440 int n = ( kc.
Ltrk() )[j];
1441 pmis = pmis + p4Infit(
n );
1443 for (
unsigned int j = 0; j < ( kc.
Ltrk() ).size(); j++ )
1445 int n = ( kc.
Ltrk() )[j];
1446 double lambda = p4Infit(
n ).pz() / p4Infit(
n ).perp();
1447 double a1 = 1 + lambda * lambda;
1454 HepMatrix ta( 1, NTRKPAR, 0 );
1455 ta[0][0] = -2 * pmis.px() + 2 * pmis.e() * p4Infit(
n ).px() / p4Infit(
n ).e();
1456 ta[0][1] = -2 * pmis.py() + 2 * pmis.e() * p4Infit(
n ).py() / p4Infit(
n ).e();
1457 ta[0][2] = -2 * pmis.pz() + 2 * pmis.e() * p4Infit(
n ).pz() / p4Infit(
n ).e();
1458 ta[0][3] = 2 * pmis.e() * p4Infit(
n ).m() / p4Infit(
n ).e();
1459 setA( m_nc, pa, ta );
1460 setAT( pa, m_nc, ta.T() );
1464 HepMatrix ta( 1, NTRKPAR, 0 );
1465 double a1 = lambda * lambda + 1;
1466 ta[0][0] = 2 * pmis.px() * p4Infit(
n ).py() - 2 * pmis.py() * p4Infit(
n ).px();
1467 ta[0][1] = 2 * pmis.px() * p4Infit(
n ).px() * lambda / sqrt( a1 ) +
1468 2 * pmis.py() * ( p4Infit(
n ) ).py() * lambda / sqrt( a1 ) -
1469 2 * pmis.pz() * ( p4Infit(
n ) ).pz() / ( sqrt( a1 ) * lambda );
1470 ta[0][2] = 2 * pmis.px() * ( p4Infit(
n ) ).px() * p4Infit(
n ).m() /
1471 ( ( p4Infit(
n ) ).rho() * p4Infit(
n ).rho() ) +
1472 2 * pmis.py() * ( p4Infit(
n ) ).py() * p4Infit(
n ).m() /
1473 ( ( p4Infit(
n ) ).rho() * p4Infit(
n ).rho() ) +
1474 2 * pmis.pz() * ( p4Infit(
n ) ).pz() * p4Infit(
n ).m() /
1475 ( ( p4Infit(
n ) ).rho() * p4Infit(
n ).rho() );
1476 ta[0][3] = 2 * pmis.e() -
1477 2 * pmis.px() * ( p4Infit(
n ) ).px() * p4Infit(
n ).e() /
1478 ( ( p4Infit(
n ) ).rho() * p4Infit(
n ).rho() ) -
1479 2 * pmis.py() * ( p4Infit(
n ) ).py() * p4Infit(
n ).e() /
1480 ( ( p4Infit(
n ) ).rho() * p4Infit(
n ).rho() ) -
1481 2 * pmis.pz() * ( p4Infit(
n ) ).pz() * p4Infit(
n ).e() /
1482 ( ( p4Infit(
n ) ).rho() * p4Infit(
n ).rho() );
1483 setA( m_nc, pa, ta );
1484 setAT( pa, m_nc, ta.T() );
1488 HepMatrix tb( 1, 4, 0 );
1489 tb[0][0] = -2 * pmis.px();
1490 tb[0][1] = -2 * pmis.py();
1491 tb[0][2] = -2 * pmis.pz();
1492 tb[0][3] = 2 * pmis.e();
1493 setB( m_nc, pb, tb );
1494 setBT( pb, m_nc, tb.T() );
1498 HepMatrix ta( 1, 1, 0 );
1499 double a1 = lambda * lambda + 1;
1500 ta[0][0] = 2 * pmis.px() * ( p4Infit(
n ) ).px() * p4Infit(
n ).m() /
1501 ( ( p4Infit(
n ) ).rho() * p4Infit(
n ).rho() ) +
1502 2 * pmis.py() * ( p4Infit(
n ) ).py() * p4Infit(
n ).m() /
1503 ( ( p4Infit(
n ) ).rho() * p4Infit(
n ).rho() ) +
1504 2 * pmis.pz() * ( p4Infit(
n ) ).pz() * p4Infit(
n ).m() /
1505 ( ( p4Infit(
n ) ).rho() * p4Infit(
n ).rho() );
1506 setA( m_nc, pa, ta );
1507 setAT( pa, m_nc, ta.T() );
1508 HepMatrix tb( 1, 3, 0 );
1509 tb[0][0] = 2 * pmis.px() * p4Infit(
n ).py() - 2 * pmis.py() * p4Infit(
n ).px();
1510 tb[0][1] = 2 * pmis.px() * p4Infit(
n ).px() * lambda / sqrt( a1 ) +
1511 2 * pmis.py() * ( p4Infit(
n ) ).py() * lambda / sqrt( a1 ) -
1512 2 * pmis.pz() * ( p4Infit(
n ) ).pz() / ( sqrt( a1 ) * lambda );
1513 tb[0][2] = 2 * pmis.e() -
1514 2 * pmis.px() * ( p4Infit(
n ) ).px() * p4Infit(
n ).e() /
1515 ( ( p4Infit(
n ) ).rho() * p4Infit(
n ).rho() ) -
1516 2 * pmis.py() * ( p4Infit(
n ) ).py() * p4Infit(
n ).e() /
1517 ( ( p4Infit(
n ) ).rho() * p4Infit(
n ).rho() ) -
1518 2 * pmis.pz() * ( p4Infit(
n ) ).pz() * p4Infit(
n ).e() /
1519 ( ( p4Infit(
n ) ).rho() * p4Infit(
n ).rho() );
1520 setB( m_nc, pb, tb );
1521 setBT( pb, m_nc, tb.T() );
1525 HepMatrix ta( 1, 2, 0 );
1526 double a1 = lambda * lambda + 1;
1527 ta[0][0] = 2 * pmis.px() * p4Infit(
n ).py() - 2 * pmis.py() * p4Infit(
n ).px();
1528 ta[0][1] = 2 * pmis.px() * p4Infit(
n ).px() * lambda / sqrt( a1 ) +
1529 2 * pmis.py() * ( p4Infit(
n ) ).py() * lambda / sqrt( a1 ) -
1530 2 * pmis.pz() * ( p4Infit(
n ) ).pz() / ( sqrt( a1 ) * lambda );
1531 setA( m_nc, pa, ta );
1532 setAT( pa, m_nc, ta.T() );
1534 HepMatrix tb( 1, 2, 0 );
1535 tb[0][0] = 2 * pmis.px() * ( p4Infit(
n ) ).px() * p4Infit(
n ).m() /
1536 ( ( p4Infit(
n ) ).rho() * p4Infit(
n ).rho() ) +
1537 2 * pmis.py() * ( p4Infit(
n ) ).py() * p4Infit(
n ).m() /
1538 ( ( p4Infit(
n ) ).rho() * p4Infit(
n ).rho() ) +
1539 2 * pmis.pz() * ( p4Infit(
n ) ).pz() * p4Infit(
n ).m() /
1540 ( ( p4Infit(
n ) ).rho() * p4Infit(
n ).rho() );
1541 tb[0][1] = 2 * pmis.e() -
1542 2 * pmis.px() * ( p4Infit(
n ) ).px() * p4Infit(
n ).e() /
1543 ( ( p4Infit(
n ) ).rho() * p4Infit(
n ).rho() ) -
1544 2 * pmis.py() * ( p4Infit(
n ) ).py() * p4Infit(
n ).e() /
1545 ( ( p4Infit(
n ) ).rho() * p4Infit(
n ).rho() ) -
1546 2 * pmis.pz() * ( p4Infit(
n ) ).pz() * p4Infit(
n ).e() /
1547 ( ( p4Infit(
n ) ).rho() * p4Infit(
n ).rho() );
1548 setB( m_nc, pb, tb );
1549 setBT( pb, m_nc, tb.T() );
1553 HepMatrix ta( 1, 3, 0 );
1554 ta[0][0] = 2 * pmis.px() * p4Infit(
n ).py() - 2 * pmis.py() * p4Infit(
n ).px();
1555 ta[0][1] = 2 * pmis.px() * p4Infit(
n ).px() * lambda / sqrt( a1 ) +
1556 2 * pmis.py() * ( p4Infit(
n ) ).py() * lambda / sqrt( a1 ) -
1557 2 * pmis.pz() * ( p4Infit(
n ) ).pz() / ( sqrt( a1 ) * lambda );
1558 ta[0][2] = 2 * pmis.e() * ( p4Infit(
n ) ).m() / ( p4Infit(
n ) ).e();
1559 setA( m_nc, pa, ta );
1560 setAT( pa, m_nc, ta.T() );
1561 HepMatrix tb( 1, 1, 0 );
1562 tb[0][0] = 2 * pmis.e() * ( p4Infit(
n ) ).rho() / ( p4Infit(
n ) ).e() -
1563 2 * pmis.px() * ( p4Infit(
n ) ).px() / ( p4Infit(
n ) ).rho() -
1564 2 * pmis.py() * ( p4Infit(
n ) ).py() / ( p4Infit(
n ) ).rho() -
1565 2 * pmis.pz() * ( p4Infit(
n ) ).pz() / ( p4Infit(
n ) ).rho();
1566 setB( m_nc, pb, tb );
1567 setBT( pb, m_nc, tb.T() );
1571 HepMatrix ta( 1, NTRKPAR, 0 );
1572 ta[0][0] = -2 * pmis.px() + 2 * pmis.e() * p4Infit(
n ).px() / p4Infit(
n ).e();
1573 ta[0][1] = -2 * pmis.py() + 2 * pmis.e() * p4Infit(
n ).py() / p4Infit(
n ).e();
1574 ta[0][2] = -2 * pmis.pz() + 2 * pmis.e() * p4Infit(
n ).pz() / p4Infit(
n ).e();
1575 ta[0][3] = 2 * pmis.e() * p4Infit(
n ).m() / p4Infit(
n ).e();
1576 setA( m_nc, pa, ta );
1577 setAT( pa, m_nc, ta.T() );
1583 HepVector
dc( 1, 0 );
1584 dc[0] = pmis.m2() - mres * mres;
1595 HepLorentzVector pmis;
1596 for (
unsigned int j = 0; j < ( kc.
Ltrk() ).size(); j++ )
1598 int n = ( kc.
Ltrk() )[j];
1599 pmis = pmis + p4Infit(
n );
1602 for (
unsigned int j = 0; j < ( kc.
Ltrk() ).size(); j++ )
1604 int n = ( kc.
Ltrk() )[j];
1611 HepMatrix ta( 1, NTRKPAR, 0 );
1612 ta[0][0] = p4Infit(
n ).px() / p4Infit(
n ).e();
1613 ta[0][1] = p4Infit(
n ).py() / p4Infit(
n ).e();
1614 ta[0][2] = p4Infit(
n ).pz() / p4Infit(
n ).e();
1615 ta[0][3] = p4Infit(
n ).m() / p4Infit(
n ).e();
1616 setA( m_nc, pa, ta );
1617 setAT( pa, m_nc, ta.T() );
1621 HepMatrix ta( 1, NTRKPAR, 0 );
1623 setA( m_nc, pa, ta );
1624 setAT( pa, m_nc, ta.T() );
1628 HepMatrix tb( 1, 4, 0 );
1630 setA( m_nc, pb, tb );
1631 setAT( pb, m_nc, tb.T() );
1635 HepMatrix ta( 1, 1, 0 );
1636 ta[0][0] = p4Infit(
n ).m() / p4Infit(
n ).e();
1637 setA( m_nc, pa, ta );
1638 setAT( pa, m_nc, ta.T() );
1640 HepMatrix tb( 1, 3, 0 );
1641 setB( m_nc, pb, tb );
1642 setBT( pb, m_nc, tb.T() );
1646 HepMatrix ta( 1, 2, 0 );
1647 setA( m_nc, pa, ta );
1648 setAT( pa, m_nc, ta.T() );
1650 HepMatrix tb( 1, 2, 0 );
1655 setB( m_nc, pb, tb );
1656 setBT( pb, m_nc, tb.T() );
1660 HepMatrix ta( 1, 3, 0 );
1661 ta[0][2] = p4Infit(
n ).m() / p4Infit(
n ).e();
1662 setA( m_nc, pa, ta );
1663 setAT( pa, m_nc, ta.T() );
1665 HepMatrix tb( 1, 1, 0 );
1666 tb[0][0] = p4Infit(
n ).rho() / p4Infit(
n ).e();
1667 setB( m_nc, pb, tb );
1668 setBT( pb, m_nc, tb.T() );
1672 HepMatrix ta( 1, NTRKPAR, 0 );
1673 ta[0][0] = p4Infit(
n ).px() / p4Infit(
n ).e();
1674 ta[0][1] = p4Infit(
n ).py() / p4Infit(
n ).e();
1675 ta[0][2] = p4Infit(
n ).pz() / p4Infit(
n ).e();
1676 ta[0][3] = p4Infit(
n ).m() / p4Infit(
n ).e();
1677 setA( m_nc, pa, ta );
1678 setAT( pa, m_nc, ta.T() );
1684 HepVector
dc( 1, 0 );
1690 case TotalMomentum: {
1694 double ptot = kc.
ptot();
1695 HepLorentzVector pmis;
1696 for (
unsigned int j = 0; j < ( kc.
Ltrk() ).size(); j++ )
1698 int n = ( kc.
Ltrk() )[j];
1699 pmis = pmis + p4Infit(
n );
1702 for (
unsigned int j = 0; j < ( kc.
Ltrk() ).size(); j++ )
1704 int n = ( kc.
Ltrk() )[j];
1708 double lambda = p4Infit(
n ).pz() / p4Infit(
n ).perp();
1712 HepMatrix ta( 1, NTRKPAR, 0 );
1713 ta[0][0] = pmis.px() / pmis.rho();
1714 ta[0][1] = pmis.py() / pmis.rho();
1715 ta[0][2] = pmis.pz() / pmis.rho();
1716 setA( m_nc, pa, ta );
1717 setAT( pa, m_nc, ta.T() );
1721 HepMatrix ta( 1, NTRKPAR, 0 );
1722 ta[0][0] = -( pmis.px() / pmis.rho() ) * p4Infit(
n ).py() +
1723 ( pmis.px() / pmis.rho() ) * p4Infit(
n ).px();
1724 ta[0][1] = -( pmis.px() / pmis.rho() ) * p4Infit(
n ).px() *
1725 ( lambda / ( 1 + lambda * lambda ) ) -
1726 ( pmis.py() / pmis.rho() ) * p4Infit(
n ).py() *
1727 ( lambda / ( 1 + lambda * lambda ) ) +
1728 ( pmis.pz() / pmis.rho() ) * p4Infit(
n ).pz() *
1729 ( 1 / ( lambda * ( 1 + lambda * lambda ) ) );
1730 ta[0][2] = -( ( pmis.px() / pmis.rho() ) * p4Infit(
n ).m() /
1731 ( p4Infit(
n ).rho() * p4Infit(
n ).rho() ) ) *
1732 ( p4Infit(
n ).px() + p4Infit(
n ).py() + p4Infit(
n ).pz() );
1733 ta[0][3] = ( ( pmis.px() / pmis.rho() ) * p4Infit(
n ).e() /
1734 ( p4Infit(
n ).rho() * p4Infit(
n ).rho() ) ) *
1735 ( p4Infit(
n ).px() + p4Infit(
n ).py() + p4Infit(
n ).pz() );
1737 setA( m_nc, pa, ta );
1738 setAT( pa, m_nc, ta.T() );
1742 HepMatrix tb( 1, 4, 0 );
1743 tb[0][0] = pmis.px() / pmis.rho();
1744 tb[0][1] = pmis.py() / pmis.rho();
1745 tb[0][2] = pmis.pz() / pmis.rho();
1746 setB( m_nc, pb, tb );
1747 setBT( pb, m_nc, tb.T() );
1751 HepMatrix ta( 1, 1, 0 );
1752 setA( m_nc, pa, ta );
1753 setAT( pa, m_nc, ta.T() );
1754 HepMatrix tb( 1, 3, 0 );
1755 tb[0][0] = pmis.px() / pmis.rho();
1756 tb[0][1] = pmis.py() / pmis.rho();
1757 tb[0][2] = pmis.pz() / pmis.rho();
1758 setB( m_nc, pb, tb );
1759 setBT( pb, m_nc, tb.T() );
1763 HepMatrix ta( 1, 2, 0 );
1764 ta[0][0] = -( pmis.px() / pmis.rho() ) * p4Infit(
n ).py() +
1765 ( pmis.px() / pmis.rho() ) * p4Infit(
n ).px();
1766 ta[0][1] = -( pmis.px() / pmis.rho() ) * p4Infit(
n ).px() *
1767 ( lambda / ( 1 + lambda * lambda ) ) -
1768 ( pmis.py() / pmis.rho() ) * p4Infit(
n ).py() *
1769 ( lambda / ( 1 + lambda * lambda ) ) +
1770 ( pmis.pz() / pmis.rho() ) * p4Infit(
n ).pz() *
1771 ( 1 / ( lambda * ( 1 + lambda * lambda ) ) );
1772 setA( m_nc, pa, ta );
1773 setAT( pa, m_nc, ta.T() );
1775 HepMatrix tb( 1, 2, 0 );
1776 tb[0][0] = -( ( pmis.px() / pmis.rho() ) * p4Infit(
n ).m() /
1777 ( p4Infit(
n ).rho() * p4Infit(
n ).rho() ) ) *
1778 ( p4Infit(
n ).px() + p4Infit(
n ).py() + p4Infit(
n ).pz() );
1779 tb[0][1] = ( ( pmis.px() / pmis.rho() ) * p4Infit(
n ).e() /
1780 ( p4Infit(
n ).rho() * p4Infit(
n ).rho() ) ) *
1781 ( p4Infit(
n ).px() + p4Infit(
n ).py() + p4Infit(
n ).pz() );
1785 setB( m_nc, pb, tb );
1786 setBT( pb, m_nc, tb.T() );
1790 HepMatrix ta( 1, 3, 0 );
1791 ta[0][0] = -( pmis.px() / pmis.rho() ) * p4Infit(
n ).py() +
1792 ( pmis.px() / pmis.rho() ) * p4Infit(
n ).px();
1793 ta[0][1] = -( pmis.px() / pmis.rho() ) * p4Infit(
n ).px() *
1794 ( lambda / ( 1 + lambda * lambda ) ) -
1795 ( pmis.py() / pmis.rho() ) * p4Infit(
n ).py() *
1796 ( lambda / ( 1 + lambda * lambda ) ) +
1797 ( pmis.pz() / pmis.rho() ) * p4Infit(
n ).pz() *
1798 ( 1 / ( lambda * ( 1 + lambda * lambda ) ) );
1799 setA( m_nc, pa, ta );
1800 setAT( pa, m_nc, ta.T() );
1802 HepMatrix tb( 1, 1, 0 );
1803 tb[0][0] = ( pmis.px() / pmis.rho() ) * ( p4Infit(
n ).px() / p4Infit(
n ).rho() ) +
1804 ( pmis.py() / pmis.rho() ) * ( p4Infit(
n ).py() / p4Infit(
n ).rho() ) +
1805 ( pmis.pz() / pmis.rho() ) * ( p4Infit(
n ).pz() / p4Infit(
n ).rho() );
1806 setB( m_nc, pb, tb );
1807 setBT( pb, m_nc, tb.T() );
1811 HepMatrix ta( 1, NTRKPAR, 0 );
1812 ta[0][0] = pmis.px() / pmis.rho();
1813 ta[0][1] = pmis.py() / pmis.rho();
1814 ta[0][2] = pmis.pz() / pmis.rho();
1815 setA( m_nc, pa, ta );
1816 setAT( pa, m_nc, ta.T() );
1822 HepVector
dc( 1, 0 );
1823 dc[0] = pmis.rho() - ptot;
1829 case ThreeMomentum: {
1835 Hep3Vector p3 = kc.
p3();
1836 HepLorentzVector pmis;
1837 for (
unsigned int j = 0; j < ( kc.
Ltrk() ).size(); j++ )
1839 int n = ( kc.
Ltrk() )[j];
1840 pmis = pmis + p4Infit(
n );
1842 for (
unsigned int j = 0; j < ( kc.
Ltrk() ).size(); j++ )
1844 int n = ( kc.
Ltrk() )[j];
1848 double lambda = p4Infit(
n ).pz() / p4Infit(
n ).perp();
1852 HepMatrix ta( kc.
nc(), NTRKPAR, 0 );
1856 setA( m_nc, pa, ta );
1857 setAT( pa, m_nc, ta.T() );
1861 HepMatrix ta( kc.
nc(), NTRKPAR, 0 );
1862 ta[0][0] = -p4Infit(
n ).py();
1863 ta[0][1] = -p4Infit(
n ).px() * ( lambda / sqrt( 1 + lambda * lambda ) );
1864 ta[0][2] = -p4Infit(
n ).m() * p4Infit(
n ).px() /
1865 ( p4Infit(
n ).rho() * p4Infit(
n ).rho() );
1867 p4Infit(
n ).e() * p4Infit(
n ).px() / ( p4Infit(
n ).rho() * p4Infit(
n ).rho() );
1868 ta[1][0] = p4Infit(
n ).px();
1869 ta[1][1] = -p4Infit(
n ).py() * ( lambda / sqrt( 1 + lambda * lambda ) );
1870 ta[1][2] = -p4Infit(
n ).m() * p4Infit(
n ).py() /
1871 ( p4Infit(
n ).rho() * p4Infit(
n ).rho() );
1873 p4Infit(
n ).e() * p4Infit(
n ).py() / ( p4Infit(
n ).rho() * p4Infit(
n ).rho() );
1875 ta[2][1] = p4Infit(
n ).pz() * ( 1 / ( lambda * ( 1 + lambda * lambda ) ) );
1876 ta[2][2] = -p4Infit(
n ).m() * p4Infit(
n ).pz() /
1877 ( p4Infit(
n ).rho() * p4Infit(
n ).rho() );
1879 p4Infit(
n ).e() * p4Infit(
n ).pz() / ( p4Infit(
n ).rho() * p4Infit(
n ).rho() );
1883 setA( m_nc, pa, ta );
1884 setAT( pa, m_nc, ta.T() );
1888 HepMatrix tb( kc.
nc(), 4, 0 );
1892 setB( m_nc, pb, tb );
1893 setBT( pb, m_nc, tb.T() );
1897 HepMatrix ta( kc.
nc(), 1, 0 );
1898 setA( m_nc, pa, ta );
1899 setAT( pa, m_nc, ta.T() );
1901 HepMatrix tb( kc.
nc(), 3, 0 );
1905 setB( m_nc, pb, tb );
1906 setBT( pb, m_nc, tb.T() );
1911 HepMatrix ta( kc.
nc(), 2, 0 );
1912 ta[0][0] = -p4Infit(
n ).py();
1913 ta[0][1] = -p4Infit(
n ).px() * ( lambda / sqrt( 1 + lambda * lambda ) );
1914 ta[1][0] = p4Infit(
n ).px();
1915 ta[1][1] = -p4Infit(
n ).py() * ( lambda / sqrt( 1 + lambda * lambda ) );
1917 ta[2][1] = p4Infit(
n ).pz() * ( 1 / ( lambda * ( 1 + lambda * lambda ) ) );
1918 setA( m_nc, pa, ta );
1919 setAT( pa, m_nc, ta.T() );
1921 HepMatrix tb( kc.
nc(), 2, 0 );
1922 tb[0][1] = -p4Infit(
n ).m() * p4Infit(
n ).px() /
1923 ( p4Infit(
n ).rho() * p4Infit(
n ).rho() );
1924 tb[1][1] = -p4Infit(
n ).m() * p4Infit(
n ).py() /
1925 ( p4Infit(
n ).rho() * p4Infit(
n ).rho() );
1926 tb[2][1] = -p4Infit(
n ).m() * p4Infit(
n ).pz() /
1927 ( p4Infit(
n ).rho() * p4Infit(
n ).rho() );
1928 setB( m_nc, pb, tb );
1929 setBT( pb, m_nc, tb.T() );
1933 HepMatrix ta( kc.
nc(), 3, 0 );
1934 ta[0][0] = -p4Infit(
n ).py();
1935 ta[0][1] = -p4Infit(
n ).px() * ( lambda / sqrt( 1 + lambda * lambda ) );
1936 ta[1][0] = p4Infit(
n ).px();
1937 ta[1][1] = -p4Infit(
n ).py() * ( lambda / sqrt( 1 + lambda * lambda ) );
1939 ta[2][1] = p4Infit(
n ).pz() * ( 1 / ( lambda * ( 1 + lambda * lambda ) ) );
1940 setA( m_nc, pa, ta );
1941 setAT( pa, m_nc, ta.T() );
1943 HepMatrix tb( kc.
nc(), 1, 0 );
1944 tb[0][0] = p4Infit(
n ).px() / p4Infit(
n ).rho();
1945 tb[1][0] = p4Infit(
n ).py() / p4Infit(
n ).rho();
1946 tb[2][0] = p4Infit(
n ).pz() / p4Infit(
n ).rho();
1947 setB( m_nc, pb, tb );
1948 setBT( pb, m_nc, tb.T() );
1952 HepMatrix ta( kc.
nc(), NTRKPAR, 0 );
1956 setA( m_nc, pa, ta );
1957 setAT( pa, m_nc, ta.T() );
1962 HepVector
dc( kc.
nc(), 0 );
1963 dc[0] = pmis.px() - p3.x();
1964 dc[1] = pmis.py() - p3.y();
1965 dc[2] = pmis.pz() - p3.z();
1966 for (
int i = 0; i < kc.
nc(); i++ ) { m_G[m_nc + i] =
dc[i]; }
1978 HepLorentzVector pmis1, pmis2;
1979 for (
int n = 0;
n < isiz;
n++ )
1982 pmis1 = pmis1 + p4Infit(
n1 );
1986 for (
int n = 0;
n < jsiz;
n++ )
1988 int n2 = ( kc.
Ltrk() )[
n + isiz];
1989 pmis2 = pmis2 + p4Infit(
n2 );
1992 for (
int i = 0; i < isiz; i++ )
1994 int n1 = ( kc.
Ltrk() )[i];
1995 double lambda = p4Infit(
n1 ).pz() / p4Infit(
n1 ).perp();
2002 HepMatrix ta( 1, NTRKPAR, 0 );
2003 ta[0][0] = -2 * pmis1.px() + 2 * pmis1.e() * p4Infit(
n1 ).px() / p4Infit(
n1 ).e();
2004 ta[0][1] = -2 * pmis1.py() + 2 * pmis1.e() * p4Infit(
n1 ).py() / p4Infit(
n1 ).e();
2005 ta[0][2] = -2 * pmis1.pz() + 2 * pmis1.e() * p4Infit(
n1 ).pz() / p4Infit(
n1 ).e();
2006 ta[0][3] = 2 * pmis1.e() * p4Infit(
n1 ).m() / p4Infit(
n1 ).e();
2007 setA( m_nc, pa, ta );
2008 setAT( pa, m_nc, ta.T() );
2012 HepMatrix ta( 1, NTRKPAR, 0 );
2013 double a1 = lambda * lambda + 1;
2014 ta[0][0] = 2 * pmis1.px() * p4Infit(
n1 ).py() - 2 * pmis1.py() * p4Infit(
n1 ).px();
2015 ta[0][1] = 2 * pmis1.px() * p4Infit(
n1 ).px() * lambda / sqrt( a1 ) +
2016 2 * pmis1.py() * ( p4Infit(
n1 ) ).py() * lambda / sqrt( a1 ) -
2017 2 * pmis1.pz() * ( p4Infit(
n1 ) ).pz() / ( sqrt( a1 ) * lambda );
2018 ta[0][2] = 2 * pmis1.px() * ( p4Infit(
n1 ) ).px() * p4Infit(
n1 ).m() /
2019 ( ( p4Infit(
n1 ) ).rho() * p4Infit(
n1 ).rho() ) +
2020 2 * pmis1.py() * ( p4Infit(
n1 ) ).py() * p4Infit(
n1 ).m() /
2021 ( ( p4Infit(
n1 ) ).rho() * p4Infit(
n1 ).rho() ) +
2022 2 * pmis1.pz() * ( p4Infit(
n1 ) ).pz() * p4Infit(
n1 ).m() /
2023 ( ( p4Infit(
n1 ) ).rho() * p4Infit(
n1 ).rho() );
2024 ta[0][3] = 2 * pmis1.e() -
2025 2 * pmis1.px() * ( p4Infit(
n1 ) ).px() * p4Infit(
n1 ).e() /
2026 ( ( p4Infit(
n1 ) ).rho() * p4Infit(
n1 ).rho() ) -
2027 2 * pmis1.py() * ( p4Infit(
n1 ) ).py() * p4Infit(
n1 ).e() /
2028 ( ( p4Infit(
n1 ) ).rho() * p4Infit(
n1 ).rho() ) -
2029 2 * pmis1.pz() * ( p4Infit(
n1 ) ).pz() * p4Infit(
n1 ).e() /
2030 ( ( p4Infit(
n1 ) ).rho() * p4Infit(
n1 ).rho() );
2031 setA( m_nc, pa, ta );
2032 setAT( pa, m_nc, ta.T() );
2036 HepMatrix tb( 1, 4, 0 );
2037 tb[0][0] = -2 * pmis1.px();
2038 tb[0][1] = -2 * pmis1.py();
2039 tb[0][2] = -2 * pmis1.pz();
2040 tb[0][3] = 2 * pmis1.e();
2041 setB( m_nc, pb, tb );
2042 setBT( pb, m_nc, tb.T() );
2046 HepMatrix ta( 1, 1, 0 );
2047 ta[0][0] = 2 * pmis1.e() * ( p4Infit(
n1 ).m() / p4Infit(
n1 ).e() );
2048 setA( m_nc, pa, ta );
2049 setAT( pa, m_nc, ta.T() );
2050 HepMatrix tb( 1, 3, 0 );
2051 tb[0][0] = -2 * pmis1.px();
2052 tb[0][1] = -2 * pmis1.py();
2053 tb[0][2] = -2 * pmis1.pz();
2054 setB( m_nc, pb, tb );
2055 setBT( pb, m_nc, tb.T() );
2059 HepMatrix ta( 1, 2, 0 );
2060 double a1 = lambda * lambda + 1;
2061 ta[0][0] = 2 * pmis1.px() * p4Infit(
n1 ).py() - 2 * pmis1.py() * p4Infit(
n1 ).px();
2062 ta[0][1] = 2 * pmis1.px() * p4Infit(
n1 ).px() * lambda / sqrt( a1 ) +
2063 2 * pmis1.py() * ( p4Infit(
n1 ) ).py() * lambda / sqrt( a1 ) -
2064 2 * pmis1.pz() * ( p4Infit(
n1 ) ).pz() / ( sqrt( a1 ) * lambda );
2065 setA( m_nc, pa, ta );
2066 setAT( pa, m_nc, ta.T() );
2068 HepMatrix tb( 1, 2, 0 );
2069 tb[0][0] = 2 * pmis1.px() * ( p4Infit(
n1 ) ).px() * p4Infit(
n1 ).m() /
2070 ( ( p4Infit(
n1 ) ).rho() * p4Infit(
n1 ).rho() ) +
2071 2 * pmis1.py() * ( p4Infit(
n1 ) ).py() * p4Infit(
n1 ).m() /
2072 ( ( p4Infit(
n1 ) ).rho() * p4Infit(
n1 ).rho() ) +
2073 2 * pmis1.pz() * ( p4Infit(
n1 ) ).pz() * p4Infit(
n1 ).m() /
2074 ( ( p4Infit(
n1 ) ).rho() * p4Infit(
n1 ).rho() );
2075 tb[0][1] = 2 * pmis1.e() -
2076 2 * pmis1.px() * ( p4Infit(
n1 ) ).px() * p4Infit(
n1 ).e() /
2077 ( ( p4Infit(
n1 ) ).rho() * p4Infit(
n1 ).rho() ) -
2078 2 * pmis1.py() * ( p4Infit(
n1 ) ).py() * p4Infit(
n1 ).e() /
2079 ( ( p4Infit(
n1 ) ).rho() * p4Infit(
n1 ).rho() ) -
2080 2 * pmis1.pz() * ( p4Infit(
n1 ) ).pz() * p4Infit(
n1 ).e() /
2081 ( ( p4Infit(
n1 ) ).rho() * p4Infit(
n1 ).rho() );
2082 setB( m_nc, pb, tb );
2083 setBT( pb, m_nc, tb.T() );
2087 HepMatrix ta( 1, 3, 0 );
2088 double a1 = lambda * lambda + 1;
2089 ta[0][0] = 2 * pmis1.px() * p4Infit(
n1 ).py() - 2 * pmis1.py() * p4Infit(
n1 ).px();
2090 ta[0][1] = 2 * pmis1.px() * p4Infit(
n1 ).px() * lambda / sqrt( a1 ) +
2091 2 * pmis1.py() * ( p4Infit(
n1 ) ).py() * lambda / sqrt( a1 ) -
2092 2 * pmis1.pz() * ( p4Infit(
n1 ) ).pz() / ( sqrt( a1 ) * lambda );
2093 ta[0][2] = 2 * pmis1.e() * ( p4Infit(
n1 ) ).m() / ( p4Infit(
n1 ) ).e();
2094 setA( m_nc, pa, ta );
2095 setAT( pa, m_nc, ta.T() );
2096 HepMatrix tb( 1, 1, 0 );
2097 tb[0][0] = 2 * pmis1.e() * ( p4Infit(
n1 ) ).rho() / ( p4Infit(
n1 ) ).e() -
2098 2 * pmis1.px() * ( p4Infit(
n1 ) ).px() / ( p4Infit(
n1 ) ).rho() -
2099 2 * pmis1.py() * ( p4Infit(
n1 ) ).py() / ( p4Infit(
n1 ) ).rho() -
2100 2 * pmis1.pz() * ( p4Infit(
n1 ) ).pz() / ( p4Infit(
n1 ) ).rho();
2101 setB( m_nc, pb, tb );
2102 setBT( pb, m_nc, tb.T() );
2106 HepMatrix ta( 1, NTRKPAR, 0 );
2107 ta[0][0] = -2 * pmis1.px() + 2 * pmis1.e() * p4Infit(
n1 ).px() / p4Infit(
n1 ).e();
2108 ta[0][1] = -2 * pmis1.py() + 2 * pmis1.e() * p4Infit(
n1 ).py() / p4Infit(
n1 ).e();
2109 ta[0][2] = -2 * pmis1.pz() + 2 * pmis1.e() * p4Infit(
n1 ).pz() / p4Infit(
n1 ).e();
2110 ta[0][3] = 2 * pmis1.e() * p4Infit(
n1 ).m() / p4Infit(
n1 ).e();
2111 setA( m_nc, pa, ta );
2112 setAT( pa, m_nc, ta.T() );
2118 for (
int i = isiz; i < isiz + jsiz; i++ )
2120 int n2 = ( kc.
Ltrk() )[i];
2121 double lambda = p4Infit(
n2 ).pz() / p4Infit(
n2 ).perp();
2128 HepMatrix ta( 1, NTRKPAR, 0 );
2129 ta[0][0] = -2 * pmis2.px() + 2 * pmis2.e() * p4Infit(
n2 ).px() / p4Infit(
n2 ).e();
2130 ta[0][1] = -2 * pmis2.py() + 2 * pmis2.e() * p4Infit(
n2 ).py() / p4Infit(
n2 ).e();
2131 ta[0][2] = -2 * pmis2.pz() + 2 * pmis2.e() * p4Infit(
n2 ).pz() / p4Infit(
n2 ).e();
2132 ta[0][3] = 2 * pmis2.e() * p4Infit(
n2 ).m() / p4Infit(
n2 ).e();
2133 setA( m_nc, pa, -ta );
2134 setAT( pa, m_nc, -ta.T() );
2138 HepMatrix ta( 1, NTRKPAR, 0 );
2139 double a1 = lambda * lambda + 1;
2140 ta[0][0] = 2 * pmis2.px() * p4Infit(
n2 ).py() - 2 * pmis2.py() * p4Infit(
n2 ).px();
2141 ta[0][1] = 2 * pmis2.px() * p4Infit(
n2 ).px() * lambda / sqrt( a1 ) +
2142 2 * pmis2.py() * ( p4Infit(
n2 ) ).py() * lambda / sqrt( a1 ) -
2143 2 * pmis2.pz() * ( p4Infit(
n2 ) ).pz() / ( sqrt( a1 ) * lambda );
2144 ta[0][2] = 2 * pmis2.px() * ( p4Infit(
n2 ) ).px() * p4Infit(
n2 ).m() /
2145 ( ( p4Infit(
n2 ) ).rho() * p4Infit(
n2 ).rho() ) +
2146 2 * pmis2.py() * ( p4Infit(
n2 ) ).py() * p4Infit(
n2 ).m() /
2147 ( ( p4Infit(
n2 ) ).rho() * p4Infit(
n2 ).rho() ) +
2148 2 * pmis2.pz() * ( p4Infit(
n2 ) ).pz() * p4Infit(
n2 ).m() /
2149 ( ( p4Infit(
n2 ) ).rho() * p4Infit(
n2 ).rho() );
2150 ta[0][3] = 2 * pmis2.e() -
2151 2 * pmis2.px() * ( p4Infit(
n2 ) ).px() * p4Infit(
n2 ).e() /
2152 ( ( p4Infit(
n2 ) ).rho() * p4Infit(
n2 ).rho() ) -
2153 2 * pmis2.py() * ( p4Infit(
n2 ) ).py() * p4Infit(
n2 ).e() /
2154 ( ( p4Infit(
n2 ) ).rho() * p4Infit(
n2 ).rho() ) -
2155 2 * pmis2.pz() * ( p4Infit(
n2 ) ).pz() * p4Infit(
n2 ).e() /
2156 ( ( p4Infit(
n2 ) ).rho() * p4Infit(
n2 ).rho() );
2157 setA( m_nc, pa, -ta );
2158 setAT( pa, m_nc, -ta.T() );
2162 HepMatrix tb( 1, 4, 0 );
2163 tb[0][0] = -2 * pmis2.px();
2164 tb[0][1] = -2 * pmis2.py();
2165 tb[0][2] = -2 * pmis2.pz();
2166 tb[0][3] = 2 * pmis2.e();
2167 setB( m_nc, pb, -tb );
2168 setBT( pb, m_nc, -tb.T() );
2172 HepMatrix ta( 1, 1, 0 );
2173 ta[0][0] = 2 * pmis2.e() * ( p4Infit(
n2 ).m() / p4Infit(
n2 ).e() );
2174 setA( m_nc, pa, -ta );
2175 setAT( pa, m_nc, -ta.T() );
2176 HepMatrix tb( 1, 3, 0 );
2177 tb[0][0] = -2 * pmis2.px();
2178 tb[0][1] = -2 * pmis2.py();
2179 tb[0][2] = -2 * pmis2.pz();
2180 setB( m_nc, pb, -tb );
2181 setBT( pb, m_nc, -tb.T() );
2185 HepMatrix ta( 1, 2, 0 );
2186 double a1 = lambda * lambda + 1;
2187 ta[0][0] = 2 * pmis2.px() * p4Infit(
n2 ).py() - 2 * pmis2.py() * p4Infit(
n2 ).px();
2188 ta[0][1] = 2 * pmis2.px() * p4Infit(
n2 ).px() * lambda / sqrt( a1 ) +
2189 2 * pmis2.py() * ( p4Infit(
n2 ) ).py() * lambda / sqrt( a1 ) -
2190 2 * pmis2.pz() * ( p4Infit(
n2 ) ).pz() / ( sqrt( a1 ) * lambda );
2191 setA( m_nc, pa, -ta );
2192 setAT( pa, m_nc, -ta.T() );
2194 HepMatrix tb( 1, 2, 0 );
2195 tb[0][0] = 2 * pmis2.px() * ( p4Infit(
n2 ) ).px() * p4Infit(
n2 ).m() /
2196 ( ( p4Infit(
n2 ) ).rho() * p4Infit(
n2 ).rho() ) +
2197 2 * pmis2.py() * ( p4Infit(
n2 ) ).py() * p4Infit(
n2 ).m() /
2198 ( ( p4Infit(
n2 ) ).rho() * p4Infit(
n2 ).rho() ) +
2199 2 * pmis2.pz() * ( p4Infit(
n2 ) ).pz() * p4Infit(
n2 ).m() /
2200 ( ( p4Infit(
n2 ) ).rho() * p4Infit(
n2 ).rho() );
2201 tb[0][1] = 2 * pmis2.e() -
2202 2 * pmis2.px() * ( p4Infit(
n2 ) ).px() * p4Infit(
n2 ).e() /
2203 ( ( p4Infit(
n2 ) ).rho() * p4Infit(
n2 ).rho() ) -
2204 2 * pmis2.py() * ( p4Infit(
n2 ) ).py() * p4Infit(
n2 ).e() /
2205 ( ( p4Infit(
n2 ) ).rho() * p4Infit(
n2 ).rho() ) -
2206 2 * pmis2.pz() * ( p4Infit(
n2 ) ).pz() * p4Infit(
n2 ).e() /
2207 ( ( p4Infit(
n2 ) ).rho() * p4Infit(
n2 ).rho() );
2208 setB( m_nc, pb, -tb );
2209 setBT( pb, m_nc, -tb.T() );
2213 HepMatrix ta( 1, 3, 0 );
2214 double a1 = lambda * lambda + 1;
2215 ta[0][0] = 2 * pmis2.px() * p4Infit(
n2 ).py() - 2 * pmis2.py() * p4Infit(
n2 ).px();
2216 ta[0][1] = 2 * pmis2.px() * p4Infit(
n2 ).px() * lambda / sqrt( a1 ) +
2217 2 * pmis2.py() * ( p4Infit(
n2 ) ).py() * lambda / sqrt( a1 ) -
2218 2 * pmis2.pz() * ( p4Infit(
n2 ) ).pz() / ( sqrt( a1 ) * lambda );
2219 ta[0][2] = 2 * pmis2.e() * ( p4Infit(
n2 ) ).m() / ( p4Infit(
n2 ) ).e();
2220 setA( m_nc, pa, -ta );
2221 setAT( pa, m_nc, -ta.T() );
2222 HepMatrix tb( 1, 1, 0 );
2223 tb[0][0] = 2 * pmis2.e() * ( p4Infit(
n2 ) ).rho() / ( p4Infit(
n2 ) ).e() -
2224 2 * pmis2.px() * ( p4Infit(
n2 ) ).px() / ( p4Infit(
n2 ) ).rho() -
2225 2 * pmis2.py() * ( p4Infit(
n2 ) ).py() / ( p4Infit(
n2 ) ).rho() -
2226 2 * pmis2.pz() * ( p4Infit(
n2 ) ).pz() / ( p4Infit(
n2 ) ).rho();
2227 setB( m_nc, pb, -tb );
2228 setBT( pb, m_nc, -tb.T() );
2232 HepMatrix ta( 1, NTRKPAR, 0 );
2233 ta[0][0] = -2 * pmis2.px() + 2 * pmis2.e() * p4Infit(
n2 ).px() / p4Infit(
n2 ).e();
2234 ta[0][1] = -2 * pmis2.py() + 2 * pmis2.e() * p4Infit(
n2 ).py() / p4Infit(
n2 ).e();
2235 ta[0][2] = -2 * pmis2.pz() + 2 * pmis2.e() * p4Infit(
n2 ).pz() / p4Infit(
n2 ).e();
2236 ta[0][3] = 2 * pmis2.e() * p4Infit(
n2 ).m() / p4Infit(
n2 ).e();
2237 setA( m_nc, pa, -ta );
2238 setAT( pa, m_nc, -ta.T() );
2244 HepVector
dc( 1, 0 );
2245 dc[0] = pmis1.m2() - pmis2.m2();
2261 HepLorentzVector p4 = kc.
p4();
2262 HepLorentzVector pmis;
2263 for (
unsigned int j = 0; j < ( kc.
Ltrk() ).size(); j++ )
2265 int n = ( kc.
Ltrk() )[j];
2266 pmis = pmis + p4Infit(
n );
2268 for (
unsigned int j = 0; j < ( kc.
Ltrk() ).size(); j++ )
2270 int n = ( kc.
Ltrk() )[j];
2271 double lambda = p4Infit(
n ).pz() / p4Infit(
n ).perp();
2278 HepMatrix ta( kc.
nc(), NTRKPAR, 0 );
2282 ta[3][0] = p4Infit(
n ).px() / p4Infit(
n ).e();
2283 ta[3][1] = p4Infit(
n ).py() / p4Infit(
n ).e();
2284 ta[3][2] = p4Infit(
n ).pz() / p4Infit(
n ).e();
2285 ta[3][3] = p4Infit(
n ).m() / p4Infit(
n ).e();
2286 setA( m_nc, pa, ta );
2287 setAT( pa, m_nc, ta.T() );
2291 HepMatrix ta( kc.
nc(), NTRKPAR, 0 );
2292 ta[0][0] = -p4Infit(
n ).py();
2293 ta[0][1] = -p4Infit(
n ).px() * ( lambda / ( 1 + lambda * lambda ) );
2294 ta[0][2] = -p4Infit(
n ).m() * p4Infit(
n ).px() /
2295 ( p4Infit(
n ).rho() * p4Infit(
n ).rho() );
2297 p4Infit(
n ).e() * p4Infit(
n ).px() / ( p4Infit(
n ).rho() * p4Infit(
n ).rho() );
2298 ta[1][0] = p4Infit(
n ).px();
2299 ta[1][1] = -p4Infit(
n ).py() * ( lambda / ( 1 + lambda * lambda ) );
2300 ta[1][2] = -p4Infit(
n ).m() * p4Infit(
n ).py() /
2301 ( p4Infit(
n ).rho() * p4Infit(
n ).rho() );
2303 p4Infit(
n ).e() * p4Infit(
n ).py() / ( p4Infit(
n ).rho() * p4Infit(
n ).rho() );
2305 ta[2][1] = p4Infit(
n ).pz() * ( 1 / ( lambda * ( 1 + lambda * lambda ) ) );
2306 ta[2][2] = -p4Infit(
n ).m() * p4Infit(
n ).pz() /
2307 ( p4Infit(
n ).rho() * p4Infit(
n ).rho() );
2309 p4Infit(
n ).e() * p4Infit(
n ).pz() / ( p4Infit(
n ).rho() * p4Infit(
n ).rho() );
2314 setA( m_nc, pa, ta );
2315 setAT( pa, m_nc, ta.T() );
2319 HepMatrix tb( kc.
nc(), 4, 0 );
2324 setB( m_nc, pb, tb );
2325 setBT( pb, m_nc, tb.T() );
2329 HepMatrix ta( kc.
nc(), 1, 0 );
2330 ta[0][0] = -p4Infit(
n ).m() * p4Infit(
n ).px() /
2331 ( p4Infit(
n ).rho() * p4Infit(
n ).rho() );
2332 ta[1][0] = -p4Infit(
n ).m() * p4Infit(
n ).py() /
2333 ( p4Infit(
n ).rho() * p4Infit(
n ).rho() );
2334 ta[2][0] = -p4Infit(
n ).m() * p4Infit(
n ).pz() /
2335 ( p4Infit(
n ).rho() * p4Infit(
n ).rho() );
2337 setA( m_nc, pa, ta );
2338 setAT( pa, m_nc, ta.T() );
2340 HepMatrix tb( kc.
nc(), 3, 0 );
2341 tb[0][0] = -p4Infit(
n ).py();
2342 tb[0][1] = -p4Infit(
n ).px() * ( lambda / ( 1 + lambda * lambda ) );
2344 p4Infit(
n ).e() * p4Infit(
n ).px() / ( p4Infit(
n ).rho() * p4Infit(
n ).rho() );
2345 tb[1][0] = p4Infit(
n ).px();
2346 tb[1][1] = -p4Infit(
n ).py() * ( lambda / ( 1 + lambda * lambda ) );
2348 p4Infit(
n ).e() * p4Infit(
n ).py() / ( p4Infit(
n ).rho() * p4Infit(
n ).rho() );
2350 tb[2][1] = p4Infit(
n ).pz() * ( 1 / ( lambda * ( 1 + lambda * lambda ) ) );
2352 p4Infit(
n ).e() * p4Infit(
n ).pz() / ( p4Infit(
n ).rho() * p4Infit(
n ).rho() );
2357 setB( m_nc, pb, tb );
2358 setBT( pb, m_nc, tb.T() );
2363 HepMatrix ta( kc.
nc(), 2, 0 );
2364 ta[0][0] = -p4Infit(
n ).py();
2365 ta[0][1] = -p4Infit(
n ).px() * ( lambda / sqrt( 1 + lambda * lambda ) );
2366 ta[1][0] = p4Infit(
n ).px();
2367 ta[1][1] = -p4Infit(
n ).py() * ( lambda / sqrt( 1 + lambda * lambda ) );
2369 ta[2][1] = p4Infit(
n ).pz() * ( 1 / ( lambda * ( 1 + lambda * lambda ) ) );
2371 setA( m_nc, pa, ta );
2372 setAT( pa, m_nc, ta.T() );
2374 HepMatrix tb( kc.
nc(), 2, 0 );
2380 tb[0][0] = -p4Infit(
n ).m() * p4Infit(
n ).px() /
2381 ( p4Infit(
n ).rho() * p4Infit(
n ).rho() );
2382 tb[1][0] = -p4Infit(
n ).m() * p4Infit(
n ).py() /
2383 ( p4Infit(
n ).rho() * p4Infit(
n ).rho() );
2384 tb[2][0] = -p4Infit(
n ).m() * p4Infit(
n ).pz() /
2385 ( p4Infit(
n ).rho() * p4Infit(
n ).rho() );
2387 p4Infit(
n ).e() * p4Infit(
n ).px() / ( p4Infit(
n ).rho() * p4Infit(
n ).rho() );
2389 p4Infit(
n ).e() * p4Infit(
n ).py() / ( p4Infit(
n ).rho() * p4Infit(
n ).rho() );
2391 p4Infit(
n ).e() * p4Infit(
n ).pz() / ( p4Infit(
n ).rho() * p4Infit(
n ).rho() );
2393 setB( m_nc, pb, tb );
2394 setBT( pb, m_nc, tb.T() );
2398 HepMatrix ta( kc.
nc(), 3, 0 );
2399 ta[0][0] = -p4Infit(
n ).py();
2400 ta[0][1] = -p4Infit(
n ).px() * ( lambda / sqrt( 1 + lambda * lambda ) );
2401 ta[1][0] = p4Infit(
n ).px();
2402 ta[1][1] = -p4Infit(
n ).py() * ( lambda / sqrt( 1 + lambda * lambda ) );
2404 ta[2][1] = p4Infit(
n ).pz() * ( 1 / ( lambda * ( 1 + lambda * lambda ) ) );
2405 ta[3][2] = p4Infit(
n ).m() / p4Infit(
n ).e();
2406 setA( m_nc, pa, ta );
2407 setAT( pa, m_nc, ta.T() );
2409 HepMatrix tb( kc.
nc(), 1, 0 );
2410 tb[0][0] = p4Infit(
n ).px() / p4Infit(
n ).rho();
2411 tb[1][0] = p4Infit(
n ).py() / p4Infit(
n ).rho();
2412 tb[2][0] = p4Infit(
n ).pz() / p4Infit(
n ).rho();
2413 tb[3][0] = p4Infit(
n ).rho() / p4Infit(
n ).e();
2414 setB( m_nc, pb, tb );
2415 setBT( pb, m_nc, tb.T() );
2419 double ptrk = m_p.sub( pa + 3, pa + 3 )[0];
2420 double x = m_p.sub( pa, pa )[0] - m_q.sub( pb, pb )[0];
2421 double y = m_p.sub( pa + 1, pa + 1 )[0] - m_q.sub( pb + 1, pb + 1 )[0];
2422 double z = m_p.sub( pa + 2, pa + 2 )[0] - m_q.sub( pb + 2, pb + 2 )[0];
2423 double R = sqrt(
x *
x + y * y + z * z );
2424 HepMatrix ta( kc.
nc(), 4, 0 );
2425 ta[0][0] = ptrk * ( y * y + z * z ) / ( R * R * R );
2426 ta[0][1] = -ptrk *
x * y / (
R *
R *
R );
2427 ta[0][2] = -ptrk *
x * z / (
R *
R *
R );
2429 ta[1][0] = -ptrk * y *
x / (
R *
R *
R );
2430 ta[1][1] = ptrk * (
x *
x + z * z ) / ( R * R * R );
2431 ta[1][2] = -ptrk * y * z / (
R *
R *
R );
2433 ta[2][0] = -ptrk * z *
x / (
R *
R *
R );
2434 ta[2][1] = -ptrk * z * y / (
R *
R *
R );
2435 ta[2][2] = ptrk * (
x *
x + y * y ) / ( R * R * R );
2438 setA( m_nc, pa, ta );
2439 setAT( pa, m_nc, ta.T() );
2441 HepMatrix tb( kc.
nc(), 3, 0 );
2442 tb[0][0] = -ptrk * ( y * y + z * z ) / ( R * R * R );
2443 tb[0][1] = ptrk *
x * y / (
R *
R *
R );
2444 tb[0][2] = ptrk *
x * z / (
R *
R *
R );
2445 tb[1][0] = ptrk * y *
x / (
R *
R *
R );
2446 tb[1][1] = -ptrk * (
x *
x + z * z ) / ( R * R * R );
2447 tb[1][2] = ptrk * y * z / (
R *
R *
R );
2448 tb[2][0] = ptrk * z *
x / (
R *
R *
R );
2449 tb[2][1] = ptrk * z * y / (
R *
R *
R );
2450 tb[2][2] = -ptrk * (
x *
x + y * y ) / ( R * R * R );
2451 HepMatrix tbp = m_B.sub( 1, 4, 1, 3 );
2453 setB( m_nc, pb, tb );
2454 setBT( pb, m_nc, tb.T() );
2458 HepMatrix ta( kc.
nc(), NTRKPAR, 0 );
2462 ta[3][0] = p4Infit(
n ).px() / p4Infit(
n ).e();
2463 ta[3][1] = p4Infit(
n ).py() / p4Infit(
n ).e();
2464 ta[3][2] = p4Infit(
n ).pz() / p4Infit(
n ).e();
2465 ta[3][3] = p4Infit(
n ).m() / p4Infit(
n ).e();
2466 setA( m_nc, pa, ta );
2467 setAT( pa, m_nc, ta.T() );
2473 HepVector
dc( kc.
nc(), 0 );
2474 dc[0] = pmis.px() - p4.px();
2475 dc[1] = pmis.py() - p4.py();
2476 dc[2] = pmis.pz() - p4.pz();
2477 dc[3] = pmis.e() - p4.e();
2478 for (
int i = 0; i < kc.
nc(); i++ ) { m_G[m_nc + i] =
dc[i]; }
HepGeom::Point3D< double > HepPoint3D
character *LEPTONflag integer iresonances real zeta5 real a0
string::const_iterator ptype
double sin(const BesAngle a)
double cos(const BesAngle a)
NTuple::Item< double > m_p
NTuple::Item< double > m_q
HepSymMatrix eHel() const
void AddTotalEnergy(int number, double etot, std::vector< int > lis)
void AddFourMomentum(int number, HepLorentzVector p4)
void AddThreeMomentum(int number, Hep3Vector p3)
void BuildVirtualParticle(int number)
HepSymMatrix getCInfit(int i) const
void AddResonance(int number, double mres, std::vector< int > tlis)
void AddTotalMomentum(int number, double ptot, std::vector< int > lis)
HepSymMatrix getCOrigin(int i) const
static KalmanKinematicFit * instance()
void AddEqualMass(int number, std::vector< int > tlis1, std::vector< int > tlis2)
void FourMomentumConstraints(const HepLorentzVector p4, std::vector< int > tlis, HepSymMatrix Vme)
std::vector< int > Ltrk()
void ResonanceConstraints(const double mres, std::vector< int > tlis, HepSymMatrix Vre)
HepSymMatrix Vmeasure() const
void ThreeMomentumConstraints(const Hep3Vector p3, std::vector< int > tlis)
void TotalEnergyConstraints(const double etot, std::vector< int > tlis)
std::vector< int > numEqual()
HepLorentzVector p4() const
void TotalMomentumConstraints(const double ptot, std::vector< int > tlis)
void EqualMassConstraints(std::vector< int > tlis1, std::vector< int > tlis2, HepSymMatrix Vne)
std::vector< int > AddList(int n1)
std::vector< WTrackParameter > wTrackInfit() const
void setVBeamPosition(const HepSymMatrix VBeamPosition)
void clearGammaShapeList()
int numberGammaShape() const
vector< int > mappositionA() const
HepSymMatrix getVBeamPosition() const
HepPoint3D getBeamPosition() const
std::vector< GammaShape > GammaShapeValue() const
std::vector< WTrackParameter > wTrackOrigin() const
std::vector< int > GammaShapeList() const
vector< int > mappositionB() const
vector< int > mapkinematic() const
void setBeamPosition(const HepPoint3D BeamPosition)
void setWTrackInfit(const int n, const WTrackParameter wtrk)
void setEw(const HepSymMatrix &Ew)
void setMass(const double mass)
void setCharge(const int charge)
void setW(const HepVector &w)
complex_t R(double Q2, double M2, double G, double Mp2, double Mm2)