/dotPlotter

A program developed for the Design Principles of Health Information Systems course during my postgraduate studies in Medical Informatics at Aristotle University of Thessaloniki.

Primary LanguageJava

Dot Plotter

Στην βιοπληροφορική το Dot Plot είναι μια γραφική μέθοδος σύγκρισης δύο βιολογικών ακολουθιών και ταυτοποίησης των περιοχών ομοιότητάς τους. Η μέθοδος αυτή απαιτεί την δημιουργία ενός ορθογώνιου πίνακα, κάθε στοιχείο του οποίου είναι το αποτέλεσμα της "σύγκρισης" κάθε βάσης της μιας ακολουθίας με κάθε βάση της δεύτερης ακολουθίας. Στην περίπτωση που σε κάποια θέση οι δυο ακολουθίες ταυτίζονται, δηλαδή έχουν την ίδια νουκλεοτιδική βάση, τότε η αντίστοιχη θέση του πίνακα θα σημανθεί.

Αν για παράδειγμα συγκρίνουμε μια ακολουθία με τον εαυτό της, τότε η διαγώνιος του τετραγωνικού πίνακα που θα δημιουργηθεί, θα είναι μια ενιαία σημασμένη περιοχή. Φυσικά θα υπάρχουν και άλλες περιοχές που θα διαπιστώνεται ταύτιση αλλά το μέγιστο μήκος ταύτισης θα είναι προφανώς πάνω στα σημεία της διαγωνίου:

  C T C C T A A A C C 
C X   X X         X X 
T   X     X           
C X   X X         X X 
C X   X X         X X 
T   X     X           
A           X X X
A           X X X    
A           X X X   
C X   X X         X X      
C X   X X         X X     

Για να γίνει πιο ευανάγνωστη μια τέτοια σύγκριση και επειδή η ταύτιση των 4 δυνατών βάσεων σε μεγάλες ακολουθίες είναι αναπόφευκτη, χρησιμοποιείται μια μέθοδος μείωσης του "τυχαίου θορύβου" ορίζοντας ένα ελάχιστο μήκος συνεχούς ταύτισης που μόνο πάνω από το οποίο θα γίνεται η σήμανση αυτή. Για παράδειγμα μπορεί να γίνει εποπτική αναγνώριση των περιοχών στις οποίες τουλάχιστον 3 σειριακές θέσεις ταυτίζονται. Η τελική εικόνα του πίνακα ομοιότητας θα είναι τώρα πολύ πιο σαφής:

  C T C C T A A A C C 
C X   X                                   
T   X     X                               
C X   X X                                 
C     X X                                 
T   X     X                               
A           X   X                         
A             X                           
A           X   X                         
C                 X                       
C                   X                     

Η κύρια διαγώνιος του πίνακα αποτελεί την ταύτιση των βάσεων αλλά και των θέσεων που αυτές καταλαμβάνουν στην βιολογική ακολουθία. Οι μικρότερες διαγώνιες που δημιουργούνται, αποτελούν ταυτίσεις που γίνονται αν θεωρήσουμε οτι "κυλίουμε" την ακολουθία πάνω στον εαυτό της. Δηλαδή η βάση C που διακρίνεται σαν πρώτη βάση στην ακολουθία του παραδείγματος, συναντάται και σε επόμενες θέσεις της ακολουθίας αυτής.

Οι κάθετες διαγώνιες στην κύρια διαγώνιο αποτελούν κοινές υπακολουθίες που ίσως δημιουργήθηκαν από αντιστροφή (inversion) του συγκεκριμένου τμήματος (στην περίπτωση που συγκρίνονται δυο διαφορετικές μεταξύ τους ακολουθίες), και αποτελούν πιθανό μηχανισμό μετάλλαξης (mutation).

Το πρόγραμμα dotPlotter υλοποιήθηκε στην Java 17.01 με την βοήθεια του Apache NetBeans IDE 12.5 στα πλαίσια του μαθήματος "Σχεδίαση πληροφορικών ιατρικών συστημάτων" του μεταπτυχιακού προγράμματος σπουδών στην Ιατρική Πληροφορική. Το τελικό executable jar αρχείο είναι compiled ώστε να τρέχει σε java runtime ernvironment 8 (1.8).

Εκτέλεση

Σε περιβάλλον Windows καλούμε το πρόγραμμα μέσα από το command line window (cmd) με την εντολή

java -jar <path>\dotPlotter-1.0.jar

ορίζοντας το path στο οποίο έχουμε αποθηκεύσει το αρχείο jar.

Το πρόγραμμα δίνει την δυνατότητα είτε να δημιουργήσουμε δυο τυχαίες ακολουθίες DNA είτε να εισάγουμε δυο ακολουθίες από τον υπολογιστή σε μορφή txt αρχείων ως strings.

Δημιουργία τυχαίων DNA ακουλουθιών

Για να κάνουμε χρήση της κλάσης RandomDNAsequences και των μεθόδων της, χρειάζεται στην παραπάνω εντολή εκτέλεσης του προγράμματος να περάσουμε ένα όρισμα:

java -jar <path>\dotPlotter-1.0.jar random

Το πρόγραμμα θα μας ζητήσει να εισάγουμε το μήκος που θέλουμε να έχει η ακολουθία που θα δημιουργηθεί, την εκτυπώνει στην οθόνη και μας εμφανίζει ένα παράθυρο διαλόγου ώστε αν επιθυμούμε να την αποθηκεύσουμε. Η διαδικασία αυτή επαναλαμβάνεται άλλη μια φορά για την δημιουργία της δεύτερης ακολουθίας.

Στη συνέχεια στην οθόνη εκτυπώνεται ο Dot Matrix D. To πρόγραμμα μας ζητάει να ορίσουμε το μήκος k για το οποίο θα εκτυπωθεί εκ νέου ο Dot Matrix kD που θα περιέχει μόνο τις κοινές συνακολουθίες που έχουν μήκος μεγαλύτερο ή ίσο του k. Στον πίνακα αυτόν φαίνονται τόσο οι κύριες διαγώνιοι όσο και οι αντίστροφες. Οι ακολουθίες εκτυπώνονται και στην οθόνη σε μορφή λίστας. Εκτυπώνεται επίσης η μέγιστη συνακολουθία που βρέθηκε ή στην περίπτωση που υπάρχουν πολλές με το μέγιστο μήκος, τότε εκτυπώνονται όλες.

Τέλος, εμφανίζεται ένα παράθυρο που ζητά από τον χρήστη να σώσει τα αποτελέσματα που έχουν εκτυπωθεί στην οθόνη. Το default όνομα του αρχείου που θα σωθεί είναι DotResults και σώζεται σε μορφή .txt. Το default path των παραθύρων διαλόγου είναι το home του χρήστη.

Εισαγωγή ακολουθιών από τον χρήστη

Στην περίπτωση που ο χρήστης πρόκειται να εισάγει δυο ακολουθίες που έχει στον υπολογιστή του τότε το πρόγραμμα καλείται χωρίς όρισμα και εμφανίζεται ένα παράθυρο διαλόγου που ζητά από τον χρήστη να εισάγει δυο αρχεία .txt που περιέχουν τις αντίστοιχες ακολουθίες που πρόκειται να συγκριθούν. Ο αριθμός των αρχείων που θα επιλεγούν πρέπει απαραιτήτως να είναι 2 αλλιώς το πρόγραμμα εμφανίζει μήνυμα με την μορφή pop up παραθύρου που ειδοποιεί ανάλογα τον χρήστη και στη συνέχεια τερματίζει.

Μετά την επιτυχή εισαγωγή των αρχείων το πρόγραμμα εκτελείται όπως και πριν. Σε κάθε περίπτωση οι δυο ακολουθίες δύνανται να έχουν διαφορετικό μήκος.

Παράδειγμα τελικού αρχείου των αποτελεσμάτων του προγράμματος

---------- dotPlotter 1.0 ----------

-------------------------------------
            Dot Matrix, D            
-------------------------------------
  G C G A A A A C T G A C G C G T T G T G G T G G A 
A       * * * *       *                           * 
G *   *             *     *   *     *   * *   * *   
T                 *             * *   *     *       
A       * * * *       *                           * 
T                 *             * *   *     *       
C   *           *       *   *                       
C   *           *       *   *                       
G *   *             *     *   *     *   * *   * *   
C   *           *       *   *                       
C   *           *       *   *                       
T                 *             * *   *     *       
T                 *             * *   *     *       
C   *           *       *   *                       
G *   *             *     *   *     *   * *   * *   
G *   *             *     *   *     *   * *   * *   
T                 *             * *   *     *       
A       * * * *       *                           * 
G *   *             *     *   *     *   * *   * *   
T                 *             * *   *     *       
C   *           *       *   *                       

Show subsequences equal or greater than length k = 3

-------------------------------------
           Dot Matrix, kD            
-------------------------------------
  G C G A A A A C T G A C G C G T T G T G G T G G A 
A                     *                             
G                   *                               
T                 *                                 
A                                                   
T                                                   
C                                                   
C                       *   *                       
G                         *                         
C                       *   *                       
C                                                   
T                                                   
T                                                   
C                                                   
G                                       * *     *   
G                                       * *   *     
T                                     *     *       
A                     *                             
G                   *                               
T                 *                                 
C               *                                   

Main k sequences:[[C, G, C], [G, G, T]]

Invert k sequences:[[A, G, T], [C, G, C], [A, G, T, C], [G, G, T], [G, G, T]]

All k sequences:[[C, G, C], [G, G, T], [A, G, T], [C, G, C], [A, G, T, C], [G, G, T], [G, G, T]]

Max k sequences:[[A, G, T, C]]

Σημειώσεις

Το πρόγραμμα περιέχει κλάσεις που επιτρέπουν στον χρήστη να αποθηκεύσει μεμονωμένα αποτελέσματα του προγράμματος. Στην κλάση DotMatrix περιέχεται η μέθοδος save(int [][] D) που σώζει τον πίνακα D αλλά φυσικά και τον πίνακα kD σε μορφή binary τιμών (0 για μη ταύτιση ή 1 στην περίπτωση κοινών βάσεων στις δυο ακολουθίες) ώστε ο χρήστης να μπορεί πιο εύκολα να επεξεργαστεί περαιτέρω την πληροφορία.