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