// Esta funcion lee el archivo de SN y carga los valores en un TGraphErrors bool readSNFile_and_FillGraph(const char *inListFile, TGraphErrors &ge){ const int kMaxLine = 4096; ifstream in(inListFile); if(!in.is_open()){ cerr << "\nCan't open file: " << inListFile << endl << endl; return false; } int i=0; while(!in.eof()){ string name; double zcmb, zhel, dz, mb, dmb, x1, dx1, color, dcolor; in >> name; if(name[0]=='#') { char line[kMaxLine]; in.getline(line,kMaxLine); continue; } in >> zcmb >> zhel >> dz >> mb >> dmb >> x1 >> dx1 >> color >> dcolor ; char line[kMaxLine]; in.getline(line,kMaxLine); //Carga los valores en el grafico ge.SetPoint(i, zcmb, computeMu(mb, color, x1) ); ge.SetPointError(i, 0, computeMuError(dmb, dcolor, dx1) ); ++i; } in.close(); return true; } void decirHola(){ std::cout << "Hola" << std::endl; } // Esta funcion calcula dL Double_t calcula_dL(Double_t z, Double_t inv_cH0, Double_t Omega_m ){ TF1 dr0_dz("dr0_dz","[0] * 1/sqrt([1] *pow(1+x, 3) + 1-[1])", 0, 2); dr0_dz.SetParameter(0,inv_cH0); dr0_dz.SetParameter(1,Omega_m); Double_t r0 = dr0_dz.Integral(0,z); Double_t dL = r0*(1+z); return dL; } // Calcula mu (el modulo de distancia) a partir de los parametros medidos de la SN Double_t computeMu(Double_t mb, Double_t C, Double_t X1){ Double_t mu = mb + 19 + 0.141*X1 - 3.1*C; return mu; } // Calcula el error en mu (el modulo de distancia) a partir de los parametros medidos de la SN Double_t computeMuError(Double_t mbE, Double_t CE, Double_t X1E){ Double_t muE = sqrt( mbE*mbE + pow(0.141*X1E, 2) + pow(3.1*CE, 2) ); return muE; } // Calcula mu (el modulo de distancia) a partir de z y de los parametros del modelo cosmologico Double_t fmu_LCDM(Double_t *x, Double_t *par){ return 5*log10(calcula_dL(x[0], par[0], par[1])/ 1e-5); } void p1() { //Dice hola decirHola(); //Crea un objeto grafico, lee el archivo de SN y carga los puntos en el grafico TGraphErrors gMu; readSNFile_and_FillGraph("jla_lcparams.txt", gMu); //Crea una funcion (con dos parametros libres, inv_cH0 y Omega_m) para calcular mu en funcion de z TF1 mu_LCDM("mu_LCDM", fmu_LCDM,0.004, 1.5, 2); //Valores iniciales de los parametros para el ajuste mu_LCDM.SetParameter(0, 3000); mu_LCDM.SetParameter(1, 0.3); mu_LCDM.SetParLimits(1, 0, 1); //Crea un ventana, grafica los puntos calculados a partir de la tabla y hace el ajuste TCanvas c; gMu.Draw("ap*"); gMu.Fit(&mu_LCDM); // mu_LCDM.Draw("same"); c.WaitPrimitive(" "); }