From 1185da7bb1fb65a013a5769aa930b6561f6ab84d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Javier=20L=C3=BChrs?= Date: Wed, 22 Sep 2021 14:24:14 -0300 Subject: [PATCH] SEQNG-1274 Run GSAOI dome flats even if GeMS was not configured. --- .../main/scala/seqexec/server/gems/Gems.scala | 16 +++++++----- .../scala/seqexec/server/tcs/TcsSouth.scala | 26 ++++++++++++++----- 2 files changed, 29 insertions(+), 13 deletions(-) diff --git a/modules/server/src/main/scala/seqexec/server/gems/Gems.scala b/modules/server/src/main/scala/seqexec/server/gems/Gems.scala index 2173f3713b..f04f244f0e 100644 --- a/modules/server/src/main/scala/seqexec/server/gems/Gems.scala +++ b/modules/server/src/main/scala/seqexec/server/gems/Gems.scala @@ -11,10 +11,10 @@ import edu.gemini.spModel.gemini.gems.CanopusWfs import edu.gemini.spModel.gemini.gsaoi.GsaoiOdgw import edu.gemini.spModel.guide.StandardGuideOptions import edu.gemini.spModel.target.obsComp.TargetObsCompConstants.GUIDE_WITH_OIWFS_PROP +import org.typelevel.log4cats.Logger import seqexec.server.CleanConfig import seqexec.server.CleanConfig.extractItem import seqexec.server.ConfigUtilOps._ -import seqexec.server.SeqexecFailure import seqexec.server.altair.AltairController.AltairConfig import seqexec.server.gems.Gems.GemsWfsState import seqexec.server.gems.GemsController.Cwfs1Usage @@ -55,7 +55,8 @@ object Gems { controller: GemsController[F], config: GemsConfig, guideConfigDb: GuideConfigDb[F] - ) extends Gems[F] { + )(implicit L: Logger[F]) + extends Gems[F] { override val cfg: GemsConfig = config @@ -97,9 +98,12 @@ object Gems { ) ) case _ => - SeqexecFailure - .Execution("Attempting to run GeMS sequence before GeMS has being configured.") - .raiseError[F, PauseResume[F]] + // If there is no configuration coming from TCC we just ignore it. This is the case when taking dome flats + // We check in TcsSouth.scala that it is not an error + L.info( + "No GeMS guide configuration from TCC. GeMS control skipped for unguided step." + ) *> + PauseResume[F](none, none).pure[F] } } @@ -137,7 +141,7 @@ object Gems { OIUsage.fromBoolean(opConfig.isOIUsed && stepConfig.isOIUsed) ) - def fromConfig[F[_]: MonadError[*[_], Throwable]]( + def fromConfig[F[_]: MonadError[*[_], Throwable]: Logger]( guideConfigDb: GuideConfigDb[F], config: CleanConfig ): F[GemsController[F] => Gems[F]] = { diff --git a/modules/server/src/main/scala/seqexec/server/tcs/TcsSouth.scala b/modules/server/src/main/scala/seqexec/server/tcs/TcsSouth.scala index 6f12a056f1..e7897702bc 100644 --- a/modules/server/src/main/scala/seqexec/server/tcs/TcsSouth.scala +++ b/modules/server/src/main/scala/seqexec/server/tcs/TcsSouth.scala @@ -25,7 +25,7 @@ import seqexec.server.ConfigUtilOps._ import seqexec.server.InstrumentGuide import seqexec.server.SeqexecFailure import seqexec.server.gems.Gems -import seqexec.server.gems.GemsController.GemsConfig +import seqexec.server.gems.GemsController.{ GemsConfig, GemsOff } import seqexec.server.tcs.TcsController.AGConfig import seqexec.server.tcs.TcsController.AoGuidersConfig import seqexec.server.tcs.TcsController.AoTcsConfig @@ -130,9 +130,27 @@ case class TcsSouth[F[_]: Sync: Logger] private ( config.instrument ): TcsSouthConfig).pure[F] + private def anyGeMSGuiderActive(gc: TcsSouth.TcsSeqConfig[F]): Boolean = + gc.guideWithCWFS1.exists(_.isActive) || + gc.guideWithCWFS2.exists(_.isActive) || + gc.guideWithCWFS3.exists(_.isActive) || + gc.guideWithODGW1.exists(_.isActive) || + gc.guideWithODGW2.exists(_.isActive) || + gc.guideWithODGW3.exists(_.isActive) || + gc.guideWithODGW4.exists(_.isActive) + private def buildTcsAoConfig(gc: GuideConfig): F[TcsSouthConfig] = gc.gaosGuide .flatMap(_.toOption) + .fold { + // Only raise an error if there is no GeMS config coming from TCS and step has a GeMS guider active. + if (anyGeMSGuiderActive(config)) + SeqexecFailure + .Execution("Attempting to run GeMS sequence before GeMS was configured.") + .raiseError[F, GemsConfig] + else + GemsOff.pure[F].widen[GemsConfig] + }(_.pure[F]) .map { aog => AoTcsConfig[GemsGuiders, GemsConfig]( gc.tcsGuide, @@ -193,12 +211,6 @@ case class TcsSouth[F[_]: Sync: Logger] private ( config.instrument ): TcsSouthConfig } - .map(_.pure[F]) - .getOrElse( - SeqexecFailure - .Execution("Attempting to run GeMS sequence before GeMS was configured.") - .raiseError[F, TcsSouthConfig] - ) def buildTcsConfig: F[TcsSouthConfig] = guideDb.value.flatMap { c =>