package org.opensha2.gcim;
import static com.google.common.base.Preconditions.checkArgument;
import static java.lang.Math.PI;
import static java.lang.Math.cos;
import static java.lang.Math.exp;
import static java.lang.Math.log;
import static java.lang.Math.max;
import static java.lang.Math.min;
import static java.lang.Math.sqrt;
import org.opensha2.gmm.Imt;
/**
* Add comments here
*
* @author Peter Powers
*/
public enum ImCorrelation {
BAKER_07("Baker (2007)") {
@Override
double get(Imt im1, Imt im2) {
return 0;
// TODO do nothing
}
},
BAKER_JARAYAM_08("") {
@Override
double get(Imt im1, Imt im2) {
return computeBakerJaraym08(im1, im2);
}
},
BRADLEY_11("") {
@Override
double get(Imt im1, Imt im2) {
return 0;
// TODO do nothing
}
},
GODA_ATKINSON_09("") {
@Override
double get(Imt im1, Imt im2) {
return 0;
// TODO do nothing
}
};
private String label;
private ImCorrelation(String label) {
this.label = label;
}
/**
* Compute the correlation between two intensity measures.
*/
abstract double get(Imt im1, Imt im2);
private static double computeBakerJaraym08(Imt imi, Imt imj) {
checkArgument(imi.isSA() && imj.isSA(), "Supplied IMTs are not SA intensity measures");
double ti = imi.period();
double tj = imj.period();
double t_min = min(ti, tj);
double t_max = max(ti, tj);
double c2 = Double.NaN;
double c3;
double c4;
double c1 = (1.0 - cos(PI / 2.0 - log(t_max / max(t_min, 0.109)) * 0.366));
if (t_max < 0.2) {
c2 = 1.0 - 0.105 *
(1.0 - 1.0 / (1.0 + exp(100.0 * t_max - 5.))) *
(t_max - t_min) / (t_max - 0.0099);
}
// if (t_max < 0.109) {
// c3 = c2;
// } else {
// c3 = c1;
// }
c3 = (t_max < 0.109) ? c2 : c1;
c4 = c1 + 0.5 * (sqrt(c3) - c3) * (1. + cos(PI * t_min / 0.109));
if (t_max <= 0.109) {
return c2;
} else if (t_min > 0.109) {
return c1;
} else if (t_max < 0.2) {
return min(c2, c4);
} else {
return c4;
}
// return (t_max <= 0.109) ? c2 : (t_min > 0.109) ? c1 : (t_max < 0.2) ?
// min(c2, c4) : c4;
}
}