001/*
002 * mzTab-M reference implementation and validation API.
003 * This is the mzTab-M reference implementation and validation API service.
004 *
005 * OpenAPI spec version: 2.0.0
006 * Contact: nils.hoffmann@isas.de
007 *
008 * NOTE: This class is auto generated by the swagger code generator program.
009 * https://github.com/swagger-api/swagger-codegen.git
010 * Do not edit the class manually.
011 */
012
013
014package de.isas.mztab2.model;
015
016import java.util.Objects;
017import java.util.Arrays;
018import com.fasterxml.jackson.annotation.JsonProperty;
019import com.fasterxml.jackson.annotation.JsonCreator;
020import com.fasterxml.jackson.annotation.JsonValue;
021import de.isas.mztab2.model.Comment;
022import de.isas.mztab2.model.OptColumnMapping;
023import de.isas.mztab2.model.Parameter;
024import io.swagger.annotations.ApiModel;
025import io.swagger.annotations.ApiModelProperty;
026import java.util.ArrayList;
027import java.util.List;
028import com.fasterxml.jackson.dataformat.xml.annotation.*;
029import javax.xml.bind.annotation.*;
030import javax.validation.constraints.*;
031import javax.validation.Valid;
032import de.isas.lipidomics.mztab2.validation.constraints.*;
033/**
034 * 
035 * The small molecule feature section is table-based, representing individual MS regions (generally considered to be the elution profile for all isotopomers formed from a single charge state of a molecule), that have been measured/quantified. However, for approaches that quantify individual isotopomers e.g. stable isotope labelling/flux studies, then each SMF row SHOULD represent a single isotopomer.
036
037Different adducts or derivatives and different charge states of individual molecules should be reported as separate SMF rows.
038
039The small molecule feature section MUST always come after the Small Molecule Table. All table columns MUST be Tab separated. There MUST NOT be any empty cells. Missing values MUST be reported using “null”.
040
041The order of columns MUST follow the order specified below.
042
043All columns are MANDATORY except for “opt_” columns.
044
045 * 
046 *
047 * 
048 *
049 */
050@ApiModel(description = "The small molecule feature section is table-based, representing individual MS regions (generally considered to be the elution profile for all isotopomers formed from a single charge state of a molecule), that have been measured/quantified. However, for approaches that quantify individual isotopomers e.g. stable isotope labelling/flux studies, then each SMF row SHOULD represent a single isotopomer.  Different adducts or derivatives and different charge states of individual molecules should be reported as separate SMF rows.  The small molecule feature section MUST always come after the Small Molecule Table. All table columns MUST be Tab separated. There MUST NOT be any empty cells. Missing values MUST be reported using “null”.  The order of columns MUST follow the order specified below.  All columns are MANDATORY except for “opt_” columns. ")
051@javax.annotation.Generated(value = "io.swagger.codegen.languages.JavaClientCodegen", date = "2021-01-02T19:26:21.550+01:00")
052@XmlRootElement(name = "SmallMoleculeFeature")
053@XmlAccessorType(XmlAccessType.FIELD)
054@JacksonXmlRootElement(localName = "SmallMoleculeFeature")
055public class SmallMoleculeFeature {
056
057  /**
058   * Property enumeration for SmallMoleculeFeature.
059   */
060  public static enum Properties {
061      prefix("prefix"), 
062      headerPrefix("header_prefix"), 
063      smfId("smf_id"), 
064      smeIdRefs("sme_id_refs"), 
065      smeIdRefAmbiguityCode("sme_id_ref_ambiguity_code"), 
066      adductIon("adduct_ion"), 
067      isotopomer("isotopomer"), 
068      expMassToCharge("exp_mass_to_charge"), 
069      charge("charge"), 
070      retentionTimeInSeconds("retention_time_in_seconds"), 
071      retentionTimeInSecondsStart("retention_time_in_seconds_start"), 
072      retentionTimeInSecondsEnd("retention_time_in_seconds_end"), 
073      abundanceAssay("abundance_assay"), 
074      opt("opt"), 
075      comment("comment");
076
077    private final String propertyName;
078
079    private Properties(String propertyName) {
080      this.propertyName = propertyName;
081    }
082
083    public String getPropertyName() {
084      return propertyName;
085    }
086
087    public String toString() {
088      return propertyName;
089    }
090
091    public String toUpper() {
092      return propertyName.toUpperCase();
093    }
094
095    public static Properties of(String value) {
096      if(value==null) {
097        throw new NullPointerException("Argument value must not be null!");
098      }
099      return Arrays.asList(Properties.values()).stream().filter(m -> m.propertyName.equals(value.toLowerCase())).findAny().orElseThrow(IllegalArgumentException::new);
100    }
101  };
102  
103  /**
104   * The small molecule feature table row prefix. SMF MUST be used for rows of the small molecule feature table.
105   */
106  public enum PrefixEnum {
107    SMF("SMF");
108
109    private String value;
110
111    PrefixEnum(String value) {
112      this.value = value;
113    }
114
115    @JsonValue
116    public String getValue() {
117      return value;
118    }
119
120    @Override
121    public String toString() {
122      return String.valueOf(value);
123    }
124
125    @JsonCreator
126    public static PrefixEnum fromValue(String text) {
127      for (PrefixEnum b : PrefixEnum.values()) {
128        if (String.valueOf(b.value).equals(text)) {
129          return b;
130        }
131      }
132      return null;
133    }
134  }
135
136  @JsonProperty("prefix")
137  @JacksonXmlProperty(localName = "prefix")
138  @XmlElement(name = "prefix")
139  private PrefixEnum prefix = PrefixEnum.SMF;
140  /**
141   * The small molecule feature table header prefix. SFH MUST be used for the small molecule feature table header line (the column labels).
142   */
143  public enum HeaderPrefixEnum {
144    SFH("SFH");
145
146    private String value;
147
148    HeaderPrefixEnum(String value) {
149      this.value = value;
150    }
151
152    @JsonValue
153    public String getValue() {
154      return value;
155    }
156
157    @Override
158    public String toString() {
159      return String.valueOf(value);
160    }
161
162    @JsonCreator
163    public static HeaderPrefixEnum fromValue(String text) {
164      for (HeaderPrefixEnum b : HeaderPrefixEnum.values()) {
165        if (String.valueOf(b.value).equals(text)) {
166          return b;
167        }
168      }
169      return null;
170    }
171  }
172
173  @JsonProperty("header_prefix")
174  @JacksonXmlProperty(localName = "header_prefix")
175  @XmlElement(name = "header_prefix")
176  private HeaderPrefixEnum headerPrefix = HeaderPrefixEnum.SFH;
177  @JsonProperty("smf_id")
178  @JacksonXmlProperty(localName = "smf_id")
179  @XmlElement(name = "smf_id")
180  private Integer smfId = null;
181  @JsonProperty("sme_id_refs")
182  // Is a container wrapped=false
183  // items.name=smeIdRefs items.baseName=smeIdRefs items.xmlName= items.xmlNamespace=
184  // items.example= items.type=Integer
185  @XmlElement(name = "smeIdRefs")
186  private List<Integer> smeIdRefs = null;
187  @JsonProperty("sme_id_ref_ambiguity_code")
188  @JacksonXmlProperty(localName = "sme_id_ref_ambiguity_code")
189  @XmlElement(name = "sme_id_ref_ambiguity_code")
190  private Integer smeIdRefAmbiguityCode = null;
191  @JsonProperty("adduct_ion")
192  @JacksonXmlProperty(localName = "adduct_ion")
193  @XmlElement(name = "adduct_ion")
194  private String adductIon = null;
195  @JsonProperty("isotopomer")
196  @JacksonXmlProperty(localName = "isotopomer")
197  @XmlElement(name = "isotopomer")
198  private Parameter isotopomer = null;
199  @JsonProperty("exp_mass_to_charge")
200  @JacksonXmlProperty(localName = "exp_mass_to_charge")
201  @XmlElement(name = "exp_mass_to_charge")
202  private Double expMassToCharge = null;
203  @JsonProperty("charge")
204  @JacksonXmlProperty(localName = "charge")
205  @XmlElement(name = "charge")
206  private Integer charge = null;
207  @JsonProperty("retention_time_in_seconds")
208  @JacksonXmlProperty(localName = "retention_time_in_seconds")
209  @XmlElement(name = "retention_time_in_seconds")
210  private Double retentionTimeInSeconds = null;
211  @JsonProperty("retention_time_in_seconds_start")
212  @JacksonXmlProperty(localName = "retention_time_in_seconds_start")
213  @XmlElement(name = "retention_time_in_seconds_start")
214  private Double retentionTimeInSecondsStart = null;
215  @JsonProperty("retention_time_in_seconds_end")
216  @JacksonXmlProperty(localName = "retention_time_in_seconds_end")
217  @XmlElement(name = "retention_time_in_seconds_end")
218  private Double retentionTimeInSecondsEnd = null;
219  @JsonProperty("abundance_assay")
220  // Is a container wrapped=false
221  // items.name=abundanceAssay items.baseName=abundanceAssay items.xmlName= items.xmlNamespace=
222  // items.example= items.type=Double
223  @XmlElement(name = "abundanceAssay")
224  private List<Double> abundanceAssay = null;
225  @JsonProperty("opt")
226  // Is a container wrapped=false
227  // items.name=opt items.baseName=opt items.xmlName= items.xmlNamespace=
228  // items.example= items.type=OptColumnMapping
229  @XmlElement(name = "opt")
230  private List<OptColumnMapping> opt = null;
231  @JsonProperty("comment")
232  // Is a container wrapped=false
233  // items.name=comment items.baseName=comment items.xmlName= items.xmlNamespace=
234  // items.example= items.type=Comment
235  @XmlElement(name = "comment")
236  private List<Comment> comment = null;
237   /**
238   * The small molecule feature table row prefix. SMF MUST be used for rows of the small molecule feature table.
239   *
240   * @return prefix
241  **/
242  @ApiModelProperty(value = "The small molecule feature table row prefix. SMF MUST be used for rows of the small molecule feature table.")
243  public PrefixEnum getPrefix() {
244    return prefix;
245  }
246
247   /**
248   * The small molecule feature table header prefix. SFH MUST be used for the small molecule feature table header line (the column labels).
249   *
250   * @return headerPrefix
251  **/
252  @ApiModelProperty(value = "The small molecule feature table header prefix. SFH MUST be used for the small molecule feature table header line (the column labels).")
253  public HeaderPrefixEnum getHeaderPrefix() {
254    return headerPrefix;
255  }
256
257
258 /**
259   * Builder method for smfId.
260   *
261   * @see SmallMoleculeFeature#setSmfId SmallMoleculeFeature#setSmfId for specification examples
262   * @see SmallMoleculeFeature#getSmfId SmallMoleculeFeature#getSmfId for validation constraints
263   * @param smfId a {@code Integer} parameter.
264   * @return SmallMoleculeFeature
265  **/
266  public SmallMoleculeFeature smfId(Integer smfId) {
267   this.smfId = smfId;
268   return this;
269  }
270
271   /**
272   * A within file unique identifier for the small molecule feature.
273   *
274   * @return smfId
275  **/
276  @NotNull
277  @ApiModelProperty(required = true, value = "A within file unique identifier for the small molecule feature.")
278  public Integer getSmfId() {
279    return smfId;
280  }
281
282 /**
283   * Set smfId.
284   *
285   * <p>mzTab-M specification example(s):</p>
286   * <pre><code>SFH     SMF_ID  …
287SMF     1       …
288SMF     2       …
289</code></pre>
290   * 
291   * 
292   * @see #getSmfId SmallMoleculeFeature#getSmfId for validation constraints
293   * @param smfId a {@code Integer} parameter.
294  **/
295  public void setSmfId(Integer smfId) {
296    this.smfId = smfId;
297  }
298
299
300 /**
301   * Builder method for smeIdRefs.
302   *
303   * @see SmallMoleculeFeature#setSmeIdRefs SmallMoleculeFeature#setSmeIdRefs for specification examples
304   * @see SmallMoleculeFeature#getSmeIdRefs SmallMoleculeFeature#getSmeIdRefs for validation constraints
305   * @param smeIdRefs a {@code List<Integer>} parameter.
306   * @return SmallMoleculeFeature
307  **/
308  public SmallMoleculeFeature smeIdRefs(List<Integer> smeIdRefs) {
309   this.smeIdRefs = smeIdRefs;
310   return this;
311  }
312
313  /**
314   * Add a single smeIdRefsItem to the smeIdRefs collection.
315   *
316   * @see SmallMoleculeFeature#getSmeIdRefs SmallMoleculeFeature#getSmeIdRefs for validation constraints
317   * @param smeIdRefsItem a {@code Integer} parameter.
318   * @return SmallMoleculeFeature
319   */
320  public SmallMoleculeFeature addSmeIdRefsItem(Integer smeIdRefsItem) {
321    if (this.smeIdRefs == null) {
322      this.smeIdRefs = new ArrayList<>();
323    }
324    this.smeIdRefs.add(smeIdRefsItem);
325    return this;
326  }
327
328   /**
329   * References to the identification evidence (SME elements) via referencing SME_ID values. Multiple values MAY be provided as a “|” separated list to indicate ambiguity in the identification or to indicate that different types of data supported the identifiction (see SME_ID_REF_ambiguity_code). For the case of a consensus approach where multiple adduct forms are used to infer the SML ID, different features should just reference the same SME_ID value(s).
330   *
331   * @return smeIdRefs
332  **/
333  @ApiModelProperty(value = "References to the identification evidence (SME elements) via referencing SME_ID values. Multiple values MAY be provided as a “|” separated list to indicate ambiguity in the identification or to indicate that different types of data supported the identifiction (see SME_ID_REF_ambiguity_code). For the case of a consensus approach where multiple adduct forms are used to infer the SML ID, different features should just reference the same SME_ID value(s).")
334  public List<Integer> getSmeIdRefs() {
335    return smeIdRefs;
336  }
337
338 /**
339   * Set smeIdRefs.
340   *
341   * <p>mzTab-M specification example(s):</p>
342   * <pre><code>SFH     SMF_ID  SME_ID_REFS
343SMF     1       5|6|12…
344</code></pre>
345   * 
346   * 
347   * @see #getSmeIdRefs SmallMoleculeFeature#getSmeIdRefs for validation constraints
348   * @param smeIdRefs a {@code List<Integer>} parameter.
349  **/
350  public void setSmeIdRefs(List<Integer> smeIdRefs) {
351    this.smeIdRefs = smeIdRefs;
352  }
353
354
355 /**
356   * Builder method for smeIdRefAmbiguityCode.
357   *
358   * @see SmallMoleculeFeature#setSmeIdRefAmbiguityCode SmallMoleculeFeature#setSmeIdRefAmbiguityCode for specification examples
359   * @see SmallMoleculeFeature#getSmeIdRefAmbiguityCode SmallMoleculeFeature#getSmeIdRefAmbiguityCode for validation constraints
360   * @param smeIdRefAmbiguityCode a {@code Integer} parameter.
361   * @return SmallMoleculeFeature
362  **/
363  public SmallMoleculeFeature smeIdRefAmbiguityCode(Integer smeIdRefAmbiguityCode) {
364   this.smeIdRefAmbiguityCode = smeIdRefAmbiguityCode;
365   return this;
366  }
367
368   /**
369   * If multiple values are given under SME_ID_REFS, one of the following codes MUST be provided. 1&#x3D;Ambiguous identification; 2&#x3D;Only different evidence streams for the same molecule with no ambiguity; 3&#x3D;Both ambiguous identification and multiple evidence streams. If there are no or one value under SME_ID_REFs, this MUST be reported as null.
370   *
371   * @return smeIdRefAmbiguityCode
372  **/
373  @ApiModelProperty(value = "If multiple values are given under SME_ID_REFS, one of the following codes MUST be provided. 1=Ambiguous identification; 2=Only different evidence streams for the same molecule with no ambiguity; 3=Both ambiguous identification and multiple evidence streams. If there are no or one value under SME_ID_REFs, this MUST be reported as null.")
374  public Integer getSmeIdRefAmbiguityCode() {
375    return smeIdRefAmbiguityCode;
376  }
377
378 /**
379   * Set smeIdRefAmbiguityCode.
380   *
381   * <p>mzTab-M specification example(s):</p>
382   * <pre><code>SFH     SMF_ID  SME_ID_REFS     SME_ID_REF_ambiguity_code
383SMF     1       5|6|12… 1
384</code></pre>
385   * 
386   * 
387   * @see #getSmeIdRefAmbiguityCode SmallMoleculeFeature#getSmeIdRefAmbiguityCode for validation constraints
388   * @param smeIdRefAmbiguityCode a {@code Integer} parameter.
389  **/
390  public void setSmeIdRefAmbiguityCode(Integer smeIdRefAmbiguityCode) {
391    this.smeIdRefAmbiguityCode = smeIdRefAmbiguityCode;
392  }
393
394
395 /**
396   * Builder method for adductIon.
397   *
398   * @see SmallMoleculeFeature#setAdductIon SmallMoleculeFeature#setAdductIon for specification examples
399   * @see SmallMoleculeFeature#getAdductIon SmallMoleculeFeature#getAdductIon for validation constraints
400   * @param adductIon a {@code String} parameter.
401   * @return SmallMoleculeFeature
402  **/
403  public SmallMoleculeFeature adductIon(String adductIon) {
404   this.adductIon = adductIon;
405   return this;
406  }
407
408   /**
409   * The assumed classification of this molecule’s adduct ion after detection, following the general style in the 2013 IUPAC recommendations on terms relating to MS e.g. [M+H]1+, [M+Na]1+, [M+NH4]1+, [M-H]1-, [M+Cl]1-, [M+H]1+.
410   *
411   * @return adductIon
412  **/
413 @Pattern(regexp="^\\[\\d*M([+-][\\w]*)\\]\\d*[+-]$")  @ApiModelProperty(value = "The assumed classification of this molecule’s adduct ion after detection, following the general style in the 2013 IUPAC recommendations on terms relating to MS e.g. [M+H]1+, [M+Na]1+, [M+NH4]1+, [M-H]1-, [M+Cl]1-, [M+H]1+.")
414  public String getAdductIon() {
415    return adductIon;
416  }
417
418 /**
419   * Set adductIon.
420   *
421   * <p>mzTab-M specification example(s):</p>
422   * <pre><code>SFH     SMF_ID  …       adduct_ion      …
423SMF     1       …       [M+H]+  …
424SMF     2       …       [M+2Na]2+       …
425</code></pre>
426   * 
427   * 
428   * @see #getAdductIon SmallMoleculeFeature#getAdductIon for validation constraints
429   * @param adductIon a {@code String} parameter.
430  **/
431  public void setAdductIon(String adductIon) {
432    this.adductIon = adductIon;
433  }
434
435
436 /**
437   * Builder method for isotopomer.
438   *
439   * @see SmallMoleculeFeature#setIsotopomer SmallMoleculeFeature#setIsotopomer for specification examples
440   * @see SmallMoleculeFeature#getIsotopomer SmallMoleculeFeature#getIsotopomer for validation constraints
441   * @param isotopomer a {@code Parameter} parameter.
442   * @return SmallMoleculeFeature
443  **/
444  public SmallMoleculeFeature isotopomer(Parameter isotopomer) {
445   this.isotopomer = isotopomer;
446   return this;
447  }
448
449   /**
450   * If de-isotoping has not been performed, then the isotopomer quantified MUST be reported here e.g. “+1”, “+2”, “13C peak” using CV terms, otherwise (i.e. for approaches where SMF rows are de-isotoped features) this MUST be null.
451   *
452   * @return isotopomer
453  **/
454  @Valid
455  @ApiModelProperty(value = "If de-isotoping has not been performed, then the isotopomer quantified MUST be reported here e.g. “+1”, “+2”, “13C peak” using CV terms, otherwise (i.e. for approaches where SMF rows are de-isotoped features) this MUST be null.")
456  public Parameter getIsotopomer() {
457    return isotopomer;
458  }
459
460 /**
461   * Set isotopomer.
462   *
463   * 
464   * 
465   * @see #getIsotopomer SmallMoleculeFeature#getIsotopomer for validation constraints
466   * @param isotopomer a {@code Parameter} parameter.
467  **/
468  public void setIsotopomer(Parameter isotopomer) {
469    this.isotopomer = isotopomer;
470  }
471
472
473 /**
474   * Builder method for expMassToCharge.
475   *
476   * @see SmallMoleculeFeature#setExpMassToCharge SmallMoleculeFeature#setExpMassToCharge for specification examples
477   * @see SmallMoleculeFeature#getExpMassToCharge SmallMoleculeFeature#getExpMassToCharge for validation constraints
478   * @param expMassToCharge a {@code Double} parameter.
479   * @return SmallMoleculeFeature
480  **/
481  public SmallMoleculeFeature expMassToCharge(Double expMassToCharge) {
482   this.expMassToCharge = expMassToCharge;
483   return this;
484  }
485
486   /**
487   * The experimental mass/charge value for the feature, by default assumed to be the mean across assays or a representative value. For approaches that report isotopomers as SMF rows, then the m/z of the isotopomer MUST be reported here.
488   *
489   * @return expMassToCharge
490  **/
491  @NotNull
492  @ApiModelProperty(required = true, value = "The experimental mass/charge value for the feature, by default assumed to be the mean across assays or a representative value. For approaches that report isotopomers as SMF rows, then the m/z of the isotopomer MUST be reported here.")
493  public Double getExpMassToCharge() {
494    return expMassToCharge;
495  }
496
497 /**
498   * Set expMassToCharge.
499   *
500   * <p>mzTab-M specification example(s):</p>
501   * <pre><code>SFH     SMF_ID  …       exp_mass_to_charge      …
502SMF     1       …       1234.5  …
503</code></pre>
504   * 
505   * 
506   * @see #getExpMassToCharge SmallMoleculeFeature#getExpMassToCharge for validation constraints
507   * @param expMassToCharge a {@code Double} parameter.
508  **/
509  public void setExpMassToCharge(Double expMassToCharge) {
510    this.expMassToCharge = expMassToCharge;
511  }
512
513
514 /**
515   * Builder method for charge.
516   *
517   * @see SmallMoleculeFeature#setCharge SmallMoleculeFeature#setCharge for specification examples
518   * @see SmallMoleculeFeature#getCharge SmallMoleculeFeature#getCharge for validation constraints
519   * @param charge a {@code Integer} parameter.
520   * @return SmallMoleculeFeature
521  **/
522  public SmallMoleculeFeature charge(Integer charge) {
523   this.charge = charge;
524   return this;
525  }
526
527   /**
528   * The feature’s charge value using positive integers both for positive and negative polarity modes.
529   *
530   * @return charge
531  **/
532  @NotNull
533  @ApiModelProperty(required = true, value = "The feature’s charge value using positive integers both for positive and negative polarity modes.")
534  public Integer getCharge() {
535    return charge;
536  }
537
538 /**
539   * Set charge.
540   *
541   * <p>mzTab-M specification example(s):</p>
542   * <pre><code>SFH     SMF_ID  …       charge  …
543SMF     1       …       1       …
544</code></pre>
545   * 
546   * 
547   * @see #getCharge SmallMoleculeFeature#getCharge for validation constraints
548   * @param charge a {@code Integer} parameter.
549  **/
550  public void setCharge(Integer charge) {
551    this.charge = charge;
552  }
553
554
555 /**
556   * Builder method for retentionTimeInSeconds.
557   *
558   * @see SmallMoleculeFeature#setRetentionTimeInSeconds SmallMoleculeFeature#setRetentionTimeInSeconds for specification examples
559   * @see SmallMoleculeFeature#getRetentionTimeInSeconds SmallMoleculeFeature#getRetentionTimeInSeconds for validation constraints
560   * @param retentionTimeInSeconds a {@code Double} parameter.
561   * @return SmallMoleculeFeature
562  **/
563  public SmallMoleculeFeature retentionTimeInSeconds(Double retentionTimeInSeconds) {
564   this.retentionTimeInSeconds = retentionTimeInSeconds;
565   return this;
566  }
567
568   /**
569   * The apex of the feature on the retention time axis, in a Master or aggregate MS run. Retention time MUST be reported in seconds. Retention time values for individual MS runs (i.e. before alignment) MAY be reported as optional columns. Retention time SHOULD only be null in the case of direct infusion MS or other techniques where a retention time value is absent or unknown. Relative retention time or retention time index values MAY be reported as optional columns, and could be considered for inclusion in future versions of mzTab as appropriate.
570   *
571   * @return retentionTimeInSeconds
572  **/
573  @ApiModelProperty(value = "The apex of the feature on the retention time axis, in a Master or aggregate MS run. Retention time MUST be reported in seconds. Retention time values for individual MS runs (i.e. before alignment) MAY be reported as optional columns. Retention time SHOULD only be null in the case of direct infusion MS or other techniques where a retention time value is absent or unknown. Relative retention time or retention time index values MAY be reported as optional columns, and could be considered for inclusion in future versions of mzTab as appropriate.")
574  public Double getRetentionTimeInSeconds() {
575    return retentionTimeInSeconds;
576  }
577
578 /**
579   * Set retentionTimeInSeconds.
580   *
581   * <p>mzTab-M specification example(s):</p>
582   * <pre><code>SFH     SMF_ID  …       retention_time_in_seconds       …
583SMF     1       …       1345.7  …
584</code></pre>
585   * 
586   * 
587   * @see #getRetentionTimeInSeconds SmallMoleculeFeature#getRetentionTimeInSeconds for validation constraints
588   * @param retentionTimeInSeconds a {@code Double} parameter.
589  **/
590  public void setRetentionTimeInSeconds(Double retentionTimeInSeconds) {
591    this.retentionTimeInSeconds = retentionTimeInSeconds;
592  }
593
594
595 /**
596   * Builder method for retentionTimeInSecondsStart.
597   *
598   * @see SmallMoleculeFeature#setRetentionTimeInSecondsStart SmallMoleculeFeature#setRetentionTimeInSecondsStart for specification examples
599   * @see SmallMoleculeFeature#getRetentionTimeInSecondsStart SmallMoleculeFeature#getRetentionTimeInSecondsStart for validation constraints
600   * @param retentionTimeInSecondsStart a {@code Double} parameter.
601   * @return SmallMoleculeFeature
602  **/
603  public SmallMoleculeFeature retentionTimeInSecondsStart(Double retentionTimeInSecondsStart) {
604   this.retentionTimeInSecondsStart = retentionTimeInSecondsStart;
605   return this;
606  }
607
608   /**
609   * The start time of the feature on the retention time axis, in a Master or aggregate MS run. Retention time MUST be reported in seconds. Retention time start and end SHOULD only be null in the case of direct infusion MS or other techniques where a retention time value is absent or unknown and MAY be reported in optional columns.
610   *
611   * @return retentionTimeInSecondsStart
612  **/
613  @ApiModelProperty(value = "The start time of the feature on the retention time axis, in a Master or aggregate MS run. Retention time MUST be reported in seconds. Retention time start and end SHOULD only be null in the case of direct infusion MS or other techniques where a retention time value is absent or unknown and MAY be reported in optional columns.")
614  public Double getRetentionTimeInSecondsStart() {
615    return retentionTimeInSecondsStart;
616  }
617
618 /**
619   * Set retentionTimeInSecondsStart.
620   *
621   * <p>mzTab-M specification example(s):</p>
622   * <pre><code>SFH     SMF_ID  …       retention_time_in_seconds_start …
623SMF     1       …       1327.0  …
624</code></pre>
625   * 
626   * 
627   * @see #getRetentionTimeInSecondsStart SmallMoleculeFeature#getRetentionTimeInSecondsStart for validation constraints
628   * @param retentionTimeInSecondsStart a {@code Double} parameter.
629  **/
630  public void setRetentionTimeInSecondsStart(Double retentionTimeInSecondsStart) {
631    this.retentionTimeInSecondsStart = retentionTimeInSecondsStart;
632  }
633
634
635 /**
636   * Builder method for retentionTimeInSecondsEnd.
637   *
638   * @see SmallMoleculeFeature#setRetentionTimeInSecondsEnd SmallMoleculeFeature#setRetentionTimeInSecondsEnd for specification examples
639   * @see SmallMoleculeFeature#getRetentionTimeInSecondsEnd SmallMoleculeFeature#getRetentionTimeInSecondsEnd for validation constraints
640   * @param retentionTimeInSecondsEnd a {@code Double} parameter.
641   * @return SmallMoleculeFeature
642  **/
643  public SmallMoleculeFeature retentionTimeInSecondsEnd(Double retentionTimeInSecondsEnd) {
644   this.retentionTimeInSecondsEnd = retentionTimeInSecondsEnd;
645   return this;
646  }
647
648   /**
649   * The end time of the feature on the retention time axis, in a Master or aggregate MS run. Retention time MUST be reported in seconds. Retention time start and end SHOULD only be null in the case of direct infusion MS or other techniques where a retention time value is absent or unknown and MAY be reported in optional columns..
650   *
651   * @return retentionTimeInSecondsEnd
652  **/
653  @ApiModelProperty(value = "The end time of the feature on the retention time axis, in a Master or aggregate MS run. Retention time MUST be reported in seconds. Retention time start and end SHOULD only be null in the case of direct infusion MS or other techniques where a retention time value is absent or unknown and MAY be reported in optional columns..")
654  public Double getRetentionTimeInSecondsEnd() {
655    return retentionTimeInSecondsEnd;
656  }
657
658 /**
659   * Set retentionTimeInSecondsEnd.
660   *
661   * <p>mzTab-M specification example(s):</p>
662   * <pre><code>SFH     SMF_ID  …       retention_time_in_seconds_end   …
663SMF     1       …       1327.8  …
664</code></pre>
665   * 
666   * 
667   * @see #getRetentionTimeInSecondsEnd SmallMoleculeFeature#getRetentionTimeInSecondsEnd for validation constraints
668   * @param retentionTimeInSecondsEnd a {@code Double} parameter.
669  **/
670  public void setRetentionTimeInSecondsEnd(Double retentionTimeInSecondsEnd) {
671    this.retentionTimeInSecondsEnd = retentionTimeInSecondsEnd;
672  }
673
674
675 /**
676   * Builder method for abundanceAssay.
677   *
678   * @see SmallMoleculeFeature#setAbundanceAssay SmallMoleculeFeature#setAbundanceAssay for specification examples
679   * @see SmallMoleculeFeature#getAbundanceAssay SmallMoleculeFeature#getAbundanceAssay for validation constraints
680   * @param abundanceAssay a {@code List<Double>} parameter.
681   * @return SmallMoleculeFeature
682  **/
683  public SmallMoleculeFeature abundanceAssay(List<Double> abundanceAssay) {
684   this.abundanceAssay = abundanceAssay;
685   return this;
686  }
687
688  /**
689   * Add a single abundanceAssayItem to the abundanceAssay collection.
690   *
691   * @see SmallMoleculeFeature#getAbundanceAssay SmallMoleculeFeature#getAbundanceAssay for validation constraints
692   * @param abundanceAssayItem a {@code Double} parameter.
693   * @return SmallMoleculeFeature
694   */
695  public SmallMoleculeFeature addAbundanceAssayItem(Double abundanceAssayItem) {
696    if (this.abundanceAssay == null) {
697      this.abundanceAssay = new ArrayList<>();
698    }
699    this.abundanceAssay.add(abundanceAssayItem);
700    return this;
701  }
702
703   /**
704   * The feature’s abundance in every assay described in the metadata section MUST be reported. Null or zero values may be reported as appropriate.
705   *
706   * @return abundanceAssay
707  **/
708  @ApiModelProperty(value = "The feature’s abundance in every assay described in the metadata section MUST be reported. Null or zero values may be reported as appropriate.")
709  public List<Double> getAbundanceAssay() {
710    return abundanceAssay;
711  }
712
713 /**
714   * Set abundanceAssay.
715   *
716   * <p>mzTab-M specification example(s):</p>
717   * <pre><code>SMH     SML_ID  …       abundance_assay[1]      …
718SMF     1       …       38648   …
719</code></pre>
720   * 
721   * 
722   * @see #getAbundanceAssay SmallMoleculeFeature#getAbundanceAssay for validation constraints
723   * @param abundanceAssay a {@code List<Double>} parameter.
724  **/
725  public void setAbundanceAssay(List<Double> abundanceAssay) {
726    this.abundanceAssay = abundanceAssay;
727  }
728
729
730 /**
731   * Builder method for opt.
732   *
733   * @see SmallMoleculeFeature#setOpt SmallMoleculeFeature#setOpt for specification examples
734   * @see SmallMoleculeFeature#getOpt SmallMoleculeFeature#getOpt for validation constraints
735   * @param opt a {@code List<OptColumnMapping>} parameter.
736   * @return SmallMoleculeFeature
737  **/
738  public SmallMoleculeFeature opt(List<OptColumnMapping> opt) {
739   this.opt = opt;
740   return this;
741  }
742
743  /**
744   * Add a single optItem to the opt collection.
745   *
746   * @see SmallMoleculeFeature#getOpt SmallMoleculeFeature#getOpt for validation constraints
747   * @param optItem a {@code OptColumnMapping} parameter.
748   * @return SmallMoleculeFeature
749   */
750  public SmallMoleculeFeature addOptItem(OptColumnMapping optItem) {
751    if (this.opt == null) {
752      this.opt = new ArrayList<>();
753    }
754    this.opt.add(optItem);
755    return this;
756  }
757
758   /**
759   * Additional columns can be added to the end of the small molecule feature table. These column headers MUST start with the prefix “opt_” followed by the {identifier} of the object they reference: assay, study variable, MS run or “global” (if the value relates to all replicates). Column names MUST only contain the following characters: ‘A’-‘Z’, ‘a’-‘z’, ‘0’-‘9’, ‘’, ‘-’, ‘[’, ‘]’, and ‘:’. CV parameter accessions MAY be used for optional columns following the format: opt{identifier}_cv_{accession}_\{parameter name}. Spaces within the parameter’s name MUST be replaced by ‘_’.
760
761   *
762   * @return opt
763  **/
764  @Valid
765  @ApiModelProperty(value = "Additional columns can be added to the end of the small molecule feature table. These column headers MUST start with the prefix “opt_” followed by the {identifier} of the object they reference: assay, study variable, MS run or “global” (if the value relates to all replicates). Column names MUST only contain the following characters: ‘A’-‘Z’, ‘a’-‘z’, ‘0’-‘9’, ‘’, ‘-’, ‘[’, ‘]’, and ‘:’. CV parameter accessions MAY be used for optional columns following the format: opt{identifier}_cv_{accession}_\\{parameter name}. Spaces within the parameter’s name MUST be replaced by ‘_’. ")
766  public List<OptColumnMapping> getOpt() {
767    return opt;
768  }
769
770 /**
771   * Set opt.
772   *
773   * <p>mzTab-M specification example(s):</p>
774   * <pre><code>SFH     SMF_ID  …       opt_assay[1]_my_value   …       opt_global_another_value
775SMF     1       …       My value        …       some other value
776</code></pre>
777   * 
778   * 
779   * @see #getOpt SmallMoleculeFeature#getOpt for validation constraints
780   * @param opt a {@code List<OptColumnMapping>} parameter.
781  **/
782  public void setOpt(List<OptColumnMapping> opt) {
783    this.opt = opt;
784  }
785
786
787 /**
788   * Builder method for comment.
789   *
790   * @see SmallMoleculeFeature#setComment SmallMoleculeFeature#setComment for specification examples
791   * @see SmallMoleculeFeature#getComment SmallMoleculeFeature#getComment for validation constraints
792   * @param comment a {@code List<Comment>} parameter.
793   * @return SmallMoleculeFeature
794  **/
795  public SmallMoleculeFeature comment(List<Comment> comment) {
796   this.comment = comment;
797   return this;
798  }
799
800  /**
801   * Add a single commentItem to the comment collection.
802   *
803   * @see SmallMoleculeFeature#getComment SmallMoleculeFeature#getComment for validation constraints
804   * @param commentItem a {@code Comment} parameter.
805   * @return SmallMoleculeFeature
806   */
807  public SmallMoleculeFeature addCommentItem(Comment commentItem) {
808    if (this.comment == null) {
809      this.comment = new ArrayList<>();
810    }
811    this.comment.add(commentItem);
812    return this;
813  }
814
815   /**
816   * <p>Get comment.</p>
817   *
818   * @return comment
819  **/
820  @Valid
821  @ApiModelProperty(value = "")
822  public List<Comment> getComment() {
823    return comment;
824  }
825
826 /**
827   * Set comment.
828   *
829   * 
830   * 
831   * @see #getComment SmallMoleculeFeature#getComment for validation constraints
832   * @param comment a {@code List<Comment>} parameter.
833  **/
834  public void setComment(List<Comment> comment) {
835    this.comment = comment;
836  }
837
838
839  @Override
840  public boolean equals(java.lang.Object o) {
841    if (this == o) {
842      return true;
843    }
844    if (o == null || getClass() != o.getClass()) {
845      return false;
846    }
847    SmallMoleculeFeature smallMoleculeFeature = (SmallMoleculeFeature) o;
848    return Objects.equals(this.prefix, smallMoleculeFeature.prefix) &&
849        Objects.equals(this.headerPrefix, smallMoleculeFeature.headerPrefix) &&
850        Objects.equals(this.smfId, smallMoleculeFeature.smfId) &&
851        Objects.equals(this.smeIdRefs, smallMoleculeFeature.smeIdRefs) &&
852        Objects.equals(this.smeIdRefAmbiguityCode, smallMoleculeFeature.smeIdRefAmbiguityCode) &&
853        Objects.equals(this.adductIon, smallMoleculeFeature.adductIon) &&
854        Objects.equals(this.isotopomer, smallMoleculeFeature.isotopomer) &&
855        Objects.equals(this.expMassToCharge, smallMoleculeFeature.expMassToCharge) &&
856        Objects.equals(this.charge, smallMoleculeFeature.charge) &&
857        Objects.equals(this.retentionTimeInSeconds, smallMoleculeFeature.retentionTimeInSeconds) &&
858        Objects.equals(this.retentionTimeInSecondsStart, smallMoleculeFeature.retentionTimeInSecondsStart) &&
859        Objects.equals(this.retentionTimeInSecondsEnd, smallMoleculeFeature.retentionTimeInSecondsEnd) &&
860        Objects.equals(this.abundanceAssay, smallMoleculeFeature.abundanceAssay) &&
861        Objects.equals(this.opt, smallMoleculeFeature.opt) &&
862        Objects.equals(this.comment, smallMoleculeFeature.comment);
863  }
864
865  @Override
866  public int hashCode() {
867    return Objects.hash(prefix, headerPrefix, smfId, smeIdRefs, smeIdRefAmbiguityCode, adductIon, isotopomer, expMassToCharge, charge, retentionTimeInSeconds, retentionTimeInSecondsStart, retentionTimeInSecondsEnd, abundanceAssay, opt, comment);
868  }
869
870
871  @Override
872  public String toString() {
873    StringBuilder sb = new StringBuilder();
874    sb.append("class SmallMoleculeFeature {\n");
875    
876    sb.append("    prefix: ").append(toIndentedString(prefix)).append("\n");
877    sb.append("    headerPrefix: ").append(toIndentedString(headerPrefix)).append("\n");
878    sb.append("    smfId: ").append(toIndentedString(smfId)).append("\n");
879    sb.append("    smeIdRefs: ").append(toIndentedString(smeIdRefs)).append("\n");
880    sb.append("    smeIdRefAmbiguityCode: ").append(toIndentedString(smeIdRefAmbiguityCode)).append("\n");
881    sb.append("    adductIon: ").append(toIndentedString(adductIon)).append("\n");
882    sb.append("    isotopomer: ").append(toIndentedString(isotopomer)).append("\n");
883    sb.append("    expMassToCharge: ").append(toIndentedString(expMassToCharge)).append("\n");
884    sb.append("    charge: ").append(toIndentedString(charge)).append("\n");
885    sb.append("    retentionTimeInSeconds: ").append(toIndentedString(retentionTimeInSeconds)).append("\n");
886    sb.append("    retentionTimeInSecondsStart: ").append(toIndentedString(retentionTimeInSecondsStart)).append("\n");
887    sb.append("    retentionTimeInSecondsEnd: ").append(toIndentedString(retentionTimeInSecondsEnd)).append("\n");
888    sb.append("    abundanceAssay: ").append(toIndentedString(abundanceAssay)).append("\n");
889    sb.append("    opt: ").append(toIndentedString(opt)).append("\n");
890    sb.append("    comment: ").append(toIndentedString(comment)).append("\n");
891    sb.append("}");
892    return sb.toString();
893  }
894
895  /**
896   * Convert the given object to string with each line indented by 4 spaces
897   * (except the first line).
898   */
899  private String toIndentedString(java.lang.Object o) {
900    if (o == null) {
901      return "null";
902    }
903    return o.toString().replace("\n", "\n    ");
904  }
905
906}
907