00001
00002
00003 #ifndef PROBFUNC_HEADER
00004 #define PROBFUNC_HEADER
00005
00006 #include <clipper/clipper.h>
00007
00008 #include "util.hh"
00009
00010
00011 namespace scala {
00012
00013 double GaussProb(const double& val,
00014 const double& mean,
00015 const double& sd);
00016
00017
00018
00019
00020 double TruncatedGaussProb(const double& val,
00021 const double& mean,
00022 const double& sd,
00023 const double& minval,
00024 const double& maxval
00025 );
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036 double TruncatedLorentzianProb(const double& val,
00037 const double& mean,
00038 const double& sd,
00039 const double& minval,
00040 const double& maxval
00041 );
00042
00043
00044
00045
00046
00047
00048
00049
00050 class MeanModelBase
00051
00052 {
00053 public:
00054 MeanModelBase() : High(0.0), Low(1.0) {}
00055
00056 MeanModelBase(const double& HighProb, const double& LowProb)
00057 : High(HighProb), Low(LowProb) {}
00058
00059 virtual double dprob(const double& am) const {return -1.0;}
00060
00061 double HighProb() const {return High;}
00062 double LowProb() const {return Low;}
00063
00064 protected:
00065
00066 double nmap(const double& v) const
00067 {return Min(1.0,Max(0.0,(v-High)/(Low-High)));}
00068
00069 private:
00070 double High;
00071 double Low;
00072
00073 };
00074
00075 class DM_2sqrt : public MeanModelBase
00076 {
00077 public:
00078 DM_2sqrt(const double& HighProb, const double& LowProb)
00079 : MeanModelBase(HighProb, LowProb) {}
00080
00081 double dprob(const double& am) const;
00082 };
00083
00084 class DM_lin : public MeanModelBase
00085 {
00086 public:
00087 DM_lin(const double& HighProb, const double& LowProb)
00088 : MeanModelBase(HighProb, LowProb) {}
00089
00090 double dprob(const double& am) const;
00091 };
00092
00093 class DM_cubic : public MeanModelBase
00094 {
00095 public:
00096 DM_cubic(const double& HighProb, const double& LowProb)
00097 : MeanModelBase(HighProb, LowProb) {}
00098
00099 double dprob(const double& am) const;
00100 };
00101
00102 class DM_cubicsu : public MeanModelBase
00103 {
00104 public:
00105 DM_cubicsu(const double& HighProb, const double& LowProb)
00106 : MeanModelBase(HighProb, LowProb) {}
00107
00108 double dprob(const double& am) const;
00109 };
00110
00111 class DM_1minusmSq : public MeanModelBase
00112 {
00113 public:
00114 DM_1minusmSq(const double& HighProb, const double& LowProb)
00115 : MeanModelBase(HighProb, LowProb) {}
00116
00117 double dprob(const double& am) const;
00118 };
00119 class DM_1minusmCu : public MeanModelBase
00120 {
00121 public:
00122 DM_1minusmCu(const double& HighProb, const double& LowProb)
00123 : MeanModelBase(HighProb, LowProb) {}
00124
00125 double dprob(const double& am) const;
00126 };
00127
00128 class IntgrtProb
00129
00130
00131
00132
00133
00134
00135
00136 {
00137 public:
00138 IntgrtProb() : nd(10000) {}
00139
00140
00141
00142
00143 IntgrtProb(const MeanModelBase& DModel) : nd(10000)
00144 {DMeanModel = &DModel;}
00145
00146
00147
00148
00149
00150
00151
00152
00153
00154 double Prob(const double& val, const double& sd,
00155 const double& minval=0.0,
00156 const double& maxval=0.0);
00157
00158
00159
00160
00161
00162
00163
00164
00165
00166 double LorentzProb(const double& val, const double& sd,
00167 const double& minval,
00168 const double& maxval);
00169
00170 private:
00171 const MeanModelBase* DMeanModel;
00172 int nd;
00173 };
00174
00175
00176
00177
00178
00179
00180
00181
00182 double ProbBiassed(const double& val, const double& sd,
00183 const double& posmean, const MeanModelBase& DModel);
00184
00185
00186
00187
00188
00189 double ProbUnbiassed(const double& val, const double& sd,
00190 const double& posmean,const double& negmean);
00191
00192 }
00193 #endif
00194