htmol
Version:
NEXT-GENERATION MOLECULAR DYNAMICS WEB VISUALIZATION
917 lines (808 loc) • 72.2 kB
JavaScript
/*
This file is part of HTMoL:
Copyright (C) 2014 Dr. Mauricio Carrillo-Tripp
http://tripplab.com
Developers:
v1.0 Leonardo Alvarez-Rivera, Francisco Javier Becerra-Toledo, Adan Vega-Ramirez
v2.0 Javier Garcia-Vieyra
v3.0 Omar Israel Lara-Ramirez, Eduardo González-Zavala, Emmanuel Quijas-Valades, Julio Cesar González-Vázquez
v3.5 Leonardo Alvarez-Rivera
*/
var htmolver="v3.5"
var zoom,data,MainMenu;
var worker1;
var sizeglob=0;
var url;
var totalframes=0;
var totalframes1=0;
var numframe=0;
var trjbnd=false;
var bitrate=0;
var readstart=0;
var readend=mxSize;
var requireddata=false;
var pos=0;
var bndarray=true;
var bndbuffer=0;
var bndfinal=false;
var bndknowframe=false;
var bndreview=false;
var sizearrayp=0;
var trjauto=false;
var autoload=true;
var fpath;
var bsip="69.69.69.69";
var bslat=69;
var bslon=69;
var bsCont="NA";
var bsPais="NA";
var bsCd="NA";
var bscurrentdate = new Date();
var bsdatetime = "69/69/69 69:69";
function Main()
{
//var prr=
//"-0.008575 0.018675 0.000000 0.008375 0.018675 0.000000 -0.000100 0.022200 0.000000 0.011900 0.010200 0.000000 -0.012100 0.010200 0.000000 -0.008575 0.001725 0.000000 0.008375 0.001725 0.000000 -0.000100 -0.001800 0.000000"
//;
//alert(prr.replace(/[ ,]+/g, ","));
//-----------------------------------Bloque inicial para declarar el worker----------------------------------
console.log("entered main");
console.log("WebIP="+WebIP+" NodePort="+NodePort+" trjFormat="+trjFormat);
if (typeof(Worker)=="undefined")
{
alert("HTMoL: Alert. Workers not supported");
}
else
{
UserInfo.getInfo(function(data) { // the "data" object contains the BinaryClient info
bsip=data.ip_address;
bslat=data.position.latitude;
bslon=data.position.longitude;
bsCont=data.continent.name;
bsPais=data.country.name;
bsCd=data.city.name;
}, function(err) {
// the "err" object contains useful information in case of an error
});
var bsdatetime = "" + bscurrentdate.getDate() + "/"
+ (bscurrentdate.getMonth()+1) + "/"
+ bscurrentdate.getFullYear() + " @ "
+ bscurrentdate.getHours() + ":"
+ bscurrentdate.getMinutes() + ":"
+ bscurrentdate.getSeconds();
//Para modificar worker1.js y evitar caché
var marcaTime = parseInt(Math.random() * 1000000);
worker1 = new Worker("js/worker.js?=" + marcaTime);
worker1.postMessage = worker1.webkitPostMessage || worker1.postMessage;
worker1.onerror= function(e){
data.innerHTML="HTMoL: "+e.message;
}
worker1.addEventListener("message", manejadorEventoWorker1, false);
}
//----------------------------------------------------------------------------------------------------------------
var main=this;
this.ObjP= new Process();
//--------------------------
molecule=this.ObjP.ReadFile(PDBDIR+pdbInicial);
var about="<a href='http://htmol.tripplab.com/' target='_blank' style='color:orange;font-weight: bold;'>HTMoL</a>"; // Please do not change nor remove
info.innerHTML=about+htmolver+": "+pdbInicial+" ("+molecule.LstAtoms.length+" atoms)";
// info.innerHTML=molecule.LstAtoms.length+" atoms";
createBonds(this);
initCamera(CzPers);
// Set initial view
UserSetView(molecule, 'FrontView');
//---------------------------
//AtomosSeleccionados=molecule.LstAtoms;
var Container=null;
var buffer = new ArrayBuffer();
this.DeleteButtons = function()
{
for(var i=0; i<LstBtnsChain.length;i++)
{
menu.removeChild(LstBtnsChain[i]);
}
LstBtnsChain=[];
}
this.Buttons=function()
{
//se cargan los botones de las Cadenas
for(var i=0; i<molecule.LstChain.length; i++)
{
var chain = molecule.LstChain[i];
var button = document.createElement('input');
button.type="button";
button.value=chain.Name;
button.id=chain.Name;
button.onclick=ProcesarCadena(i,button);
if (button.value!="undefined")
{
menu.appendChild(button);
LstBtnsChain.push(button);
}
}
//se cargan las funciones para la selección por átomos
for(var i=0;i < LstAtoms.length; i++) //LstAtoms se encuentra en el support.js
{
var op=LstAtoms[i];
var an = document.getElementById(op );
an.onclick=ByAtoms(molecule,op);
}
for(var i=0;i < LstAminoacid.length; i++)
{
var op=LstAminoacid[i];
var an = document.getElementById(op);
try{
an.onclick=ByAmino(molecule,op);
}
catch(err) {
}
}
for(var i in LstViews)
{
var op = LstViews[i];
var an = document.getElementById(op.name);
an.onclick=SetView(molecule,op);
}
/* for(var i=0; i< LstColors.length; i++)
{
var op=LstColors[i];
var an = document.getElementById(op);
an.onclick=ByColor(molecule,op);
}*/
//para el centrado por átom
var an = document.getElementById('Center');
an.onclick=CenterByAtom();
an = document.getElementById('Distance'); //afecta el picking
an.onclick=Distance();
an = document.getElementById('Angle'); //afecta el picking
an.onclick=Angle();
an = document.getElementById('None2'); //para borrar las anteriores, también afecta el picking
an.onclick=None();
an = document.getElementById('DeleteMeasures'); //para borrar las anteriores, también afecta el picking
an.onclick=DeleteMeasures();
an = document.getElementById('Axis');
an.onclick=Axis();
an = document.getElementById('None1');
an.onclick=NoAtomCenter();
}
this.CleanScene=function()
{
console.log("CleanScene");
cleanMemory();
//se limpian los botones de la dinámica
var button=document.getElementById("playpause");
var reg=document.getElementById("Rew");
var forw=document.getElementById("Forw");
button.style.display="none";
reg.style.display="none";
forw.style.display="none";
DinamicaActiva=false;
coordsX=[[]];
coordsY=[[]];
coordsZ=[[]];
pos=0;
numframe=0;
//////////////////////////
//para limpiar los dígitos
var newRotationMatrix = mat4.create();
mat4.identity(newRotationMatrix);
mat4.rotate(newRotationMatrix, degToRad(0), [0, 1, 0]); //vista frontal
// mat4.rotate(newRotationMatrix, degToRad(270), [0, 0, 1]); //vista frontal 0
// mat4.rotate(newRotationMatrix, degToRad(270), [0, 1, 0]); //vista frontal 0
mat4.identity(RotationMatrix);
mat4.multiply(newRotationMatrix, RotationMatrix, RotationMatrix);
hayseleccionado=false;
ArrayIndx=[0];
var u_Array = gl.getUniformLocation(program, 'uIntArray');
gl.uniform1fv(u_Array, ArrayIndx);
ArrayIndx.pop();
main.DeleteButtons();
}
this.MakeModel=function(url)
{
main.CleanScene();
molecule=main.ObjP.ReadFile(url);
// info.innerHTML="HTMoLv3.5: "+url+" ("+molecule.LstAtoms.length+" atoms)";
info.innerHTML=molecule.LstAtoms.length+" atoms";
createBonds(main);
initCamera(CzPers);
if (RepresentacionInicial=='SpheresBonds')
{
InitBufSB();
}
else if(RepresentacionInicial=='Bonds')
{
InitBufBonds();
}
else if(RepresentacionInicial=='VDW')
{
InitBufVDW();
}
main.Buttons();
if(molecule!=null)
{
data.innerHTML="HTMoL3: Loading...";
window.setTimeout(function(){
if(main.ObjP.Model.Frames!=0 && main.ObjP.Model.Frames!="")
{
main.filerequest();
//console.log("HTMoL3: "+trjauto);
trjauto=true;
autoplay=false;
//console.log("HTMoL3: "+trjauto);
DinamicaActiva=true;
}
data.innerHTML="";
},100);
}
else{
data.innerHTML="HTMoL3: Error (Main.js). Invalid URL or Connection not available.";
}
}
this.Parse=function(txt) // Parsing commands in the console
{
var comando=txt.substr(0, txt.indexOf(" ")).toLowerCase();//obtengo la primer palabra que es un comando
//luego voy a obtener todo lo demás que va a ser la instrucción
var lines=txt.split(" ");
var inst=txt.replace(comando + ' ','');
if (comando == 'select') {
EliminarSeleccion();
//alert("comando select");
//obtener todo lo demás antes del ;
//alert(inst);
//alert(inst.length);
var numAtoms=0;
//var regex = /(\d+)/g;
//alert(inst.match(regex));
//alert(AtomosSeleccionados.length);
if (inst=='none')
{
EliminarSeleccion();
}
else if (inst=='all')
{
AtomosSeleccionados=molecule.LstAtoms;
}
else
{
//script=inst.match(regex);
var arrComa = inst.split(",");
//alert(arrComa.length);
var allselect=false;
for(var i=0; i<arrComa.length; i++)
{
var ele=arrComa[i];
var n=ele.indexOf("-");
var m=ele.indexOf(":")
if (n>(-1)) //quiere decir que es un rango ejemplo 34-38
{
//alert("rango");
var arr2=ele.split("-");
var rng1 = parseInt(arr2[0]);
var rng2 = parseInt(arr2[1]);
if (!isNaN(rng1) && !isNaN(rng2))
{
//alert("los dos son numeros");
if (rng1>0 && rng1 <= molecule.LstAtoms.length && rng2>0 && rng2 <= molecule.LstAtoms.length)
{
if (rng2 < rng1)
{
for(var j=rng2; j<=rng1; j++)
{
AtomosSeleccionados.push(molecule.LstAtoms[j - 1]);
}
}
else
{
for(var j=rng1; j<=rng2; j++)
{
AtomosSeleccionados.push(molecule.LstAtoms[j - 1]);
}
}
}
}
}
else if(m>(-1)) //quiere decir que es un grupo ejemplo 0:45:A
{
var arr3=ele.split(":");
if (arr3.length==3) //quiere decir que sì tiene bien las tres partes
{
//0:2:1
//N:6:2
//Voy a poner todos los casos
if (arr3[0]==0) //todos los àtomos del aminoàciodo
{
if (arr3[1]==0) //todos los aminoácidos
{
if (arr3[2]==0) //todos los átomos de la molécula
{
allselect=true;
}
else //todos los atomos de una cadena
{
//primero checar si es un numero la cadena, entonces sera por index
if (!isNaN(arr3[2])) //es un indice
{
if (arr3[2]>0 && arr3[2]<=molecule.LstChain.length) //entonces esta en el rango
{
var cha=molecule.LstChain[arr3[2]-1];
for(var j=0; j<cha.LstAminoacid.length;j++)
{
var amin=cha.LstAminoacid[j];
for(var z=0; z<amin.LstAtoms.length;z++)
{
AtomosSeleccionados.push(amin.LstAtoms[z]);
}
}
}
else
{
//la cadena no esta dentro del indice
}
}
else //si no la cadena es por nombre
{
//tengo que buscarlo por la letra
for(var j=0;j<molecule.LstChain.length; j++)
{
if (arr3[2]==molecule.LstChain[j].Name.replace(" ", "") )
{
//procesalo y salte del for
var cha=molecule.LstChain[j];
for(var k=0; k<cha.LstAminoAcid.length;k++)
{
var amin=cha.LstAminoAcid[k];
for(var z=0; z<amin.LstAtoms.length;z++)
{
AtomosSeleccionados.push(amin.LstAtoms[z]);
}
}
break; //checar si esta bien esta instruccion
}
}
}
}
}
else //en esta parte quiere decir que sí se ha especificado el aminoácido
{ //en esta parte el aminoácido
if (!isNaN(arr3[1])) //el aminoácido es un índice pero hay que buscarlo
{
if (arr3[2]==0) //de todas las cadenas
{
//para buscar el aminoacido en todas las cadenas
for(var k=0; k<molecule.LstChain.length; k++)
{
var caden = molecule.LstChain[k];
for(var t=0; t< caden.LstAminoAcid.length; t++)
{
var amin = caden.LstAminoAcid[t];
//alert("length:"+amin.Number.replace(" ", "").length)
//alert("length:"+arr3[1].replace(" ", "").length)
if (parseInt(arr3[1]) == parseInt(amin.Number))
{
for(var v=0; v<amin.LstAtoms.length; v++)
{
AtomosSeleccionados.push(amin.LstAtoms[v]);
}
break; //quiere decir que lo encontré en esa cadena
}
}
}
}
else //de una cadena la cadena puede ser por indice o por letra
{
if (!isNaN(arr3[2])) //es un indice
{
//los indices en la cadena son como aparecen en la lista
if (arr3[2]>0 && arr3[2] <= molecule.LstChain.length) //para saber que si esta en el rango
{
var cha = molecule.LstChain[arr3[2]-1]; //ya encontre la cadena
//ahora busco en todos los aminoacidos de esta cadena
for(var t=0; t< cha.LstAminoAcid.length; t++)
{
var amin = cha.LstAminoAcid[t];
//alert("length:"+amin.Number.replace(" ", "").length)
//alert("length:"+arr3[1].replace(" ", "").length)
if (parseInt(arr3[1]) == parseInt(amin.Number))
{
for(var v=0; v<amin.LstAtoms.length; v++)
{
AtomosSeleccionados.push(amin.LstAtoms[v]);
}
break; //quiere decir que lo encontré en esa cadena
}
}
}
}
else //la cadena es por letra
{
//tengo que buscarlo por la letra
for(var j=0;j<molecule.LstChain.length; j++)
{
if (arr3[2]==molecule.LstChain[j].Name.replace(" ", "") )
{
//procesalo y salte del for
var cha=molecule.LstChain[j];
//ahora busco en todos los aminoacidos de esta cadena
for(var t=0; t < cha.LstAminoAcid.length; t++)
{
var amin = cha.LstAminoAcid[t];
//alert("length:"+amin.Number.replace(" ", "").length)
//alert("length:"+arr3[1].replace(" ", "").length)
if (parseInt(arr3[1]) == parseInt(amin.Number))
{
for(var v=0; v<amin.LstAtoms.length; v++)
{
AtomosSeleccionados.push(amin.LstAtoms[v]);
}
break; //quiere decir que lo encontré en esa cadena
}
}
}
}
}
}
}
else //el aminoácido es por letra, hay que buscarlo, Las letras se pueden repetir dentro de una cadena
{
//hay dos opciones todos los aminoacidos que tengan este nombre en una cadena
//todos los aminoacidos que tengan este nombre en todas las cadenas
if (arr3[2]==0) //de todas las cadenas
{
//para buscar el aminoacido en todas las cadenas
for(var k=0; k<molecule.LstChain.length; k++)
{
var caden = molecule.LstChain[k];
for(var t=0; t< caden.LstAminoAcid.length; t++)
{
var amin = caden.LstAminoAcid[t];
//alert("length:"+amin.Number.replace(" ", "").length)
//alert("length:"+arr3[1].replace(" ", "").length)
if ( arr3[1].replace(" ", "") == amin.Name.replace(" ", "")) //
{
for(var v=0; v<amin.LstAtoms.length; v++)
{
AtomosSeleccionados.push(amin.LstAtoms[v]);
}
}
}
}
}
else
{
//de una cadena, la cadena puede estar dada por un indice o por una letra
if (!isNaN(arr3[2])) //es un indice
{
//los indices en la cadena son como aparecen en la lista
if (arr3[2]>0 && arr3[2] <= molecule.LstChain.length) //para saber que si esta en el rango
{
var cha = molecule.LstChain[arr3[2]-1]; //ya encontre la cadena
//ahora busco en todos los aminoacidos de esta cadena
for(var t=0; t< cha.LstAminoAcid.length; t++)
{
var amin = cha.LstAminoAcid[t];
//alert("length:"+amin.Number.replace(" ", "").length)
//alert("length:"+arr3[1].replace(" ", "").length)
if ( arr3[1].replace(" ", "") == amin.Name.replace(" ", "")) //
{
for(var v=0; v<amin.LstAtoms.length; v++)
{
AtomosSeleccionados.push(amin.LstAtoms[v]);
}
}
}
}
}
else //la cadena es una letra
{
//tengo que buscarla por la letra
for(var j=0;j<molecule.LstChain.length; j++)
{
if (arr3[2]==molecule.LstChain[j].Name.replace(" ", "") )
{
//procesalo y salte del for
var cha=molecule.LstChain[j];
//ahora busco en todos los aminoacidos de esta cadena
for(var t=0; t< cha.LstAminoAcid.length; t++)
{
var amin = cha.LstAminoAcid[t];
//alert("length:"+amin.Number.replace(" ", "").length)
//alert("length:"+arr3[1].replace(" ", "").length)
if ( arr3[1].replace(" ", "") == amin.Name.replace(" ", "")) //
{
for(var v=0; v<amin.LstAtoms.length; v++)
{
AtomosSeleccionados.push(amin.LstAtoms[v]);
}
}
}
}
}
}
}
}
}
}
else ////////////////por elemento
{
//buscar el elemento
if (arr3[1]==0) //en todos los aminoácidos
{
if (arr3[2]==0) //en todas las cadenas
{
for (var j = 0; j < molecule.LstAtoms.length; j++)
{
if (arr3[0] == molecule.LstAtoms[j].Element) {
if (molecule.LstAtoms[j].State == 'Active') { //checar lo de Active
AtomosSeleccionados.push(molecule.LstAtoms[j]);
}
}
}
}
else //todos los aminoacidos de una cadena
{
//la cadena puede estar dada por un indice o por una letra
if (!isNaN(arr3[2])) //es un indice
{
//los indices en la cadena son como aparecen en la lista
if (arr3[2]>0 && arr3[2] <= molecule.LstChain.length) //para saber que si esta en el rango
{
var cha = molecule.LstChain[arr3[2]-1]; //ya encontre la cadena
for(var t=0; t< cha.LstAminoAcid.length; t++)
{
var amin = cha.LstAminoAcid[t];
for(var v=0; v<amin.LstAtoms.length; v++)
{
if (arr3[0].replace(" ", "") == amin.LstAtoms[v].Element.replace(" ", ""))
{
if (amin.LstAtoms[v].State == 'Active')
{
AtomosSeleccionados.push(amin.LstAtoms[v]);
}
}
}
}
}
}
else //la cadena está dada por una letra, primero la tengo que buscar
{
//tengo que buscarla por la letra
for(var j=0;j<molecule.LstChain.length; j++)
{
if (arr3[2]==molecule.LstChain[j].Name.replace(" ", "") )
{
//procesalo y salte del for
var cha=molecule.LstChain[j];
//ahora busco en todos los aminoacidos de esta cadena
for(var t=0; t< cha.LstAminoAcid.length; t++)
{
var amin = cha.LstAminoAcid[t];
for(var v=0; v<amin.LstAtoms.length; v++)
{
if (arr3[0].replace(" ", "") == amin.LstAtoms[v].Element.replace(" ", ""))
{
if (amin.LstAtoms[v].State == 'Active')
{
AtomosSeleccionados.push(amin.LstAtoms[v]);
}
}
}
}
}
}
}
}
}
else //en esta parte quiere decir que sí se ha especificado el aminoácido
{ //en esta parte el aminoácido
if (!isNaN(arr3[1])) //el aminoácido es un índice pero hay que buscarlo
{
if (arr3[2]==0) //de todas las cadenas
{
//para buscar el aminoacido en todas las cadenas
for(var k=0; k<molecule.LstChain.length; k++)
{
var caden = molecule.LstChain[k];
for(var t=0; t< caden.LstAminoAcid.length; t++)
{
var amin = caden.LstAminoAcid[t];
//alert("length:"+amin.Number.replace(" ", "").length)
//alert("length:"+arr3[1].replace(" ", "").length)
if (parseInt(arr3[1]) == parseInt(amin.Number))
{
for(var v=0; v<amin.LstAtoms.length; v++)
{
if (arr3[0].replace(" ", "") == amin.LstAtoms[v].Element.replace(" ", ""))
{
if (amin.LstAtoms[v].State == 'Active')
{
AtomosSeleccionados.push(amin.LstAtoms[v]);
}
}
}
break; //quiere decir que encontré el aminoácido en esa cadena
}
}
}
}
else //de una cadena la cadena puede ser por indice o por letra
{
if (!isNaN(arr3[2])) //es un indice
{
//los indices en la cadena son como aparecen en la lista
if (arr3[2]>0 && arr3[2] <= molecule.LstChain.length) //para saber que si esta en el rango
{
var cha = molecule.LstChain[arr3[2]-1]; //ya encontre la cadena
//ahora busco en todos los aminoacidos de esta cadena
for(var t=0; t< cha.LstAminoAcid.length; t++)
{
var amin = cha.LstAminoAcid[t];
//alert("length:"+amin.Number.replace(" ", "").length)
//alert("length:"+arr3[1].replace(" ", "").length)
if (parseInt(arr3[1]) == parseInt(amin.Number))
{
for(var v=0; v<amin.LstAtoms.length; v++)
{
if (arr3[0].replace(" ", "") == amin.LstAtoms[v].Element.replace(" ", ""))
{
if (amin.LstAtoms[v].State == 'Active')
{
AtomosSeleccionados.push(amin.LstAtoms[v]);
}
}
}
break; //quiere decir que lo encontré en esa cadena
}
}
}
}
else //la cadena es por letra
{
//tengo que buscarlo por la letra
for(var j=0;j<molecule.LstChain.length; j++)
{
if (arr3[2]==molecule.LstChain[j].Name.replace(" ", "") )
{
//procesalo y salte del for
var cha=molecule.LstChain[j];
//ahora busco en todos los aminoacidos de esta cadena
for(var t=0; t < cha.LstAminoAcid.length; t++)
{
var amin = cha.LstAminoAcid[t];
//alert("length:"+amin.Number.replace(" ", "").length)
//alert("length:"+arr3[1].replace(" ", "").length)
if (parseInt(arr3[1]) == parseInt(amin.Number))
{
for(var v=0; v<amin.LstAtoms.length; v++)
{
if (arr3[0].replace(" ", "") == amin.LstAtoms[v].Element.replace(" ", ""))
{
if (amin.LstAtoms[v].State == 'Active')
{
AtomosSeleccionados.push(amin.LstAtoms[v]);
}
}
}
break; //quiere decir que lo encontré en esa cadena
}
}
}
}
}
}
}
else //el aminoácido es por letra, hay que buscarlo
{
//hay dos opciones todos los aminoacidos que tengan este nombre en una cadena
//todos los aminoacidos que tengan este nombre en todas las cadenas
if (arr3[2]==0) //de todas las cadenas
{
//para buscar el aminoacido en todas las cadenas
for(var k=0; k<molecule.LstChain.length; k++)
{
var caden = molecule.LstChain[k];
for(var t=0; t< caden.LstAminoAcid.length; t++)
{
var amin = caden.LstAminoAcid[t];
//alert("length:"+amin.Number.replace(" ", "").length)
//alert("length:"+arr3[1].replace(" ", "").length)
if ( arr3[1].replace(" ", "") == amin.Name.replace(" ", "")) //
{
for(var v=0; v<amin.LstAtoms.length; v++)
{
if (arr3[0].replace(" ", "") == amin.LstAtoms[v].Element.replace(" ", ""))
{
if (amin.LstAtoms[v].State == 'Active')
{
AtomosSeleccionados.push(amin.LstAtoms[v]);
}
}
}
}
}
}
}
else
{
//de una cadena, la cadena puede estar dada por un indice o por una letra
if (!isNaN(arr3[2])) //es un indice
{
//los indices en la cadena son como aparecen en la lista
if (arr3[2]>0 && arr3[2] <= molecule.LstChain.length) //para saber que si esta en el rango
{
var cha = molecule.LstChain[arr3[2]-1]; //ya encontre la cadena
//ahora busco en todos los aminoacidos de esta cadena
for(var t=0; t< cha.LstAminoAcid.length; t++)
{
var amin = cha.LstAminoAcid[t];
//alert("length:"+amin.Number.replace(" ", "").length)
//alert("length:"+arr3[1].replace(" ", "").length)
if ( arr3[1].replace(" ", "") == amin.Name.replace(" ", "")) //
{
for(var v=0; v<amin.LstAtoms.length; v++)
{
if (arr3[0].replace(" ", "") == amin.LstAtoms[v].Element.replace(" ", ""))
{
if (amin.LstAtoms[v].State == 'Active')
{
AtomosSeleccionados.push(amin.LstAtoms[v]);
}
}
}
}
}
}
}
else //la cadena es una letra
{
//tengo que buscarla por la letra
for(var j=0;j<molecule.LstChain.length; j++)
{
if (arr3[2]==molecule.LstChain[j].Name.replace(" ", "") )
{
//procesalo y salte del for
var cha=molecule.LstChain[j];
//ahora busco en todos los aminoacidos de esta cadena
for(var t=0; t< cha.LstAminoAcid.length; t++)
{
var amin = cha.LstAminoAcid[t];
//alert("length:"+amin.Number.replace(" ", "").length)
//alert("length:"+arr3[1].replace(" ", "").length)
if ( arr3[1].replace(" ", "") == amin.Name.replace(" ", "")) //
{
for(var v=0; v<amin.LstAtoms.length; v++)
{
if (arr3[0].replace(" ", "") == amin.LstAtoms[v].Element.replace(" ", ""))
{
if (amin.LstAtoms[v].State == 'Active')
{
AtomosSeleccionados.push(amin.LstAtoms[v]);
}
}
}
}
}
}
}
}
}
}
}
}
}
}
else //quiere decir que es un index ejemplo 45
{
AtomosSeleccionados.push(molecule.LstAtoms[ele-1]);
}
}
/*
for(var o in script)
{
if(o==0)
{
AtomosSeleccionados=molecule.LstChain[0].LstAminoAcid[script[0]-1].GetAtoms();
}
else
{
AtomosSeleccionados=AtomosSeleccionados.concat(molecule.LstChain[0].LstAminoAcid[script[o]-1].GetAtoms());