extensions/net.sf.basedb.reggie/trunk/src/net/sf/basedb/reggie/plugins/release/StringTieWriter.java

Code
Comments
Other
Rev Date Author Line
5103 16 Nov 18 nicklas 1 package net.sf.basedb.reggie.plugins.release;
5103 16 Nov 18 nicklas 2
5928 29 Apr 20 nicklas 3 import java.util.ArrayList;
5103 16 Nov 18 nicklas 4 import java.util.Arrays;
5103 16 Nov 18 nicklas 5 import java.util.HashSet;
5103 16 Nov 18 nicklas 6 import java.util.List;
5103 16 Nov 18 nicklas 7
5103 16 Nov 18 nicklas 8 import org.json.simple.JSONArray;
5103 16 Nov 18 nicklas 9 import org.json.simple.JSONObject;
5103 16 Nov 18 nicklas 10
5928 29 Apr 20 nicklas 11 import net.sf.basedb.core.AnnotationType;
5103 16 Nov 18 nicklas 12 import net.sf.basedb.core.DbControl;
5103 16 Nov 18 nicklas 13 import net.sf.basedb.core.DerivedBioAssay;
5103 16 Nov 18 nicklas 14 import net.sf.basedb.core.Extract;
5103 16 Nov 18 nicklas 15 import net.sf.basedb.core.File;
5103 16 Nov 18 nicklas 16 import net.sf.basedb.core.Item;
5928 29 Apr 20 nicklas 17 import net.sf.basedb.core.ItemQuery;
5103 16 Nov 18 nicklas 18 import net.sf.basedb.core.Location;
5103 16 Nov 18 nicklas 19 import net.sf.basedb.core.Quantity;
5103 16 Nov 18 nicklas 20 import net.sf.basedb.core.RawBioAssay;
5103 16 Nov 18 nicklas 21 import net.sf.basedb.core.RawDataType;
5103 16 Nov 18 nicklas 22 import net.sf.basedb.core.Type;
5928 29 Apr 20 nicklas 23 import net.sf.basedb.core.query.Expressions;
5928 29 Apr 20 nicklas 24 import net.sf.basedb.core.query.Hql;
5928 29 Apr 20 nicklas 25 import net.sf.basedb.core.query.Orders;
5928 29 Apr 20 nicklas 26 import net.sf.basedb.core.query.Restrictions;
5928 29 Apr 20 nicklas 27 import net.sf.basedb.reggie.Reggie;
5103 16 Nov 18 nicklas 28 import net.sf.basedb.reggie.dao.Annotationtype;
5103 16 Nov 18 nicklas 29 import net.sf.basedb.reggie.dao.Datafiletype;
5103 16 Nov 18 nicklas 30 import net.sf.basedb.reggie.dao.Rawbioassay;
5103 16 Nov 18 nicklas 31 import net.sf.basedb.reggie.dao.Rawdatatype;
5103 16 Nov 18 nicklas 32 import net.sf.basedb.reggie.json.FilteredJSONArray;
5103 16 Nov 18 nicklas 33 import net.sf.basedb.util.filter.Filter;
5103 16 Nov 18 nicklas 34 import net.sf.basedb.util.filter.NotNullFilter;
5103 16 Nov 18 nicklas 35 import net.sf.basedb.util.units.UnitUtil;
5103 16 Nov 18 nicklas 36
5103 16 Nov 18 nicklas 37 /**
5103 16 Nov 18 nicklas 38   Cohort writer implementation for StringTie data.
5103 16 Nov 18 nicklas 39   @since 4.21
5103 16 Nov 18 nicklas 40 */
5103 16 Nov 18 nicklas 41 public class StringTieWriter 
5103 16 Nov 18 nicklas 42   extends RawBioAssayWriter 
5103 16 Nov 18 nicklas 43 {
5103 16 Nov 18 nicklas 44
5103 16 Nov 18 nicklas 45   private final ScriptWriter scriptWriter;
5103 16 Nov 18 nicklas 46   private final Filter<File> fileFilterStringTie;
5928 29 Apr 20 nicklas 47   private final List<Annotationtype> releaseTypes;
5103 16 Nov 18 nicklas 48   
5103 16 Nov 18 nicklas 49   public StringTieWriter(DbControl dc, ReleaseWriterOptions options, ScriptWriter scriptWriter)
5103 16 Nov 18 nicklas 50   {
5103 16 Nov 18 nicklas 51     super(dc, options);
5103 16 Nov 18 nicklas 52     this.scriptWriter = scriptWriter;
5103 16 Nov 18 nicklas 53     this.fileFilterStringTie = new FileListFilter(new HashSet<String>(Arrays.asList(
5103 16 Nov 18 nicklas 54       "gene.tsv", "transcript.gtf", "e2t.ctab", "e_data.ctab", "i2t.ctab", "i_data.ctab",
6010 18 Sep 20 nicklas 55       "t_data.ctab", "transcript_covered.gtf", "gene_count.csv", "transcript_count.csv"
5103 16 Nov 18 nicklas 56         )), true, new FileLocationFilter(Location.EXTERNAL, true));
5928 29 Apr 20 nicklas 57     
5928 29 Apr 20 nicklas 58     // Load all "STRINGTIE_Release" annotation types
5928 29 Apr 20 nicklas 59     ItemQuery<AnnotationType> query = AnnotationType.getQuery(Item.RAWBIOASSAY);
5928 29 Apr 20 nicklas 60     query.setIncludes(Reggie.INCLUDE_IN_CURRENT_PROJECT);
5928 29 Apr 20 nicklas 61     query.join(Hql.innerJoin("categories", "cat"));
5928 29 Apr 20 nicklas 62     query.restrict(Restrictions.eq(Hql.property("cat", "name"), Expressions.string("STRINGTIE_Release")));
5928 29 Apr 20 nicklas 63     query.order(Orders.asc(Hql.property("name")));
5928 29 Apr 20 nicklas 64     List<AnnotationType> tmp = query.list(dc);
5928 29 Apr 20 nicklas 65     
5928 29 Apr 20 nicklas 66     releaseTypes = new ArrayList<>(tmp.size());
5928 29 Apr 20 nicklas 67     for (AnnotationType at : tmp)
5928 29 Apr 20 nicklas 68     {
5928 29 Apr 20 nicklas 69       releaseTypes.add(Annotationtype.get(at));
5928 29 Apr 20 nicklas 70     }
5103 16 Nov 18 nicklas 71   }
5103 16 Nov 18 nicklas 72   
5103 16 Nov 18 nicklas 73   @Override
5103 16 Nov 18 nicklas 74   public JSONArray toJSONObjects(CohortItem item)
5103 16 Nov 18 nicklas 75   {
5103 16 Nov 18 nicklas 76     List<Rawbioassay> stringTie = item.getStringTieBioAssays();
5103 16 Nov 18 nicklas 77     if (stringTie.size() == 0) return null;
5103 16 Nov 18 nicklas 78     DbControl dc = item.getDbControl();
5103 16 Nov 18 nicklas 79     
5103 16 Nov 18 nicklas 80     JSONArray json = new JSONArray();
5103 16 Nov 18 nicklas 81     for (Rawbioassay raw : stringTie)
5103 16 Nov 18 nicklas 82     {
5103 16 Nov 18 nicklas 83       RawBioAssay rba = raw.getItem();
5103 16 Nov 18 nicklas 84       RawDataType rawType = rba.getRawDataType();
5103 16 Nov 18 nicklas 85       Extract lib = rba.getParentExtract();
5103 16 Nov 18 nicklas 86       
5103 16 Nov 18 nicklas 87       DerivedBioAssay aligned = item.getParentBioAssay(rba.getName());
5103 16 Nov 18 nicklas 88       DerivedBioAssay masked = item.getParentBioAssay(aligned.getName());
5103 16 Nov 18 nicklas 89       DerivedBioAssay merged = item.getParentBioAssay(masked.getName());
5103 16 Nov 18 nicklas 90       
5103 16 Nov 18 nicklas 91       JSONObject jsonRaw = new JSONObject();
5103 16 Nov 18 nicklas 92       jsonRaw.put("name", item.toReleaseId(raw.getName()));
5103 16 Nov 18 nicklas 93       jsonRaw.put("type", rba.getType().name());
5103 16 Nov 18 nicklas 94       jsonRaw.put("rawdatatype", rawType.getId());
5103 16 Nov 18 nicklas 95       jsonRaw.put("platform", Rawdatatype.STRINGTIE.getPlatformId());
5103 16 Nov 18 nicklas 96       jsonRaw.put("platformVariant", Rawdatatype.STRINGTIE.getVariantId());
5103 16 Nov 18 nicklas 97       jsonRaw.put("parent", item.toReleaseId(merged.getName()));
5103 16 Nov 18 nicklas 98       jsonRaw.put("extract", item.toReleaseId(lib.getName()));
5103 16 Nov 18 nicklas 99   
5103 16 Nov 18 nicklas 100       JSONArray jsonAnnotations = new FilteredJSONArray(new NotNullFilter<>(false));
5103 16 Nov 18 nicklas 101       jsonRaw.put("annotations", jsonAnnotations);
5103 16 Nov 18 nicklas 102
5103 16 Nov 18 nicklas 103       // From the rawbioassay item
5103 16 Nov 18 nicklas 104       addCommonRawBioAssayAnnotations(item, rba, jsonAnnotations);
5928 29 Apr 20 nicklas 105       for (Annotationtype at : releaseTypes)
5928 29 Apr 20 nicklas 106       {
5928 29 Apr 20 nicklas 107         jsonAnnotations.add(item.getAnnotationJSON(at, rba, null));
5928 29 Apr 20 nicklas 108       }
5103 16 Nov 18 nicklas 109
5103 16 Nov 18 nicklas 110       // From the AlignedSequences item
5103 16 Nov 18 nicklas 111       addCommonAlignmentAnnotations(item, aligned, jsonAnnotations);
5103 16 Nov 18 nicklas 112       jsonAnnotations.add(item.getAnnotationJSON(Annotationtype.QC_GENOTYPE_HET_PCT, aligned, null));
5103 16 Nov 18 nicklas 113
5103 16 Nov 18 nicklas 114       // From the MaskedSequences item
5103 16 Nov 18 nicklas 115       addCommonMaskedAnnotations(item, masked, jsonAnnotations);
5103 16 Nov 18 nicklas 116       
5103 16 Nov 18 nicklas 117       // Folders and files
5106 19 Nov 18 nicklas 118       String dataFilesFolder = (String)item.getAnnotationValue(Annotationtype.DATA_FILES_FOLDER, rba);
5106 19 Nov 18 nicklas 119       String releaseDataFilesFolder = item.toReleaseFolder(dataFilesFolder);
5103 16 Nov 18 nicklas 120       JSONObject jsonDataFilesFolder = item.createAnnotationJSON(Annotationtype.DATA_FILES_FOLDER.getName(), releaseDataFilesFolder);
5103 16 Nov 18 nicklas 121       jsonAnnotations.add(jsonDataFilesFolder);
5103 16 Nov 18 nicklas 122     
5103 16 Nov 18 nicklas 123       JSONArray jsonFiles = new FilteredJSONArray(new NotNullFilter<>(false));
5142 22 Nov 18 nicklas 124       jsonFiles.addAll(item.getDataFilesJSON(Datafiletype.GENERIC_RAWDATA, rba, fileFilterStringTie, false));
5142 22 Nov 18 nicklas 125       jsonFiles.addAll(item.getLinkedFilesJSON(rba, fileFilterStringTie, false));
5106 19 Nov 18 nicklas 126       jsonRaw.put("files", jsonFiles);
5103 16 Nov 18 nicklas 127       
5103 16 Nov 18 nicklas 128       if (scriptWriter != null) 
5103 16 Nov 18 nicklas 129       {
5106 19 Nov 18 nicklas 130         scriptWriter.addFiles(releaseDataFilesFolder, dataFilesFolder, "stringtie.lst", jsonFiles);
5103 16 Nov 18 nicklas 131       }
5106 19 Nov 18 nicklas 132       
5103 16 Nov 18 nicklas 133       json.add(jsonRaw);
5103 16 Nov 18 nicklas 134     }
5103 16 Nov 18 nicklas 135     return json;
5103 16 Nov 18 nicklas 136   }
5103 16 Nov 18 nicklas 137   
5103 16 Nov 18 nicklas 138   @Override
5103 16 Nov 18 nicklas 139   public List<CohortTypeDef> getTypeDefsInJSON()
5103 16 Nov 18 nicklas 140   {
5103 16 Nov 18 nicklas 141     DbControl dc = getDbControl();
5103 16 Nov 18 nicklas 142     
5226 14 Jan 19 nicklas 143     CohortTypeDefFactory rawFactory = new CohortTypeDefFactory(dc, Item.RAWBIOASSAY, "StringTie");
5103 16 Nov 18 nicklas 144     
5103 16 Nov 18 nicklas 145     // From the MaskedSequences item
5103 16 Nov 18 nicklas 146     rawFactory.createAnnotationType("MaskSoftware", Type.STRING);
5103 16 Nov 18 nicklas 147     rawFactory.createAnnotationType(Annotationtype.PM_READS);
5103 16 Nov 18 nicklas 148     
5103 16 Nov 18 nicklas 149     // From the AlignedSequences item
5875 24 Mar 20 nicklas 150     rawFactory.createAnnotationType("AlignmentName", Type.STRING);
5103 16 Nov 18 nicklas 151     rawFactory.createAnnotationType("AlignSoftware", Type.STRING);
5103 16 Nov 18 nicklas 152     rawFactory.createAnnotationType(Annotationtype.ALIGNED_PAIRS);
5103 16 Nov 18 nicklas 153     rawFactory.createAnnotationType(Annotationtype.FRACTION_DUPLICATION);
5103 16 Nov 18 nicklas 154     rawFactory.createAnnotationType(Annotationtype.FRAGMENT_SIZE_AVG);
5103 16 Nov 18 nicklas 155     rawFactory.createAnnotationType(Annotationtype.FRAGMENT_SIZE_STDEV);
5103 16 Nov 18 nicklas 156     rawFactory.createAnnotationType(Annotationtype.QC_GENOTYPE_HET_PCT).setUnit(UnitUtil.getUnit(dc, Quantity.FRACTION, "%"));
5103 16 Nov 18 nicklas 157     
5103 16 Nov 18 nicklas 158     // From the rawbioassay item
5103 16 Nov 18 nicklas 159     rawFactory.createAnnotationType("ArrayDesign", Type.STRING);
5103 16 Nov 18 nicklas 160     rawFactory.createAnnotationType("FeatureSoftware", Type.STRING);
5576 16 Aug 19 nicklas 161     rawFactory.createAnnotationType(Annotationtype.PIPELINE);
5103 16 Nov 18 nicklas 162     
5103 16 Nov 18 nicklas 163     rawFactory.createAnnotationType(Annotationtype.DATA_FILES_FOLDER).setProjectSpecificValues(true);
7014 26 Jan 23 nicklas 164     rawFactory.createFileType(Datafiletype.GENERIC_RAWDATA, Rawdatatype.STRINGTIE);
5928 29 Apr 20 nicklas 165
5928 29 Apr 20 nicklas 166     for (Annotationtype at : releaseTypes)
5928 29 Apr 20 nicklas 167     {
5928 29 Apr 20 nicklas 168       CohortAnnotationType cat = rawFactory.createAnnotationType(at);
5928 29 Apr 20 nicklas 169     }
5928 29 Apr 20 nicklas 170
5103 16 Nov 18 nicklas 171     return rawFactory.allCreated();
5103 16 Nov 18 nicklas 172   }
5103 16 Nov 18 nicklas 173
5103 16 Nov 18 nicklas 174 }