#ifndef CONCENTRATIONPLOT_H
#define CONCENTRATIONPLOT_H

#include <map>
#include <vector>
#include <string>

class Projection2DData;

class ConcentrationPlot{

   public:
      typedef std::vector<std::vector<std::vector<float> > > floatField3D_t;

      
      ConcentrationPlot();
      
      
      virtual ~ConcentrationPlot();
      void setCurrentConcentrationFieldPtr(floatField3D_t *_currentConcentrationFieldPtr)
      {
         currentConcentrationFieldPtr=_currentConcentrationFieldPtr;
      }
      void toggleMaxConcentration(){maxConcentrationToggled=true;}
      void setMaxConcentrationFixed(bool fixed){maxConcentrationFixed=fixed;}
      void setMinConcentrationFixed(bool fixed){minConcentrationFixed=fixed;}
      void setMaxConcentration(float conc){maxConcentration = conc;}
      void setMinConcentration(float conc){minConcentration = conc;}
      float getMaxConcentration(){return maxConcentration;}
      float getMinConcentration(){return minConcentration;}
      float getMaxConcentrationTrue(){return maxConcentrationTrue;}
      float getMinConcentrationTrue(){return minConcentrationTrue;}
      
      bool getMaxConcentrationFixed(){return maxConcentrationFixed;}
      bool getMinConcentrationFixed(){return minConcentrationFixed;}   

      std::map<std::string,floatField3D_t*> & floatField3DNameMap(){return _floatField3DNameMap;}
      
      virtual void doContourLines(){}
      virtual void fillFakeConcentration(){}
      virtual void paintConcentrationLattice(){}
      virtual void paintConcentrationLattice(Projection2DData & projData){}

   protected:
       std::map<std::string,floatField3D_t*> _floatField3DNameMap; ///this map will be filled externally
       float maxConcentration;
       float minConcentration;
       float maxConcentrationTrue;
       float minConcentrationTrue;
       
       float maxConcentrationPercentage;
       bool maxConcentrationToggled;
       bool maxConcentrationFixed;
       bool minConcentrationFixed;
       
       unsigned int numberOfContours;
       floatField3D_t * currentConcentrationFieldPtr;

};

#endif