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