////////////////////////////////////////////////////////////////////////
//
// $Id: Wiggle.h,v 1.8 2001/11/21 18:35:07 bviren Exp $
//
// Wiggle
//
// Package: elbo
//
// Main class.  Builds/reads Prob(E) lookup, interface to interpolator.
//
// Contact: bv@bnl.gov
//
// Created on: Tue Sep 25 08:33:59 2001
//
////////////////////////////////////////////////////////////////////////

#ifndef WIGGLE_H
#define WIGGLE_H

#include "nuosc.h"
#include "NuTransODE.h"
#include "matrix.h"
#include "NuoscParam.h"
#include <iostream>
#include <fstream>
#include <vector>

class Options;

class WiggleControl
{
public:
    bool use_log_energy;
    double min_energy;
    double max_energy;
    double energy_step;

    WiggleControl();
    WiggleControl(int& argc, const char** argv);
    ~WiggleControl();
    Options* parse_args(int& argc, const char** argv);
    void usage(const char* message);
private:
    void init();
    Options* options;    
};

class Wiggle
{

public:

    Wiggle();
    Wiggle(NuoscParam& np, WiggleControl& wc);
    ~Wiggle();

    void SetOptions(NuoscParam& np, WiggleControl& wc)
        {nuosc_params = np; control = wc;}
    bool BuildLookups(void);


    vector<double> E, Pnue, Pnumu, Pnutau;

private:

    // copy constructor, assignment:
    Wiggle(const Wiggle& rhs); // copy constructor
    Wiggle& operator=(const Wiggle& rhs); // assignment

    NuoscParam nuosc_params;
    WiggleControl control;
    
};                              // end of class Wiggle

#endif  // WIGGLE_H
