001package org.hl7.fhir.r4.model;
002
003import java.math.BigDecimal;
004
005/*
006  Copyright (c) 2011+, HL7, Inc.
007  All rights reserved.
008  
009  Redistribution and use in source and binary forms, with or without modification, 
010  are permitted provided that the following conditions are met:
011  
012   * Redistributions of source code must retain the above copyright notice, this 
013     list of conditions and the following disclaimer.
014   * Redistributions in binary form must reproduce the above copyright notice, 
015     this list of conditions and the following disclaimer in the documentation 
016     and/or other materials provided with the distribution.
017   * Neither the name of HL7 nor the names of its contributors may be used to 
018     endorse or promote products derived from this software without specific 
019     prior written permission.
020  
021  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND 
022  ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 
023  WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 
024  IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, 
025  INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 
026  NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR 
027  PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 
028  WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 
029  ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 
030  POSSIBILITY OF SUCH DAMAGE.
031  
032*/
033
034// Generated on Tue, May 12, 2020 07:26+1000 for FHIR v4.0.1
035import java.util.ArrayList;
036import java.util.List;
037
038import org.hl7.fhir.exceptions.FHIRException;
039import org.hl7.fhir.instance.model.api.IBaseBackboneElement;
040import org.hl7.fhir.utilities.Utilities;
041
042import ca.uhn.fhir.model.api.annotation.Block;
043import ca.uhn.fhir.model.api.annotation.Child;
044import ca.uhn.fhir.model.api.annotation.Description;
045import ca.uhn.fhir.model.api.annotation.ResourceDef;
046import ca.uhn.fhir.model.api.annotation.SearchParamDefinition;
047
048/**
049 * Raw data describing a biological sequence.
050 */
051@ResourceDef(name = "MolecularSequence", profile = "http://hl7.org/fhir/StructureDefinition/MolecularSequence")
052public class MolecularSequence extends DomainResource {
053
054  public enum SequenceType {
055    /**
056     * Amino acid sequence.
057     */
058    AA,
059    /**
060     * DNA Sequence.
061     */
062    DNA,
063    /**
064     * RNA Sequence.
065     */
066    RNA,
067    /**
068     * added to help the parsers with the generic types
069     */
070    NULL;
071
072    public static SequenceType fromCode(String codeString) throws FHIRException {
073      if (codeString == null || "".equals(codeString))
074        return null;
075      if ("aa".equals(codeString))
076        return AA;
077      if ("dna".equals(codeString))
078        return DNA;
079      if ("rna".equals(codeString))
080        return RNA;
081      if (Configuration.isAcceptInvalidEnums())
082        return null;
083      else
084        throw new FHIRException("Unknown SequenceType code '" + codeString + "'");
085    }
086
087    public String toCode() {
088      switch (this) {
089      case AA:
090        return "aa";
091      case DNA:
092        return "dna";
093      case RNA:
094        return "rna";
095      case NULL:
096        return null;
097      default:
098        return "?";
099      }
100    }
101
102    public String getSystem() {
103      switch (this) {
104      case AA:
105        return "http://hl7.org/fhir/sequence-type";
106      case DNA:
107        return "http://hl7.org/fhir/sequence-type";
108      case RNA:
109        return "http://hl7.org/fhir/sequence-type";
110      case NULL:
111        return null;
112      default:
113        return "?";
114      }
115    }
116
117    public String getDefinition() {
118      switch (this) {
119      case AA:
120        return "Amino acid sequence.";
121      case DNA:
122        return "DNA Sequence.";
123      case RNA:
124        return "RNA Sequence.";
125      case NULL:
126        return null;
127      default:
128        return "?";
129      }
130    }
131
132    public String getDisplay() {
133      switch (this) {
134      case AA:
135        return "AA Sequence";
136      case DNA:
137        return "DNA Sequence";
138      case RNA:
139        return "RNA Sequence";
140      case NULL:
141        return null;
142      default:
143        return "?";
144      }
145    }
146  }
147
148  public static class SequenceTypeEnumFactory implements EnumFactory<SequenceType> {
149    public SequenceType fromCode(String codeString) throws IllegalArgumentException {
150      if (codeString == null || "".equals(codeString))
151        if (codeString == null || "".equals(codeString))
152          return null;
153      if ("aa".equals(codeString))
154        return SequenceType.AA;
155      if ("dna".equals(codeString))
156        return SequenceType.DNA;
157      if ("rna".equals(codeString))
158        return SequenceType.RNA;
159      throw new IllegalArgumentException("Unknown SequenceType code '" + codeString + "'");
160    }
161
162    public Enumeration<SequenceType> fromType(PrimitiveType<?> code) throws FHIRException {
163      if (code == null)
164        return null;
165      if (code.isEmpty())
166        return new Enumeration<SequenceType>(this, SequenceType.NULL, code);
167      String codeString = code.asStringValue();
168      if (codeString == null || "".equals(codeString))
169        return new Enumeration<SequenceType>(this, SequenceType.NULL, code);
170      if ("aa".equals(codeString))
171        return new Enumeration<SequenceType>(this, SequenceType.AA, code);
172      if ("dna".equals(codeString))
173        return new Enumeration<SequenceType>(this, SequenceType.DNA, code);
174      if ("rna".equals(codeString))
175        return new Enumeration<SequenceType>(this, SequenceType.RNA, code);
176      throw new FHIRException("Unknown SequenceType code '" + codeString + "'");
177    }
178
179    public String toCode(SequenceType code) {
180      if (code == SequenceType.AA)
181        return "aa";
182      if (code == SequenceType.DNA)
183        return "dna";
184      if (code == SequenceType.RNA)
185        return "rna";
186      return "?";
187    }
188
189    public String toSystem(SequenceType code) {
190      return code.getSystem();
191    }
192  }
193
194  public enum OrientationType {
195    /**
196     * Sense orientation of reference sequence.
197     */
198    SENSE,
199    /**
200     * Antisense orientation of reference sequence.
201     */
202    ANTISENSE,
203    /**
204     * added to help the parsers with the generic types
205     */
206    NULL;
207
208    public static OrientationType fromCode(String codeString) throws FHIRException {
209      if (codeString == null || "".equals(codeString))
210        return null;
211      if ("sense".equals(codeString))
212        return SENSE;
213      if ("antisense".equals(codeString))
214        return ANTISENSE;
215      if (Configuration.isAcceptInvalidEnums())
216        return null;
217      else
218        throw new FHIRException("Unknown OrientationType code '" + codeString + "'");
219    }
220
221    public String toCode() {
222      switch (this) {
223      case SENSE:
224        return "sense";
225      case ANTISENSE:
226        return "antisense";
227      case NULL:
228        return null;
229      default:
230        return "?";
231      }
232    }
233
234    public String getSystem() {
235      switch (this) {
236      case SENSE:
237        return "http://hl7.org/fhir/orientation-type";
238      case ANTISENSE:
239        return "http://hl7.org/fhir/orientation-type";
240      case NULL:
241        return null;
242      default:
243        return "?";
244      }
245    }
246
247    public String getDefinition() {
248      switch (this) {
249      case SENSE:
250        return "Sense orientation of reference sequence.";
251      case ANTISENSE:
252        return "Antisense orientation of reference sequence.";
253      case NULL:
254        return null;
255      default:
256        return "?";
257      }
258    }
259
260    public String getDisplay() {
261      switch (this) {
262      case SENSE:
263        return "Sense orientation of referenceSeq";
264      case ANTISENSE:
265        return "Antisense orientation of referenceSeq";
266      case NULL:
267        return null;
268      default:
269        return "?";
270      }
271    }
272  }
273
274  public static class OrientationTypeEnumFactory implements EnumFactory<OrientationType> {
275    public OrientationType fromCode(String codeString) throws IllegalArgumentException {
276      if (codeString == null || "".equals(codeString))
277        if (codeString == null || "".equals(codeString))
278          return null;
279      if ("sense".equals(codeString))
280        return OrientationType.SENSE;
281      if ("antisense".equals(codeString))
282        return OrientationType.ANTISENSE;
283      throw new IllegalArgumentException("Unknown OrientationType code '" + codeString + "'");
284    }
285
286    public Enumeration<OrientationType> fromType(PrimitiveType<?> code) throws FHIRException {
287      if (code == null)
288        return null;
289      if (code.isEmpty())
290        return new Enumeration<OrientationType>(this, OrientationType.NULL, code);
291      String codeString = code.asStringValue();
292      if (codeString == null || "".equals(codeString))
293        return new Enumeration<OrientationType>(this, OrientationType.NULL, code);
294      if ("sense".equals(codeString))
295        return new Enumeration<OrientationType>(this, OrientationType.SENSE, code);
296      if ("antisense".equals(codeString))
297        return new Enumeration<OrientationType>(this, OrientationType.ANTISENSE, code);
298      throw new FHIRException("Unknown OrientationType code '" + codeString + "'");
299    }
300
301    public String toCode(OrientationType code) {
302      if (code == OrientationType.SENSE)
303        return "sense";
304      if (code == OrientationType.ANTISENSE)
305        return "antisense";
306      return "?";
307    }
308
309    public String toSystem(OrientationType code) {
310      return code.getSystem();
311    }
312  }
313
314  public enum StrandType {
315    /**
316     * Watson strand of reference sequence.
317     */
318    WATSON,
319    /**
320     * Crick strand of reference sequence.
321     */
322    CRICK,
323    /**
324     * added to help the parsers with the generic types
325     */
326    NULL;
327
328    public static StrandType fromCode(String codeString) throws FHIRException {
329      if (codeString == null || "".equals(codeString))
330        return null;
331      if ("watson".equals(codeString))
332        return WATSON;
333      if ("crick".equals(codeString))
334        return CRICK;
335      if (Configuration.isAcceptInvalidEnums())
336        return null;
337      else
338        throw new FHIRException("Unknown StrandType code '" + codeString + "'");
339    }
340
341    public String toCode() {
342      switch (this) {
343      case WATSON:
344        return "watson";
345      case CRICK:
346        return "crick";
347      case NULL:
348        return null;
349      default:
350        return "?";
351      }
352    }
353
354    public String getSystem() {
355      switch (this) {
356      case WATSON:
357        return "http://hl7.org/fhir/strand-type";
358      case CRICK:
359        return "http://hl7.org/fhir/strand-type";
360      case NULL:
361        return null;
362      default:
363        return "?";
364      }
365    }
366
367    public String getDefinition() {
368      switch (this) {
369      case WATSON:
370        return "Watson strand of reference sequence.";
371      case CRICK:
372        return "Crick strand of reference sequence.";
373      case NULL:
374        return null;
375      default:
376        return "?";
377      }
378    }
379
380    public String getDisplay() {
381      switch (this) {
382      case WATSON:
383        return "Watson strand of referenceSeq";
384      case CRICK:
385        return "Crick strand of referenceSeq";
386      case NULL:
387        return null;
388      default:
389        return "?";
390      }
391    }
392  }
393
394  public static class StrandTypeEnumFactory implements EnumFactory<StrandType> {
395    public StrandType fromCode(String codeString) throws IllegalArgumentException {
396      if (codeString == null || "".equals(codeString))
397        if (codeString == null || "".equals(codeString))
398          return null;
399      if ("watson".equals(codeString))
400        return StrandType.WATSON;
401      if ("crick".equals(codeString))
402        return StrandType.CRICK;
403      throw new IllegalArgumentException("Unknown StrandType code '" + codeString + "'");
404    }
405
406    public Enumeration<StrandType> fromType(PrimitiveType<?> code) throws FHIRException {
407      if (code == null)
408        return null;
409      if (code.isEmpty())
410        return new Enumeration<StrandType>(this, StrandType.NULL, code);
411      String codeString = code.asStringValue();
412      if (codeString == null || "".equals(codeString))
413        return new Enumeration<StrandType>(this, StrandType.NULL, code);
414      if ("watson".equals(codeString))
415        return new Enumeration<StrandType>(this, StrandType.WATSON, code);
416      if ("crick".equals(codeString))
417        return new Enumeration<StrandType>(this, StrandType.CRICK, code);
418      throw new FHIRException("Unknown StrandType code '" + codeString + "'");
419    }
420
421    public String toCode(StrandType code) {
422      if (code == StrandType.WATSON)
423        return "watson";
424      if (code == StrandType.CRICK)
425        return "crick";
426      return "?";
427    }
428
429    public String toSystem(StrandType code) {
430      return code.getSystem();
431    }
432  }
433
434  public enum QualityType {
435    /**
436     * INDEL Comparison.
437     */
438    INDEL,
439    /**
440     * SNP Comparison.
441     */
442    SNP,
443    /**
444     * UNKNOWN Comparison.
445     */
446    UNKNOWN,
447    /**
448     * added to help the parsers with the generic types
449     */
450    NULL;
451
452    public static QualityType fromCode(String codeString) throws FHIRException {
453      if (codeString == null || "".equals(codeString))
454        return null;
455      if ("indel".equals(codeString))
456        return INDEL;
457      if ("snp".equals(codeString))
458        return SNP;
459      if ("unknown".equals(codeString))
460        return UNKNOWN;
461      if (Configuration.isAcceptInvalidEnums())
462        return null;
463      else
464        throw new FHIRException("Unknown QualityType code '" + codeString + "'");
465    }
466
467    public String toCode() {
468      switch (this) {
469      case INDEL:
470        return "indel";
471      case SNP:
472        return "snp";
473      case UNKNOWN:
474        return "unknown";
475      case NULL:
476        return null;
477      default:
478        return "?";
479      }
480    }
481
482    public String getSystem() {
483      switch (this) {
484      case INDEL:
485        return "http://hl7.org/fhir/quality-type";
486      case SNP:
487        return "http://hl7.org/fhir/quality-type";
488      case UNKNOWN:
489        return "http://hl7.org/fhir/quality-type";
490      case NULL:
491        return null;
492      default:
493        return "?";
494      }
495    }
496
497    public String getDefinition() {
498      switch (this) {
499      case INDEL:
500        return "INDEL Comparison.";
501      case SNP:
502        return "SNP Comparison.";
503      case UNKNOWN:
504        return "UNKNOWN Comparison.";
505      case NULL:
506        return null;
507      default:
508        return "?";
509      }
510    }
511
512    public String getDisplay() {
513      switch (this) {
514      case INDEL:
515        return "INDEL Comparison";
516      case SNP:
517        return "SNP Comparison";
518      case UNKNOWN:
519        return "UNKNOWN Comparison";
520      case NULL:
521        return null;
522      default:
523        return "?";
524      }
525    }
526  }
527
528  public static class QualityTypeEnumFactory implements EnumFactory<QualityType> {
529    public QualityType fromCode(String codeString) throws IllegalArgumentException {
530      if (codeString == null || "".equals(codeString))
531        if (codeString == null || "".equals(codeString))
532          return null;
533      if ("indel".equals(codeString))
534        return QualityType.INDEL;
535      if ("snp".equals(codeString))
536        return QualityType.SNP;
537      if ("unknown".equals(codeString))
538        return QualityType.UNKNOWN;
539      throw new IllegalArgumentException("Unknown QualityType code '" + codeString + "'");
540    }
541
542    public Enumeration<QualityType> fromType(PrimitiveType<?> code) throws FHIRException {
543      if (code == null)
544        return null;
545      if (code.isEmpty())
546        return new Enumeration<QualityType>(this, QualityType.NULL, code);
547      String codeString = code.asStringValue();
548      if (codeString == null || "".equals(codeString))
549        return new Enumeration<QualityType>(this, QualityType.NULL, code);
550      if ("indel".equals(codeString))
551        return new Enumeration<QualityType>(this, QualityType.INDEL, code);
552      if ("snp".equals(codeString))
553        return new Enumeration<QualityType>(this, QualityType.SNP, code);
554      if ("unknown".equals(codeString))
555        return new Enumeration<QualityType>(this, QualityType.UNKNOWN, code);
556      throw new FHIRException("Unknown QualityType code '" + codeString + "'");
557    }
558
559    public String toCode(QualityType code) {
560      if (code == QualityType.INDEL)
561        return "indel";
562      if (code == QualityType.SNP)
563        return "snp";
564      if (code == QualityType.UNKNOWN)
565        return "unknown";
566      return "?";
567    }
568
569    public String toSystem(QualityType code) {
570      return code.getSystem();
571    }
572  }
573
574  public enum RepositoryType {
575    /**
576     * When URL is clicked, the resource can be seen directly (by webpage or by
577     * download link format).
578     */
579    DIRECTLINK,
580    /**
581     * When the API method (e.g. [base_url]/[parameter]) related with the URL of the
582     * website is executed, the resource can be seen directly (usually in JSON or
583     * XML format).
584     */
585    OPENAPI,
586    /**
587     * When logged into the website, the resource can be seen.
588     */
589    LOGIN,
590    /**
591     * When logged in and follow the API in the website related with URL, the
592     * resource can be seen.
593     */
594    OAUTH,
595    /**
596     * Some other complicated or particular way to get resource from URL.
597     */
598    OTHER,
599    /**
600     * added to help the parsers with the generic types
601     */
602    NULL;
603
604    public static RepositoryType fromCode(String codeString) throws FHIRException {
605      if (codeString == null || "".equals(codeString))
606        return null;
607      if ("directlink".equals(codeString))
608        return DIRECTLINK;
609      if ("openapi".equals(codeString))
610        return OPENAPI;
611      if ("login".equals(codeString))
612        return LOGIN;
613      if ("oauth".equals(codeString))
614        return OAUTH;
615      if ("other".equals(codeString))
616        return OTHER;
617      if (Configuration.isAcceptInvalidEnums())
618        return null;
619      else
620        throw new FHIRException("Unknown RepositoryType code '" + codeString + "'");
621    }
622
623    public String toCode() {
624      switch (this) {
625      case DIRECTLINK:
626        return "directlink";
627      case OPENAPI:
628        return "openapi";
629      case LOGIN:
630        return "login";
631      case OAUTH:
632        return "oauth";
633      case OTHER:
634        return "other";
635      case NULL:
636        return null;
637      default:
638        return "?";
639      }
640    }
641
642    public String getSystem() {
643      switch (this) {
644      case DIRECTLINK:
645        return "http://hl7.org/fhir/repository-type";
646      case OPENAPI:
647        return "http://hl7.org/fhir/repository-type";
648      case LOGIN:
649        return "http://hl7.org/fhir/repository-type";
650      case OAUTH:
651        return "http://hl7.org/fhir/repository-type";
652      case OTHER:
653        return "http://hl7.org/fhir/repository-type";
654      case NULL:
655        return null;
656      default:
657        return "?";
658      }
659    }
660
661    public String getDefinition() {
662      switch (this) {
663      case DIRECTLINK:
664        return "When URL is clicked, the resource can be seen directly (by webpage or by download link format).";
665      case OPENAPI:
666        return "When the API method (e.g. [base_url]/[parameter]) related with the URL of the website is executed, the resource can be seen directly (usually in JSON or XML format).";
667      case LOGIN:
668        return "When logged into the website, the resource can be seen.";
669      case OAUTH:
670        return "When logged in and  follow the API in the website related with URL, the resource can be seen.";
671      case OTHER:
672        return "Some other complicated or particular way to get resource from URL.";
673      case NULL:
674        return null;
675      default:
676        return "?";
677      }
678    }
679
680    public String getDisplay() {
681      switch (this) {
682      case DIRECTLINK:
683        return "Click and see";
684      case OPENAPI:
685        return "The URL is the RESTful or other kind of API that can access to the result.";
686      case LOGIN:
687        return "Result cannot be access unless an account is logged in";
688      case OAUTH:
689        return "Result need to be fetched with API and need LOGIN( or cookies are required when visiting the link of resource)";
690      case OTHER:
691        return "Some other complicated or particular way to get resource from URL.";
692      case NULL:
693        return null;
694      default:
695        return "?";
696      }
697    }
698  }
699
700  public static class RepositoryTypeEnumFactory implements EnumFactory<RepositoryType> {
701    public RepositoryType fromCode(String codeString) throws IllegalArgumentException {
702      if (codeString == null || "".equals(codeString))
703        if (codeString == null || "".equals(codeString))
704          return null;
705      if ("directlink".equals(codeString))
706        return RepositoryType.DIRECTLINK;
707      if ("openapi".equals(codeString))
708        return RepositoryType.OPENAPI;
709      if ("login".equals(codeString))
710        return RepositoryType.LOGIN;
711      if ("oauth".equals(codeString))
712        return RepositoryType.OAUTH;
713      if ("other".equals(codeString))
714        return RepositoryType.OTHER;
715      throw new IllegalArgumentException("Unknown RepositoryType code '" + codeString + "'");
716    }
717
718    public Enumeration<RepositoryType> fromType(PrimitiveType<?> code) throws FHIRException {
719      if (code == null)
720        return null;
721      if (code.isEmpty())
722        return new Enumeration<RepositoryType>(this, RepositoryType.NULL, code);
723      String codeString = code.asStringValue();
724      if (codeString == null || "".equals(codeString))
725        return new Enumeration<RepositoryType>(this, RepositoryType.NULL, code);
726      if ("directlink".equals(codeString))
727        return new Enumeration<RepositoryType>(this, RepositoryType.DIRECTLINK, code);
728      if ("openapi".equals(codeString))
729        return new Enumeration<RepositoryType>(this, RepositoryType.OPENAPI, code);
730      if ("login".equals(codeString))
731        return new Enumeration<RepositoryType>(this, RepositoryType.LOGIN, code);
732      if ("oauth".equals(codeString))
733        return new Enumeration<RepositoryType>(this, RepositoryType.OAUTH, code);
734      if ("other".equals(codeString))
735        return new Enumeration<RepositoryType>(this, RepositoryType.OTHER, code);
736      throw new FHIRException("Unknown RepositoryType code '" + codeString + "'");
737    }
738
739    public String toCode(RepositoryType code) {
740      if (code == RepositoryType.DIRECTLINK)
741        return "directlink";
742      if (code == RepositoryType.OPENAPI)
743        return "openapi";
744      if (code == RepositoryType.LOGIN)
745        return "login";
746      if (code == RepositoryType.OAUTH)
747        return "oauth";
748      if (code == RepositoryType.OTHER)
749        return "other";
750      return "?";
751    }
752
753    public String toSystem(RepositoryType code) {
754      return code.getSystem();
755    }
756  }
757
758  @Block()
759  public static class MolecularSequenceReferenceSeqComponent extends BackboneElement implements IBaseBackboneElement {
760    /**
761     * Structural unit composed of a nucleic acid molecule which controls its own
762     * replication through the interaction of specific proteins at one or more
763     * origins of replication
764     * ([SO:0000340](http://www.sequenceontology.org/browser/current_svn/term/SO:0000340)).
765     */
766    @Child(name = "chromosome", type = {
767        CodeableConcept.class }, order = 1, min = 0, max = 1, modifier = false, summary = true)
768    @Description(shortDefinition = "Chromosome containing genetic finding", formalDefinition = "Structural unit composed of a nucleic acid molecule which controls its own replication through the interaction of specific proteins at one or more origins of replication ([SO:0000340](http://www.sequenceontology.org/browser/current_svn/term/SO:0000340)).")
769    @ca.uhn.fhir.model.api.annotation.Binding(valueSet = "http://hl7.org/fhir/ValueSet/chromosome-human")
770    protected CodeableConcept chromosome;
771
772    /**
773     * The Genome Build used for reference, following GRCh build versions e.g. 'GRCh
774     * 37'. Version number must be included if a versioned release of a primary
775     * build was used.
776     */
777    @Child(name = "genomeBuild", type = {
778        StringType.class }, order = 2, min = 0, max = 1, modifier = false, summary = true)
779    @Description(shortDefinition = "The Genome Build used for reference, following GRCh build versions e.g. 'GRCh 37'", formalDefinition = "The Genome Build used for reference, following GRCh build versions e.g. 'GRCh 37'.  Version number must be included if a versioned release of a primary build was used.")
780    protected StringType genomeBuild;
781
782    /**
783     * A relative reference to a DNA strand based on gene orientation. The strand
784     * that contains the open reading frame of the gene is the "sense" strand, and
785     * the opposite complementary strand is the "antisense" strand.
786     */
787    @Child(name = "orientation", type = {
788        CodeType.class }, order = 3, min = 0, max = 1, modifier = false, summary = true)
789    @Description(shortDefinition = "sense | antisense", formalDefinition = "A relative reference to a DNA strand based on gene orientation. The strand that contains the open reading frame of the gene is the \"sense\" strand, and the opposite complementary strand is the \"antisense\" strand.")
790    @ca.uhn.fhir.model.api.annotation.Binding(valueSet = "http://hl7.org/fhir/ValueSet/orientation-type")
791    protected Enumeration<OrientationType> orientation;
792
793    /**
794     * Reference identifier of reference sequence submitted to NCBI. It must match
795     * the type in the MolecularSequence.type field. For example, the prefix, “NG_”
796     * identifies reference sequence for genes, “NM_” for messenger RNA transcripts,
797     * and “NP_” for amino acid sequences.
798     */
799    @Child(name = "referenceSeqId", type = {
800        CodeableConcept.class }, order = 4, min = 0, max = 1, modifier = false, summary = true)
801    @Description(shortDefinition = "Reference identifier", formalDefinition = "Reference identifier of reference sequence submitted to NCBI. It must match the type in the MolecularSequence.type field. For example, the prefix, “NG_” identifies reference sequence for genes, “NM_” for messenger RNA transcripts, and “NP_” for amino acid sequences.")
802    @ca.uhn.fhir.model.api.annotation.Binding(valueSet = "http://hl7.org/fhir/ValueSet/sequence-referenceSeq")
803    protected CodeableConcept referenceSeqId;
804
805    /**
806     * A pointer to another MolecularSequence entity as reference sequence.
807     */
808    @Child(name = "referenceSeqPointer", type = {
809        MolecularSequence.class }, order = 5, min = 0, max = 1, modifier = false, summary = true)
810    @Description(shortDefinition = "A pointer to another MolecularSequence entity as reference sequence", formalDefinition = "A pointer to another MolecularSequence entity as reference sequence.")
811    protected Reference referenceSeqPointer;
812
813    /**
814     * The actual object that is the target of the reference (A pointer to another
815     * MolecularSequence entity as reference sequence.)
816     */
817    protected MolecularSequence referenceSeqPointerTarget;
818
819    /**
820     * A string like "ACGT".
821     */
822    @Child(name = "referenceSeqString", type = {
823        StringType.class }, order = 6, min = 0, max = 1, modifier = false, summary = true)
824    @Description(shortDefinition = "A string to represent reference sequence", formalDefinition = "A string like \"ACGT\".")
825    protected StringType referenceSeqString;
826
827    /**
828     * An absolute reference to a strand. The Watson strand is the strand whose
829     * 5'-end is on the short arm of the chromosome, and the Crick strand as the one
830     * whose 5'-end is on the long arm.
831     */
832    @Child(name = "strand", type = { CodeType.class }, order = 7, min = 0, max = 1, modifier = false, summary = true)
833    @Description(shortDefinition = "watson | crick", formalDefinition = "An absolute reference to a strand. The Watson strand is the strand whose 5'-end is on the short arm of the chromosome, and the Crick strand as the one whose 5'-end is on the long arm.")
834    @ca.uhn.fhir.model.api.annotation.Binding(valueSet = "http://hl7.org/fhir/ValueSet/strand-type")
835    protected Enumeration<StrandType> strand;
836
837    /**
838     * Start position of the window on the reference sequence. If the coordinate
839     * system is either 0-based or 1-based, then start position is inclusive.
840     */
841    @Child(name = "windowStart", type = {
842        IntegerType.class }, order = 8, min = 0, max = 1, modifier = false, summary = true)
843    @Description(shortDefinition = "Start position of the window on the  reference sequence", formalDefinition = "Start position of the window on the reference sequence. If the coordinate system is either 0-based or 1-based, then start position is inclusive.")
844    protected IntegerType windowStart;
845
846    /**
847     * End position of the window on the reference sequence. If the coordinate
848     * system is 0-based then end is exclusive and does not include the last
849     * position. If the coordinate system is 1-base, then end is inclusive and
850     * includes the last position.
851     */
852    @Child(name = "windowEnd", type = {
853        IntegerType.class }, order = 9, min = 0, max = 1, modifier = false, summary = true)
854    @Description(shortDefinition = "End position of the window on the reference sequence", formalDefinition = "End position of the window on the reference sequence. If the coordinate system is 0-based then end is exclusive and does not include the last position. If the coordinate system is 1-base, then end is inclusive and includes the last position.")
855    protected IntegerType windowEnd;
856
857    private static final long serialVersionUID = 307364267L;
858
859    /**
860     * Constructor
861     */
862    public MolecularSequenceReferenceSeqComponent() {
863      super();
864    }
865
866    /**
867     * @return {@link #chromosome} (Structural unit composed of a nucleic acid
868     *         molecule which controls its own replication through the interaction
869     *         of specific proteins at one or more origins of replication
870     *         ([SO:0000340](http://www.sequenceontology.org/browser/current_svn/term/SO:0000340)).)
871     */
872    public CodeableConcept getChromosome() {
873      if (this.chromosome == null)
874        if (Configuration.errorOnAutoCreate())
875          throw new Error("Attempt to auto-create MolecularSequenceReferenceSeqComponent.chromosome");
876        else if (Configuration.doAutoCreate())
877          this.chromosome = new CodeableConcept(); // cc
878      return this.chromosome;
879    }
880
881    public boolean hasChromosome() {
882      return this.chromosome != null && !this.chromosome.isEmpty();
883    }
884
885    /**
886     * @param value {@link #chromosome} (Structural unit composed of a nucleic acid
887     *              molecule which controls its own replication through the
888     *              interaction of specific proteins at one or more origins of
889     *              replication
890     *              ([SO:0000340](http://www.sequenceontology.org/browser/current_svn/term/SO:0000340)).)
891     */
892    public MolecularSequenceReferenceSeqComponent setChromosome(CodeableConcept value) {
893      this.chromosome = value;
894      return this;
895    }
896
897    /**
898     * @return {@link #genomeBuild} (The Genome Build used for reference, following
899     *         GRCh build versions e.g. 'GRCh 37'. Version number must be included
900     *         if a versioned release of a primary build was used.). This is the
901     *         underlying object with id, value and extensions. The accessor
902     *         "getGenomeBuild" gives direct access to the value
903     */
904    public StringType getGenomeBuildElement() {
905      if (this.genomeBuild == null)
906        if (Configuration.errorOnAutoCreate())
907          throw new Error("Attempt to auto-create MolecularSequenceReferenceSeqComponent.genomeBuild");
908        else if (Configuration.doAutoCreate())
909          this.genomeBuild = new StringType(); // bb
910      return this.genomeBuild;
911    }
912
913    public boolean hasGenomeBuildElement() {
914      return this.genomeBuild != null && !this.genomeBuild.isEmpty();
915    }
916
917    public boolean hasGenomeBuild() {
918      return this.genomeBuild != null && !this.genomeBuild.isEmpty();
919    }
920
921    /**
922     * @param value {@link #genomeBuild} (The Genome Build used for reference,
923     *              following GRCh build versions e.g. 'GRCh 37'. Version number
924     *              must be included if a versioned release of a primary build was
925     *              used.). This is the underlying object with id, value and
926     *              extensions. The accessor "getGenomeBuild" gives direct access to
927     *              the value
928     */
929    public MolecularSequenceReferenceSeqComponent setGenomeBuildElement(StringType value) {
930      this.genomeBuild = value;
931      return this;
932    }
933
934    /**
935     * @return The Genome Build used for reference, following GRCh build versions
936     *         e.g. 'GRCh 37'. Version number must be included if a versioned
937     *         release of a primary build was used.
938     */
939    public String getGenomeBuild() {
940      return this.genomeBuild == null ? null : this.genomeBuild.getValue();
941    }
942
943    /**
944     * @param value The Genome Build used for reference, following GRCh build
945     *              versions e.g. 'GRCh 37'. Version number must be included if a
946     *              versioned release of a primary build was used.
947     */
948    public MolecularSequenceReferenceSeqComponent setGenomeBuild(String value) {
949      if (Utilities.noString(value))
950        this.genomeBuild = null;
951      else {
952        if (this.genomeBuild == null)
953          this.genomeBuild = new StringType();
954        this.genomeBuild.setValue(value);
955      }
956      return this;
957    }
958
959    /**
960     * @return {@link #orientation} (A relative reference to a DNA strand based on
961     *         gene orientation. The strand that contains the open reading frame of
962     *         the gene is the "sense" strand, and the opposite complementary strand
963     *         is the "antisense" strand.). This is the underlying object with id,
964     *         value and extensions. The accessor "getOrientation" gives direct
965     *         access to the value
966     */
967    public Enumeration<OrientationType> getOrientationElement() {
968      if (this.orientation == null)
969        if (Configuration.errorOnAutoCreate())
970          throw new Error("Attempt to auto-create MolecularSequenceReferenceSeqComponent.orientation");
971        else if (Configuration.doAutoCreate())
972          this.orientation = new Enumeration<OrientationType>(new OrientationTypeEnumFactory()); // bb
973      return this.orientation;
974    }
975
976    public boolean hasOrientationElement() {
977      return this.orientation != null && !this.orientation.isEmpty();
978    }
979
980    public boolean hasOrientation() {
981      return this.orientation != null && !this.orientation.isEmpty();
982    }
983
984    /**
985     * @param value {@link #orientation} (A relative reference to a DNA strand based
986     *              on gene orientation. The strand that contains the open reading
987     *              frame of the gene is the "sense" strand, and the opposite
988     *              complementary strand is the "antisense" strand.). This is the
989     *              underlying object with id, value and extensions. The accessor
990     *              "getOrientation" gives direct access to the value
991     */
992    public MolecularSequenceReferenceSeqComponent setOrientationElement(Enumeration<OrientationType> value) {
993      this.orientation = value;
994      return this;
995    }
996
997    /**
998     * @return A relative reference to a DNA strand based on gene orientation. The
999     *         strand that contains the open reading frame of the gene is the
1000     *         "sense" strand, and the opposite complementary strand is the
1001     *         "antisense" strand.
1002     */
1003    public OrientationType getOrientation() {
1004      return this.orientation == null ? null : this.orientation.getValue();
1005    }
1006
1007    /**
1008     * @param value A relative reference to a DNA strand based on gene orientation.
1009     *              The strand that contains the open reading frame of the gene is
1010     *              the "sense" strand, and the opposite complementary strand is the
1011     *              "antisense" strand.
1012     */
1013    public MolecularSequenceReferenceSeqComponent setOrientation(OrientationType value) {
1014      if (value == null)
1015        this.orientation = null;
1016      else {
1017        if (this.orientation == null)
1018          this.orientation = new Enumeration<OrientationType>(new OrientationTypeEnumFactory());
1019        this.orientation.setValue(value);
1020      }
1021      return this;
1022    }
1023
1024    /**
1025     * @return {@link #referenceSeqId} (Reference identifier of reference sequence
1026     *         submitted to NCBI. It must match the type in the
1027     *         MolecularSequence.type field. For example, the prefix, “NG_”
1028     *         identifies reference sequence for genes, “NM_” for messenger RNA
1029     *         transcripts, and “NP_” for amino acid sequences.)
1030     */
1031    public CodeableConcept getReferenceSeqId() {
1032      if (this.referenceSeqId == null)
1033        if (Configuration.errorOnAutoCreate())
1034          throw new Error("Attempt to auto-create MolecularSequenceReferenceSeqComponent.referenceSeqId");
1035        else if (Configuration.doAutoCreate())
1036          this.referenceSeqId = new CodeableConcept(); // cc
1037      return this.referenceSeqId;
1038    }
1039
1040    public boolean hasReferenceSeqId() {
1041      return this.referenceSeqId != null && !this.referenceSeqId.isEmpty();
1042    }
1043
1044    /**
1045     * @param value {@link #referenceSeqId} (Reference identifier of reference
1046     *              sequence submitted to NCBI. It must match the type in the
1047     *              MolecularSequence.type field. For example, the prefix, “NG_”
1048     *              identifies reference sequence for genes, “NM_” for messenger RNA
1049     *              transcripts, and “NP_” for amino acid sequences.)
1050     */
1051    public MolecularSequenceReferenceSeqComponent setReferenceSeqId(CodeableConcept value) {
1052      this.referenceSeqId = value;
1053      return this;
1054    }
1055
1056    /**
1057     * @return {@link #referenceSeqPointer} (A pointer to another MolecularSequence
1058     *         entity as reference sequence.)
1059     */
1060    public Reference getReferenceSeqPointer() {
1061      if (this.referenceSeqPointer == null)
1062        if (Configuration.errorOnAutoCreate())
1063          throw new Error("Attempt to auto-create MolecularSequenceReferenceSeqComponent.referenceSeqPointer");
1064        else if (Configuration.doAutoCreate())
1065          this.referenceSeqPointer = new Reference(); // cc
1066      return this.referenceSeqPointer;
1067    }
1068
1069    public boolean hasReferenceSeqPointer() {
1070      return this.referenceSeqPointer != null && !this.referenceSeqPointer.isEmpty();
1071    }
1072
1073    /**
1074     * @param value {@link #referenceSeqPointer} (A pointer to another
1075     *              MolecularSequence entity as reference sequence.)
1076     */
1077    public MolecularSequenceReferenceSeqComponent setReferenceSeqPointer(Reference value) {
1078      this.referenceSeqPointer = value;
1079      return this;
1080    }
1081
1082    /**
1083     * @return {@link #referenceSeqPointer} The actual object that is the target of
1084     *         the reference. The reference library doesn't populate this, but you
1085     *         can use it to hold the resource if you resolve it. (A pointer to
1086     *         another MolecularSequence entity as reference sequence.)
1087     */
1088    public MolecularSequence getReferenceSeqPointerTarget() {
1089      if (this.referenceSeqPointerTarget == null)
1090        if (Configuration.errorOnAutoCreate())
1091          throw new Error("Attempt to auto-create MolecularSequenceReferenceSeqComponent.referenceSeqPointer");
1092        else if (Configuration.doAutoCreate())
1093          this.referenceSeqPointerTarget = new MolecularSequence(); // aa
1094      return this.referenceSeqPointerTarget;
1095    }
1096
1097    /**
1098     * @param value {@link #referenceSeqPointer} The actual object that is the
1099     *              target of the reference. The reference library doesn't use
1100     *              these, but you can use it to hold the resource if you resolve
1101     *              it. (A pointer to another MolecularSequence entity as reference
1102     *              sequence.)
1103     */
1104    public MolecularSequenceReferenceSeqComponent setReferenceSeqPointerTarget(MolecularSequence value) {
1105      this.referenceSeqPointerTarget = value;
1106      return this;
1107    }
1108
1109    /**
1110     * @return {@link #referenceSeqString} (A string like "ACGT".). This is the
1111     *         underlying object with id, value and extensions. The accessor
1112     *         "getReferenceSeqString" gives direct access to the value
1113     */
1114    public StringType getReferenceSeqStringElement() {
1115      if (this.referenceSeqString == null)
1116        if (Configuration.errorOnAutoCreate())
1117          throw new Error("Attempt to auto-create MolecularSequenceReferenceSeqComponent.referenceSeqString");
1118        else if (Configuration.doAutoCreate())
1119          this.referenceSeqString = new StringType(); // bb
1120      return this.referenceSeqString;
1121    }
1122
1123    public boolean hasReferenceSeqStringElement() {
1124      return this.referenceSeqString != null && !this.referenceSeqString.isEmpty();
1125    }
1126
1127    public boolean hasReferenceSeqString() {
1128      return this.referenceSeqString != null && !this.referenceSeqString.isEmpty();
1129    }
1130
1131    /**
1132     * @param value {@link #referenceSeqString} (A string like "ACGT".). This is the
1133     *              underlying object with id, value and extensions. The accessor
1134     *              "getReferenceSeqString" gives direct access to the value
1135     */
1136    public MolecularSequenceReferenceSeqComponent setReferenceSeqStringElement(StringType value) {
1137      this.referenceSeqString = value;
1138      return this;
1139    }
1140
1141    /**
1142     * @return A string like "ACGT".
1143     */
1144    public String getReferenceSeqString() {
1145      return this.referenceSeqString == null ? null : this.referenceSeqString.getValue();
1146    }
1147
1148    /**
1149     * @param value A string like "ACGT".
1150     */
1151    public MolecularSequenceReferenceSeqComponent setReferenceSeqString(String value) {
1152      if (Utilities.noString(value))
1153        this.referenceSeqString = null;
1154      else {
1155        if (this.referenceSeqString == null)
1156          this.referenceSeqString = new StringType();
1157        this.referenceSeqString.setValue(value);
1158      }
1159      return this;
1160    }
1161
1162    /**
1163     * @return {@link #strand} (An absolute reference to a strand. The Watson strand
1164     *         is the strand whose 5'-end is on the short arm of the chromosome, and
1165     *         the Crick strand as the one whose 5'-end is on the long arm.). This
1166     *         is the underlying object with id, value and extensions. The accessor
1167     *         "getStrand" gives direct access to the value
1168     */
1169    public Enumeration<StrandType> getStrandElement() {
1170      if (this.strand == null)
1171        if (Configuration.errorOnAutoCreate())
1172          throw new Error("Attempt to auto-create MolecularSequenceReferenceSeqComponent.strand");
1173        else if (Configuration.doAutoCreate())
1174          this.strand = new Enumeration<StrandType>(new StrandTypeEnumFactory()); // bb
1175      return this.strand;
1176    }
1177
1178    public boolean hasStrandElement() {
1179      return this.strand != null && !this.strand.isEmpty();
1180    }
1181
1182    public boolean hasStrand() {
1183      return this.strand != null && !this.strand.isEmpty();
1184    }
1185
1186    /**
1187     * @param value {@link #strand} (An absolute reference to a strand. The Watson
1188     *              strand is the strand whose 5'-end is on the short arm of the
1189     *              chromosome, and the Crick strand as the one whose 5'-end is on
1190     *              the long arm.). This is the underlying object with id, value and
1191     *              extensions. The accessor "getStrand" gives direct access to the
1192     *              value
1193     */
1194    public MolecularSequenceReferenceSeqComponent setStrandElement(Enumeration<StrandType> value) {
1195      this.strand = value;
1196      return this;
1197    }
1198
1199    /**
1200     * @return An absolute reference to a strand. The Watson strand is the strand
1201     *         whose 5'-end is on the short arm of the chromosome, and the Crick
1202     *         strand as the one whose 5'-end is on the long arm.
1203     */
1204    public StrandType getStrand() {
1205      return this.strand == null ? null : this.strand.getValue();
1206    }
1207
1208    /**
1209     * @param value An absolute reference to a strand. The Watson strand is the
1210     *              strand whose 5'-end is on the short arm of the chromosome, and
1211     *              the Crick strand as the one whose 5'-end is on the long arm.
1212     */
1213    public MolecularSequenceReferenceSeqComponent setStrand(StrandType value) {
1214      if (value == null)
1215        this.strand = null;
1216      else {
1217        if (this.strand == null)
1218          this.strand = new Enumeration<StrandType>(new StrandTypeEnumFactory());
1219        this.strand.setValue(value);
1220      }
1221      return this;
1222    }
1223
1224    /**
1225     * @return {@link #windowStart} (Start position of the window on the reference
1226     *         sequence. If the coordinate system is either 0-based or 1-based, then
1227     *         start position is inclusive.). This is the underlying object with id,
1228     *         value and extensions. The accessor "getWindowStart" gives direct
1229     *         access to the value
1230     */
1231    public IntegerType getWindowStartElement() {
1232      if (this.windowStart == null)
1233        if (Configuration.errorOnAutoCreate())
1234          throw new Error("Attempt to auto-create MolecularSequenceReferenceSeqComponent.windowStart");
1235        else if (Configuration.doAutoCreate())
1236          this.windowStart = new IntegerType(); // bb
1237      return this.windowStart;
1238    }
1239
1240    public boolean hasWindowStartElement() {
1241      return this.windowStart != null && !this.windowStart.isEmpty();
1242    }
1243
1244    public boolean hasWindowStart() {
1245      return this.windowStart != null && !this.windowStart.isEmpty();
1246    }
1247
1248    /**
1249     * @param value {@link #windowStart} (Start position of the window on the
1250     *              reference sequence. If the coordinate system is either 0-based
1251     *              or 1-based, then start position is inclusive.). This is the
1252     *              underlying object with id, value and extensions. The accessor
1253     *              "getWindowStart" gives direct access to the value
1254     */
1255    public MolecularSequenceReferenceSeqComponent setWindowStartElement(IntegerType value) {
1256      this.windowStart = value;
1257      return this;
1258    }
1259
1260    /**
1261     * @return Start position of the window on the reference sequence. If the
1262     *         coordinate system is either 0-based or 1-based, then start position
1263     *         is inclusive.
1264     */
1265    public int getWindowStart() {
1266      return this.windowStart == null || this.windowStart.isEmpty() ? 0 : this.windowStart.getValue();
1267    }
1268
1269    /**
1270     * @param value Start position of the window on the reference sequence. If the
1271     *              coordinate system is either 0-based or 1-based, then start
1272     *              position is inclusive.
1273     */
1274    public MolecularSequenceReferenceSeqComponent setWindowStart(int value) {
1275      if (this.windowStart == null)
1276        this.windowStart = new IntegerType();
1277      this.windowStart.setValue(value);
1278      return this;
1279    }
1280
1281    /**
1282     * @return {@link #windowEnd} (End position of the window on the reference
1283     *         sequence. If the coordinate system is 0-based then end is exclusive
1284     *         and does not include the last position. If the coordinate system is
1285     *         1-base, then end is inclusive and includes the last position.). This
1286     *         is the underlying object with id, value and extensions. The accessor
1287     *         "getWindowEnd" gives direct access to the value
1288     */
1289    public IntegerType getWindowEndElement() {
1290      if (this.windowEnd == null)
1291        if (Configuration.errorOnAutoCreate())
1292          throw new Error("Attempt to auto-create MolecularSequenceReferenceSeqComponent.windowEnd");
1293        else if (Configuration.doAutoCreate())
1294          this.windowEnd = new IntegerType(); // bb
1295      return this.windowEnd;
1296    }
1297
1298    public boolean hasWindowEndElement() {
1299      return this.windowEnd != null && !this.windowEnd.isEmpty();
1300    }
1301
1302    public boolean hasWindowEnd() {
1303      return this.windowEnd != null && !this.windowEnd.isEmpty();
1304    }
1305
1306    /**
1307     * @param value {@link #windowEnd} (End position of the window on the reference
1308     *              sequence. If the coordinate system is 0-based then end is
1309     *              exclusive and does not include the last position. If the
1310     *              coordinate system is 1-base, then end is inclusive and includes
1311     *              the last position.). This is the underlying object with id,
1312     *              value and extensions. The accessor "getWindowEnd" gives direct
1313     *              access to the value
1314     */
1315    public MolecularSequenceReferenceSeqComponent setWindowEndElement(IntegerType value) {
1316      this.windowEnd = value;
1317      return this;
1318    }
1319
1320    /**
1321     * @return End position of the window on the reference sequence. If the
1322     *         coordinate system is 0-based then end is exclusive and does not
1323     *         include the last position. If the coordinate system is 1-base, then
1324     *         end is inclusive and includes the last position.
1325     */
1326    public int getWindowEnd() {
1327      return this.windowEnd == null || this.windowEnd.isEmpty() ? 0 : this.windowEnd.getValue();
1328    }
1329
1330    /**
1331     * @param value End position of the window on the reference sequence. If the
1332     *              coordinate system is 0-based then end is exclusive and does not
1333     *              include the last position. If the coordinate system is 1-base,
1334     *              then end is inclusive and includes the last position.
1335     */
1336    public MolecularSequenceReferenceSeqComponent setWindowEnd(int value) {
1337      if (this.windowEnd == null)
1338        this.windowEnd = new IntegerType();
1339      this.windowEnd.setValue(value);
1340      return this;
1341    }
1342
1343    protected void listChildren(List<Property> children) {
1344      super.listChildren(children);
1345      children.add(new Property("chromosome", "CodeableConcept",
1346          "Structural unit composed of a nucleic acid molecule which controls its own replication through the interaction of specific proteins at one or more origins of replication ([SO:0000340](http://www.sequenceontology.org/browser/current_svn/term/SO:0000340)).",
1347          0, 1, chromosome));
1348      children.add(new Property("genomeBuild", "string",
1349          "The Genome Build used for reference, following GRCh build versions e.g. 'GRCh 37'.  Version number must be included if a versioned release of a primary build was used.",
1350          0, 1, genomeBuild));
1351      children.add(new Property("orientation", "code",
1352          "A relative reference to a DNA strand based on gene orientation. The strand that contains the open reading frame of the gene is the \"sense\" strand, and the opposite complementary strand is the \"antisense\" strand.",
1353          0, 1, orientation));
1354      children.add(new Property("referenceSeqId", "CodeableConcept",
1355          "Reference identifier of reference sequence submitted to NCBI. It must match the type in the MolecularSequence.type field. For example, the prefix, “NG_” identifies reference sequence for genes, “NM_” for messenger RNA transcripts, and “NP_” for amino acid sequences.",
1356          0, 1, referenceSeqId));
1357      children.add(new Property("referenceSeqPointer", "Reference(MolecularSequence)",
1358          "A pointer to another MolecularSequence entity as reference sequence.", 0, 1, referenceSeqPointer));
1359      children.add(new Property("referenceSeqString", "string", "A string like \"ACGT\".", 0, 1, referenceSeqString));
1360      children.add(new Property("strand", "code",
1361          "An absolute reference to a strand. The Watson strand is the strand whose 5'-end is on the short arm of the chromosome, and the Crick strand as the one whose 5'-end is on the long arm.",
1362          0, 1, strand));
1363      children.add(new Property("windowStart", "integer",
1364          "Start position of the window on the reference sequence. If the coordinate system is either 0-based or 1-based, then start position is inclusive.",
1365          0, 1, windowStart));
1366      children.add(new Property("windowEnd", "integer",
1367          "End position of the window on the reference sequence. If the coordinate system is 0-based then end is exclusive and does not include the last position. If the coordinate system is 1-base, then end is inclusive and includes the last position.",
1368          0, 1, windowEnd));
1369    }
1370
1371    @Override
1372    public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
1373      switch (_hash) {
1374      case -1499470472:
1375        /* chromosome */ return new Property("chromosome", "CodeableConcept",
1376            "Structural unit composed of a nucleic acid molecule which controls its own replication through the interaction of specific proteins at one or more origins of replication ([SO:0000340](http://www.sequenceontology.org/browser/current_svn/term/SO:0000340)).",
1377            0, 1, chromosome);
1378      case 1061239735:
1379        /* genomeBuild */ return new Property("genomeBuild", "string",
1380            "The Genome Build used for reference, following GRCh build versions e.g. 'GRCh 37'.  Version number must be included if a versioned release of a primary build was used.",
1381            0, 1, genomeBuild);
1382      case -1439500848:
1383        /* orientation */ return new Property("orientation", "code",
1384            "A relative reference to a DNA strand based on gene orientation. The strand that contains the open reading frame of the gene is the \"sense\" strand, and the opposite complementary strand is the \"antisense\" strand.",
1385            0, 1, orientation);
1386      case -1911500465:
1387        /* referenceSeqId */ return new Property("referenceSeqId", "CodeableConcept",
1388            "Reference identifier of reference sequence submitted to NCBI. It must match the type in the MolecularSequence.type field. For example, the prefix, “NG_” identifies reference sequence for genes, “NM_” for messenger RNA transcripts, and “NP_” for amino acid sequences.",
1389            0, 1, referenceSeqId);
1390      case 1923414665:
1391        /* referenceSeqPointer */ return new Property("referenceSeqPointer", "Reference(MolecularSequence)",
1392            "A pointer to another MolecularSequence entity as reference sequence.", 0, 1, referenceSeqPointer);
1393      case -1648301499:
1394        /* referenceSeqString */ return new Property("referenceSeqString", "string", "A string like \"ACGT\".", 0, 1,
1395            referenceSeqString);
1396      case -891993594:
1397        /* strand */ return new Property("strand", "code",
1398            "An absolute reference to a strand. The Watson strand is the strand whose 5'-end is on the short arm of the chromosome, and the Crick strand as the one whose 5'-end is on the long arm.",
1399            0, 1, strand);
1400      case 1903685202:
1401        /* windowStart */ return new Property("windowStart", "integer",
1402            "Start position of the window on the reference sequence. If the coordinate system is either 0-based or 1-based, then start position is inclusive.",
1403            0, 1, windowStart);
1404      case -217026869:
1405        /* windowEnd */ return new Property("windowEnd", "integer",
1406            "End position of the window on the reference sequence. If the coordinate system is 0-based then end is exclusive and does not include the last position. If the coordinate system is 1-base, then end is inclusive and includes the last position.",
1407            0, 1, windowEnd);
1408      default:
1409        return super.getNamedProperty(_hash, _name, _checkValid);
1410      }
1411
1412    }
1413
1414    @Override
1415    public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
1416      switch (hash) {
1417      case -1499470472:
1418        /* chromosome */ return this.chromosome == null ? new Base[0] : new Base[] { this.chromosome }; // CodeableConcept
1419      case 1061239735:
1420        /* genomeBuild */ return this.genomeBuild == null ? new Base[0] : new Base[] { this.genomeBuild }; // StringType
1421      case -1439500848:
1422        /* orientation */ return this.orientation == null ? new Base[0] : new Base[] { this.orientation }; // Enumeration<OrientationType>
1423      case -1911500465:
1424        /* referenceSeqId */ return this.referenceSeqId == null ? new Base[0] : new Base[] { this.referenceSeqId }; // CodeableConcept
1425      case 1923414665:
1426        /* referenceSeqPointer */ return this.referenceSeqPointer == null ? new Base[0]
1427            : new Base[] { this.referenceSeqPointer }; // Reference
1428      case -1648301499:
1429        /* referenceSeqString */ return this.referenceSeqString == null ? new Base[0]
1430            : new Base[] { this.referenceSeqString }; // StringType
1431      case -891993594:
1432        /* strand */ return this.strand == null ? new Base[0] : new Base[] { this.strand }; // Enumeration<StrandType>
1433      case 1903685202:
1434        /* windowStart */ return this.windowStart == null ? new Base[0] : new Base[] { this.windowStart }; // IntegerType
1435      case -217026869:
1436        /* windowEnd */ return this.windowEnd == null ? new Base[0] : new Base[] { this.windowEnd }; // IntegerType
1437      default:
1438        return super.getProperty(hash, name, checkValid);
1439      }
1440
1441    }
1442
1443    @Override
1444    public Base setProperty(int hash, String name, Base value) throws FHIRException {
1445      switch (hash) {
1446      case -1499470472: // chromosome
1447        this.chromosome = castToCodeableConcept(value); // CodeableConcept
1448        return value;
1449      case 1061239735: // genomeBuild
1450        this.genomeBuild = castToString(value); // StringType
1451        return value;
1452      case -1439500848: // orientation
1453        value = new OrientationTypeEnumFactory().fromType(castToCode(value));
1454        this.orientation = (Enumeration) value; // Enumeration<OrientationType>
1455        return value;
1456      case -1911500465: // referenceSeqId
1457        this.referenceSeqId = castToCodeableConcept(value); // CodeableConcept
1458        return value;
1459      case 1923414665: // referenceSeqPointer
1460        this.referenceSeqPointer = castToReference(value); // Reference
1461        return value;
1462      case -1648301499: // referenceSeqString
1463        this.referenceSeqString = castToString(value); // StringType
1464        return value;
1465      case -891993594: // strand
1466        value = new StrandTypeEnumFactory().fromType(castToCode(value));
1467        this.strand = (Enumeration) value; // Enumeration<StrandType>
1468        return value;
1469      case 1903685202: // windowStart
1470        this.windowStart = castToInteger(value); // IntegerType
1471        return value;
1472      case -217026869: // windowEnd
1473        this.windowEnd = castToInteger(value); // IntegerType
1474        return value;
1475      default:
1476        return super.setProperty(hash, name, value);
1477      }
1478
1479    }
1480
1481    @Override
1482    public Base setProperty(String name, Base value) throws FHIRException {
1483      if (name.equals("chromosome")) {
1484        this.chromosome = castToCodeableConcept(value); // CodeableConcept
1485      } else if (name.equals("genomeBuild")) {
1486        this.genomeBuild = castToString(value); // StringType
1487      } else if (name.equals("orientation")) {
1488        value = new OrientationTypeEnumFactory().fromType(castToCode(value));
1489        this.orientation = (Enumeration) value; // Enumeration<OrientationType>
1490      } else if (name.equals("referenceSeqId")) {
1491        this.referenceSeqId = castToCodeableConcept(value); // CodeableConcept
1492      } else if (name.equals("referenceSeqPointer")) {
1493        this.referenceSeqPointer = castToReference(value); // Reference
1494      } else if (name.equals("referenceSeqString")) {
1495        this.referenceSeqString = castToString(value); // StringType
1496      } else if (name.equals("strand")) {
1497        value = new StrandTypeEnumFactory().fromType(castToCode(value));
1498        this.strand = (Enumeration) value; // Enumeration<StrandType>
1499      } else if (name.equals("windowStart")) {
1500        this.windowStart = castToInteger(value); // IntegerType
1501      } else if (name.equals("windowEnd")) {
1502        this.windowEnd = castToInteger(value); // IntegerType
1503      } else
1504        return super.setProperty(name, value);
1505      return value;
1506    }
1507
1508    @Override
1509    public Base makeProperty(int hash, String name) throws FHIRException {
1510      switch (hash) {
1511      case -1499470472:
1512        return getChromosome();
1513      case 1061239735:
1514        return getGenomeBuildElement();
1515      case -1439500848:
1516        return getOrientationElement();
1517      case -1911500465:
1518        return getReferenceSeqId();
1519      case 1923414665:
1520        return getReferenceSeqPointer();
1521      case -1648301499:
1522        return getReferenceSeqStringElement();
1523      case -891993594:
1524        return getStrandElement();
1525      case 1903685202:
1526        return getWindowStartElement();
1527      case -217026869:
1528        return getWindowEndElement();
1529      default:
1530        return super.makeProperty(hash, name);
1531      }
1532
1533    }
1534
1535    @Override
1536    public String[] getTypesForProperty(int hash, String name) throws FHIRException {
1537      switch (hash) {
1538      case -1499470472:
1539        /* chromosome */ return new String[] { "CodeableConcept" };
1540      case 1061239735:
1541        /* genomeBuild */ return new String[] { "string" };
1542      case -1439500848:
1543        /* orientation */ return new String[] { "code" };
1544      case -1911500465:
1545        /* referenceSeqId */ return new String[] { "CodeableConcept" };
1546      case 1923414665:
1547        /* referenceSeqPointer */ return new String[] { "Reference" };
1548      case -1648301499:
1549        /* referenceSeqString */ return new String[] { "string" };
1550      case -891993594:
1551        /* strand */ return new String[] { "code" };
1552      case 1903685202:
1553        /* windowStart */ return new String[] { "integer" };
1554      case -217026869:
1555        /* windowEnd */ return new String[] { "integer" };
1556      default:
1557        return super.getTypesForProperty(hash, name);
1558      }
1559
1560    }
1561
1562    @Override
1563    public Base addChild(String name) throws FHIRException {
1564      if (name.equals("chromosome")) {
1565        this.chromosome = new CodeableConcept();
1566        return this.chromosome;
1567      } else if (name.equals("genomeBuild")) {
1568        throw new FHIRException("Cannot call addChild on a singleton property MolecularSequence.genomeBuild");
1569      } else if (name.equals("orientation")) {
1570        throw new FHIRException("Cannot call addChild on a singleton property MolecularSequence.orientation");
1571      } else if (name.equals("referenceSeqId")) {
1572        this.referenceSeqId = new CodeableConcept();
1573        return this.referenceSeqId;
1574      } else if (name.equals("referenceSeqPointer")) {
1575        this.referenceSeqPointer = new Reference();
1576        return this.referenceSeqPointer;
1577      } else if (name.equals("referenceSeqString")) {
1578        throw new FHIRException("Cannot call addChild on a singleton property MolecularSequence.referenceSeqString");
1579      } else if (name.equals("strand")) {
1580        throw new FHIRException("Cannot call addChild on a singleton property MolecularSequence.strand");
1581      } else if (name.equals("windowStart")) {
1582        throw new FHIRException("Cannot call addChild on a singleton property MolecularSequence.windowStart");
1583      } else if (name.equals("windowEnd")) {
1584        throw new FHIRException("Cannot call addChild on a singleton property MolecularSequence.windowEnd");
1585      } else
1586        return super.addChild(name);
1587    }
1588
1589    public MolecularSequenceReferenceSeqComponent copy() {
1590      MolecularSequenceReferenceSeqComponent dst = new MolecularSequenceReferenceSeqComponent();
1591      copyValues(dst);
1592      return dst;
1593    }
1594
1595    public void copyValues(MolecularSequenceReferenceSeqComponent dst) {
1596      super.copyValues(dst);
1597      dst.chromosome = chromosome == null ? null : chromosome.copy();
1598      dst.genomeBuild = genomeBuild == null ? null : genomeBuild.copy();
1599      dst.orientation = orientation == null ? null : orientation.copy();
1600      dst.referenceSeqId = referenceSeqId == null ? null : referenceSeqId.copy();
1601      dst.referenceSeqPointer = referenceSeqPointer == null ? null : referenceSeqPointer.copy();
1602      dst.referenceSeqString = referenceSeqString == null ? null : referenceSeqString.copy();
1603      dst.strand = strand == null ? null : strand.copy();
1604      dst.windowStart = windowStart == null ? null : windowStart.copy();
1605      dst.windowEnd = windowEnd == null ? null : windowEnd.copy();
1606    }
1607
1608    @Override
1609    public boolean equalsDeep(Base other_) {
1610      if (!super.equalsDeep(other_))
1611        return false;
1612      if (!(other_ instanceof MolecularSequenceReferenceSeqComponent))
1613        return false;
1614      MolecularSequenceReferenceSeqComponent o = (MolecularSequenceReferenceSeqComponent) other_;
1615      return compareDeep(chromosome, o.chromosome, true) && compareDeep(genomeBuild, o.genomeBuild, true)
1616          && compareDeep(orientation, o.orientation, true) && compareDeep(referenceSeqId, o.referenceSeqId, true)
1617          && compareDeep(referenceSeqPointer, o.referenceSeqPointer, true)
1618          && compareDeep(referenceSeqString, o.referenceSeqString, true) && compareDeep(strand, o.strand, true)
1619          && compareDeep(windowStart, o.windowStart, true) && compareDeep(windowEnd, o.windowEnd, true);
1620    }
1621
1622    @Override
1623    public boolean equalsShallow(Base other_) {
1624      if (!super.equalsShallow(other_))
1625        return false;
1626      if (!(other_ instanceof MolecularSequenceReferenceSeqComponent))
1627        return false;
1628      MolecularSequenceReferenceSeqComponent o = (MolecularSequenceReferenceSeqComponent) other_;
1629      return compareValues(genomeBuild, o.genomeBuild, true) && compareValues(orientation, o.orientation, true)
1630          && compareValues(referenceSeqString, o.referenceSeqString, true) && compareValues(strand, o.strand, true)
1631          && compareValues(windowStart, o.windowStart, true) && compareValues(windowEnd, o.windowEnd, true);
1632    }
1633
1634    public boolean isEmpty() {
1635      return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(chromosome, genomeBuild, orientation,
1636          referenceSeqId, referenceSeqPointer, referenceSeqString, strand, windowStart, windowEnd);
1637    }
1638
1639    public String fhirType() {
1640      return "MolecularSequence.referenceSeq";
1641
1642    }
1643
1644  }
1645
1646  @Block()
1647  public static class MolecularSequenceVariantComponent extends BackboneElement implements IBaseBackboneElement {
1648    /**
1649     * Start position of the variant on the reference sequence. If the coordinate
1650     * system is either 0-based or 1-based, then start position is inclusive.
1651     */
1652    @Child(name = "start", type = { IntegerType.class }, order = 1, min = 0, max = 1, modifier = false, summary = true)
1653    @Description(shortDefinition = "Start position of the variant on the  reference sequence", formalDefinition = "Start position of the variant on the  reference sequence. If the coordinate system is either 0-based or 1-based, then start position is inclusive.")
1654    protected IntegerType start;
1655
1656    /**
1657     * End position of the variant on the reference sequence. If the coordinate
1658     * system is 0-based then end is exclusive and does not include the last
1659     * position. If the coordinate system is 1-base, then end is inclusive and
1660     * includes the last position.
1661     */
1662    @Child(name = "end", type = { IntegerType.class }, order = 2, min = 0, max = 1, modifier = false, summary = true)
1663    @Description(shortDefinition = "End position of the variant on the reference sequence", formalDefinition = "End position of the variant on the reference sequence. If the coordinate system is 0-based then end is exclusive and does not include the last position. If the coordinate system is 1-base, then end is inclusive and includes the last position.")
1664    protected IntegerType end;
1665
1666    /**
1667     * An allele is one of a set of coexisting sequence variants of a gene
1668     * ([SO:0001023](http://www.sequenceontology.org/browser/current_svn/term/SO:0001023)).
1669     * Nucleotide(s)/amino acids from start position of sequence to stop position of
1670     * sequence on the positive (+) strand of the observed sequence. When the
1671     * sequence type is DNA, it should be the sequence on the positive (+) strand.
1672     * This will lay in the range between variant.start and variant.end.
1673     */
1674    @Child(name = "observedAllele", type = {
1675        StringType.class }, order = 3, min = 0, max = 1, modifier = false, summary = true)
1676    @Description(shortDefinition = "Allele that was observed", formalDefinition = "An allele is one of a set of coexisting sequence variants of a gene ([SO:0001023](http://www.sequenceontology.org/browser/current_svn/term/SO:0001023)).  Nucleotide(s)/amino acids from start position of sequence to stop position of sequence on the positive (+) strand of the observed  sequence. When the sequence  type is DNA, it should be the sequence on the positive (+) strand. This will lay in the range between variant.start and variant.end.")
1677    protected StringType observedAllele;
1678
1679    /**
1680     * An allele is one of a set of coexisting sequence variants of a gene
1681     * ([SO:0001023](http://www.sequenceontology.org/browser/current_svn/term/SO:0001023)).
1682     * Nucleotide(s)/amino acids from start position of sequence to stop position of
1683     * sequence on the positive (+) strand of the reference sequence. When the
1684     * sequence type is DNA, it should be the sequence on the positive (+) strand.
1685     * This will lay in the range between variant.start and variant.end.
1686     */
1687    @Child(name = "referenceAllele", type = {
1688        StringType.class }, order = 4, min = 0, max = 1, modifier = false, summary = true)
1689    @Description(shortDefinition = "Allele in the reference sequence", formalDefinition = "An allele is one of a set of coexisting sequence variants of a gene ([SO:0001023](http://www.sequenceontology.org/browser/current_svn/term/SO:0001023)). Nucleotide(s)/amino acids from start position of sequence to stop position of sequence on the positive (+) strand of the reference sequence. When the sequence  type is DNA, it should be the sequence on the positive (+) strand. This will lay in the range between variant.start and variant.end.")
1690    protected StringType referenceAllele;
1691
1692    /**
1693     * Extended CIGAR string for aligning the sequence with reference bases. See
1694     * detailed documentation
1695     * [here](http://support.illumina.com/help/SequencingAnalysisWorkflow/Content/Vault/Informatics/Sequencing_Analysis/CASAVA/swSEQ_mCA_ExtendedCIGARFormat.htm).
1696     */
1697    @Child(name = "cigar", type = { StringType.class }, order = 5, min = 0, max = 1, modifier = false, summary = true)
1698    @Description(shortDefinition = "Extended CIGAR string for aligning the sequence with reference bases", formalDefinition = "Extended CIGAR string for aligning the sequence with reference bases. See detailed documentation [here](http://support.illumina.com/help/SequencingAnalysisWorkflow/Content/Vault/Informatics/Sequencing_Analysis/CASAVA/swSEQ_mCA_ExtendedCIGARFormat.htm).")
1699    protected StringType cigar;
1700
1701    /**
1702     * A pointer to an Observation containing variant information.
1703     */
1704    @Child(name = "variantPointer", type = {
1705        Observation.class }, order = 6, min = 0, max = 1, modifier = false, summary = true)
1706    @Description(shortDefinition = "Pointer to observed variant information", formalDefinition = "A pointer to an Observation containing variant information.")
1707    protected Reference variantPointer;
1708
1709    /**
1710     * The actual object that is the target of the reference (A pointer to an
1711     * Observation containing variant information.)
1712     */
1713    protected Observation variantPointerTarget;
1714
1715    private static final long serialVersionUID = 105611837L;
1716
1717    /**
1718     * Constructor
1719     */
1720    public MolecularSequenceVariantComponent() {
1721      super();
1722    }
1723
1724    /**
1725     * @return {@link #start} (Start position of the variant on the reference
1726     *         sequence. If the coordinate system is either 0-based or 1-based, then
1727     *         start position is inclusive.). This is the underlying object with id,
1728     *         value and extensions. The accessor "getStart" gives direct access to
1729     *         the value
1730     */
1731    public IntegerType getStartElement() {
1732      if (this.start == null)
1733        if (Configuration.errorOnAutoCreate())
1734          throw new Error("Attempt to auto-create MolecularSequenceVariantComponent.start");
1735        else if (Configuration.doAutoCreate())
1736          this.start = new IntegerType(); // bb
1737      return this.start;
1738    }
1739
1740    public boolean hasStartElement() {
1741      return this.start != null && !this.start.isEmpty();
1742    }
1743
1744    public boolean hasStart() {
1745      return this.start != null && !this.start.isEmpty();
1746    }
1747
1748    /**
1749     * @param value {@link #start} (Start position of the variant on the reference
1750     *              sequence. If the coordinate system is either 0-based or 1-based,
1751     *              then start position is inclusive.). This is the underlying
1752     *              object with id, value and extensions. The accessor "getStart"
1753     *              gives direct access to the value
1754     */
1755    public MolecularSequenceVariantComponent setStartElement(IntegerType value) {
1756      this.start = value;
1757      return this;
1758    }
1759
1760    /**
1761     * @return Start position of the variant on the reference sequence. If the
1762     *         coordinate system is either 0-based or 1-based, then start position
1763     *         is inclusive.
1764     */
1765    public int getStart() {
1766      return this.start == null || this.start.isEmpty() ? 0 : this.start.getValue();
1767    }
1768
1769    /**
1770     * @param value Start position of the variant on the reference sequence. If the
1771     *              coordinate system is either 0-based or 1-based, then start
1772     *              position is inclusive.
1773     */
1774    public MolecularSequenceVariantComponent setStart(int value) {
1775      if (this.start == null)
1776        this.start = new IntegerType();
1777      this.start.setValue(value);
1778      return this;
1779    }
1780
1781    /**
1782     * @return {@link #end} (End position of the variant on the reference sequence.
1783     *         If the coordinate system is 0-based then end is exclusive and does
1784     *         not include the last position. If the coordinate system is 1-base,
1785     *         then end is inclusive and includes the last position.). This is the
1786     *         underlying object with id, value and extensions. The accessor
1787     *         "getEnd" gives direct access to the value
1788     */
1789    public IntegerType getEndElement() {
1790      if (this.end == null)
1791        if (Configuration.errorOnAutoCreate())
1792          throw new Error("Attempt to auto-create MolecularSequenceVariantComponent.end");
1793        else if (Configuration.doAutoCreate())
1794          this.end = new IntegerType(); // bb
1795      return this.end;
1796    }
1797
1798    public boolean hasEndElement() {
1799      return this.end != null && !this.end.isEmpty();
1800    }
1801
1802    public boolean hasEnd() {
1803      return this.end != null && !this.end.isEmpty();
1804    }
1805
1806    /**
1807     * @param value {@link #end} (End position of the variant on the reference
1808     *              sequence. If the coordinate system is 0-based then end is
1809     *              exclusive and does not include the last position. If the
1810     *              coordinate system is 1-base, then end is inclusive and includes
1811     *              the last position.). This is the underlying object with id,
1812     *              value and extensions. The accessor "getEnd" gives direct access
1813     *              to the value
1814     */
1815    public MolecularSequenceVariantComponent setEndElement(IntegerType value) {
1816      this.end = value;
1817      return this;
1818    }
1819
1820    /**
1821     * @return End position of the variant on the reference sequence. If the
1822     *         coordinate system is 0-based then end is exclusive and does not
1823     *         include the last position. If the coordinate system is 1-base, then
1824     *         end is inclusive and includes the last position.
1825     */
1826    public int getEnd() {
1827      return this.end == null || this.end.isEmpty() ? 0 : this.end.getValue();
1828    }
1829
1830    /**
1831     * @param value End position of the variant on the reference sequence. If the
1832     *              coordinate system is 0-based then end is exclusive and does not
1833     *              include the last position. If the coordinate system is 1-base,
1834     *              then end is inclusive and includes the last position.
1835     */
1836    public MolecularSequenceVariantComponent setEnd(int value) {
1837      if (this.end == null)
1838        this.end = new IntegerType();
1839      this.end.setValue(value);
1840      return this;
1841    }
1842
1843    /**
1844     * @return {@link #observedAllele} (An allele is one of a set of coexisting
1845     *         sequence variants of a gene
1846     *         ([SO:0001023](http://www.sequenceontology.org/browser/current_svn/term/SO:0001023)).
1847     *         Nucleotide(s)/amino acids from start position of sequence to stop
1848     *         position of sequence on the positive (+) strand of the observed
1849     *         sequence. When the sequence type is DNA, it should be the sequence on
1850     *         the positive (+) strand. This will lay in the range between
1851     *         variant.start and variant.end.). This is the underlying object with
1852     *         id, value and extensions. The accessor "getObservedAllele" gives
1853     *         direct access to the value
1854     */
1855    public StringType getObservedAlleleElement() {
1856      if (this.observedAllele == null)
1857        if (Configuration.errorOnAutoCreate())
1858          throw new Error("Attempt to auto-create MolecularSequenceVariantComponent.observedAllele");
1859        else if (Configuration.doAutoCreate())
1860          this.observedAllele = new StringType(); // bb
1861      return this.observedAllele;
1862    }
1863
1864    public boolean hasObservedAlleleElement() {
1865      return this.observedAllele != null && !this.observedAllele.isEmpty();
1866    }
1867
1868    public boolean hasObservedAllele() {
1869      return this.observedAllele != null && !this.observedAllele.isEmpty();
1870    }
1871
1872    /**
1873     * @param value {@link #observedAllele} (An allele is one of a set of coexisting
1874     *              sequence variants of a gene
1875     *              ([SO:0001023](http://www.sequenceontology.org/browser/current_svn/term/SO:0001023)).
1876     *              Nucleotide(s)/amino acids from start position of sequence to
1877     *              stop position of sequence on the positive (+) strand of the
1878     *              observed sequence. When the sequence type is DNA, it should be
1879     *              the sequence on the positive (+) strand. This will lay in the
1880     *              range between variant.start and variant.end.). This is the
1881     *              underlying object with id, value and extensions. The accessor
1882     *              "getObservedAllele" gives direct access to the value
1883     */
1884    public MolecularSequenceVariantComponent setObservedAlleleElement(StringType value) {
1885      this.observedAllele = value;
1886      return this;
1887    }
1888
1889    /**
1890     * @return An allele is one of a set of coexisting sequence variants of a gene
1891     *         ([SO:0001023](http://www.sequenceontology.org/browser/current_svn/term/SO:0001023)).
1892     *         Nucleotide(s)/amino acids from start position of sequence to stop
1893     *         position of sequence on the positive (+) strand of the observed
1894     *         sequence. When the sequence type is DNA, it should be the sequence on
1895     *         the positive (+) strand. This will lay in the range between
1896     *         variant.start and variant.end.
1897     */
1898    public String getObservedAllele() {
1899      return this.observedAllele == null ? null : this.observedAllele.getValue();
1900    }
1901
1902    /**
1903     * @param value An allele is one of a set of coexisting sequence variants of a
1904     *              gene
1905     *              ([SO:0001023](http://www.sequenceontology.org/browser/current_svn/term/SO:0001023)).
1906     *              Nucleotide(s)/amino acids from start position of sequence to
1907     *              stop position of sequence on the positive (+) strand of the
1908     *              observed sequence. When the sequence type is DNA, it should be
1909     *              the sequence on the positive (+) strand. This will lay in the
1910     *              range between variant.start and variant.end.
1911     */
1912    public MolecularSequenceVariantComponent setObservedAllele(String value) {
1913      if (Utilities.noString(value))
1914        this.observedAllele = null;
1915      else {
1916        if (this.observedAllele == null)
1917          this.observedAllele = new StringType();
1918        this.observedAllele.setValue(value);
1919      }
1920      return this;
1921    }
1922
1923    /**
1924     * @return {@link #referenceAllele} (An allele is one of a set of coexisting
1925     *         sequence variants of a gene
1926     *         ([SO:0001023](http://www.sequenceontology.org/browser/current_svn/term/SO:0001023)).
1927     *         Nucleotide(s)/amino acids from start position of sequence to stop
1928     *         position of sequence on the positive (+) strand of the reference
1929     *         sequence. When the sequence type is DNA, it should be the sequence on
1930     *         the positive (+) strand. This will lay in the range between
1931     *         variant.start and variant.end.). This is the underlying object with
1932     *         id, value and extensions. The accessor "getReferenceAllele" gives
1933     *         direct access to the value
1934     */
1935    public StringType getReferenceAlleleElement() {
1936      if (this.referenceAllele == null)
1937        if (Configuration.errorOnAutoCreate())
1938          throw new Error("Attempt to auto-create MolecularSequenceVariantComponent.referenceAllele");
1939        else if (Configuration.doAutoCreate())
1940          this.referenceAllele = new StringType(); // bb
1941      return this.referenceAllele;
1942    }
1943
1944    public boolean hasReferenceAlleleElement() {
1945      return this.referenceAllele != null && !this.referenceAllele.isEmpty();
1946    }
1947
1948    public boolean hasReferenceAllele() {
1949      return this.referenceAllele != null && !this.referenceAllele.isEmpty();
1950    }
1951
1952    /**
1953     * @param value {@link #referenceAllele} (An allele is one of a set of
1954     *              coexisting sequence variants of a gene
1955     *              ([SO:0001023](http://www.sequenceontology.org/browser/current_svn/term/SO:0001023)).
1956     *              Nucleotide(s)/amino acids from start position of sequence to
1957     *              stop position of sequence on the positive (+) strand of the
1958     *              reference sequence. When the sequence type is DNA, it should be
1959     *              the sequence on the positive (+) strand. This will lay in the
1960     *              range between variant.start and variant.end.). This is the
1961     *              underlying object with id, value and extensions. The accessor
1962     *              "getReferenceAllele" gives direct access to the value
1963     */
1964    public MolecularSequenceVariantComponent setReferenceAlleleElement(StringType value) {
1965      this.referenceAllele = value;
1966      return this;
1967    }
1968
1969    /**
1970     * @return An allele is one of a set of coexisting sequence variants of a gene
1971     *         ([SO:0001023](http://www.sequenceontology.org/browser/current_svn/term/SO:0001023)).
1972     *         Nucleotide(s)/amino acids from start position of sequence to stop
1973     *         position of sequence on the positive (+) strand of the reference
1974     *         sequence. When the sequence type is DNA, it should be the sequence on
1975     *         the positive (+) strand. This will lay in the range between
1976     *         variant.start and variant.end.
1977     */
1978    public String getReferenceAllele() {
1979      return this.referenceAllele == null ? null : this.referenceAllele.getValue();
1980    }
1981
1982    /**
1983     * @param value An allele is one of a set of coexisting sequence variants of a
1984     *              gene
1985     *              ([SO:0001023](http://www.sequenceontology.org/browser/current_svn/term/SO:0001023)).
1986     *              Nucleotide(s)/amino acids from start position of sequence to
1987     *              stop position of sequence on the positive (+) strand of the
1988     *              reference sequence. When the sequence type is DNA, it should be
1989     *              the sequence on the positive (+) strand. This will lay in the
1990     *              range between variant.start and variant.end.
1991     */
1992    public MolecularSequenceVariantComponent setReferenceAllele(String value) {
1993      if (Utilities.noString(value))
1994        this.referenceAllele = null;
1995      else {
1996        if (this.referenceAllele == null)
1997          this.referenceAllele = new StringType();
1998        this.referenceAllele.setValue(value);
1999      }
2000      return this;
2001    }
2002
2003    /**
2004     * @return {@link #cigar} (Extended CIGAR string for aligning the sequence with
2005     *         reference bases. See detailed documentation
2006     *         [here](http://support.illumina.com/help/SequencingAnalysisWorkflow/Content/Vault/Informatics/Sequencing_Analysis/CASAVA/swSEQ_mCA_ExtendedCIGARFormat.htm).).
2007     *         This is the underlying object with id, value and extensions. The
2008     *         accessor "getCigar" gives direct access to the value
2009     */
2010    public StringType getCigarElement() {
2011      if (this.cigar == null)
2012        if (Configuration.errorOnAutoCreate())
2013          throw new Error("Attempt to auto-create MolecularSequenceVariantComponent.cigar");
2014        else if (Configuration.doAutoCreate())
2015          this.cigar = new StringType(); // bb
2016      return this.cigar;
2017    }
2018
2019    public boolean hasCigarElement() {
2020      return this.cigar != null && !this.cigar.isEmpty();
2021    }
2022
2023    public boolean hasCigar() {
2024      return this.cigar != null && !this.cigar.isEmpty();
2025    }
2026
2027    /**
2028     * @param value {@link #cigar} (Extended CIGAR string for aligning the sequence
2029     *              with reference bases. See detailed documentation
2030     *              [here](http://support.illumina.com/help/SequencingAnalysisWorkflow/Content/Vault/Informatics/Sequencing_Analysis/CASAVA/swSEQ_mCA_ExtendedCIGARFormat.htm).).
2031     *              This is the underlying object with id, value and extensions. The
2032     *              accessor "getCigar" gives direct access to the value
2033     */
2034    public MolecularSequenceVariantComponent setCigarElement(StringType value) {
2035      this.cigar = value;
2036      return this;
2037    }
2038
2039    /**
2040     * @return Extended CIGAR string for aligning the sequence with reference bases.
2041     *         See detailed documentation
2042     *         [here](http://support.illumina.com/help/SequencingAnalysisWorkflow/Content/Vault/Informatics/Sequencing_Analysis/CASAVA/swSEQ_mCA_ExtendedCIGARFormat.htm).
2043     */
2044    public String getCigar() {
2045      return this.cigar == null ? null : this.cigar.getValue();
2046    }
2047
2048    /**
2049     * @param value Extended CIGAR string for aligning the sequence with reference
2050     *              bases. See detailed documentation
2051     *              [here](http://support.illumina.com/help/SequencingAnalysisWorkflow/Content/Vault/Informatics/Sequencing_Analysis/CASAVA/swSEQ_mCA_ExtendedCIGARFormat.htm).
2052     */
2053    public MolecularSequenceVariantComponent setCigar(String value) {
2054      if (Utilities.noString(value))
2055        this.cigar = null;
2056      else {
2057        if (this.cigar == null)
2058          this.cigar = new StringType();
2059        this.cigar.setValue(value);
2060      }
2061      return this;
2062    }
2063
2064    /**
2065     * @return {@link #variantPointer} (A pointer to an Observation containing
2066     *         variant information.)
2067     */
2068    public Reference getVariantPointer() {
2069      if (this.variantPointer == null)
2070        if (Configuration.errorOnAutoCreate())
2071          throw new Error("Attempt to auto-create MolecularSequenceVariantComponent.variantPointer");
2072        else if (Configuration.doAutoCreate())
2073          this.variantPointer = new Reference(); // cc
2074      return this.variantPointer;
2075    }
2076
2077    public boolean hasVariantPointer() {
2078      return this.variantPointer != null && !this.variantPointer.isEmpty();
2079    }
2080
2081    /**
2082     * @param value {@link #variantPointer} (A pointer to an Observation containing
2083     *              variant information.)
2084     */
2085    public MolecularSequenceVariantComponent setVariantPointer(Reference value) {
2086      this.variantPointer = value;
2087      return this;
2088    }
2089
2090    /**
2091     * @return {@link #variantPointer} The actual object that is the target of the
2092     *         reference. The reference library doesn't populate this, but you can
2093     *         use it to hold the resource if you resolve it. (A pointer to an
2094     *         Observation containing variant information.)
2095     */
2096    public Observation getVariantPointerTarget() {
2097      if (this.variantPointerTarget == null)
2098        if (Configuration.errorOnAutoCreate())
2099          throw new Error("Attempt to auto-create MolecularSequenceVariantComponent.variantPointer");
2100        else if (Configuration.doAutoCreate())
2101          this.variantPointerTarget = new Observation(); // aa
2102      return this.variantPointerTarget;
2103    }
2104
2105    /**
2106     * @param value {@link #variantPointer} The actual object that is the target of
2107     *              the reference. The reference library doesn't use these, but you
2108     *              can use it to hold the resource if you resolve it. (A pointer to
2109     *              an Observation containing variant information.)
2110     */
2111    public MolecularSequenceVariantComponent setVariantPointerTarget(Observation value) {
2112      this.variantPointerTarget = value;
2113      return this;
2114    }
2115
2116    protected void listChildren(List<Property> children) {
2117      super.listChildren(children);
2118      children.add(new Property("start", "integer",
2119          "Start position of the variant on the  reference sequence. If the coordinate system is either 0-based or 1-based, then start position is inclusive.",
2120          0, 1, start));
2121      children.add(new Property("end", "integer",
2122          "End position of the variant on the reference sequence. If the coordinate system is 0-based then end is exclusive and does not include the last position. If the coordinate system is 1-base, then end is inclusive and includes the last position.",
2123          0, 1, end));
2124      children.add(new Property("observedAllele", "string",
2125          "An allele is one of a set of coexisting sequence variants of a gene ([SO:0001023](http://www.sequenceontology.org/browser/current_svn/term/SO:0001023)).  Nucleotide(s)/amino acids from start position of sequence to stop position of sequence on the positive (+) strand of the observed  sequence. When the sequence  type is DNA, it should be the sequence on the positive (+) strand. This will lay in the range between variant.start and variant.end.",
2126          0, 1, observedAllele));
2127      children.add(new Property("referenceAllele", "string",
2128          "An allele is one of a set of coexisting sequence variants of a gene ([SO:0001023](http://www.sequenceontology.org/browser/current_svn/term/SO:0001023)). Nucleotide(s)/amino acids from start position of sequence to stop position of sequence on the positive (+) strand of the reference sequence. When the sequence  type is DNA, it should be the sequence on the positive (+) strand. This will lay in the range between variant.start and variant.end.",
2129          0, 1, referenceAllele));
2130      children.add(new Property("cigar", "string",
2131          "Extended CIGAR string for aligning the sequence with reference bases. See detailed documentation [here](http://support.illumina.com/help/SequencingAnalysisWorkflow/Content/Vault/Informatics/Sequencing_Analysis/CASAVA/swSEQ_mCA_ExtendedCIGARFormat.htm).",
2132          0, 1, cigar));
2133      children.add(new Property("variantPointer", "Reference(Observation)",
2134          "A pointer to an Observation containing variant information.", 0, 1, variantPointer));
2135    }
2136
2137    @Override
2138    public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
2139      switch (_hash) {
2140      case 109757538:
2141        /* start */ return new Property("start", "integer",
2142            "Start position of the variant on the  reference sequence. If the coordinate system is either 0-based or 1-based, then start position is inclusive.",
2143            0, 1, start);
2144      case 100571:
2145        /* end */ return new Property("end", "integer",
2146            "End position of the variant on the reference sequence. If the coordinate system is 0-based then end is exclusive and does not include the last position. If the coordinate system is 1-base, then end is inclusive and includes the last position.",
2147            0, 1, end);
2148      case -1418745787:
2149        /* observedAllele */ return new Property("observedAllele", "string",
2150            "An allele is one of a set of coexisting sequence variants of a gene ([SO:0001023](http://www.sequenceontology.org/browser/current_svn/term/SO:0001023)).  Nucleotide(s)/amino acids from start position of sequence to stop position of sequence on the positive (+) strand of the observed  sequence. When the sequence  type is DNA, it should be the sequence on the positive (+) strand. This will lay in the range between variant.start and variant.end.",
2151            0, 1, observedAllele);
2152      case 364045960:
2153        /* referenceAllele */ return new Property("referenceAllele", "string",
2154            "An allele is one of a set of coexisting sequence variants of a gene ([SO:0001023](http://www.sequenceontology.org/browser/current_svn/term/SO:0001023)). Nucleotide(s)/amino acids from start position of sequence to stop position of sequence on the positive (+) strand of the reference sequence. When the sequence  type is DNA, it should be the sequence on the positive (+) strand. This will lay in the range between variant.start and variant.end.",
2155            0, 1, referenceAllele);
2156      case 94658738:
2157        /* cigar */ return new Property("cigar", "string",
2158            "Extended CIGAR string for aligning the sequence with reference bases. See detailed documentation [here](http://support.illumina.com/help/SequencingAnalysisWorkflow/Content/Vault/Informatics/Sequencing_Analysis/CASAVA/swSEQ_mCA_ExtendedCIGARFormat.htm).",
2159            0, 1, cigar);
2160      case -1654319624:
2161        /* variantPointer */ return new Property("variantPointer", "Reference(Observation)",
2162            "A pointer to an Observation containing variant information.", 0, 1, variantPointer);
2163      default:
2164        return super.getNamedProperty(_hash, _name, _checkValid);
2165      }
2166
2167    }
2168
2169    @Override
2170    public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
2171      switch (hash) {
2172      case 109757538:
2173        /* start */ return this.start == null ? new Base[0] : new Base[] { this.start }; // IntegerType
2174      case 100571:
2175        /* end */ return this.end == null ? new Base[0] : new Base[] { this.end }; // IntegerType
2176      case -1418745787:
2177        /* observedAllele */ return this.observedAllele == null ? new Base[0] : new Base[] { this.observedAllele }; // StringType
2178      case 364045960:
2179        /* referenceAllele */ return this.referenceAllele == null ? new Base[0] : new Base[] { this.referenceAllele }; // StringType
2180      case 94658738:
2181        /* cigar */ return this.cigar == null ? new Base[0] : new Base[] { this.cigar }; // StringType
2182      case -1654319624:
2183        /* variantPointer */ return this.variantPointer == null ? new Base[0] : new Base[] { this.variantPointer }; // Reference
2184      default:
2185        return super.getProperty(hash, name, checkValid);
2186      }
2187
2188    }
2189
2190    @Override
2191    public Base setProperty(int hash, String name, Base value) throws FHIRException {
2192      switch (hash) {
2193      case 109757538: // start
2194        this.start = castToInteger(value); // IntegerType
2195        return value;
2196      case 100571: // end
2197        this.end = castToInteger(value); // IntegerType
2198        return value;
2199      case -1418745787: // observedAllele
2200        this.observedAllele = castToString(value); // StringType
2201        return value;
2202      case 364045960: // referenceAllele
2203        this.referenceAllele = castToString(value); // StringType
2204        return value;
2205      case 94658738: // cigar
2206        this.cigar = castToString(value); // StringType
2207        return value;
2208      case -1654319624: // variantPointer
2209        this.variantPointer = castToReference(value); // Reference
2210        return value;
2211      default:
2212        return super.setProperty(hash, name, value);
2213      }
2214
2215    }
2216
2217    @Override
2218    public Base setProperty(String name, Base value) throws FHIRException {
2219      if (name.equals("start")) {
2220        this.start = castToInteger(value); // IntegerType
2221      } else if (name.equals("end")) {
2222        this.end = castToInteger(value); // IntegerType
2223      } else if (name.equals("observedAllele")) {
2224        this.observedAllele = castToString(value); // StringType
2225      } else if (name.equals("referenceAllele")) {
2226        this.referenceAllele = castToString(value); // StringType
2227      } else if (name.equals("cigar")) {
2228        this.cigar = castToString(value); // StringType
2229      } else if (name.equals("variantPointer")) {
2230        this.variantPointer = castToReference(value); // Reference
2231      } else
2232        return super.setProperty(name, value);
2233      return value;
2234    }
2235
2236    @Override
2237    public Base makeProperty(int hash, String name) throws FHIRException {
2238      switch (hash) {
2239      case 109757538:
2240        return getStartElement();
2241      case 100571:
2242        return getEndElement();
2243      case -1418745787:
2244        return getObservedAlleleElement();
2245      case 364045960:
2246        return getReferenceAlleleElement();
2247      case 94658738:
2248        return getCigarElement();
2249      case -1654319624:
2250        return getVariantPointer();
2251      default:
2252        return super.makeProperty(hash, name);
2253      }
2254
2255    }
2256
2257    @Override
2258    public String[] getTypesForProperty(int hash, String name) throws FHIRException {
2259      switch (hash) {
2260      case 109757538:
2261        /* start */ return new String[] { "integer" };
2262      case 100571:
2263        /* end */ return new String[] { "integer" };
2264      case -1418745787:
2265        /* observedAllele */ return new String[] { "string" };
2266      case 364045960:
2267        /* referenceAllele */ return new String[] { "string" };
2268      case 94658738:
2269        /* cigar */ return new String[] { "string" };
2270      case -1654319624:
2271        /* variantPointer */ return new String[] { "Reference" };
2272      default:
2273        return super.getTypesForProperty(hash, name);
2274      }
2275
2276    }
2277
2278    @Override
2279    public Base addChild(String name) throws FHIRException {
2280      if (name.equals("start")) {
2281        throw new FHIRException("Cannot call addChild on a singleton property MolecularSequence.start");
2282      } else if (name.equals("end")) {
2283        throw new FHIRException("Cannot call addChild on a singleton property MolecularSequence.end");
2284      } else if (name.equals("observedAllele")) {
2285        throw new FHIRException("Cannot call addChild on a singleton property MolecularSequence.observedAllele");
2286      } else if (name.equals("referenceAllele")) {
2287        throw new FHIRException("Cannot call addChild on a singleton property MolecularSequence.referenceAllele");
2288      } else if (name.equals("cigar")) {
2289        throw new FHIRException("Cannot call addChild on a singleton property MolecularSequence.cigar");
2290      } else if (name.equals("variantPointer")) {
2291        this.variantPointer = new Reference();
2292        return this.variantPointer;
2293      } else
2294        return super.addChild(name);
2295    }
2296
2297    public MolecularSequenceVariantComponent copy() {
2298      MolecularSequenceVariantComponent dst = new MolecularSequenceVariantComponent();
2299      copyValues(dst);
2300      return dst;
2301    }
2302
2303    public void copyValues(MolecularSequenceVariantComponent dst) {
2304      super.copyValues(dst);
2305      dst.start = start == null ? null : start.copy();
2306      dst.end = end == null ? null : end.copy();
2307      dst.observedAllele = observedAllele == null ? null : observedAllele.copy();
2308      dst.referenceAllele = referenceAllele == null ? null : referenceAllele.copy();
2309      dst.cigar = cigar == null ? null : cigar.copy();
2310      dst.variantPointer = variantPointer == null ? null : variantPointer.copy();
2311    }
2312
2313    @Override
2314    public boolean equalsDeep(Base other_) {
2315      if (!super.equalsDeep(other_))
2316        return false;
2317      if (!(other_ instanceof MolecularSequenceVariantComponent))
2318        return false;
2319      MolecularSequenceVariantComponent o = (MolecularSequenceVariantComponent) other_;
2320      return compareDeep(start, o.start, true) && compareDeep(end, o.end, true)
2321          && compareDeep(observedAllele, o.observedAllele, true)
2322          && compareDeep(referenceAllele, o.referenceAllele, true) && compareDeep(cigar, o.cigar, true)
2323          && compareDeep(variantPointer, o.variantPointer, true);
2324    }
2325
2326    @Override
2327    public boolean equalsShallow(Base other_) {
2328      if (!super.equalsShallow(other_))
2329        return false;
2330      if (!(other_ instanceof MolecularSequenceVariantComponent))
2331        return false;
2332      MolecularSequenceVariantComponent o = (MolecularSequenceVariantComponent) other_;
2333      return compareValues(start, o.start, true) && compareValues(end, o.end, true)
2334          && compareValues(observedAllele, o.observedAllele, true)
2335          && compareValues(referenceAllele, o.referenceAllele, true) && compareValues(cigar, o.cigar, true);
2336    }
2337
2338    public boolean isEmpty() {
2339      return super.isEmpty()
2340          && ca.uhn.fhir.util.ElementUtil.isEmpty(start, end, observedAllele, referenceAllele, cigar, variantPointer);
2341    }
2342
2343    public String fhirType() {
2344      return "MolecularSequence.variant";
2345
2346    }
2347
2348  }
2349
2350  @Block()
2351  public static class MolecularSequenceQualityComponent extends BackboneElement implements IBaseBackboneElement {
2352    /**
2353     * INDEL / SNP / Undefined variant.
2354     */
2355    @Child(name = "type", type = { CodeType.class }, order = 1, min = 1, max = 1, modifier = false, summary = true)
2356    @Description(shortDefinition = "indel | snp | unknown", formalDefinition = "INDEL / SNP / Undefined variant.")
2357    @ca.uhn.fhir.model.api.annotation.Binding(valueSet = "http://hl7.org/fhir/ValueSet/quality-type")
2358    protected Enumeration<QualityType> type;
2359
2360    /**
2361     * Gold standard sequence used for comparing against.
2362     */
2363    @Child(name = "standardSequence", type = {
2364        CodeableConcept.class }, order = 2, min = 0, max = 1, modifier = false, summary = true)
2365    @Description(shortDefinition = "Standard sequence for comparison", formalDefinition = "Gold standard sequence used for comparing against.")
2366    @ca.uhn.fhir.model.api.annotation.Binding(valueSet = "http://hl7.org/fhir/ValueSet/sequence-quality-standardSequence")
2367    protected CodeableConcept standardSequence;
2368
2369    /**
2370     * Start position of the sequence. If the coordinate system is either 0-based or
2371     * 1-based, then start position is inclusive.
2372     */
2373    @Child(name = "start", type = { IntegerType.class }, order = 3, min = 0, max = 1, modifier = false, summary = true)
2374    @Description(shortDefinition = "Start position of the sequence", formalDefinition = "Start position of the sequence. If the coordinate system is either 0-based or 1-based, then start position is inclusive.")
2375    protected IntegerType start;
2376
2377    /**
2378     * End position of the sequence. If the coordinate system is 0-based then end is
2379     * exclusive and does not include the last position. If the coordinate system is
2380     * 1-base, then end is inclusive and includes the last position.
2381     */
2382    @Child(name = "end", type = { IntegerType.class }, order = 4, min = 0, max = 1, modifier = false, summary = true)
2383    @Description(shortDefinition = "End position of the sequence", formalDefinition = "End position of the sequence. If the coordinate system is 0-based then end is exclusive and does not include the last position. If the coordinate system is 1-base, then end is inclusive and includes the last position.")
2384    protected IntegerType end;
2385
2386    /**
2387     * The score of an experimentally derived feature such as a p-value
2388     * ([SO:0001685](http://www.sequenceontology.org/browser/current_svn/term/SO:0001685)).
2389     */
2390    @Child(name = "score", type = { Quantity.class }, order = 5, min = 0, max = 1, modifier = false, summary = true)
2391    @Description(shortDefinition = "Quality score for the comparison", formalDefinition = "The score of an experimentally derived feature such as a p-value ([SO:0001685](http://www.sequenceontology.org/browser/current_svn/term/SO:0001685)).")
2392    protected Quantity score;
2393
2394    /**
2395     * Which method is used to get sequence quality.
2396     */
2397    @Child(name = "method", type = {
2398        CodeableConcept.class }, order = 6, min = 0, max = 1, modifier = false, summary = true)
2399    @Description(shortDefinition = "Method to get quality", formalDefinition = "Which method is used to get sequence quality.")
2400    @ca.uhn.fhir.model.api.annotation.Binding(valueSet = "http://hl7.org/fhir/ValueSet/sequence-quality-method")
2401    protected CodeableConcept method;
2402
2403    /**
2404     * True positives, from the perspective of the truth data, i.e. the number of
2405     * sites in the Truth Call Set for which there are paths through the Query Call
2406     * Set that are consistent with all of the alleles at this site, and for which
2407     * there is an accurate genotype call for the event.
2408     */
2409    @Child(name = "truthTP", type = {
2410        DecimalType.class }, order = 7, min = 0, max = 1, modifier = false, summary = true)
2411    @Description(shortDefinition = "True positives from the perspective of the truth data", formalDefinition = "True positives, from the perspective of the truth data, i.e. the number of sites in the Truth Call Set for which there are paths through the Query Call Set that are consistent with all of the alleles at this site, and for which there is an accurate genotype call for the event.")
2412    protected DecimalType truthTP;
2413
2414    /**
2415     * True positives, from the perspective of the query data, i.e. the number of
2416     * sites in the Query Call Set for which there are paths through the Truth Call
2417     * Set that are consistent with all of the alleles at this site, and for which
2418     * there is an accurate genotype call for the event.
2419     */
2420    @Child(name = "queryTP", type = {
2421        DecimalType.class }, order = 8, min = 0, max = 1, modifier = false, summary = true)
2422    @Description(shortDefinition = "True positives from the perspective of the query data", formalDefinition = "True positives, from the perspective of the query data, i.e. the number of sites in the Query Call Set for which there are paths through the Truth Call Set that are consistent with all of the alleles at this site, and for which there is an accurate genotype call for the event.")
2423    protected DecimalType queryTP;
2424
2425    /**
2426     * False negatives, i.e. the number of sites in the Truth Call Set for which
2427     * there is no path through the Query Call Set that is consistent with all of
2428     * the alleles at this site, or sites for which there is an inaccurate genotype
2429     * call for the event. Sites with correct variant but incorrect genotype are
2430     * counted here.
2431     */
2432    @Child(name = "truthFN", type = {
2433        DecimalType.class }, order = 9, min = 0, max = 1, modifier = false, summary = true)
2434    @Description(shortDefinition = "False negatives", formalDefinition = "False negatives, i.e. the number of sites in the Truth Call Set for which there is no path through the Query Call Set that is consistent with all of the alleles at this site, or sites for which there is an inaccurate genotype call for the event. Sites with correct variant but incorrect genotype are counted here.")
2435    protected DecimalType truthFN;
2436
2437    /**
2438     * False positives, i.e. the number of sites in the Query Call Set for which
2439     * there is no path through the Truth Call Set that is consistent with this
2440     * site. Sites with correct variant but incorrect genotype are counted here.
2441     */
2442    @Child(name = "queryFP", type = {
2443        DecimalType.class }, order = 10, min = 0, max = 1, modifier = false, summary = true)
2444    @Description(shortDefinition = "False positives", formalDefinition = "False positives, i.e. the number of sites in the Query Call Set for which there is no path through the Truth Call Set that is consistent with this site. Sites with correct variant but incorrect genotype are counted here.")
2445    protected DecimalType queryFP;
2446
2447    /**
2448     * The number of false positives where the non-REF alleles in the Truth and
2449     * Query Call Sets match (i.e. cases where the truth is 1/1 and the query is 0/1
2450     * or similar).
2451     */
2452    @Child(name = "gtFP", type = { DecimalType.class }, order = 11, min = 0, max = 1, modifier = false, summary = true)
2453    @Description(shortDefinition = "False positives where the non-REF alleles in the Truth and Query Call Sets match", formalDefinition = "The number of false positives where the non-REF alleles in the Truth and Query Call Sets match (i.e. cases where the truth is 1/1 and the query is 0/1 or similar).")
2454    protected DecimalType gtFP;
2455
2456    /**
2457     * QUERY.TP / (QUERY.TP + QUERY.FP).
2458     */
2459    @Child(name = "precision", type = {
2460        DecimalType.class }, order = 12, min = 0, max = 1, modifier = false, summary = true)
2461    @Description(shortDefinition = "Precision of comparison", formalDefinition = "QUERY.TP / (QUERY.TP + QUERY.FP).")
2462    protected DecimalType precision;
2463
2464    /**
2465     * TRUTH.TP / (TRUTH.TP + TRUTH.FN).
2466     */
2467    @Child(name = "recall", type = {
2468        DecimalType.class }, order = 13, min = 0, max = 1, modifier = false, summary = true)
2469    @Description(shortDefinition = "Recall of comparison", formalDefinition = "TRUTH.TP / (TRUTH.TP + TRUTH.FN).")
2470    protected DecimalType recall;
2471
2472    /**
2473     * Harmonic mean of Recall and Precision, computed as: 2 * precision * recall /
2474     * (precision + recall).
2475     */
2476    @Child(name = "fScore", type = {
2477        DecimalType.class }, order = 14, min = 0, max = 1, modifier = false, summary = true)
2478    @Description(shortDefinition = "F-score", formalDefinition = "Harmonic mean of Recall and Precision, computed as: 2 * precision * recall / (precision + recall).")
2479    protected DecimalType fScore;
2480
2481    /**
2482     * Receiver Operator Characteristic (ROC) Curve to give sensitivity/specificity
2483     * tradeoff.
2484     */
2485    @Child(name = "roc", type = {}, order = 15, min = 0, max = 1, modifier = false, summary = true)
2486    @Description(shortDefinition = "Receiver Operator Characteristic (ROC) Curve", formalDefinition = "Receiver Operator Characteristic (ROC) Curve  to give sensitivity/specificity tradeoff.")
2487    protected MolecularSequenceQualityRocComponent roc;
2488
2489    private static final long serialVersionUID = -811933526L;
2490
2491    /**
2492     * Constructor
2493     */
2494    public MolecularSequenceQualityComponent() {
2495      super();
2496    }
2497
2498    /**
2499     * Constructor
2500     */
2501    public MolecularSequenceQualityComponent(Enumeration<QualityType> type) {
2502      super();
2503      this.type = type;
2504    }
2505
2506    /**
2507     * @return {@link #type} (INDEL / SNP / Undefined variant.). This is the
2508     *         underlying object with id, value and extensions. The accessor
2509     *         "getType" gives direct access to the value
2510     */
2511    public Enumeration<QualityType> getTypeElement() {
2512      if (this.type == null)
2513        if (Configuration.errorOnAutoCreate())
2514          throw new Error("Attempt to auto-create MolecularSequenceQualityComponent.type");
2515        else if (Configuration.doAutoCreate())
2516          this.type = new Enumeration<QualityType>(new QualityTypeEnumFactory()); // bb
2517      return this.type;
2518    }
2519
2520    public boolean hasTypeElement() {
2521      return this.type != null && !this.type.isEmpty();
2522    }
2523
2524    public boolean hasType() {
2525      return this.type != null && !this.type.isEmpty();
2526    }
2527
2528    /**
2529     * @param value {@link #type} (INDEL / SNP / Undefined variant.). This is the
2530     *              underlying object with id, value and extensions. The accessor
2531     *              "getType" gives direct access to the value
2532     */
2533    public MolecularSequenceQualityComponent setTypeElement(Enumeration<QualityType> value) {
2534      this.type = value;
2535      return this;
2536    }
2537
2538    /**
2539     * @return INDEL / SNP / Undefined variant.
2540     */
2541    public QualityType getType() {
2542      return this.type == null ? null : this.type.getValue();
2543    }
2544
2545    /**
2546     * @param value INDEL / SNP / Undefined variant.
2547     */
2548    public MolecularSequenceQualityComponent setType(QualityType value) {
2549      if (this.type == null)
2550        this.type = new Enumeration<QualityType>(new QualityTypeEnumFactory());
2551      this.type.setValue(value);
2552      return this;
2553    }
2554
2555    /**
2556     * @return {@link #standardSequence} (Gold standard sequence used for comparing
2557     *         against.)
2558     */
2559    public CodeableConcept getStandardSequence() {
2560      if (this.standardSequence == null)
2561        if (Configuration.errorOnAutoCreate())
2562          throw new Error("Attempt to auto-create MolecularSequenceQualityComponent.standardSequence");
2563        else if (Configuration.doAutoCreate())
2564          this.standardSequence = new CodeableConcept(); // cc
2565      return this.standardSequence;
2566    }
2567
2568    public boolean hasStandardSequence() {
2569      return this.standardSequence != null && !this.standardSequence.isEmpty();
2570    }
2571
2572    /**
2573     * @param value {@link #standardSequence} (Gold standard sequence used for
2574     *              comparing against.)
2575     */
2576    public MolecularSequenceQualityComponent setStandardSequence(CodeableConcept value) {
2577      this.standardSequence = value;
2578      return this;
2579    }
2580
2581    /**
2582     * @return {@link #start} (Start position of the sequence. If the coordinate
2583     *         system is either 0-based or 1-based, then start position is
2584     *         inclusive.). This is the underlying object with id, value and
2585     *         extensions. The accessor "getStart" gives direct access to the value
2586     */
2587    public IntegerType getStartElement() {
2588      if (this.start == null)
2589        if (Configuration.errorOnAutoCreate())
2590          throw new Error("Attempt to auto-create MolecularSequenceQualityComponent.start");
2591        else if (Configuration.doAutoCreate())
2592          this.start = new IntegerType(); // bb
2593      return this.start;
2594    }
2595
2596    public boolean hasStartElement() {
2597      return this.start != null && !this.start.isEmpty();
2598    }
2599
2600    public boolean hasStart() {
2601      return this.start != null && !this.start.isEmpty();
2602    }
2603
2604    /**
2605     * @param value {@link #start} (Start position of the sequence. If the
2606     *              coordinate system is either 0-based or 1-based, then start
2607     *              position is inclusive.). This is the underlying object with id,
2608     *              value and extensions. The accessor "getStart" gives direct
2609     *              access to the value
2610     */
2611    public MolecularSequenceQualityComponent setStartElement(IntegerType value) {
2612      this.start = value;
2613      return this;
2614    }
2615
2616    /**
2617     * @return Start position of the sequence. If the coordinate system is either
2618     *         0-based or 1-based, then start position is inclusive.
2619     */
2620    public int getStart() {
2621      return this.start == null || this.start.isEmpty() ? 0 : this.start.getValue();
2622    }
2623
2624    /**
2625     * @param value Start position of the sequence. If the coordinate system is
2626     *              either 0-based or 1-based, then start position is inclusive.
2627     */
2628    public MolecularSequenceQualityComponent setStart(int value) {
2629      if (this.start == null)
2630        this.start = new IntegerType();
2631      this.start.setValue(value);
2632      return this;
2633    }
2634
2635    /**
2636     * @return {@link #end} (End position of the sequence. If the coordinate system
2637     *         is 0-based then end is exclusive and does not include the last
2638     *         position. If the coordinate system is 1-base, then end is inclusive
2639     *         and includes the last position.). This is the underlying object with
2640     *         id, value and extensions. The accessor "getEnd" gives direct access
2641     *         to the value
2642     */
2643    public IntegerType getEndElement() {
2644      if (this.end == null)
2645        if (Configuration.errorOnAutoCreate())
2646          throw new Error("Attempt to auto-create MolecularSequenceQualityComponent.end");
2647        else if (Configuration.doAutoCreate())
2648          this.end = new IntegerType(); // bb
2649      return this.end;
2650    }
2651
2652    public boolean hasEndElement() {
2653      return this.end != null && !this.end.isEmpty();
2654    }
2655
2656    public boolean hasEnd() {
2657      return this.end != null && !this.end.isEmpty();
2658    }
2659
2660    /**
2661     * @param value {@link #end} (End position of the sequence. If the coordinate
2662     *              system is 0-based then end is exclusive and does not include the
2663     *              last position. If the coordinate system is 1-base, then end is
2664     *              inclusive and includes the last position.). This is the
2665     *              underlying object with id, value and extensions. The accessor
2666     *              "getEnd" gives direct access to the value
2667     */
2668    public MolecularSequenceQualityComponent setEndElement(IntegerType value) {
2669      this.end = value;
2670      return this;
2671    }
2672
2673    /**
2674     * @return End position of the sequence. If the coordinate system is 0-based
2675     *         then end is exclusive and does not include the last position. If the
2676     *         coordinate system is 1-base, then end is inclusive and includes the
2677     *         last position.
2678     */
2679    public int getEnd() {
2680      return this.end == null || this.end.isEmpty() ? 0 : this.end.getValue();
2681    }
2682
2683    /**
2684     * @param value End position of the sequence. If the coordinate system is
2685     *              0-based then end is exclusive and does not include the last
2686     *              position. If the coordinate system is 1-base, then end is
2687     *              inclusive and includes the last position.
2688     */
2689    public MolecularSequenceQualityComponent setEnd(int value) {
2690      if (this.end == null)
2691        this.end = new IntegerType();
2692      this.end.setValue(value);
2693      return this;
2694    }
2695
2696    /**
2697     * @return {@link #score} (The score of an experimentally derived feature such
2698     *         as a p-value
2699     *         ([SO:0001685](http://www.sequenceontology.org/browser/current_svn/term/SO:0001685)).)
2700     */
2701    public Quantity getScore() {
2702      if (this.score == null)
2703        if (Configuration.errorOnAutoCreate())
2704          throw new Error("Attempt to auto-create MolecularSequenceQualityComponent.score");
2705        else if (Configuration.doAutoCreate())
2706          this.score = new Quantity(); // cc
2707      return this.score;
2708    }
2709
2710    public boolean hasScore() {
2711      return this.score != null && !this.score.isEmpty();
2712    }
2713
2714    /**
2715     * @param value {@link #score} (The score of an experimentally derived feature
2716     *              such as a p-value
2717     *              ([SO:0001685](http://www.sequenceontology.org/browser/current_svn/term/SO:0001685)).)
2718     */
2719    public MolecularSequenceQualityComponent setScore(Quantity value) {
2720      this.score = value;
2721      return this;
2722    }
2723
2724    /**
2725     * @return {@link #method} (Which method is used to get sequence quality.)
2726     */
2727    public CodeableConcept getMethod() {
2728      if (this.method == null)
2729        if (Configuration.errorOnAutoCreate())
2730          throw new Error("Attempt to auto-create MolecularSequenceQualityComponent.method");
2731        else if (Configuration.doAutoCreate())
2732          this.method = new CodeableConcept(); // cc
2733      return this.method;
2734    }
2735
2736    public boolean hasMethod() {
2737      return this.method != null && !this.method.isEmpty();
2738    }
2739
2740    /**
2741     * @param value {@link #method} (Which method is used to get sequence quality.)
2742     */
2743    public MolecularSequenceQualityComponent setMethod(CodeableConcept value) {
2744      this.method = value;
2745      return this;
2746    }
2747
2748    /**
2749     * @return {@link #truthTP} (True positives, from the perspective of the truth
2750     *         data, i.e. the number of sites in the Truth Call Set for which there
2751     *         are paths through the Query Call Set that are consistent with all of
2752     *         the alleles at this site, and for which there is an accurate genotype
2753     *         call for the event.). This is the underlying object with id, value
2754     *         and extensions. The accessor "getTruthTP" gives direct access to the
2755     *         value
2756     */
2757    public DecimalType getTruthTPElement() {
2758      if (this.truthTP == null)
2759        if (Configuration.errorOnAutoCreate())
2760          throw new Error("Attempt to auto-create MolecularSequenceQualityComponent.truthTP");
2761        else if (Configuration.doAutoCreate())
2762          this.truthTP = new DecimalType(); // bb
2763      return this.truthTP;
2764    }
2765
2766    public boolean hasTruthTPElement() {
2767      return this.truthTP != null && !this.truthTP.isEmpty();
2768    }
2769
2770    public boolean hasTruthTP() {
2771      return this.truthTP != null && !this.truthTP.isEmpty();
2772    }
2773
2774    /**
2775     * @param value {@link #truthTP} (True positives, from the perspective of the
2776     *              truth data, i.e. the number of sites in the Truth Call Set for
2777     *              which there are paths through the Query Call Set that are
2778     *              consistent with all of the alleles at this site, and for which
2779     *              there is an accurate genotype call for the event.). This is the
2780     *              underlying object with id, value and extensions. The accessor
2781     *              "getTruthTP" gives direct access to the value
2782     */
2783    public MolecularSequenceQualityComponent setTruthTPElement(DecimalType value) {
2784      this.truthTP = value;
2785      return this;
2786    }
2787
2788    /**
2789     * @return True positives, from the perspective of the truth data, i.e. the
2790     *         number of sites in the Truth Call Set for which there are paths
2791     *         through the Query Call Set that are consistent with all of the
2792     *         alleles at this site, and for which there is an accurate genotype
2793     *         call for the event.
2794     */
2795    public BigDecimal getTruthTP() {
2796      return this.truthTP == null ? null : this.truthTP.getValue();
2797    }
2798
2799    /**
2800     * @param value True positives, from the perspective of the truth data, i.e. the
2801     *              number of sites in the Truth Call Set for which there are paths
2802     *              through the Query Call Set that are consistent with all of the
2803     *              alleles at this site, and for which there is an accurate
2804     *              genotype call for the event.
2805     */
2806    public MolecularSequenceQualityComponent setTruthTP(BigDecimal value) {
2807      if (value == null)
2808        this.truthTP = null;
2809      else {
2810        if (this.truthTP == null)
2811          this.truthTP = new DecimalType();
2812        this.truthTP.setValue(value);
2813      }
2814      return this;
2815    }
2816
2817    /**
2818     * @param value True positives, from the perspective of the truth data, i.e. the
2819     *              number of sites in the Truth Call Set for which there are paths
2820     *              through the Query Call Set that are consistent with all of the
2821     *              alleles at this site, and for which there is an accurate
2822     *              genotype call for the event.
2823     */
2824    public MolecularSequenceQualityComponent setTruthTP(long value) {
2825      this.truthTP = new DecimalType();
2826      this.truthTP.setValue(value);
2827      return this;
2828    }
2829
2830    /**
2831     * @param value True positives, from the perspective of the truth data, i.e. the
2832     *              number of sites in the Truth Call Set for which there are paths
2833     *              through the Query Call Set that are consistent with all of the
2834     *              alleles at this site, and for which there is an accurate
2835     *              genotype call for the event.
2836     */
2837    public MolecularSequenceQualityComponent setTruthTP(double value) {
2838      this.truthTP = new DecimalType();
2839      this.truthTP.setValue(value);
2840      return this;
2841    }
2842
2843    /**
2844     * @return {@link #queryTP} (True positives, from the perspective of the query
2845     *         data, i.e. the number of sites in the Query Call Set for which there
2846     *         are paths through the Truth Call Set that are consistent with all of
2847     *         the alleles at this site, and for which there is an accurate genotype
2848     *         call for the event.). This is the underlying object with id, value
2849     *         and extensions. The accessor "getQueryTP" gives direct access to the
2850     *         value
2851     */
2852    public DecimalType getQueryTPElement() {
2853      if (this.queryTP == null)
2854        if (Configuration.errorOnAutoCreate())
2855          throw new Error("Attempt to auto-create MolecularSequenceQualityComponent.queryTP");
2856        else if (Configuration.doAutoCreate())
2857          this.queryTP = new DecimalType(); // bb
2858      return this.queryTP;
2859    }
2860
2861    public boolean hasQueryTPElement() {
2862      return this.queryTP != null && !this.queryTP.isEmpty();
2863    }
2864
2865    public boolean hasQueryTP() {
2866      return this.queryTP != null && !this.queryTP.isEmpty();
2867    }
2868
2869    /**
2870     * @param value {@link #queryTP} (True positives, from the perspective of the
2871     *              query data, i.e. the number of sites in the Query Call Set for
2872     *              which there are paths through the Truth Call Set that are
2873     *              consistent with all of the alleles at this site, and for which
2874     *              there is an accurate genotype call for the event.). This is the
2875     *              underlying object with id, value and extensions. The accessor
2876     *              "getQueryTP" gives direct access to the value
2877     */
2878    public MolecularSequenceQualityComponent setQueryTPElement(DecimalType value) {
2879      this.queryTP = value;
2880      return this;
2881    }
2882
2883    /**
2884     * @return True positives, from the perspective of the query data, i.e. the
2885     *         number of sites in the Query Call Set for which there are paths
2886     *         through the Truth Call Set that are consistent with all of the
2887     *         alleles at this site, and for which there is an accurate genotype
2888     *         call for the event.
2889     */
2890    public BigDecimal getQueryTP() {
2891      return this.queryTP == null ? null : this.queryTP.getValue();
2892    }
2893
2894    /**
2895     * @param value True positives, from the perspective of the query data, i.e. the
2896     *              number of sites in the Query Call Set for which there are paths
2897     *              through the Truth Call Set that are consistent with all of the
2898     *              alleles at this site, and for which there is an accurate
2899     *              genotype call for the event.
2900     */
2901    public MolecularSequenceQualityComponent setQueryTP(BigDecimal value) {
2902      if (value == null)
2903        this.queryTP = null;
2904      else {
2905        if (this.queryTP == null)
2906          this.queryTP = new DecimalType();
2907        this.queryTP.setValue(value);
2908      }
2909      return this;
2910    }
2911
2912    /**
2913     * @param value True positives, from the perspective of the query data, i.e. the
2914     *              number of sites in the Query Call Set for which there are paths
2915     *              through the Truth Call Set that are consistent with all of the
2916     *              alleles at this site, and for which there is an accurate
2917     *              genotype call for the event.
2918     */
2919    public MolecularSequenceQualityComponent setQueryTP(long value) {
2920      this.queryTP = new DecimalType();
2921      this.queryTP.setValue(value);
2922      return this;
2923    }
2924
2925    /**
2926     * @param value True positives, from the perspective of the query data, i.e. the
2927     *              number of sites in the Query Call Set for which there are paths
2928     *              through the Truth Call Set that are consistent with all of the
2929     *              alleles at this site, and for which there is an accurate
2930     *              genotype call for the event.
2931     */
2932    public MolecularSequenceQualityComponent setQueryTP(double value) {
2933      this.queryTP = new DecimalType();
2934      this.queryTP.setValue(value);
2935      return this;
2936    }
2937
2938    /**
2939     * @return {@link #truthFN} (False negatives, i.e. the number of sites in the
2940     *         Truth Call Set for which there is no path through the Query Call Set
2941     *         that is consistent with all of the alleles at this site, or sites for
2942     *         which there is an inaccurate genotype call for the event. Sites with
2943     *         correct variant but incorrect genotype are counted here.). This is
2944     *         the underlying object with id, value and extensions. The accessor
2945     *         "getTruthFN" gives direct access to the value
2946     */
2947    public DecimalType getTruthFNElement() {
2948      if (this.truthFN == null)
2949        if (Configuration.errorOnAutoCreate())
2950          throw new Error("Attempt to auto-create MolecularSequenceQualityComponent.truthFN");
2951        else if (Configuration.doAutoCreate())
2952          this.truthFN = new DecimalType(); // bb
2953      return this.truthFN;
2954    }
2955
2956    public boolean hasTruthFNElement() {
2957      return this.truthFN != null && !this.truthFN.isEmpty();
2958    }
2959
2960    public boolean hasTruthFN() {
2961      return this.truthFN != null && !this.truthFN.isEmpty();
2962    }
2963
2964    /**
2965     * @param value {@link #truthFN} (False negatives, i.e. the number of sites in
2966     *              the Truth Call Set for which there is no path through the Query
2967     *              Call Set that is consistent with all of the alleles at this
2968     *              site, or sites for which there is an inaccurate genotype call
2969     *              for the event. Sites with correct variant but incorrect genotype
2970     *              are counted here.). This is the underlying object with id, value
2971     *              and extensions. The accessor "getTruthFN" gives direct access to
2972     *              the value
2973     */
2974    public MolecularSequenceQualityComponent setTruthFNElement(DecimalType value) {
2975      this.truthFN = value;
2976      return this;
2977    }
2978
2979    /**
2980     * @return False negatives, i.e. the number of sites in the Truth Call Set for
2981     *         which there is no path through the Query Call Set that is consistent
2982     *         with all of the alleles at this site, or sites for which there is an
2983     *         inaccurate genotype call for the event. Sites with correct variant
2984     *         but incorrect genotype are counted here.
2985     */
2986    public BigDecimal getTruthFN() {
2987      return this.truthFN == null ? null : this.truthFN.getValue();
2988    }
2989
2990    /**
2991     * @param value False negatives, i.e. the number of sites in the Truth Call Set
2992     *              for which there is no path through the Query Call Set that is
2993     *              consistent with all of the alleles at this site, or sites for
2994     *              which there is an inaccurate genotype call for the event. Sites
2995     *              with correct variant but incorrect genotype are counted here.
2996     */
2997    public MolecularSequenceQualityComponent setTruthFN(BigDecimal value) {
2998      if (value == null)
2999        this.truthFN = null;
3000      else {
3001        if (this.truthFN == null)
3002          this.truthFN = new DecimalType();
3003        this.truthFN.setValue(value);
3004      }
3005      return this;
3006    }
3007
3008    /**
3009     * @param value False negatives, i.e. the number of sites in the Truth Call Set
3010     *              for which there is no path through the Query Call Set that is
3011     *              consistent with all of the alleles at this site, or sites for
3012     *              which there is an inaccurate genotype call for the event. Sites
3013     *              with correct variant but incorrect genotype are counted here.
3014     */
3015    public MolecularSequenceQualityComponent setTruthFN(long value) {
3016      this.truthFN = new DecimalType();
3017      this.truthFN.setValue(value);
3018      return this;
3019    }
3020
3021    /**
3022     * @param value False negatives, i.e. the number of sites in the Truth Call Set
3023     *              for which there is no path through the Query Call Set that is
3024     *              consistent with all of the alleles at this site, or sites for
3025     *              which there is an inaccurate genotype call for the event. Sites
3026     *              with correct variant but incorrect genotype are counted here.
3027     */
3028    public MolecularSequenceQualityComponent setTruthFN(double value) {
3029      this.truthFN = new DecimalType();
3030      this.truthFN.setValue(value);
3031      return this;
3032    }
3033
3034    /**
3035     * @return {@link #queryFP} (False positives, i.e. the number of sites in the
3036     *         Query Call Set for which there is no path through the Truth Call Set
3037     *         that is consistent with this site. Sites with correct variant but
3038     *         incorrect genotype are counted here.). This is the underlying object
3039     *         with id, value and extensions. The accessor "getQueryFP" gives direct
3040     *         access to the value
3041     */
3042    public DecimalType getQueryFPElement() {
3043      if (this.queryFP == null)
3044        if (Configuration.errorOnAutoCreate())
3045          throw new Error("Attempt to auto-create MolecularSequenceQualityComponent.queryFP");
3046        else if (Configuration.doAutoCreate())
3047          this.queryFP = new DecimalType(); // bb
3048      return this.queryFP;
3049    }
3050
3051    public boolean hasQueryFPElement() {
3052      return this.queryFP != null && !this.queryFP.isEmpty();
3053    }
3054
3055    public boolean hasQueryFP() {
3056      return this.queryFP != null && !this.queryFP.isEmpty();
3057    }
3058
3059    /**
3060     * @param value {@link #queryFP} (False positives, i.e. the number of sites in
3061     *              the Query Call Set for which there is no path through the Truth
3062     *              Call Set that is consistent with this site. Sites with correct
3063     *              variant but incorrect genotype are counted here.). This is the
3064     *              underlying object with id, value and extensions. The accessor
3065     *              "getQueryFP" gives direct access to the value
3066     */
3067    public MolecularSequenceQualityComponent setQueryFPElement(DecimalType value) {
3068      this.queryFP = value;
3069      return this;
3070    }
3071
3072    /**
3073     * @return False positives, i.e. the number of sites in the Query Call Set for
3074     *         which there is no path through the Truth Call Set that is consistent
3075     *         with this site. Sites with correct variant but incorrect genotype are
3076     *         counted here.
3077     */
3078    public BigDecimal getQueryFP() {
3079      return this.queryFP == null ? null : this.queryFP.getValue();
3080    }
3081
3082    /**
3083     * @param value False positives, i.e. the number of sites in the Query Call Set
3084     *              for which there is no path through the Truth Call Set that is
3085     *              consistent with this site. Sites with correct variant but
3086     *              incorrect genotype are counted here.
3087     */
3088    public MolecularSequenceQualityComponent setQueryFP(BigDecimal value) {
3089      if (value == null)
3090        this.queryFP = null;
3091      else {
3092        if (this.queryFP == null)
3093          this.queryFP = new DecimalType();
3094        this.queryFP.setValue(value);
3095      }
3096      return this;
3097    }
3098
3099    /**
3100     * @param value False positives, i.e. the number of sites in the Query Call Set
3101     *              for which there is no path through the Truth Call Set that is
3102     *              consistent with this site. Sites with correct variant but
3103     *              incorrect genotype are counted here.
3104     */
3105    public MolecularSequenceQualityComponent setQueryFP(long value) {
3106      this.queryFP = new DecimalType();
3107      this.queryFP.setValue(value);
3108      return this;
3109    }
3110
3111    /**
3112     * @param value False positives, i.e. the number of sites in the Query Call Set
3113     *              for which there is no path through the Truth Call Set that is
3114     *              consistent with this site. Sites with correct variant but
3115     *              incorrect genotype are counted here.
3116     */
3117    public MolecularSequenceQualityComponent setQueryFP(double value) {
3118      this.queryFP = new DecimalType();
3119      this.queryFP.setValue(value);
3120      return this;
3121    }
3122
3123    /**
3124     * @return {@link #gtFP} (The number of false positives where the non-REF
3125     *         alleles in the Truth and Query Call Sets match (i.e. cases where the
3126     *         truth is 1/1 and the query is 0/1 or similar).). This is the
3127     *         underlying object with id, value and extensions. The accessor
3128     *         "getGtFP" gives direct access to the value
3129     */
3130    public DecimalType getGtFPElement() {
3131      if (this.gtFP == null)
3132        if (Configuration.errorOnAutoCreate())
3133          throw new Error("Attempt to auto-create MolecularSequenceQualityComponent.gtFP");
3134        else if (Configuration.doAutoCreate())
3135          this.gtFP = new DecimalType(); // bb
3136      return this.gtFP;
3137    }
3138
3139    public boolean hasGtFPElement() {
3140      return this.gtFP != null && !this.gtFP.isEmpty();
3141    }
3142
3143    public boolean hasGtFP() {
3144      return this.gtFP != null && !this.gtFP.isEmpty();
3145    }
3146
3147    /**
3148     * @param value {@link #gtFP} (The number of false positives where the non-REF
3149     *              alleles in the Truth and Query Call Sets match (i.e. cases where
3150     *              the truth is 1/1 and the query is 0/1 or similar).). This is the
3151     *              underlying object with id, value and extensions. The accessor
3152     *              "getGtFP" gives direct access to the value
3153     */
3154    public MolecularSequenceQualityComponent setGtFPElement(DecimalType value) {
3155      this.gtFP = value;
3156      return this;
3157    }
3158
3159    /**
3160     * @return The number of false positives where the non-REF alleles in the Truth
3161     *         and Query Call Sets match (i.e. cases where the truth is 1/1 and the
3162     *         query is 0/1 or similar).
3163     */
3164    public BigDecimal getGtFP() {
3165      return this.gtFP == null ? null : this.gtFP.getValue();
3166    }
3167
3168    /**
3169     * @param value The number of false positives where the non-REF alleles in the
3170     *              Truth and Query Call Sets match (i.e. cases where the truth is
3171     *              1/1 and the query is 0/1 or similar).
3172     */
3173    public MolecularSequenceQualityComponent setGtFP(BigDecimal value) {
3174      if (value == null)
3175        this.gtFP = null;
3176      else {
3177        if (this.gtFP == null)
3178          this.gtFP = new DecimalType();
3179        this.gtFP.setValue(value);
3180      }
3181      return this;
3182    }
3183
3184    /**
3185     * @param value The number of false positives where the non-REF alleles in the
3186     *              Truth and Query Call Sets match (i.e. cases where the truth is
3187     *              1/1 and the query is 0/1 or similar).
3188     */
3189    public MolecularSequenceQualityComponent setGtFP(long value) {
3190      this.gtFP = new DecimalType();
3191      this.gtFP.setValue(value);
3192      return this;
3193    }
3194
3195    /**
3196     * @param value The number of false positives where the non-REF alleles in the
3197     *              Truth and Query Call Sets match (i.e. cases where the truth is
3198     *              1/1 and the query is 0/1 or similar).
3199     */
3200    public MolecularSequenceQualityComponent setGtFP(double value) {
3201      this.gtFP = new DecimalType();
3202      this.gtFP.setValue(value);
3203      return this;
3204    }
3205
3206    /**
3207     * @return {@link #precision} (QUERY.TP / (QUERY.TP + QUERY.FP).). This is the
3208     *         underlying object with id, value and extensions. The accessor
3209     *         "getPrecision" gives direct access to the value
3210     */
3211    public DecimalType getPrecisionElement() {
3212      if (this.precision == null)
3213        if (Configuration.errorOnAutoCreate())
3214          throw new Error("Attempt to auto-create MolecularSequenceQualityComponent.precision");
3215        else if (Configuration.doAutoCreate())
3216          this.precision = new DecimalType(); // bb
3217      return this.precision;
3218    }
3219
3220    public boolean hasPrecisionElement() {
3221      return this.precision != null && !this.precision.isEmpty();
3222    }
3223
3224    public boolean hasPrecision() {
3225      return this.precision != null && !this.precision.isEmpty();
3226    }
3227
3228    /**
3229     * @param value {@link #precision} (QUERY.TP / (QUERY.TP + QUERY.FP).). This is
3230     *              the underlying object with id, value and extensions. The
3231     *              accessor "getPrecision" gives direct access to the value
3232     */
3233    public MolecularSequenceQualityComponent setPrecisionElement(DecimalType value) {
3234      this.precision = value;
3235      return this;
3236    }
3237
3238    /**
3239     * @return QUERY.TP / (QUERY.TP + QUERY.FP).
3240     */
3241    public BigDecimal getPrecision() {
3242      return this.precision == null ? null : this.precision.getValue();
3243    }
3244
3245    /**
3246     * @param value QUERY.TP / (QUERY.TP + QUERY.FP).
3247     */
3248    public MolecularSequenceQualityComponent setPrecision(BigDecimal value) {
3249      if (value == null)
3250        this.precision = null;
3251      else {
3252        if (this.precision == null)
3253          this.precision = new DecimalType();
3254        this.precision.setValue(value);
3255      }
3256      return this;
3257    }
3258
3259    /**
3260     * @param value QUERY.TP / (QUERY.TP + QUERY.FP).
3261     */
3262    public MolecularSequenceQualityComponent setPrecision(long value) {
3263      this.precision = new DecimalType();
3264      this.precision.setValue(value);
3265      return this;
3266    }
3267
3268    /**
3269     * @param value QUERY.TP / (QUERY.TP + QUERY.FP).
3270     */
3271    public MolecularSequenceQualityComponent setPrecision(double value) {
3272      this.precision = new DecimalType();
3273      this.precision.setValue(value);
3274      return this;
3275    }
3276
3277    /**
3278     * @return {@link #recall} (TRUTH.TP / (TRUTH.TP + TRUTH.FN).). This is the
3279     *         underlying object with id, value and extensions. The accessor
3280     *         "getRecall" gives direct access to the value
3281     */
3282    public DecimalType getRecallElement() {
3283      if (this.recall == null)
3284        if (Configuration.errorOnAutoCreate())
3285          throw new Error("Attempt to auto-create MolecularSequenceQualityComponent.recall");
3286        else if (Configuration.doAutoCreate())
3287          this.recall = new DecimalType(); // bb
3288      return this.recall;
3289    }
3290
3291    public boolean hasRecallElement() {
3292      return this.recall != null && !this.recall.isEmpty();
3293    }
3294
3295    public boolean hasRecall() {
3296      return this.recall != null && !this.recall.isEmpty();
3297    }
3298
3299    /**
3300     * @param value {@link #recall} (TRUTH.TP / (TRUTH.TP + TRUTH.FN).). This is the
3301     *              underlying object with id, value and extensions. The accessor
3302     *              "getRecall" gives direct access to the value
3303     */
3304    public MolecularSequenceQualityComponent setRecallElement(DecimalType value) {
3305      this.recall = value;
3306      return this;
3307    }
3308
3309    /**
3310     * @return TRUTH.TP / (TRUTH.TP + TRUTH.FN).
3311     */
3312    public BigDecimal getRecall() {
3313      return this.recall == null ? null : this.recall.getValue();
3314    }
3315
3316    /**
3317     * @param value TRUTH.TP / (TRUTH.TP + TRUTH.FN).
3318     */
3319    public MolecularSequenceQualityComponent setRecall(BigDecimal value) {
3320      if (value == null)
3321        this.recall = null;
3322      else {
3323        if (this.recall == null)
3324          this.recall = new DecimalType();
3325        this.recall.setValue(value);
3326      }
3327      return this;
3328    }
3329
3330    /**
3331     * @param value TRUTH.TP / (TRUTH.TP + TRUTH.FN).
3332     */
3333    public MolecularSequenceQualityComponent setRecall(long value) {
3334      this.recall = new DecimalType();
3335      this.recall.setValue(value);
3336      return this;
3337    }
3338
3339    /**
3340     * @param value TRUTH.TP / (TRUTH.TP + TRUTH.FN).
3341     */
3342    public MolecularSequenceQualityComponent setRecall(double value) {
3343      this.recall = new DecimalType();
3344      this.recall.setValue(value);
3345      return this;
3346    }
3347
3348    /**
3349     * @return {@link #fScore} (Harmonic mean of Recall and Precision, computed as:
3350     *         2 * precision * recall / (precision + recall).). This is the
3351     *         underlying object with id, value and extensions. The accessor
3352     *         "getFScore" gives direct access to the value
3353     */
3354    public DecimalType getFScoreElement() {
3355      if (this.fScore == null)
3356        if (Configuration.errorOnAutoCreate())
3357          throw new Error("Attempt to auto-create MolecularSequenceQualityComponent.fScore");
3358        else if (Configuration.doAutoCreate())
3359          this.fScore = new DecimalType(); // bb
3360      return this.fScore;
3361    }
3362
3363    public boolean hasFScoreElement() {
3364      return this.fScore != null && !this.fScore.isEmpty();
3365    }
3366
3367    public boolean hasFScore() {
3368      return this.fScore != null && !this.fScore.isEmpty();
3369    }
3370
3371    /**
3372     * @param value {@link #fScore} (Harmonic mean of Recall and Precision, computed
3373     *              as: 2 * precision * recall / (precision + recall).). This is the
3374     *              underlying object with id, value and extensions. The accessor
3375     *              "getFScore" gives direct access to the value
3376     */
3377    public MolecularSequenceQualityComponent setFScoreElement(DecimalType value) {
3378      this.fScore = value;
3379      return this;
3380    }
3381
3382    /**
3383     * @return Harmonic mean of Recall and Precision, computed as: 2 * precision *
3384     *         recall / (precision + recall).
3385     */
3386    public BigDecimal getFScore() {
3387      return this.fScore == null ? null : this.fScore.getValue();
3388    }
3389
3390    /**
3391     * @param value Harmonic mean of Recall and Precision, computed as: 2 *
3392     *              precision * recall / (precision + recall).
3393     */
3394    public MolecularSequenceQualityComponent setFScore(BigDecimal value) {
3395      if (value == null)
3396        this.fScore = null;
3397      else {
3398        if (this.fScore == null)
3399          this.fScore = new DecimalType();
3400        this.fScore.setValue(value);
3401      }
3402      return this;
3403    }
3404
3405    /**
3406     * @param value Harmonic mean of Recall and Precision, computed as: 2 *
3407     *              precision * recall / (precision + recall).
3408     */
3409    public MolecularSequenceQualityComponent setFScore(long value) {
3410      this.fScore = new DecimalType();
3411      this.fScore.setValue(value);
3412      return this;
3413    }
3414
3415    /**
3416     * @param value Harmonic mean of Recall and Precision, computed as: 2 *
3417     *              precision * recall / (precision + recall).
3418     */
3419    public MolecularSequenceQualityComponent setFScore(double value) {
3420      this.fScore = new DecimalType();
3421      this.fScore.setValue(value);
3422      return this;
3423    }
3424
3425    /**
3426     * @return {@link #roc} (Receiver Operator Characteristic (ROC) Curve to give
3427     *         sensitivity/specificity tradeoff.)
3428     */
3429    public MolecularSequenceQualityRocComponent getRoc() {
3430      if (this.roc == null)
3431        if (Configuration.errorOnAutoCreate())
3432          throw new Error("Attempt to auto-create MolecularSequenceQualityComponent.roc");
3433        else if (Configuration.doAutoCreate())
3434          this.roc = new MolecularSequenceQualityRocComponent(); // cc
3435      return this.roc;
3436    }
3437
3438    public boolean hasRoc() {
3439      return this.roc != null && !this.roc.isEmpty();
3440    }
3441
3442    /**
3443     * @param value {@link #roc} (Receiver Operator Characteristic (ROC) Curve to
3444     *              give sensitivity/specificity tradeoff.)
3445     */
3446    public MolecularSequenceQualityComponent setRoc(MolecularSequenceQualityRocComponent value) {
3447      this.roc = value;
3448      return this;
3449    }
3450
3451    protected void listChildren(List<Property> children) {
3452      super.listChildren(children);
3453      children.add(new Property("type", "code", "INDEL / SNP / Undefined variant.", 0, 1, type));
3454      children.add(new Property("standardSequence", "CodeableConcept",
3455          "Gold standard sequence used for comparing against.", 0, 1, standardSequence));
3456      children.add(new Property("start", "integer",
3457          "Start position of the sequence. If the coordinate system is either 0-based or 1-based, then start position is inclusive.",
3458          0, 1, start));
3459      children.add(new Property("end", "integer",
3460          "End position of the sequence. If the coordinate system is 0-based then end is exclusive and does not include the last position. If the coordinate system is 1-base, then end is inclusive and includes the last position.",
3461          0, 1, end));
3462      children.add(new Property("score", "Quantity",
3463          "The score of an experimentally derived feature such as a p-value ([SO:0001685](http://www.sequenceontology.org/browser/current_svn/term/SO:0001685)).",
3464          0, 1, score));
3465      children.add(
3466          new Property("method", "CodeableConcept", "Which method is used to get sequence quality.", 0, 1, method));
3467      children.add(new Property("truthTP", "decimal",
3468          "True positives, from the perspective of the truth data, i.e. the number of sites in the Truth Call Set for which there are paths through the Query Call Set that are consistent with all of the alleles at this site, and for which there is an accurate genotype call for the event.",
3469          0, 1, truthTP));
3470      children.add(new Property("queryTP", "decimal",
3471          "True positives, from the perspective of the query data, i.e. the number of sites in the Query Call Set for which there are paths through the Truth Call Set that are consistent with all of the alleles at this site, and for which there is an accurate genotype call for the event.",
3472          0, 1, queryTP));
3473      children.add(new Property("truthFN", "decimal",
3474          "False negatives, i.e. the number of sites in the Truth Call Set for which there is no path through the Query Call Set that is consistent with all of the alleles at this site, or sites for which there is an inaccurate genotype call for the event. Sites with correct variant but incorrect genotype are counted here.",
3475          0, 1, truthFN));
3476      children.add(new Property("queryFP", "decimal",
3477          "False positives, i.e. the number of sites in the Query Call Set for which there is no path through the Truth Call Set that is consistent with this site. Sites with correct variant but incorrect genotype are counted here.",
3478          0, 1, queryFP));
3479      children.add(new Property("gtFP", "decimal",
3480          "The number of false positives where the non-REF alleles in the Truth and Query Call Sets match (i.e. cases where the truth is 1/1 and the query is 0/1 or similar).",
3481          0, 1, gtFP));
3482      children.add(new Property("precision", "decimal", "QUERY.TP / (QUERY.TP + QUERY.FP).", 0, 1, precision));
3483      children.add(new Property("recall", "decimal", "TRUTH.TP / (TRUTH.TP + TRUTH.FN).", 0, 1, recall));
3484      children.add(new Property("fScore", "decimal",
3485          "Harmonic mean of Recall and Precision, computed as: 2 * precision * recall / (precision + recall).", 0, 1,
3486          fScore));
3487      children.add(new Property("roc", "",
3488          "Receiver Operator Characteristic (ROC) Curve  to give sensitivity/specificity tradeoff.", 0, 1, roc));
3489    }
3490
3491    @Override
3492    public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
3493      switch (_hash) {
3494      case 3575610:
3495        /* type */ return new Property("type", "code", "INDEL / SNP / Undefined variant.", 0, 1, type);
3496      case -1861227106:
3497        /* standardSequence */ return new Property("standardSequence", "CodeableConcept",
3498            "Gold standard sequence used for comparing against.", 0, 1, standardSequence);
3499      case 109757538:
3500        /* start */ return new Property("start", "integer",
3501            "Start position of the sequence. If the coordinate system is either 0-based or 1-based, then start position is inclusive.",
3502            0, 1, start);
3503      case 100571:
3504        /* end */ return new Property("end", "integer",
3505            "End position of the sequence. If the coordinate system is 0-based then end is exclusive and does not include the last position. If the coordinate system is 1-base, then end is inclusive and includes the last position.",
3506            0, 1, end);
3507      case 109264530:
3508        /* score */ return new Property("score", "Quantity",
3509            "The score of an experimentally derived feature such as a p-value ([SO:0001685](http://www.sequenceontology.org/browser/current_svn/term/SO:0001685)).",
3510            0, 1, score);
3511      case -1077554975:
3512        /* method */ return new Property("method", "CodeableConcept", "Which method is used to get sequence quality.",
3513            0, 1, method);
3514      case -1048421849:
3515        /* truthTP */ return new Property("truthTP", "decimal",
3516            "True positives, from the perspective of the truth data, i.e. the number of sites in the Truth Call Set for which there are paths through the Query Call Set that are consistent with all of the alleles at this site, and for which there is an accurate genotype call for the event.",
3517            0, 1, truthTP);
3518      case 655102276:
3519        /* queryTP */ return new Property("queryTP", "decimal",
3520            "True positives, from the perspective of the query data, i.e. the number of sites in the Query Call Set for which there are paths through the Truth Call Set that are consistent with all of the alleles at this site, and for which there is an accurate genotype call for the event.",
3521            0, 1, queryTP);
3522      case -1048422285:
3523        /* truthFN */ return new Property("truthFN", "decimal",
3524            "False negatives, i.e. the number of sites in the Truth Call Set for which there is no path through the Query Call Set that is consistent with all of the alleles at this site, or sites for which there is an inaccurate genotype call for the event. Sites with correct variant but incorrect genotype are counted here.",
3525            0, 1, truthFN);
3526      case 655101842:
3527        /* queryFP */ return new Property("queryFP", "decimal",
3528            "False positives, i.e. the number of sites in the Query Call Set for which there is no path through the Truth Call Set that is consistent with this site. Sites with correct variant but incorrect genotype are counted here.",
3529            0, 1, queryFP);
3530      case 3182199:
3531        /* gtFP */ return new Property("gtFP", "decimal",
3532            "The number of false positives where the non-REF alleles in the Truth and Query Call Sets match (i.e. cases where the truth is 1/1 and the query is 0/1 or similar).",
3533            0, 1, gtFP);
3534      case -1376177026:
3535        /* precision */ return new Property("precision", "decimal", "QUERY.TP / (QUERY.TP + QUERY.FP).", 0, 1,
3536            precision);
3537      case -934922479:
3538        /* recall */ return new Property("recall", "decimal", "TRUTH.TP / (TRUTH.TP + TRUTH.FN).", 0, 1, recall);
3539      case -1295082036:
3540        /* fScore */ return new Property("fScore", "decimal",
3541            "Harmonic mean of Recall and Precision, computed as: 2 * precision * recall / (precision + recall).", 0, 1,
3542            fScore);
3543      case 113094:
3544        /* roc */ return new Property("roc", "",
3545            "Receiver Operator Characteristic (ROC) Curve  to give sensitivity/specificity tradeoff.", 0, 1, roc);
3546      default:
3547        return super.getNamedProperty(_hash, _name, _checkValid);
3548      }
3549
3550    }
3551
3552    @Override
3553    public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
3554      switch (hash) {
3555      case 3575610:
3556        /* type */ return this.type == null ? new Base[0] : new Base[] { this.type }; // Enumeration<QualityType>
3557      case -1861227106:
3558        /* standardSequence */ return this.standardSequence == null ? new Base[0]
3559            : new Base[] { this.standardSequence }; // CodeableConcept
3560      case 109757538:
3561        /* start */ return this.start == null ? new Base[0] : new Base[] { this.start }; // IntegerType
3562      case 100571:
3563        /* end */ return this.end == null ? new Base[0] : new Base[] { this.end }; // IntegerType
3564      case 109264530:
3565        /* score */ return this.score == null ? new Base[0] : new Base[] { this.score }; // Quantity
3566      case -1077554975:
3567        /* method */ return this.method == null ? new Base[0] : new Base[] { this.method }; // CodeableConcept
3568      case -1048421849:
3569        /* truthTP */ return this.truthTP == null ? new Base[0] : new Base[] { this.truthTP }; // DecimalType
3570      case 655102276:
3571        /* queryTP */ return this.queryTP == null ? new Base[0] : new Base[] { this.queryTP }; // DecimalType
3572      case -1048422285:
3573        /* truthFN */ return this.truthFN == null ? new Base[0] : new Base[] { this.truthFN }; // DecimalType
3574      case 655101842:
3575        /* queryFP */ return this.queryFP == null ? new Base[0] : new Base[] { this.queryFP }; // DecimalType
3576      case 3182199:
3577        /* gtFP */ return this.gtFP == null ? new Base[0] : new Base[] { this.gtFP }; // DecimalType
3578      case -1376177026:
3579        /* precision */ return this.precision == null ? new Base[0] : new Base[] { this.precision }; // DecimalType
3580      case -934922479:
3581        /* recall */ return this.recall == null ? new Base[0] : new Base[] { this.recall }; // DecimalType
3582      case -1295082036:
3583        /* fScore */ return this.fScore == null ? new Base[0] : new Base[] { this.fScore }; // DecimalType
3584      case 113094:
3585        /* roc */ return this.roc == null ? new Base[0] : new Base[] { this.roc }; // MolecularSequenceQualityRocComponent
3586      default:
3587        return super.getProperty(hash, name, checkValid);
3588      }
3589
3590    }
3591
3592    @Override
3593    public Base setProperty(int hash, String name, Base value) throws FHIRException {
3594      switch (hash) {
3595      case 3575610: // type
3596        value = new QualityTypeEnumFactory().fromType(castToCode(value));
3597        this.type = (Enumeration) value; // Enumeration<QualityType>
3598        return value;
3599      case -1861227106: // standardSequence
3600        this.standardSequence = castToCodeableConcept(value); // CodeableConcept
3601        return value;
3602      case 109757538: // start
3603        this.start = castToInteger(value); // IntegerType
3604        return value;
3605      case 100571: // end
3606        this.end = castToInteger(value); // IntegerType
3607        return value;
3608      case 109264530: // score
3609        this.score = castToQuantity(value); // Quantity
3610        return value;
3611      case -1077554975: // method
3612        this.method = castToCodeableConcept(value); // CodeableConcept
3613        return value;
3614      case -1048421849: // truthTP
3615        this.truthTP = castToDecimal(value); // DecimalType
3616        return value;
3617      case 655102276: // queryTP
3618        this.queryTP = castToDecimal(value); // DecimalType
3619        return value;
3620      case -1048422285: // truthFN
3621        this.truthFN = castToDecimal(value); // DecimalType
3622        return value;
3623      case 655101842: // queryFP
3624        this.queryFP = castToDecimal(value); // DecimalType
3625        return value;
3626      case 3182199: // gtFP
3627        this.gtFP = castToDecimal(value); // DecimalType
3628        return value;
3629      case -1376177026: // precision
3630        this.precision = castToDecimal(value); // DecimalType
3631        return value;
3632      case -934922479: // recall
3633        this.recall = castToDecimal(value); // DecimalType
3634        return value;
3635      case -1295082036: // fScore
3636        this.fScore = castToDecimal(value); // DecimalType
3637        return value;
3638      case 113094: // roc
3639        this.roc = (MolecularSequenceQualityRocComponent) value; // MolecularSequenceQualityRocComponent
3640        return value;
3641      default:
3642        return super.setProperty(hash, name, value);
3643      }
3644
3645    }
3646
3647    @Override
3648    public Base setProperty(String name, Base value) throws FHIRException {
3649      if (name.equals("type")) {
3650        value = new QualityTypeEnumFactory().fromType(castToCode(value));
3651        this.type = (Enumeration) value; // Enumeration<QualityType>
3652      } else if (name.equals("standardSequence")) {
3653        this.standardSequence = castToCodeableConcept(value); // CodeableConcept
3654      } else if (name.equals("start")) {
3655        this.start = castToInteger(value); // IntegerType
3656      } else if (name.equals("end")) {
3657        this.end = castToInteger(value); // IntegerType
3658      } else if (name.equals("score")) {
3659        this.score = castToQuantity(value); // Quantity
3660      } else if (name.equals("method")) {
3661        this.method = castToCodeableConcept(value); // CodeableConcept
3662      } else if (name.equals("truthTP")) {
3663        this.truthTP = castToDecimal(value); // DecimalType
3664      } else if (name.equals("queryTP")) {
3665        this.queryTP = castToDecimal(value); // DecimalType
3666      } else if (name.equals("truthFN")) {
3667        this.truthFN = castToDecimal(value); // DecimalType
3668      } else if (name.equals("queryFP")) {
3669        this.queryFP = castToDecimal(value); // DecimalType
3670      } else if (name.equals("gtFP")) {
3671        this.gtFP = castToDecimal(value); // DecimalType
3672      } else if (name.equals("precision")) {
3673        this.precision = castToDecimal(value); // DecimalType
3674      } else if (name.equals("recall")) {
3675        this.recall = castToDecimal(value); // DecimalType
3676      } else if (name.equals("fScore")) {
3677        this.fScore = castToDecimal(value); // DecimalType
3678      } else if (name.equals("roc")) {
3679        this.roc = (MolecularSequenceQualityRocComponent) value; // MolecularSequenceQualityRocComponent
3680      } else
3681        return super.setProperty(name, value);
3682      return value;
3683    }
3684
3685    @Override
3686    public Base makeProperty(int hash, String name) throws FHIRException {
3687      switch (hash) {
3688      case 3575610:
3689        return getTypeElement();
3690      case -1861227106:
3691        return getStandardSequence();
3692      case 109757538:
3693        return getStartElement();
3694      case 100571:
3695        return getEndElement();
3696      case 109264530:
3697        return getScore();
3698      case -1077554975:
3699        return getMethod();
3700      case -1048421849:
3701        return getTruthTPElement();
3702      case 655102276:
3703        return getQueryTPElement();
3704      case -1048422285:
3705        return getTruthFNElement();
3706      case 655101842:
3707        return getQueryFPElement();
3708      case 3182199:
3709        return getGtFPElement();
3710      case -1376177026:
3711        return getPrecisionElement();
3712      case -934922479:
3713        return getRecallElement();
3714      case -1295082036:
3715        return getFScoreElement();
3716      case 113094:
3717        return getRoc();
3718      default:
3719        return super.makeProperty(hash, name);
3720      }
3721
3722    }
3723
3724    @Override
3725    public String[] getTypesForProperty(int hash, String name) throws FHIRException {
3726      switch (hash) {
3727      case 3575610:
3728        /* type */ return new String[] { "code" };
3729      case -1861227106:
3730        /* standardSequence */ return new String[] { "CodeableConcept" };
3731      case 109757538:
3732        /* start */ return new String[] { "integer" };
3733      case 100571:
3734        /* end */ return new String[] { "integer" };
3735      case 109264530:
3736        /* score */ return new String[] { "Quantity" };
3737      case -1077554975:
3738        /* method */ return new String[] { "CodeableConcept" };
3739      case -1048421849:
3740        /* truthTP */ return new String[] { "decimal" };
3741      case 655102276:
3742        /* queryTP */ return new String[] { "decimal" };
3743      case -1048422285:
3744        /* truthFN */ return new String[] { "decimal" };
3745      case 655101842:
3746        /* queryFP */ return new String[] { "decimal" };
3747      case 3182199:
3748        /* gtFP */ return new String[] { "decimal" };
3749      case -1376177026:
3750        /* precision */ return new String[] { "decimal" };
3751      case -934922479:
3752        /* recall */ return new String[] { "decimal" };
3753      case -1295082036:
3754        /* fScore */ return new String[] { "decimal" };
3755      case 113094:
3756        /* roc */ return new String[] {};
3757      default:
3758        return super.getTypesForProperty(hash, name);
3759      }
3760
3761    }
3762
3763    @Override
3764    public Base addChild(String name) throws FHIRException {
3765      if (name.equals("type")) {
3766        throw new FHIRException("Cannot call addChild on a singleton property MolecularSequence.type");
3767      } else if (name.equals("standardSequence")) {
3768        this.standardSequence = new CodeableConcept();
3769        return this.standardSequence;
3770      } else if (name.equals("start")) {
3771        throw new FHIRException("Cannot call addChild on a singleton property MolecularSequence.start");
3772      } else if (name.equals("end")) {
3773        throw new FHIRException("Cannot call addChild on a singleton property MolecularSequence.end");
3774      } else if (name.equals("score")) {
3775        this.score = new Quantity();
3776        return this.score;
3777      } else if (name.equals("method")) {
3778        this.method = new CodeableConcept();
3779        return this.method;
3780      } else if (name.equals("truthTP")) {
3781        throw new FHIRException("Cannot call addChild on a singleton property MolecularSequence.truthTP");
3782      } else if (name.equals("queryTP")) {
3783        throw new FHIRException("Cannot call addChild on a singleton property MolecularSequence.queryTP");
3784      } else if (name.equals("truthFN")) {
3785        throw new FHIRException("Cannot call addChild on a singleton property MolecularSequence.truthFN");
3786      } else if (name.equals("queryFP")) {
3787        throw new FHIRException("Cannot call addChild on a singleton property MolecularSequence.queryFP");
3788      } else if (name.equals("gtFP")) {
3789        throw new FHIRException("Cannot call addChild on a singleton property MolecularSequence.gtFP");
3790      } else if (name.equals("precision")) {
3791        throw new FHIRException("Cannot call addChild on a singleton property MolecularSequence.precision");
3792      } else if (name.equals("recall")) {
3793        throw new FHIRException("Cannot call addChild on a singleton property MolecularSequence.recall");
3794      } else if (name.equals("fScore")) {
3795        throw new FHIRException("Cannot call addChild on a singleton property MolecularSequence.fScore");
3796      } else if (name.equals("roc")) {
3797        this.roc = new MolecularSequenceQualityRocComponent();
3798        return this.roc;
3799      } else
3800        return super.addChild(name);
3801    }
3802
3803    public MolecularSequenceQualityComponent copy() {
3804      MolecularSequenceQualityComponent dst = new MolecularSequenceQualityComponent();
3805      copyValues(dst);
3806      return dst;
3807    }
3808
3809    public void copyValues(MolecularSequenceQualityComponent dst) {
3810      super.copyValues(dst);
3811      dst.type = type == null ? null : type.copy();
3812      dst.standardSequence = standardSequence == null ? null : standardSequence.copy();
3813      dst.start = start == null ? null : start.copy();
3814      dst.end = end == null ? null : end.copy();
3815      dst.score = score == null ? null : score.copy();
3816      dst.method = method == null ? null : method.copy();
3817      dst.truthTP = truthTP == null ? null : truthTP.copy();
3818      dst.queryTP = queryTP == null ? null : queryTP.copy();
3819      dst.truthFN = truthFN == null ? null : truthFN.copy();
3820      dst.queryFP = queryFP == null ? null : queryFP.copy();
3821      dst.gtFP = gtFP == null ? null : gtFP.copy();
3822      dst.precision = precision == null ? null : precision.copy();
3823      dst.recall = recall == null ? null : recall.copy();
3824      dst.fScore = fScore == null ? null : fScore.copy();
3825      dst.roc = roc == null ? null : roc.copy();
3826    }
3827
3828    @Override
3829    public boolean equalsDeep(Base other_) {
3830      if (!super.equalsDeep(other_))
3831        return false;
3832      if (!(other_ instanceof MolecularSequenceQualityComponent))
3833        return false;
3834      MolecularSequenceQualityComponent o = (MolecularSequenceQualityComponent) other_;
3835      return compareDeep(type, o.type, true) && compareDeep(standardSequence, o.standardSequence, true)
3836          && compareDeep(start, o.start, true) && compareDeep(end, o.end, true) && compareDeep(score, o.score, true)
3837          && compareDeep(method, o.method, true) && compareDeep(truthTP, o.truthTP, true)
3838          && compareDeep(queryTP, o.queryTP, true) && compareDeep(truthFN, o.truthFN, true)
3839          && compareDeep(queryFP, o.queryFP, true) && compareDeep(gtFP, o.gtFP, true)
3840          && compareDeep(precision, o.precision, true) && compareDeep(recall, o.recall, true)
3841          && compareDeep(fScore, o.fScore, true) && compareDeep(roc, o.roc, true);
3842    }
3843
3844    @Override
3845    public boolean equalsShallow(Base other_) {
3846      if (!super.equalsShallow(other_))
3847        return false;
3848      if (!(other_ instanceof MolecularSequenceQualityComponent))
3849        return false;
3850      MolecularSequenceQualityComponent o = (MolecularSequenceQualityComponent) other_;
3851      return compareValues(type, o.type, true) && compareValues(start, o.start, true) && compareValues(end, o.end, true)
3852          && compareValues(truthTP, o.truthTP, true) && compareValues(queryTP, o.queryTP, true)
3853          && compareValues(truthFN, o.truthFN, true) && compareValues(queryFP, o.queryFP, true)
3854          && compareValues(gtFP, o.gtFP, true) && compareValues(precision, o.precision, true)
3855          && compareValues(recall, o.recall, true) && compareValues(fScore, o.fScore, true);
3856    }
3857
3858    public boolean isEmpty() {
3859      return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(type, standardSequence, start, end, score, method,
3860          truthTP, queryTP, truthFN, queryFP, gtFP, precision, recall, fScore, roc);
3861    }
3862
3863    public String fhirType() {
3864      return "MolecularSequence.quality";
3865
3866    }
3867
3868  }
3869
3870  @Block()
3871  public static class MolecularSequenceQualityRocComponent extends BackboneElement implements IBaseBackboneElement {
3872    /**
3873     * Invidual data point representing the GQ (genotype quality) score threshold.
3874     */
3875    @Child(name = "score", type = {
3876        IntegerType.class }, order = 1, min = 0, max = Child.MAX_UNLIMITED, modifier = false, summary = true)
3877    @Description(shortDefinition = "Genotype quality score", formalDefinition = "Invidual data point representing the GQ (genotype quality) score threshold.")
3878    protected List<IntegerType> score;
3879
3880    /**
3881     * The number of true positives if the GQ score threshold was set to "score"
3882     * field value.
3883     */
3884    @Child(name = "numTP", type = {
3885        IntegerType.class }, order = 2, min = 0, max = Child.MAX_UNLIMITED, modifier = false, summary = true)
3886    @Description(shortDefinition = "Roc score true positive numbers", formalDefinition = "The number of true positives if the GQ score threshold was set to \"score\" field value.")
3887    protected List<IntegerType> numTP;
3888
3889    /**
3890     * The number of false positives if the GQ score threshold was set to "score"
3891     * field value.
3892     */
3893    @Child(name = "numFP", type = {
3894        IntegerType.class }, order = 3, min = 0, max = Child.MAX_UNLIMITED, modifier = false, summary = true)
3895    @Description(shortDefinition = "Roc score false positive numbers", formalDefinition = "The number of false positives if the GQ score threshold was set to \"score\" field value.")
3896    protected List<IntegerType> numFP;
3897
3898    /**
3899     * The number of false negatives if the GQ score threshold was set to "score"
3900     * field value.
3901     */
3902    @Child(name = "numFN", type = {
3903        IntegerType.class }, order = 4, min = 0, max = Child.MAX_UNLIMITED, modifier = false, summary = true)
3904    @Description(shortDefinition = "Roc score false negative numbers", formalDefinition = "The number of false negatives if the GQ score threshold was set to \"score\" field value.")
3905    protected List<IntegerType> numFN;
3906
3907    /**
3908     * Calculated precision if the GQ score threshold was set to "score" field
3909     * value.
3910     */
3911    @Child(name = "precision", type = {
3912        DecimalType.class }, order = 5, min = 0, max = Child.MAX_UNLIMITED, modifier = false, summary = true)
3913    @Description(shortDefinition = "Precision of the GQ score", formalDefinition = "Calculated precision if the GQ score threshold was set to \"score\" field value.")
3914    protected List<DecimalType> precision;
3915
3916    /**
3917     * Calculated sensitivity if the GQ score threshold was set to "score" field
3918     * value.
3919     */
3920    @Child(name = "sensitivity", type = {
3921        DecimalType.class }, order = 6, min = 0, max = Child.MAX_UNLIMITED, modifier = false, summary = true)
3922    @Description(shortDefinition = "Sensitivity of the GQ score", formalDefinition = "Calculated sensitivity if the GQ score threshold was set to \"score\" field value.")
3923    protected List<DecimalType> sensitivity;
3924
3925    /**
3926     * Calculated fScore if the GQ score threshold was set to "score" field value.
3927     */
3928    @Child(name = "fMeasure", type = {
3929        DecimalType.class }, order = 7, min = 0, max = Child.MAX_UNLIMITED, modifier = false, summary = true)
3930    @Description(shortDefinition = "FScore of the GQ score", formalDefinition = "Calculated fScore if the GQ score threshold was set to \"score\" field value.")
3931    protected List<DecimalType> fMeasure;
3932
3933    private static final long serialVersionUID = 1923392132L;
3934
3935    /**
3936     * Constructor
3937     */
3938    public MolecularSequenceQualityRocComponent() {
3939      super();
3940    }
3941
3942    /**
3943     * @return {@link #score} (Invidual data point representing the GQ (genotype
3944     *         quality) score threshold.)
3945     */
3946    public List<IntegerType> getScore() {
3947      if (this.score == null)
3948        this.score = new ArrayList<IntegerType>();
3949      return this.score;
3950    }
3951
3952    /**
3953     * @return Returns a reference to <code>this</code> for easy method chaining
3954     */
3955    public MolecularSequenceQualityRocComponent setScore(List<IntegerType> theScore) {
3956      this.score = theScore;
3957      return this;
3958    }
3959
3960    public boolean hasScore() {
3961      if (this.score == null)
3962        return false;
3963      for (IntegerType item : this.score)
3964        if (!item.isEmpty())
3965          return true;
3966      return false;
3967    }
3968
3969    /**
3970     * @return {@link #score} (Invidual data point representing the GQ (genotype
3971     *         quality) score threshold.)
3972     */
3973    public IntegerType addScoreElement() {// 2
3974      IntegerType t = new IntegerType();
3975      if (this.score == null)
3976        this.score = new ArrayList<IntegerType>();
3977      this.score.add(t);
3978      return t;
3979    }
3980
3981    /**
3982     * @param value {@link #score} (Invidual data point representing the GQ
3983     *              (genotype quality) score threshold.)
3984     */
3985    public MolecularSequenceQualityRocComponent addScore(int value) { // 1
3986      IntegerType t = new IntegerType();
3987      t.setValue(value);
3988      if (this.score == null)
3989        this.score = new ArrayList<IntegerType>();
3990      this.score.add(t);
3991      return this;
3992    }
3993
3994    /**
3995     * @param value {@link #score} (Invidual data point representing the GQ
3996     *              (genotype quality) score threshold.)
3997     */
3998    public boolean hasScore(int value) {
3999      if (this.score == null)
4000        return false;
4001      for (IntegerType v : this.score)
4002        if (v.getValue().equals(value)) // integer
4003          return true;
4004      return false;
4005    }
4006
4007    /**
4008     * @return {@link #numTP} (The number of true positives if the GQ score
4009     *         threshold was set to "score" field value.)
4010     */
4011    public List<IntegerType> getNumTP() {
4012      if (this.numTP == null)
4013        this.numTP = new ArrayList<IntegerType>();
4014      return this.numTP;
4015    }
4016
4017    /**
4018     * @return Returns a reference to <code>this</code> for easy method chaining
4019     */
4020    public MolecularSequenceQualityRocComponent setNumTP(List<IntegerType> theNumTP) {
4021      this.numTP = theNumTP;
4022      return this;
4023    }
4024
4025    public boolean hasNumTP() {
4026      if (this.numTP == null)
4027        return false;
4028      for (IntegerType item : this.numTP)
4029        if (!item.isEmpty())
4030          return true;
4031      return false;
4032    }
4033
4034    /**
4035     * @return {@link #numTP} (The number of true positives if the GQ score
4036     *         threshold was set to "score" field value.)
4037     */
4038    public IntegerType addNumTPElement() {// 2
4039      IntegerType t = new IntegerType();
4040      if (this.numTP == null)
4041        this.numTP = new ArrayList<IntegerType>();
4042      this.numTP.add(t);
4043      return t;
4044    }
4045
4046    /**
4047     * @param value {@link #numTP} (The number of true positives if the GQ score
4048     *              threshold was set to "score" field value.)
4049     */
4050    public MolecularSequenceQualityRocComponent addNumTP(int value) { // 1
4051      IntegerType t = new IntegerType();
4052      t.setValue(value);
4053      if (this.numTP == null)
4054        this.numTP = new ArrayList<IntegerType>();
4055      this.numTP.add(t);
4056      return this;
4057    }
4058
4059    /**
4060     * @param value {@link #numTP} (The number of true positives if the GQ score
4061     *              threshold was set to "score" field value.)
4062     */
4063    public boolean hasNumTP(int value) {
4064      if (this.numTP == null)
4065        return false;
4066      for (IntegerType v : this.numTP)
4067        if (v.getValue().equals(value)) // integer
4068          return true;
4069      return false;
4070    }
4071
4072    /**
4073     * @return {@link #numFP} (The number of false positives if the GQ score
4074     *         threshold was set to "score" field value.)
4075     */
4076    public List<IntegerType> getNumFP() {
4077      if (this.numFP == null)
4078        this.numFP = new ArrayList<IntegerType>();
4079      return this.numFP;
4080    }
4081
4082    /**
4083     * @return Returns a reference to <code>this</code> for easy method chaining
4084     */
4085    public MolecularSequenceQualityRocComponent setNumFP(List<IntegerType> theNumFP) {
4086      this.numFP = theNumFP;
4087      return this;
4088    }
4089
4090    public boolean hasNumFP() {
4091      if (this.numFP == null)
4092        return false;
4093      for (IntegerType item : this.numFP)
4094        if (!item.isEmpty())
4095          return true;
4096      return false;
4097    }
4098
4099    /**
4100     * @return {@link #numFP} (The number of false positives if the GQ score
4101     *         threshold was set to "score" field value.)
4102     */
4103    public IntegerType addNumFPElement() {// 2
4104      IntegerType t = new IntegerType();
4105      if (this.numFP == null)
4106        this.numFP = new ArrayList<IntegerType>();
4107      this.numFP.add(t);
4108      return t;
4109    }
4110
4111    /**
4112     * @param value {@link #numFP} (The number of false positives if the GQ score
4113     *              threshold was set to "score" field value.)
4114     */
4115    public MolecularSequenceQualityRocComponent addNumFP(int value) { // 1
4116      IntegerType t = new IntegerType();
4117      t.setValue(value);
4118      if (this.numFP == null)
4119        this.numFP = new ArrayList<IntegerType>();
4120      this.numFP.add(t);
4121      return this;
4122    }
4123
4124    /**
4125     * @param value {@link #numFP} (The number of false positives if the GQ score
4126     *              threshold was set to "score" field value.)
4127     */
4128    public boolean hasNumFP(int value) {
4129      if (this.numFP == null)
4130        return false;
4131      for (IntegerType v : this.numFP)
4132        if (v.getValue().equals(value)) // integer
4133          return true;
4134      return false;
4135    }
4136
4137    /**
4138     * @return {@link #numFN} (The number of false negatives if the GQ score
4139     *         threshold was set to "score" field value.)
4140     */
4141    public List<IntegerType> getNumFN() {
4142      if (this.numFN == null)
4143        this.numFN = new ArrayList<IntegerType>();
4144      return this.numFN;
4145    }
4146
4147    /**
4148     * @return Returns a reference to <code>this</code> for easy method chaining
4149     */
4150    public MolecularSequenceQualityRocComponent setNumFN(List<IntegerType> theNumFN) {
4151      this.numFN = theNumFN;
4152      return this;
4153    }
4154
4155    public boolean hasNumFN() {
4156      if (this.numFN == null)
4157        return false;
4158      for (IntegerType item : this.numFN)
4159        if (!item.isEmpty())
4160          return true;
4161      return false;
4162    }
4163
4164    /**
4165     * @return {@link #numFN} (The number of false negatives if the GQ score
4166     *         threshold was set to "score" field value.)
4167     */
4168    public IntegerType addNumFNElement() {// 2
4169      IntegerType t = new IntegerType();
4170      if (this.numFN == null)
4171        this.numFN = new ArrayList<IntegerType>();
4172      this.numFN.add(t);
4173      return t;
4174    }
4175
4176    /**
4177     * @param value {@link #numFN} (The number of false negatives if the GQ score
4178     *              threshold was set to "score" field value.)
4179     */
4180    public MolecularSequenceQualityRocComponent addNumFN(int value) { // 1
4181      IntegerType t = new IntegerType();
4182      t.setValue(value);
4183      if (this.numFN == null)
4184        this.numFN = new ArrayList<IntegerType>();
4185      this.numFN.add(t);
4186      return this;
4187    }
4188
4189    /**
4190     * @param value {@link #numFN} (The number of false negatives if the GQ score
4191     *              threshold was set to "score" field value.)
4192     */
4193    public boolean hasNumFN(int value) {
4194      if (this.numFN == null)
4195        return false;
4196      for (IntegerType v : this.numFN)
4197        if (v.getValue().equals(value)) // integer
4198          return true;
4199      return false;
4200    }
4201
4202    /**
4203     * @return {@link #precision} (Calculated precision if the GQ score threshold
4204     *         was set to "score" field value.)
4205     */
4206    public List<DecimalType> getPrecision() {
4207      if (this.precision == null)
4208        this.precision = new ArrayList<DecimalType>();
4209      return this.precision;
4210    }
4211
4212    /**
4213     * @return Returns a reference to <code>this</code> for easy method chaining
4214     */
4215    public MolecularSequenceQualityRocComponent setPrecision(List<DecimalType> thePrecision) {
4216      this.precision = thePrecision;
4217      return this;
4218    }
4219
4220    public boolean hasPrecision() {
4221      if (this.precision == null)
4222        return false;
4223      for (DecimalType item : this.precision)
4224        if (!item.isEmpty())
4225          return true;
4226      return false;
4227    }
4228
4229    /**
4230     * @return {@link #precision} (Calculated precision if the GQ score threshold
4231     *         was set to "score" field value.)
4232     */
4233    public DecimalType addPrecisionElement() {// 2
4234      DecimalType t = new DecimalType();
4235      if (this.precision == null)
4236        this.precision = new ArrayList<DecimalType>();
4237      this.precision.add(t);
4238      return t;
4239    }
4240
4241    /**
4242     * @param value {@link #precision} (Calculated precision if the GQ score
4243     *              threshold was set to "score" field value.)
4244     */
4245    public MolecularSequenceQualityRocComponent addPrecision(BigDecimal value) { // 1
4246      DecimalType t = new DecimalType();
4247      t.setValue(value);
4248      if (this.precision == null)
4249        this.precision = new ArrayList<DecimalType>();
4250      this.precision.add(t);
4251      return this;
4252    }
4253
4254    /**
4255     * @param value {@link #precision} (Calculated precision if the GQ score
4256     *              threshold was set to "score" field value.)
4257     */
4258    public boolean hasPrecision(BigDecimal value) {
4259      if (this.precision == null)
4260        return false;
4261      for (DecimalType v : this.precision)
4262        if (v.getValue().equals(value)) // decimal
4263          return true;
4264      return false;
4265    }
4266
4267    /**
4268     * @return {@link #sensitivity} (Calculated sensitivity if the GQ score
4269     *         threshold was set to "score" field value.)
4270     */
4271    public List<DecimalType> getSensitivity() {
4272      if (this.sensitivity == null)
4273        this.sensitivity = new ArrayList<DecimalType>();
4274      return this.sensitivity;
4275    }
4276
4277    /**
4278     * @return Returns a reference to <code>this</code> for easy method chaining
4279     */
4280    public MolecularSequenceQualityRocComponent setSensitivity(List<DecimalType> theSensitivity) {
4281      this.sensitivity = theSensitivity;
4282      return this;
4283    }
4284
4285    public boolean hasSensitivity() {
4286      if (this.sensitivity == null)
4287        return false;
4288      for (DecimalType item : this.sensitivity)
4289        if (!item.isEmpty())
4290          return true;
4291      return false;
4292    }
4293
4294    /**
4295     * @return {@link #sensitivity} (Calculated sensitivity if the GQ score
4296     *         threshold was set to "score" field value.)
4297     */
4298    public DecimalType addSensitivityElement() {// 2
4299      DecimalType t = new DecimalType();
4300      if (this.sensitivity == null)
4301        this.sensitivity = new ArrayList<DecimalType>();
4302      this.sensitivity.add(t);
4303      return t;
4304    }
4305
4306    /**
4307     * @param value {@link #sensitivity} (Calculated sensitivity if the GQ score
4308     *              threshold was set to "score" field value.)
4309     */
4310    public MolecularSequenceQualityRocComponent addSensitivity(BigDecimal value) { // 1
4311      DecimalType t = new DecimalType();
4312      t.setValue(value);
4313      if (this.sensitivity == null)
4314        this.sensitivity = new ArrayList<DecimalType>();
4315      this.sensitivity.add(t);
4316      return this;
4317    }
4318
4319    /**
4320     * @param value {@link #sensitivity} (Calculated sensitivity if the GQ score
4321     *              threshold was set to "score" field value.)
4322     */
4323    public boolean hasSensitivity(BigDecimal value) {
4324      if (this.sensitivity == null)
4325        return false;
4326      for (DecimalType v : this.sensitivity)
4327        if (v.getValue().equals(value)) // decimal
4328          return true;
4329      return false;
4330    }
4331
4332    /**
4333     * @return {@link #fMeasure} (Calculated fScore if the GQ score threshold was
4334     *         set to "score" field value.)
4335     */
4336    public List<DecimalType> getFMeasure() {
4337      if (this.fMeasure == null)
4338        this.fMeasure = new ArrayList<DecimalType>();
4339      return this.fMeasure;
4340    }
4341
4342    /**
4343     * @return Returns a reference to <code>this</code> for easy method chaining
4344     */
4345    public MolecularSequenceQualityRocComponent setFMeasure(List<DecimalType> theFMeasure) {
4346      this.fMeasure = theFMeasure;
4347      return this;
4348    }
4349
4350    public boolean hasFMeasure() {
4351      if (this.fMeasure == null)
4352        return false;
4353      for (DecimalType item : this.fMeasure)
4354        if (!item.isEmpty())
4355          return true;
4356      return false;
4357    }
4358
4359    /**
4360     * @return {@link #fMeasure} (Calculated fScore if the GQ score threshold was
4361     *         set to "score" field value.)
4362     */
4363    public DecimalType addFMeasureElement() {// 2
4364      DecimalType t = new DecimalType();
4365      if (this.fMeasure == null)
4366        this.fMeasure = new ArrayList<DecimalType>();
4367      this.fMeasure.add(t);
4368      return t;
4369    }
4370
4371    /**
4372     * @param value {@link #fMeasure} (Calculated fScore if the GQ score threshold
4373     *              was set to "score" field value.)
4374     */
4375    public MolecularSequenceQualityRocComponent addFMeasure(BigDecimal value) { // 1
4376      DecimalType t = new DecimalType();
4377      t.setValue(value);
4378      if (this.fMeasure == null)
4379        this.fMeasure = new ArrayList<DecimalType>();
4380      this.fMeasure.add(t);
4381      return this;
4382    }
4383
4384    /**
4385     * @param value {@link #fMeasure} (Calculated fScore if the GQ score threshold
4386     *              was set to "score" field value.)
4387     */
4388    public boolean hasFMeasure(BigDecimal value) {
4389      if (this.fMeasure == null)
4390        return false;
4391      for (DecimalType v : this.fMeasure)
4392        if (v.getValue().equals(value)) // decimal
4393          return true;
4394      return false;
4395    }
4396
4397    protected void listChildren(List<Property> children) {
4398      super.listChildren(children);
4399      children.add(new Property("score", "integer",
4400          "Invidual data point representing the GQ (genotype quality) score threshold.", 0, java.lang.Integer.MAX_VALUE,
4401          score));
4402      children.add(new Property("numTP", "integer",
4403          "The number of true positives if the GQ score threshold was set to \"score\" field value.", 0,
4404          java.lang.Integer.MAX_VALUE, numTP));
4405      children.add(new Property("numFP", "integer",
4406          "The number of false positives if the GQ score threshold was set to \"score\" field value.", 0,
4407          java.lang.Integer.MAX_VALUE, numFP));
4408      children.add(new Property("numFN", "integer",
4409          "The number of false negatives if the GQ score threshold was set to \"score\" field value.", 0,
4410          java.lang.Integer.MAX_VALUE, numFN));
4411      children.add(new Property("precision", "decimal",
4412          "Calculated precision if the GQ score threshold was set to \"score\" field value.", 0,
4413          java.lang.Integer.MAX_VALUE, precision));
4414      children.add(new Property("sensitivity", "decimal",
4415          "Calculated sensitivity if the GQ score threshold was set to \"score\" field value.", 0,
4416          java.lang.Integer.MAX_VALUE, sensitivity));
4417      children.add(new Property("fMeasure", "decimal",
4418          "Calculated fScore if the GQ score threshold was set to \"score\" field value.", 0,
4419          java.lang.Integer.MAX_VALUE, fMeasure));
4420    }
4421
4422    @Override
4423    public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
4424      switch (_hash) {
4425      case 109264530:
4426        /* score */ return new Property("score", "integer",
4427            "Invidual data point representing the GQ (genotype quality) score threshold.", 0,
4428            java.lang.Integer.MAX_VALUE, score);
4429      case 105180290:
4430        /* numTP */ return new Property("numTP", "integer",
4431            "The number of true positives if the GQ score threshold was set to \"score\" field value.", 0,
4432            java.lang.Integer.MAX_VALUE, numTP);
4433      case 105179856:
4434        /* numFP */ return new Property("numFP", "integer",
4435            "The number of false positives if the GQ score threshold was set to \"score\" field value.", 0,
4436            java.lang.Integer.MAX_VALUE, numFP);
4437      case 105179854:
4438        /* numFN */ return new Property("numFN", "integer",
4439            "The number of false negatives if the GQ score threshold was set to \"score\" field value.", 0,
4440            java.lang.Integer.MAX_VALUE, numFN);
4441      case -1376177026:
4442        /* precision */ return new Property("precision", "decimal",
4443            "Calculated precision if the GQ score threshold was set to \"score\" field value.", 0,
4444            java.lang.Integer.MAX_VALUE, precision);
4445      case 564403871:
4446        /* sensitivity */ return new Property("sensitivity", "decimal",
4447            "Calculated sensitivity if the GQ score threshold was set to \"score\" field value.", 0,
4448            java.lang.Integer.MAX_VALUE, sensitivity);
4449      case -18997736:
4450        /* fMeasure */ return new Property("fMeasure", "decimal",
4451            "Calculated fScore if the GQ score threshold was set to \"score\" field value.", 0,
4452            java.lang.Integer.MAX_VALUE, fMeasure);
4453      default:
4454        return super.getNamedProperty(_hash, _name, _checkValid);
4455      }
4456
4457    }
4458
4459    @Override
4460    public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
4461      switch (hash) {
4462      case 109264530:
4463        /* score */ return this.score == null ? new Base[0] : this.score.toArray(new Base[this.score.size()]); // IntegerType
4464      case 105180290:
4465        /* numTP */ return this.numTP == null ? new Base[0] : this.numTP.toArray(new Base[this.numTP.size()]); // IntegerType
4466      case 105179856:
4467        /* numFP */ return this.numFP == null ? new Base[0] : this.numFP.toArray(new Base[this.numFP.size()]); // IntegerType
4468      case 105179854:
4469        /* numFN */ return this.numFN == null ? new Base[0] : this.numFN.toArray(new Base[this.numFN.size()]); // IntegerType
4470      case -1376177026:
4471        /* precision */ return this.precision == null ? new Base[0]
4472            : this.precision.toArray(new Base[this.precision.size()]); // DecimalType
4473      case 564403871:
4474        /* sensitivity */ return this.sensitivity == null ? new Base[0]
4475            : this.sensitivity.toArray(new Base[this.sensitivity.size()]); // DecimalType
4476      case -18997736:
4477        /* fMeasure */ return this.fMeasure == null ? new Base[0]
4478            : this.fMeasure.toArray(new Base[this.fMeasure.size()]); // DecimalType
4479      default:
4480        return super.getProperty(hash, name, checkValid);
4481      }
4482
4483    }
4484
4485    @Override
4486    public Base setProperty(int hash, String name, Base value) throws FHIRException {
4487      switch (hash) {
4488      case 109264530: // score
4489        this.getScore().add(castToInteger(value)); // IntegerType
4490        return value;
4491      case 105180290: // numTP
4492        this.getNumTP().add(castToInteger(value)); // IntegerType
4493        return value;
4494      case 105179856: // numFP
4495        this.getNumFP().add(castToInteger(value)); // IntegerType
4496        return value;
4497      case 105179854: // numFN
4498        this.getNumFN().add(castToInteger(value)); // IntegerType
4499        return value;
4500      case -1376177026: // precision
4501        this.getPrecision().add(castToDecimal(value)); // DecimalType
4502        return value;
4503      case 564403871: // sensitivity
4504        this.getSensitivity().add(castToDecimal(value)); // DecimalType
4505        return value;
4506      case -18997736: // fMeasure
4507        this.getFMeasure().add(castToDecimal(value)); // DecimalType
4508        return value;
4509      default:
4510        return super.setProperty(hash, name, value);
4511      }
4512
4513    }
4514
4515    @Override
4516    public Base setProperty(String name, Base value) throws FHIRException {
4517      if (name.equals("score")) {
4518        this.getScore().add(castToInteger(value));
4519      } else if (name.equals("numTP")) {
4520        this.getNumTP().add(castToInteger(value));
4521      } else if (name.equals("numFP")) {
4522        this.getNumFP().add(castToInteger(value));
4523      } else if (name.equals("numFN")) {
4524        this.getNumFN().add(castToInteger(value));
4525      } else if (name.equals("precision")) {
4526        this.getPrecision().add(castToDecimal(value));
4527      } else if (name.equals("sensitivity")) {
4528        this.getSensitivity().add(castToDecimal(value));
4529      } else if (name.equals("fMeasure")) {
4530        this.getFMeasure().add(castToDecimal(value));
4531      } else
4532        return super.setProperty(name, value);
4533      return value;
4534    }
4535
4536    @Override
4537    public Base makeProperty(int hash, String name) throws FHIRException {
4538      switch (hash) {
4539      case 109264530:
4540        return addScoreElement();
4541      case 105180290:
4542        return addNumTPElement();
4543      case 105179856:
4544        return addNumFPElement();
4545      case 105179854:
4546        return addNumFNElement();
4547      case -1376177026:
4548        return addPrecisionElement();
4549      case 564403871:
4550        return addSensitivityElement();
4551      case -18997736:
4552        return addFMeasureElement();
4553      default:
4554        return super.makeProperty(hash, name);
4555      }
4556
4557    }
4558
4559    @Override
4560    public String[] getTypesForProperty(int hash, String name) throws FHIRException {
4561      switch (hash) {
4562      case 109264530:
4563        /* score */ return new String[] { "integer" };
4564      case 105180290:
4565        /* numTP */ return new String[] { "integer" };
4566      case 105179856:
4567        /* numFP */ return new String[] { "integer" };
4568      case 105179854:
4569        /* numFN */ return new String[] { "integer" };
4570      case -1376177026:
4571        /* precision */ return new String[] { "decimal" };
4572      case 564403871:
4573        /* sensitivity */ return new String[] { "decimal" };
4574      case -18997736:
4575        /* fMeasure */ return new String[] { "decimal" };
4576      default:
4577        return super.getTypesForProperty(hash, name);
4578      }
4579
4580    }
4581
4582    @Override
4583    public Base addChild(String name) throws FHIRException {
4584      if (name.equals("score")) {
4585        throw new FHIRException("Cannot call addChild on a singleton property MolecularSequence.score");
4586      } else if (name.equals("numTP")) {
4587        throw new FHIRException("Cannot call addChild on a singleton property MolecularSequence.numTP");
4588      } else if (name.equals("numFP")) {
4589        throw new FHIRException("Cannot call addChild on a singleton property MolecularSequence.numFP");
4590      } else if (name.equals("numFN")) {
4591        throw new FHIRException("Cannot call addChild on a singleton property MolecularSequence.numFN");
4592      } else if (name.equals("precision")) {
4593        throw new FHIRException("Cannot call addChild on a singleton property MolecularSequence.precision");
4594      } else if (name.equals("sensitivity")) {
4595        throw new FHIRException("Cannot call addChild on a singleton property MolecularSequence.sensitivity");
4596      } else if (name.equals("fMeasure")) {
4597        throw new FHIRException("Cannot call addChild on a singleton property MolecularSequence.fMeasure");
4598      } else
4599        return super.addChild(name);
4600    }
4601
4602    public MolecularSequenceQualityRocComponent copy() {
4603      MolecularSequenceQualityRocComponent dst = new MolecularSequenceQualityRocComponent();
4604      copyValues(dst);
4605      return dst;
4606    }
4607
4608    public void copyValues(MolecularSequenceQualityRocComponent dst) {
4609      super.copyValues(dst);
4610      if (score != null) {
4611        dst.score = new ArrayList<IntegerType>();
4612        for (IntegerType i : score)
4613          dst.score.add(i.copy());
4614      }
4615      ;
4616      if (numTP != null) {
4617        dst.numTP = new ArrayList<IntegerType>();
4618        for (IntegerType i : numTP)
4619          dst.numTP.add(i.copy());
4620      }
4621      ;
4622      if (numFP != null) {
4623        dst.numFP = new ArrayList<IntegerType>();
4624        for (IntegerType i : numFP)
4625          dst.numFP.add(i.copy());
4626      }
4627      ;
4628      if (numFN != null) {
4629        dst.numFN = new ArrayList<IntegerType>();
4630        for (IntegerType i : numFN)
4631          dst.numFN.add(i.copy());
4632      }
4633      ;
4634      if (precision != null) {
4635        dst.precision = new ArrayList<DecimalType>();
4636        for (DecimalType i : precision)
4637          dst.precision.add(i.copy());
4638      }
4639      ;
4640      if (sensitivity != null) {
4641        dst.sensitivity = new ArrayList<DecimalType>();
4642        for (DecimalType i : sensitivity)
4643          dst.sensitivity.add(i.copy());
4644      }
4645      ;
4646      if (fMeasure != null) {
4647        dst.fMeasure = new ArrayList<DecimalType>();
4648        for (DecimalType i : fMeasure)
4649          dst.fMeasure.add(i.copy());
4650      }
4651      ;
4652    }
4653
4654    @Override
4655    public boolean equalsDeep(Base other_) {
4656      if (!super.equalsDeep(other_))
4657        return false;
4658      if (!(other_ instanceof MolecularSequenceQualityRocComponent))
4659        return false;
4660      MolecularSequenceQualityRocComponent o = (MolecularSequenceQualityRocComponent) other_;
4661      return compareDeep(score, o.score, true) && compareDeep(numTP, o.numTP, true) && compareDeep(numFP, o.numFP, true)
4662          && compareDeep(numFN, o.numFN, true) && compareDeep(precision, o.precision, true)
4663          && compareDeep(sensitivity, o.sensitivity, true) && compareDeep(fMeasure, o.fMeasure, true);
4664    }
4665
4666    @Override
4667    public boolean equalsShallow(Base other_) {
4668      if (!super.equalsShallow(other_))
4669        return false;
4670      if (!(other_ instanceof MolecularSequenceQualityRocComponent))
4671        return false;
4672      MolecularSequenceQualityRocComponent o = (MolecularSequenceQualityRocComponent) other_;
4673      return compareValues(score, o.score, true) && compareValues(numTP, o.numTP, true)
4674          && compareValues(numFP, o.numFP, true) && compareValues(numFN, o.numFN, true)
4675          && compareValues(precision, o.precision, true) && compareValues(sensitivity, o.sensitivity, true)
4676          && compareValues(fMeasure, o.fMeasure, true);
4677    }
4678
4679    public boolean isEmpty() {
4680      return super.isEmpty()
4681          && ca.uhn.fhir.util.ElementUtil.isEmpty(score, numTP, numFP, numFN, precision, sensitivity, fMeasure);
4682    }
4683
4684    public String fhirType() {
4685      return "MolecularSequence.quality.roc";
4686
4687    }
4688
4689  }
4690
4691  @Block()
4692  public static class MolecularSequenceRepositoryComponent extends BackboneElement implements IBaseBackboneElement {
4693    /**
4694     * Click and see / RESTful API / Need login to see / RESTful API with
4695     * authentication / Other ways to see resource.
4696     */
4697    @Child(name = "type", type = { CodeType.class }, order = 1, min = 1, max = 1, modifier = false, summary = true)
4698    @Description(shortDefinition = "directlink | openapi | login | oauth | other", formalDefinition = "Click and see / RESTful API / Need login to see / RESTful API with authentication / Other ways to see resource.")
4699    @ca.uhn.fhir.model.api.annotation.Binding(valueSet = "http://hl7.org/fhir/ValueSet/repository-type")
4700    protected Enumeration<RepositoryType> type;
4701
4702    /**
4703     * URI of an external repository which contains further details about the
4704     * genetics data.
4705     */
4706    @Child(name = "url", type = { UriType.class }, order = 2, min = 0, max = 1, modifier = false, summary = true)
4707    @Description(shortDefinition = "URI of the repository", formalDefinition = "URI of an external repository which contains further details about the genetics data.")
4708    protected UriType url;
4709
4710    /**
4711     * URI of an external repository which contains further details about the
4712     * genetics data.
4713     */
4714    @Child(name = "name", type = { StringType.class }, order = 3, min = 0, max = 1, modifier = false, summary = true)
4715    @Description(shortDefinition = "Repository's name", formalDefinition = "URI of an external repository which contains further details about the genetics data.")
4716    protected StringType name;
4717
4718    /**
4719     * Id of the variant in this external repository. The server will understand how
4720     * to use this id to call for more info about datasets in external repository.
4721     */
4722    @Child(name = "datasetId", type = {
4723        StringType.class }, order = 4, min = 0, max = 1, modifier = false, summary = true)
4724    @Description(shortDefinition = "Id of the dataset that used to call for dataset in repository", formalDefinition = "Id of the variant in this external repository. The server will understand how to use this id to call for more info about datasets in external repository.")
4725    protected StringType datasetId;
4726
4727    /**
4728     * Id of the variantset in this external repository. The server will understand
4729     * how to use this id to call for more info about variantsets in external
4730     * repository.
4731     */
4732    @Child(name = "variantsetId", type = {
4733        StringType.class }, order = 5, min = 0, max = 1, modifier = false, summary = true)
4734    @Description(shortDefinition = "Id of the variantset that used to call for variantset in repository", formalDefinition = "Id of the variantset in this external repository. The server will understand how to use this id to call for more info about variantsets in external repository.")
4735    protected StringType variantsetId;
4736
4737    /**
4738     * Id of the read in this external repository.
4739     */
4740    @Child(name = "readsetId", type = {
4741        StringType.class }, order = 6, min = 0, max = 1, modifier = false, summary = true)
4742    @Description(shortDefinition = "Id of the read", formalDefinition = "Id of the read in this external repository.")
4743    protected StringType readsetId;
4744
4745    private static final long serialVersionUID = -899243265L;
4746
4747    /**
4748     * Constructor
4749     */
4750    public MolecularSequenceRepositoryComponent() {
4751      super();
4752    }
4753
4754    /**
4755     * Constructor
4756     */
4757    public MolecularSequenceRepositoryComponent(Enumeration<RepositoryType> type) {
4758      super();
4759      this.type = type;
4760    }
4761
4762    /**
4763     * @return {@link #type} (Click and see / RESTful API / Need login to see /
4764     *         RESTful API with authentication / Other ways to see resource.). This
4765     *         is the underlying object with id, value and extensions. The accessor
4766     *         "getType" gives direct access to the value
4767     */
4768    public Enumeration<RepositoryType> getTypeElement() {
4769      if (this.type == null)
4770        if (Configuration.errorOnAutoCreate())
4771          throw new Error("Attempt to auto-create MolecularSequenceRepositoryComponent.type");
4772        else if (Configuration.doAutoCreate())
4773          this.type = new Enumeration<RepositoryType>(new RepositoryTypeEnumFactory()); // bb
4774      return this.type;
4775    }
4776
4777    public boolean hasTypeElement() {
4778      return this.type != null && !this.type.isEmpty();
4779    }
4780
4781    public boolean hasType() {
4782      return this.type != null && !this.type.isEmpty();
4783    }
4784
4785    /**
4786     * @param value {@link #type} (Click and see / RESTful API / Need login to see /
4787     *              RESTful API with authentication / Other ways to see resource.).
4788     *              This is the underlying object with id, value and extensions. The
4789     *              accessor "getType" gives direct access to the value
4790     */
4791    public MolecularSequenceRepositoryComponent setTypeElement(Enumeration<RepositoryType> value) {
4792      this.type = value;
4793      return this;
4794    }
4795
4796    /**
4797     * @return Click and see / RESTful API / Need login to see / RESTful API with
4798     *         authentication / Other ways to see resource.
4799     */
4800    public RepositoryType getType() {
4801      return this.type == null ? null : this.type.getValue();
4802    }
4803
4804    /**
4805     * @param value Click and see / RESTful API / Need login to see / RESTful API
4806     *              with authentication / Other ways to see resource.
4807     */
4808    public MolecularSequenceRepositoryComponent setType(RepositoryType value) {
4809      if (this.type == null)
4810        this.type = new Enumeration<RepositoryType>(new RepositoryTypeEnumFactory());
4811      this.type.setValue(value);
4812      return this;
4813    }
4814
4815    /**
4816     * @return {@link #url} (URI of an external repository which contains further
4817     *         details about the genetics data.). This is the underlying object with
4818     *         id, value and extensions. The accessor "getUrl" gives direct access
4819     *         to the value
4820     */
4821    public UriType getUrlElement() {
4822      if (this.url == null)
4823        if (Configuration.errorOnAutoCreate())
4824          throw new Error("Attempt to auto-create MolecularSequenceRepositoryComponent.url");
4825        else if (Configuration.doAutoCreate())
4826          this.url = new UriType(); // bb
4827      return this.url;
4828    }
4829
4830    public boolean hasUrlElement() {
4831      return this.url != null && !this.url.isEmpty();
4832    }
4833
4834    public boolean hasUrl() {
4835      return this.url != null && !this.url.isEmpty();
4836    }
4837
4838    /**
4839     * @param value {@link #url} (URI of an external repository which contains
4840     *              further details about the genetics data.). This is the
4841     *              underlying object with id, value and extensions. The accessor
4842     *              "getUrl" gives direct access to the value
4843     */
4844    public MolecularSequenceRepositoryComponent setUrlElement(UriType value) {
4845      this.url = value;
4846      return this;
4847    }
4848
4849    /**
4850     * @return URI of an external repository which contains further details about
4851     *         the genetics data.
4852     */
4853    public String getUrl() {
4854      return this.url == null ? null : this.url.getValue();
4855    }
4856
4857    /**
4858     * @param value URI of an external repository which contains further details
4859     *              about the genetics data.
4860     */
4861    public MolecularSequenceRepositoryComponent setUrl(String value) {
4862      if (Utilities.noString(value))
4863        this.url = null;
4864      else {
4865        if (this.url == null)
4866          this.url = new UriType();
4867        this.url.setValue(value);
4868      }
4869      return this;
4870    }
4871
4872    /**
4873     * @return {@link #name} (URI of an external repository which contains further
4874     *         details about the genetics data.). This is the underlying object with
4875     *         id, value and extensions. The accessor "getName" gives direct access
4876     *         to the value
4877     */
4878    public StringType getNameElement() {
4879      if (this.name == null)
4880        if (Configuration.errorOnAutoCreate())
4881          throw new Error("Attempt to auto-create MolecularSequenceRepositoryComponent.name");
4882        else if (Configuration.doAutoCreate())
4883          this.name = new StringType(); // bb
4884      return this.name;
4885    }
4886
4887    public boolean hasNameElement() {
4888      return this.name != null && !this.name.isEmpty();
4889    }
4890
4891    public boolean hasName() {
4892      return this.name != null && !this.name.isEmpty();
4893    }
4894
4895    /**
4896     * @param value {@link #name} (URI of an external repository which contains
4897     *              further details about the genetics data.). This is the
4898     *              underlying object with id, value and extensions. The accessor
4899     *              "getName" gives direct access to the value
4900     */
4901    public MolecularSequenceRepositoryComponent setNameElement(StringType value) {
4902      this.name = value;
4903      return this;
4904    }
4905
4906    /**
4907     * @return URI of an external repository which contains further details about
4908     *         the genetics data.
4909     */
4910    public String getName() {
4911      return this.name == null ? null : this.name.getValue();
4912    }
4913
4914    /**
4915     * @param value URI of an external repository which contains further details
4916     *              about the genetics data.
4917     */
4918    public MolecularSequenceRepositoryComponent setName(String value) {
4919      if (Utilities.noString(value))
4920        this.name = null;
4921      else {
4922        if (this.name == null)
4923          this.name = new StringType();
4924        this.name.setValue(value);
4925      }
4926      return this;
4927    }
4928
4929    /**
4930     * @return {@link #datasetId} (Id of the variant in this external repository.
4931     *         The server will understand how to use this id to call for more info
4932     *         about datasets in external repository.). This is the underlying
4933     *         object with id, value and extensions. The accessor "getDatasetId"
4934     *         gives direct access to the value
4935     */
4936    public StringType getDatasetIdElement() {
4937      if (this.datasetId == null)
4938        if (Configuration.errorOnAutoCreate())
4939          throw new Error("Attempt to auto-create MolecularSequenceRepositoryComponent.datasetId");
4940        else if (Configuration.doAutoCreate())
4941          this.datasetId = new StringType(); // bb
4942      return this.datasetId;
4943    }
4944
4945    public boolean hasDatasetIdElement() {
4946      return this.datasetId != null && !this.datasetId.isEmpty();
4947    }
4948
4949    public boolean hasDatasetId() {
4950      return this.datasetId != null && !this.datasetId.isEmpty();
4951    }
4952
4953    /**
4954     * @param value {@link #datasetId} (Id of the variant in this external
4955     *              repository. The server will understand how to use this id to
4956     *              call for more info about datasets in external repository.). This
4957     *              is the underlying object with id, value and extensions. The
4958     *              accessor "getDatasetId" gives direct access to the value
4959     */
4960    public MolecularSequenceRepositoryComponent setDatasetIdElement(StringType value) {
4961      this.datasetId = value;
4962      return this;
4963    }
4964
4965    /**
4966     * @return Id of the variant in this external repository. The server will
4967     *         understand how to use this id to call for more info about datasets in
4968     *         external repository.
4969     */
4970    public String getDatasetId() {
4971      return this.datasetId == null ? null : this.datasetId.getValue();
4972    }
4973
4974    /**
4975     * @param value Id of the variant in this external repository. The server will
4976     *              understand how to use this id to call for more info about
4977     *              datasets in external repository.
4978     */
4979    public MolecularSequenceRepositoryComponent setDatasetId(String value) {
4980      if (Utilities.noString(value))
4981        this.datasetId = null;
4982      else {
4983        if (this.datasetId == null)
4984          this.datasetId = new StringType();
4985        this.datasetId.setValue(value);
4986      }
4987      return this;
4988    }
4989
4990    /**
4991     * @return {@link #variantsetId} (Id of the variantset in this external
4992     *         repository. The server will understand how to use this id to call for
4993     *         more info about variantsets in external repository.). This is the
4994     *         underlying object with id, value and extensions. The accessor
4995     *         "getVariantsetId" gives direct access to the value
4996     */
4997    public StringType getVariantsetIdElement() {
4998      if (this.variantsetId == null)
4999        if (Configuration.errorOnAutoCreate())
5000          throw new Error("Attempt to auto-create MolecularSequenceRepositoryComponent.variantsetId");
5001        else if (Configuration.doAutoCreate())
5002          this.variantsetId = new StringType(); // bb
5003      return this.variantsetId;
5004    }
5005
5006    public boolean hasVariantsetIdElement() {
5007      return this.variantsetId != null && !this.variantsetId.isEmpty();
5008    }
5009
5010    public boolean hasVariantsetId() {
5011      return this.variantsetId != null && !this.variantsetId.isEmpty();
5012    }
5013
5014    /**
5015     * @param value {@link #variantsetId} (Id of the variantset in this external
5016     *              repository. The server will understand how to use this id to
5017     *              call for more info about variantsets in external repository.).
5018     *              This is the underlying object with id, value and extensions. The
5019     *              accessor "getVariantsetId" gives direct access to the value
5020     */
5021    public MolecularSequenceRepositoryComponent setVariantsetIdElement(StringType value) {
5022      this.variantsetId = value;
5023      return this;
5024    }
5025
5026    /**
5027     * @return Id of the variantset in this external repository. The server will
5028     *         understand how to use this id to call for more info about variantsets
5029     *         in external repository.
5030     */
5031    public String getVariantsetId() {
5032      return this.variantsetId == null ? null : this.variantsetId.getValue();
5033    }
5034
5035    /**
5036     * @param value Id of the variantset in this external repository. The server
5037     *              will understand how to use this id to call for more info about
5038     *              variantsets in external repository.
5039     */
5040    public MolecularSequenceRepositoryComponent setVariantsetId(String value) {
5041      if (Utilities.noString(value))
5042        this.variantsetId = null;
5043      else {
5044        if (this.variantsetId == null)
5045          this.variantsetId = new StringType();
5046        this.variantsetId.setValue(value);
5047      }
5048      return this;
5049    }
5050
5051    /**
5052     * @return {@link #readsetId} (Id of the read in this external repository.).
5053     *         This is the underlying object with id, value and extensions. The
5054     *         accessor "getReadsetId" gives direct access to the value
5055     */
5056    public StringType getReadsetIdElement() {
5057      if (this.readsetId == null)
5058        if (Configuration.errorOnAutoCreate())
5059          throw new Error("Attempt to auto-create MolecularSequenceRepositoryComponent.readsetId");
5060        else if (Configuration.doAutoCreate())
5061          this.readsetId = new StringType(); // bb
5062      return this.readsetId;
5063    }
5064
5065    public boolean hasReadsetIdElement() {
5066      return this.readsetId != null && !this.readsetId.isEmpty();
5067    }
5068
5069    public boolean hasReadsetId() {
5070      return this.readsetId != null && !this.readsetId.isEmpty();
5071    }
5072
5073    /**
5074     * @param value {@link #readsetId} (Id of the read in this external
5075     *              repository.). This is the underlying object with id, value and
5076     *              extensions. The accessor "getReadsetId" gives direct access to
5077     *              the value
5078     */
5079    public MolecularSequenceRepositoryComponent setReadsetIdElement(StringType value) {
5080      this.readsetId = value;
5081      return this;
5082    }
5083
5084    /**
5085     * @return Id of the read in this external repository.
5086     */
5087    public String getReadsetId() {
5088      return this.readsetId == null ? null : this.readsetId.getValue();
5089    }
5090
5091    /**
5092     * @param value Id of the read in this external repository.
5093     */
5094    public MolecularSequenceRepositoryComponent setReadsetId(String value) {
5095      if (Utilities.noString(value))
5096        this.readsetId = null;
5097      else {
5098        if (this.readsetId == null)
5099          this.readsetId = new StringType();
5100        this.readsetId.setValue(value);
5101      }
5102      return this;
5103    }
5104
5105    protected void listChildren(List<Property> children) {
5106      super.listChildren(children);
5107      children.add(new Property("type", "code",
5108          "Click and see / RESTful API / Need login to see / RESTful API with authentication / Other ways to see resource.",
5109          0, 1, type));
5110      children.add(new Property("url", "uri",
5111          "URI of an external repository which contains further details about the genetics data.", 0, 1, url));
5112      children.add(new Property("name", "string",
5113          "URI of an external repository which contains further details about the genetics data.", 0, 1, name));
5114      children.add(new Property("datasetId", "string",
5115          "Id of the variant in this external repository. The server will understand how to use this id to call for more info about datasets in external repository.",
5116          0, 1, datasetId));
5117      children.add(new Property("variantsetId", "string",
5118          "Id of the variantset in this external repository. The server will understand how to use this id to call for more info about variantsets in external repository.",
5119          0, 1, variantsetId));
5120      children.add(new Property("readsetId", "string", "Id of the read in this external repository.", 0, 1, readsetId));
5121    }
5122
5123    @Override
5124    public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
5125      switch (_hash) {
5126      case 3575610:
5127        /* type */ return new Property("type", "code",
5128            "Click and see / RESTful API / Need login to see / RESTful API with authentication / Other ways to see resource.",
5129            0, 1, type);
5130      case 116079:
5131        /* url */ return new Property("url", "uri",
5132            "URI of an external repository which contains further details about the genetics data.", 0, 1, url);
5133      case 3373707:
5134        /* name */ return new Property("name", "string",
5135            "URI of an external repository which contains further details about the genetics data.", 0, 1, name);
5136      case -345342029:
5137        /* datasetId */ return new Property("datasetId", "string",
5138            "Id of the variant in this external repository. The server will understand how to use this id to call for more info about datasets in external repository.",
5139            0, 1, datasetId);
5140      case 1929752504:
5141        /* variantsetId */ return new Property("variantsetId", "string",
5142            "Id of the variantset in this external repository. The server will understand how to use this id to call for more info about variantsets in external repository.",
5143            0, 1, variantsetId);
5144      case -1095407289:
5145        /* readsetId */ return new Property("readsetId", "string", "Id of the read in this external repository.", 0, 1,
5146            readsetId);
5147      default:
5148        return super.getNamedProperty(_hash, _name, _checkValid);
5149      }
5150
5151    }
5152
5153    @Override
5154    public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
5155      switch (hash) {
5156      case 3575610:
5157        /* type */ return this.type == null ? new Base[0] : new Base[] { this.type }; // Enumeration<RepositoryType>
5158      case 116079:
5159        /* url */ return this.url == null ? new Base[0] : new Base[] { this.url }; // UriType
5160      case 3373707:
5161        /* name */ return this.name == null ? new Base[0] : new Base[] { this.name }; // StringType
5162      case -345342029:
5163        /* datasetId */ return this.datasetId == null ? new Base[0] : new Base[] { this.datasetId }; // StringType
5164      case 1929752504:
5165        /* variantsetId */ return this.variantsetId == null ? new Base[0] : new Base[] { this.variantsetId }; // StringType
5166      case -1095407289:
5167        /* readsetId */ return this.readsetId == null ? new Base[0] : new Base[] { this.readsetId }; // StringType
5168      default:
5169        return super.getProperty(hash, name, checkValid);
5170      }
5171
5172    }
5173
5174    @Override
5175    public Base setProperty(int hash, String name, Base value) throws FHIRException {
5176      switch (hash) {
5177      case 3575610: // type
5178        value = new RepositoryTypeEnumFactory().fromType(castToCode(value));
5179        this.type = (Enumeration) value; // Enumeration<RepositoryType>
5180        return value;
5181      case 116079: // url
5182        this.url = castToUri(value); // UriType
5183        return value;
5184      case 3373707: // name
5185        this.name = castToString(value); // StringType
5186        return value;
5187      case -345342029: // datasetId
5188        this.datasetId = castToString(value); // StringType
5189        return value;
5190      case 1929752504: // variantsetId
5191        this.variantsetId = castToString(value); // StringType
5192        return value;
5193      case -1095407289: // readsetId
5194        this.readsetId = castToString(value); // StringType
5195        return value;
5196      default:
5197        return super.setProperty(hash, name, value);
5198      }
5199
5200    }
5201
5202    @Override
5203    public Base setProperty(String name, Base value) throws FHIRException {
5204      if (name.equals("type")) {
5205        value = new RepositoryTypeEnumFactory().fromType(castToCode(value));
5206        this.type = (Enumeration) value; // Enumeration<RepositoryType>
5207      } else if (name.equals("url")) {
5208        this.url = castToUri(value); // UriType
5209      } else if (name.equals("name")) {
5210        this.name = castToString(value); // StringType
5211      } else if (name.equals("datasetId")) {
5212        this.datasetId = castToString(value); // StringType
5213      } else if (name.equals("variantsetId")) {
5214        this.variantsetId = castToString(value); // StringType
5215      } else if (name.equals("readsetId")) {
5216        this.readsetId = castToString(value); // StringType
5217      } else
5218        return super.setProperty(name, value);
5219      return value;
5220    }
5221
5222    @Override
5223    public Base makeProperty(int hash, String name) throws FHIRException {
5224      switch (hash) {
5225      case 3575610:
5226        return getTypeElement();
5227      case 116079:
5228        return getUrlElement();
5229      case 3373707:
5230        return getNameElement();
5231      case -345342029:
5232        return getDatasetIdElement();
5233      case 1929752504:
5234        return getVariantsetIdElement();
5235      case -1095407289:
5236        return getReadsetIdElement();
5237      default:
5238        return super.makeProperty(hash, name);
5239      }
5240
5241    }
5242
5243    @Override
5244    public String[] getTypesForProperty(int hash, String name) throws FHIRException {
5245      switch (hash) {
5246      case 3575610:
5247        /* type */ return new String[] { "code" };
5248      case 116079:
5249        /* url */ return new String[] { "uri" };
5250      case 3373707:
5251        /* name */ return new String[] { "string" };
5252      case -345342029:
5253        /* datasetId */ return new String[] { "string" };
5254      case 1929752504:
5255        /* variantsetId */ return new String[] { "string" };
5256      case -1095407289:
5257        /* readsetId */ return new String[] { "string" };
5258      default:
5259        return super.getTypesForProperty(hash, name);
5260      }
5261
5262    }
5263
5264    @Override
5265    public Base addChild(String name) throws FHIRException {
5266      if (name.equals("type")) {
5267        throw new FHIRException("Cannot call addChild on a singleton property MolecularSequence.type");
5268      } else if (name.equals("url")) {
5269        throw new FHIRException("Cannot call addChild on a singleton property MolecularSequence.url");
5270      } else if (name.equals("name")) {
5271        throw new FHIRException("Cannot call addChild on a singleton property MolecularSequence.name");
5272      } else if (name.equals("datasetId")) {
5273        throw new FHIRException("Cannot call addChild on a singleton property MolecularSequence.datasetId");
5274      } else if (name.equals("variantsetId")) {
5275        throw new FHIRException("Cannot call addChild on a singleton property MolecularSequence.variantsetId");
5276      } else if (name.equals("readsetId")) {
5277        throw new FHIRException("Cannot call addChild on a singleton property MolecularSequence.readsetId");
5278      } else
5279        return super.addChild(name);
5280    }
5281
5282    public MolecularSequenceRepositoryComponent copy() {
5283      MolecularSequenceRepositoryComponent dst = new MolecularSequenceRepositoryComponent();
5284      copyValues(dst);
5285      return dst;
5286    }
5287
5288    public void copyValues(MolecularSequenceRepositoryComponent dst) {
5289      super.copyValues(dst);
5290      dst.type = type == null ? null : type.copy();
5291      dst.url = url == null ? null : url.copy();
5292      dst.name = name == null ? null : name.copy();
5293      dst.datasetId = datasetId == null ? null : datasetId.copy();
5294      dst.variantsetId = variantsetId == null ? null : variantsetId.copy();
5295      dst.readsetId = readsetId == null ? null : readsetId.copy();
5296    }
5297
5298    @Override
5299    public boolean equalsDeep(Base other_) {
5300      if (!super.equalsDeep(other_))
5301        return false;
5302      if (!(other_ instanceof MolecularSequenceRepositoryComponent))
5303        return false;
5304      MolecularSequenceRepositoryComponent o = (MolecularSequenceRepositoryComponent) other_;
5305      return compareDeep(type, o.type, true) && compareDeep(url, o.url, true) && compareDeep(name, o.name, true)
5306          && compareDeep(datasetId, o.datasetId, true) && compareDeep(variantsetId, o.variantsetId, true)
5307          && compareDeep(readsetId, o.readsetId, true);
5308    }
5309
5310    @Override
5311    public boolean equalsShallow(Base other_) {
5312      if (!super.equalsShallow(other_))
5313        return false;
5314      if (!(other_ instanceof MolecularSequenceRepositoryComponent))
5315        return false;
5316      MolecularSequenceRepositoryComponent o = (MolecularSequenceRepositoryComponent) other_;
5317      return compareValues(type, o.type, true) && compareValues(url, o.url, true) && compareValues(name, o.name, true)
5318          && compareValues(datasetId, o.datasetId, true) && compareValues(variantsetId, o.variantsetId, true)
5319          && compareValues(readsetId, o.readsetId, true);
5320    }
5321
5322    public boolean isEmpty() {
5323      return super.isEmpty()
5324          && ca.uhn.fhir.util.ElementUtil.isEmpty(type, url, name, datasetId, variantsetId, readsetId);
5325    }
5326
5327    public String fhirType() {
5328      return "MolecularSequence.repository";
5329
5330    }
5331
5332  }
5333
5334  @Block()
5335  public static class MolecularSequenceStructureVariantComponent extends BackboneElement
5336      implements IBaseBackboneElement {
5337    /**
5338     * Information about chromosome structure variation DNA change type.
5339     */
5340    @Child(name = "variantType", type = {
5341        CodeableConcept.class }, order = 1, min = 0, max = 1, modifier = false, summary = true)
5342    @Description(shortDefinition = "Structural variant change type", formalDefinition = "Information about chromosome structure variation DNA change type.")
5343    protected CodeableConcept variantType;
5344
5345    /**
5346     * Used to indicate if the outer and inner start-end values have the same
5347     * meaning.
5348     */
5349    @Child(name = "exact", type = { BooleanType.class }, order = 2, min = 0, max = 1, modifier = false, summary = true)
5350    @Description(shortDefinition = "Does the structural variant have base pair resolution breakpoints?", formalDefinition = "Used to indicate if the outer and inner start-end values have the same meaning.")
5351    protected BooleanType exact;
5352
5353    /**
5354     * Length of the variant chromosome.
5355     */
5356    @Child(name = "length", type = { IntegerType.class }, order = 3, min = 0, max = 1, modifier = false, summary = true)
5357    @Description(shortDefinition = "Structural variant length", formalDefinition = "Length of the variant chromosome.")
5358    protected IntegerType length;
5359
5360    /**
5361     * Structural variant outer.
5362     */
5363    @Child(name = "outer", type = {}, order = 4, min = 0, max = 1, modifier = false, summary = true)
5364    @Description(shortDefinition = "Structural variant outer", formalDefinition = "Structural variant outer.")
5365    protected MolecularSequenceStructureVariantOuterComponent outer;
5366
5367    /**
5368     * Structural variant inner.
5369     */
5370    @Child(name = "inner", type = {}, order = 5, min = 0, max = 1, modifier = false, summary = true)
5371    @Description(shortDefinition = "Structural variant inner", formalDefinition = "Structural variant inner.")
5372    protected MolecularSequenceStructureVariantInnerComponent inner;
5373
5374    private static final long serialVersionUID = -1943515207L;
5375
5376    /**
5377     * Constructor
5378     */
5379    public MolecularSequenceStructureVariantComponent() {
5380      super();
5381    }
5382
5383    /**
5384     * @return {@link #variantType} (Information about chromosome structure
5385     *         variation DNA change type.)
5386     */
5387    public CodeableConcept getVariantType() {
5388      if (this.variantType == null)
5389        if (Configuration.errorOnAutoCreate())
5390          throw new Error("Attempt to auto-create MolecularSequenceStructureVariantComponent.variantType");
5391        else if (Configuration.doAutoCreate())
5392          this.variantType = new CodeableConcept(); // cc
5393      return this.variantType;
5394    }
5395
5396    public boolean hasVariantType() {
5397      return this.variantType != null && !this.variantType.isEmpty();
5398    }
5399
5400    /**
5401     * @param value {@link #variantType} (Information about chromosome structure
5402     *              variation DNA change type.)
5403     */
5404    public MolecularSequenceStructureVariantComponent setVariantType(CodeableConcept value) {
5405      this.variantType = value;
5406      return this;
5407    }
5408
5409    /**
5410     * @return {@link #exact} (Used to indicate if the outer and inner start-end
5411     *         values have the same meaning.). This is the underlying object with
5412     *         id, value and extensions. The accessor "getExact" gives direct access
5413     *         to the value
5414     */
5415    public BooleanType getExactElement() {
5416      if (this.exact == null)
5417        if (Configuration.errorOnAutoCreate())
5418          throw new Error("Attempt to auto-create MolecularSequenceStructureVariantComponent.exact");
5419        else if (Configuration.doAutoCreate())
5420          this.exact = new BooleanType(); // bb
5421      return this.exact;
5422    }
5423
5424    public boolean hasExactElement() {
5425      return this.exact != null && !this.exact.isEmpty();
5426    }
5427
5428    public boolean hasExact() {
5429      return this.exact != null && !this.exact.isEmpty();
5430    }
5431
5432    /**
5433     * @param value {@link #exact} (Used to indicate if the outer and inner
5434     *              start-end values have the same meaning.). This is the underlying
5435     *              object with id, value and extensions. The accessor "getExact"
5436     *              gives direct access to the value
5437     */
5438    public MolecularSequenceStructureVariantComponent setExactElement(BooleanType value) {
5439      this.exact = value;
5440      return this;
5441    }
5442
5443    /**
5444     * @return Used to indicate if the outer and inner start-end values have the
5445     *         same meaning.
5446     */
5447    public boolean getExact() {
5448      return this.exact == null || this.exact.isEmpty() ? false : this.exact.getValue();
5449    }
5450
5451    /**
5452     * @param value Used to indicate if the outer and inner start-end values have
5453     *              the same meaning.
5454     */
5455    public MolecularSequenceStructureVariantComponent setExact(boolean value) {
5456      if (this.exact == null)
5457        this.exact = new BooleanType();
5458      this.exact.setValue(value);
5459      return this;
5460    }
5461
5462    /**
5463     * @return {@link #length} (Length of the variant chromosome.). This is the
5464     *         underlying object with id, value and extensions. The accessor
5465     *         "getLength" gives direct access to the value
5466     */
5467    public IntegerType getLengthElement() {
5468      if (this.length == null)
5469        if (Configuration.errorOnAutoCreate())
5470          throw new Error("Attempt to auto-create MolecularSequenceStructureVariantComponent.length");
5471        else if (Configuration.doAutoCreate())
5472          this.length = new IntegerType(); // bb
5473      return this.length;
5474    }
5475
5476    public boolean hasLengthElement() {
5477      return this.length != null && !this.length.isEmpty();
5478    }
5479
5480    public boolean hasLength() {
5481      return this.length != null && !this.length.isEmpty();
5482    }
5483
5484    /**
5485     * @param value {@link #length} (Length of the variant chromosome.). This is the
5486     *              underlying object with id, value and extensions. The accessor
5487     *              "getLength" gives direct access to the value
5488     */
5489    public MolecularSequenceStructureVariantComponent setLengthElement(IntegerType value) {
5490      this.length = value;
5491      return this;
5492    }
5493
5494    /**
5495     * @return Length of the variant chromosome.
5496     */
5497    public int getLength() {
5498      return this.length == null || this.length.isEmpty() ? 0 : this.length.getValue();
5499    }
5500
5501    /**
5502     * @param value Length of the variant chromosome.
5503     */
5504    public MolecularSequenceStructureVariantComponent setLength(int value) {
5505      if (this.length == null)
5506        this.length = new IntegerType();
5507      this.length.setValue(value);
5508      return this;
5509    }
5510
5511    /**
5512     * @return {@link #outer} (Structural variant outer.)
5513     */
5514    public MolecularSequenceStructureVariantOuterComponent getOuter() {
5515      if (this.outer == null)
5516        if (Configuration.errorOnAutoCreate())
5517          throw new Error("Attempt to auto-create MolecularSequenceStructureVariantComponent.outer");
5518        else if (Configuration.doAutoCreate())
5519          this.outer = new MolecularSequenceStructureVariantOuterComponent(); // cc
5520      return this.outer;
5521    }
5522
5523    public boolean hasOuter() {
5524      return this.outer != null && !this.outer.isEmpty();
5525    }
5526
5527    /**
5528     * @param value {@link #outer} (Structural variant outer.)
5529     */
5530    public MolecularSequenceStructureVariantComponent setOuter(MolecularSequenceStructureVariantOuterComponent value) {
5531      this.outer = value;
5532      return this;
5533    }
5534
5535    /**
5536     * @return {@link #inner} (Structural variant inner.)
5537     */
5538    public MolecularSequenceStructureVariantInnerComponent getInner() {
5539      if (this.inner == null)
5540        if (Configuration.errorOnAutoCreate())
5541          throw new Error("Attempt to auto-create MolecularSequenceStructureVariantComponent.inner");
5542        else if (Configuration.doAutoCreate())
5543          this.inner = new MolecularSequenceStructureVariantInnerComponent(); // cc
5544      return this.inner;
5545    }
5546
5547    public boolean hasInner() {
5548      return this.inner != null && !this.inner.isEmpty();
5549    }
5550
5551    /**
5552     * @param value {@link #inner} (Structural variant inner.)
5553     */
5554    public MolecularSequenceStructureVariantComponent setInner(MolecularSequenceStructureVariantInnerComponent value) {
5555      this.inner = value;
5556      return this;
5557    }
5558
5559    protected void listChildren(List<Property> children) {
5560      super.listChildren(children);
5561      children.add(new Property("variantType", "CodeableConcept",
5562          "Information about chromosome structure variation DNA change type.", 0, 1, variantType));
5563      children.add(new Property("exact", "boolean",
5564          "Used to indicate if the outer and inner start-end values have the same meaning.", 0, 1, exact));
5565      children.add(new Property("length", "integer", "Length of the variant chromosome.", 0, 1, length));
5566      children.add(new Property("outer", "", "Structural variant outer.", 0, 1, outer));
5567      children.add(new Property("inner", "", "Structural variant inner.", 0, 1, inner));
5568    }
5569
5570    @Override
5571    public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
5572      switch (_hash) {
5573      case -1601222305:
5574        /* variantType */ return new Property("variantType", "CodeableConcept",
5575            "Information about chromosome structure variation DNA change type.", 0, 1, variantType);
5576      case 96946943:
5577        /* exact */ return new Property("exact", "boolean",
5578            "Used to indicate if the outer and inner start-end values have the same meaning.", 0, 1, exact);
5579      case -1106363674:
5580        /* length */ return new Property("length", "integer", "Length of the variant chromosome.", 0, 1, length);
5581      case 106111099:
5582        /* outer */ return new Property("outer", "", "Structural variant outer.", 0, 1, outer);
5583      case 100355670:
5584        /* inner */ return new Property("inner", "", "Structural variant inner.", 0, 1, inner);
5585      default:
5586        return super.getNamedProperty(_hash, _name, _checkValid);
5587      }
5588
5589    }
5590
5591    @Override
5592    public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
5593      switch (hash) {
5594      case -1601222305:
5595        /* variantType */ return this.variantType == null ? new Base[0] : new Base[] { this.variantType }; // CodeableConcept
5596      case 96946943:
5597        /* exact */ return this.exact == null ? new Base[0] : new Base[] { this.exact }; // BooleanType
5598      case -1106363674:
5599        /* length */ return this.length == null ? new Base[0] : new Base[] { this.length }; // IntegerType
5600      case 106111099:
5601        /* outer */ return this.outer == null ? new Base[0] : new Base[] { this.outer }; // MolecularSequenceStructureVariantOuterComponent
5602      case 100355670:
5603        /* inner */ return this.inner == null ? new Base[0] : new Base[] { this.inner }; // MolecularSequenceStructureVariantInnerComponent
5604      default:
5605        return super.getProperty(hash, name, checkValid);
5606      }
5607
5608    }
5609
5610    @Override
5611    public Base setProperty(int hash, String name, Base value) throws FHIRException {
5612      switch (hash) {
5613      case -1601222305: // variantType
5614        this.variantType = castToCodeableConcept(value); // CodeableConcept
5615        return value;
5616      case 96946943: // exact
5617        this.exact = castToBoolean(value); // BooleanType
5618        return value;
5619      case -1106363674: // length
5620        this.length = castToInteger(value); // IntegerType
5621        return value;
5622      case 106111099: // outer
5623        this.outer = (MolecularSequenceStructureVariantOuterComponent) value; // MolecularSequenceStructureVariantOuterComponent
5624        return value;
5625      case 100355670: // inner
5626        this.inner = (MolecularSequenceStructureVariantInnerComponent) value; // MolecularSequenceStructureVariantInnerComponent
5627        return value;
5628      default:
5629        return super.setProperty(hash, name, value);
5630      }
5631
5632    }
5633
5634    @Override
5635    public Base setProperty(String name, Base value) throws FHIRException {
5636      if (name.equals("variantType")) {
5637        this.variantType = castToCodeableConcept(value); // CodeableConcept
5638      } else if (name.equals("exact")) {
5639        this.exact = castToBoolean(value); // BooleanType
5640      } else if (name.equals("length")) {
5641        this.length = castToInteger(value); // IntegerType
5642      } else if (name.equals("outer")) {
5643        this.outer = (MolecularSequenceStructureVariantOuterComponent) value; // MolecularSequenceStructureVariantOuterComponent
5644      } else if (name.equals("inner")) {
5645        this.inner = (MolecularSequenceStructureVariantInnerComponent) value; // MolecularSequenceStructureVariantInnerComponent
5646      } else
5647        return super.setProperty(name, value);
5648      return value;
5649    }
5650
5651    @Override
5652    public Base makeProperty(int hash, String name) throws FHIRException {
5653      switch (hash) {
5654      case -1601222305:
5655        return getVariantType();
5656      case 96946943:
5657        return getExactElement();
5658      case -1106363674:
5659        return getLengthElement();
5660      case 106111099:
5661        return getOuter();
5662      case 100355670:
5663        return getInner();
5664      default:
5665        return super.makeProperty(hash, name);
5666      }
5667
5668    }
5669
5670    @Override
5671    public String[] getTypesForProperty(int hash, String name) throws FHIRException {
5672      switch (hash) {
5673      case -1601222305:
5674        /* variantType */ return new String[] { "CodeableConcept" };
5675      case 96946943:
5676        /* exact */ return new String[] { "boolean" };
5677      case -1106363674:
5678        /* length */ return new String[] { "integer" };
5679      case 106111099:
5680        /* outer */ return new String[] {};
5681      case 100355670:
5682        /* inner */ return new String[] {};
5683      default:
5684        return super.getTypesForProperty(hash, name);
5685      }
5686
5687    }
5688
5689    @Override
5690    public Base addChild(String name) throws FHIRException {
5691      if (name.equals("variantType")) {
5692        this.variantType = new CodeableConcept();
5693        return this.variantType;
5694      } else if (name.equals("exact")) {
5695        throw new FHIRException("Cannot call addChild on a singleton property MolecularSequence.exact");
5696      } else if (name.equals("length")) {
5697        throw new FHIRException("Cannot call addChild on a singleton property MolecularSequence.length");
5698      } else if (name.equals("outer")) {
5699        this.outer = new MolecularSequenceStructureVariantOuterComponent();
5700        return this.outer;
5701      } else if (name.equals("inner")) {
5702        this.inner = new MolecularSequenceStructureVariantInnerComponent();
5703        return this.inner;
5704      } else
5705        return super.addChild(name);
5706    }
5707
5708    public MolecularSequenceStructureVariantComponent copy() {
5709      MolecularSequenceStructureVariantComponent dst = new MolecularSequenceStructureVariantComponent();
5710      copyValues(dst);
5711      return dst;
5712    }
5713
5714    public void copyValues(MolecularSequenceStructureVariantComponent dst) {
5715      super.copyValues(dst);
5716      dst.variantType = variantType == null ? null : variantType.copy();
5717      dst.exact = exact == null ? null : exact.copy();
5718      dst.length = length == null ? null : length.copy();
5719      dst.outer = outer == null ? null : outer.copy();
5720      dst.inner = inner == null ? null : inner.copy();
5721    }
5722
5723    @Override
5724    public boolean equalsDeep(Base other_) {
5725      if (!super.equalsDeep(other_))
5726        return false;
5727      if (!(other_ instanceof MolecularSequenceStructureVariantComponent))
5728        return false;
5729      MolecularSequenceStructureVariantComponent o = (MolecularSequenceStructureVariantComponent) other_;
5730      return compareDeep(variantType, o.variantType, true) && compareDeep(exact, o.exact, true)
5731          && compareDeep(length, o.length, true) && compareDeep(outer, o.outer, true)
5732          && compareDeep(inner, o.inner, true);
5733    }
5734
5735    @Override
5736    public boolean equalsShallow(Base other_) {
5737      if (!super.equalsShallow(other_))
5738        return false;
5739      if (!(other_ instanceof MolecularSequenceStructureVariantComponent))
5740        return false;
5741      MolecularSequenceStructureVariantComponent o = (MolecularSequenceStructureVariantComponent) other_;
5742      return compareValues(exact, o.exact, true) && compareValues(length, o.length, true);
5743    }
5744
5745    public boolean isEmpty() {
5746      return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(variantType, exact, length, outer, inner);
5747    }
5748
5749    public String fhirType() {
5750      return "MolecularSequence.structureVariant";
5751
5752    }
5753
5754  }
5755
5756  @Block()
5757  public static class MolecularSequenceStructureVariantOuterComponent extends BackboneElement
5758      implements IBaseBackboneElement {
5759    /**
5760     * Structural variant outer start. If the coordinate system is either 0-based or
5761     * 1-based, then start position is inclusive.
5762     */
5763    @Child(name = "start", type = { IntegerType.class }, order = 1, min = 0, max = 1, modifier = false, summary = true)
5764    @Description(shortDefinition = "Structural variant outer start", formalDefinition = "Structural variant outer start. If the coordinate system is either 0-based or 1-based, then start position is inclusive.")
5765    protected IntegerType start;
5766
5767    /**
5768     * Structural variant outer end. If the coordinate system is 0-based then end is
5769     * exclusive and does not include the last position. If the coordinate system is
5770     * 1-base, then end is inclusive and includes the last position.
5771     */
5772    @Child(name = "end", type = { IntegerType.class }, order = 2, min = 0, max = 1, modifier = false, summary = true)
5773    @Description(shortDefinition = "Structural variant outer end", formalDefinition = "Structural variant outer end. If the coordinate system is 0-based then end is exclusive and does not include the last position. If the coordinate system is 1-base, then end is inclusive and includes the last position.")
5774    protected IntegerType end;
5775
5776    private static final long serialVersionUID = -1798864889L;
5777
5778    /**
5779     * Constructor
5780     */
5781    public MolecularSequenceStructureVariantOuterComponent() {
5782      super();
5783    }
5784
5785    /**
5786     * @return {@link #start} (Structural variant outer start. If the coordinate
5787     *         system is either 0-based or 1-based, then start position is
5788     *         inclusive.). This is the underlying object with id, value and
5789     *         extensions. The accessor "getStart" gives direct access to the value
5790     */
5791    public IntegerType getStartElement() {
5792      if (this.start == null)
5793        if (Configuration.errorOnAutoCreate())
5794          throw new Error("Attempt to auto-create MolecularSequenceStructureVariantOuterComponent.start");
5795        else if (Configuration.doAutoCreate())
5796          this.start = new IntegerType(); // bb
5797      return this.start;
5798    }
5799
5800    public boolean hasStartElement() {
5801      return this.start != null && !this.start.isEmpty();
5802    }
5803
5804    public boolean hasStart() {
5805      return this.start != null && !this.start.isEmpty();
5806    }
5807
5808    /**
5809     * @param value {@link #start} (Structural variant outer start. If the
5810     *              coordinate system is either 0-based or 1-based, then start
5811     *              position is inclusive.). This is the underlying object with id,
5812     *              value and extensions. The accessor "getStart" gives direct
5813     *              access to the value
5814     */
5815    public MolecularSequenceStructureVariantOuterComponent setStartElement(IntegerType value) {
5816      this.start = value;
5817      return this;
5818    }
5819
5820    /**
5821     * @return Structural variant outer start. If the coordinate system is either
5822     *         0-based or 1-based, then start position is inclusive.
5823     */
5824    public int getStart() {
5825      return this.start == null || this.start.isEmpty() ? 0 : this.start.getValue();
5826    }
5827
5828    /**
5829     * @param value Structural variant outer start. If the coordinate system is
5830     *              either 0-based or 1-based, then start position is inclusive.
5831     */
5832    public MolecularSequenceStructureVariantOuterComponent setStart(int value) {
5833      if (this.start == null)
5834        this.start = new IntegerType();
5835      this.start.setValue(value);
5836      return this;
5837    }
5838
5839    /**
5840     * @return {@link #end} (Structural variant outer end. If the coordinate system
5841     *         is 0-based then end is exclusive and does not include the last
5842     *         position. If the coordinate system is 1-base, then end is inclusive
5843     *         and includes the last position.). This is the underlying object with
5844     *         id, value and extensions. The accessor "getEnd" gives direct access
5845     *         to the value
5846     */
5847    public IntegerType getEndElement() {
5848      if (this.end == null)
5849        if (Configuration.errorOnAutoCreate())
5850          throw new Error("Attempt to auto-create MolecularSequenceStructureVariantOuterComponent.end");
5851        else if (Configuration.doAutoCreate())
5852          this.end = new IntegerType(); // bb
5853      return this.end;
5854    }
5855
5856    public boolean hasEndElement() {
5857      return this.end != null && !this.end.isEmpty();
5858    }
5859
5860    public boolean hasEnd() {
5861      return this.end != null && !this.end.isEmpty();
5862    }
5863
5864    /**
5865     * @param value {@link #end} (Structural variant outer end. If the coordinate
5866     *              system is 0-based then end is exclusive and does not include the
5867     *              last position. If the coordinate system is 1-base, then end is
5868     *              inclusive and includes the last position.). This is the
5869     *              underlying object with id, value and extensions. The accessor
5870     *              "getEnd" gives direct access to the value
5871     */
5872    public MolecularSequenceStructureVariantOuterComponent setEndElement(IntegerType value) {
5873      this.end = value;
5874      return this;
5875    }
5876
5877    /**
5878     * @return Structural variant outer end. If the coordinate system is 0-based
5879     *         then end is exclusive and does not include the last position. If the
5880     *         coordinate system is 1-base, then end is inclusive and includes the
5881     *         last position.
5882     */
5883    public int getEnd() {
5884      return this.end == null || this.end.isEmpty() ? 0 : this.end.getValue();
5885    }
5886
5887    /**
5888     * @param value Structural variant outer end. If the coordinate system is
5889     *              0-based then end is exclusive and does not include the last
5890     *              position. If the coordinate system is 1-base, then end is
5891     *              inclusive and includes the last position.
5892     */
5893    public MolecularSequenceStructureVariantOuterComponent setEnd(int value) {
5894      if (this.end == null)
5895        this.end = new IntegerType();
5896      this.end.setValue(value);
5897      return this;
5898    }
5899
5900    protected void listChildren(List<Property> children) {
5901      super.listChildren(children);
5902      children.add(new Property("start", "integer",
5903          "Structural variant outer start. If the coordinate system is either 0-based or 1-based, then start position is inclusive.",
5904          0, 1, start));
5905      children.add(new Property("end", "integer",
5906          "Structural variant outer end. If the coordinate system is 0-based then end is exclusive and does not include the last position. If the coordinate system is 1-base, then end is inclusive and includes the last position.",
5907          0, 1, end));
5908    }
5909
5910    @Override
5911    public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
5912      switch (_hash) {
5913      case 109757538:
5914        /* start */ return new Property("start", "integer",
5915            "Structural variant outer start. If the coordinate system is either 0-based or 1-based, then start position is inclusive.",
5916            0, 1, start);
5917      case 100571:
5918        /* end */ return new Property("end", "integer",
5919            "Structural variant outer end. If the coordinate system is 0-based then end is exclusive and does not include the last position. If the coordinate system is 1-base, then end is inclusive and includes the last position.",
5920            0, 1, end);
5921      default:
5922        return super.getNamedProperty(_hash, _name, _checkValid);
5923      }
5924
5925    }
5926
5927    @Override
5928    public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
5929      switch (hash) {
5930      case 109757538:
5931        /* start */ return this.start == null ? new Base[0] : new Base[] { this.start }; // IntegerType
5932      case 100571:
5933        /* end */ return this.end == null ? new Base[0] : new Base[] { this.end }; // IntegerType
5934      default:
5935        return super.getProperty(hash, name, checkValid);
5936      }
5937
5938    }
5939
5940    @Override
5941    public Base setProperty(int hash, String name, Base value) throws FHIRException {
5942      switch (hash) {
5943      case 109757538: // start
5944        this.start = castToInteger(value); // IntegerType
5945        return value;
5946      case 100571: // end
5947        this.end = castToInteger(value); // IntegerType
5948        return value;
5949      default:
5950        return super.setProperty(hash, name, value);
5951      }
5952
5953    }
5954
5955    @Override
5956    public Base setProperty(String name, Base value) throws FHIRException {
5957      if (name.equals("start")) {
5958        this.start = castToInteger(value); // IntegerType
5959      } else if (name.equals("end")) {
5960        this.end = castToInteger(value); // IntegerType
5961      } else
5962        return super.setProperty(name, value);
5963      return value;
5964    }
5965
5966    @Override
5967    public Base makeProperty(int hash, String name) throws FHIRException {
5968      switch (hash) {
5969      case 109757538:
5970        return getStartElement();
5971      case 100571:
5972        return getEndElement();
5973      default:
5974        return super.makeProperty(hash, name);
5975      }
5976
5977    }
5978
5979    @Override
5980    public String[] getTypesForProperty(int hash, String name) throws FHIRException {
5981      switch (hash) {
5982      case 109757538:
5983        /* start */ return new String[] { "integer" };
5984      case 100571:
5985        /* end */ return new String[] { "integer" };
5986      default:
5987        return super.getTypesForProperty(hash, name);
5988      }
5989
5990    }
5991
5992    @Override
5993    public Base addChild(String name) throws FHIRException {
5994      if (name.equals("start")) {
5995        throw new FHIRException("Cannot call addChild on a singleton property MolecularSequence.start");
5996      } else if (name.equals("end")) {
5997        throw new FHIRException("Cannot call addChild on a singleton property MolecularSequence.end");
5998      } else
5999        return super.addChild(name);
6000    }
6001
6002    public MolecularSequenceStructureVariantOuterComponent copy() {
6003      MolecularSequenceStructureVariantOuterComponent dst = new MolecularSequenceStructureVariantOuterComponent();
6004      copyValues(dst);
6005      return dst;
6006    }
6007
6008    public void copyValues(MolecularSequenceStructureVariantOuterComponent dst) {
6009      super.copyValues(dst);
6010      dst.start = start == null ? null : start.copy();
6011      dst.end = end == null ? null : end.copy();
6012    }
6013
6014    @Override
6015    public boolean equalsDeep(Base other_) {
6016      if (!super.equalsDeep(other_))
6017        return false;
6018      if (!(other_ instanceof MolecularSequenceStructureVariantOuterComponent))
6019        return false;
6020      MolecularSequenceStructureVariantOuterComponent o = (MolecularSequenceStructureVariantOuterComponent) other_;
6021      return compareDeep(start, o.start, true) && compareDeep(end, o.end, true);
6022    }
6023
6024    @Override
6025    public boolean equalsShallow(Base other_) {
6026      if (!super.equalsShallow(other_))
6027        return false;
6028      if (!(other_ instanceof MolecularSequenceStructureVariantOuterComponent))
6029        return false;
6030      MolecularSequenceStructureVariantOuterComponent o = (MolecularSequenceStructureVariantOuterComponent) other_;
6031      return compareValues(start, o.start, true) && compareValues(end, o.end, true);
6032    }
6033
6034    public boolean isEmpty() {
6035      return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(start, end);
6036    }
6037
6038    public String fhirType() {
6039      return "MolecularSequence.structureVariant.outer";
6040
6041    }
6042
6043  }
6044
6045  @Block()
6046  public static class MolecularSequenceStructureVariantInnerComponent extends BackboneElement
6047      implements IBaseBackboneElement {
6048    /**
6049     * Structural variant inner start. If the coordinate system is either 0-based or
6050     * 1-based, then start position is inclusive.
6051     */
6052    @Child(name = "start", type = { IntegerType.class }, order = 1, min = 0, max = 1, modifier = false, summary = true)
6053    @Description(shortDefinition = "Structural variant inner start", formalDefinition = "Structural variant inner start. If the coordinate system is either 0-based or 1-based, then start position is inclusive.")
6054    protected IntegerType start;
6055
6056    /**
6057     * Structural variant inner end. If the coordinate system is 0-based then end is
6058     * exclusive and does not include the last position. If the coordinate system is
6059     * 1-base, then end is inclusive and includes the last position.
6060     */
6061    @Child(name = "end", type = { IntegerType.class }, order = 2, min = 0, max = 1, modifier = false, summary = true)
6062    @Description(shortDefinition = "Structural variant inner end", formalDefinition = "Structural variant inner end. If the coordinate system is 0-based then end is exclusive and does not include the last position. If the coordinate system is 1-base, then end is inclusive and includes the last position.")
6063    protected IntegerType end;
6064
6065    private static final long serialVersionUID = -1798864889L;
6066
6067    /**
6068     * Constructor
6069     */
6070    public MolecularSequenceStructureVariantInnerComponent() {
6071      super();
6072    }
6073
6074    /**
6075     * @return {@link #start} (Structural variant inner start. If the coordinate
6076     *         system is either 0-based or 1-based, then start position is
6077     *         inclusive.). This is the underlying object with id, value and
6078     *         extensions. The accessor "getStart" gives direct access to the value
6079     */
6080    public IntegerType getStartElement() {
6081      if (this.start == null)
6082        if (Configuration.errorOnAutoCreate())
6083          throw new Error("Attempt to auto-create MolecularSequenceStructureVariantInnerComponent.start");
6084        else if (Configuration.doAutoCreate())
6085          this.start = new IntegerType(); // bb
6086      return this.start;
6087    }
6088
6089    public boolean hasStartElement() {
6090      return this.start != null && !this.start.isEmpty();
6091    }
6092
6093    public boolean hasStart() {
6094      return this.start != null && !this.start.isEmpty();
6095    }
6096
6097    /**
6098     * @param value {@link #start} (Structural variant inner start. If the
6099     *              coordinate system is either 0-based or 1-based, then start
6100     *              position is inclusive.). This is the underlying object with id,
6101     *              value and extensions. The accessor "getStart" gives direct
6102     *              access to the value
6103     */
6104    public MolecularSequenceStructureVariantInnerComponent setStartElement(IntegerType value) {
6105      this.start = value;
6106      return this;
6107    }
6108
6109    /**
6110     * @return Structural variant inner start. If the coordinate system is either
6111     *         0-based or 1-based, then start position is inclusive.
6112     */
6113    public int getStart() {
6114      return this.start == null || this.start.isEmpty() ? 0 : this.start.getValue();
6115    }
6116
6117    /**
6118     * @param value Structural variant inner start. If the coordinate system is
6119     *              either 0-based or 1-based, then start position is inclusive.
6120     */
6121    public MolecularSequenceStructureVariantInnerComponent setStart(int value) {
6122      if (this.start == null)
6123        this.start = new IntegerType();
6124      this.start.setValue(value);
6125      return this;
6126    }
6127
6128    /**
6129     * @return {@link #end} (Structural variant inner end. If the coordinate system
6130     *         is 0-based then end is exclusive and does not include the last
6131     *         position. If the coordinate system is 1-base, then end is inclusive
6132     *         and includes the last position.). This is the underlying object with
6133     *         id, value and extensions. The accessor "getEnd" gives direct access
6134     *         to the value
6135     */
6136    public IntegerType getEndElement() {
6137      if (this.end == null)
6138        if (Configuration.errorOnAutoCreate())
6139          throw new Error("Attempt to auto-create MolecularSequenceStructureVariantInnerComponent.end");
6140        else if (Configuration.doAutoCreate())
6141          this.end = new IntegerType(); // bb
6142      return this.end;
6143    }
6144
6145    public boolean hasEndElement() {
6146      return this.end != null && !this.end.isEmpty();
6147    }
6148
6149    public boolean hasEnd() {
6150      return this.end != null && !this.end.isEmpty();
6151    }
6152
6153    /**
6154     * @param value {@link #end} (Structural variant inner end. If the coordinate
6155     *              system is 0-based then end is exclusive and does not include the
6156     *              last position. If the coordinate system is 1-base, then end is
6157     *              inclusive and includes the last position.). This is the
6158     *              underlying object with id, value and extensions. The accessor
6159     *              "getEnd" gives direct access to the value
6160     */
6161    public MolecularSequenceStructureVariantInnerComponent setEndElement(IntegerType value) {
6162      this.end = value;
6163      return this;
6164    }
6165
6166    /**
6167     * @return Structural variant inner end. If the coordinate system is 0-based
6168     *         then end is exclusive and does not include the last position. If the
6169     *         coordinate system is 1-base, then end is inclusive and includes the
6170     *         last position.
6171     */
6172    public int getEnd() {
6173      return this.end == null || this.end.isEmpty() ? 0 : this.end.getValue();
6174    }
6175
6176    /**
6177     * @param value Structural variant inner end. If the coordinate system is
6178     *              0-based then end is exclusive and does not include the last
6179     *              position. If the coordinate system is 1-base, then end is
6180     *              inclusive and includes the last position.
6181     */
6182    public MolecularSequenceStructureVariantInnerComponent setEnd(int value) {
6183      if (this.end == null)
6184        this.end = new IntegerType();
6185      this.end.setValue(value);
6186      return this;
6187    }
6188
6189    protected void listChildren(List<Property> children) {
6190      super.listChildren(children);
6191      children.add(new Property("start", "integer",
6192          "Structural variant inner start. If the coordinate system is either 0-based or 1-based, then start position is inclusive.",
6193          0, 1, start));
6194      children.add(new Property("end", "integer",
6195          "Structural variant inner end. If the coordinate system is 0-based then end is exclusive and does not include the last position. If the coordinate system is 1-base, then end is inclusive and includes the last position.",
6196          0, 1, end));
6197    }
6198
6199    @Override
6200    public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
6201      switch (_hash) {
6202      case 109757538:
6203        /* start */ return new Property("start", "integer",
6204            "Structural variant inner start. If the coordinate system is either 0-based or 1-based, then start position is inclusive.",
6205            0, 1, start);
6206      case 100571:
6207        /* end */ return new Property("end", "integer",
6208            "Structural variant inner end. If the coordinate system is 0-based then end is exclusive and does not include the last position. If the coordinate system is 1-base, then end is inclusive and includes the last position.",
6209            0, 1, end);
6210      default:
6211        return super.getNamedProperty(_hash, _name, _checkValid);
6212      }
6213
6214    }
6215
6216    @Override
6217    public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
6218      switch (hash) {
6219      case 109757538:
6220        /* start */ return this.start == null ? new Base[0] : new Base[] { this.start }; // IntegerType
6221      case 100571:
6222        /* end */ return this.end == null ? new Base[0] : new Base[] { this.end }; // IntegerType
6223      default:
6224        return super.getProperty(hash, name, checkValid);
6225      }
6226
6227    }
6228
6229    @Override
6230    public Base setProperty(int hash, String name, Base value) throws FHIRException {
6231      switch (hash) {
6232      case 109757538: // start
6233        this.start = castToInteger(value); // IntegerType
6234        return value;
6235      case 100571: // end
6236        this.end = castToInteger(value); // IntegerType
6237        return value;
6238      default:
6239        return super.setProperty(hash, name, value);
6240      }
6241
6242    }
6243
6244    @Override
6245    public Base setProperty(String name, Base value) throws FHIRException {
6246      if (name.equals("start")) {
6247        this.start = castToInteger(value); // IntegerType
6248      } else if (name.equals("end")) {
6249        this.end = castToInteger(value); // IntegerType
6250      } else
6251        return super.setProperty(name, value);
6252      return value;
6253    }
6254
6255    @Override
6256    public Base makeProperty(int hash, String name) throws FHIRException {
6257      switch (hash) {
6258      case 109757538:
6259        return getStartElement();
6260      case 100571:
6261        return getEndElement();
6262      default:
6263        return super.makeProperty(hash, name);
6264      }
6265
6266    }
6267
6268    @Override
6269    public String[] getTypesForProperty(int hash, String name) throws FHIRException {
6270      switch (hash) {
6271      case 109757538:
6272        /* start */ return new String[] { "integer" };
6273      case 100571:
6274        /* end */ return new String[] { "integer" };
6275      default:
6276        return super.getTypesForProperty(hash, name);
6277      }
6278
6279    }
6280
6281    @Override
6282    public Base addChild(String name) throws FHIRException {
6283      if (name.equals("start")) {
6284        throw new FHIRException("Cannot call addChild on a singleton property MolecularSequence.start");
6285      } else if (name.equals("end")) {
6286        throw new FHIRException("Cannot call addChild on a singleton property MolecularSequence.end");
6287      } else
6288        return super.addChild(name);
6289    }
6290
6291    public MolecularSequenceStructureVariantInnerComponent copy() {
6292      MolecularSequenceStructureVariantInnerComponent dst = new MolecularSequenceStructureVariantInnerComponent();
6293      copyValues(dst);
6294      return dst;
6295    }
6296
6297    public void copyValues(MolecularSequenceStructureVariantInnerComponent dst) {
6298      super.copyValues(dst);
6299      dst.start = start == null ? null : start.copy();
6300      dst.end = end == null ? null : end.copy();
6301    }
6302
6303    @Override
6304    public boolean equalsDeep(Base other_) {
6305      if (!super.equalsDeep(other_))
6306        return false;
6307      if (!(other_ instanceof MolecularSequenceStructureVariantInnerComponent))
6308        return false;
6309      MolecularSequenceStructureVariantInnerComponent o = (MolecularSequenceStructureVariantInnerComponent) other_;
6310      return compareDeep(start, o.start, true) && compareDeep(end, o.end, true);
6311    }
6312
6313    @Override
6314    public boolean equalsShallow(Base other_) {
6315      if (!super.equalsShallow(other_))
6316        return false;
6317      if (!(other_ instanceof MolecularSequenceStructureVariantInnerComponent))
6318        return false;
6319      MolecularSequenceStructureVariantInnerComponent o = (MolecularSequenceStructureVariantInnerComponent) other_;
6320      return compareValues(start, o.start, true) && compareValues(end, o.end, true);
6321    }
6322
6323    public boolean isEmpty() {
6324      return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(start, end);
6325    }
6326
6327    public String fhirType() {
6328      return "MolecularSequence.structureVariant.inner";
6329
6330    }
6331
6332  }
6333
6334  /**
6335   * A unique identifier for this particular sequence instance. This is a
6336   * FHIR-defined id.
6337   */
6338  @Child(name = "identifier", type = {
6339      Identifier.class }, order = 0, min = 0, max = Child.MAX_UNLIMITED, modifier = false, summary = true)
6340  @Description(shortDefinition = "Unique ID for this particular sequence. This is a FHIR-defined id", formalDefinition = "A unique identifier for this particular sequence instance. This is a FHIR-defined id.")
6341  protected List<Identifier> identifier;
6342
6343  /**
6344   * Amino Acid Sequence/ DNA Sequence / RNA Sequence.
6345   */
6346  @Child(name = "type", type = { CodeType.class }, order = 1, min = 0, max = 1, modifier = false, summary = true)
6347  @Description(shortDefinition = "aa | dna | rna", formalDefinition = "Amino Acid Sequence/ DNA Sequence / RNA Sequence.")
6348  @ca.uhn.fhir.model.api.annotation.Binding(valueSet = "http://hl7.org/fhir/ValueSet/sequence-type")
6349  protected Enumeration<SequenceType> type;
6350
6351  /**
6352   * Whether the sequence is numbered starting at 0 (0-based numbering or
6353   * coordinates, inclusive start, exclusive end) or starting at 1 (1-based
6354   * numbering, inclusive start and inclusive end).
6355   */
6356  @Child(name = "coordinateSystem", type = {
6357      IntegerType.class }, order = 2, min = 1, max = 1, modifier = false, summary = true)
6358  @Description(shortDefinition = "Base number of coordinate system (0 for 0-based numbering or coordinates, inclusive start, exclusive end, 1 for 1-based numbering, inclusive start, inclusive end)", formalDefinition = "Whether the sequence is numbered starting at 0 (0-based numbering or coordinates, inclusive start, exclusive end) or starting at 1 (1-based numbering, inclusive start and inclusive end).")
6359  protected IntegerType coordinateSystem;
6360
6361  /**
6362   * The patient whose sequencing results are described by this resource.
6363   */
6364  @Child(name = "patient", type = { Patient.class }, order = 3, min = 0, max = 1, modifier = false, summary = true)
6365  @Description(shortDefinition = "Who and/or what this is about", formalDefinition = "The patient whose sequencing results are described by this resource.")
6366  protected Reference patient;
6367
6368  /**
6369   * The actual object that is the target of the reference (The patient whose
6370   * sequencing results are described by this resource.)
6371   */
6372  protected Patient patientTarget;
6373
6374  /**
6375   * Specimen used for sequencing.
6376   */
6377  @Child(name = "specimen", type = { Specimen.class }, order = 4, min = 0, max = 1, modifier = false, summary = true)
6378  @Description(shortDefinition = "Specimen used for sequencing", formalDefinition = "Specimen used for sequencing.")
6379  protected Reference specimen;
6380
6381  /**
6382   * The actual object that is the target of the reference (Specimen used for
6383   * sequencing.)
6384   */
6385  protected Specimen specimenTarget;
6386
6387  /**
6388   * The method for sequencing, for example, chip information.
6389   */
6390  @Child(name = "device", type = { Device.class }, order = 5, min = 0, max = 1, modifier = false, summary = true)
6391  @Description(shortDefinition = "The method for sequencing", formalDefinition = "The method for sequencing, for example, chip information.")
6392  protected Reference device;
6393
6394  /**
6395   * The actual object that is the target of the reference (The method for
6396   * sequencing, for example, chip information.)
6397   */
6398  protected Device deviceTarget;
6399
6400  /**
6401   * The organization or lab that should be responsible for this result.
6402   */
6403  @Child(name = "performer", type = {
6404      Organization.class }, order = 6, min = 0, max = 1, modifier = false, summary = true)
6405  @Description(shortDefinition = "Who should be responsible for test result", formalDefinition = "The organization or lab that should be responsible for this result.")
6406  protected Reference performer;
6407
6408  /**
6409   * The actual object that is the target of the reference (The organization or
6410   * lab that should be responsible for this result.)
6411   */
6412  protected Organization performerTarget;
6413
6414  /**
6415   * The number of copies of the sequence of interest. (RNASeq).
6416   */
6417  @Child(name = "quantity", type = { Quantity.class }, order = 7, min = 0, max = 1, modifier = false, summary = true)
6418  @Description(shortDefinition = "The number of copies of the sequence of interest.  (RNASeq)", formalDefinition = "The number of copies of the sequence of interest. (RNASeq).")
6419  protected Quantity quantity;
6420
6421  /**
6422   * A sequence that is used as a reference to describe variants that are present
6423   * in a sequence analyzed.
6424   */
6425  @Child(name = "referenceSeq", type = {}, order = 8, min = 0, max = 1, modifier = false, summary = true)
6426  @Description(shortDefinition = "A sequence used as reference", formalDefinition = "A sequence that is used as a reference to describe variants that are present in a sequence analyzed.")
6427  protected MolecularSequenceReferenceSeqComponent referenceSeq;
6428
6429  /**
6430   * The definition of variant here originates from Sequence ontology
6431   * ([variant_of](http://www.sequenceontology.org/browser/current_svn/term/variant_of)).
6432   * This element can represent amino acid or nucleic sequence change(including
6433   * insertion,deletion,SNP,etc.) It can represent some complex mutation or
6434   * segment variation with the assist of CIGAR string.
6435   */
6436  @Child(name = "variant", type = {}, order = 9, min = 0, max = Child.MAX_UNLIMITED, modifier = false, summary = true)
6437  @Description(shortDefinition = "Variant in sequence", formalDefinition = "The definition of variant here originates from Sequence ontology ([variant_of](http://www.sequenceontology.org/browser/current_svn/term/variant_of)). This element can represent amino acid or nucleic sequence change(including insertion,deletion,SNP,etc.)  It can represent some complex mutation or segment variation with the assist of CIGAR string.")
6438  protected List<MolecularSequenceVariantComponent> variant;
6439
6440  /**
6441   * Sequence that was observed. It is the result marked by referenceSeq along
6442   * with variant records on referenceSeq. This shall start from
6443   * referenceSeq.windowStart and end by referenceSeq.windowEnd.
6444   */
6445  @Child(name = "observedSeq", type = {
6446      StringType.class }, order = 10, min = 0, max = 1, modifier = false, summary = true)
6447  @Description(shortDefinition = "Sequence that was observed", formalDefinition = "Sequence that was observed. It is the result marked by referenceSeq along with variant records on referenceSeq. This shall start from referenceSeq.windowStart and end by referenceSeq.windowEnd.")
6448  protected StringType observedSeq;
6449
6450  /**
6451   * An experimental feature attribute that defines the quality of the feature in
6452   * a quantitative way, such as a phred quality score
6453   * ([SO:0001686](http://www.sequenceontology.org/browser/current_svn/term/SO:0001686)).
6454   */
6455  @Child(name = "quality", type = {}, order = 11, min = 0, max = Child.MAX_UNLIMITED, modifier = false, summary = true)
6456  @Description(shortDefinition = "An set of value as quality of sequence", formalDefinition = "An experimental feature attribute that defines the quality of the feature in a quantitative way, such as a phred quality score ([SO:0001686](http://www.sequenceontology.org/browser/current_svn/term/SO:0001686)).")
6457  protected List<MolecularSequenceQualityComponent> quality;
6458
6459  /**
6460   * Coverage (read depth or depth) is the average number of reads representing a
6461   * given nucleotide in the reconstructed sequence.
6462   */
6463  @Child(name = "readCoverage", type = {
6464      IntegerType.class }, order = 12, min = 0, max = 1, modifier = false, summary = true)
6465  @Description(shortDefinition = "Average number of reads representing a given nucleotide in the reconstructed sequence", formalDefinition = "Coverage (read depth or depth) is the average number of reads representing a given nucleotide in the reconstructed sequence.")
6466  protected IntegerType readCoverage;
6467
6468  /**
6469   * Configurations of the external repository. The repository shall store
6470   * target's observedSeq or records related with target's observedSeq.
6471   */
6472  @Child(name = "repository", type = {}, order = 13, min = 0, max = Child.MAX_UNLIMITED, modifier = false, summary = true)
6473  @Description(shortDefinition = "External repository which contains detailed report related with observedSeq in this resource", formalDefinition = "Configurations of the external repository. The repository shall store target's observedSeq or records related with target's observedSeq.")
6474  protected List<MolecularSequenceRepositoryComponent> repository;
6475
6476  /**
6477   * Pointer to next atomic sequence which at most contains one variant.
6478   */
6479  @Child(name = "pointer", type = {
6480      MolecularSequence.class }, order = 14, min = 0, max = Child.MAX_UNLIMITED, modifier = false, summary = true)
6481  @Description(shortDefinition = "Pointer to next atomic sequence", formalDefinition = "Pointer to next atomic sequence which at most contains one variant.")
6482  protected List<Reference> pointer;
6483  /**
6484   * The actual objects that are the target of the reference (Pointer to next
6485   * atomic sequence which at most contains one variant.)
6486   */
6487  protected List<MolecularSequence> pointerTarget;
6488
6489  /**
6490   * Information about chromosome structure variation.
6491   */
6492  @Child(name = "structureVariant", type = {}, order = 15, min = 0, max = Child.MAX_UNLIMITED, modifier = false, summary = true)
6493  @Description(shortDefinition = "Structural variant", formalDefinition = "Information about chromosome structure variation.")
6494  protected List<MolecularSequenceStructureVariantComponent> structureVariant;
6495
6496  private static final long serialVersionUID = -1541133500L;
6497
6498  /**
6499   * Constructor
6500   */
6501  public MolecularSequence() {
6502    super();
6503  }
6504
6505  /**
6506   * Constructor
6507   */
6508  public MolecularSequence(IntegerType coordinateSystem) {
6509    super();
6510    this.coordinateSystem = coordinateSystem;
6511  }
6512
6513  /**
6514   * @return {@link #identifier} (A unique identifier for this particular sequence
6515   *         instance. This is a FHIR-defined id.)
6516   */
6517  public List<Identifier> getIdentifier() {
6518    if (this.identifier == null)
6519      this.identifier = new ArrayList<Identifier>();
6520    return this.identifier;
6521  }
6522
6523  /**
6524   * @return Returns a reference to <code>this</code> for easy method chaining
6525   */
6526  public MolecularSequence setIdentifier(List<Identifier> theIdentifier) {
6527    this.identifier = theIdentifier;
6528    return this;
6529  }
6530
6531  public boolean hasIdentifier() {
6532    if (this.identifier == null)
6533      return false;
6534    for (Identifier item : this.identifier)
6535      if (!item.isEmpty())
6536        return true;
6537    return false;
6538  }
6539
6540  public Identifier addIdentifier() { // 3
6541    Identifier t = new Identifier();
6542    if (this.identifier == null)
6543      this.identifier = new ArrayList<Identifier>();
6544    this.identifier.add(t);
6545    return t;
6546  }
6547
6548  public MolecularSequence addIdentifier(Identifier t) { // 3
6549    if (t == null)
6550      return this;
6551    if (this.identifier == null)
6552      this.identifier = new ArrayList<Identifier>();
6553    this.identifier.add(t);
6554    return this;
6555  }
6556
6557  /**
6558   * @return The first repetition of repeating field {@link #identifier}, creating
6559   *         it if it does not already exist
6560   */
6561  public Identifier getIdentifierFirstRep() {
6562    if (getIdentifier().isEmpty()) {
6563      addIdentifier();
6564    }
6565    return getIdentifier().get(0);
6566  }
6567
6568  /**
6569   * @return {@link #type} (Amino Acid Sequence/ DNA Sequence / RNA Sequence.).
6570   *         This is the underlying object with id, value and extensions. The
6571   *         accessor "getType" gives direct access to the value
6572   */
6573  public Enumeration<SequenceType> getTypeElement() {
6574    if (this.type == null)
6575      if (Configuration.errorOnAutoCreate())
6576        throw new Error("Attempt to auto-create MolecularSequence.type");
6577      else if (Configuration.doAutoCreate())
6578        this.type = new Enumeration<SequenceType>(new SequenceTypeEnumFactory()); // bb
6579    return this.type;
6580  }
6581
6582  public boolean hasTypeElement() {
6583    return this.type != null && !this.type.isEmpty();
6584  }
6585
6586  public boolean hasType() {
6587    return this.type != null && !this.type.isEmpty();
6588  }
6589
6590  /**
6591   * @param value {@link #type} (Amino Acid Sequence/ DNA Sequence / RNA
6592   *              Sequence.). This is the underlying object with id, value and
6593   *              extensions. The accessor "getType" gives direct access to the
6594   *              value
6595   */
6596  public MolecularSequence setTypeElement(Enumeration<SequenceType> value) {
6597    this.type = value;
6598    return this;
6599  }
6600
6601  /**
6602   * @return Amino Acid Sequence/ DNA Sequence / RNA Sequence.
6603   */
6604  public SequenceType getType() {
6605    return this.type == null ? null : this.type.getValue();
6606  }
6607
6608  /**
6609   * @param value Amino Acid Sequence/ DNA Sequence / RNA Sequence.
6610   */
6611  public MolecularSequence setType(SequenceType value) {
6612    if (value == null)
6613      this.type = null;
6614    else {
6615      if (this.type == null)
6616        this.type = new Enumeration<SequenceType>(new SequenceTypeEnumFactory());
6617      this.type.setValue(value);
6618    }
6619    return this;
6620  }
6621
6622  /**
6623   * @return {@link #coordinateSystem} (Whether the sequence is numbered starting
6624   *         at 0 (0-based numbering or coordinates, inclusive start, exclusive
6625   *         end) or starting at 1 (1-based numbering, inclusive start and
6626   *         inclusive end).). This is the underlying object with id, value and
6627   *         extensions. The accessor "getCoordinateSystem" gives direct access to
6628   *         the value
6629   */
6630  public IntegerType getCoordinateSystemElement() {
6631    if (this.coordinateSystem == null)
6632      if (Configuration.errorOnAutoCreate())
6633        throw new Error("Attempt to auto-create MolecularSequence.coordinateSystem");
6634      else if (Configuration.doAutoCreate())
6635        this.coordinateSystem = new IntegerType(); // bb
6636    return this.coordinateSystem;
6637  }
6638
6639  public boolean hasCoordinateSystemElement() {
6640    return this.coordinateSystem != null && !this.coordinateSystem.isEmpty();
6641  }
6642
6643  public boolean hasCoordinateSystem() {
6644    return this.coordinateSystem != null && !this.coordinateSystem.isEmpty();
6645  }
6646
6647  /**
6648   * @param value {@link #coordinateSystem} (Whether the sequence is numbered
6649   *              starting at 0 (0-based numbering or coordinates, inclusive
6650   *              start, exclusive end) or starting at 1 (1-based numbering,
6651   *              inclusive start and inclusive end).). This is the underlying
6652   *              object with id, value and extensions. The accessor
6653   *              "getCoordinateSystem" gives direct access to the value
6654   */
6655  public MolecularSequence setCoordinateSystemElement(IntegerType value) {
6656    this.coordinateSystem = value;
6657    return this;
6658  }
6659
6660  /**
6661   * @return Whether the sequence is numbered starting at 0 (0-based numbering or
6662   *         coordinates, inclusive start, exclusive end) or starting at 1
6663   *         (1-based numbering, inclusive start and inclusive end).
6664   */
6665  public int getCoordinateSystem() {
6666    return this.coordinateSystem == null || this.coordinateSystem.isEmpty() ? 0 : this.coordinateSystem.getValue();
6667  }
6668
6669  /**
6670   * @param value Whether the sequence is numbered starting at 0 (0-based
6671   *              numbering or coordinates, inclusive start, exclusive end) or
6672   *              starting at 1 (1-based numbering, inclusive start and inclusive
6673   *              end).
6674   */
6675  public MolecularSequence setCoordinateSystem(int value) {
6676    if (this.coordinateSystem == null)
6677      this.coordinateSystem = new IntegerType();
6678    this.coordinateSystem.setValue(value);
6679    return this;
6680  }
6681
6682  /**
6683   * @return {@link #patient} (The patient whose sequencing results are described
6684   *         by this resource.)
6685   */
6686  public Reference getPatient() {
6687    if (this.patient == null)
6688      if (Configuration.errorOnAutoCreate())
6689        throw new Error("Attempt to auto-create MolecularSequence.patient");
6690      else if (Configuration.doAutoCreate())
6691        this.patient = new Reference(); // cc
6692    return this.patient;
6693  }
6694
6695  public boolean hasPatient() {
6696    return this.patient != null && !this.patient.isEmpty();
6697  }
6698
6699  /**
6700   * @param value {@link #patient} (The patient whose sequencing results are
6701   *              described by this resource.)
6702   */
6703  public MolecularSequence setPatient(Reference value) {
6704    this.patient = value;
6705    return this;
6706  }
6707
6708  /**
6709   * @return {@link #patient} The actual object that is the target of the
6710   *         reference. The reference library doesn't populate this, but you can
6711   *         use it to hold the resource if you resolve it. (The patient whose
6712   *         sequencing results are described by this resource.)
6713   */
6714  public Patient getPatientTarget() {
6715    if (this.patientTarget == null)
6716      if (Configuration.errorOnAutoCreate())
6717        throw new Error("Attempt to auto-create MolecularSequence.patient");
6718      else if (Configuration.doAutoCreate())
6719        this.patientTarget = new Patient(); // aa
6720    return this.patientTarget;
6721  }
6722
6723  /**
6724   * @param value {@link #patient} The actual object that is the target of the
6725   *              reference. The reference library doesn't use these, but you can
6726   *              use it to hold the resource if you resolve it. (The patient
6727   *              whose sequencing results are described by this resource.)
6728   */
6729  public MolecularSequence setPatientTarget(Patient value) {
6730    this.patientTarget = value;
6731    return this;
6732  }
6733
6734  /**
6735   * @return {@link #specimen} (Specimen used for sequencing.)
6736   */
6737  public Reference getSpecimen() {
6738    if (this.specimen == null)
6739      if (Configuration.errorOnAutoCreate())
6740        throw new Error("Attempt to auto-create MolecularSequence.specimen");
6741      else if (Configuration.doAutoCreate())
6742        this.specimen = new Reference(); // cc
6743    return this.specimen;
6744  }
6745
6746  public boolean hasSpecimen() {
6747    return this.specimen != null && !this.specimen.isEmpty();
6748  }
6749
6750  /**
6751   * @param value {@link #specimen} (Specimen used for sequencing.)
6752   */
6753  public MolecularSequence setSpecimen(Reference value) {
6754    this.specimen = value;
6755    return this;
6756  }
6757
6758  /**
6759   * @return {@link #specimen} The actual object that is the target of the
6760   *         reference. The reference library doesn't populate this, but you can
6761   *         use it to hold the resource if you resolve it. (Specimen used for
6762   *         sequencing.)
6763   */
6764  public Specimen getSpecimenTarget() {
6765    if (this.specimenTarget == null)
6766      if (Configuration.errorOnAutoCreate())
6767        throw new Error("Attempt to auto-create MolecularSequence.specimen");
6768      else if (Configuration.doAutoCreate())
6769        this.specimenTarget = new Specimen(); // aa
6770    return this.specimenTarget;
6771  }
6772
6773  /**
6774   * @param value {@link #specimen} The actual object that is the target of the
6775   *              reference. The reference library doesn't use these, but you can
6776   *              use it to hold the resource if you resolve it. (Specimen used
6777   *              for sequencing.)
6778   */
6779  public MolecularSequence setSpecimenTarget(Specimen value) {
6780    this.specimenTarget = value;
6781    return this;
6782  }
6783
6784  /**
6785   * @return {@link #device} (The method for sequencing, for example, chip
6786   *         information.)
6787   */
6788  public Reference getDevice() {
6789    if (this.device == null)
6790      if (Configuration.errorOnAutoCreate())
6791        throw new Error("Attempt to auto-create MolecularSequence.device");
6792      else if (Configuration.doAutoCreate())
6793        this.device = new Reference(); // cc
6794    return this.device;
6795  }
6796
6797  public boolean hasDevice() {
6798    return this.device != null && !this.device.isEmpty();
6799  }
6800
6801  /**
6802   * @param value {@link #device} (The method for sequencing, for example, chip
6803   *              information.)
6804   */
6805  public MolecularSequence setDevice(Reference value) {
6806    this.device = value;
6807    return this;
6808  }
6809
6810  /**
6811   * @return {@link #device} The actual object that is the target of the
6812   *         reference. The reference library doesn't populate this, but you can
6813   *         use it to hold the resource if you resolve it. (The method for
6814   *         sequencing, for example, chip information.)
6815   */
6816  public Device getDeviceTarget() {
6817    if (this.deviceTarget == null)
6818      if (Configuration.errorOnAutoCreate())
6819        throw new Error("Attempt to auto-create MolecularSequence.device");
6820      else if (Configuration.doAutoCreate())
6821        this.deviceTarget = new Device(); // aa
6822    return this.deviceTarget;
6823  }
6824
6825  /**
6826   * @param value {@link #device} The actual object that is the target of the
6827   *              reference. The reference library doesn't use these, but you can
6828   *              use it to hold the resource if you resolve it. (The method for
6829   *              sequencing, for example, chip information.)
6830   */
6831  public MolecularSequence setDeviceTarget(Device value) {
6832    this.deviceTarget = value;
6833    return this;
6834  }
6835
6836  /**
6837   * @return {@link #performer} (The organization or lab that should be
6838   *         responsible for this result.)
6839   */
6840  public Reference getPerformer() {
6841    if (this.performer == null)
6842      if (Configuration.errorOnAutoCreate())
6843        throw new Error("Attempt to auto-create MolecularSequence.performer");
6844      else if (Configuration.doAutoCreate())
6845        this.performer = new Reference(); // cc
6846    return this.performer;
6847  }
6848
6849  public boolean hasPerformer() {
6850    return this.performer != null && !this.performer.isEmpty();
6851  }
6852
6853  /**
6854   * @param value {@link #performer} (The organization or lab that should be
6855   *              responsible for this result.)
6856   */
6857  public MolecularSequence setPerformer(Reference value) {
6858    this.performer = value;
6859    return this;
6860  }
6861
6862  /**
6863   * @return {@link #performer} The actual object that is the target of the
6864   *         reference. The reference library doesn't populate this, but you can
6865   *         use it to hold the resource if you resolve it. (The organization or
6866   *         lab that should be responsible for this result.)
6867   */
6868  public Organization getPerformerTarget() {
6869    if (this.performerTarget == null)
6870      if (Configuration.errorOnAutoCreate())
6871        throw new Error("Attempt to auto-create MolecularSequence.performer");
6872      else if (Configuration.doAutoCreate())
6873        this.performerTarget = new Organization(); // aa
6874    return this.performerTarget;
6875  }
6876
6877  /**
6878   * @param value {@link #performer} The actual object that is the target of the
6879   *              reference. The reference library doesn't use these, but you can
6880   *              use it to hold the resource if you resolve it. (The organization
6881   *              or lab that should be responsible for this result.)
6882   */
6883  public MolecularSequence setPerformerTarget(Organization value) {
6884    this.performerTarget = value;
6885    return this;
6886  }
6887
6888  /**
6889   * @return {@link #quantity} (The number of copies of the sequence of interest.
6890   *         (RNASeq).)
6891   */
6892  public Quantity getQuantity() {
6893    if (this.quantity == null)
6894      if (Configuration.errorOnAutoCreate())
6895        throw new Error("Attempt to auto-create MolecularSequence.quantity");
6896      else if (Configuration.doAutoCreate())
6897        this.quantity = new Quantity(); // cc
6898    return this.quantity;
6899  }
6900
6901  public boolean hasQuantity() {
6902    return this.quantity != null && !this.quantity.isEmpty();
6903  }
6904
6905  /**
6906   * @param value {@link #quantity} (The number of copies of the sequence of
6907   *              interest. (RNASeq).)
6908   */
6909  public MolecularSequence setQuantity(Quantity value) {
6910    this.quantity = value;
6911    return this;
6912  }
6913
6914  /**
6915   * @return {@link #referenceSeq} (A sequence that is used as a reference to
6916   *         describe variants that are present in a sequence analyzed.)
6917   */
6918  public MolecularSequenceReferenceSeqComponent getReferenceSeq() {
6919    if (this.referenceSeq == null)
6920      if (Configuration.errorOnAutoCreate())
6921        throw new Error("Attempt to auto-create MolecularSequence.referenceSeq");
6922      else if (Configuration.doAutoCreate())
6923        this.referenceSeq = new MolecularSequenceReferenceSeqComponent(); // cc
6924    return this.referenceSeq;
6925  }
6926
6927  public boolean hasReferenceSeq() {
6928    return this.referenceSeq != null && !this.referenceSeq.isEmpty();
6929  }
6930
6931  /**
6932   * @param value {@link #referenceSeq} (A sequence that is used as a reference to
6933   *              describe variants that are present in a sequence analyzed.)
6934   */
6935  public MolecularSequence setReferenceSeq(MolecularSequenceReferenceSeqComponent value) {
6936    this.referenceSeq = value;
6937    return this;
6938  }
6939
6940  /**
6941   * @return {@link #variant} (The definition of variant here originates from
6942   *         Sequence ontology
6943   *         ([variant_of](http://www.sequenceontology.org/browser/current_svn/term/variant_of)).
6944   *         This element can represent amino acid or nucleic sequence
6945   *         change(including insertion,deletion,SNP,etc.) It can represent some
6946   *         complex mutation or segment variation with the assist of CIGAR
6947   *         string.)
6948   */
6949  public List<MolecularSequenceVariantComponent> getVariant() {
6950    if (this.variant == null)
6951      this.variant = new ArrayList<MolecularSequenceVariantComponent>();
6952    return this.variant;
6953  }
6954
6955  /**
6956   * @return Returns a reference to <code>this</code> for easy method chaining
6957   */
6958  public MolecularSequence setVariant(List<MolecularSequenceVariantComponent> theVariant) {
6959    this.variant = theVariant;
6960    return this;
6961  }
6962
6963  public boolean hasVariant() {
6964    if (this.variant == null)
6965      return false;
6966    for (MolecularSequenceVariantComponent item : this.variant)
6967      if (!item.isEmpty())
6968        return true;
6969    return false;
6970  }
6971
6972  public MolecularSequenceVariantComponent addVariant() { // 3
6973    MolecularSequenceVariantComponent t = new MolecularSequenceVariantComponent();
6974    if (this.variant == null)
6975      this.variant = new ArrayList<MolecularSequenceVariantComponent>();
6976    this.variant.add(t);
6977    return t;
6978  }
6979
6980  public MolecularSequence addVariant(MolecularSequenceVariantComponent t) { // 3
6981    if (t == null)
6982      return this;
6983    if (this.variant == null)
6984      this.variant = new ArrayList<MolecularSequenceVariantComponent>();
6985    this.variant.add(t);
6986    return this;
6987  }
6988
6989  /**
6990   * @return The first repetition of repeating field {@link #variant}, creating it
6991   *         if it does not already exist
6992   */
6993  public MolecularSequenceVariantComponent getVariantFirstRep() {
6994    if (getVariant().isEmpty()) {
6995      addVariant();
6996    }
6997    return getVariant().get(0);
6998  }
6999
7000  /**
7001   * @return {@link #observedSeq} (Sequence that was observed. It is the result
7002   *         marked by referenceSeq along with variant records on referenceSeq.
7003   *         This shall start from referenceSeq.windowStart and end by
7004   *         referenceSeq.windowEnd.). This is the underlying object with id,
7005   *         value and extensions. The accessor "getObservedSeq" gives direct
7006   *         access to the value
7007   */
7008  public StringType getObservedSeqElement() {
7009    if (this.observedSeq == null)
7010      if (Configuration.errorOnAutoCreate())
7011        throw new Error("Attempt to auto-create MolecularSequence.observedSeq");
7012      else if (Configuration.doAutoCreate())
7013        this.observedSeq = new StringType(); // bb
7014    return this.observedSeq;
7015  }
7016
7017  public boolean hasObservedSeqElement() {
7018    return this.observedSeq != null && !this.observedSeq.isEmpty();
7019  }
7020
7021  public boolean hasObservedSeq() {
7022    return this.observedSeq != null && !this.observedSeq.isEmpty();
7023  }
7024
7025  /**
7026   * @param value {@link #observedSeq} (Sequence that was observed. It is the
7027   *              result marked by referenceSeq along with variant records on
7028   *              referenceSeq. This shall start from referenceSeq.windowStart and
7029   *              end by referenceSeq.windowEnd.). This is the underlying object
7030   *              with id, value and extensions. The accessor "getObservedSeq"
7031   *              gives direct access to the value
7032   */
7033  public MolecularSequence setObservedSeqElement(StringType value) {
7034    this.observedSeq = value;
7035    return this;
7036  }
7037
7038  /**
7039   * @return Sequence that was observed. It is the result marked by referenceSeq
7040   *         along with variant records on referenceSeq. This shall start from
7041   *         referenceSeq.windowStart and end by referenceSeq.windowEnd.
7042   */
7043  public String getObservedSeq() {
7044    return this.observedSeq == null ? null : this.observedSeq.getValue();
7045  }
7046
7047  /**
7048   * @param value Sequence that was observed. It is the result marked by
7049   *              referenceSeq along with variant records on referenceSeq. This
7050   *              shall start from referenceSeq.windowStart and end by
7051   *              referenceSeq.windowEnd.
7052   */
7053  public MolecularSequence setObservedSeq(String value) {
7054    if (Utilities.noString(value))
7055      this.observedSeq = null;
7056    else {
7057      if (this.observedSeq == null)
7058        this.observedSeq = new StringType();
7059      this.observedSeq.setValue(value);
7060    }
7061    return this;
7062  }
7063
7064  /**
7065   * @return {@link #quality} (An experimental feature attribute that defines the
7066   *         quality of the feature in a quantitative way, such as a phred quality
7067   *         score
7068   *         ([SO:0001686](http://www.sequenceontology.org/browser/current_svn/term/SO:0001686)).)
7069   */
7070  public List<MolecularSequenceQualityComponent> getQuality() {
7071    if (this.quality == null)
7072      this.quality = new ArrayList<MolecularSequenceQualityComponent>();
7073    return this.quality;
7074  }
7075
7076  /**
7077   * @return Returns a reference to <code>this</code> for easy method chaining
7078   */
7079  public MolecularSequence setQuality(List<MolecularSequenceQualityComponent> theQuality) {
7080    this.quality = theQuality;
7081    return this;
7082  }
7083
7084  public boolean hasQuality() {
7085    if (this.quality == null)
7086      return false;
7087    for (MolecularSequenceQualityComponent item : this.quality)
7088      if (!item.isEmpty())
7089        return true;
7090    return false;
7091  }
7092
7093  public MolecularSequenceQualityComponent addQuality() { // 3
7094    MolecularSequenceQualityComponent t = new MolecularSequenceQualityComponent();
7095    if (this.quality == null)
7096      this.quality = new ArrayList<MolecularSequenceQualityComponent>();
7097    this.quality.add(t);
7098    return t;
7099  }
7100
7101  public MolecularSequence addQuality(MolecularSequenceQualityComponent t) { // 3
7102    if (t == null)
7103      return this;
7104    if (this.quality == null)
7105      this.quality = new ArrayList<MolecularSequenceQualityComponent>();
7106    this.quality.add(t);
7107    return this;
7108  }
7109
7110  /**
7111   * @return The first repetition of repeating field {@link #quality}, creating it
7112   *         if it does not already exist
7113   */
7114  public MolecularSequenceQualityComponent getQualityFirstRep() {
7115    if (getQuality().isEmpty()) {
7116      addQuality();
7117    }
7118    return getQuality().get(0);
7119  }
7120
7121  /**
7122   * @return {@link #readCoverage} (Coverage (read depth or depth) is the average
7123   *         number of reads representing a given nucleotide in the reconstructed
7124   *         sequence.). This is the underlying object with id, value and
7125   *         extensions. The accessor "getReadCoverage" gives direct access to the
7126   *         value
7127   */
7128  public IntegerType getReadCoverageElement() {
7129    if (this.readCoverage == null)
7130      if (Configuration.errorOnAutoCreate())
7131        throw new Error("Attempt to auto-create MolecularSequence.readCoverage");
7132      else if (Configuration.doAutoCreate())
7133        this.readCoverage = new IntegerType(); // bb
7134    return this.readCoverage;
7135  }
7136
7137  public boolean hasReadCoverageElement() {
7138    return this.readCoverage != null && !this.readCoverage.isEmpty();
7139  }
7140
7141  public boolean hasReadCoverage() {
7142    return this.readCoverage != null && !this.readCoverage.isEmpty();
7143  }
7144
7145  /**
7146   * @param value {@link #readCoverage} (Coverage (read depth or depth) is the
7147   *              average number of reads representing a given nucleotide in the
7148   *              reconstructed sequence.). This is the underlying object with id,
7149   *              value and extensions. The accessor "getReadCoverage" gives
7150   *              direct access to the value
7151   */
7152  public MolecularSequence setReadCoverageElement(IntegerType value) {
7153    this.readCoverage = value;
7154    return this;
7155  }
7156
7157  /**
7158   * @return Coverage (read depth or depth) is the average number of reads
7159   *         representing a given nucleotide in the reconstructed sequence.
7160   */
7161  public int getReadCoverage() {
7162    return this.readCoverage == null || this.readCoverage.isEmpty() ? 0 : this.readCoverage.getValue();
7163  }
7164
7165  /**
7166   * @param value Coverage (read depth or depth) is the average number of reads
7167   *              representing a given nucleotide in the reconstructed sequence.
7168   */
7169  public MolecularSequence setReadCoverage(int value) {
7170    if (this.readCoverage == null)
7171      this.readCoverage = new IntegerType();
7172    this.readCoverage.setValue(value);
7173    return this;
7174  }
7175
7176  /**
7177   * @return {@link #repository} (Configurations of the external repository. The
7178   *         repository shall store target's observedSeq or records related with
7179   *         target's observedSeq.)
7180   */
7181  public List<MolecularSequenceRepositoryComponent> getRepository() {
7182    if (this.repository == null)
7183      this.repository = new ArrayList<MolecularSequenceRepositoryComponent>();
7184    return this.repository;
7185  }
7186
7187  /**
7188   * @return Returns a reference to <code>this</code> for easy method chaining
7189   */
7190  public MolecularSequence setRepository(List<MolecularSequenceRepositoryComponent> theRepository) {
7191    this.repository = theRepository;
7192    return this;
7193  }
7194
7195  public boolean hasRepository() {
7196    if (this.repository == null)
7197      return false;
7198    for (MolecularSequenceRepositoryComponent item : this.repository)
7199      if (!item.isEmpty())
7200        return true;
7201    return false;
7202  }
7203
7204  public MolecularSequenceRepositoryComponent addRepository() { // 3
7205    MolecularSequenceRepositoryComponent t = new MolecularSequenceRepositoryComponent();
7206    if (this.repository == null)
7207      this.repository = new ArrayList<MolecularSequenceRepositoryComponent>();
7208    this.repository.add(t);
7209    return t;
7210  }
7211
7212  public MolecularSequence addRepository(MolecularSequenceRepositoryComponent t) { // 3
7213    if (t == null)
7214      return this;
7215    if (this.repository == null)
7216      this.repository = new ArrayList<MolecularSequenceRepositoryComponent>();
7217    this.repository.add(t);
7218    return this;
7219  }
7220
7221  /**
7222   * @return The first repetition of repeating field {@link #repository}, creating
7223   *         it if it does not already exist
7224   */
7225  public MolecularSequenceRepositoryComponent getRepositoryFirstRep() {
7226    if (getRepository().isEmpty()) {
7227      addRepository();
7228    }
7229    return getRepository().get(0);
7230  }
7231
7232  /**
7233   * @return {@link #pointer} (Pointer to next atomic sequence which at most
7234   *         contains one variant.)
7235   */
7236  public List<Reference> getPointer() {
7237    if (this.pointer == null)
7238      this.pointer = new ArrayList<Reference>();
7239    return this.pointer;
7240  }
7241
7242  /**
7243   * @return Returns a reference to <code>this</code> for easy method chaining
7244   */
7245  public MolecularSequence setPointer(List<Reference> thePointer) {
7246    this.pointer = thePointer;
7247    return this;
7248  }
7249
7250  public boolean hasPointer() {
7251    if (this.pointer == null)
7252      return false;
7253    for (Reference item : this.pointer)
7254      if (!item.isEmpty())
7255        return true;
7256    return false;
7257  }
7258
7259  public Reference addPointer() { // 3
7260    Reference t = new Reference();
7261    if (this.pointer == null)
7262      this.pointer = new ArrayList<Reference>();
7263    this.pointer.add(t);
7264    return t;
7265  }
7266
7267  public MolecularSequence addPointer(Reference t) { // 3
7268    if (t == null)
7269      return this;
7270    if (this.pointer == null)
7271      this.pointer = new ArrayList<Reference>();
7272    this.pointer.add(t);
7273    return this;
7274  }
7275
7276  /**
7277   * @return The first repetition of repeating field {@link #pointer}, creating it
7278   *         if it does not already exist
7279   */
7280  public Reference getPointerFirstRep() {
7281    if (getPointer().isEmpty()) {
7282      addPointer();
7283    }
7284    return getPointer().get(0);
7285  }
7286
7287  /**
7288   * @deprecated Use Reference#setResource(IBaseResource) instead
7289   */
7290  @Deprecated
7291  public List<MolecularSequence> getPointerTarget() {
7292    if (this.pointerTarget == null)
7293      this.pointerTarget = new ArrayList<MolecularSequence>();
7294    return this.pointerTarget;
7295  }
7296
7297  /**
7298   * @deprecated Use Reference#setResource(IBaseResource) instead
7299   */
7300  @Deprecated
7301  public MolecularSequence addPointerTarget() {
7302    MolecularSequence r = new MolecularSequence();
7303    if (this.pointerTarget == null)
7304      this.pointerTarget = new ArrayList<MolecularSequence>();
7305    this.pointerTarget.add(r);
7306    return r;
7307  }
7308
7309  /**
7310   * @return {@link #structureVariant} (Information about chromosome structure
7311   *         variation.)
7312   */
7313  public List<MolecularSequenceStructureVariantComponent> getStructureVariant() {
7314    if (this.structureVariant == null)
7315      this.structureVariant = new ArrayList<MolecularSequenceStructureVariantComponent>();
7316    return this.structureVariant;
7317  }
7318
7319  /**
7320   * @return Returns a reference to <code>this</code> for easy method chaining
7321   */
7322  public MolecularSequence setStructureVariant(List<MolecularSequenceStructureVariantComponent> theStructureVariant) {
7323    this.structureVariant = theStructureVariant;
7324    return this;
7325  }
7326
7327  public boolean hasStructureVariant() {
7328    if (this.structureVariant == null)
7329      return false;
7330    for (MolecularSequenceStructureVariantComponent item : this.structureVariant)
7331      if (!item.isEmpty())
7332        return true;
7333    return false;
7334  }
7335
7336  public MolecularSequenceStructureVariantComponent addStructureVariant() { // 3
7337    MolecularSequenceStructureVariantComponent t = new MolecularSequenceStructureVariantComponent();
7338    if (this.structureVariant == null)
7339      this.structureVariant = new ArrayList<MolecularSequenceStructureVariantComponent>();
7340    this.structureVariant.add(t);
7341    return t;
7342  }
7343
7344  public MolecularSequence addStructureVariant(MolecularSequenceStructureVariantComponent t) { // 3
7345    if (t == null)
7346      return this;
7347    if (this.structureVariant == null)
7348      this.structureVariant = new ArrayList<MolecularSequenceStructureVariantComponent>();
7349    this.structureVariant.add(t);
7350    return this;
7351  }
7352
7353  /**
7354   * @return The first repetition of repeating field {@link #structureVariant},
7355   *         creating it if it does not already exist
7356   */
7357  public MolecularSequenceStructureVariantComponent getStructureVariantFirstRep() {
7358    if (getStructureVariant().isEmpty()) {
7359      addStructureVariant();
7360    }
7361    return getStructureVariant().get(0);
7362  }
7363
7364  protected void listChildren(List<Property> children) {
7365    super.listChildren(children);
7366    children.add(new Property("identifier", "Identifier",
7367        "A unique identifier for this particular sequence instance. This is a FHIR-defined id.", 0,
7368        java.lang.Integer.MAX_VALUE, identifier));
7369    children.add(new Property("type", "code", "Amino Acid Sequence/ DNA Sequence / RNA Sequence.", 0, 1, type));
7370    children.add(new Property("coordinateSystem", "integer",
7371        "Whether the sequence is numbered starting at 0 (0-based numbering or coordinates, inclusive start, exclusive end) or starting at 1 (1-based numbering, inclusive start and inclusive end).",
7372        0, 1, coordinateSystem));
7373    children.add(new Property("patient", "Reference(Patient)",
7374        "The patient whose sequencing results are described by this resource.", 0, 1, patient));
7375    children.add(new Property("specimen", "Reference(Specimen)", "Specimen used for sequencing.", 0, 1, specimen));
7376    children.add(new Property("device", "Reference(Device)",
7377        "The method for sequencing, for example, chip information.", 0, 1, device));
7378    children.add(new Property("performer", "Reference(Organization)",
7379        "The organization or lab that should be responsible for this result.", 0, 1, performer));
7380    children.add(new Property("quantity", "Quantity", "The number of copies of the sequence of interest. (RNASeq).", 0,
7381        1, quantity));
7382    children.add(new Property("referenceSeq", "",
7383        "A sequence that is used as a reference to describe variants that are present in a sequence analyzed.", 0, 1,
7384        referenceSeq));
7385    children.add(new Property("variant", "",
7386        "The definition of variant here originates from Sequence ontology ([variant_of](http://www.sequenceontology.org/browser/current_svn/term/variant_of)). This element can represent amino acid or nucleic sequence change(including insertion,deletion,SNP,etc.)  It can represent some complex mutation or segment variation with the assist of CIGAR string.",
7387        0, java.lang.Integer.MAX_VALUE, variant));
7388    children.add(new Property("observedSeq", "string",
7389        "Sequence that was observed. It is the result marked by referenceSeq along with variant records on referenceSeq. This shall start from referenceSeq.windowStart and end by referenceSeq.windowEnd.",
7390        0, 1, observedSeq));
7391    children.add(new Property("quality", "",
7392        "An experimental feature attribute that defines the quality of the feature in a quantitative way, such as a phred quality score ([SO:0001686](http://www.sequenceontology.org/browser/current_svn/term/SO:0001686)).",
7393        0, java.lang.Integer.MAX_VALUE, quality));
7394    children.add(new Property("readCoverage", "integer",
7395        "Coverage (read depth or depth) is the average number of reads representing a given nucleotide in the reconstructed sequence.",
7396        0, 1, readCoverage));
7397    children.add(new Property("repository", "",
7398        "Configurations of the external repository. The repository shall store target's observedSeq or records related with target's observedSeq.",
7399        0, java.lang.Integer.MAX_VALUE, repository));
7400    children.add(new Property("pointer", "Reference(MolecularSequence)",
7401        "Pointer to next atomic sequence which at most contains one variant.", 0, java.lang.Integer.MAX_VALUE,
7402        pointer));
7403    children.add(new Property("structureVariant", "", "Information about chromosome structure variation.", 0,
7404        java.lang.Integer.MAX_VALUE, structureVariant));
7405  }
7406
7407  @Override
7408  public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
7409    switch (_hash) {
7410    case -1618432855:
7411      /* identifier */ return new Property("identifier", "Identifier",
7412          "A unique identifier for this particular sequence instance. This is a FHIR-defined id.", 0,
7413          java.lang.Integer.MAX_VALUE, identifier);
7414    case 3575610:
7415      /* type */ return new Property("type", "code", "Amino Acid Sequence/ DNA Sequence / RNA Sequence.", 0, 1, type);
7416    case 354212295:
7417      /* coordinateSystem */ return new Property("coordinateSystem", "integer",
7418          "Whether the sequence is numbered starting at 0 (0-based numbering or coordinates, inclusive start, exclusive end) or starting at 1 (1-based numbering, inclusive start and inclusive end).",
7419          0, 1, coordinateSystem);
7420    case -791418107:
7421      /* patient */ return new Property("patient", "Reference(Patient)",
7422          "The patient whose sequencing results are described by this resource.", 0, 1, patient);
7423    case -2132868344:
7424      /* specimen */ return new Property("specimen", "Reference(Specimen)", "Specimen used for sequencing.", 0, 1,
7425          specimen);
7426    case -1335157162:
7427      /* device */ return new Property("device", "Reference(Device)",
7428          "The method for sequencing, for example, chip information.", 0, 1, device);
7429    case 481140686:
7430      /* performer */ return new Property("performer", "Reference(Organization)",
7431          "The organization or lab that should be responsible for this result.", 0, 1, performer);
7432    case -1285004149:
7433      /* quantity */ return new Property("quantity", "Quantity",
7434          "The number of copies of the sequence of interest. (RNASeq).", 0, 1, quantity);
7435    case -502547180:
7436      /* referenceSeq */ return new Property("referenceSeq", "",
7437          "A sequence that is used as a reference to describe variants that are present in a sequence analyzed.", 0, 1,
7438          referenceSeq);
7439    case 236785797:
7440      /* variant */ return new Property("variant", "",
7441          "The definition of variant here originates from Sequence ontology ([variant_of](http://www.sequenceontology.org/browser/current_svn/term/variant_of)). This element can represent amino acid or nucleic sequence change(including insertion,deletion,SNP,etc.)  It can represent some complex mutation or segment variation with the assist of CIGAR string.",
7442          0, java.lang.Integer.MAX_VALUE, variant);
7443    case 125541495:
7444      /* observedSeq */ return new Property("observedSeq", "string",
7445          "Sequence that was observed. It is the result marked by referenceSeq along with variant records on referenceSeq. This shall start from referenceSeq.windowStart and end by referenceSeq.windowEnd.",
7446          0, 1, observedSeq);
7447    case 651215103:
7448      /* quality */ return new Property("quality", "",
7449          "An experimental feature attribute that defines the quality of the feature in a quantitative way, such as a phred quality score ([SO:0001686](http://www.sequenceontology.org/browser/current_svn/term/SO:0001686)).",
7450          0, java.lang.Integer.MAX_VALUE, quality);
7451    case -1798816354:
7452      /* readCoverage */ return new Property("readCoverage", "integer",
7453          "Coverage (read depth or depth) is the average number of reads representing a given nucleotide in the reconstructed sequence.",
7454          0, 1, readCoverage);
7455    case 1950800714:
7456      /* repository */ return new Property("repository", "",
7457          "Configurations of the external repository. The repository shall store target's observedSeq or records related with target's observedSeq.",
7458          0, java.lang.Integer.MAX_VALUE, repository);
7459    case -400605635:
7460      /* pointer */ return new Property("pointer", "Reference(MolecularSequence)",
7461          "Pointer to next atomic sequence which at most contains one variant.", 0, java.lang.Integer.MAX_VALUE,
7462          pointer);
7463    case 757269394:
7464      /* structureVariant */ return new Property("structureVariant", "",
7465          "Information about chromosome structure variation.", 0, java.lang.Integer.MAX_VALUE, structureVariant);
7466    default:
7467      return super.getNamedProperty(_hash, _name, _checkValid);
7468    }
7469
7470  }
7471
7472  @Override
7473  public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
7474    switch (hash) {
7475    case -1618432855:
7476      /* identifier */ return this.identifier == null ? new Base[0]
7477          : this.identifier.toArray(new Base[this.identifier.size()]); // Identifier
7478    case 3575610:
7479      /* type */ return this.type == null ? new Base[0] : new Base[] { this.type }; // Enumeration<SequenceType>
7480    case 354212295:
7481      /* coordinateSystem */ return this.coordinateSystem == null ? new Base[0] : new Base[] { this.coordinateSystem }; // IntegerType
7482    case -791418107:
7483      /* patient */ return this.patient == null ? new Base[0] : new Base[] { this.patient }; // Reference
7484    case -2132868344:
7485      /* specimen */ return this.specimen == null ? new Base[0] : new Base[] { this.specimen }; // Reference
7486    case -1335157162:
7487      /* device */ return this.device == null ? new Base[0] : new Base[] { this.device }; // Reference
7488    case 481140686:
7489      /* performer */ return this.performer == null ? new Base[0] : new Base[] { this.performer }; // Reference
7490    case -1285004149:
7491      /* quantity */ return this.quantity == null ? new Base[0] : new Base[] { this.quantity }; // Quantity
7492    case -502547180:
7493      /* referenceSeq */ return this.referenceSeq == null ? new Base[0] : new Base[] { this.referenceSeq }; // MolecularSequenceReferenceSeqComponent
7494    case 236785797:
7495      /* variant */ return this.variant == null ? new Base[0] : this.variant.toArray(new Base[this.variant.size()]); // MolecularSequenceVariantComponent
7496    case 125541495:
7497      /* observedSeq */ return this.observedSeq == null ? new Base[0] : new Base[] { this.observedSeq }; // StringType
7498    case 651215103:
7499      /* quality */ return this.quality == null ? new Base[0] : this.quality.toArray(new Base[this.quality.size()]); // MolecularSequenceQualityComponent
7500    case -1798816354:
7501      /* readCoverage */ return this.readCoverage == null ? new Base[0] : new Base[] { this.readCoverage }; // IntegerType
7502    case 1950800714:
7503      /* repository */ return this.repository == null ? new Base[0]
7504          : this.repository.toArray(new Base[this.repository.size()]); // MolecularSequenceRepositoryComponent
7505    case -400605635:
7506      /* pointer */ return this.pointer == null ? new Base[0] : this.pointer.toArray(new Base[this.pointer.size()]); // Reference
7507    case 757269394:
7508      /* structureVariant */ return this.structureVariant == null ? new Base[0]
7509          : this.structureVariant.toArray(new Base[this.structureVariant.size()]); // MolecularSequenceStructureVariantComponent
7510    default:
7511      return super.getProperty(hash, name, checkValid);
7512    }
7513
7514  }
7515
7516  @Override
7517  public Base setProperty(int hash, String name, Base value) throws FHIRException {
7518    switch (hash) {
7519    case -1618432855: // identifier
7520      this.getIdentifier().add(castToIdentifier(value)); // Identifier
7521      return value;
7522    case 3575610: // type
7523      value = new SequenceTypeEnumFactory().fromType(castToCode(value));
7524      this.type = (Enumeration) value; // Enumeration<SequenceType>
7525      return value;
7526    case 354212295: // coordinateSystem
7527      this.coordinateSystem = castToInteger(value); // IntegerType
7528      return value;
7529    case -791418107: // patient
7530      this.patient = castToReference(value); // Reference
7531      return value;
7532    case -2132868344: // specimen
7533      this.specimen = castToReference(value); // Reference
7534      return value;
7535    case -1335157162: // device
7536      this.device = castToReference(value); // Reference
7537      return value;
7538    case 481140686: // performer
7539      this.performer = castToReference(value); // Reference
7540      return value;
7541    case -1285004149: // quantity
7542      this.quantity = castToQuantity(value); // Quantity
7543      return value;
7544    case -502547180: // referenceSeq
7545      this.referenceSeq = (MolecularSequenceReferenceSeqComponent) value; // MolecularSequenceReferenceSeqComponent
7546      return value;
7547    case 236785797: // variant
7548      this.getVariant().add((MolecularSequenceVariantComponent) value); // MolecularSequenceVariantComponent
7549      return value;
7550    case 125541495: // observedSeq
7551      this.observedSeq = castToString(value); // StringType
7552      return value;
7553    case 651215103: // quality
7554      this.getQuality().add((MolecularSequenceQualityComponent) value); // MolecularSequenceQualityComponent
7555      return value;
7556    case -1798816354: // readCoverage
7557      this.readCoverage = castToInteger(value); // IntegerType
7558      return value;
7559    case 1950800714: // repository
7560      this.getRepository().add((MolecularSequenceRepositoryComponent) value); // MolecularSequenceRepositoryComponent
7561      return value;
7562    case -400605635: // pointer
7563      this.getPointer().add(castToReference(value)); // Reference
7564      return value;
7565    case 757269394: // structureVariant
7566      this.getStructureVariant().add((MolecularSequenceStructureVariantComponent) value); // MolecularSequenceStructureVariantComponent
7567      return value;
7568    default:
7569      return super.setProperty(hash, name, value);
7570    }
7571
7572  }
7573
7574  @Override
7575  public Base setProperty(String name, Base value) throws FHIRException {
7576    if (name.equals("identifier")) {
7577      this.getIdentifier().add(castToIdentifier(value));
7578    } else if (name.equals("type")) {
7579      value = new SequenceTypeEnumFactory().fromType(castToCode(value));
7580      this.type = (Enumeration) value; // Enumeration<SequenceType>
7581    } else if (name.equals("coordinateSystem")) {
7582      this.coordinateSystem = castToInteger(value); // IntegerType
7583    } else if (name.equals("patient")) {
7584      this.patient = castToReference(value); // Reference
7585    } else if (name.equals("specimen")) {
7586      this.specimen = castToReference(value); // Reference
7587    } else if (name.equals("device")) {
7588      this.device = castToReference(value); // Reference
7589    } else if (name.equals("performer")) {
7590      this.performer = castToReference(value); // Reference
7591    } else if (name.equals("quantity")) {
7592      this.quantity = castToQuantity(value); // Quantity
7593    } else if (name.equals("referenceSeq")) {
7594      this.referenceSeq = (MolecularSequenceReferenceSeqComponent) value; // MolecularSequenceReferenceSeqComponent
7595    } else if (name.equals("variant")) {
7596      this.getVariant().add((MolecularSequenceVariantComponent) value);
7597    } else if (name.equals("observedSeq")) {
7598      this.observedSeq = castToString(value); // StringType
7599    } else if (name.equals("quality")) {
7600      this.getQuality().add((MolecularSequenceQualityComponent) value);
7601    } else if (name.equals("readCoverage")) {
7602      this.readCoverage = castToInteger(value); // IntegerType
7603    } else if (name.equals("repository")) {
7604      this.getRepository().add((MolecularSequenceRepositoryComponent) value);
7605    } else if (name.equals("pointer")) {
7606      this.getPointer().add(castToReference(value));
7607    } else if (name.equals("structureVariant")) {
7608      this.getStructureVariant().add((MolecularSequenceStructureVariantComponent) value);
7609    } else
7610      return super.setProperty(name, value);
7611    return value;
7612  }
7613
7614  @Override
7615  public Base makeProperty(int hash, String name) throws FHIRException {
7616    switch (hash) {
7617    case -1618432855:
7618      return addIdentifier();
7619    case 3575610:
7620      return getTypeElement();
7621    case 354212295:
7622      return getCoordinateSystemElement();
7623    case -791418107:
7624      return getPatient();
7625    case -2132868344:
7626      return getSpecimen();
7627    case -1335157162:
7628      return getDevice();
7629    case 481140686:
7630      return getPerformer();
7631    case -1285004149:
7632      return getQuantity();
7633    case -502547180:
7634      return getReferenceSeq();
7635    case 236785797:
7636      return addVariant();
7637    case 125541495:
7638      return getObservedSeqElement();
7639    case 651215103:
7640      return addQuality();
7641    case -1798816354:
7642      return getReadCoverageElement();
7643    case 1950800714:
7644      return addRepository();
7645    case -400605635:
7646      return addPointer();
7647    case 757269394:
7648      return addStructureVariant();
7649    default:
7650      return super.makeProperty(hash, name);
7651    }
7652
7653  }
7654
7655  @Override
7656  public String[] getTypesForProperty(int hash, String name) throws FHIRException {
7657    switch (hash) {
7658    case -1618432855:
7659      /* identifier */ return new String[] { "Identifier" };
7660    case 3575610:
7661      /* type */ return new String[] { "code" };
7662    case 354212295:
7663      /* coordinateSystem */ return new String[] { "integer" };
7664    case -791418107:
7665      /* patient */ return new String[] { "Reference" };
7666    case -2132868344:
7667      /* specimen */ return new String[] { "Reference" };
7668    case -1335157162:
7669      /* device */ return new String[] { "Reference" };
7670    case 481140686:
7671      /* performer */ return new String[] { "Reference" };
7672    case -1285004149:
7673      /* quantity */ return new String[] { "Quantity" };
7674    case -502547180:
7675      /* referenceSeq */ return new String[] {};
7676    case 236785797:
7677      /* variant */ return new String[] {};
7678    case 125541495:
7679      /* observedSeq */ return new String[] { "string" };
7680    case 651215103:
7681      /* quality */ return new String[] {};
7682    case -1798816354:
7683      /* readCoverage */ return new String[] { "integer" };
7684    case 1950800714:
7685      /* repository */ return new String[] {};
7686    case -400605635:
7687      /* pointer */ return new String[] { "Reference" };
7688    case 757269394:
7689      /* structureVariant */ return new String[] {};
7690    default:
7691      return super.getTypesForProperty(hash, name);
7692    }
7693
7694  }
7695
7696  @Override
7697  public Base addChild(String name) throws FHIRException {
7698    if (name.equals("identifier")) {
7699      return addIdentifier();
7700    } else if (name.equals("type")) {
7701      throw new FHIRException("Cannot call addChild on a singleton property MolecularSequence.type");
7702    } else if (name.equals("coordinateSystem")) {
7703      throw new FHIRException("Cannot call addChild on a singleton property MolecularSequence.coordinateSystem");
7704    } else if (name.equals("patient")) {
7705      this.patient = new Reference();
7706      return this.patient;
7707    } else if (name.equals("specimen")) {
7708      this.specimen = new Reference();
7709      return this.specimen;
7710    } else if (name.equals("device")) {
7711      this.device = new Reference();
7712      return this.device;
7713    } else if (name.equals("performer")) {
7714      this.performer = new Reference();
7715      return this.performer;
7716    } else if (name.equals("quantity")) {
7717      this.quantity = new Quantity();
7718      return this.quantity;
7719    } else if (name.equals("referenceSeq")) {
7720      this.referenceSeq = new MolecularSequenceReferenceSeqComponent();
7721      return this.referenceSeq;
7722    } else if (name.equals("variant")) {
7723      return addVariant();
7724    } else if (name.equals("observedSeq")) {
7725      throw new FHIRException("Cannot call addChild on a singleton property MolecularSequence.observedSeq");
7726    } else if (name.equals("quality")) {
7727      return addQuality();
7728    } else if (name.equals("readCoverage")) {
7729      throw new FHIRException("Cannot call addChild on a singleton property MolecularSequence.readCoverage");
7730    } else if (name.equals("repository")) {
7731      return addRepository();
7732    } else if (name.equals("pointer")) {
7733      return addPointer();
7734    } else if (name.equals("structureVariant")) {
7735      return addStructureVariant();
7736    } else
7737      return super.addChild(name);
7738  }
7739
7740  public String fhirType() {
7741    return "MolecularSequence";
7742
7743  }
7744
7745  public MolecularSequence copy() {
7746    MolecularSequence dst = new MolecularSequence();
7747    copyValues(dst);
7748    return dst;
7749  }
7750
7751  public void copyValues(MolecularSequence dst) {
7752    super.copyValues(dst);
7753    if (identifier != null) {
7754      dst.identifier = new ArrayList<Identifier>();
7755      for (Identifier i : identifier)
7756        dst.identifier.add(i.copy());
7757    }
7758    ;
7759    dst.type = type == null ? null : type.copy();
7760    dst.coordinateSystem = coordinateSystem == null ? null : coordinateSystem.copy();
7761    dst.patient = patient == null ? null : patient.copy();
7762    dst.specimen = specimen == null ? null : specimen.copy();
7763    dst.device = device == null ? null : device.copy();
7764    dst.performer = performer == null ? null : performer.copy();
7765    dst.quantity = quantity == null ? null : quantity.copy();
7766    dst.referenceSeq = referenceSeq == null ? null : referenceSeq.copy();
7767    if (variant != null) {
7768      dst.variant = new ArrayList<MolecularSequenceVariantComponent>();
7769      for (MolecularSequenceVariantComponent i : variant)
7770        dst.variant.add(i.copy());
7771    }
7772    ;
7773    dst.observedSeq = observedSeq == null ? null : observedSeq.copy();
7774    if (quality != null) {
7775      dst.quality = new ArrayList<MolecularSequenceQualityComponent>();
7776      for (MolecularSequenceQualityComponent i : quality)
7777        dst.quality.add(i.copy());
7778    }
7779    ;
7780    dst.readCoverage = readCoverage == null ? null : readCoverage.copy();
7781    if (repository != null) {
7782      dst.repository = new ArrayList<MolecularSequenceRepositoryComponent>();
7783      for (MolecularSequenceRepositoryComponent i : repository)
7784        dst.repository.add(i.copy());
7785    }
7786    ;
7787    if (pointer != null) {
7788      dst.pointer = new ArrayList<Reference>();
7789      for (Reference i : pointer)
7790        dst.pointer.add(i.copy());
7791    }
7792    ;
7793    if (structureVariant != null) {
7794      dst.structureVariant = new ArrayList<MolecularSequenceStructureVariantComponent>();
7795      for (MolecularSequenceStructureVariantComponent i : structureVariant)
7796        dst.structureVariant.add(i.copy());
7797    }
7798    ;
7799  }
7800
7801  protected MolecularSequence typedCopy() {
7802    return copy();
7803  }
7804
7805  @Override
7806  public boolean equalsDeep(Base other_) {
7807    if (!super.equalsDeep(other_))
7808      return false;
7809    if (!(other_ instanceof MolecularSequence))
7810      return false;
7811    MolecularSequence o = (MolecularSequence) other_;
7812    return compareDeep(identifier, o.identifier, true) && compareDeep(type, o.type, true)
7813        && compareDeep(coordinateSystem, o.coordinateSystem, true) && compareDeep(patient, o.patient, true)
7814        && compareDeep(specimen, o.specimen, true) && compareDeep(device, o.device, true)
7815        && compareDeep(performer, o.performer, true) && compareDeep(quantity, o.quantity, true)
7816        && compareDeep(referenceSeq, o.referenceSeq, true) && compareDeep(variant, o.variant, true)
7817        && compareDeep(observedSeq, o.observedSeq, true) && compareDeep(quality, o.quality, true)
7818        && compareDeep(readCoverage, o.readCoverage, true) && compareDeep(repository, o.repository, true)
7819        && compareDeep(pointer, o.pointer, true) && compareDeep(structureVariant, o.structureVariant, true);
7820  }
7821
7822  @Override
7823  public boolean equalsShallow(Base other_) {
7824    if (!super.equalsShallow(other_))
7825      return false;
7826    if (!(other_ instanceof MolecularSequence))
7827      return false;
7828    MolecularSequence o = (MolecularSequence) other_;
7829    return compareValues(type, o.type, true) && compareValues(coordinateSystem, o.coordinateSystem, true)
7830        && compareValues(observedSeq, o.observedSeq, true) && compareValues(readCoverage, o.readCoverage, true);
7831  }
7832
7833  public boolean isEmpty() {
7834    return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(identifier, type, coordinateSystem, patient,
7835        specimen, device, performer, quantity, referenceSeq, variant, observedSeq, quality, readCoverage, repository,
7836        pointer, structureVariant);
7837  }
7838
7839  @Override
7840  public ResourceType getResourceType() {
7841    return ResourceType.MolecularSequence;
7842  }
7843
7844  /**
7845   * Search parameter: <b>identifier</b>
7846   * <p>
7847   * Description: <b>The unique identity for a particular sequence</b><br>
7848   * Type: <b>token</b><br>
7849   * Path: <b>MolecularSequence.identifier</b><br>
7850   * </p>
7851   */
7852  @SearchParamDefinition(name = "identifier", path = "MolecularSequence.identifier", description = "The unique identity for a particular sequence", type = "token")
7853  public static final String SP_IDENTIFIER = "identifier";
7854  /**
7855   * <b>Fluent Client</b> search parameter constant for <b>identifier</b>
7856   * <p>
7857   * Description: <b>The unique identity for a particular sequence</b><br>
7858   * Type: <b>token</b><br>
7859   * Path: <b>MolecularSequence.identifier</b><br>
7860   * </p>
7861   */
7862  public static final ca.uhn.fhir.rest.gclient.TokenClientParam IDENTIFIER = new ca.uhn.fhir.rest.gclient.TokenClientParam(
7863      SP_IDENTIFIER);
7864
7865  /**
7866   * Search parameter: <b>referenceseqid-variant-coordinate</b>
7867   * <p>
7868   * Description: <b>Search parameter by reference sequence and variant
7869   * coordinate. This will refer to part of a locus or part of a gene where search
7870   * region will be represented in 1-based system. Since the coordinateSystem can
7871   * either be 0-based or 1-based, this search query will include the result of
7872   * both coordinateSystem that contains the equivalent segment of the gene or
7873   * whole genome sequence. For example, a search for sequence can be represented
7874   * as `referenceSeqId-variant-coordinate=NC_000001.11$lt345$gt123`, this means
7875   * it will search for the MolecularSequence resource with variants on
7876   * NC_000001.11 and with position >123 and <345, where in 1-based system
7877   * resource, all strings within region NC_000001.11:124-344 will be revealed,
7878   * while in 0-based system resource, all strings within region
7879   * NC_000001.11:123-344 will be revealed. You may want to check detail about
7880   * 0-based v.s. 1-based above.</b><br>
7881   * Type: <b>composite</b><br>
7882   * Path: <b></b><br>
7883   * </p>
7884   */
7885  @SearchParamDefinition(name = "referenceseqid-variant-coordinate", path = "MolecularSequence.variant", description = "Search parameter by reference sequence and variant coordinate. This will refer to part of a locus or part of a gene where search region will be represented in 1-based system. Since the coordinateSystem can either be 0-based or 1-based, this search query will include the result of both coordinateSystem that contains the equivalent segment of the gene or whole genome sequence. For example, a search for sequence can be represented as `referenceSeqId-variant-coordinate=NC_000001.11$lt345$gt123`, this means it will search for the MolecularSequence resource with variants on NC_000001.11 and with position >123 and <345, where in 1-based system resource, all strings within region NC_000001.11:124-344 will be revealed, while in 0-based system resource, all strings within region NC_000001.11:123-344 will be revealed. You may want to check detail about 0-based v.s. 1-based above.", type = "composite", compositeOf = {
7886      "referenceseqid", "variant-start" })
7887  public static final String SP_REFERENCESEQID_VARIANT_COORDINATE = "referenceseqid-variant-coordinate";
7888  /**
7889   * <b>Fluent Client</b> search parameter constant for
7890   * <b>referenceseqid-variant-coordinate</b>
7891   * <p>
7892   * Description: <b>Search parameter by reference sequence and variant
7893   * coordinate. This will refer to part of a locus or part of a gene where search
7894   * region will be represented in 1-based system. Since the coordinateSystem can
7895   * either be 0-based or 1-based, this search query will include the result of
7896   * both coordinateSystem that contains the equivalent segment of the gene or
7897   * whole genome sequence. For example, a search for sequence can be represented
7898   * as `referenceSeqId-variant-coordinate=NC_000001.11$lt345$gt123`, this means
7899   * it will search for the MolecularSequence resource with variants on
7900   * NC_000001.11 and with position >123 and <345, where in 1-based system
7901   * resource, all strings within region NC_000001.11:124-344 will be revealed,
7902   * while in 0-based system resource, all strings within region
7903   * NC_000001.11:123-344 will be revealed. You may want to check detail about
7904   * 0-based v.s. 1-based above.</b><br>
7905   * Type: <b>composite</b><br>
7906   * Path: <b></b><br>
7907   * </p>
7908   */
7909  public static final ca.uhn.fhir.rest.gclient.CompositeClientParam<ca.uhn.fhir.rest.gclient.TokenClientParam, ca.uhn.fhir.rest.gclient.NumberClientParam> REFERENCESEQID_VARIANT_COORDINATE = new ca.uhn.fhir.rest.gclient.CompositeClientParam<ca.uhn.fhir.rest.gclient.TokenClientParam, ca.uhn.fhir.rest.gclient.NumberClientParam>(
7910      SP_REFERENCESEQID_VARIANT_COORDINATE);
7911
7912  /**
7913   * Search parameter: <b>chromosome</b>
7914   * <p>
7915   * Description: <b>Chromosome number of the reference sequence</b><br>
7916   * Type: <b>token</b><br>
7917   * Path: <b>MolecularSequence.referenceSeq.chromosome</b><br>
7918   * </p>
7919   */
7920  @SearchParamDefinition(name = "chromosome", path = "MolecularSequence.referenceSeq.chromosome", description = "Chromosome number of the reference sequence", type = "token")
7921  public static final String SP_CHROMOSOME = "chromosome";
7922  /**
7923   * <b>Fluent Client</b> search parameter constant for <b>chromosome</b>
7924   * <p>
7925   * Description: <b>Chromosome number of the reference sequence</b><br>
7926   * Type: <b>token</b><br>
7927   * Path: <b>MolecularSequence.referenceSeq.chromosome</b><br>
7928   * </p>
7929   */
7930  public static final ca.uhn.fhir.rest.gclient.TokenClientParam CHROMOSOME = new ca.uhn.fhir.rest.gclient.TokenClientParam(
7931      SP_CHROMOSOME);
7932
7933  /**
7934   * Search parameter: <b>window-end</b>
7935   * <p>
7936   * Description: <b>End position (0-based exclusive, which menas the acid at this
7937   * position will not be included, 1-based inclusive, which means the acid at
7938   * this position will be included) of the reference sequence.</b><br>
7939   * Type: <b>number</b><br>
7940   * Path: <b>MolecularSequence.referenceSeq.windowEnd</b><br>
7941   * </p>
7942   */
7943  @SearchParamDefinition(name = "window-end", path = "MolecularSequence.referenceSeq.windowEnd", description = "End position (0-based exclusive, which menas the acid at this position will not be included, 1-based inclusive, which means the acid at this position will be included) of the reference sequence.", type = "number")
7944  public static final String SP_WINDOW_END = "window-end";
7945  /**
7946   * <b>Fluent Client</b> search parameter constant for <b>window-end</b>
7947   * <p>
7948   * Description: <b>End position (0-based exclusive, which menas the acid at this
7949   * position will not be included, 1-based inclusive, which means the acid at
7950   * this position will be included) of the reference sequence.</b><br>
7951   * Type: <b>number</b><br>
7952   * Path: <b>MolecularSequence.referenceSeq.windowEnd</b><br>
7953   * </p>
7954   */
7955  public static final ca.uhn.fhir.rest.gclient.NumberClientParam WINDOW_END = new ca.uhn.fhir.rest.gclient.NumberClientParam(
7956      SP_WINDOW_END);
7957
7958  /**
7959   * Search parameter: <b>type</b>
7960   * <p>
7961   * Description: <b>Amino Acid Sequence/ DNA Sequence / RNA Sequence</b><br>
7962   * Type: <b>token</b><br>
7963   * Path: <b>MolecularSequence.type</b><br>
7964   * </p>
7965   */
7966  @SearchParamDefinition(name = "type", path = "MolecularSequence.type", description = "Amino Acid Sequence/ DNA Sequence / RNA Sequence", type = "token")
7967  public static final String SP_TYPE = "type";
7968  /**
7969   * <b>Fluent Client</b> search parameter constant for <b>type</b>
7970   * <p>
7971   * Description: <b>Amino Acid Sequence/ DNA Sequence / RNA Sequence</b><br>
7972   * Type: <b>token</b><br>
7973   * Path: <b>MolecularSequence.type</b><br>
7974   * </p>
7975   */
7976  public static final ca.uhn.fhir.rest.gclient.TokenClientParam TYPE = new ca.uhn.fhir.rest.gclient.TokenClientParam(
7977      SP_TYPE);
7978
7979  /**
7980   * Search parameter: <b>window-start</b>
7981   * <p>
7982   * Description: <b>Start position (0-based inclusive, 1-based inclusive, that
7983   * means the nucleic acid or amino acid at this position will be included) of
7984   * the reference sequence.</b><br>
7985   * Type: <b>number</b><br>
7986   * Path: <b>MolecularSequence.referenceSeq.windowStart</b><br>
7987   * </p>
7988   */
7989  @SearchParamDefinition(name = "window-start", path = "MolecularSequence.referenceSeq.windowStart", description = "Start position (0-based inclusive, 1-based inclusive, that means the nucleic acid or amino acid at this position will be included) of the reference sequence.", type = "number")
7990  public static final String SP_WINDOW_START = "window-start";
7991  /**
7992   * <b>Fluent Client</b> search parameter constant for <b>window-start</b>
7993   * <p>
7994   * Description: <b>Start position (0-based inclusive, 1-based inclusive, that
7995   * means the nucleic acid or amino acid at this position will be included) of
7996   * the reference sequence.</b><br>
7997   * Type: <b>number</b><br>
7998   * Path: <b>MolecularSequence.referenceSeq.windowStart</b><br>
7999   * </p>
8000   */
8001  public static final ca.uhn.fhir.rest.gclient.NumberClientParam WINDOW_START = new ca.uhn.fhir.rest.gclient.NumberClientParam(
8002      SP_WINDOW_START);
8003
8004  /**
8005   * Search parameter: <b>variant-end</b>
8006   * <p>
8007   * Description: <b>End position (0-based exclusive, which menas the acid at this
8008   * position will not be included, 1-based inclusive, which means the acid at
8009   * this position will be included) of the variant.</b><br>
8010   * Type: <b>number</b><br>
8011   * Path: <b>MolecularSequence.variant.end</b><br>
8012   * </p>
8013   */
8014  @SearchParamDefinition(name = "variant-end", path = "MolecularSequence.variant.end", description = "End position (0-based exclusive, which menas the acid at this position will not be included, 1-based inclusive, which means the acid at this position will be included) of the variant.", type = "number")
8015  public static final String SP_VARIANT_END = "variant-end";
8016  /**
8017   * <b>Fluent Client</b> search parameter constant for <b>variant-end</b>
8018   * <p>
8019   * Description: <b>End position (0-based exclusive, which menas the acid at this
8020   * position will not be included, 1-based inclusive, which means the acid at
8021   * this position will be included) of the variant.</b><br>
8022   * Type: <b>number</b><br>
8023   * Path: <b>MolecularSequence.variant.end</b><br>
8024   * </p>
8025   */
8026  public static final ca.uhn.fhir.rest.gclient.NumberClientParam VARIANT_END = new ca.uhn.fhir.rest.gclient.NumberClientParam(
8027      SP_VARIANT_END);
8028
8029  /**
8030   * Search parameter: <b>chromosome-variant-coordinate</b>
8031   * <p>
8032   * Description: <b>Search parameter by chromosome and variant coordinate. This
8033   * will refer to part of a locus or part of a gene where search region will be
8034   * represented in 1-based system. Since the coordinateSystem can either be
8035   * 0-based or 1-based, this search query will include the result of both
8036   * coordinateSystem that contains the equivalent segment of the gene or whole
8037   * genome sequence. For example, a search for sequence can be represented as
8038   * `chromosome-variant-coordinate=1$lt345$gt123`, this means it will search for
8039   * the MolecularSequence resource with variants on chromosome 1 and with
8040   * position >123 and <345, where in 1-based system resource, all strings within
8041   * region 1:124-344 will be revealed, while in 0-based system resource, all
8042   * strings within region 1:123-344 will be revealed. You may want to check
8043   * detail about 0-based v.s. 1-based above.</b><br>
8044   * Type: <b>composite</b><br>
8045   * Path: <b></b><br>
8046   * </p>
8047   */
8048  @SearchParamDefinition(name = "chromosome-variant-coordinate", path = "MolecularSequence.variant", description = "Search parameter by chromosome and variant coordinate. This will refer to part of a locus or part of a gene where search region will be represented in 1-based system. Since the coordinateSystem can either be 0-based or 1-based, this search query will include the result of both coordinateSystem that contains the equivalent segment of the gene or whole genome sequence. For example, a search for sequence can be represented as `chromosome-variant-coordinate=1$lt345$gt123`, this means it will search for the MolecularSequence resource with variants on chromosome 1 and with position >123 and <345, where in 1-based system resource, all strings within region 1:124-344 will be revealed, while in 0-based system resource, all strings within region 1:123-344 will be revealed. You may want to check detail about 0-based v.s. 1-based above.", type = "composite", compositeOf = {
8049      "chromosome", "variant-start" })
8050  public static final String SP_CHROMOSOME_VARIANT_COORDINATE = "chromosome-variant-coordinate";
8051  /**
8052   * <b>Fluent Client</b> search parameter constant for
8053   * <b>chromosome-variant-coordinate</b>
8054   * <p>
8055   * Description: <b>Search parameter by chromosome and variant coordinate. This
8056   * will refer to part of a locus or part of a gene where search region will be
8057   * represented in 1-based system. Since the coordinateSystem can either be
8058   * 0-based or 1-based, this search query will include the result of both
8059   * coordinateSystem that contains the equivalent segment of the gene or whole
8060   * genome sequence. For example, a search for sequence can be represented as
8061   * `chromosome-variant-coordinate=1$lt345$gt123`, this means it will search for
8062   * the MolecularSequence resource with variants on chromosome 1 and with
8063   * position >123 and <345, where in 1-based system resource, all strings within
8064   * region 1:124-344 will be revealed, while in 0-based system resource, all
8065   * strings within region 1:123-344 will be revealed. You may want to check
8066   * detail about 0-based v.s. 1-based above.</b><br>
8067   * Type: <b>composite</b><br>
8068   * Path: <b></b><br>
8069   * </p>
8070   */
8071  public static final ca.uhn.fhir.rest.gclient.CompositeClientParam<ca.uhn.fhir.rest.gclient.TokenClientParam, ca.uhn.fhir.rest.gclient.NumberClientParam> CHROMOSOME_VARIANT_COORDINATE = new ca.uhn.fhir.rest.gclient.CompositeClientParam<ca.uhn.fhir.rest.gclient.TokenClientParam, ca.uhn.fhir.rest.gclient.NumberClientParam>(
8072      SP_CHROMOSOME_VARIANT_COORDINATE);
8073
8074  /**
8075   * Search parameter: <b>patient</b>
8076   * <p>
8077   * Description: <b>The subject that the observation is about</b><br>
8078   * Type: <b>reference</b><br>
8079   * Path: <b>MolecularSequence.patient</b><br>
8080   * </p>
8081   */
8082  @SearchParamDefinition(name = "patient", path = "MolecularSequence.patient", description = "The subject that the observation is about", type = "reference", providesMembershipIn = {
8083      @ca.uhn.fhir.model.api.annotation.Compartment(name = "Patient") }, target = { Patient.class })
8084  public static final String SP_PATIENT = "patient";
8085  /**
8086   * <b>Fluent Client</b> search parameter constant for <b>patient</b>
8087   * <p>
8088   * Description: <b>The subject that the observation is about</b><br>
8089   * Type: <b>reference</b><br>
8090   * Path: <b>MolecularSequence.patient</b><br>
8091   * </p>
8092   */
8093  public static final ca.uhn.fhir.rest.gclient.ReferenceClientParam PATIENT = new ca.uhn.fhir.rest.gclient.ReferenceClientParam(
8094      SP_PATIENT);
8095
8096  /**
8097   * Constant for fluent queries to be used to add include statements. Specifies
8098   * the path value of "<b>MolecularSequence:patient</b>".
8099   */
8100  public static final ca.uhn.fhir.model.api.Include INCLUDE_PATIENT = new ca.uhn.fhir.model.api.Include(
8101      "MolecularSequence:patient").toLocked();
8102
8103  /**
8104   * Search parameter: <b>variant-start</b>
8105   * <p>
8106   * Description: <b>Start position (0-based inclusive, 1-based inclusive, that
8107   * means the nucleic acid or amino acid at this position will be included) of
8108   * the variant.</b><br>
8109   * Type: <b>number</b><br>
8110   * Path: <b>MolecularSequence.variant.start</b><br>
8111   * </p>
8112   */
8113  @SearchParamDefinition(name = "variant-start", path = "MolecularSequence.variant.start", description = "Start position (0-based inclusive, 1-based inclusive, that means the nucleic acid or amino acid at this position will be included) of the variant.", type = "number")
8114  public static final String SP_VARIANT_START = "variant-start";
8115  /**
8116   * <b>Fluent Client</b> search parameter constant for <b>variant-start</b>
8117   * <p>
8118   * Description: <b>Start position (0-based inclusive, 1-based inclusive, that
8119   * means the nucleic acid or amino acid at this position will be included) of
8120   * the variant.</b><br>
8121   * Type: <b>number</b><br>
8122   * Path: <b>MolecularSequence.variant.start</b><br>
8123   * </p>
8124   */
8125  public static final ca.uhn.fhir.rest.gclient.NumberClientParam VARIANT_START = new ca.uhn.fhir.rest.gclient.NumberClientParam(
8126      SP_VARIANT_START);
8127
8128  /**
8129   * Search parameter: <b>chromosome-window-coordinate</b>
8130   * <p>
8131   * Description: <b>Search parameter by chromosome and window. This will refer to
8132   * part of a locus or part of a gene where search region will be represented in
8133   * 1-based system. Since the coordinateSystem can either be 0-based or 1-based,
8134   * this search query will include the result of both coordinateSystem that
8135   * contains the equivalent segment of the gene or whole genome sequence. For
8136   * example, a search for sequence can be represented as
8137   * `chromosome-window-coordinate=1$lt345$gt123`, this means it will search for
8138   * the MolecularSequence resource with a window on chromosome 1 and with
8139   * position >123 and <345, where in 1-based system resource, all strings within
8140   * region 1:124-344 will be revealed, while in 0-based system resource, all
8141   * strings within region 1:123-344 will be revealed. You may want to check
8142   * detail about 0-based v.s. 1-based above.</b><br>
8143   * Type: <b>composite</b><br>
8144   * Path: <b></b><br>
8145   * </p>
8146   */
8147  @SearchParamDefinition(name = "chromosome-window-coordinate", path = "MolecularSequence.referenceSeq", description = "Search parameter by chromosome and window. This will refer to part of a locus or part of a gene where search region will be represented in 1-based system. Since the coordinateSystem can either be 0-based or 1-based, this search query will include the result of both coordinateSystem that contains the equivalent segment of the gene or whole genome sequence. For example, a search for sequence can be represented as `chromosome-window-coordinate=1$lt345$gt123`, this means it will search for the MolecularSequence resource with a window on chromosome 1 and with position >123 and <345, where in 1-based system resource, all strings within region 1:124-344 will be revealed, while in 0-based system resource, all strings within region 1:123-344 will be revealed. You may want to check detail about 0-based v.s. 1-based above.", type = "composite", compositeOf = {
8148      "chromosome", "window-start" })
8149  public static final String SP_CHROMOSOME_WINDOW_COORDINATE = "chromosome-window-coordinate";
8150  /**
8151   * <b>Fluent Client</b> search parameter constant for
8152   * <b>chromosome-window-coordinate</b>
8153   * <p>
8154   * Description: <b>Search parameter by chromosome and window. This will refer to
8155   * part of a locus or part of a gene where search region will be represented in
8156   * 1-based system. Since the coordinateSystem can either be 0-based or 1-based,
8157   * this search query will include the result of both coordinateSystem that
8158   * contains the equivalent segment of the gene or whole genome sequence. For
8159   * example, a search for sequence can be represented as
8160   * `chromosome-window-coordinate=1$lt345$gt123`, this means it will search for
8161   * the MolecularSequence resource with a window on chromosome 1 and with
8162   * position >123 and <345, where in 1-based system resource, all strings within
8163   * region 1:124-344 will be revealed, while in 0-based system resource, all
8164   * strings within region 1:123-344 will be revealed. You may want to check
8165   * detail about 0-based v.s. 1-based above.</b><br>
8166   * Type: <b>composite</b><br>
8167   * Path: <b></b><br>
8168   * </p>
8169   */
8170  public static final ca.uhn.fhir.rest.gclient.CompositeClientParam<ca.uhn.fhir.rest.gclient.TokenClientParam, ca.uhn.fhir.rest.gclient.NumberClientParam> CHROMOSOME_WINDOW_COORDINATE = new ca.uhn.fhir.rest.gclient.CompositeClientParam<ca.uhn.fhir.rest.gclient.TokenClientParam, ca.uhn.fhir.rest.gclient.NumberClientParam>(
8171      SP_CHROMOSOME_WINDOW_COORDINATE);
8172
8173  /**
8174   * Search parameter: <b>referenceseqid-window-coordinate</b>
8175   * <p>
8176   * Description: <b>Search parameter by reference sequence and window. This will
8177   * refer to part of a locus or part of a gene where search region will be
8178   * represented in 1-based system. Since the coordinateSystem can either be
8179   * 0-based or 1-based, this search query will include the result of both
8180   * coordinateSystem that contains the equivalent segment of the gene or whole
8181   * genome sequence. For example, a search for sequence can be represented as
8182   * `referenceSeqId-window-coordinate=NC_000001.11$lt345$gt123`, this means it
8183   * will search for the MolecularSequence resource with a window on NC_000001.11
8184   * and with position >123 and <345, where in 1-based system resource, all
8185   * strings within region NC_000001.11:124-344 will be revealed, while in 0-based
8186   * system resource, all strings within region NC_000001.11:123-344 will be
8187   * revealed. You may want to check detail about 0-based v.s. 1-based
8188   * above.</b><br>
8189   * Type: <b>composite</b><br>
8190   * Path: <b></b><br>
8191   * </p>
8192   */
8193  @SearchParamDefinition(name = "referenceseqid-window-coordinate", path = "MolecularSequence.referenceSeq", description = "Search parameter by reference sequence and window. This will refer to part of a locus or part of a gene where search region will be represented in 1-based system. Since the coordinateSystem can either be 0-based or 1-based, this search query will include the result of both coordinateSystem that contains the equivalent segment of the gene or whole genome sequence. For example, a search for sequence can be represented as `referenceSeqId-window-coordinate=NC_000001.11$lt345$gt123`, this means it will search for the MolecularSequence resource with a window on NC_000001.11 and with position >123 and <345, where in 1-based system resource, all strings within region NC_000001.11:124-344 will be revealed, while in 0-based system resource, all strings within region NC_000001.11:123-344 will be revealed. You may want to check detail about 0-based v.s. 1-based above.", type = "composite", compositeOf = {
8194      "referenceseqid", "window-start" })
8195  public static final String SP_REFERENCESEQID_WINDOW_COORDINATE = "referenceseqid-window-coordinate";
8196  /**
8197   * <b>Fluent Client</b> search parameter constant for
8198   * <b>referenceseqid-window-coordinate</b>
8199   * <p>
8200   * Description: <b>Search parameter by reference sequence and window. This will
8201   * refer to part of a locus or part of a gene where search region will be
8202   * represented in 1-based system. Since the coordinateSystem can either be
8203   * 0-based or 1-based, this search query will include the result of both
8204   * coordinateSystem that contains the equivalent segment of the gene or whole
8205   * genome sequence. For example, a search for sequence can be represented as
8206   * `referenceSeqId-window-coordinate=NC_000001.11$lt345$gt123`, this means it
8207   * will search for the MolecularSequence resource with a window on NC_000001.11
8208   * and with position >123 and <345, where in 1-based system resource, all
8209   * strings within region NC_000001.11:124-344 will be revealed, while in 0-based
8210   * system resource, all strings within region NC_000001.11:123-344 will be
8211   * revealed. You may want to check detail about 0-based v.s. 1-based
8212   * above.</b><br>
8213   * Type: <b>composite</b><br>
8214   * Path: <b></b><br>
8215   * </p>
8216   */
8217  public static final ca.uhn.fhir.rest.gclient.CompositeClientParam<ca.uhn.fhir.rest.gclient.TokenClientParam, ca.uhn.fhir.rest.gclient.NumberClientParam> REFERENCESEQID_WINDOW_COORDINATE = new ca.uhn.fhir.rest.gclient.CompositeClientParam<ca.uhn.fhir.rest.gclient.TokenClientParam, ca.uhn.fhir.rest.gclient.NumberClientParam>(
8218      SP_REFERENCESEQID_WINDOW_COORDINATE);
8219
8220  /**
8221   * Search parameter: <b>referenceseqid</b>
8222   * <p>
8223   * Description: <b>Reference Sequence of the sequence</b><br>
8224   * Type: <b>token</b><br>
8225   * Path: <b>MolecularSequence.referenceSeq.referenceSeqId</b><br>
8226   * </p>
8227   */
8228  @SearchParamDefinition(name = "referenceseqid", path = "MolecularSequence.referenceSeq.referenceSeqId", description = "Reference Sequence of the sequence", type = "token")
8229  public static final String SP_REFERENCESEQID = "referenceseqid";
8230  /**
8231   * <b>Fluent Client</b> search parameter constant for <b>referenceseqid</b>
8232   * <p>
8233   * Description: <b>Reference Sequence of the sequence</b><br>
8234   * Type: <b>token</b><br>
8235   * Path: <b>MolecularSequence.referenceSeq.referenceSeqId</b><br>
8236   * </p>
8237   */
8238  public static final ca.uhn.fhir.rest.gclient.TokenClientParam REFERENCESEQID = new ca.uhn.fhir.rest.gclient.TokenClientParam(
8239      SP_REFERENCESEQID);
8240
8241}