Changeset 4531


Ignore:
Timestamp:
Sep 17, 2008, 2:27:26 PM (15 years ago)
Author:
Nicklas Nordborg
Message:

References #1124: Base1PluginExecuter fails to import lines with empty fields

Spots are only inserted if all channels have a valid value. Extra values are only inserted if the spot is inserted. Added test case with BASEFile in matrix format and with extra values.

Location:
branches/2.8-stable/src
Files:
1 added
10 edited

Legend:

Unmodified
Added
Removed
  • branches/2.8-stable/src/plugins/core/net/sf/basedb/plugins/Base1PluginExecuter.java

    r4530 r4531  
    18271827        List<String> setExtraFloats = new ArrayList<String>();
    18281828        if (ffp.getHeader("setExtraFloats") != null)
     1829        {
    18291830          setExtraFloats = Arrays.asList(ffp.getHeader("setExtraFloats").split("\\t"));
    1830        
     1831        }
    18311832        ffp.setMinDataColumns(columns.size() - 1 + assays.size() * assayFields.size());
    18321833       
     
    18801881
    18811882        for (int i = 0; i < intCol.length; ++i)
     1883        {
    18821884          intCol[i] += dataCol;
     1885        }
    18831886        aCol += dataCol;
    18841887        mCol += dataCol;
     
    19061909        }
    19071910       
     1911        float[] intensities = new float[intCol.length];
    19081912        while (ffp.hasMoreData())
    19091913        {
     
    19111915          FlatFileParser.Data dataline = ffp.nextData();
    19121916          int index = 0;
     1917          Integer position = Values.getInteger(dataline.get(posCol), null);
    19131918          for (Integer assayId : assays)
    19141919          {
     1920            // Only insert the spot if all intensity values are correct numbers
     1921            boolean insertSpot = true;
    19151922            short dataCubeColumn = bioAssayColumns.get(assayId);
    1916             try
     1923            if (intCols)
    19171924            {
    1918               float[] intensities = new float[intCol.length];
    1919               Integer position = dataline.get(posCol) == null ? null : new Integer(dataline.get(posCol));
    1920 
    1921               if (intCols)
     1925              for (int i = 0; i < intCol.length; ++i)
    19221926              {
    1923                 for (int i = 0; i < intCol.length; ++i)
    1924                   intensities[i] = dataline.get(intCol[i] + index) == null ? Float.NaN : new Float(dataline.get(intCol[i] + index));
     1927                float value = Values.getFloat(dataline.get(intCol[i] + index), Float.NaN);
     1928                insertSpot &= !Float.isNaN(value);
     1929                intensities[i] = value;
    19251930              }
    1926               else
     1931            }
     1932            else
     1933            {
     1934              float a = Values.getFloat(dataline.get(aCol + index), Float.NaN);
     1935              float m = Values.getFloat(dataline.get(mCol + index), Float.NaN);
     1936              insertSpot = !Float.isNaN(m) && !Float.isNaN(a);
     1937              if (insertSpot)
    19271938              {
    1928                 float a = dataline.get(aCol + index) == null ? Float.NaN : new Float(dataline.get(aCol + index));
    1929                 float m = dataline.get(mCol + index) == null ? Float.NaN : new Float(dataline.get(mCol + index));
    1930 
    19311939                // int2 = 10^a / 2^(0.5*m)
    19321940                // int1 = int2 * 2^m
    1933                 intensities[1] = new Float(Math.pow(10, a) / Math.pow(2, 0.5 * m));
    1934                 intensities[0] = new Float(intensities[1] * Math.pow(2, m));
     1941                intensities[1] = (float)(Math.pow(10, a) / Math.pow(2, 0.5 * m));
     1942                intensities[0] = (float)(intensities[1] * Math.pow(2, m));
    19351943              }
    1936 
     1944            }
     1945            if (insertSpot)
     1946            {
    19371947              spotBatcher.insert(dataCubeColumn, position, intensities);
    1938                    
     1948              // Extra values
    19391949              for (int i = 0; i < evBatcher.size(); i++)
    19401950              {
    1941                 try
     1951                float value = Values.getFloat(dataline.get(extraFloatsCol[i] + index), Float.NaN);
     1952                if (!Float.isNaN(value))
    19421953                {
    1943                   Float ev = new Float(dataline.get(extraFloatsCol[i] + index));
    1944                   evBatcher.get(i).insert(dataCubeColumn, position, ev);
     1954                  evBatcher.get(i).insert(dataCubeColumn, position, value);
    19451955                }
    1946                 catch (NumberFormatException e)
    1947                 {}
    19481956              }
    19491957            }
    1950             catch (NumberFormatException e)
    1951             {}
    1952             finally
    1953             {
    1954               index += assayFields.size();
    1955             }
    1956           }
    1957         }
    1958       }
    1959     }
    1960 
     1958            index += assayFields.size();
     1959          }
     1960        }
     1961      }
     1962    }
    19611963  }
    19621964 
  • branches/2.8-stable/src/plugins/core/net/sf/basedb/plugins/BioAssaySetExporter.java

    r4480 r4531  
    942942      ExtraValueType evt = ev.getExtraValueType();
    943943      items.add(new QueryItem("xtra."+evt.getExternalId(), "[Extra] "+evt.getName(),
    944         "_xc_"+evt.getName(), "xtra('" + evt.getExternalId() + "')", evt.getAverageMethod()));
     944        "_xc_"+evt.getExternalId(), "xtra('" + evt.getExternalId() + "')", evt.getAverageMethod()));
    945945    }
    946946    Collections.sort(items, new QueryItemTitleComparator());
  • branches/2.8-stable/src/test/Base1NullPlugin.java

    r4480 r4531  
    7171    while (line != null)
    7272    {
     73      if (line.startsWith("assayFields") && line.contains("_xc_"))
     74      {
     75        /*
     76          The file contains extra values. To make the
     77          import work we must remove the _xc_ prefix for the
     78          extra value columns and add a setExtraFloats header
     79        */
     80        String[] columns = line.split("\\t");
     81        line = "assayFields";
     82        String setExtraFloats = "setExtraFloats";
     83        for (int i = 1; i < columns.length; ++i)
     84        {
     85          String column = columns[i];
     86          if (column.startsWith("_xc_"))
     87          {
     88            column = column.substring(4);
     89            setExtraFloats += "\t" + column;
     90          }
     91          line += "\t" + column;
     92        }
     93        System.out.println(setExtraFloats);
     94      }
    7395      System.out.println(line);
    7496      log.println(line);
  • branches/2.8-stable/src/test/TestAnalyzePluginUtil.java

    r4480 r4531  
    2727import java.util.regex.Pattern;
    2828
     29import net.sf.basedb.core.BioAssaySet;
    2930import net.sf.basedb.core.DbControl;
    3031import net.sf.basedb.core.Experiment;
    3132import net.sf.basedb.core.Item;
     33import net.sf.basedb.core.ItemQuery;
    3234import net.sf.basedb.core.Permission;
    3335import net.sf.basedb.core.Platform;
     
    3739import net.sf.basedb.core.ReporterBatcher;
    3840import net.sf.basedb.core.data.RawData;
     41import net.sf.basedb.core.query.Hql;
     42import net.sf.basedb.core.query.Orders;
    3943import net.sf.basedb.util.FileUtil;
    4044import net.sf.basedb.util.Values;
     
    4852   * @param rawBioAssays number of {@link net.sf.basedb.core.RawBioAssay RawBioAssays} in experiment
    4953   * @param spots number of spots in each RawBioAssay
     54   * @param randomize Randomize imported intensity values by multiplying them with
     55   * a random value between 1+randomize and 1-randomize. Eg. if randomize=0.8, the factory is
     56   * a random value between 0.8 and 1.2
    5057  */
    51   static int test_createExperiment(String file, int rawBioAssays, int spots)
     58  static int test_createExperiment(String file, int rawBioAssays, int spots, float randomize)
    5259  {
    5360    if (!TestUtil.hasPermission(Permission.CREATE, Item.EXPERIMENT)) return 0;
     
    8996          rawData.setReporter(reporterId == null ? null : reporterBatcher.getByExternalId(reporterId));
    9097         
     98          float randomCh1 = (float)((2 * Math.random() - 1) * randomize + 1);
     99          float randomCh2 = (float)((2 * Math.random() - 1) * randomize + 1);
     100         
    91101          Map<String, Object> extraData = rawData.getAllExtended();
    92102          extraData.put("diameter", Values.getFloat(parsedData.get(7), null));
    93           extraData.put("ch1FgMedian", Values.getFloat(parsedData.get(8), null));
    94           extraData.put("ch1FgMean", Values.getFloat(parsedData.get(9), null));
    95           extraData.put("ch1FgSd", Values.getFloat(parsedData.get(10), null));
    96           extraData.put("ch1BgMedian", Values.getFloat(parsedData.get(11), null));
    97           extraData.put("ch1BgMean", Values.getFloat(parsedData.get(12), null));
    98           extraData.put("ch1BgSd", Values.getFloat(parsedData.get(13), null));
     103          extraData.put("ch1FgMedian", randomCh1 * Values.getFloat(parsedData.get(8), null));
     104          extraData.put("ch1FgMean", randomCh1 * Values.getFloat(parsedData.get(9), null));
     105          extraData.put("ch1FgSd", randomCh1 * Values.getFloat(parsedData.get(10), null));
     106          extraData.put("ch1BgMedian", randomCh1 * Values.getFloat(parsedData.get(11), null));
     107          extraData.put("ch1BgMean", randomCh1 * Values.getFloat(parsedData.get(12), null));
     108          extraData.put("ch1BgSd", randomCh1 * Values.getFloat(parsedData.get(13), null));
    99109          extraData.put("ch1PercSd1", Values.getInteger(parsedData.get(14), null));
    100110          extraData.put("ch1PercSd2", Values.getInteger(parsedData.get(15), null));
    101111          extraData.put("ch1PercSat", Values.getInteger(parsedData.get(16), null));
    102           extraData.put("ch2FgMedian", Values.getFloat(parsedData.get(17), null));
    103           extraData.put("ch2FgMean", Values.getFloat(parsedData.get(18), null));
    104           extraData.put("ch2FgSd", Values.getFloat(parsedData.get(19), null));
    105           extraData.put("ch2BgMedian", Values.getFloat(parsedData.get(20), null));
    106           extraData.put("ch2BgMean", Values.getFloat(parsedData.get(21), null));
    107           extraData.put("ch2BgSd", Values.getFloat(parsedData.get(22), null));
     112          extraData.put("ch2FgMedian", randomCh2 * Values.getFloat(parsedData.get(17), null));
     113          extraData.put("ch2FgMean", randomCh2 * Values.getFloat(parsedData.get(18), null));
     114          extraData.put("ch2FgSd", randomCh2 * Values.getFloat(parsedData.get(19), null));
     115          extraData.put("ch2BgMedian", randomCh2 * Values.getFloat(parsedData.get(20), null));
     116          extraData.put("ch2BgMean", randomCh2 * Values.getFloat(parsedData.get(21), null));
     117          extraData.put("ch2BgSd", randomCh2 * Values.getFloat(parsedData.get(22), null));
    108118          extraData.put("ch2PercSd1", Values.getInteger(parsedData.get(23), null));
    109119          extraData.put("ch2PercSd2", Values.getInteger(parsedData.get(24), null));
     
    150160        formulaId, rawBioAssayIds);
    151161      TestJob.test_execute(jobId);
    152      
     162      ItemQuery<BioAssaySet> query = e.getBioAssaySets();
     163      query.order(Orders.desc(Hql.property("id")));
     164      id = query.iterate(dc).next().getId();
    153165      write("--Create root BioAssaySet in TestAnalyzePluginUtil OK");
    154166    }
  • branches/2.8-stable/src/test/TestBase1PluginExecuter.java

    r4480 r4531  
    1616import net.sf.basedb.core.PluginResponse;
    1717import net.sf.basedb.core.RequestInformation;
     18import net.sf.basedb.core.Type;
    1819import net.sf.basedb.core.plugin.Response;
    1920
     
    6364   
    6465    // Create experiment
    65     int experimentId = TestAnalyzePluginUtil.test_createExperiment("data/test.rawdata.import.txt", 2, 100);
     66    int experimentId = TestAnalyzePluginUtil.test_createExperiment("data/test.rawdata.import.txt", 2, 100, 0.8f);
    6667    int[] rawBioAssays = TestExperiment.test_list_rawbioassays(experimentId, -1);
    6768
     
    7475    int fileId = TestFile.test_create("data/test.nullplugin.base", false, false);
    7576    int fileId2 = TestFile.test_create("data/test.base1plugin.base", false, false);
     77    int fileIdMatrix = TestFile.test_create("data/test.nullplugin.matrix.base", false, false);
    7678    int directoryId = TestDirectory.test_create(true, "Base1PluginExecuter");
    7779   
    78     TestAnalyzePluginUtil.test_createRootBioAssaySet(experimentId, formulaId);
     80    int rootBioAssaySetId = TestAnalyzePluginUtil.test_createRootBioAssaySet(experimentId, formulaId);
     81    int filteredBioAssaySetId = TestExperiment.test_filter_bioassayset(rootBioAssaySetId, 1);
    7982    int pluginDefinitionId = TestPluginDefinition.test_get("net.sf.basedb.plugins.Base1PluginExecuter");
    8083    int pluginConfigurationId = test_create_configuration(pluginDefinitionId, fileId);
    8184    int pluginConfigurationId2 = test_create_configuration(pluginDefinitionId, fileId2);
    82    
    83     // Copy input to output
    84     int jobId = test_create_job(pluginConfigurationId, experimentId, directoryId);
     85    int pluginConfigurationIdMatrix = test_create_configuration(pluginDefinitionId, fileIdMatrix);
     86   
     87    // Calculate extra value
     88    int aExtraValueId = TestExtraValueType.test_create("a", Type.FLOAT, false);
     89    TestExperiment.test_calculate_spotextravalues(rootBioAssaySetId, false, 0, aExtraValueId, 0);
     90    TestExperiment.test_calculate_spotextravalues(filteredBioAssaySetId, false, 0, aExtraValueId, 0);
     91   
     92    // Copy input to output - serial format
     93    int jobId = test_create_job(pluginConfigurationId, experimentId, rootBioAssaySetId, directoryId);
    8594    TestJob.test_execute(jobId);
    8695   
     96    // Copy input to output - matrix format
     97    int jobIdMatrix = test_create_job(pluginConfigurationIdMatrix, experimentId, rootBioAssaySetId, directoryId);
     98    TestJob.test_execute(jobIdMatrix);
     99   
     100    // Copy input to output - matrix format - filtered bioassayset
     101    int jobIdMatrix2 = test_create_job(pluginConfigurationIdMatrix, experimentId, filteredBioAssaySetId, directoryId);
     102    TestJob.test_execute(jobIdMatrix2);
     103   
    87104    // One-to-one mapping on assays and reporters
    88     int jobId2 = test_create_job(pluginConfigurationId2, experimentId, directoryId);
     105    int jobId2 = test_create_job(pluginConfigurationIdMatrix, experimentId, rootBioAssaySetId, directoryId);
    89106    TestJob.test_execute(jobId2);
    90107
    91108    // Merge assays
    92     int jobId3 = test_create_job(pluginConfigurationId2, experimentId, directoryId,
     109    int jobId3 = test_create_job(pluginConfigurationId2, experimentId, rootBioAssaySetId, directoryId,
    93110        new Parameter("mergeAssays", "1"));
    94111    TestJob.test_execute(jobId3);
    95112
    96113    // Offset positions
    97     int jobId4 = test_create_job(pluginConfigurationId2, experimentId, directoryId,
     114    int jobId4 = test_create_job(pluginConfigurationId2, experimentId, rootBioAssaySetId, directoryId,
    98115        new Parameter("offsetPositions", "1"));
    99116    TestJob.test_execute(jobId4);
    100117
    101118    // Offset positions and merge assays
    102     int jobId5 = test_create_job(pluginConfigurationId2, experimentId, directoryId,
     119    int jobId5 = test_create_job(pluginConfigurationId2, experimentId, rootBioAssaySetId, directoryId,
    103120        new Parameter("mergeAssays", "1"), new Parameter("offsetPositions", "1"));
    104121    TestJob.test_execute(jobId5);
    105122
    106123    // Create reporter list
    107     int jobId6 = test_create_job(pluginConfigurationId2, experimentId, directoryId,
     124    int jobId6 = test_create_job(pluginConfigurationId2, experimentId, rootBioAssaySetId, directoryId,
    108125        new Parameter("reporterList", "1"));
    109126    TestJob.test_execute(jobId6);
     
    120137      }
    121138    }
     139    TestExtraValueType.test_delete(aExtraValueId);
    122140    TestPluginConfiguration.test_delete(pluginConfigurationId);
    123141    TestPluginConfiguration.test_delete(pluginConfigurationId2);
     142    TestPluginConfiguration.test_delete(pluginConfigurationIdMatrix);
    124143    TestFormula.test_delete(formulaId);
    125144    TestFormula.test_delete(formulaChromosomeId);
    126145    TestFile.test_delete(fileId);
    127146    TestFile.test_delete(fileId2);
     147    TestFile.test_delete(fileIdMatrix);
    128148    TestDirectory.test_delete(directoryId, true);
    129149    TestReporter.test_delete();
     
    177197  }
    178198 
    179   static int test_create_job(int pluginConfigurationId, int experimentId, int directoryId, Parameter... parameters)
     199  static int test_create_job(int pluginConfigurationId, int experimentId, int bioAssaySetId, int directoryId, Parameter... parameters)
    180200  {
    181201    if (pluginConfigurationId == 0 || !TestUtil.hasPermission(Permission.CREATE, Item.JOB)) return 0;
     
    187207
    188208      Experiment e = Experiment.getById(dc, experimentId);
    189       BioAssaySet bioAssaySet = e.getBioAssaySets().iterate(dc).next();
     209      BioAssaySet bioAssaySet = BioAssaySet.getById(dc, bioAssaySetId);
    190210     
    191211      PluginConfiguration pc = PluginConfiguration.getById(dc, pluginConfigurationId);
  • branches/2.8-stable/src/test/TestBioAsssaySetExporter.java

    r4480 r4531  
    111111      TestExperiment.test_add_rawbioassay(experiment, rba2);
    112112      bas = TestExperiment.test_create_root_bioassayset_using_calculator(experiment, "medianfg", new int[] {rba1, rba2});
    113       TestExperiment.test_calculate_spotextravalues(bas, 0, 0, 0);
    114113     
    115114      test_exportBaseFile(bas, file, false, false);
  • branches/2.8-stable/src/test/TestExperiment.java

    r4480 r4531  
    110110   
    111111   
    112     int filterBasId = test_filter_bioassayset(rootBasId);
     112    int filterBasId = test_filter_bioassayset(rootBasId, 2.0f);
    113113    int basId = test_create_bioassayset(filterBasId);
    114114   
     
    117117    int stringExtraId = TestExtraValueType.test_create("test.string", Type.STRING, false);
    118118   
    119     int extraSpotId = test_calculate_spotextravalues(filterBasId, intExtraId, floatExtraId, stringExtraId);
     119    int extraSpotId = test_calculate_spotextravalues(filterBasId, true,
     120        intExtraId, floatExtraId, stringExtraId);
    120121    int extraPosId = test_calculate_positionextravalues(filterBasId, intExtraId, floatExtraId, stringExtraId);
    121122    // TODO
     
    934935  }
    935936
    936   static int test_filter_bioassayset(int bioAssaySetId)
     937  static int test_filter_bioassayset(int bioAssaySetId, float factor)
    937938  {
    938939    if (bioAssaySetId == 0) return 0;
     
    963964        )
    964965      );
    965       query.setParameter("factor", 2, Type.INT);
     966      query.setParameter("factor", factor, Type.FLOAT);
    966967     
    967968      FilterBatcher filterBatcher = bas.getFilterBatcher();
     
    998999  }
    9991000
    1000   static int test_calculate_spotextravalues(int bioAssaySetId, int intExtraId, int floatExtraId, int stringExtraId)
     1001  static int test_calculate_spotextravalues(int bioAssaySetId, boolean createChild,
     1002      int intExtraId, int floatExtraId, int stringExtraId)
    10011003  {
    10021004    if (bioAssaySetId == 0) return 0;
     
    10081010      BioAssaySet source = BioAssaySet.getById(dc, bioAssaySetId);
    10091011     
    1010       Transformation t = source.newTransformation(null);
    1011       dc.saveItem(t);
    1012 
    1013       BioAssaySet bas = t.newProduct(null, null, true);
    1014       bas.setName("Extra spot values bioassayset");
    1015       dc.saveItem(bas);
     1012      BioAssaySet insertTo = source;
     1013      if (createChild)
     1014      {
     1015        Transformation t = source.newTransformation(null);
     1016        dc.saveItem(t);
     1017 
     1018        insertTo = t.newProduct(null, null, true);
     1019        insertTo.setName("Extra spot values bioassayset");
     1020        dc.saveItem(insertTo);
     1021      }
    10161022
    10171023      SpotExtraValueBatcher<Integer> intBatcher = null;
     
    10191025      {
    10201026        ExtraValueType intExtraValue = ExtraValueType.getById(dc, intExtraId);
    1021         intBatcher = bas.getSpotExtraValueBatcher(Integer.class, intExtraValue, null);
     1027        intBatcher = insertTo.getSpotExtraValueBatcher(Integer.class, intExtraValue, null);
    10221028      }
    10231029      SpotExtraValueBatcher<Float> floatBatcher = null;
     
    10251031      {
    10261032        ExtraValueType floatExtraValue = ExtraValueType.getById(dc, floatExtraId);
    1027         floatBatcher = bas.getSpotExtraValueBatcher(Float.class, floatExtraValue, null);
     1033        floatBatcher = insertTo.getSpotExtraValueBatcher(Float.class, floatExtraValue, null);
    10281034      }
    10291035      SpotExtraValueBatcher<String> stringBatcher = null;
     
    10311037      {
    10321038        ExtraValueType stringExtraValue = ExtraValueType.getById(dc, stringExtraId);
    1033         stringBatcher = bas.getSpotExtraValueBatcher(String.class, stringExtraValue, null);
     1039        stringBatcher = insertTo.getSpotExtraValueBatcher(String.class, stringExtraValue, null);
    10341040      }
    10351041     
     
    10661072
    10671073      dc.commit();
    1068       id = bas.getId();
    1069       dc = TestUtil.getDbControl();
    1070       dc.reattachItem(bas);
    1071       write_item(0, bas);
     1074      id = insertTo.getId();
     1075      dc = TestUtil.getDbControl();
     1076      dc.reattachItem(insertTo);
     1077      write_item(0, insertTo);
    10721078      write("--Calculate spot extra values OK ("+numSpots+" values inserted)");
    10731079
  • branches/2.8-stable/src/test/TestLowessNormalization.java

    r4480 r4531  
    5454  {
    5555    write("++Testing TestLowessNormalization");
    56     int experimentId = TestAnalyzePluginUtil.test_createExperiment("data/test.rawdata.import.txt", 2, 100);
     56    int experimentId = TestAnalyzePluginUtil.test_createExperiment("data/test.rawdata.import.txt", 2, 100, 1.0f);
    5757
    5858    int formulaId = TestFormula.test_create(null, Formula.Type.INTENSITY_EXPRESSION,
  • branches/2.8-stable/src/test/TestMedianRatioNormalization.java

    r4480 r4531  
    4949  {
    5050    write("++Testing MedianRatioNormalization");
    51     int experimentId = TestAnalyzePluginUtil.test_createExperiment("data/test.rawdata.import.txt", 2, 100);
     51    int experimentId = TestAnalyzePluginUtil.test_createExperiment("data/test.rawdata.import.txt", 2, 100, 1.0f);
    5252    int formulaId = TestFormula.test_create(null, Formula.Type.INTENSITY_EXPRESSION,
    5353        "genepix", new String[] { "raw('ch1FgMedian')", "raw('ch2FgMedian')" }, false);
  • branches/2.8-stable/src/test/data/test.nullplugin.base

    r4232 r4531  
    11BASEfile
    22section plugin
    3 uniqueName  onk.lu.se/enell/wget
     3uniqueName  nullplugin-serial
    44versionNumber 1.0
    55name  Base1NullPlugin
Note: See TracChangeset for help on using the changeset viewer.