extensions/net.sf.basedb.reggie/trunk/src/net/sf/basedb/reggie/plugins/release/CufflinksWriter.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
5103 16 Nov 18 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
5103 16 Nov 18 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;
5103 16 Nov 18 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.RawBioAssay;
5103 16 Nov 18 nicklas 20 import net.sf.basedb.core.RawDataType;
5103 16 Nov 18 nicklas 21 import net.sf.basedb.core.Type;
5103 16 Nov 18 nicklas 22 import net.sf.basedb.core.query.Expressions;
5103 16 Nov 18 nicklas 23 import net.sf.basedb.core.query.Hql;
5103 16 Nov 18 nicklas 24 import net.sf.basedb.core.query.Orders;
5103 16 Nov 18 nicklas 25 import net.sf.basedb.core.query.Restrictions;
5103 16 Nov 18 nicklas 26 import net.sf.basedb.reggie.Reggie;
5103 16 Nov 18 nicklas 27 import net.sf.basedb.reggie.dao.Annotationtype;
5103 16 Nov 18 nicklas 28 import net.sf.basedb.reggie.dao.Datafiletype;
5103 16 Nov 18 nicklas 29 import net.sf.basedb.reggie.dao.Rawbioassay;
5103 16 Nov 18 nicklas 30 import net.sf.basedb.reggie.dao.Rawdatatype;
5103 16 Nov 18 nicklas 31 import net.sf.basedb.reggie.json.FilteredJSONArray;
5103 16 Nov 18 nicklas 32 import net.sf.basedb.util.filter.Filter;
5103 16 Nov 18 nicklas 33 import net.sf.basedb.util.filter.NotNullFilter;
5103 16 Nov 18 nicklas 34
5103 16 Nov 18 nicklas 35 /**
5103 16 Nov 18 nicklas 36   Cohort writer implementation for the raw bioassay data table.
5103 16 Nov 18 nicklas 37   @since 4.5
5103 16 Nov 18 nicklas 38 */
5103 16 Nov 18 nicklas 39 public class CufflinksWriter 
5103 16 Nov 18 nicklas 40   extends RawBioAssayWriter 
5103 16 Nov 18 nicklas 41 {
5103 16 Nov 18 nicklas 42
5103 16 Nov 18 nicklas 43   private final ScriptWriter scriptWriter;
5103 16 Nov 18 nicklas 44   private final Filter<File> fileFilterCufflinks;
5103 16 Nov 18 nicklas 45   private final List<Annotationtype> gexTypes;
5103 16 Nov 18 nicklas 46   
5103 16 Nov 18 nicklas 47   public CufflinksWriter(DbControl dc, ReleaseWriterOptions options, ScriptWriter scriptWriter)
5103 16 Nov 18 nicklas 48   {
5103 16 Nov 18 nicklas 49     super(dc, options);
5103 16 Nov 18 nicklas 50     this.scriptWriter = scriptWriter;
5103 16 Nov 18 nicklas 51     this.fileFilterCufflinks = new FileListFilter(new HashSet<String>(Arrays.asList(
5103 16 Nov 18 nicklas 52         "isoforms.fpkm_tracking", "genes.fpkm_tracking",
5103 16 Nov 18 nicklas 53         "transcripts.gtf", "skipped.gtf"
5103 16 Nov 18 nicklas 54           )), true, new FileLocationFilter(Location.EXTERNAL, true));
5103 16 Nov 18 nicklas 55     
5103 16 Nov 18 nicklas 56     // Load all "GEX" annotation types
5103 16 Nov 18 nicklas 57     ItemQuery<AnnotationType> query = AnnotationType.getQuery(Item.RAWBIOASSAY);
5103 16 Nov 18 nicklas 58     query.setIncludes(Reggie.INCLUDE_IN_CURRENT_PROJECT);
5103 16 Nov 18 nicklas 59     query.join(Hql.innerJoin("categories", "cat"));
5103 16 Nov 18 nicklas 60     query.restrict(Restrictions.eq(Hql.property("cat", "name"), Expressions.string("GEX_Release")));
5103 16 Nov 18 nicklas 61     query.order(Orders.asc(Hql.property("name")));
5103 16 Nov 18 nicklas 62     List<AnnotationType> tmp = query.list(dc);
5103 16 Nov 18 nicklas 63     
5103 16 Nov 18 nicklas 64     gexTypes = new ArrayList<>(tmp.size());
5103 16 Nov 18 nicklas 65     for (AnnotationType at : tmp)
5103 16 Nov 18 nicklas 66     {
5103 16 Nov 18 nicklas 67       gexTypes.add(Annotationtype.get(at));
5103 16 Nov 18 nicklas 68     }
5103 16 Nov 18 nicklas 69   }
5103 16 Nov 18 nicklas 70   
5103 16 Nov 18 nicklas 71   @Override
5103 16 Nov 18 nicklas 72   public JSONArray toJSONObjects(CohortItem item)
5103 16 Nov 18 nicklas 73   {
5103 16 Nov 18 nicklas 74     List<Rawbioassay> cufflinks = item.getCufflinksBioAssays();
5103 16 Nov 18 nicklas 75     if (cufflinks.size() == 0) return null;
5103 16 Nov 18 nicklas 76     DbControl dc = item.getDbControl();
5103 16 Nov 18 nicklas 77     
5103 16 Nov 18 nicklas 78     JSONArray json = new JSONArray();
5103 16 Nov 18 nicklas 79     for (Rawbioassay raw : cufflinks)
5103 16 Nov 18 nicklas 80     {
5103 16 Nov 18 nicklas 81       RawBioAssay rba = raw.getItem();
5103 16 Nov 18 nicklas 82       RawDataType rawType = rba.getRawDataType();
5103 16 Nov 18 nicklas 83       Extract lib = rba.getParentExtract();
5103 16 Nov 18 nicklas 84       
5103 16 Nov 18 nicklas 85       DerivedBioAssay aligned = item.getParentBioAssay(rba.getName());
5103 16 Nov 18 nicklas 86       DerivedBioAssay masked = item.getParentBioAssay(aligned.getName());
5103 16 Nov 18 nicklas 87       DerivedBioAssay merged = item.getParentBioAssay(masked.getName());
5103 16 Nov 18 nicklas 88       
5103 16 Nov 18 nicklas 89       JSONObject jsonRaw = new JSONObject();
5103 16 Nov 18 nicklas 90       jsonRaw.put("name", item.toReleaseId(raw.getName()));
5103 16 Nov 18 nicklas 91       jsonRaw.put("type", rba.getType().name());
5103 16 Nov 18 nicklas 92       jsonRaw.put("rawdatatype", rawType.getId());
5103 16 Nov 18 nicklas 93       jsonRaw.put("platform", Rawdatatype.CUFFLINKS.getPlatformId());
5103 16 Nov 18 nicklas 94       jsonRaw.put("platformVariant", Rawdatatype.CUFFLINKS.getVariantId());
5103 16 Nov 18 nicklas 95       jsonRaw.put("parent", item.toReleaseId(merged.getName()));
5103 16 Nov 18 nicklas 96       jsonRaw.put("extract", item.toReleaseId(lib.getName()));
5103 16 Nov 18 nicklas 97   
5103 16 Nov 18 nicklas 98       JSONArray jsonAnnotations = new FilteredJSONArray(new NotNullFilter<>(false));
5103 16 Nov 18 nicklas 99       jsonRaw.put("annotations", jsonAnnotations);
5103 16 Nov 18 nicklas 100
5103 16 Nov 18 nicklas 101       // From the rawbioassay item
5103 16 Nov 18 nicklas 102       addCommonRawBioAssayAnnotations(item, rba, jsonAnnotations);
5103 16 Nov 18 nicklas 103       for (Annotationtype at : gexTypes)
5103 16 Nov 18 nicklas 104       {
5103 16 Nov 18 nicklas 105         jsonAnnotations.add(item.getAnnotationJSON(at, rba, null));
5103 16 Nov 18 nicklas 106       }
5103 16 Nov 18 nicklas 107       
5103 16 Nov 18 nicklas 108       // From the AlignedSequences and MaskedSequences item
5103 16 Nov 18 nicklas 109       addCommonAlignmentAnnotations(item, aligned, jsonAnnotations);
5103 16 Nov 18 nicklas 110       addCommonMaskedAnnotations(item, masked, jsonAnnotations);
5103 16 Nov 18 nicklas 111
5106 19 Nov 18 nicklas 112       // Folders and files
5106 19 Nov 18 nicklas 113       String dataFilesFolder = (String)item.getAnnotationValue(Annotationtype.DATA_FILES_FOLDER, rba);
5106 19 Nov 18 nicklas 114       String releaseDataFilesFolder = item.toReleaseFolder(dataFilesFolder);
5106 19 Nov 18 nicklas 115       JSONObject jsonDataFilesFolder = item.createAnnotationJSON(Annotationtype.DATA_FILES_FOLDER.getName(), releaseDataFilesFolder);
5106 19 Nov 18 nicklas 116       jsonAnnotations.add(jsonDataFilesFolder);
5106 19 Nov 18 nicklas 117     
5106 19 Nov 18 nicklas 118       JSONArray jsonFiles = new FilteredJSONArray(new NotNullFilter<>(false));
5142 22 Nov 18 nicklas 119       jsonFiles.addAll(item.getDataFilesJSON(Datafiletype.FPKM, rba, fileFilterCufflinks, false));
5142 22 Nov 18 nicklas 120       jsonFiles.addAll(item.getLinkedFilesJSON(rba, fileFilterCufflinks, false));
5106 19 Nov 18 nicklas 121       jsonRaw.put("files", jsonFiles);
5106 19 Nov 18 nicklas 122       
5106 19 Nov 18 nicklas 123       if (scriptWriter != null) 
5106 19 Nov 18 nicklas 124       {
5106 19 Nov 18 nicklas 125         scriptWriter.addFiles(releaseDataFilesFolder, dataFilesFolder, "cufflinks.lst", jsonFiles);
5106 19 Nov 18 nicklas 126       }
5106 19 Nov 18 nicklas 127
5103 16 Nov 18 nicklas 128       json.add(jsonRaw);
5103 16 Nov 18 nicklas 129     }
5103 16 Nov 18 nicklas 130     return json;
5103 16 Nov 18 nicklas 131   }
5103 16 Nov 18 nicklas 132   
5103 16 Nov 18 nicklas 133   @Override
5103 16 Nov 18 nicklas 134   public List<CohortTypeDef> getTypeDefsInJSON()
5103 16 Nov 18 nicklas 135   {
5103 16 Nov 18 nicklas 136     DbControl dc = getDbControl();
5103 16 Nov 18 nicklas 137     
5226 14 Jan 19 nicklas 138     CohortTypeDefFactory rawFactory = new CohortTypeDefFactory(dc, Item.RAWBIOASSAY, "Cufflinks");
5103 16 Nov 18 nicklas 139     
5103 16 Nov 18 nicklas 140     // From the MaskedSequences item
5103 16 Nov 18 nicklas 141     rawFactory.createAnnotationType("MaskSoftware", Type.STRING);
5103 16 Nov 18 nicklas 142     rawFactory.createAnnotationType(Annotationtype.PM_READS);
5103 16 Nov 18 nicklas 143     
5103 16 Nov 18 nicklas 144     // From the AlignedSequences item
5875 24 Mar 20 nicklas 145     rawFactory.createAnnotationType("AlignmentName", Type.STRING);
5103 16 Nov 18 nicklas 146     rawFactory.createAnnotationType("AlignSoftware", Type.STRING);
5103 16 Nov 18 nicklas 147     rawFactory.createAnnotationType(Annotationtype.ALIGNED_PAIRS);
5103 16 Nov 18 nicklas 148     rawFactory.createAnnotationType(Annotationtype.FRACTION_DUPLICATION);
5103 16 Nov 18 nicklas 149     rawFactory.createAnnotationType(Annotationtype.FRAGMENT_SIZE_AVG);
5103 16 Nov 18 nicklas 150     rawFactory.createAnnotationType(Annotationtype.FRAGMENT_SIZE_STDEV);
5103 16 Nov 18 nicklas 151     
5103 16 Nov 18 nicklas 152     // From the rawbioassay item
5103 16 Nov 18 nicklas 153     rawFactory.createAnnotationType("ArrayDesign", Type.STRING);
5103 16 Nov 18 nicklas 154     rawFactory.createAnnotationType("FeatureSoftware", Type.STRING);
5576 16 Aug 19 nicklas 155     rawFactory.createAnnotationType(Annotationtype.PIPELINE);
5103 16 Nov 18 nicklas 156     
5103 16 Nov 18 nicklas 157     rawFactory.createAnnotationType(Annotationtype.DATA_FILES_FOLDER).setProjectSpecificValues(true);
7014 26 Jan 23 nicklas 158     rawFactory.createFileType(Datafiletype.FPKM, Rawdatatype.CUFFLINKS);
5103 16 Nov 18 nicklas 159
5103 16 Nov 18 nicklas 160     for (Annotationtype at : gexTypes)
5103 16 Nov 18 nicklas 161     {
5103 16 Nov 18 nicklas 162       CohortAnnotationType cat = rawFactory.createAnnotationType(at);
5103 16 Nov 18 nicklas 163       cat.setProjectSpecificValues(true);
5103 16 Nov 18 nicklas 164     }
5103 16 Nov 18 nicklas 165     
5103 16 Nov 18 nicklas 166     return rawFactory.allCreated();
5103 16 Nov 18 nicklas 167   }
5103 16 Nov 18 nicklas 168
5103 16 Nov 18 nicklas 169 }