Class Chromosome
The class Chromosome describes a (derivative) Chromosome. It provides methods for introducing aberrations into the chromosome and calculating gains and losses for chromosomal material.Overview
- Constructors
- Interfaces
- Enumerations
- Properties
- Methods
- Interaction with other classes
- Internal views
Chromosome |
New() |
New(ISCNLong: String) |
New(ChromosomeNumber: String, StrictISCN: Boolean) |
CausingAberration(): Aberration {read-only} |
ExternalID(): String |
ISCNShort(): String |
ISCNShortPossible(): Boolean |
Replaces(): ReplacingStatus |
StrictISCN(): Boolean |
add(Band: Band): Void |
clone(): Object {Implements ICloneable.Clone} |
containsBand(Band: Band): Boolean |
delete(StartBand: Band): Void |
delete(StartBand: Band, EndBand: Band): Void |
dicentric(Band1: Band, SecondChromosome: Chromosome, Band2: Band) : Void |
duplicate(Band1: Band, Band2: Band): Void |
equals(ByRef CompareChromosome As Chromosome): Boolean |
erect(): Void |
erectOld(): Void |
getBreakPoints: Bands |
getCentromerePosition(Resolution: ChromosomeData.eResolutionLevel): Integer |
getContainedBands(Resolution: eResolutionLevel): Bands |
getFusions(Optional MultiplicatorMin: Integer = 1, Optional MultiplicatorMax: Integer = 1): Fusions |
getQuantitativeAberrationsWhenAdding(Optional MultiplicatorMin: Integer = 1, Optional MultiplicatorMax: Integer = 1): QuantitativeAberrations |
getQuantitativeAberrationsWhenReplacing(Optional MultiplicatorMin: Integer = 1, Optional MultiplicatorMax: Integer = 1): QuantitativeAberrations |
hsr(AtBand: Band): Void |
hsr(AtBand1: Band, AtBand2: Band): Void |
insert(AcceptorBand: Band, DonorStartBand: Band, DonorEndBand: Band): Void |
insert(AcceptorBand: Band, DonorChromosome: Chromosome, DonorStartBand: Band, DonorEndBand: Band): Void |
invert(StartBand: Band, EndBand: Band): Void |
isomerize(Band: Band): Void |
isRing: Boolean |
revert(): Void |
ring(ByRef AberrationTerm: Aberration) |
ring(StartBand: Band, EndBand: Band): Void |
toString(): String |
toString(format: String): String |
translocate(AcceptorBand: Band, DonorChromosome: Chromosome, DonorBand: Band): Void |
tricentric(ByRef AberrationTerm: Aberration): Void |
triplicate(StartBand: Band, EndBand: Band): Void |
Programming Language
- Microsoft Visual Basic .Net.
Availability
- Copyrighted but free software under the GNU Public License.
- Binaries and source code can be obtained from the Download section.
Constructors
Public Sub New()
Instantiates a new Chromosome object. This parameter-less constructor must be public because of COM compatibility only. It is not intended for normal use. DO NOT USE IT.Public Sub New(ISCNLong As String)
Instantiates a new Chromosome object.Parameters
- ISCNLong: The description of the derivative chromosome in the detailled notation according to the ISCN 1995.
In case of non-derivative chromosomes, simply the chromosome number is passed to the constructor.
Exceptions
- ArgumentException: If the textual description of the Chromosome does not meet the patterns (regular expressions) used to recognize its constituents, an ArgumentException containing a description of the problem is thrown.
The exception may actually stem from a function used by this constructor, e.g. the constructor of Fragment class, and then be passed through.
Remarks
- A "normal" chromosome will be translated into a "derivative" chromosome constisting of one large fragment, e.g. chromosome #9 will be dealt with as "der(9)(9pter->9qter)"
Examples
- myChromosome = New Chromosome("1") initializes a Chromosome object for the "normal" chromosome 1.
- myDerChromomosome = New Chromosome("der(22)(22pter->22q112::9q34->9qter)") initializes a Chromosome object describing the Philadelphia chromosome consisting of a fragment of chromosome 22 from p terminus to band 22q112 with a fragment of chromosome 9 from band 9q34 to the q-terminus linked to it in this order and orientation.
Public Sub New(ByVal ChromosomeNumber As String, ByVal StrictISCN As Boolean)
Instantiates a new Chromosome object describing a non-derivative chromosome which may be used as a starting point for introducing aberrations.Parameters
- ChromosomeNumber: the number of the (non-derivative) chromosome.
- StrictISCN: indicates if a higher stringency is to be applied when introducing aberrations
Remarks
- The "normal" chromosome will be translated into a "derivative" chromosome constisting of one large fragment, e.g. chromosome #9 will be dealt with as "der(9)(9pter->9qter)"
- The StrictISCN parameter is used when introducing aberrations into the chromosome: if true, intrachromosomal rearrangements must not span junctions of earlier rearrangements. E.g. an inversion at 1q23 and 2q33 in a der(1)(1pter->1q25::2q31->2qter) would not be allowed.
Examples
- myChromosome = New Chromosome("1", true) initializes a Chromosome object for the "normal" chromosome 1 and requires strict ISCN compliance.
- myChromosome = New Chromosome("1", false) initializes a Chromosome object for the "normal" chromosome 1 and allows the introduction of aberrations which cannot be described correctly with the ISCN.
Interfaces
This class provides one standard interface:ICloneable
is implemented with the clone function.Enumerations
The class provides an enumeration for dealing with the replacing status of the chromosome in a karyogram. the chromosome can be present additionally, it can replace one or more "normal" chromosomes, or a "normal" chromosome has to be removed without a replacement.Enum ReplacingStatus
A chromosome can be present additionally, it can replace one or more "normal" chromosomes, or a "normal" chromosome has to be removed without a replacement.Value | Meaning |
Removes = -1 | The corresponding "normal" chromosome is removed without any replacement. |
Replaces = 0 | This chromosome replace a normal chromosome with the same number; if it is multi-centromeric, also normal chromosomes indicated by the chromsome numbers of the other centromeres are replaced. |
Adds = 1 | The chromosome is additionally present. |
Properties
Since the chromosome object expects most of its properties not to be changed directly after its initialisation, all such properties are read-only. They were made availbale through their respective getPropertyName and isPropertyName functions, resp. only (see below).A few properties are accessible as properties, and some of them can be changed after initialisation.
Public ReadOnly Property CausingAberration() As Aberration
Returns an aberration which is associated with this chromosome. That aberration gave raise to this chromosome.Property Value
- an aberration associated with this chromosome
Parameters
- None.
Remarks
- Since a property cannot be set by reference, the property was made read-only. The value can be set by the function "setCausingAberration(ByRef Cause As Aberration)".
Public Property ExternalID() As String
Gets or sets an identifier for the chromosome.Property Value
- an identifier for the chromosome.
Parameters
- None.
Remarks
- By convention of the CyDAS package, chromosomes can receive an identifier consisting of the chromosome number, an underline, and an index identifying the chromosome among its sister chromosomes. The property is extensively used when calculating a Karyogram.
- Of course, it is possible to use other identifiers for other purposes.
Examples
- The identifier for the second X chromosome should be "X_2".
- The identifier for an additionaly present chromosome "der(5)add(5)(q22)" (i.e. the third chromosome in the group of chromosome #5) should be in an otherwise normal diploid karyotype "5_3".
Public ReadOnly Property ISCNShort() As String
Returns the description of the chromosome in ISCN short style, if that style is possible with this chromosome.Property Value
- the ISCN short description of the chromosome.
Parameters
- None.
Remarks
- An empty string is returned when the short style cannot be applied. For more information on its applicability, see below at the ISCNShortPossible property.
- The property is read-only since the ISCN short description is calculated internally when ever an aberration is introduced into the chromosome.
Public ReadOnly Property ISCNShortPossible() As Boolean
Indicates if the chromosome can be written in the ISCN short style.Property Value
- an indication if the ISCN short style is possible.
Parameters
- None.
Remarks
- This property is updated automatically after an aberration was introduced into the chromosome.
- The ISCN short form is not possible when the chromosome was initialised with an ISCN detailed description.
- If an aberration was introduced with break points on two different fragments, the ISCN short form can no more be calculated (e.g. in inversion at 9q21.1 and 10q24.3 in a der(9)t(9;10)(q22.2;q22.2)).
Public Property Replaces() As ReplacingStatus
Gets or sets the replacing status of the chromosome.Property Value
- the replacing status of the chromosome.
Parameters
- None.
Remarks
- In e.g. a karyogram, a chromosome can be present additionally, it can replace one or more "normal" chromosomes, or a "normal" chromosome has to be removed without a replacement; the values are defined in the ReplacingStatus enumeration described above.
Public Property StrictISCN() As Boolean
Gets or sets the parameter used for determining if the Chromosome object should strictly comply with the ISCN when introducing aberrations.Property Value
- a parameter determining if the Chromosome strictly complies with the ISCN.
Parameters
- None.
Remarks
- Setting this value does not influence previously introduced aberrations.
- If set to true, intrachromosomal rearrangements must not span junctions of earlier rearrangements. E.g. an inversion at 1q23 and 2q33 in a der(1)(1pter->1q25::2q31->2qter) would not be allowed.
Methods
Public Sub add(ByRef Band As Band)
Adds material of unknown origin to Band in the chromosome, thereby replacing the terminal region.Parameters
- Band: a reference to a Band object describing the break point where the addition is to take place.
Exceptions
- ArgumentOutOfRangeException: the band must be found somewhere on the chromosome.
- ArgumentNullException: Band must not be a null reference.
- InvalidOperationException: No centromer was found in the chromosome.
Remarks
- An Addition replaces the chromosomal material from the break point to the terminus with material of unknown origin.
- The BrokenLevel of the Band object is increased. If Band is to be used unchanged in other functions, or will be changed by other functions, a clone should be established first.
Examples
- Introduction of an Addition in chromosome # 1 at p34 (="add(1)(p34)") can be done as follows:
Dim myChromosome As Chromosome = New Chromosome("1")
Dim myBand As Band = New Band("1p34")
myChromosome.add(myBand)
myChromosome.toString will then result in "der(1)(1qter->1p34::?)"
Internals
- The function determines the last occurence of Band in the chromosome.
- A part of the chromosome which starts at that occurence and extends over a centromer is then taken, and a fragment of unknown origin (without centromere) is added.
Public Function clone() As Object Implements ICloneable.Clone
Creates a deep copy of the Chromosome object.Return Value
- A deep copy of the Chromosome object.
Implements
Remarks
- During cloning, all instance wide variables are copied and the collection with the constituent fragments is cloned (Fragment.clone). The CausingAberration is not cloned because Aberration and Chromosome are mutually linked via that property.
Public Function containsBand(ByRef Band As Band) As Boolean
Tells if the derivative chromosome contains the specified Band.Return Value
- true, if the band was found in the chromosome
- false, otherwise
Parameters
- Band: the band to be looked for.
Remarks
- Loops through the collection of fragments constituting the chromosome and calls Fragment.extendsOverBand(Band) on each fragment.
- It does not matter if that Band is found once only or more often in the chromosome.
Public Sub delete(ByRef StartBand As Band)
Introduces a terminal deletion into the chromosome starting from the denoted band.Parameters
- StartBand: a reference to a Band object describing the break point where the terminal deletion is to take place.
Exceptions
- ArgumentOutOfRangeException: the band must be found somewhere on the chromosome.
- ArgumentNullException: Band must not be a null reference.
- InvalidOperationException: No centromer was found in the chromosome.
Remarks
- A terminal deletion removes the chromosomal material from the break point to the terminus.
- The BrokenLevel of StartBand is increased. If StartBand is to be used unchanged in other functions, or will be changed by other functions, a clone should be established first.
Examples
- Introduction of an Deletion in chromosome # 1 at p34 (="del(1)(p34)") can be done as follows:
Dim myChromosome As Chromosome = New Chromosome("1")
Dim myBand As Band = New Band("1p34")
myChromosome.delete(myBand)
myChromosome.toString will then result in "der(1)(1qter->1p34)"
Internals
- The function determines the last occurence of Band in the chromosome.
- A part of the chromosome which starts at that occurence and extends over a centromer is then taken.
Public Sub delete(ByRef StartBand As Band, ByRef EndBand As Band)
Introduces a non-terminal deletion into the chromosome starting from StartBand and extending to EndBand.Parameters
- StartBand: a reference to a Band object describing the break point where the non-terminal deletion will start.
- EndBand: a reference to a Band object describing the break point where the non-terminal deletion will end.
Exceptions
- ArgumentOutOfRangeException: the bands must be found somewhere on the chromosome.
- Exception: Neither band must be a null reference.
- Exception: With strict ISCN compliance, no centromere must be deleted; both bands have to reside on the same fragment.
Remarks
- A non-terminal deletion removes the chromosomal material from the first break point to the second break point.
- The BrokenLevel of StartBand and EndBand is increased. If StartBand or EndBand is to be used unchanged in other functions, or will be changed by other functions, a clone should be established first.
- With strict ISCN compliance, the deletion of a centromere is prevented. Otherwise, a centromere can be deleted, but at least one centromere must remain.
Examples
- Introduction of an Deletion in chromosome # 1 from p21 to p34 (="del(1)(p21p34)") can be done as follows:
Dim myChromosome As Chromosome = New Chromosome("1")
Dim myStartBand As Band = New Band("1p21")
Dim myEndBand As Band = New Band("1p34")
myChromosome.delete(myStartBand, myEndBand)
myChromosome.toString will then result in "der(1)(1qter->1p21::1p34->1qter)"
Internals
- The method looks for the last occurence of both bands on a fragment of the chromosome and introduces the deletion there.
- In case of non-strict-ISCN-compliance, if no fragment harbouring both bands was encountered, the distinct fragments for each of the bands are searched for; this may yield the loss of whole fragment(s) which are between these occurences, including a centromere.
- A part of the chromosome which starts at one terminus and extends to the first band, and a part of the chromosome which starts at the second band and extends to the other terminus, are then taken as result.
Public Sub dicentric(ByRef Band1 As Band, ByRef SecondChromosome As Chromosome, ByRef Band2 As Band)
A dicentric chromosome is set up by a translocation of a centromer containing fragment of a second chromosome starting from Band2 onto this chromosome at Band1.Parameters
- Band1: a reference to a Band object describing the break point in this chromosome
- SecondChromosome: a reference the other Chromosome used for the formation of the dicentric chromosome.
- Band2: a reference to a Band object describing the break point in the SecondChromosome.
Exceptions
- Exception: the bands must be found somewhere on the respective chromosome.
- ArgumentNullException: Neither band nor SecondChromosome must be a null reference.
- Exception: No centromer was found in a chromosome.
Remarks
- A dicentric chromosome is formed with fragment(s) from this chromosome starting at a terminus, extending via the centromer to Band1 and then adding fragment(s) of SecondChromosome from Band2 via centromer to a terminus.
- The BrokenLevel of StartBand and EndBand is increased. If StartBand or EndBand is to be used unchanged in other functions, or will be changed by other functions, a clone should be established first.
- Sometimes the formation of dicentric chromosomes is described as a translocation. The translocate function will not build a dicentric chromosome, this function is to be used instead.
Examples
- Formation of "dic(1;2)(p21;q24)" can be done as follows:
- The Robertsonian translocation "der(13;21)(q10;q10)" can be done as follows:
Dim myChromosome As Chromosome = New Chromosome("1")
Dim myBand1 As Band = New Band("1p21")
Dim mySecondChromosome As Chromosome = New Chromosome("2")
Dim myBand2 As Band = New Band("2q24")
myChromosome.dicentric(myBand1, mySecondChromosome, myBand2)
myChromosome.toString will then result in "der(1;2)(1qter->1p21::2q24->2pter)"
Dim myChromosome As Chromosome = New Chromosome("13")
Dim myBand1 As Band = New Band("13q10")
Dim mySecondChromosome As Chromosome = New Chromosome("21")
Dim myBand2 As Band = New Band("21q10")
myChromosome.dicentric(myBand1, mySecondChromosome, myBand2)
myChromosome.toString will then result in "der(13;21)(13qter->13q10::21q10->21qter)"
Internals
- The method looks for the last occurence of a band on its chromosome.
- A part of this chromosome which starts at one terminus and extends to the first band via the centromer is taken. It may be inverted if the first band comes before the centromer.
- A part of the second chromosome which starts at one terminus and extends to the second band via the centromer is taken. It may be inverted if the centromer comes before the second band. This part is then added.
Public Sub duplicate(ByRef Band1 As Band, ByRef Band2 As Band)
The fragment from Band1 to Band2 becomes duplicated.Parameters
- Band1: a reference to a Band object describing the break point in the chromosome where the duplicated fragment starts.
- Band2: a reference to a Band object describing the break point in the chromosome where the duplicated fragment ends.
Exceptions
- Exception: the bands must be found somewhere on the chromosome.
- ArgumentNullException: Neither band must be a null reference.
- Exception: With strict ISCN, both bands must reside on the same fragment of the chromosome, and no centromere muts be duplicated.
Remarks
- With strict ISCN compliance, the duplication of a centromere is prevented. Otherwise, a centromere can be duplicated, but the ISCN formula might be misleading because in the der() clause the duplicated centromere will be denoted twice (this is a bug of the ISCN).
- "Inverted" duplications are not described unequivocally. One of the two possibilities is taken: the chromosome extends from pter to the band furter downstream, then the inverted fragment is added, then the remaining chromosome.
- The method looks for the last occurence of both bands on a fragment of the chromosome and introduces the duplication there. If no fragment harbouring both bands was encountered, the distinct fragments for each of the bands are searched for; this may yield the duplication of whole fragment(s). Generally, this feature does not cause problems.
- The BrokenLevel of StartBand and EndBand is increased. If StartBand or EndBand is to be used unchanged in other functions, or will be changed by other functions, a clone should be established first.
- The function does not prevent the duplication of centromers.
Examples
- Formation of "dup(1)(q21q24)" can be done as follows:
Dim myChromosome As Chromosome = New Chromosome("1")
Dim myBand1 As Band = New Band("1q21")
Dim myBand2 As Band = New Band("1q24")
myChromosome.duplicate(myBand1, myBand2)
myChromosome.toString will then result in "der(1)(1pter->1q24::1q21->1qter)"
Internals
- The method looks for the last occurence of both bands on a fragment of the chromosome and introduces the duplication there.
- In case of non-strict-ISCN-compliance, if no fragment harbouring both bands was encountered, the distinct fragments for each of the bands are searched for; this may yield the duplication of whole fragment(s) which are between these occurences, including a centromere.
- Internal definition of "inverted" and "directed" duplication must be seen from a linear view of the chromosome and is not consistent with the definition of the ISCN; ISCN data are nonetheless correctly evaluated (with inverted duplications, only one of the two possibilies is taken; see above).
- In case of a "direct" duplication, a part of the chromosome starting at a terminus and extending to the later band via the earlier band is taken, and a part of the chromosome starting at the earlier band extending to the other terminus via the later band is added.
- In case of an inverted duplication, a part of the chromosome starting at a terminus and extending to the later band via the earlier band is taken, the intermittend part from the later to the earlier band is added, and another part of the chromosome starting from the later band extendng to the other terminus (which does not extend over the earlier band) is added.
Public Overloads Function equals(ByRef CompareChromosome As Chromosome) As Boolean
Two chromosomes are regarded equal when they share the same fragment composition as expressed by the ISCN detailed notation.Return Value
- true, if both Chromosomes are found to be equal.
- false, otherwise.
Parameters
- CompareChromosome: the Chromosome to be compared with this chromosme.
Remarks
- To avoid errors due to the orientation of the chromosome, both chromosomes are "erected".
Examples
- "der(9)t(9;22)(q34.1;q11.2)" and "der(9)(22qter->22q11.2::9q34.1->9pter)" are equal.
Internal Processing
- After calling erect(), the exact ISCN detailed descriptions of the chromosomes (toString("E")) are compared.
Public sub erect()
The orientation of the chromosomal fragments is set up such way that it normally corresponds with the view of cytogeneticists..Return Value
- none
Parameter
- none
Remarks
- Because the description in the ISCN manual does not comply with the typical views of cytogeneticists, a different algorithm was established. Essentially, it tries to orientate the fragment containing the centromere (in case of multi-centromeric chromosomes the centromere with the lowest chromosome number) such way that that fragment is parallel to the corresponding region in a normal chromosome.
Examples
- The chromosome "der(1)(1qter->1p21::Xp21->Xpter)" remains unchanged, while the chromosome "der(1)(1qter->1p21::Xq21->Xqter)" is inverted.
Internals
- Basically, the series of tests is:
- Find the centromere with the lowest chromosome number and get the first centromere containing fragment
- If its first band is on the p arm, the orientation is ok, except when it is "p10"; if it is on the q arm, the chromosome must be inverted, except when it is "q10".
- If the band found above was a centromere (p10 or q10), another fragment with a centromere of that chromosome is searched for. If such a fragment exists, the same checks are performed as above. Next, the fragment which extends longer away from the centromer is taken.
- Some cases remain which need not be decided (e.g. otherwise normal isochromosomes).
- If the chromosome was found to be in the wrong order, the revert() function is called.
Public sub erectOld()
Resets the orientation of the chromosomal fragments to the standard series described in the ISCN manual (chapter 4.3.2.2).Return Value
- none
Parameter
- none
Remarks
- The description in the ISCN manual is severly incomplete; it was amended slightly. Furthermore, examples can be found in that manual proving a lack of compliance already there. A better way for "erecting" chromosomes was implemented in the (new) erect function described above.
Examples
- The chromosome "der(1)(1qter->1p21::Xp21->Xpter)" remains unchanged, while the chromosome "der(1)(1qter->1p21::Xq21->Xqter)" is inverted.
Internals
- Basically, the series of tests is:
- Find the centromere with the lowest chromosome number
- try to find a p-arm of that chromosome at the end of this derivative chromosome; if a terminal fragment is of unknown origin, the next fragment is taken instead.
- If both terminal fragments are such p-arms, the more distal end point is relevant.
- If none is such a p-arm, and those arms are q-arms, and the lowest chromosome number of the q-arms is relevant.
- Some cases remain which cannot be decided.
- If the chromosome was found to be in the wrong order, the revert() function is called.
getBreakPoints() As Bands
Gets a Bands object containing the break points found in the derivative chromosome.Property Value
- a Bands object containing the break points of the chromosome.
Remarks
- Break points are calculated from the end points of the fragments constituting the chromosome. If such an end point is described as a terminus, it is not added.
- Duplicate break points are ignored.
Public Function getCentromerePosition(ByVal Resolution As ChromosomeData.eResolutionLevel) As Integer
Returns the distance of the centromere from the chromosome start point.Return Value
- the distance of the centromere from the chromosome top.
Parameters
- Resolution: the banding resolution at which the chromosome is to be drawn. Values for the rsolution are defined in the ChromosomeData.eResolutionLevel enumeration.
Remarks
- This function is intended for use with drawing a Karyogram: here, a common height for all centromeres is desired.
- If a chromosome is multicentromeric, the first centromere with the same number as the first chromosome in the der() clause to be found is taken. The chromosome is not "erected" before.
- If that chromosome number is unknown, the function returns the middle of the chromosome (half of the chromosome length).
getContainedBands(ByVal Resolution As Band.eResolutionLevel) As Bands
Gets a Bands object containing all the bands of the derivative chromosome which would be visible at the given resolution.Property Value
- a Bands object containing all the bands of the derivative chromosome which would be visible at the given resolution.
Parameters
- Resolution: the banding resolution to be used for the calculation of the chromosomal bands.
Remarks
- Bands are calculated from the fragments constituting the chromosome using the Fragment.getContainedBands(Resolution) function.
- The order of bands is maintained, duplicate bands are not ignored.
getFusions(Optional ByVal MultiplicatorMin As Integer = 1, Optional ByVal MultiplicatorMax As Integer = 1) As Fusions
Gets a Fusions object describing all the fusions (junctions) infered by this derivative chromosome.Property Value
- a Fusions object describing all the fusions infered by this derivative chromosome.
Parameters
- MultiplicatorMin: the minimum number of copies of this chromosome present in the karyotype. By default 1.
- MultiplicatorMax: the maximum number of copies of this chromosome present in the karyotype. By default 1.
Remarks
- Fusions (junctions) are formed by the start or end point of the fragments of the chromosome which came into contact with each other.
Examples
- With "der(22)(22pter->22q112::9q34->9qter)", there is one fusion: (+)(22)(q112)::(+)(9)(q34).
getQuantitativeAberrationsWhenAdding(Optional ByVal MultiplicatorMin As Integer = 1, Optional ByVal MultiplicatorMax As Integer = 1) As QuantitativeAberrations
Gets a QuantitativeAberrations object describing all the gains and losses infered by a gain of this derivative chromosome.Property Value
- a QuantitativeAberrations object describing all the gains and losses infered by a gain of this derivative chromosome.
Parameters
- MultiplicatorMin: the minimum number of additional copies of this chromosome present in the karyotype. By default 1.
- MultiplicatorMax: the maximum number of additional copies of this chromosome present in the karyotype. By default 1.
Remarks
- All the fragments constituting the chromosome are seen as gained fragments.
- If the derivative chromosome replace a normal chromosome(s), the property getQuantitativeAberrationsWhenReplacing is to be used.
Examples
- With "der(22)(22pter->22q112::9q34->9qter)", there are gains of fragments "22pter->22q112" and "9q34->9qter", and no losses.
getQuantitativeAberrationsWhenReplacing(Optional ByVal MultiplicatorMin As Integer = 1, Optional ByVal MultiplicatorMax As Integer = 1) As QuantitativeAberrations
Gets a QuantitativeAberrations object describing all the gains and losses infered by a replacement of a normal chromosome(s) by this derivative chromosome.Property Value
- a QuantitativeAberrations object describing all the gains and losses infered by a replacement of a normal chromosome(s) by this derivative chromosome.
Parameters
- MultiplicatorMin: the minimum number of replaced copies of the corresponding normal chromosome(s). By default 1.
- MultiplicatorMax: the maximum number of replaced copies of the corresponding normal chromosome(s). By default 1.
Remarks
- All the fragments constituting the derivative chromosome are seen as gained fragments when their chromosome number is different from the chromosome number(s) given in the der() clause.
- Fragments with a chromosome number found in the der() clause are subtracted from the "normal" chromosome, the remaining part of the "normal" chromosome is then seen as a loss, while regions which could not be subtracted are seen as a gain.
- The chromosome does not know the ploidy level of the karyotype, hence it cannot throw an exception when too many normal chromosomes are to be replaced.
- If the derivative chromosome is additionally present, the property getQuantitativeAberrationsWhenAdding is to be used.
Examples
- With "der(22)(22pter->22q112::9q34->9qter)", there is a gain of fragment "9q34->9qter", and a loss fragment "22q112->22qter".
Public Sub hsr(ByRef AtBand As Band)
Introduces a homogeneously staining region ("hsr") into the chromosome.Parameters
- AtBand: a reference to a Band object describing the break point where the homogeneously staining region is to be introduced.
Exceptions
- Exception: the band must be found somewhere on the chromosome.
- ArgumentNullException: AtBand must not be a null reference.
Remarks
- A homogeneously staining region inserts material of unknown origin (which may consist of a small region which is highly amplified) into the chromosome at the given break point.
- The BrokenLevel of the Band object is increased, if AtBand is not a previous break point. If AtBand is to be used unchanged in other functions, or will be changed by other functions, a clone should be established first.
- If AtBand describes the end point of a fragment of this derivative chromosome (i.e. a previous break point), that point will be taken; otherwise, a fragment containing AtBand will be split there.
- If the hsr is to be introduced at the junction of two fragments, the other hsr function is to be used instead.
Examples
- Introduction of an hsr in chromosome # 1 at p34 (="hsr(1)(p34)") can be done as follows:
Dim myChromosome As Chromosome = New Chromosome("1")
Dim myBand As Band = New Band("1p34")
myChromosome.hsr(myBand)
myChromosome.toString will then result in "der(1)(1pter->1p34::hsr::1p34->1qter)"
Internals
- The function tries to find AtBand at an end of a fragment of the chromosome first.
- If no such position was found, the function determines the last occurence of AtBand on a fragment of the chromosome; that fragment would then be split at AtBand.
- A part of the chromosome which starts at a terminus and extends to AtBand is then taken, and a fragment of unknown origin (marked as "hsr") is added, and the remaining chromosomal material.
Public Sub hsr(ByRef AtBand1 As Band, ByRef AtBand2 As Band)
Introduces a homogeneously staining region ("hsr") into the chromosome at the border of two fragments.Parameters
- AtBand1: a reference to a Band object describing the first break point where the homogeneously staining region is to be introduced.
- AtBand2: a reference to a Band object describing the second break point where the homogeneously staining region is to be introduced.
Exceptions
- Exception: the bands must be found as the start and end point of two neighboring fragments of the chromosome.
- ArgumentNullException: neither AtBand1 nor AtBand2 must not be a null reference.
Remarks
- A homogeneously staining region inserts material of unknown origin (which may consist of a small region which is highly amplified) into the chromosome at the given position where a previous break point is located.
- If the hsr is to be inserted elsewhere in the chromosome, the other hsr function is to be used instead.
Examples
- Introduction of an hsr in the derivative chromosome der(1)ins(1;7)(q21;p11p21) at the junction of 1q21 and 7p21 can be done as follows:
Dim myChromosome As Chromosome = New Chromosome("der(1)ins(1;7)(q21;p11p21)")
Dim myBand1 As Band = New Band("1q21")
Dim myBand2 As Band = New Band("7p21")
myChromosome.hsr(myBand1, myBand2)
myChromosome.toString will then result in "der(1)(1pter->1q21::7p11->7p21::hsr::1q21->1qter)"
Internals
- The function tries to find AtBand1 and AtBand2 at the adjacent ends of two neighboring fragments of the chromosome.
- A part of the chromosome which starts at a terminus and extends to AtBand1 is then taken, and a fragment of unknown origin (marked as "hsr") is added, and the remaining chromosomal material.
Public Sub insert(ByRef AcceptorBand As Band, ByRef DonorStartBand As Band, ByRef DonorEndBand As Band)
Introduces an insertion with the inserted fragment derived from the same chromosome (i.e. intrachromosomal insertion).Parameters
- AcceptorBand: a reference to a Band object describing the break point where the fragment will be inserted.
- DonorStartBand: a reference to a Band object describing the break point at which the inserted fragment starts.
- DonorEndBand: a reference to a Band object describing the break point at which the inserted fragment ends.
Exceptions
- Exception:
- The bands must be found somewhere on the chromosome.
- The acceptor band must not reside on the moved fragment.
- If strict ISCN compliance is required, DonorStartBand and DonorEndBand must reside on the same fragment, which must not contain a centromer.
- ArgumentNullException: Neither band must be a null reference.
Remarks
- With this function, "ins(1;3)(p35;q25q27)" can be treated as an intrachromosomal insertion in a derivative chromosome "der(1)t(1;3)(q32;q21)" yielding "der(1)(1pter->1p35::3q27->3q25::1p35->1q32::3q21->3q25::3q27->3qter)".
- The BrokenLevel of all Band objects is increased. If such a Band is to be used unchanged in other functions, or will be changed by other functions, a clone should be established first.
- The method looks for the last occurence of both donor bands on a fragment of the chromosome. If no fragment harbouring both bands was encountered, the distinct fragments for each of the donor bands are searched for; this may cause whole fragment(s) to be moved. Generally, this feature does not cause problems.
Examples
- Formation of "ins(1)(q41p12p22)" can be done as follows:
Dim myChromosome As Chromosome = New Chromosome("1")
Dim myAcceptorBand As Band = New Band("1q41")
Dim myDonorStartBand As Band = New Band("1p12")
Dim myDonorEndBand As Band = New Band("1p22")
myChromosome.insert(myAcceptorBand, myDonorStartBand, myDonorEndBand)
myChromosome.toString will then result in "der(1)(1pter->1p22::1p12->1q41::1p12->1p22::1q41->1qter)"
Internals
- The method looks for the last occurence of both donor bands on the same fragment of the chromosome, and if such an occurence was not encountered, on different fragments.
- In case of non-strict-ISCN-compliance, if no fragment harbouring both bands was encountered, the distinct fragments for each of the bands are searched for; this may yield the moving of whole fragment(s) which are between these occurences, including a centromere.
- Also for the acceptor band, the last occurence is searched for.
- "Inverted" and "directed" insertion must be seen from a linear view of the chromosome and is not consistent with the definition of the ISCN.
- The function establishes a collection with the fragment(s) to be moved which may be inverted.
- Thereafter, the original region is deleted using the delete() function.
- The acceptor position is searched for again, since it may have been moved by the delete function.
- The chromosomal region upto the acceptor site is taken, the region to be moved added, and then the reamining chromosome.
Public Sub insert(ByRef AcceptorBand As Band, ByRef DonorChromosome As Chromosome, ByRef DonorStartBand As Band, ByRef DonorEndBand As Band)
Performs an insertion with the inserted fragment derived from a different chromosome (i.e. interchromosomal insertion).Parameters
- AcceptorBand: a reference to a Band object describing the break point where the fragment will be inserted.
- DonorChromose: a reference to a Chromosome object describing the (derivative or normal) chromosome donating the fragment to be inserted into this chromosome.
- DonorStartBand: a reference to a Band object describing the break point at which the inserted fragment starts.
- DonorEndBand: a reference to a Band object describing the break point at which the inserted fragment ends.
Exceptions
- ArgumentOutOfRangeException: The bands must be found somewhere on their respective chromosome.
- ArgumentNullException: Neither band nor chromosome must be a null reference.
- Exception: With strict ISCN compliance, both Donor start and end band must reside on the same chromosomal fragment, and a centromere must not be moved.
Remarks
- The BrokenLevel of all Band objects is increased. If such a Band is to be used unchanged in other functions, or will be changed by other functions, a clone should be established first.
- If this chromosome is actually the donor in an interchromosomal insertion, a deletion will be introduced (e.g. a "der(1)ins(3;1)(p21;q21q31)" will be treated as a "der(1)del(1)(q21q31)")
Examples
- Formation of "ins(1;2)(q41;p12p22)" can be done as follows:
Dim myChromosome As Chromosome = New Chromosome("1")
Dim myAcceptorBand As Band = New Band("1q41")
Dim myDonorChromosome As Chromosome = New Chromosome("2")
Dim myDonorStartBand As Band = New Band("2p12")
Dim myDonorEndBand As Band = New Band("2p22")
myChromosome.insert(myAcceptorBand, myDonorChromosome, myDonorStartBand, myDonorEndBand)
myChromosome.toString will then result in "der(1)(1pter->1q41::2p12->2p22::1q41->1qter)"
Internals
- The method first tries to locate the acceptor band on this chromosome. If it was not encountered, it searches for the donor bands. If they were found, this chromosome is regarded as the donor in an interchromosomal insertion, and hence a corresponding deletion is introduced by transferring to the delete() function.
- If the donor fragment is of unknown type ("?"), the insertion at a previous break point is preferred.
- "Inverted" and "directed" insertion must be seen from a linear view of the chromosome and is not consistent with the definition of the ISCN.
- The function takes a region of the chromosome from its start point to the acceptor band, adds there the region to be inserted (which may need inversion), and then the reamining part of the chromosome.
Public Sub invert(ByRef StartBand As Band, ByRef EndBand As Band)
Performs an inversion of the fragment from StartBand to EndBand on the chromosome.Parameters
- StartBand: a reference to a Band object describing the break point where the inversion will start.
- EndBand: a reference to a Band object describing the break point where the inversion will end.
Exceptions
- Exception: The bands must be found somewhere on the chromosome.
- ArgumentNullException: Neither band must be a null reference.
- Exception: With strict ISCN, both start and end band must reside on the same chromosomal fragment.
Remarks
- An inversion changes the orientation of a chromosomal fragment(s) between StatBand and EndBand.
- The BrokenLevel of all Band objects is increased. If such a Band is to be used unchanged in other functions, or will be changed by other functions, a clone should be established first.
- The method does not prevent inversions from starting in centromers ("p10" or "q10").
Examples
- Introduction of an Inversion in chromosome # 1 from p21 to p34 (i.e. "inv(1)(p21p34)") can be done as follows:
Dim myChromosome As Chromosome = New Chromosome("1")
Dim myStartBand As Band = New Band("1p21")
Dim myEndBand As Band = New Band("1p34")
myChromosome.invert(myStartBand, myEndBand)
myChromosome.toString will then result in "der(1)(1pter->1p34::1p21->1p34::1p21->1qter)"
Internals
- The method looks for the last occurence of both bands on a fragment of the chromosome.
- In case of non-strict-ISCN-compliance, if no fragment harbouring both bands was encountered, the distinct fragments for each of the bands are searched for; this may yield the inversion of whole fragment(s) which are between these occurences.
- The function takes a region of the chromosome from its start point to the start band, adds there the region to be inverted while inverting it, and then the remaining part of the chromosome.
Public Sub isomerize(ByRef Band As Band)
Builds an isochromosome ("i") or isoderivative chromosomes ("ider") or isodicentric chromosome ("idic" or "der") based on the derivative chromosome and the respective band.Parameters
- Band: a reference to a Band object describing the break point where the isomeziation is to take place.
Exceptions
- Exception: the band must be found somewhere on the chromosome.
- ArgumentNullException: Band must not be a null reference.
- Exception: With strict ISCN, for the formation of an isodicentric chromosome, a centromere of the chromosome denoting the break point must be present.
Remarks
- The BrokenLevel of all Band objects is increased. If such a Band is to be used unchanged in other functions, or will be changed by other functions, a clone should be established first.
- If Band describes a centromer ("p10" or "q10"), an isochromosome or isoderivative chromosome containing the arm denoted in Band twice is formed.
- If Band is not a centromer, an iso-dicentric chromosome or derivative chromosome is formed containing the fragment(s) from Band via the centromer to the terminus twice.
- With strict ISCN, "der(1)t(1;3)(p21;p21)idic(3)(p22)" is not allowed, while else it is transformed into "der(1;1)(1qter->1p21::3p21->3p22::3p22->3p21::1p21->1qter)"
Examples
- Forming an isochromosome # 1 consisting of the q-arm (="i(1)(q10)") can be done as follows:
- Forming an iso-dicentric chromosome # 1 at Band p22 (="idic(1)(p22)") can be done as follows:
Dim myChromosome As Chromosome = New Chromosome("1")
Dim myBand As Band = New Band("1q10")
myChromosome.isomerize(myBand)
myChromosome.toString will then result in "der(1)(1qter->1q10::1q10->1qter)"
Dim myChromosome As Chromosome = New Chromosome("1")
Dim myBand As Band = New Band("1p22")
myChromosome.isomerize(myBand)
myChromosome.toString will then result in "der(1)(1qter->1p22::1p22->1qter)"
Internals
- The function determines the last occurence of Band in the chromosome.
- Internally, the function is split in two parts depending on whether Band is a centromere or not.
- A part of the chromosome which starts at a terminus upto Band (via the centromere, if Band is not a centromer) is taken and then added invertedly.
isRing As Boolean
Tells if the derivative chromosome describes a ring chromosome.Property Value
- true, if the chromosome describes a ring chromosome.
- false, otherwise.
Public Sub revert()
Turns the chromosome upside down by inverting the fragments and their order.Public Sub ring(ByRef AberrationTerm As Aberration)
Forms a ring chromosome based on the aberration given in ISCN notation.Parameters
- AberrationTerm: a reference to an Aberration object describing the ring formation using the ISCN.
Exceptions
- ArgumentNullException: AberrationTerm must not be a null reference.
Remarks
- This function is meant for derivative ring chromosomes.
- This function is to be used as the first function when setting up a derivative chromosome: all previous information will be lost.
Examples
- Forming the ring derivative ring chromosome "der(1)r(1;3)(p36q23;q21q27)" can be done as follows:
Dim myChromosome As Chromosome = New Chromosome("1")
Dim myAberration As Aberration = New Aberration("r(1;3)(p36q23;q21q27)")
myChromosome.ring(myAberration)
myChromosome.toString will then result in "der(1)(::1p36->1q23::3q21->3q27::)"
Internals
- At first, the function removes all previous information on the chromosome.
- Next, it queries all fragments from the AberrationTerm and adds them to the internal collection.
- Finally, it marks the chromosome to be a ring chromosome.
Public Sub ring(ByRef StartBand As Band, ByRef EndBand As Band)
Forms a ring chromosome based on the derivative chromosome at the denoted bands.Parameters
- StartBand: a reference to a Band object describing the break point where the ring will start.
- EndBand: a reference to a Band object describing the break point where the ring will end.
Exceptions
- ArgumentOutOfRangeException: the bands must be found somewhere on the chromosome.
- ArgumentNullException: Neither band must be a null reference.
- InvalidOperationException: No centromer was found in the chromosome.
Remarks
- The BrokenLevel of all Band objects is increased. If such a Band is to be used unchanged in other functions, or will be changed by other functions, a clone should be established first.
Examples
- Forming a ring with chromosome # 1 from p21 to q41 (="r(1)(p21q41)") can be done as follows:
Dim myChromosome As Chromosome = New Chromosome("1")
Dim myStartBand As Band = New Band("1p21")
Dim myEndBand As Band = New Band("1q41")
myChromosome.ring(myStartBand, myEndBand)
myChromosome.toString will then result in "der(1)(::1p21->1q41::)"
Internals
- The function tries to find occurences of StartBand and EndBand such way that between them at least one centromer will remain; preferably, both bands reside on the same fragment.
- The function takes all the region between StartBand and EndBand and marks the chromosome as a ring chromosome.
Public function toString() As String
Returns a textual description of the derivative chromosome using the detailed ISCN version.Return Value
- a textual description of the derivative chromosome using the detailed ISCN version.
Remarks
- The function queries the present value of "mstrISCN" which may presently be in strict version or in a more lenient version.
- For getting a specific version, use the toString(format) function described below.
Examples
- The derivative chromosome "der(22)t(9;22)(q341;q112)" may be returned as "der(22)(22pter->22q112::9q341->9qter)" or as "der(22)(22pter->22q11.2::9q34.1->9qter)"
Public function toString(format As String) As String
Returns a textual description of the derivative chromosome using the detailed ISCN version with the given format specification.Return Value
- a textual description of the derivative chromosome using the detailed ISCN version.
Parameter
- format: a short description of the format.
- "S": standard (lenient) description.
- "E": exact description. All items are recalculated with strict adherence to the ISCN manual.
The following values are defined:
Remarks
- The function itself does not make differences between the formats. Formats are passed through to Fragment.toString(format) and from there to Band.toString(format) where the different formats will take effect.
Examples
- The derivative chromosome "der(22)t(9;22)(q341;q112)" may be returned as "der(22)(22pter->22q112::9q341->9qter)" with "toString("S")" or as "der(22)(22pter->22q11.2::9q34.1->9qter)" with "toString("E")".
Public Sub translocate(ByRef AcceptorBand As Band, ByRef DonorChromosome As Chromosome, ByRef DonorBand As Band)
Introduces a translocation of a terminal fragment of the DonorChromosome from DonorBand into this Chromosome at AcceptorBand.Parameters
- AcceptorBand: a reference to a Band object describing the break point in this chromosome where the fragment will be translocated to.
- DonorChromosome: the chromosome donating a terminal fragment.
- DonorBand: a reference to a Band object describing the break point in the DonorChromosome where the fragment to be translocated starts.
Exceptions
- ArgumentOutOfRangeException: the bands must be found somewhere on the respective chromosome.
- ArgumentNullException: Neither band nor chromsome must be a null reference.
- InvalidOperationException: No centromer was found in a chromosome.
Remarks
- A translocation exchanges terminal fragments between two chromosomes.
- If a three-way-translocation is to be introduced, it has to be reduced to the two-way-translocation from the point of view of this chromosome (e.g. a der(22)t(1;9;22)(p21;q34;q11) is the same as a der(22)t(9;22)(q34;q11) and must be treated the later way).
- Sometimes the formation of dicentric chromosomes is described as a translocation. This function will not build a dicentric chromosome. If formation of a dicentric chromosome is meant, the dicentric function is to be used instead.
- The BrokenLevel of all Band objects is increased. If such a Band is to be used unchanged in other functions, or will be changed by other functions, a clone should be established first.
Theoretically, the exchange of non-terminal fragments might occur; no function is provided for such cases.
Examples
- Introducing the translocation "t(1;2)(p21;q31)" into chromosome # 1 can be done as follows:
Dim myChromosome As Chromosome = New Chromosome("1")
Dim myAcceptorBand As Band = New Band("1p21")
Dim myDonorChromosome As Chromosome = New Chromosome("2")
Dim myDonorBand As Band = New Band("2q31")
myChromosome.translocate(myAcceptorBand, myDonorChromosome, myDonorBand)
myChromosome.toString will then result in "der(1)(1qter->1p21::2q31->2qter)"
Public Sub tricentric(ByRef AberrationTerm As Aberration)
Forms a tricentric chromosome based on the aberration given in ISCN notation.Parameters
- AberrationTerm: a reference to an Aberration object describing the formation of a tricentric chromosome using the ISCN.
Exceptions
- ArgumentNullException: AberrationTerm must not be a null reference.
Remarks
- This function is to be used as the first function when setting up a derivative chromosome: all previous information will be lost.
Examples
- Forming the tricentric chromosome "trc(4;12;9)(q31;q22p13;q34)" can be done as follows:
Dim myChromosome As Chromosome = New Chromosome()
Dim myAberration As Aberration = New Aberration("trc(4;12;9)(q31;q22p13;q34)")
myChromosome.tricentric(myAberration)
myChromosome.toString will then result in "der(4;12;9)(4pter->4q31::12q22->12p13::9q34->9pter)"
Internals
- At first, the function removes all previous information on the chromosome.
- Next, it queries all fragments from the AberrationTerm and adds them to the internal collection.
Public Sub triplicate(ByRef StartBand As Band, ByRef EndBand As Band)
The fragment from StartBand to EndBand becomes triplicated.Parameters
- Band1: a reference to a Band object describing the break point in the chromosome where the triplicated fragment starts.
- Band2: a reference to a Band object describing the break point in the chromosome where the triplicated fragment ends.
Exceptions
- Exception: the bands must be found somewhere on the chromosome.
- ArgumentNullException: Neither band must be a null reference.
- Exception: With strict ISCN, the start and end points of the triplicated fragment must reside on the same chromosomal fragment.
Remarks
- The BrokenLevel of all Band objects is increased. If such a Band is to be used unchanged in other functions, or will be changed by other functions, a clone should be established first.
- The method looks for the last occurence of both bands on a fragment of the chromosome and introduces the triplication there. If no fragment harbouring both bands was encountered, the distinct fragments for each of the bands are searched for; this may yield the triplication of whole fragment(s). Generally, this feature does not cause problems.
- The function does not prevent the triplication of centromers.
- There are no exact ways to indicate the orientation(s) of the triplicated fragment.
Examples
- Formation of "trp(1)(q21q24)" can be done as follows:
Dim myChromosome As Chromosome = New Chromosome("1")
Dim myBand1 As Band = New Band("1q21")
Dim myBand2 As Band = New Band("1q24")
myChromosome.triplicate(myBand1, myBand2)
myChromosome.toString will then result in "der(1)(1pter->1q24::1q21->1q24::1q21->1qter)"
Interaction with other classes
Classes using Chromosome
The Chromosome class is used by the Aberration class for the analysis of derivative chromosomes and by the Karyogram class. Chromosome objects are constituent parts of the collection class Chromosomes.The CyDASGraphics class uses Chromosome objects for drawing the chromosomal framework.
Classes used by Chromosome
The Chromosome class itself makes use of some other classes of the CyDAS project, but always transiently only.A Chromosome is dealt with as an ordered collection of Fragment objects, each describing a region of the derivative chromosome. Band objects are typical parameters of public functions, a Bands object is used as output for all bands found on a derivative chromosome.
QuantitativeAberration and QuantitativeAberrations are used when determining what a gain of the derivative chromosome or the replacement of a normal chromosome(s) by the derivative chromosome would infer to the amounts of chromosomal material.
Internal Views
The decisive point in dealing with derivative chromosomes is viewing them as an ordered collection of chromosomal fragment. Even a "normal" chromosome gets translated into that view, i.e. as a fragment from pter to qter.Thereafter, aberrations can easily be introduced into the chromosome: the break point(s) has to be located on a fragment of the chromosome, which is then broken into new fragments at that position. Foreign fragments may be added there into the collection, or own fragments after inversion, duplication etc., thus giving raise to a derivative chromosome of new composition.