package hep.aida.ref.fitter.fitdata;
import hep.aida.IBaseHistogram;
import hep.aida.ICloud;
import hep.aida.ICloud1D;
import hep.aida.ICloud2D;
import hep.aida.ICloud3D;
import hep.aida.IDataPointSet;
import hep.aida.IFitData;
import hep.aida.IHistogram;
import hep.aida.IHistogram1D;
import hep.aida.IHistogram2D;
import hep.aida.IHistogram3D;
import hep.aida.IProfile;
import hep.aida.IProfile1D;
import hep.aida.IProfile2D;
/**
*
* Creates FitData.
*
* @author The FreeHEP team @ SLAC.
*
*/
public abstract class FitDataCreator {
private static IFitData create(IBaseHistogram h) {
FitData fitData = new FitData();
if ( h instanceof IHistogram ) {
switch (h.dimension()) {
case 1 : {
fitData.create1DConnection((IHistogram1D)h);
break;
}
case 2 : {
fitData.create2DConnection((IHistogram2D)h);
break;
}
case 3 : {
fitData.create3DConnection((IHistogram3D)h);
break;
}
}
} else if ( h instanceof ICloud ) {
switch (h.dimension()) {
case 1 : {
fitData.create1DConnection((ICloud1D)h);
break;
}
case 2 : {
fitData.create2DConnection((ICloud2D)h);
break;
}
case 3 : {
fitData.create3DConnection((ICloud3D)h);
break;
}
}
} else if ( h instanceof IProfile ) {
switch (h.dimension()) {
case 1 : {
fitData.create1DConnection((IProfile1D)h);
break;
}
case 2 : {
fitData.create2DConnection((IProfile2D)h);
break;
}
}
}
return fitData;
}
private static IFitData create(IDataPointSet dps) {
FitData fitData = new FitData();
int[] indeces = new int[dps.dimension()-1];
for ( int i = 0; i < indeces.length; i++ ) indeces[i] = i;
int valIndex = dps.dimension()-1;
fitData.createConnection( dps, indeces, valIndex );
return fitData;
}
public static IFitData create(Object obj) {
if ( obj instanceof IFitData )
return (IFitData)obj;
if ( obj instanceof IDataPointSet )
return create((IDataPointSet)obj);
if ( obj instanceof IBaseHistogram )
return create((IBaseHistogram)obj);
throw new IllegalArgumentException("Unsupported class "+obj.getClass()+". Cannot create IFitData from it.");
}
}