// K Ion Channel
//
// Copyright 2006 John L Baker. All rights reserved.
//
// File: ionchan_k_rallpack.h
//
// Release:		1.0.0
// Author:		John Baker
// Updated:		14 July 2006
//
// Description:
//
// This header file contains the classes used to implement
// the K channel definition used in Rallpack benchmarks.
 

// Only include this header once
#ifndef __IONCHAN_K_RALLPACK_H_
#define __IONCHAN_K_RALLPACK_H_
#include "bnsf.h"

using namespace std;
using namespace BNSF;

namespace RALLPACK {

	// --------------------------------------------
	// K Ion Channel class
	// --------------------------------------------

	class K_channel : public VoltageDepTabChannel {

	public:

		// constructors and destructor
		K_channel(Number gScaled=0) : VoltageDepTabChannel(gScaled) {}
		virtual ~K_channel() {}

		// reversal potential
		inline Number Vrev() { return _Vrev; }

		// alpha beta computations
		virtual Number alphaForTable(Number v);
		virtual Number betaForTable(Number v);

		// state vector label functions
		virtual const char* componentName() {return "K"; }
		virtual const char** stateLabels() { 
			static const char* sl[] = { "n" }; return sl; }

		// required functions
		virtual Number conductance();

	protected:
		virtual AlphaBetaEntry** pAlphaBetaTable() { return &_abTable; }
		static const Number			_Vrev;

	private:
		static AlphaBetaEntry*		_abTable;
	};
};


#endif // #ifndef __IONCHAN_K_RALLPACK_H_