import java.util.*;
public class HashMatris
{
public String isim;
public String deg1[];
public String deg2;
public int n1; //satır sayısı
public int n2; //sütun sayısı
public int n3; //satır başlık sayısı
public double d1[]; //satır değişkeni
public double d2[]; //sütun değişkeni
public String d2s[];
public double deger[][];
public HashMap<Double,Integer> h1; //satır
public HashMap<String,Integer> h1s; //satır
public HashMap<Double,Integer> h2; //sütun

public HashMatris(String isimi,String deg1i[],String deg2i,double d1i[],double d2i[],double[][] d)
{   isim=isimi;
    deg1=deg1i;
    deg2=deg2i;
    n1=d1i.length;  //satır sayısı
    n2=d2i.length;  //sütun sayısı
    n3=deg1.length;
    //System.out.println("n1="+n1+"n2="+n2+" "+isim+"deg2="+deg2);
    d1=new double[n1]; //satır değerleri
    d2=new double[n2]; //sütun değerleri
    d2s=new String[n2];
    deger=new double[n1][n2]; //tablo matris değerleri
    h1=new HashMap<Double,Integer>();
    h1s=new HashMap<String,Integer>();
    h2=new HashMap<Double,Integer>();
    for(int i=0;i<n3;i++)
    {deg1[i]=deg1i[i];}
    for(int i=0;i<n1;i++)
    {d1[i]=d1i[i]; h1.put(d1[i],i);h1s.put(deg1[i],i);}
    for(int j=0;j<n2;j++)
    {d2[j]=d2i[j]; d2s[j]=""+d2[j];h2.put(d2[j],j);}    
    for(int i=0;i<n1;i++)
      {for(int j=0;j<n2;j++) {deger[i][j]=d[i][j];}}        
}

public int getdeg1(String s1)
{return h1s.get(s1);}

public int getd1(double s1)
{  Double dd1=new Double(s1);
	return h1.get(dd1);
}
public int getd2(double s1)
{  Double dd1=new Double(s1);
	return h2.get(dd1);
}
public double cikti(double d1i,double d2i)
{  	
	int i=h1.get(d1i);
	int j;
	if(h2.get(d2i)!=null) {j=h2.get(d2i);return deger[i][j];}
	else
	{double e[][]=NA49.cubic_spline(d2,deger[i],0,0);
	  return NA49.funcSpline(e,d2i);
	}
}

public double cikti(String deg1i,double d2i)
{  	
	int i=h1s.get(deg1i);
	int j;
	if(h2.get(d2i)!=null) {j=h2.get(d2i);return deger[i][j];}
	else
	{double e[][]=NA49.cubic_spline(d2,deger[i],0,0);
	  return NA49.funcSpline(e,d2i);
	}
}
}