content: /*************************************************************************
  *                                                                        *
  *  This file is part of the 20n/act project.                             *
  *  20n/act enables DNA prediction for synthetic biology/bioengineering.  *
  *  Copyright (C) 2017 20n Labs, Inc.                                     *
  *                                                                        *
  *  Please direct all queries to act@20n.com.                             *
  *                                                                        *
  *  This program is free software: you can redistribute it and/or modify  *
  *  it under the terms of the GNU General Public License as published by  *
  *  the Free Software Foundation, either version 3 of the License, or     *
  *  (at your option) any later version.                                   *
  *                                                                        *
  *  This program is distributed in the hope that it will be useful,       *
  *  but WITHOUT ANY WARRANTY; without even the implied warranty of        *
  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         *
  *  GNU General Public License for more details.                          *
  *                                                                        *
  *  You should have received a copy of the GNU General Public License     *
  *  along with this program.  If not, see <http://www.gnu.org/licenses/>. *
  *                                                                        *
  *************************************************************************/
  
  package com.act.lcms.db.analysis;
  
  import com.act.lcms.MS1;
  import com.act.lcms.db.model.MS1ScanForWellAndMassCharge;
  import com.act.lcms.db.model.Plate;
  import com.act.lcms.db.model.PlateWell;
  import com.act.lcms.db.model.ScanFile;
  
  import java.util.Map;
  
  public class ScanData<T extends PlateWell<T>> {
    public enum KIND {
      STANDARD,
      POS_SAMPLE,
      NEG_CONTROL,
      BLANK,
    }
  
    KIND kind;
    Plate plate;
    T well;
    ScanFile scanFile;
    String targetChemicalName;
    Map<String, Double> metlinMasses;
    MS1ScanForWellAndMassCharge ms1ScanResults;
  
    public ScanData(KIND kind, Plate plate, T well, ScanFile scanFile, String targetChemicalName,
                    Map<String, Double> metlinMasses, MS1ScanForWellAndMassCharge ms1ScanResults) {
      this.kind = kind;
      this.plate = plate;
      this.well = well;
      this.scanFile = scanFile;
      this.targetChemicalName = targetChemicalName;
      this.metlinMasses = metlinMasses;
      this.ms1ScanResults = ms1ScanResults;
    }
  
    public KIND getKind() {
      return kind;
    }
  
    public Plate getPlate() {
      return plate;
    }
  
    public T getWell() {
      return well;
    }
  
    public ScanFile getScanFile() {
      return scanFile;
    }
  
    public String getTargetChemicalName() {
      return targetChemicalName;
    }
  
    public Map<String, Double> getMetlinMasses() {
      return metlinMasses;
    }
  
    public MS1ScanForWellAndMassCharge getMs1ScanResults() {
      return ms1ScanResults;
    }
  
    @Override
    public String toString() {
      return String.format("%s: %s @ %s, file %s",
          kind, plate.getBarcode(), well.getCoordinatesString(), scanFile.getFilename());
    }
  }
  