PMNS_Base.cxx
//.....................................................................
///
/// Propagate the current neutrino state through a given path
/// @param p - A neutrino path segment
///
Propagate the current neutrino state through a given path
Propagate the current neutrino state through a given path
void PMNS_Base::PropagatePath(NuPath p)
{
  SetCurPath(p);
  SolveHam();
  double LengthIneV = kKm2eV * p.length;
  for(int i=0; i<fNumNus; i++){
    double arg = fEval[i] * LengthIneV;
    fPhases[i] = complexD(cos(arg), -sin(arg));
  }
  for(int i=0;i<fNumNus;i++){
    fBuffer[i] = 0;
    for(int j=0;j<fNumNus;j++){
      fBuffer[i] += conj(fEvec[j][i]) * fNuState[j];
    }
    fBuffer[i] *= fPhases[i];
  }
  for(int i=0;i<fNumNus;i++){
    fNuState[i] = 0;
    for(int j=0;j<fNumNus;j++){
      fNuState[i] +=  fEvec[i][j] * fBuffer[j];
    }
  }
}
void PMNS_Base :: PropagatePath ( NuPath p ) { SetCurPath ( p ) ; SolveHam ( ) ; double LengthIneV = kKm2eV * p . length ; for ( int i = 0 ; i < fNumNus ; i ++ ) { double arg = fEval [ i ] * LengthIneV ; fPhases [ i ] = complexD ( cos ( arg ) , - sin ( arg ) ) ; } for ( int i = 0 ; i < fNumNus ; i ++ ) { fBuffer [ i ] = 0 ; for ( int j = 0 ; j < fNumNus ; j ++ ) { fBuffer [ i ] += conj ( fEvec [ j ] [ i ] ) * fNuState [ j ] ; } fBuffer [ i ] *= fPhases [ i ] ; } for ( int i = 0 ; i < fNumNus ; i ++ ) { fNuState [ i ] = 0 ; for ( int j = 0 ; j < fNumNus ; j ++ ) { fNuState [ i ] += fEvec [ i ] [ j ] * fBuffer [ j ] ; } } }
.....................................................................
Propagate the current neutrino state through a given path
..................................................................... Propagate the current neutrino state through a given path
// Set the neutrino path // Solve for eigensystem // Propagate neutrino state