Analysing a monoclonal karyotype

The analysis of a simple (monoclonal) karyotype is an everyday task for cytogeneticists. The following section will show a broad example of the information which can be extracted from a karyotype when using the ISCNAnalyser dll.

Let us assume that the karyotype formula is entered in the textbox 'txtKaryotype' on a form. After clicking the button 'Button1', an analysis is performed and the results are written into the multiline textbox 'txtResult'.

At first, inegrate the ISCNAnalyser dll into your project. From the menu 'Project' select 'Add references'. The ISCNAnalyser dll is located in its installation directory (normally C:\CyDAS\).

Add an 'Imports' statement in your form before the beginning of the class:
Imports ISCNAnalyser

In the 'Button1_Click' procedure add:

Dim objKaryotype As Karyotype

'initialise it with the formula from the text box
objKaryotype = New Karyotype(txtKaryotype.Text)

'check whether it is valid
If objKaryotype.isValidKaryotype Then
    'the karyotype is valid, we can query a lot of information

    'get the ISCN formula:
    txtResult.Text &= "ISCN Formula: " & objKaryotype.ToString & vbCrLf

    'is it a composite [cp] karyotype?
    txtResult.Text &= "Is composite Karyotype: " & _
    objKaryotype.isCompositeKaryotype.ToString & vbCrLf

    'what is the clone size?
    txtResult.Text &= "Clone size: " & objKaryotype.getCloneSize.ToString & vbCrLf

    'is the karyotype incomplete?
    txtResult.Text &= "Is incomplete: " & objKaryotype.isIncompleteKaryotype.ToString & vbCrLf

    'what about its double minutes?
    txtResult.Text &= "Double Minutes: " & objKaryotype.getDoubleMinutes.ToString & vbCrLf

    'what about its markers?
    'a) the notation of all of them
    txtResult.Text &= "Markers: " & objKaryotype.getMarkers.ToString & vbCrLf
    'b) their amounts (minimum to maximum)
    txtResult.Text &= "Marker count: " & _
    objKaryotype.getMarkers.getCountMin.ToString & " to " & _
    objKaryotype.getMarkers.getCountMax.ToString & vbCrLf

    'what about the less well defined ring chromosomes?
    'a) their notation
    txtResult.Text &= "Rings: " & objKaryotype.getRings.ToString & vbCrLf
    'b) their numbers (minimum to maximum)
    txtResult.Text &= "Ring count: " & _
    objKaryotype.getRings.getCountMin.ToString & " to " & _
    objKaryotype.getRings.getCountMax.ToString & vbCrLf

    'the chromosome count
    'a) notation
    txtResult.Text &= "Chromosome count field : " & objKaryotype.getChromosomeCountField & vbCrLf
    'b) minimum and maximum numbers
    txtResult.Text &= "Chromosome count: " & _
    objKaryotype.getChromosomeCount.ToString & " to " & _
    objKaryotype.getChromosomeCountMax.ToString & vbCrLf

    'ploidy level
    txtResult.Text &= "Ploidy level: " & objKaryotype.getPloidyLevel & vbCrLf

    '(non-aberrant) sex chromosomes
    txtResult.Text &= "Sex chromosomes: " & objKaryotype.getSexChromosomes & vbCrLf

    'all the aberrations
    'a) their number
    txtResult.Text &= "Count of Aberration elements: " & objKaryotype.getAberrationCount & vbCrLf
    'b) information on each of them:
    Dim i As Integer
    For i = 0 To objKaryotype.getAberrationCount - 1 'index starts at 0
        'description of this aberration with lots of accompanying information
        txtResult.Text &= "Aberration " & i & ": " & objKaryotype.getAberrationString(i) & vbCrLf
    Next

    'information for the whole karyotype
    txtResult.Text &= "SUMMARY:" & vbCrLf

    'break points
    txtResult.Text &= "Break Points: " & objKaryotype.getBreakPoints.ToString & vbCrLf

    'structural aberrations in SCCN, not adjusted to a resolution
    txtResult.Text &= "Structural: " & objKaryotype.getQualitativeAberrations.ToString & vbCrLf

    'structural aberrations in SCCN, adjusted to 400 bphs resolution (question marks are ignored by default)
    txtResult.Text &= "Structural at 400bphs: "
    'may throw an error, if a given band does not exist
    Try
        txtResult.Text &= _
        objKaryotype.getQualitativeAberrationsExpandedToResolution(Band.eResolutionLevel.Resolution400Bands).ToString & vbCrLf
    Catch exc As Exception
        'error description for the user
        txtResult.Text &= exc.Message & vbCrLf
    End Try

    'quantitative aberrations in SCCN, not adjusted to a resolution
    txtResult.Text &= "Quantitative: " & objKaryotype.getQuantitativeAberrations.ToString & vbCrLf

    'quantitative aberrations in SCCN, adjusted to 400 bphs resolution (question marks are ignored by default)
    txtResult.Text &= "Quantitative at 400bphs: "
    'may throw an error, if a given band does not exist
    Try
        txtResult.Text &= _
        objKaryotype.getQuantitativeAberrationsExpandedToResolution(Band.eResolutionLevel.Resolution400Bands).ToString & vbCrLf
    Catch exc As Exception
        'error description for the user
        txtResult.Text &= exc.Message & vbCrLf
    End Try

    'information on fusions is still preliminary
    txtResult.Text &= "Fusions: " & objKaryotype.getFusions.ToString & vbCrLf

    'Complex Karyotype Aberration Score
    Dim oCKAS As CKAS = objKaryotype.getCKAS
    txtResult.Text &= "CKAS Ploidy/Numerical/Balanced/Unbalanced/Unclassified/Overall): " & oCKAS.getPloidy & "/" & oCKAS.getNumerical & "/" & oCKAS.getBalanced & "/" & oCKAS.getUnbalanced & "/" & oCKAS.getUnclassified & "/" & oCKAS.getOverallCKAS & vbCrLf

    'a long table will follow, we mark here the beginning of a new section
    txtResult.Text &= "-----------------------------------------------------" & vbCrLf   
    txtResult.Text &= "Band" & vbTab & "Gains" & vbTab & "Losses" & vbTab & "Struct." & vbCrLf

    'define an object telling gains, losses and structural aberrations for each band
    Dim oGLS As GainsLossesStructs

    'get the gains and losses from the quantitative aberrations
    oGLS = objKaryotype.getQuantitativeAberrationsExpandedToResolution(Band.eResolutionLevel.Resolution400Bands, True).getGainsLossesStructs(Band.eResolutionLevel.Resolution400Bands)

    'add the structural aberrations
    oGLS.addRange(objKaryotype.getQualitativeAberrationsExpandedToResolution(Band.eResolutionLevel.Resolution400Bands, True).getGainsLossesStructs(Band.eResolutionLevel.Resolution400Bands))

    'print it
    txtResult.Text &= oGLS.ToString
 
Else
    'show error message
    txtResult.Text &= "The Karyotype " & objKaryotype.ToString & " is not valid:" & vbCrLf & objKaryotype.getErrorDescription
End If

If the case shows clones with different karyotypes, see "Analysing a polyclonal karyotype".