34                                        const double& radiationLength,
 
   37                                              TMatrixT<Double_t>* noise,
 
   38                                        const TMatrixT<Double_t>* jacobian,
 
   39                                        const TVector3* directionBefore,
 
   40                                        const TVector3* directionAfter){
 
   43   getParticleParameters(pdg, charge, mass);
 
   45   const double beta = mom/sqrt(mass*mass+mom*mom);
 
   48     if (!noise) 
throw GFException(std::string(__func__) + 
": no noise given!", __LINE__, __FILE__).
setFatal();
 
   49     if (!jacobian) 
throw GFException(std::string(__func__) + 
": no jacobian given!", __LINE__, __FILE__).
setFatal();
 
   50     if (!directionBefore) 
throw GFException(std::string(__func__) + 
": no directionBefore given!", __LINE__, __FILE__).
setFatal();
 
   51     if (!directionAfter) 
throw GFException(std::string(__func__) + 
": no directionAfter given!", __LINE__, __FILE__).
setFatal();
 
   55     double sigma2 = 225.E-6/(beta*beta*mom*mom) * step/radiationLength * matZ/(matZ+1) * log(159.*pow(matZ,-1./3.))/log(287./sqrt(matZ)); 
 
   59       TMatrixT<Double_t> noiseBefore(7,7);
 
   63       if (fabs((*directionBefore)[1]) < 1
E-14) {  
 
   64         if ((*directionBefore)[0] >= 0.) psi = M_PI/2.;
 
   65         else psi = 3.*M_PI/2.;
 
   68         if ((*directionBefore)[1] > 0.) psi = M_PI - atan((*directionBefore)[0]/(*directionBefore)[1]);
 
   69         else psi = -atan((*directionBefore)[0]/(*directionBefore)[1]);
 
   72       double sintheta = sqrt(1-(*directionBefore)[2]*(*directionBefore)[2]);  
 
   73       double costheta = (*directionBefore)[2];
 
   74       double sinpsi = sin(psi);
 
   75       double cospsi = cos(psi);
 
   78       double noiseBefore34 =  sigma2 * cospsi * sinpsi * sintheta*sintheta; 
 
   79       double noiseBefore35 = -sigma2 * costheta * sinpsi * sintheta;
 
   80       double noiseBefore45 =  sigma2 * costheta * cospsi * sintheta;
 
   82       noiseBefore[3][3] = sigma2 * (cospsi*cospsi + costheta*costheta - costheta*costheta * cospsi*cospsi);
 
   83       noiseBefore[4][3] = noiseBefore34;
 
   84       noiseBefore[5][3] = noiseBefore35;
 
   86       noiseBefore[3][4] = noiseBefore34;
 
   87       noiseBefore[4][4] = sigma2 * (sinpsi*sinpsi + costheta*costheta * cospsi*cospsi);
 
   88       noiseBefore[5][4] = noiseBefore45;
 
   90       noiseBefore[3][5] = noiseBefore35;
 
   91       noiseBefore[4][5] = noiseBefore45;
 
   92       noiseBefore[5][5] = sigma2 * sintheta*sintheta;
 
   94       TMatrixT<Double_t> jacobianT(7,7);
 
   95       jacobianT = (*jacobian);
 
   98       noiseBefore = jacobianT*noiseBefore*(*jacobian); 
 
  101       TMatrixT<Double_t> noiseAfter(7,7);
 
  105       if (fabs((*directionAfter)[1]) < 1
E-14) {  
 
  106         if ((*directionAfter)[0] >= 0.) psi = M_PI/2.;
 
  107         else psi = 3.*M_PI/2.;
 
  110         if ((*directionAfter)[1] > 0.) psi = M_PI - atan((*directionAfter)[0]/(*directionAfter)[1]);
 
  111         else psi = -atan((*directionAfter)[0]/(*directionAfter)[1]);
 
  114       sintheta = sqrt(1-(*directionAfter)[2]*(*directionAfter)[2]);  
 
  115       costheta = (*directionAfter)[2];
 
  120       double noiseAfter34 =  sigma2 * cospsi * sinpsi * sintheta*sintheta; 
 
  121       double noiseAfter35 = -sigma2 * costheta * sinpsi * sintheta;
 
  122       double noiseAfter45 =  sigma2 * costheta * cospsi * sintheta;
 
  124       noiseAfter[3][3] = sigma2 * (cospsi*cospsi + costheta*costheta - costheta*costheta * cospsi*cospsi);
 
  125       noiseAfter[4][3] = noiseAfter34;
 
  126       noiseAfter[5][3] = noiseAfter35;
 
  128       noiseAfter[3][4] = noiseAfter34;
 
  129       noiseAfter[4][4] = sigma2 * (sinpsi*sinpsi + costheta*costheta * cospsi*cospsi);
 
  130       noiseAfter[5][4] = noiseAfter45;
 
  132       noiseAfter[3][5] = noiseAfter35;
 
  133       noiseAfter[4][5] = noiseAfter45;
 
  134       noiseAfter[5][5] = sigma2 * sintheta*sintheta;
 
  137       (*noise) += 0.5*noiseBefore + 0.5*noiseAfter;
 
double energyLoss(const double &step, const double &mom, const int &pdg, const double &matDensity, const double &matZ, const double &matA, const double &radiationLength, const double &meanExcitationEnergy, const bool &doNoise=false, TMatrixT< Double_t > *noise=NULL, const TMatrixT< Double_t > *jacobian=NULL, const TVector3 *directionBefore=NULL, const TVector3 *directionAfter=NULL)
Optional calculation of multiple scattering. 
 
virtual ~GFEnergyLossCoulomb()
 
Exception class for error handling in GENFIT (provides storage for diagnostic information) ...
 
GFException & setFatal(bool b=true)
set fatal flag. if this is true, the fit stops for this current track repr.