// 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; // sin la correccion Double_t mu = mb + 19 + 0.141*X1 - 3.1*C; // con la correccion 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 ); // sin la correccion Double_t muE = sqrt( mbE*mbE + pow(0.141*X1E, 2) + pow(3.1*CE, 2) ); // con la correccion 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 practica1() { //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.GetXaxis()->SetTitle("nombre x"); gMu.Fit(&mu_LCDM); TH1F hRes("hRes","titulo",200,-7,7); for (int i = 0; i < gMu.GetN(); ++i) { Double_t diff = ( (gMu.GetY())[i] - mu_LCDM.Eval( (gMu.GetX())[i] ) ) / (gMu.GetEY())[i]; hRes.Fill(diff); } TCanvas c2; hRes.Draw(); // mu_LCDM.Draw("same"); c.WaitPrimitive(" "); }