}                                   // quality of the solar cell

        // creates and returns a new solar cell object with random properties
        public void GetRandomSolarCellProperties(SolarCell randomSolarCell, Random randomNumber)
        {
            randomSolarCell.ProductionTime = randomNumber.Next(5, 121);                                                                                                                                 // assign random time between 5 and 120 seconds as production time
            randomSolarCell.Pmpp           = 5.5 * Math.Pow(Math.Abs(Math.Sqrt(-2.0 * Math.Log((1 - randomNumber.NextDouble()))) * Math.Sin(2.0 * Math.PI * (1.0 - randomNumber.NextDouble()))), 0.03); // box müller standard deviated random number
            if (randomSolarCell.Pmpp > 5.1)                                                                                                                                                             // assign quality value depending on pmpp of cell
            {
                randomSolarCell.Quality = "A";
            }
            else
            {
                if (randomSolarCell.Pmpp > 4.8)
                {
                    randomSolarCell.Quality = "B";
                }
                else
                {
                    randomSolarCell.Quality = "C";
                }
            }
        }
        static void Main(string[] args)
        {
            try
            {
                // load configuration from xml document
                XmlDocument xmlDoc = new XmlDocument();
                xmlDoc.Load(AppDomain.CurrentDomain.BaseDirectory + "Configuration.xml");
                // get settings from xml file
                XmlNodeList productionLines = xmlDoc.SelectNodes("//configuration/lines/line");                                          // list of production lines
                int         days            = Convert.ToInt32(xmlDoc.SelectSingleNode("//configuration/days").Attributes["days"].Value); // number of days

                Random    randomNumber    = new Random();                                                                                // initialize random numbers
                SolarCell solarCellObject = new SolarCell();                                                                             // create new solarCell object

                // create log file
                foreach (XmlNode productionLine in productionLines) // loop through all production machines
                {
                    for (int i = 0; i < days; i++)                  // loop through all days
                    {
                        string FilePath = AppDomain.CurrentDomain.BaseDirectory + "\\logFiles\\" + productionLine.Attributes["line"].Value;
                        System.IO.Directory.CreateDirectory(FilePath); // create path if it doesnt exist
                        string FilePathAndName = FilePath + "\\" + DateTime.Today.AddDays(-i).ToString("yyyyMMdd") + ".txt";
                        if (!System.IO.File.Exists(FilePathAndName))
                        {
                            System.IO.StreamWriter objFileWriter = new System.IO.StreamWriter(FilePathAndName, false); // create new file writer object

                            DateTime timestamp = new DateTime(DateTime.Today.Year, DateTime.Now.Month, DateTime.Now.AddDays(-i).Day, 0, 0, 0);

                            while (timestamp < DateTime.Today.AddDays(1 - i))                                                                  // loop until next day is reached
                            {
                                solarCellObject.GetRandomSolarCellProperties(solarCellObject, randomNumber);                                   // create new solar cell with random metadata
                                objFileWriter.Write("\n" + timestamp.ToString() + ";" + solarCellObject.Pmpp + ";" + solarCellObject.Quality); // append string to file
                                timestamp = timestamp.AddSeconds(solarCellObject.ProductionTime);                                              // add production time to timestamp
                            }
                            objFileWriter.Close();                                                                                             // close file writer
                        }
                    }
                }
            }
            catch (Exception ex) { LoggToFile.AppendStringToLogFile("EXCEPTION || Message: " + ex.Message + " || StackTrace: " + ex.StackTrace); }
        }