Файл:Dna-SNP.svg

Матеріал з Вікіпедії — вільної енциклопедії.
Перейти до навігації Перейти до пошуку

Повна роздільність(SVG-файл, номінально 520 × 333 пікселів, розмір файлу: 1,15 МБ)

Wikimedia Commons logo Відомості про цей файл містяться на Вікісховищі — централізованому сховищі вільних файлів мультимедіа для використання у проектах Фонду Вікімедіа.

Опис файлу

Опис
English: A Single Nucleotide Polymorphism is a change of a nucleotide at a single base-pair location on DNA. Created using OpenSCAD v2021.01 and Inkscape v1.0.2.
Час створення
Джерело Власна робота
Автор David Eccles (Gringer)

Construction process

This file was derived from a 3D model of DNA, converted to SVG and coloured using David Eccles' STL2SVG script:

type=orig; ~/scripts/stl2svg.pl ./DNA_linear_complete_helix1.stl:330 ./DNA_linear_complete_helix2.stl:200 ./DNA_linear_complete_${type}_A.stl:140 ./DNA_linear_complete_${type}_C.stl:250 ./DNA_linear_complete_${type}_G.stl:90 ./DNA_linear_complete_${type}_T.stl:30  > out_${type}.svg
type=mut; ~/scripts/stl2svg.pl ./DNA_linear_complete_helix1.stl:330 ./DNA_linear_complete_helix2.stl:200 ./DNA_linear_complete_${type}_A.stl:140 ./DNA_linear_complete_${type}_C.stl:250 ./DNA_linear_complete_${type}_G.stl:90 ./DNA_linear_complete_${type}_T.stl:30  > out_${type}.svg

The DNA models were then combined and annotated using Inkscape. The DNA backbone for the model is a pentagon extruded over a sine wave using David Eccles' guided path extrude script. The model source file (in OpenSCAD format) is shown below:

use <guided_extrude.scad>;

hl = 100; // helix length
hp = 33.2; // helix pitch [in angstroms]
hr = 10; // helix radius [in angstroms]
bbr = 1.5; // backbone radius

loops = hl / hp;

// random bases
//bases = rands(0, 4, ceil(360 * loops / 34.3),1);

// *GRINGENE* -- TAA GGN MGN ATH AAY GGN GAR AAY GAR TGA
//            -- TAA GGC AGG ATC AAC GGC GAG AAC GAG TGA
// A = 0; G = 1; C = 2; T = 3
// [different from my usual order,
//  to simplify the 3D model logic]
bases = [3,3,3, 1,1,2, 0,1,1, 0,3,2, 0,0,2,
         1,1,2, 1,0,1, 0,0,2, 1,0,1, 3,1,0];

bAng = atan2(sin(120) - sin(0), cos(120) - cos(0));

drawMode = "all";

module lineTo(x1, x2){
  hull(){
    translate(x1) sphere(r=0.25, $fn=5);
    translate(x2) sphere(r=0.25, $fn=5);
  }
}

backbone_profile = [for(th = [0:72:359]) [bbr*cos(th),
                                          bbr*sin(th)*1]];

inc = floor($t * 30);
thf = ($t * 30) - inc;
h1limit = (360 * loops);
h1jump = (360 * loops);


helix_1 = [for(th = [(thf*34.3):(34.3/2):h1jump])
  [hr * cos(th), hr * sin(th), hl * th / (360 * loops)]];

helix_2 = [for(th = [120:(34.3/2):(360 * loops+120)])
  [hr * cos(th), hr * sin(th), hl * (th-120) / (360 * loops)]];

module purine(){
  linear_extrude(height=0.75, center=true){
    // average hydrogen bond length in water: 1.97 A
    // https://en.wikipedia.org/wiki/Hydrogen_bond#Structural_details  
    translate([-0.985,0])
      // scale: average of C-C and C=C bond length
      scale(1.435) translate([-2,0]) rotate(12) rotate(18){
        rotate(-30) translate([1,0]) circle(r=1, $fn=6);
        color("blue")
          rotate(36) translate([-1 / (2*sin(36)),0])
            circle(r=1 / (2*sin(36)), $fn=5);
    }
  }
}

module pyrimidine(){
  linear_extrude(height=0.75, center=true){
    // average hydrogen bond length in water: 1.97 A
    // https://en.wikipedia.org/wiki/Hydrogen_bond#Structural_details  
    translate([-0.985,0])
      scale(1.435) translate([-2, 0]) translate([1,0])
         circle(r=1, $fn=6);
  }
}

$vpt = [0, 0, 0];
//$vpr = [310, 105, 10];
$vpr = [0, 0, 0];

rotate([310, 105, 130]) translate([0,0,-hl/2]) {
  if(drawMode == "all" || drawMode == "helix1") color("lightblue")
    mapExtrude("vertCylinder", backbone_profile, helix_1);
  if(drawMode == "all" || drawMode == "helix2") color("pink")
    mapExtrude("vertCylinder", backbone_profile, helix_2);
  for(thb = [inc:(360 * loops / 34.3 + inc)]) {
    thi = thb-inc;
    th = (thi-thf) * 34.3;
    thisBase = bases[floor(thb%30)];
    doPur = (thisBase < 2);
    // base bond has a -1.2° angle;
    // not quite sure how to implement that
    baseFrac = (doPur ? 0.55 : 0.45);
    baseFInv = 1 - baseFrac;
    translate([0,0,hl * th / (360 * loops)]) rotate([-1.2,0,0]){
      if(drawMode == "all" || drawMode == "helix2") color("pink")
        lineTo([hr * cos(th)*(baseFrac-0.15) +
                hr * cos(th+120) * (baseFrac+0.15),
                hr * sin(th)*(baseFrac-0.15) +
                hr * sin(th+120) * (baseFrac+0.15)],
               [hr * cos(th+120), hr * sin(th+120)]);
      if(th < (h1jump))
        if(drawMode == "all" || drawMode == "helix1") color("lightblue")
          lineTo([hr * cos(th), hr * sin(th)],
                 [hr * cos(th)*(baseFrac+0.15) +
                  hr * cos(th+120) * (baseFrac-0.15),
                  hr * sin(th)*(baseFrac+0.15) +
                  hr * sin(th+120) * (baseFrac-0.15)]);
      if(drawMode == "all" ||
         (drawMode == "A" && thisBase == 0) ||
         (drawMode == "G" && thisBase == 1) ||
         (drawMode == "C" && thisBase == 2) ||
         (drawMode == "T" && thisBase == 3)
        )
      color((thisBase < 1) ? "green" : 
            (thisBase < 2) ? "gold"  :
            (thisBase < 3) ? "blue"  :
                             "red")
      translate([hr * cos(th)*baseFrac + hr * cos(th+120) * baseFInv,
                 hr * sin(th)*baseFrac + hr * sin(th+120) * baseFInv])
         rotate(180 + bAng + th) if(doPur) {
            purine(); } else { pyrimidine(); };
      if(drawMode == "all" ||
         (drawMode == "A" && thisBase == 3) ||
         (drawMode == "G" && thisBase == 2) ||
         (drawMode == "C" && thisBase == 1) ||
         (drawMode == "T" && thisBase == 0)
        )
        if(th < (h1jump))
        color((thisBase < 1) ? "red"  : 
              (thisBase < 2) ? "blue" :
              (thisBase < 3) ? "gold" :
                               "green")
        translate([hr * cos(th)*baseFrac + hr * cos(th+120) * baseFInv,
                   hr * sin(th)*baseFrac + hr * sin(th+120) * baseFInv])
           rotate(bAng+th) if(doPur) {
              pyrimidine(); } else { purine(); };
    }
  }
  if(drawMode == "all" || drawMode == "helix1") color("lightblue") {
    translate(helix_1[len(helix_1)-1]) sphere(r=bbr, $fn=5);
    translate(helix_1[0]) sphere(r=bbr, $fn=5);
  }
  if(drawMode == "all" || drawMode == "helix2") color("pink") {
    translate(helix_2[0]) sphere(r=bbr, $fn=5);
    translate(helix_2[len(helix_2)-1]) sphere(r=bbr, $fn=5);
  }
}

Ліцензування

Я, власник авторських прав на цей твір, добровільно публікую його на умовах таких ліцензій:
GNU head Дозволяється копіювати, розповсюджувати та/або модифікувати цей документ на умовах ліцензії GNU FDL версії 1.2 або більш пізньої, виданої Фондом вільного програмного забезпечення, без незмінних розділів, без текстів, які розміщені на першій та останній обкладинці. Копія ліцензії знаходиться у розділі GNU Free Documentation License.
w:uk:Creative Commons
зазначення авторства
Цей файл доступний на умовах ліцензії Creative Commons Із зазначенням авторства 4.0 Міжнародна
Зазначення авторства: SNP model by David Eccles (gringer)
Ви можете вільно:
  • ділитися – копіювати, поширювати і передавати твір
  • модифікувати – переробляти твір
При дотриманні таких умов:
  • зазначення авторства – Ви повинні вказати авторство, надати посилання на ліцензію і вказати, чи якісь зміни було внесено до оригінального твору. Ви можете зробити це в будь-який розсудливий спосіб, але так, щоб він жодним чином не натякав на те, наче ліцензіар підтримує Вас чи Ваш спосіб використання твору.
Ви можете обрати ліцензію на ваш розсуд.

Підписи

Додайте однорядкове пояснення, що саме репрезентує цей файл
DNA sequence variation in a population. A SNP is just a single nucleotide difference in the genome. The upper DNA molecule differs from the lower DNA molecule at a single base-pair location (a G/A polymorphism)

Об'єкти, показані на цьому файлі

зображує

Історія файлу

Клацніть на дату/час, щоб переглянути, як тоді виглядав файл.

Дата/часМініатюраРозмір об'єктаКористувачКоментар
поточний13:07, 8 травня 2021Мініатюра для версії від 13:07, 8 травня 2021520 × 333 (1,15 МБ)GringerUpdate to slightly more accurate 3D model, showing base rings
21:50, 17 грудня 2014Мініатюра для версії від 21:50, 17 грудня 2014457 × 298 (251 КБ)GringerIncrease nominal size to something readable
21:46, 17 грудня 2014Мініатюра для версії від 21:46, 17 грудня 2014120 × 80 (244 КБ)GringerUpdated to 3D model, different DNA sequence
01:40, 6 липня 2007Мініатюра для версії від 01:40, 6 липня 2007416 × 521 (59 КБ)Gringer{{Information |Description=A Single Nucleotide Polymorphism is a change of a nucleotide at a single base-pair location on DNA. Created using Inkscape v0.45.1. [modified to remove long tails on DNA] |Source=self-made |Date=2007-07-06 |Author=David Hall (~~
00:56, 6 липня 2007Мініатюра для версії від 00:56, 6 липня 2007471 × 521 (59 КБ)Gringer{{Information |Description=A Single Nucleotide Polymorphism is a change of a nucleotide at a single base-pair location on DNA. Created using Inkscape v0.45.1. |Source=self-made |Date=2007-07-06 |Author=David Hall (~~~) |other_versions= }}

Така сторінка використовує цей файл:

Глобальне використання файлу

Цей файл використовують такі інші вікі:

Переглянути сторінку глобального використання цього файлу.

Метадані