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