public void LoadMikeSheMethod(string filename)
        {
            Model mShe = new Model(filename);

            if (mShe.Processed != null)
            {
                CanReadMikeShe = false;
                if (Plants != null & wells != null)
                {
                    SelectByMikeShe(mShe);
                }
                Mshe = new MikeSheViewModel(mShe, this);
                RaisePropertyChanged("Mshe");
            }
            else
            {
                throw new Exception("Mike She model must be preprocessed");
            }
        }
    public void LoadMikeSheMethod(string filename)
    {
      Model mShe = new Model(filename);

      if (mShe.Processed != null)
      {
        CanReadMikeShe = false;
        if (Plants != null & wells != null)
          SelectByMikeShe(mShe);
        Mshe = new MikeSheViewModel(mShe, this);
        RaisePropertyChanged("Mshe");
      }
      else
      {
        throw new Exception("Mike She model must be preprocessed");
      }
    }
    /// <summary>
    /// Write two text-files that can be used by LayerStatistics. First one uses all observations in selected intakes and the second one use the mean
    /// </summary>
    /// <param name="FileName"></param>
    /// <param name="SelectedWells"></param>
    /// <param name="Start"></param>
    /// <param name="End"></param>
    /// <param name="AllObs"></param>
    public static void WriteToLSInput(string OutputDirectory, IEnumerable<IIntake> SelectedIntakes, MikeSheViewModel mshe, params Func<TimestampValue, bool>[] filters)
    {
      StreamWriter SWAll = new StreamWriter(Path.Combine(OutputDirectory, "LsInput_All.txt"), false, Encoding.Default);
      StreamWriter SWMean = new StreamWriter(Path.Combine(OutputDirectory, "LsInput_Mean.txt"), false, Encoding.Default);

      SWAll.WriteLine("NOVANAID\tXUTM\tYUTM\tDEPTH\tPEJL\tDATO\tBERELAG");
      SWMean.WriteLine("NOVANAID\tXUTM\tYUTM\tDEPTH\tMEANPEJ\tMAXDATO\tBERELAG");

      StringBuilder WellsOutSide = new StringBuilder();

      foreach (IIntake I in SelectedIntakes)
      {
        var SelectedObs = I.HeadObservations.Items.AsEnumerable<TimestampValue>();
        //Select the observations
        foreach (var v in filters)
          SelectedObs = SelectedObs.Where(v);

        StringBuilder S = new StringBuilder();

        int? Layer = null;
        if (mshe != null)
        {
          Layer = mshe.mshe.GridInfo.GetLayerFromDepth(I.well.X, I.well.Y, PointInScreen(I));
          if (Layer < 0)
          {
            if (WellsOutSide.Length == 0)
            {
              WellsOutSide.Append("NOVANAID\tXUTM\tYUTM\tDEPTH\tBERELAG\n");
            }
            WellsOutSide.Append(I.ToString() + "\t" + I.well.X + "\t" + I.well.Y + "\t" + PointInScreen(I) + "\t" + Layer + "\n");
          }
        }
        
        S.Append(I.ToString() + "\t" + I.well.X + "\t" + I.well.Y + "\t" + PointInScreen(I) + "\t");

        foreach (var TSE in SelectedObs)
        {
          StringBuilder ObsString = new StringBuilder(S.ToString());
          ObsString.Append(TSE.Value + "\t" + TSE.Time.ToString("dd-MM-yyyy"));
          if (Layer.HasValue)
            ObsString.Append("\t" + Layer);
          SWAll.WriteLine(ObsString.ToString());
        }

        if (SelectedObs.Count() > 0)
        {
          S.Append(SelectedObs.Average(num => num.Value).ToString() + "\t");
          S.Append(SelectedObs.Max(num => num.Time).ToString("dd-MM-yyyy"));
          if (Layer.HasValue)
            S.Append("\t" + Layer);
          SWMean.WriteLine(S.ToString());
        }
      }
      SWAll.Dispose();
      SWMean.Dispose();

      if (WellsOutSide.Length > 0)
      {
        using (StreamWriter SWOutSide = new StreamWriter(Path.Combine(OutputDirectory, "WellsAboveOrBelowGround.txt"), false, Encoding.Default))
        {
          SWOutSide.Write(WellsOutSide);
        }
      }
    }
        /// <summary>
        /// Write two text-files that can be used by LayerStatistics. First one uses all observations in selected intakes and the second one use the mean
        /// </summary>
        /// <param name="FileName"></param>
        /// <param name="SelectedWells"></param>
        /// <param name="Start"></param>
        /// <param name="End"></param>
        /// <param name="AllObs"></param>
        public static void WriteToLSInput(string OutputDirectory, IEnumerable <IIntake> SelectedIntakes, MikeSheViewModel mshe, params Func <TimestampValue, bool>[] filters)
        {
            StreamWriter SWAll  = new StreamWriter(Path.Combine(OutputDirectory, "LsInput_All.txt"), false, Encoding.Default);
            StreamWriter SWMean = new StreamWriter(Path.Combine(OutputDirectory, "LsInput_Mean.txt"), false, Encoding.Default);

            SWAll.WriteLine("NOVANAID\tXUTM\tYUTM\tDEPTH\tPEJL\tDATO\tBERELAG");
            SWMean.WriteLine("NOVANAID\tXUTM\tYUTM\tDEPTH\tMEANPEJ\tMAXDATO\tBERELAG");

            StringBuilder WellsOutSide = new StringBuilder();

            foreach (IIntake I in SelectedIntakes)
            {
                var SelectedObs = I.HeadObservations.Items.AsEnumerable <TimestampValue>();
                //Select the observations
                foreach (var v in filters)
                {
                    SelectedObs = SelectedObs.Where(v);
                }

                StringBuilder S = new StringBuilder();

                int?Layer = null;
                if (mshe != null)
                {
                    Layer = mshe.mshe.GridInfo.GetLayerFromDepth(I.well.X, I.well.Y, PointInScreen(I));
                    if (Layer < 0)
                    {
                        if (WellsOutSide.Length == 0)
                        {
                            WellsOutSide.Append("NOVANAID\tXUTM\tYUTM\tDEPTH\tBERELAG\n");
                        }
                        WellsOutSide.Append(I.ToString() + "\t" + I.well.X + "\t" + I.well.Y + "\t" + PointInScreen(I) + "\t" + Layer + "\n");
                    }
                }

                S.Append(I.ToString() + "\t" + I.well.X + "\t" + I.well.Y + "\t" + PointInScreen(I) + "\t");

                foreach (var TSE in SelectedObs)
                {
                    StringBuilder ObsString = new StringBuilder(S.ToString());
                    ObsString.Append(TSE.Value + "\t" + TSE.Time.ToString("dd-MM-yyyy"));
                    if (Layer.HasValue)
                    {
                        ObsString.Append("\t" + Layer);
                    }
                    SWAll.WriteLine(ObsString.ToString());
                }

                if (SelectedObs.Count() > 0)
                {
                    S.Append(SelectedObs.Average(num => num.Value).ToString() + "\t");
                    S.Append(SelectedObs.Max(num => num.Time).ToString("dd-MM-yyyy"));
                    if (Layer.HasValue)
                    {
                        S.Append("\t" + Layer);
                    }
                    SWMean.WriteLine(S.ToString());
                }
            }
            SWAll.Dispose();
            SWMean.Dispose();

            if (WellsOutSide.Length > 0)
            {
                using (StreamWriter SWOutSide = new StreamWriter(Path.Combine(OutputDirectory, "WellsAboveOrBelowGround.txt"), false, Encoding.Default))
                {
                    SWOutSide.Write(WellsOutSide);
                }
            }
        }