extensions/net.sf.basedb.reggie/trunk/src/net/sf/basedb/reggie/vcf/CompareData.java

Code
Comments
Other
Rev Date Author Line
4646 14 Dec 17 nicklas 1 package net.sf.basedb.reggie.vcf;
4646 14 Dec 17 nicklas 2
4646 14 Dec 17 nicklas 3 import java.util.ArrayList;
4819 22 May 18 nicklas 4 import java.util.Comparator;
4646 14 Dec 17 nicklas 5 import java.util.List;
4646 14 Dec 17 nicklas 6
4648 15 Dec 17 nicklas 7 import org.json.simple.JSONArray;
4646 14 Dec 17 nicklas 8 import org.json.simple.JSONObject;
4646 14 Dec 17 nicklas 9
4646 14 Dec 17 nicklas 10 import net.sf.basedb.core.DerivedBioAssay;
6443 19 Oct 21 nicklas 11 import net.sf.basedb.core.File;
4794 07 May 18 nicklas 12 import net.sf.basedb.reggie.vcf.GenoTypeMessage.Level;
4646 14 Dec 17 nicklas 13
4646 14 Dec 17 nicklas 14 /**
4646 14 Dec 17 nicklas 15   Class for holding the results after comparing the genotypes
4646 14 Dec 17 nicklas 16   of a single alignment against a set of several other alignments.
4646 14 Dec 17 nicklas 17   
4646 14 Dec 17 nicklas 18   @author nicklas
4646 14 Dec 17 nicklas 19   @since 4.14
4646 14 Dec 17 nicklas 20 */
4646 14 Dec 17 nicklas 21 public class CompareData 
4646 14 Dec 17 nicklas 22 {
4646 14 Dec 17 nicklas 23
4646 14 Dec 17 nicklas 24   private final DerivedBioAssay alignment;
6443 19 Oct 21 nicklas 25   private final File file;
4646 14 Dec 17 nicklas 26   private final VcfData vcf;
4794 07 May 18 nicklas 27   private final boolean flagged;
4794 07 May 18 nicklas 28   private final VerifiedMatch currentVerified;
4646 14 Dec 17 nicklas 29   
4646 14 Dec 17 nicklas 30   private int totalCompared;
4646 14 Dec 17 nicklas 31   private int comparedToSamePat;
4646 14 Dec 17 nicklas 32   private int skipped;
4646 14 Dec 17 nicklas 33
4794 07 May 18 nicklas 34   private boolean hasVerifiedMismatch;
4646 14 Dec 17 nicklas 35   private boolean recommendDisable;
4646 14 Dec 17 nicklas 36   private boolean recommendFlag;
7216 30 May 23 nicklas 37   private String recommendDoNotUse;
7216 30 May 23 nicklas 38   private String doNotUseComment;
4728 04 Apr 18 nicklas 39   private List<GenoTypeMessage> messages;
4646 14 Dec 17 nicklas 40   
4712 22 Mar 18 nicklas 41   
4646 14 Dec 17 nicklas 42   /**
4646 14 Dec 17 nicklas 43     Create a new empty comparison instance for the given
4646 14 Dec 17 nicklas 44     alignment and VCF file.
4646 14 Dec 17 nicklas 45   */
4794 07 May 18 nicklas 46   public CompareData(DerivedBioAssay alignment, VcfData vcf, boolean flagged)
4646 14 Dec 17 nicklas 47   {
4646 14 Dec 17 nicklas 48     this.alignment = alignment;
6443 19 Oct 21 nicklas 49     this.file = null;
4646 14 Dec 17 nicklas 50     this.vcf = vcf;
4794 07 May 18 nicklas 51     this.flagged = flagged;
4728 04 Apr 18 nicklas 52     this.messages = new ArrayList<>();
4794 07 May 18 nicklas 53     this.currentVerified = VerifiedMatch.getVerifiedMatch(alignment.getDbControl(), alignment);
4646 14 Dec 17 nicklas 54   }
4646 14 Dec 17 nicklas 55   
6443 19 Oct 21 nicklas 56   /**
6443 19 Oct 21 nicklas 57     Create a new empty comparison instance fo the given File and it's
6443 19 Oct 21 nicklas 58     VCF information.
6443 19 Oct 21 nicklas 59     @since 4.34
6443 19 Oct 21 nicklas 60   */
6443 19 Oct 21 nicklas 61   public CompareData(File vcfFile, VcfData vcf)
6443 19 Oct 21 nicklas 62   {
6443 19 Oct 21 nicklas 63     this.alignment = null;
6443 19 Oct 21 nicklas 64     this.file = vcfFile;
6443 19 Oct 21 nicklas 65     this.vcf = vcf;
6443 19 Oct 21 nicklas 66     this.flagged = false;
6443 19 Oct 21 nicklas 67     this.messages = new ArrayList<>();
6443 19 Oct 21 nicklas 68     this.currentVerified = null;
6443 19 Oct 21 nicklas 69   }
6443 19 Oct 21 nicklas 70
6443 19 Oct 21 nicklas 71   
4646 14 Dec 17 nicklas 72   public DerivedBioAssay getAlignment()
4646 14 Dec 17 nicklas 73   {
4646 14 Dec 17 nicklas 74     return alignment;
4646 14 Dec 17 nicklas 75   }
4646 14 Dec 17 nicklas 76   
6443 19 Oct 21 nicklas 77   /**
6443 19 Oct 21 nicklas 78     @since 4.34
6443 19 Oct 21 nicklas 79   */
6443 19 Oct 21 nicklas 80   public File getFile()
6443 19 Oct 21 nicklas 81   {
6443 19 Oct 21 nicklas 82     return file;
6443 19 Oct 21 nicklas 83   }
6443 19 Oct 21 nicklas 84   
4646 14 Dec 17 nicklas 85   public VcfData getVcf()
4646 14 Dec 17 nicklas 86   {
4646 14 Dec 17 nicklas 87     return vcf;
4646 14 Dec 17 nicklas 88   }
4646 14 Dec 17 nicklas 89   
4646 14 Dec 17 nicklas 90   /**
4646 14 Dec 17 nicklas 91     Register that a comparison has been made against
4646 14 Dec 17 nicklas 92     an alignment with the same or a different patient.
4646 14 Dec 17 nicklas 93   */
4646 14 Dec 17 nicklas 94   public void addCompared(boolean samePat)
4646 14 Dec 17 nicklas 95   {
4646 14 Dec 17 nicklas 96     totalCompared++;
4646 14 Dec 17 nicklas 97     if (samePat) comparedToSamePat++;
4646 14 Dec 17 nicklas 98   }
4646 14 Dec 17 nicklas 99   
4646 14 Dec 17 nicklas 100   /**
4646 14 Dec 17 nicklas 101     Register that a comparison was skipped due to
4646 14 Dec 17 nicklas 102     not enough common genotypes.
4646 14 Dec 17 nicklas 103   */
4646 14 Dec 17 nicklas 104   public void addSkipped(int numSkipped)
4646 14 Dec 17 nicklas 105   {
4646 14 Dec 17 nicklas 106     skipped += numSkipped;
4646 14 Dec 17 nicklas 107   }
4646 14 Dec 17 nicklas 108
4646 14 Dec 17 nicklas 109   /**
4646 14 Dec 17 nicklas 110     Get the total number of comparisons made.
4646 14 Dec 17 nicklas 111   */
4646 14 Dec 17 nicklas 112   public int getTotalCompared()
4646 14 Dec 17 nicklas 113   {
4646 14 Dec 17 nicklas 114     return totalCompared;
4646 14 Dec 17 nicklas 115   }
4646 14 Dec 17 nicklas 116   
4646 14 Dec 17 nicklas 117   /**
4646 14 Dec 17 nicklas 118     Get the number of comparisons made to an
4646 14 Dec 17 nicklas 119     alignment from the same patient.
4646 14 Dec 17 nicklas 120   */
4646 14 Dec 17 nicklas 121   public int getComparedToSamePat()
4646 14 Dec 17 nicklas 122   {
4646 14 Dec 17 nicklas 123     return comparedToSamePat;
4646 14 Dec 17 nicklas 124   }
4646 14 Dec 17 nicklas 125   
4646 14 Dec 17 nicklas 126   /**
4646 14 Dec 17 nicklas 127     Set a flag indicating that the recommended action is to
4646 14 Dec 17 nicklas 128     disable this alignment for use in future comparisons.
4646 14 Dec 17 nicklas 129     For example, this may be due to a very low number of
4646 14 Dec 17 nicklas 130     genotypes or a high number of HET genotypes.
4646 14 Dec 17 nicklas 131   */
4646 14 Dec 17 nicklas 132   public void setRecommendDisable()
4646 14 Dec 17 nicklas 133   {
4646 14 Dec 17 nicklas 134     this.recommendDisable = true;
4646 14 Dec 17 nicklas 135   }
4646 14 Dec 17 nicklas 136   
4646 14 Dec 17 nicklas 137   /**
4975 21 Sep 18 nicklas 138     Is the recommendation that the alignment should be
4975 21 Sep 18 nicklas 139     disabled or not?
4975 21 Sep 18 nicklas 140     @since 4.20
4975 21 Sep 18 nicklas 141   */
4975 21 Sep 18 nicklas 142   public boolean getRecommendDisable()
4975 21 Sep 18 nicklas 143   {
4975 21 Sep 18 nicklas 144     return recommendDisable;
4975 21 Sep 18 nicklas 145   }
4975 21 Sep 18 nicklas 146   
4975 21 Sep 18 nicklas 147   /**
4646 14 Dec 17 nicklas 148     Set a flag indicating that the recommended action
4646 14 Dec 17 nicklas 149     is to flag this alignment that further investigations
4646 14 Dec 17 nicklas 150     are required before a decision can be made.
4646 14 Dec 17 nicklas 151    */
4646 14 Dec 17 nicklas 152   public void setRecommendFlag()
4646 14 Dec 17 nicklas 153   {
4646 14 Dec 17 nicklas 154     this.recommendFlag = true;
4646 14 Dec 17 nicklas 155   }
4646 14 Dec 17 nicklas 156   
4975 21 Sep 18 nicklas 157   /**
4975 21 Sep 18 nicklas 158     Is the recommendation that the alignment should be
4975 21 Sep 18 nicklas 159     flagged or not?
4975 21 Sep 18 nicklas 160     @since 4.20
4975 21 Sep 18 nicklas 161   */
4975 21 Sep 18 nicklas 162   public boolean getRecommendFlag()
4975 21 Sep 18 nicklas 163   {
4975 21 Sep 18 nicklas 164     return recommendFlag;
4975 21 Sep 18 nicklas 165   }
4975 21 Sep 18 nicklas 166   
7216 30 May 23 nicklas 167   /**
7216 30 May 23 nicklas 168     Is the recommendation that the alignment should be annotated
7216 30 May 23 nicklas 169     as DoNotUse.
7216 30 May 23 nicklas 170     @since 4.48
7216 30 May 23 nicklas 171   */
7216 30 May 23 nicklas 172   public void setRecommendDoNotUse(String doNotUse, String doNotUseComment)
7216 30 May 23 nicklas 173   {
7216 30 May 23 nicklas 174     this.recommendDoNotUse = doNotUse;
7216 30 May 23 nicklas 175     this.doNotUseComment = doNotUseComment;
7216 30 May 23 nicklas 176   }
7216 30 May 23 nicklas 177   
7216 30 May 23 nicklas 178   /**
7216 30 May 23 nicklas 179     If not null, the recommendation is that the alignment should be annotated
7216 30 May 23 nicklas 180     with DoNotUse.
7216 30 May 23 nicklas 181     @since 4.48
7216 30 May 23 nicklas 182   */
7216 30 May 23 nicklas 183   public String getRecommendDoNotUse()
7216 30 May 23 nicklas 184   {
7216 30 May 23 nicklas 185     return recommendDoNotUse;
7216 30 May 23 nicklas 186   }
7216 30 May 23 nicklas 187   
7216 30 May 23 nicklas 188   /**
7216 30 May 23 nicklas 189     Auto-generated comment for DoNotUseComment.
7216 30 May 23 nicklas 190     @since 4.48
7216 30 May 23 nicklas 191   */
7216 30 May 23 nicklas 192   public String getDoNotUseComment()
7216 30 May 23 nicklas 193   {
7216 30 May 23 nicklas 194     return doNotUseComment;
7216 30 May 23 nicklas 195   }
7216 30 May 23 nicklas 196   
4728 04 Apr 18 nicklas 197   public void addMessage(GenoTypeMessage message)
4646 14 Dec 17 nicklas 198   {
4728 04 Apr 18 nicklas 199     messages.add(message);
6588 18 Feb 22 nicklas 200     if (message.getVerifiedAssay() != null && message.getCategory().isMismatch() && message.getWarningLevel() == Level.HIGH)
4794 07 May 18 nicklas 201     {
4794 07 May 18 nicklas 202       hasVerifiedMismatch = true;
4794 07 May 18 nicklas 203     }
4646 14 Dec 17 nicklas 204   }
4794 07 May 18 nicklas 205
4819 22 May 18 nicklas 206   /**
4819 22 May 18 nicklas 207     Sort the messages using the given comparator implementation.
4819 22 May 18 nicklas 208     @since 4.18
4819 22 May 18 nicklas 209   */
4819 22 May 18 nicklas 210   public List<GenoTypeMessage> sortMessages(Comparator<GenoTypeMessage> cmp)
4819 22 May 18 nicklas 211   {
4819 22 May 18 nicklas 212     messages.sort(cmp);
4819 22 May 18 nicklas 213     return messages;
4819 22 May 18 nicklas 214   }
4819 22 May 18 nicklas 215   
4728 04 Apr 18 nicklas 216   public List<GenoTypeMessage> getMessages()
4646 14 Dec 17 nicklas 217   {
4728 04 Apr 18 nicklas 218     return messages;
4648 15 Dec 17 nicklas 219   }
4728 04 Apr 18 nicklas 220
4648 15 Dec 17 nicklas 221   
4646 14 Dec 17 nicklas 222   public JSONObject asJSONObject()
4646 14 Dec 17 nicklas 223   {
4646 14 Dec 17 nicklas 224     JSONObject json = new JSONObject();
6443 19 Oct 21 nicklas 225     if (alignment != null)
6443 19 Oct 21 nicklas 226     {
6443 19 Oct 21 nicklas 227       json.put("id", alignment.getId());
6443 19 Oct 21 nicklas 228       json.put("alignment", alignment.getName());
6443 19 Oct 21 nicklas 229       json.put("type", "DERIVEDBIOASSAY");
6443 19 Oct 21 nicklas 230     }
6443 19 Oct 21 nicklas 231     else if (file != null)
6443 19 Oct 21 nicklas 232     {
6443 19 Oct 21 nicklas 233       json.put("id", file.getId());
6443 19 Oct 21 nicklas 234       json.put("file", file.getName());
6443 19 Oct 21 nicklas 235       json.put("type", "FILE");
6443 19 Oct 21 nicklas 236     }
6451 22 Oct 21 nicklas 237     json.put("vcf", vcf.asJSONObject(false));
4794 07 May 18 nicklas 238     json.put("flagged", flagged);
4646 14 Dec 17 nicklas 239     json.put("total", totalCompared);
4646 14 Dec 17 nicklas 240     json.put("samePat", comparedToSamePat);
4646 14 Dec 17 nicklas 241     json.put("skipped", skipped);
4794 07 May 18 nicklas 242     json.put("currentVerifiedBy", currentVerified == null ? null : currentVerified.name());
4794 07 May 18 nicklas 243     json.put("hasVerifiedMismatch", hasVerifiedMismatch);
4728 04 Apr 18 nicklas 244     JSONArray jsonMessages = new JSONArray();
4728 04 Apr 18 nicklas 245     json.put("messages", jsonMessages);
4728 04 Apr 18 nicklas 246     for (GenoTypeMessage msg : messages)
4648 15 Dec 17 nicklas 247     {
4728 04 Apr 18 nicklas 248       jsonMessages.add(msg.asJSONObject());
4648 15 Dec 17 nicklas 249     }
4646 14 Dec 17 nicklas 250     json.put("recommendDisable", recommendDisable);
4646 14 Dec 17 nicklas 251     json.put("recommendFlag", recommendFlag);
7216 30 May 23 nicklas 252     json.put("recommendDoNotUse", recommendDoNotUse);
7216 30 May 23 nicklas 253     json.put("doNotUseComment", doNotUseComment);
4646 14 Dec 17 nicklas 254     return json;
4646 14 Dec 17 nicklas 255   }
4646 14 Dec 17 nicklas 256
4646 14 Dec 17 nicklas 257 }