JSmol Tutorials

Νικόλας Χαριστός / Εργαστήριο Κβαντικής & Υπολογιστικής Χημείας / Τμήμα Χημείας Α.Π.Θ. / 2019-2021

Μάθημα 2.2
Υβριδικά Τροχιακά
Απλοί, διπλοί, τριπλοί δεσμοί άνθρακα-άνθρακα

Στόχος

Το JSmol μπορεί να οπτικοποιεί τις ισοεπιφάνειες των υβριδικών και των p ατομικών τροχιακών.

Σε αυτό το μάθημα θα δημιουργήσουμε μια εφαρμογή οπτικοποίησης του sp, sp2 και sp3 υβριδισμού για τα άτομα άνθρακα και τη δημιουργία απλού, διπλού και τριπλού δεσμού C-C.

Η εφαρμογή περιλαμβάνει δύο σετ radio buttons και ένα check box που λειτουργούν συνδυαστικά και ανεξάρτητα:

  • Στο πρώτο σετ radio buttons επιλέγεται η απεικόνιση των υβριδικών τροχιακών sp, sp2 και sp3 ατόμων άνθρακα.
  • Στο δεύτερο σετ επιλέγεται η απεικόνιση του μοριακού μοντέλου σε μορφή ατόμου, δεσμού C-C και μορίου.
  • Στο checkbox επιλέγεται η εμφάνιση/απόκρυψη των μη υβριδισμένων p ατομικών τροχιακών και η εμφάνιση/απόκρυψη των πολλαπλών δεσμών.
  • Σε κάθε επιλογή αντιστοιχεί και ένα διαφορετικό κείμενο πληροφορίας στο JSmol.

Το τελικό αποτέλεσμα φαίνεται στο παρακάτω πλαίσιο.

Ανανέωση

Βήμα 1.
Δημιουργία αρχικής ιστοσελίδας και εισαγωγή κουμπιών

    Θα δημιουργήσουμε ένα νέο φάκελό ιστοχώρου JSmol από τoν συμπιεσμένο φάκελο Jsmol-starter-site.zip
  1. Κατεβάστε και αποσυμπιέστε τον συμπιεσμένο φάκελο Jsmol-starter-site.zip
  2. Μετονομάστε το αρχείο ιστοσελίδας Jsmol-starter-page.html σε jsmol-2-2.html
  3. Αλλάξτε το πλάτος του JSmol θέτοντας την τιμή της ιδιότητας width του div που περικλείει το script του JSmol σε 600px
    jsmol-2-2.html
    
      <div style="width:600px; height:400px; border:1px solid #333;" >
        <script>
          jmolApplet0 = Jmol.getApplet("jmolApplet0", JSmol_Applet);
    
        </script>
      </div>
                
  4. Είναι αδύνατο να πετύχουμε τη λειτουργικότητα της εφαρμογής χρησιμοποιώντας απλές εντολές JSmol μέσα στον κώδικα της HTML.

    Για αυτό θα χρειαστεί να δημιουργήσουμε ένα εξωτερικό αρχείο κώδικα .spt

  5. Δημιουργήστε ένα αρχείο κειμένου στον φάκελο scripts και ονομάστε το hybrids.spt
  6. Καλέστε το αρχείο hybrids.spt μέσα από την εντολή Jmol.script()
    jsmol-2-2.html
    
        <script>
          jmolApplet0 = Jmol.getApplet("jmolApplet0", JSmol_Applet);
          Jmol.script(jmolApplet0, "script scripts/hybrids.spt");
    
        </script>
                
  7. Εισάγετε τα δύο σετ radio buttons και το checkbox χωρίς αρχικό κώδικα JSmol.

    Για την εισαγωγή του περιγραφικού κειμένου πριν τα κουμπιά χρησιμοποιήστε την εντολή Jmol.jmolHtml('<b> Κείμενο </b>')

    Με την εντολή Jmol.jmolHtml('') μπορούμε να εισάγουμε απλό κώδικα HTML μέσα στο script που περιέχει το JSmol.

    jsmol-2-2.html
    
      <script>
        jmolApplet0 = Jmol.getApplet("jmolApplet0", JSmol_Applet);
        Jmol.script(jmolApplet0, "script scripts/hybrids.spt");
      
        Jmol.jmolBr();Jmol.jmolBr();
        Jmol.jmolHtml('<b>Υβριδικά Τροχιακά: </b>')
        Jmol.jmolRadioGroup(jmolApplet0, [
          [" ","sp "],
          [" ","sp2"],
          [" ","sp3"]
        ], " ");
    
        Jmol.jmolBr();Jmol.jmolBr();
        Jmol.jmolHtml('<b> Απεικόνιση: </b>')
        Jmol.jmolRadioGroup(jmolApplet0, [
          [" ","Άτομο C", true],
          [" ","Δεσμός C-C"],
          [" ","Μόριο"]
        ], " ");
    
        Jmol.jmolBr();  Jmol.jmolBr();
        Jmol.jmolHtml('<b>Ατομικά Τροχιακά p:</b>')
        Jmol.jmolCheckbox(jmolApplet0, " ", " ", "", false);
        
      </script>
                  

    Το αποτέλεσμα φαίνεται στο παρακάτω πλαίσιο:

    Ανανέωση

Βήμα 2.
Δημιουργία Μοριακών Μοντέλων

Για να απεικονίσουμε τον υβριδισμό sp, sp2 και sp3 θα χρησιμοποιήσουμε τα μοριακά μοντέλα του αιθινίου, του αιθενίου και του αιθανίου αντίστοιχα.

Το JSmol μπορεί και οπτικοποιεί άμεσα τα υβριδικά τροχιακά αναγνωρίζοντας την συνδεσιμότητα των ατόμων.

  1. Δημιουργήστε τα μοριακά μοντέλα του αιθινίου, του αιθενίου και του αιθανίου σε λογισμικό μοριακής οπτικοποίησης (π.χ. Avogadro, Chem3D, GaussView) και σώστε τα με μορφή αρχείου .mol στον φάκελο molecules με τις ονομασίες ethyne.mol, ethene.mol και ethane.mol

    Τα αρχεία μοριακής γεωμετρίας .mol περιέχουν και την πληροφορία της τάξης των δεσμών η οποία αναγνωρίζεται και απεικονίζεται από το JSmol. Σε αντίθεση, τα αρχεία .pdb δεν περιέχουν πληροφορία για την τάξη δεσμών.

    Για την ανάπτυξη της παρούσας εφαρμογής θα πρέπει το πρώτο άτομο στο μοριακό μοντέλο να είναι άτομο άνθρακα.

    Επίσης θα πρέπει ο καρτεσιανός άξονας x να συμπίπτει με τον δεσμό C-C και το μοριακό επίπεδο στο αιθένιο να συμπίπτει με το καρτεσιανό επίπεδο xy.

  2. Εναλλακτικά κατεβάστε τα αρχεία από τους παρακάτω συνδέσμους και τοποθετήστε τα στον φάκελο molecules:

    ethyne.mol

    ethene.mol

    ethane.mol

    Δείτε την αρίθμηση και τον προσανατολισμό των μοριακών μοντέλων στο παρακάτω πλαίσιο:

    Ανανέωση

Βήμα 3.
Απεικόνιση υβριδικών τροχιακών spn και ατομικών τροχιακών s και px,y,z σε άτομα μορίων.

Το JSmol έχει τη δυνατότητα να απεικονίζει τα ατομικά τροχικά s και px,y,z και τα υβριδικά τροχιακά spn σε άτομα μοριακών μοντέλων ανάλογα με την συνδεσιμότητα των ατόμων, εφαρμόζοντας την εντολή lcaoCartoon.

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

Ωστόσο, στην παρούσα έκδοση JSmol, η ποιότητα των ισοεπιφανειών δεν είναι υψηλή και δεν παραμετροποιείται όπως στην εντολή isosurface.

Η δημιουργία υβριδικών τροχιακών spn και ατομικών τροχικών s και px,y,z πάνω σε άτομα μοριακών μοντέλων γίνεται με την εντολή:

lcaoCartoon "orbital"

όπου η παράμετρος orbital μπορεί να πάρει τις τιμές "s" "px" "py" "pz" "spa" "spb" "sp2a" "sp2b" "sp2c" "sp3a" "sp3b" "sp3c" "sp3d"

  • Τα τροχιακά δημιουργούνται για τα άτομα που είναι επιλεγμένα.
  • Το JSmol αναγνωρίζει τη συνδεσιμότητα των ατόμων και δημιουργεί τα αντίστοιχα υβριδικά τροχιακά. Έτσι, για παράδειγμα, στον άνθρακα του αιθινίου δημιουργεί μόνο τα "spa" και "spb" τροχιακά, ενώ η παράμετρος "sp2a" δε θα δημιουργήσει τροχιακό.
  • Αν προστεθεί το σύμβολο πλην "-" μπροστά από το όνομα του τροχιακού, π.χ. "-spa" τότε δημιουργείται λοβός προς την αντίθετη φορά.
  • Στην εντολή lcaoCartoon μπορούν να συμπεριληφθούν ταυτόχρονα περισσότερα του ενός τροχιακά, π.χ lcaoCartoon "sp3a" "sp3b" "sp3c" "sp3d"
  • Για τα τροχιακά "px" "py" "pz" μπορεί να μπει η παράμετρος molecular στο τέλος για να χρησιμοποιηθεί το μοριακό σύστημα αξόνων.
  • Το χρώμα και η διαφάνεια των τροχιακών καθορίζονται με τις υποεντολές Color color1 (color2) και Translucent x.x πριν την παράμετρο του τροχιακού

Πειραματίσου με την εντολή lcaoCartoon στο παρακάτω πλαίσιο:

Ανανέωση

Βήμα 4.
Ανάπτυξη βασικής δομής κώδικα με μεταβλητές (variables) και προσαρμοσμένες εντολές (custom functions)

    Στην εφαρμογή που θα αναπτύξουμε τα διαφορετικά σετ radio buttons και checkbox λειτουργούν συνδυαστικά. Δηλαδή η κάθε επιλογή παραμένει και συνδυάζεται με τις υπόλοιπες επιλογές.

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

    Αντιθέτως, απαιτεί την ανάπτυξη κώδικα με μεταβλητές και προσαρμοσμένες εντολές μέσα σε ένα αρχείο .spt

    Έτσι όλος ο κώδικας που θα μοντελοποιεί τη λειτουργικότητα της εφαρμογής θα βρίσκεται μέσα στο αρχείο hybrids.spt που έχουμε φτιάξει.

    Το πρώτο και βασικότερο βήμα για την αναπτυξη του κώδικα μιας εφαρμογής αντιστοιχεί στη διατύπωση του "προβλήματος" που έχουμε να επιλύσουμε.

    Τα εργαλεία που έχουμε για τη διατύπωση και την επίλυση του προβλήματος είναι οι μεταβλητές (variables) και οι προσαρμοσμένες εντολές (custom functions).

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

    Στην πορεία της ανάπτυξης του κώδικα μπορεί να προκύψουν και άλλες μεταβλητές.

    Παρατηρήστε ότι στη συγκεκριμένη εφαρμογή που αναπτύσσουμε χρειαζόμαστε τρεις μεταβλητές για να περιγράψουμε το πρόβλημα:

    • Μια μεταβλητή θα αναφέρεται στο είδος του υβριδισμού (sp, sp2 και sp3) και θα καθορίζεται από το πρώτο σετ radio buttons. Θα ονομάσουμε αυτήν τη μεταβλητή vHybrid
    • Η δεύτερη μεταβλητή θα αναφέρεται στο είδος της απεικόνισης (άτομο, δεσμός, μόριο) και θα καθορίζεται από το δεύτερο σετ radio buttons. Θα ονομάσουμε αυτήν τη μεταβλητή vMolVis
    • Η τρίτη μεταβλητή θα αναφέρεται στην εμφάνιση/απόκρυψη των μή-υβριδισμένων p ατομικών τροχιακών και θα καθορίζεται από την επιλογή του checkbox. Θα ονομάσουμε αυτήν τη μεταβλητή vAOFlag

    Οι δύο πρώτες μεταβλητές θα έχουν αλφαριθμητικές τιμές (strings).

    Η τρίτη μεταβλητή θα παίρνει τιμές true/false ή αλλιώς 1/0. Μια τέτοια μεταβλητή ονομάζεται boolean ή flag.

  1. Ορίστε τις τρεις μεταβλητές στο αρχείο hybrids.spt με την εντολή var
    hybrids.spt
    
      var vHybrid;
      var vMolVis;
      var vAOFlag;
    
    
  2. Είναι δόκιμο να θέτουμε τις αρχικές τιμές των μεταβλητών κατά την εκκίνηση της εφαρμογής.

    Για να το πετύχουμε, θα δημιουργήσουμε μια προσαρμοσμένη εντολή που θα την ονομάσουμε fInit()

  3. Δημιουργήστε την προσαρμοσμένη εντολή fInit() και ορίστε τις αρχικές τιμές των μεταβλητών:
    hybrids.spt
    
        var vHybrid;
        var vMolVis;
        var vAOFlag;
        
        function fInit() {
          vHybrid = 'sp';
          vMolVis = 'atom';
          vAOFlag = 0 ;
        }
          
      
  4. Καλέστε την εντολή fInit() από το αρχείο html και την εντολή Jmol.script()
    jsmol-2-2.html
    
    <script>
      jmolApplet0 = Jmol.getApplet("jmolApplet0", JSmol_Applet);
      Jmol.script(jmolApplet0, "script scripts/hybrids.spt; fInit();");
    
      Jmol.jmolBr();Jmol.jmolBr();
      Jmol.jmolHtml('<b>Υβριδικά Τροχιακά: </b>')
      Jmol.jmolRadioGroup(jmolApplet0, [
        [" ","sp "],
        [" ","sp2"],
        [" ","sp3"]
      ], " ");
    
      Jmol.jmolBr();Jmol.jmolBr();
      Jmol.jmolHtml('<b> Απεικόνιση: </b>')
      Jmol.jmolRadioGroup(jmolApplet0, [
        [" ","Άτομο C", true],
        [" ","Δεσμός C-C"],
        [" ","Μόριο"]
      ], " ");
    
      Jmol.jmolBr();  Jmol.jmolBr();
      Jmol.jmolHtml('<b>Ατομικά Τροχιακά p:</b>')
      Jmol.jmolCheckbox(jmolApplet0, " ", " ", "", false);
    </script>
      
  5. Αντίστοιχα με τις μεταβλητές, θα υπάρχουν τουλάχιστον τρεις προσαρμοσμένες εντολές (functions) που θα εκτελούν τον κώδικα για κάθε σετ επιλογής.

    Έτσι θα υπάρχει:

    • Μια function που θα καθορίζει τον υβριδισμό. Θα την ονομάσουμε fShowHybrid()
    • Μια function που θα καθορίζει το είδος της απεικόνισης. Θα την ονομάσουμε fSetMolVis()
    • Μια function που θα καθορίζει την εμφάνιση/απόκρυψη των μή-υβριδισμένων p ατομικών τροχιακών. Θα την ονομάσουμε fShowAO()
  6. Δημιουργείστε τις τρεις προσαρμοσμένες εντολές (functions) στο αρχείο hybrids.spt.

    Κάθε function θα δέχεται μια παράμετρο που θα δίνει τιμή στην αντίστοιχη μεταβλητή:

    hybrids.spt
    
      var vHybrid;
      var vMolVis;
      var vAOFlag;
    
      function fInit() {
        vHybrid = 'sp';
        vMolVis = 'atom';
        vAOFlag = 0 ;
      }
    
     function fShowHybrid(hybrid) {
        vHybrid = hybrid;
    
      }
    
      function fSetMolVis(molvis) {
        vMolVis = molvis;
    
      }
    
      function fShowAO(aoflag) {
        vAOFlag = aoflag;
    
      }
        
  7. Τώρα στο αρχείο html, σε κάθε σετ κουμπιών μπορούμε να καλέσουμε τις προσαρμοσμένες εντολές, στέλνοντας ταυτόχρονα και τις αντίστοιχες παραμέτρους που θα δώσουν τιμές στις μεταβλητές.

    • Για την εντολή fShowHybrid() η παράμετρος θα μπορεί να πάρει τις αλφαριθμητικές τιμές: 'sp', 'sp2' και 'sp3'
    • Για την εντολή fSetMolVis() η παράμετρος θα μπορεί να πάρει τις αλφαριθμητικές τιμές: 'atom', 'bond' και 'molecule'
    • Για την εντολή fShowAO() η παράμετρος θα μπορεί να πάρει τις τιμές 0 και 1
  8. Στο αρχείο html καλέστε τις προσαρμοσμένες εντολές με τις κατάλληλες παραμέτρους στα αντίστοιχα σημεία των radio buttons και του checkbox:
    jsmol-2-2.html
    
    
      <script>
        jmolApplet0 = Jmol.getApplet("jmolApplet0", JSmol_Applet);
        Jmol.script(jmolApplet0, "script scripts/hybrids.spt; fInit()");
        
        Jmol.jmolBr();Jmol.jmolBr();
        Jmol.jmolHtml('<b>Υβριδικά Τροχιακά: </b>')
        Jmol.jmolRadioGroup(jmolApplet0, [
        ["fShowHybrid('sp') ","sp "],
        ["fShowHybrid('sp2') ","sp2"],
        ["fShowHybrid('sp3') ","sp3"]
        ], " ");
    
        Jmol.jmolBr();Jmol.jmolBr();
        Jmol.jmolHtml('<b> Απεικόνιση: </b>')
        Jmol.jmolRadioGroup(jmolApplet0, [
        ["fSetMolVis('atom') ","Άτομο C", true],
        ["fSetMolVis('bond') ","Δεσμός C-C"],
        ["fSetMolVis('molecule') ","Μόριο"]
        ], " ");
    
        Jmol.jmolBr();  Jmol.jmolBr();
        Jmol.jmolHtml('<b>Ατομικά Τροχιακά p:</b>')
        Jmol.jmolCheckbox(jmolApplet0, "fShowAO(1) ", "fShowAO(0) ", "", false);
        
      </script>
    
          
  9. Τώρα η βασική δομή του κώδικα έχει στηθεί και μπορούμε πλέον να αναπτύξουμε τον κώδικα της κάθε προσαρμοσμένης εντολής.

Βήμα 5.
Ανάπτυξη κώδικα προσαρμοσμένης εντολής για την απεικόνιση υβριδικών τροχιακών

Σε αυτό το βήμα θα αναπτύξουμε τον κώδικα απεικόνισης των υβριδικών τροχιακών sp, sp2 και sp3 εφαρμόζοντας την εντολή lcaoCartoon μέσα στην προσαρμοσμένη εντολή fShowHybrid()

Για κάθε υβριδισμό θα φορτώνεται το αντίστοιχο μόριο (αιθίνιο, αιθένιο και αιθάνιο). Συνεπώς χρειάζεται εντολή ελέγχου ροής κώδικα.

Για τον έλεγχο της ροής κώδικα, εκτός από την εντολή if/elseif/else, μπορούμε να χρησιμοποιήσουμε την εντολή switch/case , η οποία ελέγχει τις περιπτώσεις τιμών που μπορεί να λάβει μια παράμετρος/μεταβλητή και εκτελεί τον αντίστοιχο κώδικα.

Η εντολή switch/case έχει την παρακάτω μορφή:


  switch (παράμετρος) {
    case 'τιμή1':
      κώδικας 1ης περίπτωσης
    break;
    case 'τιμή2':
      κώδικας 2ης περίπτωσης
    break;
    case 'τιμή3':
      κώδικας 3ης περίπτωσης
    break;
    default:
    κώδικας καμιάς περίπτωσης από τις παραπάνω
  }
    

Στην περίπτωση της fShowHybrid() παράμετρος είναι η hybrid και μπορεί να πάρει τιμές 'sp', 'sp2' και 'sp3'

Συνεπώς η εντολή switch/case θα έχει την ακόλουθη μορφή:


  switch (hybrid) {
    case 'sp':
      φόρτωση αιθινίου
    break;
    case 'sp2':
      φόρτωση αιθενίου
    break;
    case 'sp3':
      φόρτωση αιθανίου
    break;
  }
    
  1. Εισάγετε τον παρακάτω κώδικα switch/case στην εντολή fShowHybrid(). Προσθέστε επίσης τις εντολές set antialiasdisplay on; wireframe 0.05; spacefill 10%; για την κατάλληλη μορφοποίηση του μοριακού μοντέλου μετά τη φόρτωσή του.
    hybrids.spt
    
          var vHybrid;
          var vMolVis;
          var vAOFlag;
    
          function fInit() {
            vHybrid = 'sp';
            vMolVis = 'atom';
            vAOFlag = 0 ;
          }
    
         function fShowHybrid(hybrid) {
            vHybrid = hybrid;
    
            switch (hybrid) {
              case 'sp':
                load molecules/ethyne.mol;
              break;
              case 'sp2':
                load molecules/ethene.mol;
              break;
              case 'sp3':
                load molecules/ethane.mol;
              break;
            }
    
            set antialiasdisplay on;
            wireframe 0.05;
            spacefill 10%;
          
          }
    
          function fSetMolVis(molvis) {
            vMolVis = molvis;
    
          }
    
          function fShowAO(aoflag) {
            vAOFlag = aoflag;
    
          }
            

    Δες το αποτέλεσμα επιλέγοντας τα πρώτα radio buttons στο παρακάτω πλαίσιο:

    Ανανέωση
  2. Τώρα μπορούμε να δημιουργήσουμε τα υβριδικά τροχιακά με την εντολή lcaoCartoon

    Θα πρέπει να επιλέξουμε όλα τα άτομα άνθρακα με την εντολή select _C και να δημιουργήσουμε τα κατάλληλα υβριδικά τροχιακά.

    Μπορούμε να ορίσουμε την δημιουργία όλων των περιπτώσεων υβριδικών τροχιακών σε μια εντολή lcaoCartoon και το JSmol θα δημιουργήσει μόνο τα κατάλληλα τροχιακά που αντιστοιχούν στη συνδεσιμότητα των ατόμων άνθρακα:

    lcaoCartoon "sp3a" "sp3b" "sp3c" "sp3d" "sp2a" "sp2b" "sp2c" "spa" "spb";

    Θα πρέπει επίσης να επιλέξουμε όλα τα άτομα υδρογόνου με την εντολή select _H και να δημιουργήσουμε τα s τροχιακά με την εντολή lcaoCartoon 's'

    Τέλος μπορούμε να καθορίσουμε το μέγεθος, το χρώμα και την διαφάνεια των τροχιακών με τις υποεντολές scale, color και translucent

  3. Εισάγετε τον παρακάτω κώδικα δημιουργίας υβριδικών τροχιακών στην εντολή fShowHybrid()
    hybrids.spt
    
          var vHybrid;
          var vMolVis;
          var vAOFlag;
    
          function fInit() {
            vHybrid = 'sp';
            vMolVis = 'atom';
            vAOFlag = 0 ;
          }
    
         function fShowHybrid(hybrid) {
            vHybrid = hybrid;
    
            switch (hybrid) {
              case 'sp':
                load molecules/ethyne.mol;
              break;
              case 'sp2':
                load molecules/ethene.mol;
              break;
              case 'sp3':
                load molecules/ethane.mol;
              break;
            }
    
            set antialiasdisplay on;
            wireframe 0.05;
            spacefill 10%;
    
            select _H;
            lcaoCartoon  scale 0.7  color blue  translucent 0.3  "s";
    
            select _C;
            lcaoCartoon  scale 0.9  color orange  translucent 0.3  "sp3a" "sp3b" "sp3c" "sp3d" "sp2a" "sp2b" "sp2c" "spa" "spb";
            
          }
    
          function fSetMolVis(molvis) {
            vMolVis = molvis;
    
          }
    
          function fShowAO(aoflag) {
            vAOFlag = aoflag;
    
          }
            

    Δες το αποτέλεσμα επιλέγοντας τα πρώτα radio buttons στο παρακάτω πλαίσιο:

    Ανανέωση

Βήμα 6.
Ανάπτυξη κώδικα προσαρμοσμένης εντολής για την απεικόνιση ατομων, δεσμών και μορίων

Σε αυτό το βήμα θα ανπτύξουμε τον κώδικα απεικόνισης ατόμου, δεσμού και μορίου για κάθε επιλεγμένο υβριδισμό, μέσα στην προσαρμοσμένη εντολή fSetMolVis()

Για να πετύχουμε αυτήν τη λειτουργικότητα, θα επιλέγουμε σε κάθε περίπτωση το/α άτομο/α που πρέπει να εμφανίζονται και θα αποκρύπτουμε τα υπόλοιπα.

Έτσι θα αποκρύπτονται και τα υβριδικά τροχιακά που είναι συνδεδεμένα με τα αποκρυπτόμενα άτομα.

Θα χρησιμοποιήσουμε πάλι την εντολή switch/case για να ελέγξουμε την τιμή της παραμέτρου molvis, η οποία μπορεί να πάρει τιμές 'atom', 'bond' και 'molecule'

Η εντολή ελεγχου ροής κώδικα switch/case θα έχει την παρακάτω μορφή:


  switch (molvis) {
    case 'atom':

    break;
    case 'bond':

    break;
    case 'molecule':

    break;
  }
  
  • Στην περίπτωση 'atom' θα επιλέγεται το άτομο 1, που είναι άτομο άνθρακα, και θα αποκρύπτονται τα υπόλοιπα με τις εντολές: select atomno=1; hide not selected;
  • Στην περίπτωση 'bond' θα επιλέγονται τα άτομα άνθρακα και θα αποκρύπτονται τα υπόλοιπα με τις εντολές: select _C; hide not selected;
  • Στην περίπτωση 'molecule' θα επιλέγονται όλα τα άτομα και θα αναιρείται η απόκρυψη όλων των ατόμων με τις εντολές: select all; hide none;
  1. Εισάγετε τον παρακάτω κώδικα switch/case μέσα στην προσαρμοσμένη εντολή fSetMolVis()
    hybrids.spt
    
      var vHybrid;
      var vMolVis;
      var vAOFlag;
    
      function fInit() {
        vHybrid = 'sp';
        vMolVis = 'atom';
        vAOFlag = 0 ;
      }
    
      function fShowHybrid(hybrid) {
        vHybrid = hybrid;
    
        switch (hybrid) {
          case 'sp':
            load molecules/ethyne.mol;
          break;
          case 'sp2':
            load molecules/ethene.mol;
          break;
          case 'sp3':
            load molecules/ethane.mol;
          break;
        }
    
        set antialiasdisplay on;
        wireframe 0.05;
        spacefill 10%;
    
        select _H;
        lcaoCartoon  scale 0.7  color blue  translucent 0.3  "s";
    
        select _C;
        lcaoCartoon  scale 0.9  color orange  translucent 0.3  "sp3a" "sp3b" "sp3c" "sp3d" "sp2a" "sp2b" "sp2c" "spa" "spb";
    
      }
    
      function fSetMolVis(molvis) {
        vMolVis = molvis;
        
        switch (molvis) {
          case 'atom':
            select atomno=1;
            hide not selected;
          break;
          case 'bond':
            select _C;
            hide not selected;
          break;
          case 'molecule':
            select all;
            hide none;
          break;
        }
        
      }
    
      function fShowAO(aoflag) {
        vAOFlag = aoflag;
    
      }
    
  2. Μπορούμε να κεντράρουμε τη θέαση και την περιστροφή του μοριακού μοντέλου στα επιλεγμένα άτομα με την εντολή zoomto x.x {selected} , όπου x.x ο χρόνος σε δευτερόλεπτα.

  3. Κεντράρετε την θέαση και την περιστροφή στα επιλεγμένα άτομα εισάγωντας την εντολή zoomto 0.2 {selected} μετά την εντολή switch:

    hybrids.spt
    
        var vHybrid;
        var vMolVis;
        var vAOFlag;
    
        function fInit() {
          vHybrid = 'sp';
          vMolVis = 'atom';
          vAOFlag = 0 ;
        }
    
        function fShowHybrid(hybrid) {
          vHybrid = hybrid;
    
          switch (hybrid) {
            case 'sp':
              load molecules/ethyne.mol;
            break;
            case 'sp2':
              load molecules/ethene.mol;
            break;
            case 'sp3':
              load molecules/ethane.mol;
            break;
          }
    
          set antialiasdisplay on;
          wireframe 0.05;
          spacefill 10%;
    
          select _H;
          lcaoCartoon  scale 0.7  color blue  translucent 0.3  "s";
    
          select _C;
          lcaoCartoon  scale 0.9  color orange  translucent 0.3  "sp3a" "sp3b" "sp3c" "sp3d" "sp2a" "sp2b" "sp2c" "spa" "spb";
    
        }
    
        function fSetMolVis(molvis) {
          vMolVis = molvis;
    
          switch (molvis) {
            case 'atom':
              select atomno=1;
              hide not selected;
            break;
            case 'bond':
              select _C;
              hide not selected;
            break;
            case 'molecule':
              select all;
              hide none;
            break;
          }
    
          zoomto 0.2 {selected};  
    
        }
    
        function fShowAO(aoflag) {
          vAOFlag = aoflag;
    
        }
        

    Δες το αποτέλεσμα επιλέγοντας την πρώτη και μετά τη δεύτερη σειρά radio buttons στο παρακάτω πλαίσιο:

    Ανανέωση

Βήμα 7.
Ανάπτυξη κώδικα προσαρμοσμένης εντολής για την απεικόνιση py,z ατομικών τροχιακών

Σε αυτό το βήμα θα αναπτύξουμε τον κώδικα εμφάνισης/απόκρυψης των μή-υβριδισμένων p ατομικών τροχιακών των ατόμων άνθρακα μέσα στην προσαρμοσμένη εντολή fShowAO()

Για να το πετύχουμε, θα επιλέγουμε τα άτομα άνθρακα και ανάλογα με τον υβριδισμό θα εμφανίζουμε τα py και pz ατομικά τροχιακά στο μοριακό σύστημα αξόνων.

Η εμφάνιση των px,y,z ατομικών τροχιακών σε επιλεγμένα άτομα γίνεται με την εντολή lcaoCartoon "pz" molecular

Η απόκρυψη των ατομικών τροχιακών γίνεται με την εντολή lcaoCartoon "pz" off

Σε κάθε περίπτωση πρέπει πρώτα να επιλέξουμε όλα τα άτομα άνθρακα με την εντολή select _C;

Η παράμετρος aoflag που δέχεται η εντολή fShowAO() είναι boolean, δηλαδή παίρνει τιμές 1/0.

Συνεπώς θα χρησιμοποιήσουμε την εντολή if/else για τον έλεγχο της ροής του κώδικα:


  if (aoflag) {
    κώδικας αν aoflag=1
  }
  else {
    κώδικας αν aoflag=0
  }

Στην πρώτες αγκύλες θα εισαχθεί ο κώδικας εάν η παράμετρος aoflag είναι αληθής, δηλαδή έχει τιμή 1, και στη δεύτερες αγκύλες αν είναι ψευδής, δηλαδή έχει τιμή 0.

Στην αληθή περίπτωση θα πρέπει να διαχωρίσουμε την εμφάνιση των ατομικών τροχιακών ανάλογα με τον υβριδισμό sp ή sp2. Στον υβριδισμό sp3 δεν υπαάρχουν μη-υβριδισμένα p ατομικά τροχιακά.

Οπότε θα χρησιμοποιήσουμε την εντολή switch/case ελέγχοντας τις περιπτώσεις τιμών που παίρνει η μεταβλητή vHybrid


  if (aoflag) {
    switch (vHybrid) {
      case 'sp':
        κώδικας εμφάνισης pz και py ΑΟ
      break;
      case 'sp2':
        κώδικας εμφάνισης pz ΑΟ
      break;

    }
  } else {
    κώδικας απόκρυψης pz και py ΑΟ
  }
  1. Εισάγετε τον παρακάτω κώδικα εμφάνισης/απόκρυψης των py,z στην προσαρμοσμένη εντολή fShowAO()

    hybrids.spt
    
            var vHybrid;
            var vMolVis;
            var vAOFlag;
    
            function fInit() {
              vHybrid = 'sp';
              vMolVis = 'atom';
              vAOFlag = 0 ;
            }
    
            function fShowHybrid(hybrid) {
              vHybrid = hybrid;
    
              switch (hybrid) {
                case 'sp':
                  load molecules/ethyne.mol;
                break;
                case 'sp2':
                  load molecules/ethene.mol;
                break;
                case 'sp3':
                  load molecules/ethane.mol;
                break;
              }
    
              set antialiasdisplay on;
              wireframe 0.05;
              spacefill 10%;
    
              select _H;
              lcaoCartoon  scale 0.7  color blue  translucent 0.3  "s";
    
              select _C;
              lcaoCartoon  scale 0.9  color orange  translucent 0.3  "sp3a" "sp3b" "sp3c" "sp3d" "sp2a" "sp2b" "sp2c" "spa" "spb";
    
            }
    
            function fSetMolVis(molvis) {
              vMolVis = molvis;
    
              switch (molvis) {
                case 'atom':
                  select atomno=1;
                  hide not selected;
                break;
                case 'bond':
                  select _C;
                  hide not selected;
                break;
                case 'molecule':
                  select all;
                  hide none;
                break;
              }
    
            zoomto 0.2 {selected};
    
            }
    
            function fShowAO(aoflag) {
              vAOFlag = aoflag;
        
              select _C;
              if (aoflag) {
                switch (vHybrid) {
                  case 'sp':
                  lcaoCartoon scale 0.9 color red blue TRANSLUCENT 0.3 "py" molecular;
                  lcaoCartoon scale 0.9 color red blue TRANSLUCENT 0.3 "pz" molecular;
                  break;
                  case 'sp2':
                  lcaoCartoon scale 0.9 color red blue TRANSLUCENT 0.3 "pz" molecular;
                  break;
                }
              } else {
                lcaoCartoon "py" off;
                lcaoCartoon "pz" off;
              }
         
            }
          

    Δες το αποτέλεσμα επιλέγοντας την πρώτη και μετά τη δεύτερη σειρά radio buttons και μετά το checkbox στο παρακάτω πλαίσιο:

    Ανανέωση
  2. Μπορούμε να καθορίσουμε την εμφάνιση της τάξης των δεσμών C-C με την εντολή bondorder x όπου x παίρνει τιμές 1,2 και 3 για τον απλό, διπλό και τριπλό δεσμό αντίστοιχα.

    Όταν εμφανίζονται τα p ατομικά τροχιακά θα εμφανίζεται και το είδος του δεσμού, ενώ όταν αποκρύπτονται τα p ατομικά τροχιακά θα εμφανίζεται απλός δεσμός

  3. Εισάγετε τις κατάλληλες εντολές για την τάξη δεσμού, ανάλογα με το είδος του υβριδισμού:

    hybrids.spt
    
        var vHybrid;
        var vMolVis;
        var vAOFlag;
    
        function fInit() {
          vHybrid = 'sp';
          vMolVis = 'atom';
          vAOFlag = 0 ;
        }
    
        function fShowHybrid(hybrid) {
          vHybrid = hybrid;
    
          switch (hybrid) {
            case 'sp':
              load molecules/ethyne.mol;
            break;
            case 'sp2':
              load molecules/ethene.mol;
            break;
            case 'sp3':
              load molecules/ethane.mol;
            break;
          }
    
          set antialiasdisplay on;
          wireframe 0.05;
          spacefill 10%;
    
          select _H;
          lcaoCartoon  scale 0.7  color blue  translucent 0.3  "s";
    
          select _C;
          lcaoCartoon  scale 0.9  color orange  translucent 0.3  "sp3a" "sp3b" "sp3c" "sp3d" "sp2a" "sp2b" "sp2c" "spa" "spb";
    
        }
    
        function fSetMolVis(molvis) {
          vMolVis = molvis;
    
          switch (molvis) {
            case 'atom':
              select atomno=1;
              hide not selected;
            break;
            case 'bond':
              select _C;
              hide not selected;
            break;
            case 'molecule':
              select all;
              hide none;
            break;
          }
    
        zoomto 0.2 {selected};
    
        }
    
        function fShowAO(aoflag) {
          vAOFlag = aoflag;
    
          select _C;
          if (aoflag) {
            switch (vHybrid) {
              case 'sp':
              lcaoCartoon scale 0.9 color red blue TRANSLUCENT 0.3 "py" molecular;
              lcaoCartoon scale 0.9 color red blue TRANSLUCENT 0.3 "pz" molecular;
              bondorder 3;
              break;
              case 'sp2':
              lcaoCartoon scale 0.9 color red blue TRANSLUCENT 0.3 "pz" molecular;
              bondorder	2;
              break;
            }
          } else {
            lcaoCartoon "py" off;
            lcaoCartoon "pz" off;
            bondorder 1;
          }
    
        }
            

    Δες το αποτέλεσμα επιλέγοντας την πρώτη και μετά τη δεύτερη σειρά radio buttons και μετά το checkbox στο παρακάτω πλαίσιο:

    Ανανέωση

Βήμα 8.
Σύνδεση προσαρμοσμένων εντολών

Τα τρία σετ κουμπιών λειτουργούν ανεξάρτητα μεταξύ τους και όχι συνδυαστικά.

Για να συνδέσουμε τη λειτουργικότητα των επιλογών θα πρέπει να εκτελούνται και οι τρεις προσαρμοσμένες εντολές όταν επιλέγουμε τον υβριδισμό από το πρώτο σετ κουμπιών.

Συνεπώς πρέπει να εισάγουμε τις εντολές fSetMolVis(vMolVis); και fShowAO(vAOFlag) στο τέλος της εντολής fShowHybrid()

  1. Εισάγετε τις εντολές fSetMolVis(vMolVis); και fShowAO(vAOFlag) στο τέλος της εντολής fShowHybrid()

    hybrids.spt
    
        var vHybrid;
        var vMolVis;
        var vAOFlag;
    
        function fInit() {
          vHybrid = 'sp';
          vMolVis = 'atom';
          vAOFlag = 0 ;
        }
    
        function fShowHybrid(hybrid) {
          vHybrid = hybrid;
    
          switch (hybrid) {
            case 'sp':
              load molecules/ethyne.mol;
            break;
            case 'sp2':
              load molecules/ethene.mol;
            break;
            case 'sp3':
              load molecules/ethane.mol;
            break;
          }
    
          set antialiasdisplay on;
          wireframe 0.05;
          spacefill 10%;
    
          select _H;
          lcaoCartoon  scale 0.7  color blue  translucent 0.3  "s";
    
          select _C;
          lcaoCartoon  scale 0.9  color orange  translucent 0.3  "sp3a" "sp3b" "sp3c" "sp3d" "sp2a" "sp2b" "sp2c" "spa" "spb";
          
          fShowAO(vAOFlag);
          fSetMolVis(vMolVis);
          
        }
    
        function fSetMolVis(molvis) {
          vMolVis = molvis;
    
          switch (molvis) {
            case 'atom':
              select atomno=1;
              hide not selected;
            break;
            case 'bond':
              select _C;
              hide not selected;
            break;
            case 'molecule':
              select all;
              hide none;
            break;
          }
    
        zoomto 0.2 {selected};
    
        }
    
        function fShowAO(aoflag) {
          vAOFlag = aoflag;
    
          select _C;
          if (aoflag) {
            switch (vHybrid) {
              case 'sp':
              lcaoCartoon scale 0.9 color red blue TRANSLUCENT 0.3 "py" molecular;
              lcaoCartoon scale 0.9 color red blue TRANSLUCENT 0.3 "pz" molecular;
              bondorder 3;
              break;
              case 'sp2':
              lcaoCartoon scale 0.9 color red blue TRANSLUCENT 0.3 "pz" molecular;
              bondorder 2;
              break;
            }
          } else {
            lcaoCartoon "py" off;
            lcaoCartoon "pz" off;
            bondorder 1;
          }
    
        }
            

    Δες το αποτέλεσμα στο παρακάτω πλαίσιο:

    Ανανέωση
  2. Για να αποφευχθεί ή άσκοπη μετακίνηση του μοντέλου όταν επιλέγουμε τον υβριδισμό και είναι επιλεγμένη η απεικόνιση ατόμου, θα είσάγουμε μια εντολή ελέγχου if (vMolVis = 'atom') {center atomno=1} η οποία κεντράρει το μοριακό μοντέλο στο άτομο 1 σε χρόνο μηδέν

  3. Εισάγετε την εντολή if (vMolVis = 'atom') {center atomno=1} στην εντολή fShowHybrid()
    hybrids.spt
    
      var vHybrid;
      var vMolVis;
      var vAOFlag;
    
      function fInit() {
        vHybrid = 'sp';
        vMolVis = 'atom';
        vAOFlag = 0 ;
      }
    
      function fShowHybrid(hybrid) {
        vHybrid = hybrid;
    
        switch (hybrid) {
          case 'sp':
            load molecules/ethyne.mol;
          break;
          case 'sp2':
            load molecules/ethene.mol;
          break;
          case 'sp3':
            load molecules/ethane.mol;
          break;
        }
    
        set antialiasdisplay on;
        wireframe 0.05;
        spacefill 10%;
    
        select _H;
        lcaoCartoon  scale 0.7  color blue  translucent 0.3  "s";
    
        select _C;
        lcaoCartoon  scale 0.9  color orange  translucent 0.3  "sp3a" "sp3b" "sp3c" "sp3d" "sp2a" "sp2b" "sp2c" "spa" "spb";
        
        if (vMolVis = 'atom') {
          center atomno=1;
        }
    
        fShowAO(vAOFlag);
        fSetMolVis(vMolVis);
    
      }
    
      function fSetMolVis(molvis) {
        vMolVis = molvis;
    
        switch (molvis) {
          case 'atom':
            select atomno=1;
            hide not selected;
          break;
          case 'bond':
            select _C;
            hide not selected;
          break;
          case 'molecule':
            select all;
            hide none;
          break;
        }
    
      zoomto 0.2 {selected};
    
      }
    
      function fShowAO(aoflag) {
        vAOFlag = aoflag;
    
        select _C;
        if (aoflag) {
          switch (vHybrid) {
            case 'sp':
            lcaoCartoon scale 0.9 color red blue TRANSLUCENT 0.3 "py" molecular;
            lcaoCartoon scale 0.9 color red blue TRANSLUCENT 0.3 "pz" molecular;
            bondorder 3;
            break;
            case 'sp2':
            lcaoCartoon scale 0.9 color red blue TRANSLUCENT 0.3 "pz" molecular;
            bondorder 2;
            break;
          }
        } else {
          lcaoCartoon "py" off;
          lcaoCartoon "pz" off;
          bondorder 1;
        }
    
      }
          

    Δες το αποτέλεσμα στο παρακάτω πλαίσιο:

    Ανανέωση

Βήμα 9.
Εισαγωγή προσαρμοσμένων κειμένων

Σε αυτό το βήμα θα εισάγουμε τα κείμενα στο JSmol ανάλογα με τις επιλογές.

Θα εμφανίζονται τρία κείμενα:

  • Πρώτα θα εμφανίζεται το είδος της απεικόνισης, δηλαδή 'άτομο άνθρακα', 'δεσμός C-C' ή 'Μόριο:'.
    Ανάλογα με την επιλογή θα εμφανίζεται η τάξη του δεσμού και το όνομα του μορίου.
  • Στη δεύτερη γραμμή θα εμφανίζεται το είδος του υβριδισμού.
  • Στην τρίτη γραμμή θα εμφανίζονται τα είδη των μη-υβριδικών ατομικών τροχιακών p.

Για να εμφανίσουμε τρία διαφορετικά κείμενα θα πρέπει να ορίσουμε τρία διαφορετικά echo το καθένα από τα οποία θα έχει ξεχωριστή ταυτότητα ID και ξεχωριστή θέση.

Η εντολή echo μπορεί να οριστεί με τη μορφή:

set echo ID x y
όπου ID είναι το όνομα που αποτελεί την ταυτότητα του echo και x,y οι συντεταγμένες σε pixels με το σημείο 0,0 να είναι το κάτω αριστερά σημείο του JSmol

Συγκεκριμένα:

  • Το πρώτο echo θα το ορίσουμε μέσα στην function fSetMolVis() με την εντολή:
    set echo displayEcho 0 380
  • Το δεύτερο echo θα το ορίσουμε μέσα στην function fShowHybrid() με την εντολή:
    set echo hybridEcho 0 350
  • Το τρίτο echo θα το ορίσουμε μέσα στην function fShowAO() με την εντολή:
    set echo aoEcho 0 320

Το πρώτο echo displayEcho που θα ορίζεται μέσα στην fSetMolVis() θα αναφέρει α) την τάξη του δεσμού ή β) το μόριο που είναι επιλεγμένο.

Το μόριο όμως φορτώνεται από την function fShowHybrid(). Οπότε θα πρέπει να δημιουργήσουμε δύο νέες variables, τις:

  • vBondName
  • vMolName
που θα αποθηκεύουν την τάξη δεσμού και το όνομα του μορίου κατά την επιλογή του υβριδισμού στην fShowHybrid()

Στη συνέχεια το κείμενο του displayEcho θα δομείται και θα απεικονίζεται στην fSetMolVis()

  1. Ορίστε τις δύο νέες variables vBondName και vMolName

    Αποδώστε τις κατάλληλες τιμές στις variables μέσα στην εντολή fShowHybrid()

    hybrids.spt
    
      var vHybrid;
      var vMolVis;
      var vAOFlag;
    
     var vBondName;
     var vMolName  
    
      function fInit() {
        vHybrid = 'sp';
        vMolVis = 'atom';
        vAOFlag = 0 ;
      }
    
      function fShowHybrid(hybrid) {
        vHybrid = hybrid;
    
        switch (hybrid) {
          case 'sp':
            vMolName = 'Αιθίνιο';
            vBondName = 'Τριπλός';
            load molecules/ethyne.mol;
          break;
          case 'sp2':
            vMolName = 'Αιθένιο';
            vBondName = 'Διπλός';
            load molecules/ethene.mol;
          break;
          case 'sp3':
            vMolName = 'Αιθάνιο';
            vBondName = 'Απλός';
            load molecules/ethane.mol;
          break;
        }
    
        set antialiasdisplay on;
        wireframe 0.05;
        spacefill 10%;
    
        select _H;
        lcaoCartoon  scale 0.7  color blue  translucent 0.3  "s";
    
        select _C;
        lcaoCartoon  scale 0.9  color orange  translucent 0.3  "sp3a" "sp3b" "sp3c" "sp3d" "sp2a" "sp2b" "sp2c" "spa" "spb";
    
        if (vMolVis = 'atom') {
          center atomno=1;
        }
    
        fShowAO(vAOFlag);
        fSetMolVis(vMolVis);
    
      }
    
      function fSetMolVis(molvis) {
        vMolVis = molvis;
    
        switch (molvis) {
          case 'atom':
            select atomno=1;
            hide not selected;
          break;
          case 'bond':
            select _C;
            hide not selected;
          break;
          case 'molecule':
            select all;
            hide none;
          break;
        }
    
      zoomto 0.2 {selected};
    
      }
    
      function fShowAO(aoflag) {
        vAOFlag = aoflag;
    
        select _C;
        if (aoflag) {
          switch (vHybrid) {
            case 'sp':
            lcaoCartoon scale 0.9 color red blue TRANSLUCENT 0.3 "py" molecular;
            lcaoCartoon scale 0.9 color red blue TRANSLUCENT 0.3 "pz" molecular;
            bondorder 3;
            break;
            case 'sp2':
            lcaoCartoon scale 0.9 color red blue TRANSLUCENT 0.3 "pz" molecular;
            bondorder 2;
            break;
          }
        } else {
          lcaoCartoon "py" off;
          lcaoCartoon "pz" off;
          bondorder 1;
        }
    
      }
              
  2. Καθορίστε την echo displayEcho στην αρχή της εντολής fSetMolVis

    Μέσα στο κάθε case δομήστε το κείμενο και απεικονίστε το

    hybrids.spt
    
      var vHybrid;
      var vMolVis;
      var vAOFlag;
    
     var vBondName;
     var vMolName;
    
      function fInit() {
        vHybrid = 'sp';
        vMolVis = 'atom';
        vAOFlag = 0 ;
      }
    
      function fShowHybrid(hybrid) {
        vHybrid = hybrid;
    
        switch (hybrid) {
          case 'sp':
            vMolName = 'Αιθίνιο';
            vBondName = 'Τριπλός';
            load molecules/ethyne.mol;
          break;
          case 'sp2':
            vMolName = 'Αιθένιο';
            vBondName = 'Διπλός';
            load molecules/ethene.mol;
          break;
          case 'sp3':
            vMolName = 'Αιθάνιο';
            vBondName = 'Απλός';
            load molecules/ethane.mol;
          break;
        }
    
        set antialiasdisplay on;
        wireframe 0.05;
        spacefill 10%;
    
        select _H;
        lcaoCartoon  scale 0.7  color blue  translucent 0.3  "s";
    
        select _C;
        lcaoCartoon  scale 0.9  color orange  translucent 0.3  "sp3a" "sp3b" "sp3c" "sp3d" "sp2a" "sp2b" "sp2c" "spa" "spb";
    
        if (vMolVis = 'atom') {
          center atomno=1;
        }
    
        fShowAO(vAOFlag);
        fSetMolVis(vMolVis);
    
      }
    
      function fSetMolVis(molvis) {
        vMolVis = molvis;
    
        set echo displayEcho 0 380;
        color echo  dimgray ;
        font echo 18 sansserif ;
    
        switch (molvis) {
          case 'atom':
            select atomno=1;
            hide not selected;
            echo Άτομο Άνθρακα;
          break;
          case 'bond':
            select _C;
            hide not selected;
            theEcho = vBondName + ' δεσμός Άνθρακα-Άνθρακα';
            echo @theEcho;
          break;
          case 'molecule':
            select all;
            hide none;
            theEcho = 'Μόριο: ' + vMolName;
            echo @theEcho;
          break;
        }
    
      zoomto 0.2 {selected};
    
      }
    
      function fShowAO(aoflag) {
        vAOFlag = aoflag;
    
        select _C;
        if (aoflag) {
          switch (vHybrid) {
            case 'sp':
            lcaoCartoon scale 0.9 color red blue TRANSLUCENT 0.3 "py" molecular;
            lcaoCartoon scale 0.9 color red blue TRANSLUCENT 0.3 "pz" molecular;
            bondorder 3;
            break;
            case 'sp2':
            lcaoCartoon scale 0.9 color red blue TRANSLUCENT 0.3 "pz" molecular;
            bondorder 2;
            break;
          }
        } else {
          lcaoCartoon "py" off;
          lcaoCartoon "pz" off;
          bondorder 1;
        }
    
      }
              
  3. Καθορίστε το hybridEcho, δομήστε το κείμενο και απεικονίστε το στην εντολή fShowHybrid
    hybrids.spt
    
      var vHybrid;
      var vMolVis;
      var vAOFlag;
    
     var vBondName;
     var vMolName;
    
      function fInit() {
        vHybrid = 'sp';
        vMolVis = 'atom';
        vAOFlag = 0 ;
      }
    
      function fShowHybrid(hybrid) {
        vHybrid = hybrid;
    
        switch (hybrid) {
          case 'sp':
            vMolName = 'Αιθίνιο';
            vBondName = 'Τριπλός';
            load molecules/ethyne.mol;
          break;
          case 'sp2':
            vMolName = 'Αιθένιο';
            vBondName = 'Διπλός';
            load molecules/ethene.mol;
          break;
          case 'sp3':
            vMolName = 'Αιθάνιο';
            vBondName = 'Απλός';
            load molecules/ethane.mol;
          break;
        }
    
        set antialiasdisplay on;
        wireframe 0.05;
        spacefill 10%;
    
        select _H;
        lcaoCartoon  scale 0.7  color blue  translucent 0.3  "s";
    
        select _C;
        lcaoCartoon  scale 0.9  color orange  translucent 0.3  "sp3a" "sp3b" "sp3c" "sp3d" "sp2a" "sp2b" "sp2c" "spa" "spb";
    
        if (vMolVis = 'atom') {
          center atomno=1;
        }
    
        set echo hybridEcho 0 350;
        color echo  darkorange;
        font echo 18 sansserif ;
        theEcho = 'Υβριδισμός: ' + hybrid;
        echo   @theEcho;
    
        fShowAO(vAOFlag);
        fSetMolVis(vMolVis);
    
      }
    
      function fSetMolVis(molvis) {
        vMolVis = molvis;
    
        set echo displayEcho 0 380;
        color echo  dimgray ;
        font echo 18 sansserif ;
    
        switch (molvis) {
          case 'atom':
            select atomno=1;
            hide not selected;
            echo Άτομο Άνθρακα;
          break;
          case 'bond':
            select _C;
            hide not selected;
            theEcho = vBondName + ' δεσμός Άνθρακα-Άνθρακα';
            echo @theEcho;
          break;
          case 'molecule':
            select all;
            hide none;
            theEcho = 'Μόριο: ' + vMolName;
            echo @theEcho;
          break;
        }
    
      zoomto 0.2 {selected};
    
      }
    
      function fShowAO(aoflag) {
        vAOFlag = aoflag;
    
        select _C;
        if (aoflag) {
          switch (vHybrid) {
            case 'sp':
            lcaoCartoon scale 0.9 color red blue TRANSLUCENT 0.3 "py" molecular;
            lcaoCartoon scale 0.9 color red blue TRANSLUCENT 0.3 "pz" molecular;
            bondorder 3;
            break;
            case 'sp2':
            lcaoCartoon scale 0.9 color red blue TRANSLUCENT 0.3 "pz" molecular;
            bondorder 2;
            break;
          }
        } else {
          lcaoCartoon "py" off;
          lcaoCartoon "pz" off;
          bondorder 1;
        }
    
      }
              
  4. Καθορίστε το aoEcho, απεικονίστε το στην εντολή fShowHAO() για κάθε case στην περίπτωση που απεικονίζονται τα ατομικά τροχιακά.

    Στην περίπτωση που δεν απεικονίζονται ατομικά τροχιακά (else), σβήστε το κείμενο του aoEcho

    hybrids.spt
    
      var vHybrid;
      var vMolVis;
      var vAOFlag;
    
     var vBondName;
     var vMolName;
    
      function fInit() {
        vHybrid = 'sp';
        vMolVis = 'atom';
        vAOFlag = 0 ;
      }
    
      function fShowHybrid(hybrid) {
        vHybrid = hybrid;
    
        switch (hybrid) {
          case 'sp':
            vMolName = 'Αιθίνιο';
            vBondName = 'Τριπλός';
            load molecules/ethyne.mol;
          break;
          case 'sp2':
            vMolName = 'Αιθένιο';
            vBondName = 'Διπλός';
            load molecules/ethene.mol;
          break;
          case 'sp3':
            vMolName = 'Αιθάνιο';
            vBondName = 'Απλός';
            load molecules/ethane.mol;
          break;
        }
    
        set antialiasdisplay on;
        wireframe 0.05;
        spacefill 10%;
    
        select _H;
        lcaoCartoon  scale 0.7  color blue  translucent 0.3  "s";
    
        select _C;
        lcaoCartoon  scale 0.9  color orange  translucent 0.3  "sp3a" "sp3b" "sp3c" "sp3d" "sp2a" "sp2b" "sp2c" "spa" "spb";
    
        if (vMolVis = 'atom') {
          center atomno=1;
        }
    
        set echo hybridEcho 0 350;
        color echo  darkorange;
        font echo 18 sansserif ;
        theEcho = 'Υβριδισμός: ' + hybrid;
        echo   @theEcho;
    
        fShowAO(vAOFlag);
        fSetMolVis(vMolVis);
    
      }
    
      function fSetMolVis(molvis) {
        vMolVis = molvis;
    
        set echo displayEcho 0 380;
        color echo  dimgray ;
        font echo 18 sansserif ;
    
        switch (molvis) {
          case 'atom':
            select atomno=1;
            hide not selected;
            echo Άτομο Άνθρακα;
          break;
          case 'bond':
            select _C;
            hide not selected;
            theEcho = vBondName + ' δεσμός Άνθρακα-Άνθρακα';
            echo @theEcho;
          break;
          case 'molecule':
            select all;
            hide none;
            theEcho = 'Μόριο: ' + vMolName;
            echo @theEcho;
          break;
        }
    
      zoomto 0.2 {selected};
    
      }
    
      function fShowAO(aoflag) {
        vAOFlag = aoflag;
    
        set echo aoEcho 0 320;
        color echo royalblue ;
        font echo 18 sansserif ;
    
        select _C;
        if (aoflag) {
          switch (vHybrid) {
            case 'sp':
            echo Ατομικά Τροχιακά: py και pz;
            lcaoCartoon scale 0.9 color red blue TRANSLUCENT 0.3 "py" molecular;
            lcaoCartoon scale 0.9 color red blue TRANSLUCENT 0.3 "pz" molecular;
            bondorder 3;
            break;
            case 'sp2':
            echo Ατομικά Τροχιακά: pz;
            lcaoCartoon scale 0.9 color red blue TRANSLUCENT 0.3 "pz" molecular;
            bondorder 2;
            break;
          }
        } else {
          echo ;
          lcaoCartoon "py" off;
          lcaoCartoon "pz" off;
          bondorder 1;
        }
    
      }
              

Δες το τελικό αποτέλεσμα στο παρακάτω πλαίσιο:

Ανανέωση

Λήψεις
Downloads

  1. Φάκελος ιστοχώρου με κενή ιστοσελίδα JSmol: Jsmol-starter-site.zip
  2. Αρχείο μοριακής γεωμετρίας αιθινίου ethyne.mol
  3. Αρχείο μοριακής γεωμετρίας αιθενίουethene.mol
  4. Αρχείο μοριακής γεωμετρίας αιθανίουethane.mol
  5. Φάκελος ιστοχώρου τελικού αποτελέσματος του μαθήματος: lesson22-full-site.zip