#include "CbmKFMaterial.h" #include "CbmKFMath.h" #include "CbmKF.h" ClassImp(CbmKFMaterial) void CbmKFMaterial::Pass( Double_t ZCross, Double_t ZThick, CbmKFTrackInterface &track, Bool_t downstream, Double_t &QP0 ){ Double_t *T = track.GetTrack(); Double_t *C = track.GetCovMatrix(); CbmKF::Instance()->Propagate( T, C, ZCross, QP0 ); if( IsOutside( T[0], T[1] ) ) return; Double_t Q5, Q8, Q9, Ecor; CbmKFMath::GetNoise( ZThick/RadLength, F, T[2], T[3], QP0, track.GetMass(), track.IsElectron(), downstream, &Q5,&Q8,&Q9,&Ecor); C[5]+=Q5; C[8]+=Q8; C[9]+=Q9; QP0 *= Ecor; T[ 4] *= Ecor; C[10] *= Ecor; C[11] *= Ecor; C[12] *= Ecor; C[13] *= Ecor; C[14] *= Ecor*Ecor; } ClassImp(CbmKFWall) ; ClassImp(CbmKFTube) ; ClassImp(CbmKFCone) void CbmKFCone::Pass( Double_t ZCross, Double_t ZThick, CbmKFTrackInterface &track, Bool_t downstream, Double_t &QP0 ){ CbmKF *KF = CbmKF::Instance(); Double_t *T = track.GetTrack(); Double_t *C = track.GetCovMatrix(); Double_t zthick = ZThickness, zcross=ZReference; Double_t T_tmp[6]; for(Int_t j=0; j<6; j++ ) T_tmp[j] = T[j]; KF->Propagate( T_tmp, 0, ZReference, QP0); Double_t cz1, ct1, cz2, ct2; { Double_t iz1, iz2, iZ1, iZ2; Bool_t err1 = CbmKFMath::intersectCone( z1, z2, r1, r2, T_tmp, &iz1, &iz2 ); Bool_t err2 = CbmKFMath::intersectCone( z1, z2, R1, R2, T_tmp, &iZ1, &iZ2 ); if ( err1 || iz1z2 ) iz1 = -200; if ( err1 || iz2z2 ) iz2 = -200; if ( err2 || iZ1z2 ) iZ1 = -200; if ( err2 || iZ2z2 ) iZ2 = -200; if ( iz1>-200 && iZ1>-200 ) { cz1 = ( iz1 + iZ1 )/2; ct1 = fabs( iZ1 - iz1 ); } else { cz1 = -200; ct1 = 0; } if ( iz2>-200 && iZ2>-200 ) { cz2 = ( iz2 + iZ2 )/2; ct2 = fabs( iZ2 - iz2 ); } else { cz2 = -200; ct2 = 0; } if ( iz1<=-200 && iz2<=-200 && iZ1>-200 && iZ2>-200 ) { cz1 = ( iZ1 + iZ1 )/2; ct1 = fabs( iZ2 - iZ1 ); cz2 = -200; ct2 = 0; } } Double_t dz1 = cz1 - T[5]; Double_t dz2 = cz2 - T[5]; if( fabs(dz1)Propagate( T, C, zcross, QP0 ); Double_t Q5, Q8, Q9, Ecor; CbmKFMath::GetNoise( zthick/RadLength, F, T[2], T[3], QP0, track.GetMass(), track.IsElectron(),downstream, &Q5,&Q8,&Q9,&Ecor); C[5]+=Q5; C[8]+=Q8; C[9]+=Q9; QP0 *= Ecor; T[ 4] *= Ecor; C[10] *= Ecor; C[11] *= Ecor; C[12] *= Ecor; C[13] *= Ecor; C[14] *= Ecor*Ecor; }