(
"Unexpected error",4);
66 boolee_error_flag=
false;
67 erroree_error(
"",0);
100 doubletime_after_tmp;
116 Int4maximum_number_of_realizations_for_preliminary_simulation=1000;
118 boolloop_break_flag;
121 boollambda_accuracy_flag=
true;
126 boolC_calculation=
false;
130 boolcheck_time_flag=
true;
134check_time_flag=
false;
166lambda_accuracy_flag=
false;
173 if(number_tmp>=maximum_number_of_realizations_for_preliminary_simulation-1)
187loop_break_flag=!(maximum_number_of_realizations_for_preliminary_simulation>
d_n_alp_obj-1&&
192 while(!loop_break_flag);
201 if(memory_after1<=memory_before1)
204 throw error(
"Unexpected error\n",4);
216 if(time_after1<=time_before1)
228realizations_number2=
alp_data::Tmin(maximum_number_of_realizations_for_preliminary_simulation-(
Int4)1,realizations_number2);
257 boolC_calculation=
false;
271loop_break_flag=
false;
273 doubletime_before_ALP;
274 doubletime_during_ALP;
276 Int4number_of_realizations_with_ALP_pred;
281 boolcheck_time_flag=
true;
285check_time_flag=
false;
292number_of_realizations_with_ALP,
309 doubletmp_lambda=2.0;
320number_of_realizations_with_ALP_pred=number_of_realizations_with_ALP;
336 if(time_during_ALP-time_before1>=
d_alp_data->
d_max_time*0.25||number_of_realizations_with_ALP>=realizations_number2||tmp_lambda<=1.0)
344 if(time_during_ALP<=time_before_ALP)
351 Int4max_number_of_realizations=(
Int4)floor(number_of_realizations_with_ALP*(
d_alp_data->
d_max_time*0.35-(time_before_ALP-time_before1))/(time_during_ALP-time_before_ALP));
352number_of_realizations_with_ALP=
alp_data::Tmin(realizations_number2,(
Int4)floor(0.5*number_of_realizations_with_ALP+0.5*max_number_of_realizations));
353 if(number_of_realizations_with_ALP>=max_number_of_realizations)
358 if((
double)(number_of_realizations_with_ALP-number_of_realizations_with_ALP_pred)/(
double)number_of_realizations_with_ALP_pred<0.005)
360number_of_realizations_with_ALP=number_of_realizations_with_ALP_pred;
372 while(!loop_break_flag);
374realizations_number2=number_of_realizations_with_ALP;
375 Int4realizations_number2_lambda=number_of_realizations_with_ALP;
378loop_break_flag=
false;
380 doubletime_before_kill;
381 doubletime_during_kill;
383 Int4number_of_realizations_with_killing_pred;
388 boolcheck_time_flag=
false;
392check_time_flag=
false;
401number_of_realizations_with_killing,
417number_of_realizations_with_killing_pred=number_of_realizations_with_killing;
439 if(time_during_kill-time_before1>=
d_alp_data->
d_max_time||number_of_realizations_with_killing>=realizations_number2||tmp_K<=1.0)
449 if(time_during_kill<=time_before_kill)
456 Int4max_number_of_realizations=(
Int4)floor(number_of_realizations_with_killing*(
d_alp_data->
d_max_time-(time_before_kill-time_before1))/(time_during_kill-time_before_kill));
457number_of_realizations_with_killing=
d_alp_data->
Tmin(realizations_number2,(
Int4)floor(0.5*number_of_realizations_with_killing+0.5*max_number_of_realizations));
458 if(number_of_realizations_with_killing>=max_number_of_realizations)
463 if((
double)(number_of_realizations_with_killing-number_of_realizations_with_killing_pred)/(
double)number_of_realizations_with_killing_pred<0.005)
465number_of_realizations_with_killing=number_of_realizations_with_killing_pred;
475 while(!loop_break_flag);
477 #ifdef DEBUG_GUMBEL_PARAMS 482 for(k=0;k<=number_of_realizations_with_killing;k++)
488realizations_number2=number_of_realizations_with_killing;
489 Int4realizations_number2_K=number_of_realizations_with_killing;
498 throw error(
"The program cannot estimate the parameters; please repeat the calculation",2);
530 boolkill_flag=(realizations_number_killing>realizations_number2_K+1+j);
531 boollambda_flag=(realizations_number_lambda>realizations_number2_lambda+1+j);
532 Int4nalp_for_simulation=nalp;
543 if(kill_flag||lambda_flag)
548 Int4step_for_time=1;
550 Int4number_of_unsuccesful_objects=0;
556kill_flag=(realizations_number_killing>realizations_number2_K+j);
557lambda_flag=(realizations_number_lambda>realizations_number2_lambda+j);
565 if(!(kill_flag||lambda_flag))
587 boolsucess_flag=
false;
591 if(realizations_number2_K+j<=realizations_number2_lambda)
613 boolcheck_time_flag=
true;
617check_time_flag=
false;
637number_of_unsuccesful_objects++;
639 if(number_of_unsuccesful_objects>5+j*eps_tmp)
641 if(realizations_number2_K+j>realizations_number2_lambda)
645 throw error(
"The program cannot calculate the parameters\n",3);
655 throw error(
"Unexpected error in ramdomization\n",4);
659 if(realizations_number2_K+j>realizations_number2_lambda)
661 deleteobj;obj=
NULL;
671 if(realizations_number2_K+j>realizations_number2_lambda)
698 if(j%step_for_time==0)
720 Int4final_realizations_number_killing=kill_j+realizations_number2_K+1;
721 Int4final_realizations_number_lambda=
alp_data::Tmax(realizations_number2_lambda+1,j+realizations_number2_K);
725 #ifdef DEBUG_GUMBEL_PARAMS 729 doubletime_after100;
732 #ifdef DEBUG_GUMBEL_PARAMS 733cout<<
"\nActual calculation time is "<<time_after100-time_before1<<
" seconds\n";
734cout<<
"Actual memory usage is "<<
d_alp_data->
Tmax(memory_after2,memory_after3)<<
" MBs\n\n";
744 boolinside_simulation_flag;
746this->
m_CalcTime=time_after100-time_before1;
749time_after100-time_before1,
754inside_simulation_flag,
755final_realizations_number_lambda,
756final_realizations_number_killing);
762ee_error_flag=
true;
768ee_error_flag=
true;
769ee_error=
error(
"Internal error in the program\n",4);
794 Int4final_realizations_number_lambda_,
795 Int4final_realizations_number_killing_)
806 boolee_error_flag=
false;
807 erroree_error(
"",0);
823 throw error(
"Unexpected error",4);
827 Int4total_number=ind2_-ind1_+1;
829array_ind=
new alp*[total_number];
836perm=
new Int4[total_number];
842 for(
i=0;
i<total_number;
i++)
847 for(
i=0;
i<total_number;
i++)
856ee_error_flag=
true;
862ee_error_flag=
true;
863ee_error=
error(
"Internal error in the program\n",4);
867 delete[]array_ind;array_ind=
NULL;
868 delete[]perm;perm=
NULL;
884 for(
i=0;
i<dim_;
i++)
889 for(
i=0;
i<dim_-1;
i++)
893perm_[ind_swap]=perm_[
i];
902 Int4nalp_for_lambda_simulation,
905 bool&inside_simulation_flag,
906 Int4final_realizations_number_lambda_,
907 Int4final_realizations_number_killing_)
909 boolee_error_flag=
false;
910 erroree_error(
"",0);
919 doubletest_difference;
920 doubletest_difference_error;
936 doublealpha_I_error;
938 doublealpha_J_error;
943 Int4number_of_trials=0;
944 Int4number_of_trials_threshold=4;
949final_realizations_number_lambda_,
950final_realizations_number_killing_,
952nalp_for_lambda_simulation,
954inside_simulation_flag,
958test_difference_error,
987final_realizations_number_lambda_,
988final_realizations_number_killing_);
992 while(!flag&&number_of_trials<=number_of_trials_threshold);
996 throw error(
"Error - please run the program once again\n",2);
1003ee_error_flag=
true;
1009ee_error_flag=
true;
1010ee_error=
error(
"Internal error in the program\n",4);
1028 for(
i=0;
i<digits_;
i++)
1033 for(
i=0;
i<digits_;
i++)
1056 Int4number_of_realizations_)
1058 Int4max_number_of_subsimulations=20;
1059 Int4min_number_of_subsimulations=3;
1061 Int4min_number_of_realizations_for_subsimulation=2;
1063 if(number_of_realizations_<min_number_of_realizations_for_subsimulation*min_number_of_subsimulations)
1065 throw error(
"Please repeat the simulation or increase calculation time\n",1);
1068 Int4res_subsimulations=(
Int4)ceil(sqrt((
double)number_of_realizations_));
1069res_subsimulations=
alp_data::Tmin(res_subsimulations,max_number_of_subsimulations);
1070res_subsimulations=
alp_data::Tmax(res_subsimulations,min_number_of_subsimulations);
1072 returnres_subsimulations;
1078 Int4final_realizations_number_lambda_,
1079 Int4final_realizations_number_killing_,
1081 Int4nalp_for_lambda_simulation,
1083 bool&inside_simulation_flag,
1085 double&lambda_error,
1086 double&test_difference,
1087 double&test_difference_error,
1101 double&sigma_error,
1103 double&alpha_I_error,
1105 double&alpha_J_error,
1111 boolee_error_flag=
false;
1112 erroree_error(
"",0);
1115 Int4*d_mult_K_realizations=
NULL;
1117 double*lambda_mult=
NULL;
1118 double*lambda_mult_error=
NULL;
1120 double*C_mult=
NULL;
1121 double*C_mult_error=
NULL;
1123 double*a_I_mult=
NULL;
1124 double*a_I_mult_error=
NULL;
1126 double*a_J_mult=
NULL;
1127 double*a_J_mult_error=
NULL;
1129 double*sigma_mult=
NULL;
1130 double*sigma_mult_error=
NULL;
1132 double*alpha_I_mult=
NULL;
1133 double*alpha_I_mult_error=
NULL;
1135 double*alpha_J_mult=
NULL;
1136 double*alpha_J_mult_error=
NULL;
1138 double*K_C_mult=
NULL;
1139 double*K_C_mult_error=
NULL;
1141 double*K_mult=
NULL;
1142 double*K_mult_error=
NULL;
1144 void**alp_distr=
NULL;
1145 void**alp_distr_errors=
NULL;
1147 void***alp_mult_distr=
NULL;
1148 void***alp_mult_distr_errors=
NULL;
1159 if(final_realizations_number_killing_>final_realizations_number_lambda_)
1161 throw error(
"Unexpected error\n",4);
1169 doublemult_number_double_lambda=mult_number_lambda;
1170 doublemult_number_double_K=mult_number_lambda;
1231 doublelambda_mult2=0;
1236 doublesigma_mult2=0;
1237 doublealpha_I_mult2=0;
1238 doublealpha_J_mult2=0;
1241 doublelambda_mult2_error=0;
1242 doubleC_mult2_error=0;
1243 doubleK_C_mult2_error=0;
1244 doublea_I_mult2_error=0;
1245 doublea_J_mult2_error=0;
1246 doublesigma_mult2_error=0;
1247 doublealpha_I_mult2_error=0;
1248 doublealpha_J_mult2_error=0;
1249 doubleK_mult2_error=0;
1255 for(j=0;j<=nalp_for_lambda_simulation;j++)
1271alp_mult_distr[j]=
NULL;
1278alp_mult_distr_errors[j]=
NULL;
1281alp_mult_distr[0]=alp_distr;
1282alp_mult_distr_errors[0]=alp_distr_errors;
1284 Int4real_number=(
Int4)floor((
double)final_realizations_number_lambda_/(double)
d_mult_number);
1286d_mult_realizations[0]=final_realizations_number_lambda_;
1291d_mult_realizations[k]=real_number;
1298nr_tmp+=d_mult_realizations[k];
1300 for(j=0;j<=nalp_for_lambda_simulation;j++)
1303nr_tmp-d_mult_realizations[k],
1306alp_mult_distr_errors[k],
1314nr_tmp+=d_mult_realizations[k];
1317 doubletest_difference;
1318 doubletest_difference_error;
1324nalp_for_lambda_simulation,
1326inside_simulation_flag,
1327nr_tmp-d_mult_realizations[k],
1330alp_mult_distr_errors[k],
1332lambda_mult_error[k],
1334test_difference_error);
1337 if(!inside_simulation_flag)
1343lambda_mult2+=lambda_mult[k];
1344lambda_mult2_error+=lambda_mult[k]*lambda_mult[k];
1353nalp_for_lambda_simulation,
1355inside_simulation_flag,
1357final_realizations_number_lambda_-1,
1363test_difference_error);
1365 if(!inside_simulation_flag)
1367 throw error(
"Error - please run the program once again\n",2);
1371lambda_mult_error[0]=lambda_error;
1379nr_tmp+=d_mult_realizations[k];
1382nalp_for_lambda_simulation,
1383nr_tmp-d_mult_realizations[k],
1386alp_mult_distr_errors[k],
1388lambda_mult_error[k],
1393C_mult2_error+=C_mult[k]*C_mult[k];
1401nalp_for_lambda_simulation,
1403final_realizations_number_lambda_-1,
1413C_mult_error[0]=C_error;
1421nr_tmp+=d_mult_realizations[k];
1423nalp_for_lambda_simulation,
1424nr_tmp-d_mult_realizations[k],
1427alp_mult_distr_errors[k],
1429lambda_mult_error[k],
1435sigma_mult_error[k],
1437alpha_I_mult_error[k],
1439alpha_J_mult_error[k]);
1441a_I_mult2+=a_I_mult[k];
1442a_I_mult2_error+=a_I_mult[k]*a_I_mult[k];
1444a_J_mult2+=a_J_mult[k];
1445a_J_mult2_error+=a_J_mult[k]*a_J_mult[k];
1447sigma_mult2+=sigma_mult[k];
1448sigma_mult2_error+=sigma_mult[k]*sigma_mult[k];
1450alpha_I_mult2+=alpha_I_mult[k];
1451alpha_I_mult2_error+=alpha_I_mult[k]*alpha_I_mult[k];
1453alpha_J_mult2+=alpha_J_mult[k];
1454alpha_J_mult2_error+=alpha_J_mult[k]*alpha_J_mult[k];
1461nalp_for_lambda_simulation,
1463final_realizations_number_lambda_-1,
1481a_I_mult_error[0]=a_I_error;
1483a_J_mult_error[0]=a_J_error;
1484sigma_mult[0]=sigma;
1485sigma_mult_error[0]=sigma_error;
1486alpha_I_mult[0]=alpha_I;
1487alpha_I_mult_error[0]=alpha_I_error;
1488alpha_J_mult[0]=alpha_J;
1489alpha_J_mult_error[0]=alpha_J_error;
1492real_number=(
Int4)floor((
double)final_realizations_number_killing_/(double)
d_mult_number);
1495d_mult_K_realizations[0]=final_realizations_number_killing_;
1500d_mult_K_realizations[k]=real_number;
1507nr_tmp+=d_mult_K_realizations[k];
1509 Int4recommended_level;
1515nr_tmp-d_mult_K_realizations[k],
1526K_mult[k]=C_mult[k]*K_C_mult[k];
1533K_C_mult2+=K_C_mult[k];
1534K_C_mult2_error+=K_C_mult[k]*K_C_mult[k];
1537K_mult2_error+=K_mult[k]*K_mult[k];
1542 Int4recommended_level;
1549final_realizations_number_killing_-1,
1570K_C_mult_error[0]=K_C_error;
1573K_mult_error[0]=K_error;
1598mult_number_double_lambda=(double)final_realizations_number_lambda_/(
double)real_number;
1599mult_number_double_K=(double)final_realizations_number_killing_/(
double)real_number;
1602lambda_mult2_error=
alp_reg::sqrt_for_errors(lambda_mult2_error-lambda_mult2*lambda_mult2)/sqrt((
double)mult_number_double_lambda);
1604K_C_mult2_error=
alp_reg::sqrt_for_errors(K_C_mult2_error-K_C_mult2*K_C_mult2)/sqrt((
double)mult_number_double_K);
1605a_I_mult2_error=
alp_reg::sqrt_for_errors(a_I_mult2_error-a_I_mult2*a_I_mult2)/sqrt((
double)mult_number_double_lambda);
1606a_J_mult2_error=
alp_reg::sqrt_for_errors(a_J_mult2_error-a_J_mult2*a_J_mult2)/sqrt((
double)mult_number_double_lambda);
1607sigma_mult2_error=
alp_reg::sqrt_for_errors(sigma_mult2_error-sigma_mult2*sigma_mult2)/sqrt((
double)mult_number_double_lambda);
1608alpha_I_mult2_error=
alp_reg::sqrt_for_errors(alpha_I_mult2_error-alpha_I_mult2*alpha_I_mult2)/sqrt((
double)mult_number_double_lambda);
1609alpha_J_mult2_error=
alp_reg::sqrt_for_errors(alpha_J_mult2_error-alpha_J_mult2*alpha_J_mult2)/sqrt((
double)mult_number_double_lambda);
1617lambda_mult2_error);
1654alpha_I_mult2_error);
1660alpha_J_mult2_error);
1689this->
m_AISbs.resize(d_mult_number);
1690this->
m_AJSbs.resize(d_mult_number);
1692this->
m_CSbs.resize(d_mult_number);
1693this->
m_KSbs.resize(d_mult_number);
1702this->
m_AISbs[k-1]=a_I_mult[k];
1703this->
m_AJSbs[k-1]=a_J_mult[k];
1705this->
m_CSbs[k-1]=C_mult[k];
1706this->
m_KSbs[k-1]=K_mult[k];
1722ee_error_flag=
true;
1728ee_error_flag=
true;
1729ee_error=
error(
"Internal error in the program\n",4);
1736 for(j=1;j<=nalp_for_lambda_simulation;j++)
1741 delete[]alp_distr;alp_distr=
NULL;
1746 if(alp_distr_errors)
1749 for(j=1;j<=nalp_for_lambda_simulation;j++)
1754 delete[]alp_distr_errors;alp_distr_errors=
NULL;
1763 if(alp_mult_distr[k])
1765 for(j=1;j<=nalp_for_lambda_simulation;j++)
1770 delete[]alp_mult_distr[k];alp_mult_distr[k]=
NULL;
1774 delete[]alp_mult_distr;alp_mult_distr=
NULL;
1778 if(alp_mult_distr_errors)
1783 if(alp_mult_distr_errors[k])
1785 for(j=1;j<=nalp_for_lambda_simulation;j++)
1790 delete[]alp_mult_distr_errors[k];alp_mult_distr_errors[k]=
NULL;
1794 delete[]alp_mult_distr_errors;alp_mult_distr_errors=
NULL;
1798 delete[]d_mult_realizations;d_mult_realizations=
NULL;
1799 delete[]d_mult_K_realizations;d_mult_K_realizations=
NULL;
1801 delete[]lambda_mult;lambda_mult=
NULL;
1802 delete[]lambda_mult_error;lambda_mult_error=
NULL;
1804 delete[]C_mult;C_mult=
NULL;
1805 delete[]C_mult_error;C_mult_error=
NULL;
1807 delete[]a_I_mult;a_I_mult=
NULL;
1808 delete[]a_I_mult_error;a_I_mult_error=
NULL;
1809 delete[]a_J_mult;a_J_mult=
NULL;
1810 delete[]a_J_mult_error;a_J_mult_error=
NULL;
1811 delete[]sigma_mult;sigma_mult=
NULL;
1812 delete[]sigma_mult_error;sigma_mult_error=
NULL;
1813 delete[]alpha_I_mult;alpha_I_mult=
NULL;
1814 delete[]alpha_I_mult_error;alpha_I_mult_error=
NULL;
1815 delete[]alpha_J_mult;alpha_J_mult=
NULL;
1816 delete[]alpha_J_mult_error;alpha_J_mult_error=
NULL;
1818 delete[]K_C_mult;K_C_mult=
NULL;
1819 delete[]K_C_mult_error;K_C_mult_error=
NULL;
1821 delete[]K_mult;K_mult=
NULL;
1822 delete[]K_mult_error;K_mult_error=
NULL;
1835 doubleC_mult2_error)
1837 if(
C!=0&&C_mult2!=0)
1839C_error=
fabs(
C*C_mult2_error/C_mult2);
1843C_error=C_mult2_error;
1884 Int4current_level=(
Int4)floor(M_min_*0.5);
1885 Int4recommended_level;
1886 Int4number_of_unsucesful_objects=0;
1890 for(
i=ind1_;
i<=ind2_;
i++)
1903 for(
i=ind1_;
i<=ind2_;
i++)
1913number_of_unsucesful_objects++;
1914 if(number_of_unsucesful_objects>5+(ind2_-ind1_+1)*
1918 throw error(
"The program cannot estimate the parameters.\nPlease try to increase the allowed amount of memory or change parameters of the scoring system to ensure the logarithmic regime of the alignment score\n",1);
1920 deletealp_obj_tmp;alp_obj_tmp=
NULL;
1936number_of_unsucesful_objects++;
1937 if(number_of_unsucesful_objects>5+(ind2_-ind1_+1)*
1941 throw error(
"The program cannot estimate the parameters.\nPlease try to increase the allowed amount of memory or change parameters of the scoring system to ensure the logarithmic regime of the alignment score\n",1);
1964current_level=recommended_level;
1969level_=current_level;
2003sucess_flag_=
true;
2005 while(obj->
d_nalp<nalp_)
2010sucess_flag_=
false;
2011 deleteobj_;obj_=
NULL;
2024sucess_flag_=
false;
2025 deleteobj_;obj_=
NULL;
2041 boolC_calculation_,
2042 boolcheck_time_flag_)
2044 boolee_error_flag=
false;
2045 erroree_error(
"",0);
2047 Int4&alp_number=nalp_;
2050 void**alp_distr=
NULL;
2051 void**alp_distr_errors=
NULL;
2060 if(d_n_alp_obj<ind1_||d_n_alp_obj-1>ind2_)
2062 throw error(
"Unexpected error\n",4);
2065 Int4nalp_lambda_equilibration=-1;
2089 boolM_min_flag=
false;
2090 boolnalp_flag=
false;
2093 boolcriterion_flag=
false;
2094 Int4number_of_fails=0;
2095 Int4number_of_fails_threshold=5;
2099 Int4number_of_unsuccessful_objects=0;
2101 for(
i=ind1_;
i<=ind2_;
i++)
2109 if(alp_obj_tmp->
d_nalp<alp_number+1)
2116number_of_unsuccessful_objects++;
2120 if(number_of_unsuccessful_objects>5+(ind2_-
d_n_alp_obj+1)*
2125 throw error(
"The parameters cannot be correctly calculated for the given accuracy, calculation time and memory usage\n",1);
2129 boolsuccess2=
false;
2137 for(j=0;j<=alp_number;j++)
2150number_of_unsuccessful_objects++;
2151 if(number_of_unsuccessful_objects>5+(ind2_-
d_n_alp_obj+1)*
2156 throw error(
"The parameters cannot be correctly calculated for the given accuracy, calculation time and memory usage\n",1);
2171 boolinside_simulation_flag=
false;
2183inside_simulation_flag,
2187 if(nalp_lambda_equilibration==-1&&nalp_flag)
2189nalp_lambda_equilibration=alp_number;
2194 if(!inside_simulation_flag)
2201 for(
i=1;
i<=alp_number;
i++)
2206 delete[]alp_distr;alp_distr=
NULL;
2209 if(alp_distr_errors)
2211 for(
i=1;
i<=alp_number;
i++)
2216 delete[]alp_distr_errors;alp_distr_errors=
NULL;
2225alp_distr_errors=
NULL;
2229criterion_flag=
false;
2233 for(
i=ind1_;
i<=ind2_;
i++)
2236 deletealp_obj_tmp;alp_obj_tmp=
NULL;
2240 if(number_of_fails>number_of_fails_threshold)
2242 throw error(
"The program is not able to calculate the parameters accurately.\nPlease try to increase the allowed calculation time and memory limit\n",1);
2245 for(
i=ind1_;
i<=ind2_;
i++)
2261 while(!criterion_flag);
2264nalp_lambda_=
alp_data::Tmax(nalp_lambda_equilibration,nalp_lambda_);
2272ee_error_flag=
true;
2278ee_error_flag=
true;
2279ee_error=
error(
"Internal error in the program\n",4);
2287 for(
i=1;
i<=nalp_;
i++)
2292 delete[]alp_distr;alp_distr=
NULL;
2295 if(alp_distr_errors)
2298 for(
i=1;
i<=nalp_;
i++)
2303 delete[]alp_distr_errors;alp_distr_errors=
NULL;
2317 Int4&nalp_for_lambda_simulation_,
2321 void**&alp_distr_errors,
2325 bool&inside_simulation_flag_,
2326 boolC_calculation_)
2330M_min_flag_=
false;
2334 throw error(
"Unexpected error\n",4);
2340 doublelambda_error;
2342 doubletest_difference;
2343 doubletest_difference_error;
2345 Int4nalp=upto_nalp_;
2349 throw error(
"Unexpected error\n",4);
2364nalp_for_lambda_simulation_,
2365inside_simulation_flag_,
2373test_difference_error);
2375 if(!inside_simulation_flag_)
2415 if(test_difference<=test_difference_error)
2436 double*&exp_array_)
2438 if(exp_array_[i_]==-1)
2440 throw error(
"The program is not able to calculate the parameters; rescaling penalties and scoring matrix might help\n",3);
2443 returnexp_array_[i_];
2451 void**alp_distr_errors,
2453 doublelambda_error_,
2459 double&sigma_error_,
2461 double&alpha_I_error_,
2463 double&alpha_J_error_)
2465 boolee_error_flag=
false;
2466 erroree_error(
"",0);
2468 double*exp_array=
NULL;
2470 double*delta_E=
NULL;
2471 double*delta_E_error=
NULL;
2473 double*delta_E_E=
NULL;
2474 double*delta_E_E_error=
NULL;
2477 double*delta_I=
NULL;
2478 double*delta_I_error=
NULL;
2480 double*delta_J=
NULL;
2481 double*delta_J_error=
NULL;
2483 double*delta_I_I=
NULL;
2484 double*delta_I_I_error=
NULL;
2486 double*delta_I_J=
NULL;
2487 double*delta_I_J_error=
NULL;
2489 double*delta_J_J=
NULL;
2490 double*delta_J_J_error=
NULL;
2492 double*cov_J_J=
NULL;
2493 double*cov_J_J_error=
NULL;
2495 double*cov_I_J=
NULL;
2496 double*cov_I_J_error=
NULL;
2498 double*cov_I_I=
NULL;
2499 double*cov_I_I_error=
NULL;
2501 double*cov_E_E=
NULL;
2502 double*cov_E_E_error=
NULL;
2504 const doubledbl_max_log =
log(DBL_MAX);
2514 throw error(
"Unexpected error\n",4);
2520exp_array=
new double[dim+1];
2525 for(
i=0;
i<=dim;
i++)
2527 double tmp=(double)
i*lambda_;
2528 if(
tmp<dbl_max_log)
2530exp_array[
i]=exp(
tmp);
2541delta_E=
new double[nalp_];
2543delta_E_error=
new double[nalp_];
2546delta_E_E=
new double[nalp_];
2548delta_E_E_error=
new double[nalp_];
2551cov_E_E=
new double[nalp_];
2553cov_E_E_error=
new double[nalp_];
2557delta_I=
new double[nalp_];
2559delta_I_error=
new double[nalp_];
2562delta_J=
new double[nalp_];
2564delta_J_error=
new double[nalp_];
2567delta_I_I=
new double[nalp_];
2569delta_I_I_error=
new double[nalp_];
2572delta_I_J=
new double[nalp_];
2574delta_I_J_error=
new double[nalp_];
2577delta_J_J=
new double[nalp_];
2579delta_J_J_error=
new double[nalp_];
2582cov_J_J=
new double[nalp_];
2584cov_J_J_error=
new double[nalp_];
2587cov_I_J=
new double[nalp_];
2589cov_I_J_error=
new double[nalp_];
2592cov_I_I=
new double[nalp_];
2594cov_I_I_error=
new double[nalp_];
2598 for(j=0;j<nalp_;j++)
2601delta_E_error[j]=0.0;
2604delta_E_E_error[j]=0.0;
2607delta_I_error[j]=0.0;
2609delta_J_error[j]=0.0;
2613delta_I_I_error[j]=0.0;
2615delta_I_J_error[j]=0.0;
2617delta_J_J_error[j]=0.0;
2621 for(
i=ind1_;
i<=ind2_;
i++)
2626 for(j=1;j<=nalp_;j++)
2640 doubledelta_I_tmp=(I_j-I_j_1)*
lambda_exp(E_j,exp_array)*weight_j;
2641 doubledelta_J_tmp=(J_j-J_j_1)*
lambda_exp(E_j,exp_array)*weight_j;
2642 doubledelta_E_tmp=(E_j-E_j_1)*
lambda_exp(E_j,exp_array)*weight_j;
2643 doubledelta_E_E_tmp=(E_j-E_j_1)*(E_j-E_j_1)*
lambda_exp(E_j,exp_array)*weight_j;
2646 doubledelta_I_I_tmp=delta_I_tmp*(I_j-I_j_1);
2647 doubledelta_J_J_tmp=delta_J_tmp*(J_j-J_j_1);
2648 doubledelta_I_J_tmp=delta_I_tmp*(J_j-J_j_1);
2653delta_E[j_1]+=delta_E_tmp;
2654delta_E_error[j_1]+=delta_E_tmp*delta_E_tmp;
2656delta_E_E[j_1]+=delta_E_E_tmp;
2657delta_E_E_error[j_1]+=delta_E_E_tmp*delta_E_E_tmp;
2659delta_I[j_1]+=delta_I_tmp;
2660delta_I_error[j_1]+=delta_I_tmp*delta_I_tmp;
2661delta_J[j_1]+=delta_J_tmp;
2662delta_J_error[j_1]+=delta_J_tmp*delta_J_tmp;
2664delta_I_I[j_1]+=delta_I_I_tmp;
2665delta_I_I_error[j_1]+=delta_I_I_tmp*delta_I_I_tmp;
2667delta_I_J[j_1]+=delta_I_J_tmp;
2668delta_I_J_error[j_1]+=delta_I_J_tmp*delta_I_J_tmp;
2670delta_J_J[j_1]+=delta_J_J_tmp;
2671delta_J_J_error[j_1]+=delta_J_J_tmp*delta_J_J_tmp;
2677 doubleind_diff=(double)(ind2_-ind1_+1);
2678 for(j=0;j<nalp_;j++)
2680delta_E[j]/=ind_diff;
2681delta_E_error[j]/=ind_diff;
2682delta_E_error[j]-=delta_E[j]*delta_E[j];
2683delta_E_error[j]/=ind_diff;
2686delta_E_E[j]/=ind_diff;
2687delta_E_E_error[j]/=ind_diff;
2688delta_E_E_error[j]-=delta_E_E[j]*delta_E_E[j];
2689delta_E_E_error[j]/=ind_diff;
2692delta_I[j]/=ind_diff;
2693delta_I_error[j]/=ind_diff;
2694delta_I_error[j]-=delta_I[j]*delta_I[j];
2695delta_I_error[j]/=ind_diff;
2698delta_J[j]/=ind_diff;
2699delta_J_error[j]/=ind_diff;
2700delta_J_error[j]-=delta_J[j]*delta_J[j];
2701delta_J_error[j]/=ind_diff;
2704delta_I_J[j]/=ind_diff;
2705delta_I_J_error[j]/=ind_diff;
2706delta_I_J_error[j]-=delta_I_J[j]*delta_I_J[j];
2707delta_I_J_error[j]/=ind_diff;
2710delta_I_I[j]/=ind_diff;
2711delta_I_I_error[j]/=ind_diff;
2712delta_I_I_error[j]-=delta_I_I[j]*delta_I_I[j];
2713delta_I_I_error[j]/=ind_diff;
2716delta_J_J[j]/=ind_diff;
2717delta_J_J_error[j]/=ind_diff;
2718delta_J_J_error[j]-=delta_J_J[j]*delta_J_J[j];
2719delta_J_J_error[j]/=ind_diff;
2722cov_I_J[j]=delta_I_J[j]-delta_I[j]*delta_J[j];
2723cov_I_I[j]=delta_I_I[j]-delta_I[j]*delta_I[j];
2724cov_J_J[j]=delta_J_J[j]-delta_J[j]*delta_J[j];
2726cov_E_E[j]=delta_E_E[j]-delta_E[j]*delta_E[j];
2729cov_I_J_error[j]=sqrt(delta_I_J_error[j]+cov_I_J_error[j]*cov_I_J_error[j]);
2732cov_I_I_error[j]=sqrt(delta_I_I_error[j]+cov_I_I_error[j]*cov_I_I_error[j]);
2735cov_J_J_error[j]=sqrt(delta_J_J_error[j]+cov_J_J_error[j]*cov_J_J_error[j]);
2738cov_E_E_error[j]=sqrt(delta_E_E_error[j]+cov_E_E_error[j]*cov_E_E_error[j]);
2746 doublebeta1_error=0;
2748 Int4number_of_elements=nalp_;
2750 boolcut_left_tail=
true;
2751 boolcut_right_tail=
false;
2759 doubledelta_I_aver;
2760 doubledelta_I_aver_error;
2764 boolres_was_calculated;
2780res_was_calculated);
2782 if(!res_was_calculated)
2784 throw error(
"The program cannot estimate the parameters; please repeat the calculation2\n",2);
2789 doubledelta_J_aver;
2790 doubledelta_J_aver_error;
2808res_was_calculated);
2810 if(!res_was_calculated)
2812 throw error(
"The program cannot estimate the parameters; please repeat the calculation3\n",2);
2816 doubledelta_E_aver;
2817 doubledelta_E_aver_error;
2833res_was_calculated);
2835 if(!res_was_calculated)
2837 throw error(
"The program cannot estimate the parameters; please repeat the calculation4\n",2);
2840 doublecov_I_I_aver;
2841 doublecov_I_I_aver_error;
2843 doublecov_I_J_aver;
2844 doublecov_I_J_aver_error;
2846 doublecov_J_J_aver;
2847 doublecov_J_J_aver_error;
2849 doublecov_E_E_aver;
2850 doublecov_E_E_aver_error;
2867res_was_calculated);
2869 if(!res_was_calculated)
2871 throw error(
"The program cannot estimate the parameters; please repeat the calculation5\n",2);
2888res_was_calculated);
2890 if(!res_was_calculated)
2892 throw error(
"The program cannot estimate the parameters; please repeat the calculation6\n",2);
2909res_was_calculated);
2911 if(!res_was_calculated)
2913 throw error(
"The program cannot estimate the parameters; please repeat the calculation7\n",2);
2930res_was_calculated);
2932 if(!res_was_calculated)
2934 throw error(
"The program cannot estimate the parameters; please repeat the calculation7_E\n",2);
2939 if(delta_E_aver<=0)
2941 throw error(
"FSC parameters estimations failed\n",2);
2946a_I_=delta_I_aver/delta_E_aver;
2948a_J_=delta_J_aver/delta_E_aver;
3000ee_error_flag=
true;
3006ee_error_flag=
true;
3007ee_error=
error(
"Internal error in the program\n",4);
3011 delete[]exp_array;exp_array=
NULL;
3013 delete[]delta_E;delta_E=
NULL;
3014 delete[]delta_E_error;delta_E_error=
NULL;
3015 delete[]delta_E_E;delta_E_E=
NULL;
3016 delete[]delta_E_E_error;delta_E_E_error=
NULL;
3017 delete[]delta_I;delta_I=
NULL;
3018 delete[]delta_I_error;delta_I_error=
NULL;
3019 delete[]delta_J;delta_J=
NULL;
3020 delete[]delta_J_error;delta_J_error=
NULL;
3022 delete[]delta_I_J;delta_I_J=
NULL;
3023 delete[]delta_I_J_error;delta_I_J_error=
NULL;
3024 delete[]delta_J_J;delta_J_J=
NULL;
3025 delete[]delta_J_J_error;delta_J_J_error=
NULL;
3026 delete[]delta_I_I;delta_I_I=
NULL;
3027 delete[]delta_I_I_error;delta_I_I_error=
NULL;
3029 delete[]cov_I_J;cov_I_J=
NULL;
3030 delete[]cov_I_J_error;cov_I_J_error=
NULL;
3031 delete[]cov_J_J;cov_J_J=
NULL;
3032 delete[]cov_J_J_error;cov_J_J_error=
NULL;
3033 delete[]cov_I_I;cov_I_I=
NULL;
3034 delete[]cov_I_I_error;cov_I_I_error=
NULL;
3035 delete[]cov_E_E;cov_E_E=
NULL;
3036 delete[]cov_E_E_error;cov_E_E_error=
NULL;
3046 doubledelta_I_aver_,
3047 doubledelta_I_aver_error_,
3048 doubledelta_J_aver_,
3049 doubledelta_J_aver_error_,
3050 doubledelta_E_aver_,
3051 doubledelta_E_aver_error_,
3052 doublecov_E_E_aver_,
3053 doublecov_E_E_aver_error_,
3054 doublecov_I_J_aver_,
3055 doublecov_I_J_aver_error_,
3057 double&alpha_error_)
3059 doublenom1_1=delta_I_aver_*delta_J_aver_;
3060 doublenom2_2=delta_E_aver_*delta_E_aver_;
3062 doubleden=nom2_2*delta_E_aver_;
3064 doublenom1=nom1_1*cov_E_E_aver_;
3065 doublenom2=nom2_2*cov_I_J_aver_;
3067alpha_=(nom1+nom2)/den;
3089 Int4starting_point,
3094 void**alp_distr_errors,
3096 doublelambda_error_,
3100 boolee_error_flag=
false;
3101 erroree_error(
"",0);
3104 double*P_errors=
NULL;
3105 double*values_P_ratio=
NULL;
3106 double*errors_P_ratio=
NULL;
3109 double*E_errors=
NULL;
3111 double*E_T_beta=
NULL;
3112 double*E_T_beta_errors=
NULL;
3120 Int4total_number_of_ALP=nalp_;
3122 if(total_number_of_ALP<1)
3124 throw error(
"Unexpected error\n",4);
3132 P=
new double[total_number_of_ALP+1];
3134P_errors=
new double[total_number_of_ALP+1];
3141 for(j=1;j<=total_number_of_ALP;j++)
3149 for(
i=0;
i<=
tmp->d_dim;
i++)
3151 P[j]+=
tmp->d_elem[
i];
3152P_errors[j]+=tmp_errors->
d_elem[
i];
3160values_P_ratio=
new double[total_number_of_ALP];
3162errors_P_ratio=
new double[total_number_of_ALP];
3167 for(j=0;j<total_number_of_ALP;j++)
3169values_P_ratio[j]=
P[j+1]/
P[j];
3176 doublebeta1_error=0;
3178 Int4number_of_elements=total_number_of_ALP;
3180 boolcut_left_tail=
true;
3181 boolcut_right_tail=
false;
3190 doubleP_beta_inf_error=0;
3192 boolres_was_calculated;
3196number_of_elements-starting_point,
3197values_P_ratio+starting_point,
3198errors_P_ratio+starting_point,
3208res_was_calculated);
3213 if(!res_was_calculated)
3215 throw error(
"The program cannot estimate the parameters; please repeat the calculation\n",2);
3218P_beta_inf=1-P_beta_inf;
3222 E=
new double[total_number_of_ALP+1];
3224E_errors=
new double[total_number_of_ALP+1];
3227E_T_beta=
new double[total_number_of_ALP+1];
3229E_T_beta_errors=
new double[total_number_of_ALP+1];
3237E_T_beta_errors[0]=0;
3242 for(j=1;j<=total_number_of_ALP;j++)
3251E_T_beta_errors[j]=0;
3254 for(
i=0;
i<=
tmp->d_dim;
i++)
3256 doubletmp_double=exp(lambda_*(
double)
i);
3257 E[j]+=tmp_double*
tmp->d_elem[
i];
3258E_errors[j]+=tmp_double*tmp_double*tmp_errors->
d_elem[
i];
3260tmp_double=(double)
i*exp(lambda_*(
double)
i);
3261E_T_beta[j]+=tmp_double*
tmp->d_elem[
i];
3262E_T_beta_errors[j]+=tmp_double*tmp_double*tmp_errors->
d_elem[
i];
3272 doubleE_aver_error;
3274 doubleE_T_beta_diff_aver;
3275 doubleE_T_beta_diff_aver_error;
3278 if(total_number_of_ALP==1)
3281E_aver_error=E_errors[1];
3283E_T_beta_diff_aver=E_T_beta[1]-E_T_beta[0];
3284E_T_beta_diff_aver_error=E_T_beta_errors[1];
3289 Int4number_of_elements=total_number_of_ALP;
3291 boolcut_left_tail=
true;
3292 boolcut_right_tail=
false;
3298 doublebeta1_error=0;
3300 boolres_was_calculated;
3304number_of_elements-starting_point,
3305 E+1+starting_point,
3306E_errors+1+starting_point,
3316res_was_calculated);
3319 if(!res_was_calculated)
3321 throw error(
"The program cannot estimate the parameters; please repeat the calculation\n",2);
3325number_of_elements=total_number_of_ALP;
3330number_of_elements-starting_point,
3331E_T_beta+1+starting_point,
3332E_T_beta_errors+1+starting_point,
3342res_was_calculated);
3346 if(!res_was_calculated)
3348 throw error(
"The program cannot estimate the parameters; please repeat the calculation\n",2);
3352E_T_beta_diff_aver=beta1;
3353E_T_beta_diff_aver_error=beta1_error;
3359 doubleexp_lambda_error=exp(-lambda_)*lambda_error_;
3360 doubleexp_lambda=(1-exp(-lambda_));
3364 doubleden=(1-exp(-lambda_))*E_T_beta_diff_aver;
3367 doubleE_aver_sqr=E_aver*E_aver;
3370 doublenom=P_beta_inf*E_aver_sqr;
3381ee_error_flag=
true;
3387ee_error_flag=
true;
3388ee_error=
error(
"Internal error in the program\n",4);
3393 delete[]values_P_ratio;values_P_ratio=
NULL;
3394 delete[]errors_P_ratio;errors_P_ratio=
NULL;
3398 delete[]P_errors;P_errors=
NULL;
3401 delete[]E_T_beta;E_T_beta=
NULL;
3402 delete[]E_errors;E_errors=
NULL;
3403 delete[]E_T_beta_errors;E_T_beta_errors=
NULL;
3416 void**&alp_distr_errors,
3423 throw error(
"Unexpected error\n",4);
3427alp_distr_errors=
NULL;
3432 void**alp_distr_tmp=
NULL;
3433 void**alp_distr_errors_tmp=
NULL;
3435 Int4allocation_dim=nalp;
3436 Int4allocation_dim_tmp=nalp+1;
3438 boolee_error_flag=
false;
3439 erroree_error(
"",0);
3448alp_distr_tmp=
new void*[nalp+1];
3451alp_distr_errors_tmp=
new void*[nalp+1];
3454 for(
i=0;
i<=nalp;
i++)
3456alp_distr_tmp[
i]=
NULL;
3457alp_distr_errors_tmp[
i]=
NULL;
3461 for(
i=1;
i<=nalp-1;
i++)
3463alp_distr_tmp[
i]=alp_distr[
i];
3464alp_distr_errors_tmp[
i]=alp_distr_errors[
i];
3467 delete[]alp_distr;alp_distr=
NULL;
3468 delete[]alp_distr_errors;alp_distr_errors=
NULL;
3470alp_distr=alp_distr_tmp;alp_distr_tmp=
NULL;
3471alp_distr_errors=alp_distr_errors_tmp;alp_distr_errors_tmp=
NULL;
3473allocation_dim=nalp+1;
3485 for(
i=ind1_;
i<=ind2_;
i++)
3497 doubleind_diff=(double)(ind2_-ind1_+1);
3502 for(j=0;j<=
tmp->d_dim;j++)
3504 tmp->d_elem[j]/=ind_diff;
3505tmp_errors->
d_elem[j]/=ind_diff;
3506tmp_errors->
d_elem[j]-=
tmp->d_elem[j]*
tmp->d_elem[j];
3507tmp_errors->
d_elem[j]/=ind_diff;
3512ee_error_flag=
true;
3518ee_error_flag=
true;
3519ee_error=
error(
"Internal error in the program\n",4);
3529 for(
i=0;
i<=allocation_dim_tmp;
i++)
3533 delete[]alp_distr_tmp;alp_distr_tmp=
NULL;
3536 if(alp_distr_errors_tmp)
3538 for(
i=0;
i<=allocation_dim_tmp;
i++)
3542 delete[]alp_distr_errors_tmp;alp_distr_errors_tmp=
NULL;
3547 for(
i=0;
i<=allocation_dim;
i++)
3551 delete[]alp_distr;alp_distr=
NULL;
3554 if(alp_distr_errors)
3556 for(
i=0;
i<=allocation_dim;
i++)
3560 delete[]alp_distr_errors;alp_distr_errors=
NULL;
3579 throw error(
"Unexpected error\n",4);
3581 boolee_error_flag=
false;
3582 erroree_error(
"",0);
3593 doublesum_of_weights=0;
3597 for(
i=ind1_;
i<=ind2_;
i++)
3602sum_of_weights+=weight_tmp;
3603M_aver+=alp_tmp*weight_tmp;
3617 for(
i=0;
i<=diff->
d_dim;
i++)
3619den+=exp(-lambda_*(
double)
i)*diff->
d_elem[
i];
3623 if(den<=0||sum_of_weights<=0)
3625 throw error(
"The program is not able to estimate the parameters\n",2);
3629M_aver/=sum_of_weights;
3632 doubledelta_val=den*eps_K_*(1-exp(-lambda_));
3635 for(
i=diff->
d_dim;
i>=0;
i--)
3637 if(exp(-lambda_*(
double)
i)*diff->
d_elem[
i]>delta_val)
3650 deletediff;diff=
NULL;
3651 if(M_aver<diff_opt)
3660ee_error_flag=
true;
3666ee_error_flag=
true;
3667ee_error=
error(
"Internal error in the program\n",4);
3672 deletediff;diff=
NULL;
3687 Int4current_level_,
3688 Int4&recommended_level_,
3695 throw error(
"Unexpected error\n",4);
3701 boolee_error_flag=
false;
3702 erroree_error(
"",0);
3716 doublesum_of_weights=0;
3717 doublesum_of_weights_error=0;
3722 for(
i=ind1_;
i<=ind2_;
i++)
3725 Int4&alp_tmp=alp_obj_tmp->
d_M;
3727sum_of_weights+=weight_tmp;
3728sum_of_weights_error+=weight_tmp*weight_tmp;
3729M_aver+=alp_tmp*weight_tmp;
3737 double tmp=cells_counts->
d_elem[k-cells_counts->
d_ind0]*weight_tmp;
3745 doubletmp2=(double)(ind2_-ind1_+1);
3747sum_of_weights/=tmp2;
3748sum_of_weights_error/=tmp2;
3749sum_of_weights_error-=sum_of_weights*sum_of_weights;
3750sum_of_weights_error/=tmp2;
3755 for(
i=0;
i<=diff->
d_dim;
i++)
3758diff_error->
d_elem[
i]/=tmp2;
3760diff_error->
d_elem[
i]/=tmp2;
3767 for(
i=0;
i<=diff->
d_dim;
i++)
3769 double tmp=exp(-lambda_*(
double)
i);
3780 if(den<=0||sum_of_weights<=0)
3782 throw error(
"The program is not able to estimate the parameters\n",2);
3785K_C_=sum_of_weights/den;
3790M_aver/=sum_of_weights;
3793 doubledelta_val=den*eps_K_*(1-exp(-lambda_));
3796 for(
i=diff->
d_dim;
i>=0;
i--)
3798 if(exp(-lambda_*(
double)
i)*diff->
d_elem[
i]>delta_val)
3805 deletediff;diff=
NULL;
3806 deletediff_error;diff_error=
NULL;
3808 if(M_aver-diff_opt<current_level_)
3810recommended_level_=(
Int4)floor(M_aver-diff_opt*1.1);
3811diff_opt_=(
Int4)ceil(M_aver-recommended_level_);
3814recommended_level_=current_level_;
3815diff_opt_=(
Int4)ceil(M_aver-recommended_level_);
3820ee_error_flag=
true;
3826ee_error_flag=
true;
3827ee_error=
error(
"Internal error in the program\n",4);
3834 deletediff;diff=
NULL;
3835 deletediff_error;diff_error=
NULL;
3846 boolcheck_the_criteria_,
3849 bool&inside_simulation_flag_,
3853 void**alp_distr_errors,
3855 double&lambda_error_,
3856 double&test_difference_,
3857 double&test_difference_error_)
3863 throw error(
"Unexpected error\n",4);
3871tmp_struct.
d_nalp=nalp;
3876 void* func_pointer=&tmp_struct;
3879 Int4n_partition=30;
3881std::vector<double> res;
3897inside_simulation_flag_=
true;
3900inside_simulation_flag_=
false;
3910 doublef1=func(lambda_,func_pointer);
3914 doubleslope_error=tmp_struct.
d_f_error;
3920 doubledelta_lambda=lambda_/100.0;
3921 doublef2=func(lambda_+delta_lambda,func_pointer);
3925 if(delta_lambda==0||f1==f2)
3931 doublederivative=(f2-f1)/delta_lambda;
3932lambda_error_=
fabs(slope_error/derivative);
3935 if(!check_the_criteria_)
3958test_difference_=
fabs((sum1-sum2)/max_sum);
3959test_difference_error_=0.5*(sum1_error+sum2_error)/max_sum;
3963test_difference_=-1;
3964test_difference_error_=0;
3976 conststd::vector<double> &res_tmp_,
3979 if(res_tmp_.size()==0)
3981 throw error(
"Error in alp_sim::get_root - the equation does not have roots\n",2);
3987 doubled1=
fabs(point_-res_tmp_[0]);
3988 for(
i=1;
i<(
Int4)res_tmp_.size();
i++)
3990 doubled2=
fabs(point_-res_tmp_[
i]);
4009 double*expect_errors=
NULL;
4011 boolee_error_flag=
false;
4012 erroree_error(
"",0);
4024 expect=
new double[nalp];
4026expect_errors=
new double[nalp];
4031 throw error(
"Unexpected error\n",4);
4037 for(k=1;k<=nalp;k++)
4046 for(j=0;j<=
tmp->d_dim;j++)
4048 if(
tmp->d_elem[j] <= 0)
4052 doubleexp_tmp=exp(lambda_*j);
4053 val+=exp_tmp*
tmp->d_elem[j];
4054val_error+=exp_tmp*exp_tmp*tmp_errors->
d_elem[j];
4058expect_errors[k-1]=val_error;
4070 for(k=0;k<nalp;k++)
4072 if(expect_errors[k]!=0)
4074 tmp+=1.0/(expect_errors[k]*expect_errors[k]);
4081 for(k=nalp-1;k>=0;k--)
4083 if(expect_errors[k]!=0)
4085 tmp1+=1.0/(expect_errors[k]*expect_errors[k]);
4100tmp_struct->
d_f_error=expect_errors[0];
4102 delete[]expect_errors;expect_errors=
NULL;
4108 Int4number_of_elements=nalp;
4109 boolcut_left_tail=
true;
4110 boolcut_right_tail=
false;
4119 boolres_was_calculated;
4135res_was_calculated);
4137 if(!res_was_calculated)
4139 throw error(
"The program cannot estimate the parameters; please repeat the calculation\n",2);
4144 delete[]expect_errors;expect_errors=
NULL;
4152ee_error_flag=
true;
4158ee_error_flag=
true;
4159ee_error=
error(
"Internal error in the program\n",4);
4167 delete[]expect_errors;expect_errors=
NULL;
importance_sampling * d_is
struct_for_randomization * d_rand_all
static double round(const double &x_)
static T Tmax(T i_, T j_)
static void get_current_time(double &seconds_)
static T Tmin(T i_, T j_)
Int4 d_minimum_realizations_number
static Int4 random_long(double value_, Int4 dim_)
static void assert_mem(void *pointer_)
double d_memory_size_in_MB
Int4 d_realizations_number2
static double sqrt_for_errors(double x_)
static double error_of_the_product(double v1_, double v1_error_, double v2_, double v2_error_)
static double error_of_the_sum(double v1_, double v1_error_, double v2_, double v2_error_)
static void robust_regression_sum_with_cut_LSM(Int4 min_length_, Int4 number_of_elements_, double *values_, double *errors_, bool cut_left_tail_, bool cut_right_tail_, double y_, double &beta0_, double &beta1_, double &beta0_error_, double &beta1_error_, Int4 &k1_opt_, Int4 &k2_opt_, bool &res_was_calculated_)
static void robust_regression_sum_with_cut_LSM_beta1_is_defined(Int4 min_length_, Int4 number_of_elements_, double *values_, double *errors_, bool cut_left_tail_, bool cut_right_tail_, double y_, double &beta0_, double beta1_, double &beta0_error_, double beta1_error_, Int4 &k1_opt_, Int4 &k2_opt_, bool &res_was_calculated_)
static void find_tetta_general(function_type *func_, void *func_pointer_, double a_, double b_, Int4 n_partition_, double eps_, std::vector< double > &res_)
static double error_of_the_ratio(double v1_, double v1_error_, double v2_, double v2_error_)
static double round_doulbe(double val_, Int4 digits_)
static double function_for_lambda_calculation(double lambda_, void *data_)
void output_main_parameters2m_new(double time_, Int4 nalp, Int4 nalp_for_lambda_simulation, Int4 level, Int4 M_min_, bool &inside_simulation_flag, Int4 final_realizations_number_lambda_, Int4 final_realizations_number_killing_)
array_positive< double > * d_lambda_tmp_errors
void get_minimal_simulation(Int4 ind1_, Int4 ind2_, Int4 &M_min_, Int4 &nalp_, Int4 &nalp_lambda_, bool C_calculation_, bool check_time_flag_)
bool check_K_criterion_during_killing(Int4 ind1_, Int4 ind2_, double lambda_, double eps_K_, Int4 current_level_, Int4 &recommended_level_, Int4 &diff_opt_, double &K_C_, double &K_C_error_)
array_positive< double > * d_C_tmp
bool the_criterion(Int4 upto_nalp_, Int4 &nalp_for_lambda_simulation_, Int4 ind1_, Int4 ind2_, void **&alp_distr, void **&alp_distr_errors, Int4 &M_min_, bool &M_min_flag_, bool &nalp_flag_, bool &inside_simulation_flag_, bool C_calculation_)
static double lambda_exp(Int4 &i_, double *&exp_array_)
static void error_in_calculate_main_parameters2m(double C, double &C_error, double C_mult2, double C_mult2_error)
void randomize_realizations_ind(Int4 ind1_, Int4 ind2_)
static double relative_error_in_percents(double val_, double val_error_)
void kill(bool check_time_, Int4 ind1_, Int4 ind2_, Int4 M_min_, double lambda_, double eps_K_, double &K_C_, double &K_C_error_, Int4 &level_, Int4 &diff_opt_)
vector< double > m_AlphaJSbs
static double get_root(const std::vector< double > &res_tmp_, double point_)
array_positive< alp * > * d_alp_obj
void calculate_C(Int4 starting_point, Int4 nalp_, Int4 ind1_, Int4 ind2_, void **alp_distr, void **alp_distr_errors, double lambda_, double lambda_error_, double &C_, double &C_error_)
void calculate_main_parameters2m(Int4 final_realizations_number_lambda_, Int4 final_realizations_number_killing_, Int4 nalp, Int4 nalp_for_lambda_simulation, Int4 level, bool &inside_simulation_flag, double &lambda, double &lambda_error, double &test_difference, double &test_difference_error, double &C, double &C_error, double &C2, double &C2_error, double &C4, double &C4_error, double &K_C, double &K_C_error, double &a_I, double &a_I_error, double &a_J, double &a_J_error, double &sigma, double &sigma_error, double &alpha_I, double &alpha_I_error, double &alpha_J, double &alpha_J_error, double &K, double &K_error, bool &flag_)
void calculate_lambda(bool check_the_criteria_, Int4 nalp_, Int4 &nalp_thr_, bool &inside_simulation_flag_, Int4 ind1_, Int4 ind2_, void **alp_distr, void **alp_distr_errors, double &lambda_, double &lambda_error_, double &test_difference_, double &test_difference_error_)
void get_and_allocate_alp_distribution(Int4 ind1_, Int4 ind2_, void **&alp_distr, void **&alp_distr_errors, Int4 nalp)
void calculate_FSC(Int4 nalp_, Int4 ind1_, Int4 ind2_, void **alp_distr, void **alp_distr_errors, double lambda_, double lambda_error_, double &a_I_, double &a_I_error_, double &a_J_, double &a_J_error_, double &sigma_, double &sigma_error_, double &alpha_I_, double &alpha_I_error_, double &alpha_J_, double &alpha_J_error_)
void generate_random_permulation(Int4 *perm_, Int4 dim_)
vector< double > m_SigmaSbs
void randomize_realizations(Int4 final_realizations_number_lambda_, Int4 final_realizations_number_killing_)
bool check_K_criterion(Int4 nalp_, Int4 ind1_, Int4 ind2_, double lambda_, double eps_K_, Int4 &M_min_)
vector< double > m_AlphaISbs
void alpha_calculation(double delta_I_aver_, double delta_I_aver_error_, double delta_J_aver_, double delta_J_aver_error_, double delta_E_aver_, double delta_E_aver_error_, double cov_E_E_aver_, double cov_E_E_aver_error_, double cov_I_J_aver_, double cov_I_J_aver_error_, double &alpha_, double &alpha_error_)
alp_sim(alp_data *alp_data_)
vector< double > m_LambdaSbs
static Int4 get_number_of_subsimulations(Int4 number_of_realizations_)
array_positive< double > * d_C_tmp_errors
array_positive< double > * d_lambda_tmp
void get_single_realization(bool check_time_, Int4 M_min_, Int4 nalp_, bool killing_flag_, Int4 level_, Int4 diff_opt_, alp *&obj_, bool &sucess_flag_, double &d_eps_)
void simulate_alp_upto_the_given_level(Int4 M_min_)
void partially_release_memory()
array_positive< Int4 > * d_H_J
array_positive< Int4 > * d_alp
void kill_upto_level(Int4 M_min_, Int4 M_level_)
array_positive< double > * d_alp_weights
bool d_single_realiztion_calculation_flag
array< Int4 > * d_cells_counts
array_positive< Int4 > * d_H_I
void simulate_alp_upto_the_given_number(Int4 nalp_)
void increase_elem_by_x(Int4 ind_, T x_)
void set_elem(Int4 ind_, T elem_)
static const char * expect
int32_t Int4
4-byte (32-bit) signed integer
double lambda(size_t dimMatrix_, const Int4 *const *scoreMatrix_, const double *q_)
double function_type(double x_, void *func_number_)
bool d_calculate_alp_number
void ** d_alp_distr_errors
Int4 d_total_realizations_number_with_ALP
vector< Int4 > d_preliminary_realizations_numbers_ALP
Int4 d_total_realizations_number_with_killing
vector< Int4 > d_preliminary_realizations_numbers_killing
vector< Int4 > d_first_stage_preliminary_realizations_numbers_ALP
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4