Hello everyone.
I have a problem with the fstream library in C++ when I try to use it in a ROOT macro. This is what I’m trying to do.
I have a file (call it F1) with 4 data columns. I 'm trying to read those columns in order to run a simulation. The problem is that ROOT doesn’t seem to find the fstream library and is therefore unable to run my simulation. Any advice? I am leaving my code below.
Thanks in advance.
void Integrated_results()
{
int Nevents = 1000000;
std::vector <long double> Energy; // vector to store a nucleus energy
std::vector <long double> Charge; // vector to store a nucleus charge
std::vector <long double> Mass; // vector to store a nucleus mass
std::vector <long double> Redshift; // vector to store a nucleus redshift
long double Ee;
long double Q;
long double M;
long double Z;
long double c = 3.06562/pow(10, 7); // Lights speed in MPc/yr
float Bamp = 20; // Turbulent magnetic field amplitude in nG
float Lcoh = 0.25; // Coherence lenght in MPc
//int zz = 1; // Electric Charge of the particle //Now rendered useless due to a code update
float Ec0; // Critical Energy
long double Ho = 7.2/pow(10., 11); // Hubble's constant
long double Omegam = 0.3; // Matter density of the Universe
long double Omegade = 1.-Omegam; // Dark energy density of the Universe
float ai = 0.9, al = 0.23, rmk = 5./3.; // Parameters for the Kolmogorov B spectrum
int m = 1; // Index that considers MHD energy losses
long double ld, h; // h represents both the step in time and space
long double dz = -0.0000001; // step in redshift
long double dx;
//int i=0;
long double y[7]; // Components 0, 1 & 2 represent the speed of the
// particle. Components 3, 4 & 5 represent the position
// Given that particles are always in the ultrarelativistic
// limit, their speed will be assumed
// to equal that of light. c=1
long double a;
std::string line;
std::ifstream g, l;
std::ofstream f;
f.open("/home/oscar/Desktop/Propagation in both things/Density Enhancement/Final conditions 2546C.txt");
g.open("/home/oscar/Desktop/Integrated results/Heaviest nucleus 2.txt");
l.open("/home/oscar/Desktop/Integrated results/Heaviest nucleus 2.txt");
//mypros << "Energy (EeV)" <<" "<<"Dist (Mpc)" <<" "<<"cospos"<<" "<<"Electric Charge" <<" "<<"Mass"<<" "<<"Zini"<< '\n';
for(int i=0; i<Nevents ; i++)
{std::cout <<i<<'\n';
while(true)
{
std::getline(l, line);
if (line.empty())
{
std::getline(l, line);
break;
} // When there is an empty line the event has ended.
g >> Ee >> Z >> Q >> M; // Reads values from the data file
if(M>0 && Q>0)
{
if (Redshift.size() != 0)
{
if (Z !=Redshift[Redshift.size()-1])
{
Energy.push_back (Ee); // Stores the corresponding value on the corresponding vector
Redshift.push_back(Z);
Charge.push_back (Q);
Mass.push_back (M);
}
}
else
{
Energy.push_back (Ee); // Stores the corresponding value on the corresponding vector
Redshift.push_back(Z);
Charge.push_back (Q);
Mass.push_back (M);
}
}
}
Initiatearray (y, Redshift[0]); // Lays out the initial
//conditions for the UHECRs propagation
for(unsigned int j=0; j<Redshift.size(); j++)
{
long double Zo, Zf;
if((j) >= (Redshift.size()-1))
{
Zo = Redshift[j];
Zf = 0;
}
else // For every other case,
{
Zo = Redshift[j];
Zf = Redshift[j+1];
}
Ee = Energy[j];
a = 1./(1+y[6]);
Ec0 = 0.935*Bamp*Lcoh*Charge[j]*pow(10,18);
ld = (Lcoh/(1.+y[6]))*(4.*(Ee/Ec0)*(Ee/Ec0)*pow(1.+y[6], 2*m)*pow(a,2) + \
ai*Ee/Ec0*pow(1.+y[6], m)*a + \
al*pow(Ee/Ec0 , 2.-rmk)*pow(a, 2.-rmk)*pow(1.+y[6], m*(2.-rmk)));
h = ld/10.;
dx = -c*dz/(Ho*sqrt(Omegam*pow(1+y[6], 3) + Omegade));
//std::cout << h<<" "<<dx<<'\n';
EvolveParticle(y, dx, h, ld, dz, Zo, Zf);
}
long double dist;
long double cospos;
dist = sqrt(y[3]*y[3]+y[4]*y[4]+y[5]*y[5]);
cospos = (y[0]*y[3]+y[1]*y[4]+y[2]*y[5])/dist;
f << (Ee/(1.+Redshift[Redshift.size()-1]))/pow(10,18) << " " <<dist<<" " <<cospos<< " " <<Charge[Charge.size()-1]\
<<" "<<Mass[Mass.size()-1]<< " " <<Redshift[0]<< '\n';
Energy.clear(); // Empties all vectors in order for them to be ready to read the next event
Charge.clear();
Mass.clear();
Redshift.clear();
}
f.close();
g.close(); l.close();
}