/*
    Copyright 2012 Lumerical Solutions, Inc. All rights reserved.
*/
#ifndef _CHI2_H
#define _CHI2_H

#include "imaterialplugin.h"

class Chi2MaterialPlugin : public IMaterialPlugin
{
public:
    Chi2MaterialPlugin(){};
    virtual ~Chi2MaterialPlugin(){};

    const char* name() const {return "Chi2";};
    const char* uniqueId() const {return "{6951C3B6-E5AD-4c83-BF90-0FD7328C2029}";};
    const char** parameterNames() const {return names;};
    float calculateEx( float U, float V, float Ex, float* storage);
    float calculateEy( float U, float V, float Ey, float* storage);
    float calculateEz( float U, float V, float Ez, float* storage);
    void initialize(const double** parameters, double dt);
    void initializeStorageEx(float* storage){};
    void initializeStorageEy(float* storage){};
    void initializeStorageEz(float* storage){};
    size_t storageSizeE() const {return 0;};

private:
    float calculate(int axis, float U, float V, float E, float* storage);

    float chi2[3];
    float chi1[3];

    static const char* names[3];
};

#endif


