Kabsch algoritm

Kabsch -algoritmen , uppkallad efter Wolfgang Kabsch, är en metod för att beräkna den optimala rotationsmatrisen som minimerar RMSD ( root mean squared deviation) mellan två parade uppsättningar av punkter. Det är användbart i grafik, keminformatik för att jämföra molekylära strukturer, och även bioinformatik för att jämföra proteinstrukturer (se särskilt rot-medelkvadratavvikelse (bioinformatik) ) .

Algoritmen beräknar bara rotationsmatrisen, men den kräver också beräkning av en translationsvektor. När både translationen och rotationen faktiskt utförs kallas algoritmen ibland för partiell Procrustes-överlagring (se även ortogonal Procrustes-problem ) .

Beskrivning

Algoritmen för rotationen av P till Q börjar med två uppsättningar parade punkter, P och Q . Varje uppsättning punkter kan representeras som en N × 3 matris . Den första raden är koordinaterna för den första punkten, den andra raden är koordinaterna för den andra punkten, den N :te raden är koordinaterna för den N :te punkten. Kontrollera matrisen nedan

Algoritmen fungerar i tre steg: en translation, beräkningen av en kovariansmatris och beräkningen av den optimala rotationsmatrisen.

Översättning

Båda uppsättningarna av koordinater måste översättas först, så att deras tyngdpunkt sammanfaller med ursprunget för koordinatsystemet . Detta görs genom att subtrahera från punktkoordinaterna för respektive tyngdpunkt.

Beräkning av kovariansmatrisen

Det andra steget består av att beräkna en matris H . I matrisnotation,

eller, med summeringsnotation,

som är en korskovariansmatris när P och Q ses som datamatriser .

Beräkning av den optimala rotationsmatrisen

Det är möjligt att beräkna den optimala rotationen R baserat på matrisformeln

men att implementera en numerisk lösning på denna formel blir komplicerad när alla specialfall redovisas (till exempel fallet med H som inte har en invers).

Om rutiner för singular value decomposition (SVD) är tillgängliga, kan den optimala rotationen, R , beräknas med hjälp av följande enkla algoritm.

Beräkna först SVD för kovariansmatrisen H .

Bestäm sedan om vi behöver korrigera vår rotationsmatris för att säkerställa ett högerhänt koordinatsystem

Beräkna slutligen vår optimala rotationsmatris, R , som

Den optimala rotationsmatrisen kan också uttryckas i termer av kvaternioner . Denna alternativa beskrivning har använts i utvecklingen av en rigorös metod för att ta bort stela kroppsrörelser från molekylära dynamikbanor hos flexibla molekyler. År 2002 föreslogs också en generalisering för tillämpningen av sannolikhetsfördelningar (kontinuerliga eller ej).

Generaliseringar

Algoritmen beskrevs för punkter i ett tredimensionellt utrymme. Generaliseringen till D -dimensioner är omedelbar.

externa länkar

Denna SVD-algoritm beskrivs mer i detalj på http://cnx.org/content/m11608/latest/

En Matlab- funktion finns tillgänglig på http://www.mathworks.com/matlabcentral/fileexchange/25746-kabsch-algorithm

En C++-implementering (och enhetstest) med Eigen

Ett Python- skript finns tillgängligt på https://github.com/charnley/rmsd . En annan implementering finns i SciPy .

Ett gratis PyMol- plugin som enkelt implementerar Kabsch är [1] . (Detta var tidigare kopplat till CEalign [2] , men detta använder CE-algoritmen . ) VMD använder Kabsch-algoritmen för sin justering.

FoldX - modelleringsverktygspaketet innehåller Kabsch-algoritmen för att mäta RMSD mellan vildtyps- och muterade proteinstrukturer.

Se även