extensions/net.sf.basedb.reggie/trunk/src/net/sf/basedb/reggie/autoconfirm/VariantCallAutoConfirmer.java

Code
Comments
Other
Rev Date Author Line
5724 13 Nov 19 nicklas 1 package net.sf.basedb.reggie.autoconfirm;
5724 13 Nov 19 nicklas 2
6387 15 Sep 21 nicklas 3 import java.util.Collections;
6387 15 Sep 21 nicklas 4 import java.util.List;
6387 15 Sep 21 nicklas 5
6387 15 Sep 21 nicklas 6 import net.sf.basedb.core.Annotatable;
5724 13 Nov 19 nicklas 7 import net.sf.basedb.core.DbControl;
6387 15 Sep 21 nicklas 8 import net.sf.basedb.core.ItemList;
5724 13 Nov 19 nicklas 9 import net.sf.basedb.core.Job;
5724 13 Nov 19 nicklas 10 import net.sf.basedb.core.RawBioAssay;
5724 13 Nov 19 nicklas 11 import net.sf.basedb.core.SessionControl;
6387 15 Sep 21 nicklas 12 import net.sf.basedb.core.Software;
6387 15 Sep 21 nicklas 13 import net.sf.basedb.opengrid.JobDefinition;
6387 15 Sep 21 nicklas 14 import net.sf.basedb.opengrid.OpenGridCluster;
6387 15 Sep 21 nicklas 15 import net.sf.basedb.opengrid.service.OpenGridService;
5728 15 Nov 19 nicklas 16 import net.sf.basedb.reggie.activity.ActivityDef;
5724 13 Nov 19 nicklas 17 import net.sf.basedb.reggie.dao.Annotationtype;
6387 15 Sep 21 nicklas 18 import net.sf.basedb.reggie.dao.BiomaterialList;
5724 13 Nov 19 nicklas 19 import net.sf.basedb.reggie.dao.Datafiletype;
5724 13 Nov 19 nicklas 20 import net.sf.basedb.reggie.dao.Rawbioassay;
6387 15 Sep 21 nicklas 21 import net.sf.basedb.reggie.dao.Subtype;
6387 15 Sep 21 nicklas 22 import net.sf.basedb.reggie.grid.ScriptUtil;
6387 15 Sep 21 nicklas 23 import net.sf.basedb.reggie.grid.TargetedGenotypeJobCreator;
6387 15 Sep 21 nicklas 24 import net.sf.basedb.util.filter.Filter;
5724 13 Nov 19 nicklas 25
5724 13 Nov 19 nicklas 26 /**
5724 13 Nov 19 nicklas 27   Auto-confirm implementation for alignments after running full variant calling.
5724 13 Nov 19 nicklas 28   
5724 13 Nov 19 nicklas 29   The rules are simple:
5724 13 Nov 19 nicklas 30   
5724 13 Nov 19 nicklas 31    * {@link RawBioAssay#getJob()} job status must be {@link net.sf.basedb.core.Job.Status#DONE}.
5724 13 Nov 19 nicklas 32    * A {@link Datafiletype#VCF} file must be attached to the {@link RawBioAssay}.
5724 13 Nov 19 nicklas 33   
5724 13 Nov 19 nicklas 34   @author nicklas
5724 13 Nov 19 nicklas 35   @since 4.24
5724 13 Nov 19 nicklas 36 */
5724 13 Nov 19 nicklas 37 public class VariantCallAutoConfirmer 
5724 13 Nov 19 nicklas 38   extends AutoConfirmer<RawBioAssay> 
5724 13 Nov 19 nicklas 39 {
5724 13 Nov 19 nicklas 40   
5724 13 Nov 19 nicklas 41   public VariantCallAutoConfirmer(RawBioAssay raw)
5724 13 Nov 19 nicklas 42   {
5724 13 Nov 19 nicklas 43     super(raw, raw.getJob());
5724 13 Nov 19 nicklas 44   }
5724 13 Nov 19 nicklas 45
5724 13 Nov 19 nicklas 46   /**
5724 13 Nov 19 nicklas 47     Passes if the rules described above are ok.
5724 13 Nov 19 nicklas 48   */
5724 13 Nov 19 nicklas 49   @Override
5724 13 Nov 19 nicklas 50   public boolean checkRules(DbControl dc, AutoConfirmManager manager) 
5724 13 Nov 19 nicklas 51   {
5724 13 Nov 19 nicklas 52     RawBioAssay raw = item(dc);
5724 13 Nov 19 nicklas 53     Job job = raw.getJob();
5724 13 Nov 19 nicklas 54     
5724 13 Nov 19 nicklas 55     if (job.getStatus() != Job.Status.DONE) return false;
5724 13 Nov 19 nicklas 56     if (Datafiletype.VCF.getFile(dc, raw) == null) return false;
5724 13 Nov 19 nicklas 57     
5724 13 Nov 19 nicklas 58     return true;
5724 13 Nov 19 nicklas 59   }
5724 13 Nov 19 nicklas 60   
5724 13 Nov 19 nicklas 61   /**
6387 15 Sep 21 nicklas 62     If we get here, the result should be accepted.
5724 13 Nov 19 nicklas 63   */
5724 13 Nov 19 nicklas 64   @Override
5724 13 Nov 19 nicklas 65   public boolean autoConfirm(DbControl dc, AutoConfirmManager manager) 
5724 13 Nov 19 nicklas 66   {
5724 13 Nov 19 nicklas 67     RawBioAssay raw = item(dc);
5724 13 Nov 19 nicklas 68     Annotationtype.ANALYSIS_RESULT.setAnnotationValue(dc, raw, Rawbioassay.FEATURE_EXTRACTION_SUCCESSFUL);
6387 15 Sep 21 nicklas 69     BiomaterialList.TARGETED_GENOTYPE_PIPELINE.load(dc).add(raw);
6387 15 Sep 21 nicklas 70     BiomaterialList.VARIANT_INDEX_FILTERED.get(dc).add(raw);
6387 15 Sep 21 nicklas 71     BiomaterialList.VARIANT_INDEX_ALL.get(dc).add(raw);
6387 15 Sep 21 nicklas 72
5728 15 Nov 19 nicklas 73     ActivityDef.VARIANT_CALLING_AUTOCONFIRMED.merge(dc, 1).setUser("Auto-confirm");
6387 15 Sep 21 nicklas 74     return true;
5724 13 Nov 19 nicklas 75   }
5724 13 Nov 19 nicklas 76
5724 13 Nov 19 nicklas 77   /**
6387 15 Sep 21 nicklas 78     Run targeted genotyping.
5724 13 Nov 19 nicklas 79   */
5724 13 Nov 19 nicklas 80   @Override
5724 13 Nov 19 nicklas 81   public boolean startNextStep(SessionControl sc, AutoConfirmManager manager) 
5724 13 Nov 19 nicklas 82   {
6387 15 Sep 21 nicklas 83     DbControl dc = null;
6387 15 Sep 21 nicklas 84     try
6387 15 Sep 21 nicklas 85     {
6599 22 Feb 22 nicklas 86       dc = sc.newDbControl("Reggie: Auto-confirm VariantCall - start Targeted genotyping");
6387 15 Sep 21 nicklas 87   
6387 15 Sep 21 nicklas 88       RawBioAssay raw = item(dc);
6387 15 Sep 21 nicklas 89       Job job = raw.getJob();
6387 15 Sep 21 nicklas 90   
6387 15 Sep 21 nicklas 91       boolean debug = Boolean.TRUE.equals(job.getParameterValue("debug"));
6387 15 Sep 21 nicklas 92       Integer priority = (Integer)job.getParameterValue("priority");
6982 17 Jan 23 nicklas 93       String partition = job.getParameterValue("partition");
6387 15 Sep 21 nicklas 94       
6387 15 Sep 21 nicklas 95       String clusterId = job.getServer();
6387 15 Sep 21 nicklas 96       OpenGridCluster cluster = OpenGridService.getInstance().getClusterById(dc, clusterId);
6387 15 Sep 21 nicklas 97       if (cluster == null)
6387 15 Sep 21 nicklas 98       {
6387 15 Sep 21 nicklas 99         // If we don't have required items, abort and revert to manual start
6387 15 Sep 21 nicklas 100         return false;
6387 15 Sep 21 nicklas 101       }
6982 17 Jan 23 nicklas 102       OpenGridCluster gtCluster = ScriptUtil.autoSelectClusterWithConfig(dc, "targeted-genotyping", cluster);
6387 15 Sep 21 nicklas 103       
6387 15 Sep 21 nicklas 104       // Pipelines for further processing
6387 15 Sep 21 nicklas 105       ItemList tgtPipeline = BiomaterialList.TARGETED_GENOTYPE_PIPELINE.load(dc);
6387 15 Sep 21 nicklas 106       boolean tgtDisabled = "Disable".equals(Annotationtype.AUTO_PROCESSING.getAnnotationValue(dc, tgtPipeline));
6387 15 Sep 21 nicklas 107       if (tgtDisabled) return false;      
6387 15 Sep 21 nicklas 108       
6387 15 Sep 21 nicklas 109       Filter<Annotatable> filter = Annotationtype.VARIANT_CALL_TYPE.createFilter("TargetedGenotype");
6387 15 Sep 21 nicklas 110       Software software = (Software)Subtype.VARIANT_CALLING_SOFTWARE.getLatestProjectDefault(dc, filter);
6387 15 Sep 21 nicklas 111       
6387 15 Sep 21 nicklas 112       TargetedGenotypeJobCreator jobCreator = new TargetedGenotypeJobCreator();
6387 15 Sep 21 nicklas 113       jobCreator.setSoftware(software);
6387 15 Sep 21 nicklas 114       jobCreator.setAutoConfirm(true);
6387 15 Sep 21 nicklas 115       jobCreator.setDebug(debug);
6982 17 Jan 23 nicklas 116       if (cluster == gtCluster) jobCreator.setPartition(partition);
6982 17 Jan 23 nicklas 117       jobCreator.setPartition(partition);
6387 15 Sep 21 nicklas 118       
6982 17 Jan 23 nicklas 119       List<JobDefinition> jobDefs = jobCreator.createGenotypeJobs(dc, gtCluster, 
6387 15 Sep 21 nicklas 120         Collections.singletonList(Rawbioassay.getById(dc, raw.getId())), 
6387 15 Sep 21 nicklas 121         TargetedGenotypeJobCreator.getConfiguredTargets());
6982 17 Jan 23 nicklas 122       ScriptUtil.submitJobs(dc, gtCluster, jobDefs);
6387 15 Sep 21 nicklas 123       
6387 15 Sep 21 nicklas 124       dc.commit();
6387 15 Sep 21 nicklas 125
6387 15 Sep 21 nicklas 126     }
6387 15 Sep 21 nicklas 127     finally
6387 15 Sep 21 nicklas 128     {
6387 15 Sep 21 nicklas 129       if (dc != null) dc.close();
6387 15 Sep 21 nicklas 130     }
6387 15 Sep 21 nicklas 131     return true;
5724 13 Nov 19 nicklas 132   }
5724 13 Nov 19 nicklas 133
5724 13 Nov 19 nicklas 134 }