Exemplo n.º 1
0
        protected void PrepareJob(
            string jobTitle
            )
        {
            CurrentJobTitle = jobTitle;

            SetJobStartTimeStamp();

            LogMessages.Clear();
            LogMessages.Append(LogHeader);
        }
Exemplo n.º 2
0
        protected void PrepareJob(
            string jobTitle,
            string[] statusTitles
            )
        {
            CurrentJobTitle = jobTitle;

            SetStatusVariables(statusTitles);
            SetJobStartTimeStamp();

            LogMessages.Clear();
            LogMessages.Append(LogHeader);
        }
Exemplo n.º 3
0
        public void CalculateFreeWaveFunction()
        {
            PrepareJob("CalculateFreeWaveFunction", FreeWaveStatusTitles);

            try
            {
                QQFreeState freeState = new QQFreeState(GetQQStateParam())
                {
                    CalculationCancelToken = JobCancelToken,
                    StatusValues           = StatusValues
                };

                freeState.SearchEigenfunction();

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

                UpdateOutputParameters(freeState);

                LogMessages.Clear();
                LogMessages.AppendLine(LogHeader + "#" + Environment.NewLine + "#");
                LogMessages.AppendLine("Temperature DebyeMass   SoftScale   BoundMass   Energy      GammaDamp   ");
                LogMessages.AppendLine("(MeV)       (MeV)       (MeV)       (MeV)       (MeV)       (MeV)       ");
                LogMessages.AppendLine();
                LogMessages.AppendLine(string.Format("{0,-12}{1,-12}{2,-12}{3,-12}{4,-12}{5,-12}",
                                                     Temperature_MeV.ToString("G6"),
                                                     DebyeMass_MeV.ToString("G6"),
                                                     SoftScale_MeV.ToString("G6"),
                                                     BoundMass_MeV.ToString("G6"),
                                                     Energy_MeV.ToString("G6"),
                                                     GammaDamp_MeV.ToString("G6")));
                LogMessages.AppendLine(LogFooter);

                List <string> dataList = new List <string>();
                dataList.Add(LogHeader + "#" + Environment.NewLine + "#");
                dataList.AddRange(CreateWaveFunctionDataList(freeState));
                File.WriteAllLines(YburnConfigFile.OutputPath + DataFileName, dataList);
            }
            catch
            {
                throw;
            }
        }
Exemplo n.º 4
0
        protected void WriteOutputToLogAndDataFile(
            StringBuilder output,
            bool addLogHeaderAndFooter = true
            )
        {
            StringBuilder content = new StringBuilder(output.ToString());

            if (addLogHeaderAndFooter)
            {
                content.Insert(0, LogHeader);
                content.Append(LogFooter);
            }

            LogMessages.Clear();
            LogMessages.Append(content);
            WriteDataFile(content);
        }
Exemplo n.º 5
0
        public void CalculateQuarkMass()
        {
            PrepareJob("CalculateQuarkMass", BoundWaveStatusTitles);

            try
            {
                QQBoundState boundState = new QQBoundState(GetQQStateParam(), QuantumNumberN)
                {
                    CalculationCancelToken = JobCancelToken,
                    StatusValues           = StatusValues
                };

                QuarkMass_MeV = boundState.SearchQuarkMass(BoundMass_MeV);

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

                UpdateOutputParameters(boundState);

                LogMessages.Clear();
                LogMessages.AppendLine(LogHeader + "#" + Environment.NewLine + "#" + Environment.NewLine + LogFooter);

                List <string> dataList = new List <string>();
                dataList.Add(LogHeader + "#" + Environment.NewLine + "#");
                dataList.AddRange(CreateWaveFunctionDataList(boundState));
                File.WriteAllLines(YburnConfigFile.OutputPath + DataFileName, dataList);
            }
            catch
            {
                throw;
            }
        }
Exemplo n.º 6
0
        public void CalculateSuppression()
        {
            PrepareJob("CalculateSuppression", BinBoundsStatusTitles);

            CalculateBinBoundaries(
                out List <int> numberCentralityBins, out List <List <string> > centralityBinStrings,
                out List <double> impactParams, out List <double> nColls, out List <double> nParts,
                out List <double> dSigmadbs, out List <double> sigmas);

            SetStatusVariables(SuppressionStatusTitles);
            DetermineMaxLifeTime();

            BottomiumVector[][][] qgpSuppressionFactors
                = CalculateQGPSuppressionFactors(numberCentralityBins);

            // 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("#Preliminary suppression factors:");
            LogMessages.AppendLine("#");
            LogMessages.AppendFormat("#{0,11}{1,12}{2,12}",
                                     "Centrality", "<Npart>", "pT (GeV/c)");
            foreach (string sStateName in Enum.GetNames(typeof(BottomiumState)))
            {
                LogMessages.AppendFormat("{0,12}", string.Format("RAAQGP({0})", sStateName));
            }
            LogMessages.AppendLine();
            LogMessages.AppendLine("#");

            for (int binGroupIndex = 0; binGroupIndex < numberCentralityBins.Count; binGroupIndex++)
            {
                if (binGroupIndex > 0)
                {
                    LogMessages.AppendLine();
                }

                for (int binIndex = 0; binIndex < numberCentralityBins[binGroupIndex]; binIndex++)
                {
                    for (int pTIndex = 0; pTIndex < TransverseMomenta_GeV.Count; pTIndex++)
                    {
                        LogMessages.AppendFormat("{0,12}{1,12}{2,12}",
                                                 centralityBinStrings[binGroupIndex][binIndex],
                                                 MeanParticipantsInBin[binGroupIndex][binIndex].ToUIString(),
                                                 TransverseMomenta_GeV[pTIndex].ToUIString());

                        foreach (BottomiumState state in Enum.GetValues(typeof(BottomiumState)))
                        {
                            LogMessages.AppendFormat("{0,12}",
                                                     qgpSuppressionFactors[binGroupIndex][binIndex][pTIndex][state].ToUIString());
                        }

                        LogMessages.AppendLine();
                    }

                    LogMessages.AppendFormat("{0,12}{1,12}{2,12}",
                                             centralityBinStrings[binGroupIndex][binIndex],
                                             MeanParticipantsInBin[binGroupIndex][binIndex].ToUIString(),
                                             "<pT>");

                    foreach (BottomiumState state in Enum.GetValues(typeof(BottomiumState)))
                    {
                        double[] rAAQGPsBinValues = new double[TransverseMomenta_GeV.Count];
                        for (int pTIndex = 0; pTIndex < TransverseMomenta_GeV.Count; pTIndex++)
                        {
                            rAAQGPsBinValues[pTIndex] = qgpSuppressionFactors[binGroupIndex][binIndex][pTIndex][state];
                        }

                        LogMessages.AppendFormat("{0,12}",
                                                 TransverseMomentumAverager.Calculate(state, TransverseMomenta_GeV.ToArray(), rAAQGPsBinValues)
                                                 .ToUIString());
                    }

                    LogMessages.AppendLine();
                }
            }

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

            LogMessages.AppendLine("#Final suppression factors:");
            LogMessages.AppendLine("#");
            LogMessages.AppendLine(string.Format(
                                       "#{0,11}{1,12}{2,12}{3,15}{4,15}{5,15}{6,15}{7,15}",
                                       "Centrality",
                                       "<Npart>",
                                       "pT (GeV/c)",
                                       "RAA(Y1S)",
                                       "RAA(Y2S)",
                                       "RAA(Y3S)",
                                       "(2S/1S)PbPb-pp",
                                       "(3S/1S)PbPb-pp"));
            LogMessages.AppendLine("#");

            // calculate final suppression factors
            double[][] rAAs = new double[TransverseMomenta_GeV.Count][];
            // run through the centrality bin groups
            for (int binGroupIndex = 0; binGroupIndex < numberCentralityBins.Count; binGroupIndex++)
            {
                if (binGroupIndex > 0)
                {
                    LogMessages.AppendLine();
                }

                // run through the centrality bins
                for (int binIndex = 0; binIndex < numberCentralityBins[binGroupIndex]; binIndex++)
                {
                    // run through the pT bins
                    for (int pTIndex = 0; pTIndex < TransverseMomenta_GeV.Count; pTIndex++)
                    {
                        rAAs[pTIndex] = CalculateFullSuppressionFactors(qgpSuppressionFactors[binGroupIndex][binIndex][pTIndex]);

                        LogMessages.AppendFormat("{0,12}{1,12}{2,12}",
                                                 centralityBinStrings[binGroupIndex][binIndex],
                                                 MeanParticipantsInBin[binGroupIndex][binIndex].ToUIString(),
                                                 TransverseMomenta_GeV[pTIndex].ToUIString());

                        for (int stateIndex = 0; stateIndex < 5; stateIndex++)
                        {
                            LogMessages.AppendFormat("{0,15}",
                                                     rAAs[pTIndex][stateIndex].ToUIString());
                        }

                        LogMessages.AppendLine();
                    }

                    LogMessages.AppendFormat("{0,12}{1,12}{2,12}",
                                             centralityBinStrings[binGroupIndex][binIndex],
                                             MeanParticipantsInBin[binGroupIndex][binIndex].ToUIString(),
                                             "<pT>");

                    // average of all pT values
                    for (int l = 0; l < 5; l++)
                    {
                        double[] rAABinValues = new double[TransverseMomenta_GeV.Count];
                        for (int pTIndex = 0; pTIndex < TransverseMomenta_GeV.Count; pTIndex++)
                        {
                            rAABinValues[pTIndex] = rAAs[pTIndex][l];
                        }

                        LogMessages.AppendFormat("{0,15}",
                                                 TransverseMomentumAverager.Calculate((BottomiumState)l,
                                                                                      TransverseMomenta_GeV.ToArray(),
                                                                                      rAABinValues).ToUIString());
                    }

                    LogMessages.AppendLine();
                }
            }

            LogMessages.Append(LogFooter);

            File.WriteAllText(YburnConfigFile.OutputPath + DataFileName, LogMessages.ToString());
        }
Exemplo n.º 7
0
        public void CalculateBinBoundaries()
        {
            PrepareJob("CalculateBinBoundaries", BinBoundsStatusTitles);

            CalculateBinBoundaries(
                out List <int> numberCentralityBins, out List <List <string> > centralityBinStrings,
                out List <double> impactParams, out List <double> nColls, out List <double> nParts,
                out List <double> dSigmadbs, out List <double> sigmas);

            // 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,14}{4,14}",
                                                 "b (fm)", "Ncoll", "Npart", "dσ/db (fm)", "σ (fm²)"));
            LogMessages.AppendLine("#");
            for (int i = 0; i < impactParams.Count; i++)
            {
                LogMessages.AppendLine(string.Format("{0,8}{1,12}{2,12}{3,14}{4,14}",
                                                     impactParams[i].ToUIString(),
                                                     nColls[i].ToUIString(),
                                                     nParts[i].ToUIString(),
                                                     dSigmadbs[i].ToUIString(),
                                                     sigmas[i].ToUIString()));
            }

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

            LogMessages.AppendLine(string.Format("#{0,11}{1,19}{2,12}",
                                                 "Centrality",
                                                 "Bin size (fm)",
                                                 "<Npart>"));
            LogMessages.AppendLine("#");
            for (int binGroupIndex = 0; binGroupIndex < numberCentralityBins.Count; binGroupIndex++)
            {
                if (binGroupIndex > 0)
                {
                    LogMessages.AppendLine();
                }

                for (int binIndex = 0; binIndex < numberCentralityBins[binGroupIndex]; binIndex++)
                {
                    LogMessages.AppendLine(string.Format("{0,12}{1,8} < b < {2,4}{3,12}",
                                                         centralityBinStrings[binGroupIndex][binIndex],
                                                         ImpactParamsAtBinBoundaries_fm[binGroupIndex][binIndex].ToUIString(),
                                                         ImpactParamsAtBinBoundaries_fm[binGroupIndex][binIndex + 1].ToUIString(),
                                                         MeanParticipantsInBin[binGroupIndex][binIndex].ToUIString()));
                }
            }

            LogMessages.Append(LogFooter);

            File.WriteAllText(YburnConfigFile.OutputPath + DataFileName, LogMessages.ToString());
        }
Exemplo n.º 8
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());
        }
Exemplo n.º 9
0
        public void CalculateDissociationDecayWidth()
        {
            PrepareJob("CalculateDissociationDecayWidth", BoundWaveStatusTitles);

            try
            {
                QQBoundState boundState = new QQBoundState(GetQQStateParam(), QuantumNumberN)
                {
                    CalculationCancelToken = JobCancelToken,
                    StatusValues           = StatusValues
                };

                boundState.SearchEigenfunction();

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

                UpdateOutputParameters(boundState);

                SetStatusVariables(CrossSectionStatusTitles);

                // calculate decay width and cross section
                DecayWidth decayWidth = new DecayWidth(JobCancelToken, boundState, MaxEnergy_MeV,
                                                       EnergySteps, Temperature_MeV, StatusValues);
                decayWidth.CalculateGammaDiss();

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

                GammaDiss_MeV = decayWidth.GammaDiss_MeV;
                GammaTot_MeV  = GammaDamp_MeV + GammaDiss_MeV;

                LogMessages.Clear();
                LogMessages.AppendLine(LogHeader + "#" + Environment.NewLine + "#");
                LogMessages.AppendLine("Temperature DebyeMass   √<r²>       SoftScale   US_Scale    BoundMass   Energy      GammaDamp   GammaDiss   GammaTot    ");
                LogMessages.AppendLine("(MeV)       (MeV)       (fm)        (Mev)       (Mev)       (MeV)       (MeV)       (MeV)       (MeV)       (MeV)       ");
                LogMessages.AppendLine();
                LogMessages.AppendLine(string.Format("{0,-12}{1,-12}{2,-12}{3,-12}{4,-12}{5,-12}{6,-12}{7,-12}{8,-12}{9,-12}",
                                                     Temperature_MeV.ToString("G6"),
                                                     DebyeMass_MeV.ToString("G6"),
                                                     DisplacementRMS_fm.ToString("G6"),
                                                     SoftScale_MeV.ToString("G6"),
                                                     UltraSoftScale_MeV.ToString("G6"),
                                                     BoundMass_MeV.ToString("G6"),
                                                     Energy_MeV.ToString("G6"),
                                                     GammaDamp_MeV.ToString("G6"),
                                                     GammaDiss_MeV.ToString("G6"),
                                                     GammaTot_MeV.ToString("G6")));
                LogMessages.Append(LogFooter);

                List <string> dataList = new List <string>();
                dataList.Add(LogHeader + "#" + Environment.NewLine + "#");
                dataList.AddRange(CreateWaveFunctionDataList(boundState));
                dataList.Add(string.Empty);
                dataList.Add(string.Empty);
                dataList.AddRange(decayWidth.CrossSectionStringList);
                File.WriteAllLines(YburnConfigFile.OutputPath + DataFileName, dataList);
            }
            catch
            {
                throw;
            }
        }
Exemplo n.º 10
0
        public void CalculateBoundWaveFunction()
        {
            PrepareJob("CalculateBoundWaveFunction", BoundWaveStatusTitles);

            try
            {
                QQBoundState boundState = new QQBoundState(GetQQStateParam(), QuantumNumberN)
                {
                    CalculationCancelToken = JobCancelToken,
                    StatusValues           = StatusValues,
                    UseFixedAlpha          = UseFixedAlpha
                };

                boundState.SearchEigenfunction();

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

                UpdateOutputParameters(boundState);

                LogMessages.Clear();
                LogMessages.AppendLine(LogHeader + "#" + Environment.NewLine + "#");
                LogMessages.AppendLine(string.Format("{0,-12}{1,-12}{2,-12}{3,-12}{4,-12}{5,-12}{6,-12}{7,-12}",
                                                     "Temperature",
                                                     "DebyeMass",
                                                     "√<r²>",
                                                     "SoftScale",
                                                     "US_Scale",
                                                     "BoundMass",
                                                     "Energy",
                                                     "GammaDamp"));
                LogMessages.AppendLine(string.Format("{0,-12}{1,-12}{2,-12}{3,-12}{4,-12}{5,-12}{6,-12}{7,-12}",
                                                     "(MeV)",
                                                     "(MeV)",
                                                     "(fm)",
                                                     "(Mev)",
                                                     "(Mev)",
                                                     "(MeV)",
                                                     "(MeV)",
                                                     "(MeV)"));
                LogMessages.AppendLine();
                LogMessages.AppendLine(string.Format("{0,-12}{1,-12}{2,-12}{3,-12}{4,-12}{5,-12}{6,-12}{7,-12}",
                                                     Temperature_MeV.ToString("G6"),
                                                     DebyeMass_MeV.ToString("G6"),
                                                     DisplacementRMS_fm.ToString("G6"),
                                                     SoftScale_MeV.ToString("G6"),
                                                     UltraSoftScale_MeV.ToString("G6"),
                                                     BoundMass_MeV.ToString("G6"),
                                                     Energy_MeV.ToString("G6"),
                                                     GammaDamp_MeV.ToString("G6")));
                LogMessages.Append(LogFooter);

                List <string> dataList = new List <string>();
                dataList.Add(LogHeader + "#" + Environment.NewLine + "#");
                dataList.AddRange(CreateWaveFunctionDataList(boundState));
                File.WriteAllLines(YburnConfigFile.OutputPath + DataFileName, dataList);
            }
            catch
            {
                throw;
            }
        }