예제 #1
0
        // get Bjorken- and QGP lifetime for ImpactParameter = 0
        private void DetermineMaxLifeTime()
        {
            Fireball.Fireball fireball = CreateFireballToDetermineMaxLifeTime();
            // Evolving the fireball to calculate the maximum QGP LifeTime
            while (fireball.MaximumTemperature > BreakupTemperature_MeV)
            {
                // quit here if process has been aborted
                if (JobCancelToken.IsCancellationRequested)
                {
                    return;
                }

                fireball.Advance(0.1);
            }

            LifeTime_fm        = fireball.LifeTime;
            BjorkenLifeTime_fm = fireball.BjorkenLifeTime;
        }
예제 #2
0
        public void CalculateFireballTemperatureEvolution()
        {
            PrepareJob("PlotFireballTemperatureEvolution", SnapshotStatusTitles);

            if (SnapRate_per_fm <= 0)
            {
                throw new Exception("SnapRate <= 0.");
            }

            Fireball.Fireball fireball = CreateFireball();
            BjorkenLifeTime_fm = fireball.BjorkenLifeTime;

            StringBuilder output = new StringBuilder();

            output.AppendLine();
            output.AppendLine();
            output.AppendLine(string.Format("#{0,7}{1,20}", "Time", "MaximumTemperature"));
            output.AppendLine(string.Format("#{0,7}{1,20}", "(fm)", "(MeV)"));

            double dt = 1.0 / SnapRate_per_fm;

            do
            {
                // quit here if process has been aborted
                if (JobCancelToken.IsCancellationRequested)
                {
                    break;
                }

                StatusValues[0] = fireball.CurrentTime.ToString();

                output.AppendLine(string.Format("{0,8:G4}{1,20:G4}",
                                                fireball.CurrentTime, fireball.MaximumTemperature));

                fireball.Advance(dt);
            } while(fireball.MaximumTemperature > BreakupTemperature_MeV);

            LifeTime_fm = fireball.LifeTime;

            WriteOutputToLogAndDataFile(output);
        }
예제 #3
0
        public void CalculateDirectPionDecayWidths()
        {
            PrepareJob("CalculateDirectPionDecayWidths", DirectPionDecayWidthsStatusTitles);

            List <double> impactParams = new List <double>();
            List <double> nCollQGPs    = new List <double>();
            List <double> nCollPions   = new List <double>();
            List <double> nColls       = new List <double>();
            int           step         = 0;

            do
            {
                // quit here if process has been aborted
                if (JobCancelToken.IsCancellationRequested)
                {
                    LogMessages.Clear();
                    LogMessages.Append(LogHeader + LogFooter);
                    return;
                }

                impactParams.Add(step * GridCellSize_fm);

                Fireball.Fireball fireball = CreateFireballToCalcDirectPionDecayWidth(
                    impactParams[step]);

                // Set BjorkenLifeTime for the LogHeader
                if (step == 0)
                {
                    BjorkenLifeTime_fm = fireball.BjorkenLifeTime;
                }

                // calculate the areas
                fireball.CalculateNumberCollisions(BreakupTemperature_MeV, out double nCollQGP, out double nCollPion);
                nCollQGPs.Add(nCollQGP);
                nCollPions.Add(nCollPion);
                nColls.Add(fireball.IntegrateFireballField(FireballFieldType.NumberCollisions));

                StatusValues[0] = impactParams[step].ToUIString();
                StatusValues[1] = nColls[step].ToUIString();
                StatusValues[2] = nCollQGPs[step].ToUIString();
                StatusValues[3] = nCollPions[step].ToUIString();

                step++;
            }while((step == 1 ? true : nColls[step - 1] > 1));

            // quit here if process has been aborted
            if (JobCancelToken.IsCancellationRequested)
            {
                LogMessages.Clear();
                LogMessages.Append(LogHeader + LogFooter);
                return;
            }

            // prepare output
            LogMessages.Clear();
            LogMessages.Append(LogHeader);

            LogMessages.AppendLine();
            LogMessages.AppendLine();

            LogMessages.AppendLine(string.Format("#{0,7}{1,12}{2,12}{3,12}",
                                                 "b (fm)", "Ncoll", "NcollQGP", "NcollPion"));
            LogMessages.AppendLine("#");
            for (int i = 0; i < impactParams.Count; i++)
            {
                LogMessages.AppendLine(string.Format("{0,8}{1,12}{2,12}{3,12}",
                                                     impactParams[i].ToUIString(),
                                                     nColls[i].ToUIString(),
                                                     nCollQGPs[i].ToUIString(),
                                                     nCollPions[i].ToUIString()));
            }

            LogMessages.Append(LogFooter);

            File.WriteAllText(YburnConfigFile.OutputPath + DataFileName, LogMessages.ToString());
        }
예제 #4
0
        public void MakeSnapshots()
        {
            PrepareJob("MakeSnapshots", SnapshotStatusTitles);

            if (SnapRate_per_fm <= 0)
            {
                throw new Exception("SnapRate <= 0.");
            }

            // All data is saved in the output file. Additionally, the corresponding gnuplot files (.plt)
            // are created to facilitate graphical visualization of the data.
            StringBuilder output          = new StringBuilder();
            StringBuilder gnuFileStringX  = new StringBuilder();
            StringBuilder gnuFileStringY  = new StringBuilder();
            StringBuilder gnuFileStringXY = new StringBuilder();

            gnuFileStringX.AppendLine("reset");
            gnuFileStringX.AppendLine();
            gnuFileStringX.AppendLine(string.Format("stats '{0}' using 3", DataFileName));
            gnuFileStringX.AppendLine("set yrange [floor(STATS_min):ceil(STATS_max)]");
            gnuFileStringX.AppendLine();
            gnuFileStringX.AppendLine("set xlabel 'x (fm)'");
            gnuFileStringX.AppendLine();

            gnuFileStringY.AppendLine("reset");
            gnuFileStringY.AppendLine();
            gnuFileStringY.AppendLine(string.Format("stats '{0}' using 3", DataFileName));
            gnuFileStringY.AppendLine("set yrange [floor(STATS_min):ceil(STATS_max)]");
            gnuFileStringY.AppendLine();
            gnuFileStringY.AppendLine("set xlabel 'y (fm)'");
            gnuFileStringY.AppendLine();

            gnuFileStringXY.AppendLine("reset");
            gnuFileStringXY.AppendLine();
            gnuFileStringXY.AppendLine(string.Format("stats '{0}' using 3", DataFileName));
            gnuFileStringXY.AppendLine("set zrange [floor(STATS_min):ceil(STATS_max)]");
            gnuFileStringXY.AppendLine();
            gnuFileStringXY.AppendLine("set xlabel 'x (fm)'");
            gnuFileStringXY.AppendLine("set ylabel 'y (fm)'");
            gnuFileStringXY.AppendLine();

            CoordinateSystem system = CreateCoordinateSystem();

            Fireball.Fireball fireball = CreateFireball();
            BjorkenLifeTime_fm = fireball.BjorkenLifeTime;

            int    index = 0;
            double dt    = 1.0 / SnapRate_per_fm;

            do
            {
                // quit here if process has been aborted
                if (JobCancelToken.IsCancellationRequested)
                {
                    break;
                }

                // get status of calculation
                StatusValues[0] = fireball.CurrentTime.ToString();

                output.AppendLine();
                output.AppendLine();
                output.AppendLine(string.Format(
                                      "#Time = {0}, Index {1}", fireball.CurrentTime, index));
                output.Append(fireball.FieldsToString(FireballFieldTypes, BottomiumStates));

                gnuFileStringX.AppendLine(string.Format(
                                              "plot '{0}' every {1} index {2} using 1:3 with points title 't = {3} fm/c'; pause .5",
                                              DataFileName, system.YAxis.Count, index, fireball.CurrentTime));
                gnuFileStringY.AppendLine(string.Format(
                                              "plot '{0}' every ::{1}::{2} index {3} using 2:3 with points title 't = {4} fm/c'; pause .5",
                                              DataFileName,
                                              system.FindClosestXAxisIndex(0) * system.YAxis.Count,
                                              (system.FindClosestXAxisIndex(0) + 1) * system.YAxis.Count - 1,
                                              index,
                                              fireball.CurrentTime));
                gnuFileStringXY.AppendLine(string.Format(
                                               "splot '{0}' index {1} using 1:2:3 with points title 't = {2} fm/c'; pause .5",
                                               DataFileName, index, fireball.CurrentTime));

                index++;
                fireball.Advance(dt);
            } while(fireball.MaximumTemperature > BreakupTemperature_MeV);

            LifeTime_fm = fireball.LifeTime;

            WriteOutputToLogAndDataFile(output);

            WriteFile(gnuFileStringX, DataFileName + "-plotX.plt");
            WriteFile(gnuFileStringY, DataFileName + "-plotY.plt");
            WriteFile(gnuFileStringXY, DataFileName + "-plotXY.plt");
        }