////////////////////////////////////////////////////////////////////////
//
// $Id: NuTransODE.h,v 1.5 2002/03/10 14:49:47 bviren Exp $
//
// NuTransODE
//
// Package: elbo
//
// Implements an OdeFunc for transporting 3 flavor neutrinos through matter.
//
// This solves i*d(nu)/dx = [(1/2E)(U)(M^2)(U^\dagger) + V(x)]*nu 
//
// The constructor takes U, delta_atm (dm_23), delta_sol (dm_12) and
// the neutrino energy.  All energies in eV!
//
// Contact: bv@bnl.gov
//
// Created on: Mon Sep 17 15:59:25 2001
//
////////////////////////////////////////////////////////////////////////

#ifndef NUTRANSODE_H
#define NUTRANSODE_H

#include "OdeFunc.h"

class NuTransODE : public OdeFunc
{

public:
    NuTransODE(ComplexMatrix u, double baseline,
               double dm2_sol /*ev^2*/, double dm2_atm /*ev^2*/,
               double energy /*ev*/,
               bool use_matter_effects=true,
               bool antineutrino=false);
    virtual ~NuTransODE() {}
    ComplexVector operator()(double x, ComplexVector y);
private:
    ComplexMatrix _Uvac;        // -i/2E*UM^2U^\dagger
    double _baseline;
    bool _use_matter_effects;
    bool _antineutrino;
};                              // end of class NuTransODE

#endif  // NUTRANSODE_H
