Exemple #1
0
void pvalues::calculate_P_values(
Int4 Score1,
Int4 Score2,
Int4 Seq1Len,
Int4 Seq2Len,
set_of_parameters &ParametersSet,
vector<double> &P_values,
vector<double> &P_values_errors)
{
        if(Score2<Score1)
        {
                throw error("Error - Score2<Score1\n",2);
        };

        if(Seq1Len<=0||Seq2Len<=0)
        {
                throw error("Error - Seq1Len<=0||Seq2Len<=0\n",2);
        };

        Int4 ymin_=Score1;//calculation of P-values in the range [ymin_,ymax_]
        Int4 ymax_=Score2;
        Int4 m_=Seq1Len;//length of the first sequence
        Int4 n_=Seq2Len;//length of the second sequence
        set_of_parameters &par_=ParametersSet;

        P_values.resize(ymax_-ymin_+1);
        P_values_errors.resize(ymax_-ymin_+1);



        Int4 y;
        for(y=ymin_;y<=ymax_;y++)
        {

                double P;
                double P_error;
                double area;
                bool area_is_1_flag=false;


                if(read_Sbs_par_flag)
                {
                        

                        get_appr_tail_prob_with_cov_without_errors(
                        par_,
                        blast,
                        (double)y,
                        m_,
                        n_,

                        P,
                        P_error,

                        area,
                        a_normal,
                        b_normal,
                        h_normal,
                        N_normal,
                        p_normal,
                        area_is_1_flag);


                        
                        double P_tmp,area_tmp;

                        if(par_.m_LambdaSbs.size()>0)
                        {
                                get_P_error_using_splitting_method(
                                par_,
                                blast,
                                (double)y,
                                m_,
                                n_,

                                P_tmp,
                                P_error,

                                area_tmp,
                                a_normal,
                                b_normal,
                                h_normal,
                                N_normal,
                                p_normal,
                                area_is_1_flag);


                                if(P_tmp>0)
                                {
                                        P_error=P_error/P_tmp*P;
                                };

                                P_values_errors[y-ymin_]=P_error;
                        }
                        else
                        {
                                P_values_errors[y-ymin_]=-DBL_MAX;
                        };

                        
                        
                }
                else
                {
                        get_appr_tail_prob_with_cov(
                        par_,
                        blast,
                        (double)y,
                        m_,
                        n_,

                        P,
                        P_error,

                        area,
                        a_normal,
                        b_normal,
                        h_normal,
                        N_normal,
                        p_normal,
                        area_is_1_flag);

                        P_values_errors[y-ymin_]=P_error;
                };
        


                P_values[y-ymin_]=P;
                


        };
        
};
Exemple #2
0
void pvalues::get_P_error_using_splitting_method(
set_of_parameters &par_,
bool blast_,
double y_,
double m_,
double n_,

double &P_,
double &P_error_,

double &area_,

double a_normal_,
double b_normal_,
double h_normal_,
Int4 N_normal_,
double *p_normal_,

bool &area_is_1_flag_)
{
        Int4 dim=par_.m_LambdaSbs.size();
        if(dim==0)
        {
                throw error("Unexpected error in get_P_error_using_splitting_method\n",1);
        };

        P_=0;
        P_error_=0;


        vector<double> P_values(dim);

        Int4 i;
        for(i=0;i<dim;i++)
        {
                set_of_parameters par_tmp;

                par_tmp.a_I=par_.m_AISbs[i];
                par_tmp.a_I_error=0;

                par_tmp.a_J=par_.m_AJSbs[i];
                par_tmp.a_J_error=0;

                

                par_tmp.gapless_a=par_.gapless_a;
                par_tmp.gapless_a_error=par_.gapless_a_error;

                par_tmp.a=0.5*(par_tmp.a_I+par_tmp.a_J);
                par_tmp.a_error=0;


                par_tmp.sigma=par_.m_SigmaSbs[i];
                par_tmp.sigma_error=0;

                par_tmp.gapless_alpha=par_.gapless_alpha;
                par_tmp.gapless_alpha_error=par_.gapless_alpha_error;


                par_tmp.C=par_.m_CSbs[i];
                par_tmp.C_error=0;

                par_tmp.K=par_.m_KSbs[i];
                par_tmp.K_error=0;


                par_tmp.lambda=par_.m_LambdaSbs[i];
                par_tmp.lambda_error=0;

                par_tmp.alpha_I=par_.m_AlphaISbs[i];
                par_tmp.alpha_I_error=0;

                par_tmp.alpha_J=par_.m_AlphaJSbs[i];
                par_tmp.alpha_J_error=0;

                par_tmp.alpha=0.5*(par_tmp.alpha_I+par_tmp.alpha_J);
                par_tmp.alpha_error=0;

                par_tmp.G=par_.G;

                double P_tmp,P_tmp_error,area_tmp;

                get_appr_tail_prob_with_cov_without_errors(
                par_tmp,
                blast_,
                y_,
                m_,
                n_,

                P_tmp,
                P_tmp_error,

                area_tmp,

                a_normal_,
                b_normal_,
                h_normal_,
                N_normal_,
                p_normal_,

                area_is_1_flag_);

                P_values[i]=P_tmp;

                P_+=P_tmp;

        };

        if(dim<=1)
        {
                return;
        };


        if(P_<=0)
        {
                return;
        };

        P_/=(double)dim;

        for(i=0;i<dim;i++)
        {
                double tmp=P_values[i]/P_;
                P_error_+=tmp*tmp;
        };

        P_error_/=(double)dim;
        P_error_-=1;
        

        
        P_error_=P_*alp_reg::sqrt_for_errors(P_error_/(double)dim);

}