src/core/net/sf/basedb/util/affymetrix/CelValidationAction.java

Code
Comments
Other
Rev Date Author Line
5623 06 May 11 nicklas 1 /**
5623 06 May 11 nicklas 2   $Id$
5623 06 May 11 nicklas 3
5623 06 May 11 nicklas 4   Copyright (C) 2011 Nicklas Nordborg
5623 06 May 11 nicklas 5
5623 06 May 11 nicklas 6   This file is part of BASE - BioArray Software Environment.
5623 06 May 11 nicklas 7   Available at http://base.thep.lu.se/
5623 06 May 11 nicklas 8
5623 06 May 11 nicklas 9   BASE is free software; you can redistribute it and/or
5623 06 May 11 nicklas 10   modify it under the terms of the GNU General Public License
5623 06 May 11 nicklas 11   as published by the Free Software Foundation; either version 3
5623 06 May 11 nicklas 12   of the License, or (at your option) any later version.
5623 06 May 11 nicklas 13
5623 06 May 11 nicklas 14   BASE is distributed in the hope that it will be useful,
5623 06 May 11 nicklas 15   but WITHOUT ANY WARRANTY; without even the implied warranty of
5623 06 May 11 nicklas 16   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
5623 06 May 11 nicklas 17   GNU General Public License for more details.
5623 06 May 11 nicklas 18
5623 06 May 11 nicklas 19   You should have received a copy of the GNU General Public License
5623 06 May 11 nicklas 20   along with BASE. If not, see <http://www.gnu.org/licenses/>.
5623 06 May 11 nicklas 21 */
5623 06 May 11 nicklas 22 package net.sf.basedb.util.affymetrix;
5623 06 May 11 nicklas 23
5623 06 May 11 nicklas 24 import affymetrix.fusion.cdf.FusionCDFData;
5623 06 May 11 nicklas 25 import affymetrix.fusion.cel.FusionCELData;
5623 06 May 11 nicklas 26 import net.sf.basedb.core.ArrayDesign;
5623 06 May 11 nicklas 27 import net.sf.basedb.core.DataFileType;
5623 06 May 11 nicklas 28 import net.sf.basedb.core.DbControl;
5623 06 May 11 nicklas 29 import net.sf.basedb.core.File;
5623 06 May 11 nicklas 30 import net.sf.basedb.core.FileSetMember;
5623 06 May 11 nicklas 31 import net.sf.basedb.core.FileStoreUtil;
5623 06 May 11 nicklas 32 import net.sf.basedb.core.InvalidDataException;
5623 06 May 11 nicklas 33 import net.sf.basedb.core.InvalidRelationException;
5623 06 May 11 nicklas 34 import net.sf.basedb.core.RawBioAssay;
5623 06 May 11 nicklas 35 import net.sf.basedb.util.fileset.SingleFileValidationAction;
5623 06 May 11 nicklas 36
5623 06 May 11 nicklas 37 /**
5623 06 May 11 nicklas 38   Action for validation of CEL files in a file set. The
5623 06 May 11 nicklas 39   CEL file must be connected with a {@link RawBioAssay}.
5623 06 May 11 nicklas 40   The raw bioassay should have an {@link ArrayDesign} that
5623 06 May 11 nicklas 41   has a CDF file matching the chip type.
5623 06 May 11 nicklas 42   <p>
5623 06 May 11 nicklas 43   
5623 06 May 11 nicklas 44   This class is just a wrapper for {@link CelValidator} so
5623 06 May 11 nicklas 45   that we can hook the validation into the extensions system.
5623 06 May 11 nicklas 46   
5623 06 May 11 nicklas 47
5623 06 May 11 nicklas 48   @author Nicklas
5623 06 May 11 nicklas 49   @since 3.0
5623 06 May 11 nicklas 50   @base.modified $Date$
5623 06 May 11 nicklas 51 */
5623 06 May 11 nicklas 52 public class CelValidationAction
5623 06 May 11 nicklas 53   extends SingleFileValidationAction
5623 06 May 11 nicklas 54 {
5623 06 May 11 nicklas 55
5623 06 May 11 nicklas 56   private final DbControl dc;
5623 06 May 11 nicklas 57   private final RawBioAssay rba;
5623 06 May 11 nicklas 58   private final CelValidator validator;
5623 06 May 11 nicklas 59   
5623 06 May 11 nicklas 60   /**
5623 06 May 11 nicklas 61     Create a new action. 
5623 06 May 11 nicklas 62     @param dc An open DbControl
5623 06 May 11 nicklas 63     @param rba The raw bioassay the CEL file is connected with
5623 06 May 11 nicklas 64   */
5623 06 May 11 nicklas 65   public CelValidationAction(DbControl dc, RawBioAssay rba)
5623 06 May 11 nicklas 66   {
5623 06 May 11 nicklas 67     super(DataFileType.AFFYMETRIX_CEL);
5623 06 May 11 nicklas 68     this.dc = dc;
5623 06 May 11 nicklas 69     this.rba = rba;
5623 06 May 11 nicklas 70     this.validator = new CelValidator();
5623 06 May 11 nicklas 71   }
5623 06 May 11 nicklas 72
5623 06 May 11 nicklas 73   /*
5623 06 May 11 nicklas 74     From the ValidationAction interface
5623 06 May 11 nicklas 75     -----------------------------------
5623 06 May 11 nicklas 76   */
5623 06 May 11 nicklas 77   @Override
5623 06 May 11 nicklas 78   public void validateAndExtractMetadata()
5623 06 May 11 nicklas 79     throws InvalidDataException, InvalidRelationException
5623 06 May 11 nicklas 80   {
5623 06 May 11 nicklas 81     FileSetMember celMember = getAcceptedFile();
5623 06 May 11 nicklas 82     
5623 06 May 11 nicklas 83     FusionCELData celData = validator.loadCelFile(celMember.getFile());
5623 06 May 11 nicklas 84     validator.copyMetadata(celData, rba);
5623 06 May 11 nicklas 85     
5689 11 Aug 11 nicklas 86     // Check if the CEL matches the CDF on the ArrayDesign. 
5689 11 Aug 11 nicklas 87     // A failure will result in InvalidRelationException
5623 06 May 11 nicklas 88     try
5623 06 May 11 nicklas 89     {
5623 06 May 11 nicklas 90       ArrayDesign design = rba.getArrayDesign();
5623 06 May 11 nicklas 91       if (design == null) 
5623 06 May 11 nicklas 92       {
5623 06 May 11 nicklas 93         throw new InvalidDataException("Raw bioassay '" + rba.getName() + 
5623 06 May 11 nicklas 94           "' has no array design");
5623 06 May 11 nicklas 95       }
5623 06 May 11 nicklas 96       if (!AffymetrixUtil.isAffymetrix(design))
5623 06 May 11 nicklas 97       {
5623 06 May 11 nicklas 98         throw new InvalidDataException("The array design '" + design.getName() + 
5623 06 May 11 nicklas 99           "' is not an Affymetrix design.");
5623 06 May 11 nicklas 100       }
5623 06 May 11 nicklas 101
5623 06 May 11 nicklas 102       // Verify that CEL chip type match CDF type
5623 06 May 11 nicklas 103       File cdfFile = FileStoreUtil.getDataFile(dc, design, DataFileType.AFFYMETRIX_CDF, true);
5623 06 May 11 nicklas 104       if (cdfFile == null)
5623 06 May 11 nicklas 105       {
5623 06 May 11 nicklas 106         throw new InvalidDataException("The array design '" + design.getName() + 
5623 06 May 11 nicklas 107           "' doesn't have a valid CDF file.");
5623 06 May 11 nicklas 108       }
5623 06 May 11 nicklas 109       FusionCDFData cdfData = new CdfValidator().loadCdfFile(cdfFile);
5623 06 May 11 nicklas 110       validator.validateCelAndCdf(celData, cdfData, cdfFile.getName());
5623 06 May 11 nicklas 111     }
5623 06 May 11 nicklas 112     catch (Throwable t)
5623 06 May 11 nicklas 113     {
5623 06 May 11 nicklas 114       throw new InvalidRelationException(t);
5623 06 May 11 nicklas 115     }
5623 06 May 11 nicklas 116   }
5623 06 May 11 nicklas 117
5623 06 May 11 nicklas 118   @Override
5623 06 May 11 nicklas 119   public void resetMetadata()
5623 06 May 11 nicklas 120   {
5623 06 May 11 nicklas 121     validator.resetMetadata(rba);
5623 06 May 11 nicklas 122   }
5623 06 May 11 nicklas 123   // -----------------------------------
5623 06 May 11 nicklas 124
5623 06 May 11 nicklas 125 }