HiggsPlot::HiggsPlot(TString NameFile) { SetMasses(1); // Charged B // From hep-ph/0908.3470 Vub[0] = 0.00352; Vub[1] = 0.00011; // Inclusive Vub with BNLP calculation (2013) Vub[0] = 0.0044; Vub[1] = 0.00025; fB[0] = 0.196; fB[1] = 0.011; // [GeV] // Coefficients found with RateCalc::Errors with 10,000 variations double Coef0[3][3] = {{0.2971, -3.2475, 16.9180}, {0.0165, 0.3152, 1.9629}, {-0.9279, -0.9567, 0.7891}}; double Coef1[3][3] = {{0.2520, -0.2298, 0.6427}, {0.0028, 0.0289, 0.0846}, {-0.9457, -0.9854, 0.9036}}; for(int isDs=0; isDs<2; isDs++) for(int isError=0; isError<3; isError++) for(int iC=0; iC<3; iC++) if(isDs) RDCoef[isDs][isError][iC] = Coef1[isError][iC]; else RDCoef[isDs][isError][iC] = Coef0[isError][iC]; _isgS = 1; _varyRD = 1; ReadRD(NameFile); DecayName[0] = "TauNu"; DecayName[1] = "DTauNu"; DecayName[2] = "DsTauNu"; DecayName[3] = "DDsTauNu"; }
/* Diese Funktion erstellt ein Nahrungsnetz nach dem Nischenmodell für S Spezies auf Y Lebensräumen, die über die Kopplungskonstante d verbunden sind. T gibt die Topologie an (siehe SetTopology). Rnum ist die Anzahl der Ressource(n) und Rsize die Startgröße der Ressource(n). C beschreibt die Konnektivität des Netzes, wobei CRange die erlaubte max. Abweichung von C angibt. */ gsl_vector *SetNicheNetwork(struct foodweb nicheweb, struct resource res, gsl_rng* rng1, const gsl_rng_type* rng1_T){ int len = ((nicheweb.Rnum+nicheweb.S)*(nicheweb.S+nicheweb.Rnum)+1+nicheweb.Y*nicheweb.Y+1+(nicheweb.Rnum+nicheweb.S)+nicheweb.S+3*(nicheweb.S)); // Länge des Rückabewerts double C = 0.15; // vorgegebenes C double CRange = 0.01; double Rsize = res.size; gsl_vector *result = gsl_vector_calloc(len); gsl_matrix *NV = gsl_matrix_calloc(3, nicheweb.S); gsl_matrix *A = gsl_matrix_calloc((nicheweb.Rnum+nicheweb.S),(nicheweb.S+nicheweb.Rnum)); gsl_matrix *mas = gsl_matrix_calloc(2, (nicheweb.Rnum+nicheweb.S)); printf("Erzeuge Nischennetz mit %i Spezies (davon gewünschte Anzahl basaler Spezies %i) auf %i Patches. Topologie-Marker %i.\n", nicheweb.S, nicheweb.B, nicheweb.Y, nicheweb.T); //--Zufallszahlengenerator initialisieren-------------------------------------------------------------------------------- // const gsl_rng_type *rng1_T; // **** // gsl_rng *rng1; // initialize random number generator // gsl_rng_env_setup(); // ermöglicht Konsolenparameter // rng1_T = gsl_rng_default; // default random number generator (so called mt19937) // gsl_rng_default_seed = 0; // default seed for rng // //gsl_rng_default_seed = ((unsigned)time(NULL)); // random starting seed for rng // //gsl_rng_default_seed = (rdtsc()); // rng1 = gsl_rng_alloc(rng1_T); //--Alle benötigten Daten ausrechnen-------------------------------------------------------------------------------------- int flag = 1; int i = 0; while(flag == 1) { flag = 0; NV = SetNicheValues(nicheweb, C, rng1, rng1_T); // Nischenwerte NOTIZ: In den gsl Objekten liegen floats! A = SetFeedingMatrix(nicheweb, NV, C, CRange); // interaction matrix int links = CountLinks(A, (nicheweb.Rnum+nicheweb.S)); //printf("Prüfe Linkanzahl\n"); double CON = (double)links/(((double)nicheweb.S)*((double)nicheweb.S)-1); if(CON < (C-CRange) || CON > (C+CRange)) { flag = 1; continue; } int bcount = 0; for(i = nicheweb.Rnum; i< (nicheweb.S + nicheweb.Rnum); i++) { if(gsl_matrix_get(A, i, 0)==1) bcount++; } if(bcount!=nicheweb.B) { flag = 1; continue; } mas = SetMasses(nicheweb, NV, A, Rsize); // Massen + TL int TL0 = 0; for(i = 0; i< nicheweb.S; i++){ if(gsl_matrix_get(mas, 1, i+nicheweb.Rnum) == 0) TL0++; } if(TL0!=0) { flag = 1; continue; } } for(i=0; i<nicheweb.S; i++) printf("Nischenwerte: %f\n", gsl_matrix_get(NV, 0, i)); gsl_matrix *D = SetTopology(nicheweb.Y, nicheweb.T); // migration matrix result = LinkElements(nicheweb, NV, A, mas, D, Rsize, len); printf("\nNetzwerk erfolgreich erzeugt!\n"); gsl_matrix_free(D); gsl_matrix_free(NV); gsl_matrix_free(A); gsl_matrix_free(mas); return result; }