///§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§//*
//             LOW ENERGY MUON SPIN RELAXATION, ROTATION, RADIATION 
// 
//  ID    :LEMuSRElectricField.hh , v 1.3
//  AUTHOR: Taofiq PARAISO
//  DATE  : 2004-09-17 10:20
//§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§//
//
//  &           &&&&&&&&&&                            &&&&&&&         &&&&&&&&
//  &           &                                   &&      &&       &       &&
//  &           &                   &      &       &                &       &&
//  &           &&&&&&&            &      &         &&&&&&         &&&&&&&&  
//  &           &                 &      &&                &      &      &&
//  &           &                &&     &  &     &&      &&      &        &
//  &&&&&&&&&&  &&&&&&&&&&      &  &&&&&    &&    &&&&&&&       &        &&   
//                             &
//                            &
//                           &
//                         &  
//                               Electric Field   
//§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§//

#ifndef LEMUSRELECTRICFIELD_H
#define LEMUSRELECTRICFIELD_H 1
 
#include"G4ElectricField.hh"
#include"G4ElectroMagneticField.hh"
#include "globals.hh"
#include "G4ios.hh"

#include <iomanip.h>
#include <iostream>
#include <fstream>
#include <vector>
#include <cmath>
#include "CLHEP/Matrix/Vector.h"
#include "CLHEP/Matrix/Matrix.h"



class LEMuSRElectricField : public G4ElectricField
{
public:
 

  LEMuSRElectricField(G4double fieldval,const char* Xfile, 
		      const char* Yfile,
		      const char* Zfile,G4String map_length_unit,
		      G4double Offset, G4double nx, G4double ny, G4double nz);//offset must be entered in millimeter
  
  LEMuSRElectricField(G4double fieldval,const char* file,G4String map_length_unit,	
		      G4double Offset, G4double nx, G4double ny, G4double nz);
  
  
  ~LEMuSRElectricField();
  
  void GetFieldValue(const G4double Point[4], G4double *Bfield) const;
  
  void Test();
  
public:
  //    std::vector< std::vector< std::vector< G4double > > > xField; // vector of 
  // vector of 
  // vector of G4doubles [[[a]i]j]k
 
  //    std::vector< std::vector< std::vector< G4double > > > yField;
  //    std::vector< std::vector< std::vector< G4double > > > zField;
 
   G4double xField[90][90][201];
   G4double yField[90][90][201];
   G4double zField[90][90][201]; 
  // The physical limits of the defined region
  G4double minx, maxx, miny, maxy, minz, maxz;
  
  G4double dx, dy, dz, zOffset, nx,ny,nz, FieldVal;
  G4String map_unit;
};

#endif


