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