Example #1
0
void a1(void)
{
  int N = 3,
      M = 1;
  data *dat = (data*) malloc(N*sizeof(data));
  dat[0] = (data) { .val = 299793.0, .delta = 2.0 };
  dat[1] = (data) { .val = 299792.0, .delta = 4.5 };
  dat[2] = (data) { .val = 299782.0, .delta = 25.0 };

  double avg   = average_value(N, dat),
         sig_i = sigma_square_intern(N, dat),
         sig_e = sigma_square_extern(M, N, dat);

  printf("c_avg   = %f\n", avg);
  printf("sigma_i = %f\n", sqrt(sig_i));
  printf("sigma_e = %f\n", sqrt(sig_e));
}

void a2(void)
{
  int N;
  measurement *m = read_measurements("dat/a2.txt", &N);
  double a, b, sig_a, sig_b, chi;

  printf("\nLinear regression I = b*U:\n");
  linear_regression(N, m, NULL, &b, NULL, &sig_b);
  chi = chi_square_(N, m, 0, b);
  printf("b = %f +/- %f, chi = %f\n", b, sqrt(sig_b)/2, sqrt(chi));

  printf("\nLinear regression I = a + b*U:\n");
  linear_regression(N, m, &a, &b, &sig_a, &sig_b);
  chi = chi_square_(N, m, a, b);
  printf("a = %f +/- %f, b = %f +/- %f, chi = %f\n", a, sqrt(sig_a)/2, b, sqrt(sig_b)/2, sqrt(chi));
}

void a3(void)
{
  // order of polynoms + 1
  int N[5] = {3, 5, 9, 13, 17};

  // output function (%i = current N)
  char *output_p_gp  = "results/a3/poly-%i.gp",
       *output_p_txt = "results/a3/poly-%i.txt",
       *output_l_dat = "results/a3/legendre-%i.dat",
       *output_l_txt = "results/a3/legendre-%i.txt";

  // read data
  matrix dat = read_data("dat/a3.txt");

  int i;
  for (i = 0; i < sizeof(N)/sizeof(int); i++)
  {
    //
    // use polynoms
    //
    matrix F = init_F(dat, N[i], &polynom);
    vector b = init_b(dat, N[i], &polynom);

    // solve system of linear equations
    vector x = solve_gauss(F,b);

    char fp[100];

    // parameter output
    snprintf(fp, sizeof(fp), output_p_txt, N[i]-1);
    printf("Opening file %s...\n", fp);
    FILE *file = fopen(fp, "w+");
    vector_fprint(file, x);
    fclose(file);

    // gnuplot output
    snprintf(fp, sizeof(fp), output_p_gp, N[i]-1);
    printf("Opening file %s...\n", fp);
    file = fopen(fp, "w+");
    fprintf(file, "plot ");
    int k;
    for (k = 0; k < x.N; k++)
    {
      fprintf(file, "%e * x**%i", VectorGET(x,k), k);
      if (k < x.N-1)
        fprintf(file, " + ");
    }
    fprintf(file, "\n");
    fclose(file);

    //
    // Use legendre polynoms
    //
    F = init_F(dat, N[i], &legendre_polynom);
    b = init_b(dat, N[i], &legendre_polynom);

    // solve system of linear equations
    x = solve_gauss(F,b);

    // parameter output
    snprintf(fp, sizeof(fp), output_l_txt, N[i]-1);
    printf("Opening file %s...\n", fp);
    file = fopen(fp, "w+");
    vector_fprint(file, x);

    // "plot" data for legendre polynoms
    snprintf(fp, sizeof(fp), output_l_dat, N[i]-1);
    printf("Opening file %s...\n", fp);
    file = fopen(fp, "w+");
    double r  = -1.0,
           dr = 0.01;
    while (r <= 1.0)
    {
      double sum = 0;
      for (k = 0; k < x.N; k++)
      {
        sum += VectorGET(x,k) * legendre_polynom(k,r);
      }
      fprintf(file, "%f %e\n", r, sum);
      r += dr;
    }
    fclose(file);
    file = NULL;
  }
}

int main()
{

  //a1();
  //a2();
  a3();

  return 0;
}
int main(void){


	int i,j;
	  //r1: Ag(0) decay, r2: IC(2) formation from IgM(4), r3:IC(2) formation from IgG(3), r4: IgG(3) prod, r5: Tfh(5) rep
	double V[num_RXN][Type_spe]= {{-1,0,0,0,0,0},{-1,0,1,0,-1,0},{-1,0,1,-1,0,0},{0,-1,0,1,0,0},{0,0,0,0,0,a-1}}; /*stoichiometry matrix */
	double C[num_RXN]= {1,(8.64E7)/Volume,0,900,0};      /* rate constant matrix c */
	double V_s[num_RXN][Type_spe]={{0.}};
	double C_s[num_RXN]= {0.};
	double H_s[num_RXN]= {0.}; /*Permutation matrix H  */
	//Ag,B*,IC,IgG,IgM,Tfh
	double S[Type_spe][Type_dose]={{0,0,0,0},{1E5,1E5,1E5,1E5},{0,0,0,0},{0,0,0,0},{1E13,1E13,1E13,1E13},{0,0,0,0}};  /* state_matrix S: update once every */
	//double S[Type_spe][Type_dose]={{0.}};  /* state_matrix S: update once every */
	double P[num_RXN]={0.}; /* propensity */
	double F[dose_per][Type_dose]={{0.}};
	double	t_range[1]={0};
	double t_curr= 0.;
	char * File_name[]= {"State_EI.txt","State_ED.txt","State_Const.txt","State_PB.txt"};

	for (i = 0; i < Type_dose; i++)
	{
		outputFiles[i] = fopen(File_name[i], "a+");
	    printf("%s\n",File_name[i]);
	}

//	/*Open up dosing schedule file, state files  */
//	State_EI=fopen("State_EI.txt", "w");
//	State_ED=fopen("State_ED.txt", "a+");
//	State_Const=fopen("State_Const.txt", "a+");
//	State_PB=fopen("State_PB.txt", "a+");


	/*Initialize F*/
	init_F(F);

	/* initialize V_s,C_s,H_s  */
	init_V_C(V_s,C_s,C,V);

//------------------ test set start-------------------------------------------------------------------- //

//	for (j=0;j<Type_dose;j++) /* Operate Gillespie for 1 day time domain*/
//		{
	i=0;
	j=0;

	Calc_H(S,H_s,j);

	fprintf(outputFiles[j],"%s\t %s\t %s\t %s\t %s\t %s\t %s\n","time","Ag","B","IC","IgM","IgG","Tfh");

			/* for t<= 6 */
		while(i<dose_per)
			{
			S[0][j]+= F[i][j]; /* Update S[0] by respective dosing by reading F*/

			printf("main.S\n %e\n",S[0][j]);
			Calc_H(S,H_s,j);
			t_range[0]=0;
			t_range[1]=t;
			printf("%f",t_range[1]);
			Gillespie_Fast(t_range,V_s,C_s,H_s,S,P,outputFiles[j],num_RXN_init,j); /* UPdate S*/
			i=i+1;
			}
//			t_curr= dose_per;

			/* for t> 6 */
//				while(t_curr<= t[1])
//					{
//						Calc_H(*S,*H_s); /* Update H_s from update S */
//						Calc_C_s(*C_s);
//						t_range[0]=0; /*should be relevant time point*/
//						t_range[1]=1; /*should be relevant time point*/
//						Gillespie_Fast(*t_range,*V_s,*C_s,*H_s,*S,*P,File_name[j],num_RXN);
//						t_curr= t_range[1];
//					}
//		}

//------------------ test set end--------------------------------------------------------------------- //


//	original code
//
//		for (j=0;j<Type_dose;j++) /* Operate Gillespie for 1 day time domain*/
//			{
//			Calc_H(S,H_s,j);
//
//				/* for t<= 6 */
//				for(i=0;i<dose_per;i++)
//					{
//						S[0][j]+= F[i][j]; /* Update S[0] by respective dosing by reading F*/
//						Calc_H(S,H_s,j);
//						t_range[0]=i;
//						t_range[1]=i+1;
//						Gillespie_Fast(*t_range,V_s,C_s,H_s,S,P,File_name[j],num_RXN_init,j); /* UPdate S*/
//					}
//				t_curr= dose_per;
//
//				/* for t> 6 */
////				while(t_curr<= t[1])
////					{
////						Calc_H(*S,*H_s); /* Update H_s from update S */
////						Calc_C_s(*C_s);
////						t_range[0]=0; /*should be relevant time point*/
////						t_range[1]=1; /*should be relevant time point*/
////						Gillespie_Fast(*t_range,*V_s,*C_s,*H_s,*S,*P,File_name[j],num_RXN);
////						t_curr= t_range[1];
////					}
//			}


   fclose(State_EI);
   fclose(State_ED);
   fclose(State_Const);
   fclose(State_PB);

	   return (0);
}