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