Диссертация (1091574), страница 21
Текст из файла (страница 21)
Conformational analysis of menthol byelucidation of high resolution 1H NMR multiplet structure and FPT DFT calculations // Bookof abstract EuroMAR. – Frankfurt am Main, 2011. – P. Sm604.5. Cheshkov D.A., Ganina T.A., Sinitsyn D.O., Chertkov V.A. Dynamics of internal rotation instyrene through analysis of high resolution 1H NMR multiplet structure and dynamic FPTDFT calculations // Book of abstract EuroMAR.
– Frankfurt am Main, 2011. – P. Sm605.6. Чертков В.А., Ганина Т.А., Пушкарева А.А., Чертков А.В., Чешков Д.А., Шестакова А.К.Новые методы извлечения структурной информации из мультиплетной структурыспектров ЯМР высокого разрешения // V всероссийская конференция “Новые достиженияЯМР в структурных исследованиях”.
– Казань, 2011. – С. 82-82.1297. ПриложениеКласс C++ “Hamiltonian” программы для анализа спектровclass Hamiltonian{public:intunsigned intintdouble*intint*int**unsigned int**double***int*intdouble**bool***intdouble*double*intdouble*double*Hamiltonian(int nSpins0){nSpins = nSpins0;nFunc=1<<nSpins;nBlocks=nSpins+1;nSpins;nFunc;nBlocks;Parameters;nParams;Offs;Jcoup;bFunc;Ham;BlockSize;MaxBlockSize;EigenVal;Perturbation;nFreqs;Freqs;Intens;nFreqsFiltered;FreqsFiltered;IntensFiltered;// Конструктор класса// Выделение памяти, инициализация массивов// SpinSystem parametersParameters = NULL;nParams = 0;Offs = new int[nSpins+1]; Offs[0]=0;Jcoup = new int*[nSpins+1]; Jcoup[0]=NULL;for (int i = 1; i <= nSpins; i++){Offs[i]=0;Jcoup[i] = new int[nSpins+1];for(int j=0; j <= nSpins; j++)Jcoup[i][j] = 0;};BlockSize = new int[nBlocks+1];for(int i=0; i <= nBlocks; i++)BlockSize[i]=0;130for(unsigned int i = 0; i <= nFunc-1; i++)BlockSize[getbitsum(i)+1]++;MaxBlockSize = 0;for(int i = 1; i <= nBlocks; i++)if(MaxBlockSize < BlockSize[i])MaxBlockSize = BlockSize[i];nFreqs = 0;nFreqsFiltered = 0;for(int i = 1; i <= nBlocks - 1; i++)nFreqs += BlockSize[i] * BlockSize[i+1];Freqs = new double[nFreqs+1];Intens = new double[nFreqs+1];FreqsFiltered = new double [nFreqs+1];IntensFiltered = new double [nFreqs+1];for(int i = 0; i <= nFreqs; i++){Freqs[i]=0;Intens[i]=0;FreqsFiltered[i]=0;IntensFiltered[i]=0;};// Расчет базисных функцийbFunc = new unsigned int*[nBlocks+1]; bFunc[0]=NULL;for(int i = 1; i <= nBlocks; i++){int tmp = 1;bFunc[i] = new unsigned int[BlockSize[i]+1];bFunc[i][0] = 0;for(unsigned int j = 0; j <= nFunc-1; j++)if (getbitsum(j)+1 == i) { bFunc[i][tmp]=j; tmp++; };};Ham = new double**[nBlocks+1];Ham[0]=NULL;for(int i = 1; i <= nBlocks; i++){Ham[i]= new double*[BlockSize[i]+1];Ham[i][0]=NULL;for(int j=1; j <= BlockSize[i]; j++){Ham[i][j]= new double[BlockSize[i]+1];for(int k=0; k <= BlockSize[i]; k++)Ham[i][j][k]=0;};};131EigenVal = new double*[nBlocks+1];EigenVal[0] = NULL;for(int i = 1; i <= nBlocks; i++){EigenVal[i] = new double[BlockSize[i]+1];for(int j=0; j<= BlockSize[i]; j++)EigenVal[i][j]=0;};Perturbation = new bool**[nBlocks];Perturbation[0] = NULL;for(int i = 1; i <= nBlocks - 1; i++){Perturbation[i] = new bool*[BlockSize[i + 1] + 1];Perturbation[i][0] = NULL;for(int j = 1; j <= BlockSize[i + 1]; j++){Perturbation[i][j] = new bool[BlockSize[i] + 1];Perturbation[i][j][0] = false;};};// Расчет оператора возмущенияfor(int i = 1; i <= nBlocks - 1; i++)for(int j = 1; j <= BlockSize[i + 1]; j++){bool* Perturbij = Perturbation[i][j];unsigned int* bFi = bFunc[i];unsigned int bFippj = bFunc[i + 1][j];for(int k = 1; k <= BlockSize[i]; k++)Perturbij[k] = getbitsum(bFippj^bFi[k]) == 1;};};void LoadSpinSystemSymmetry(const char filename[]){nParams = 0;ifstream istr(filename);for (int i = 1; i <= nSpins; i++){istr >> Offs[i];if(nParams < Offs[i]) nParams = Offs[i];};for (int i = 1; i <= nSpins; i++)for (int j = i+1; j <= nSpins; j++){istr >> Jcoup[i][j];if(nParams < Jcoup[i][j]) nParams = Jcoup[i][j];};istr.close();132};Parameters = new double[nParams + 1];for (int i = 1; i <= nParams; i++)Parameters[i] = 0;void Build(void)// Расчет Ĥ по блокам ΣIZ{int j_location[3]={0, 0, 0};unsigned int offdiag=0;int* sign = new int[nSpins+1];int signk = 0;double element = 0;unsigned int bFij = 0;unsigned int* bFi = NULL;int bs =0;double** Hami = NULL;for(int i = 1; i <= nBlocks; i++){bs = BlockSize[i];Hami = Ham[i];bFi = bFunc[i];for(int j = 1; j <= bs; j++){bFij = bFi[j];element = 0;for(int k = 1; k <= nSpins; k++)sign[k] = (getbit(bFij, nSpins-k+1)== 1)?-1:1;for(int k = 1; k <= nSpins; k++){signk = sign[k];element += Parameters[Offs[k]]*signk;for(int kk = k+1; kk <= nSpins; kk++)element += 0.5*signk*sign[kk]*Parameters[Jcoup[k][kk]];};Hami[j][j] = element;for(int k = 1; k <= j - 1; k++){element = 0;offdiag = bFij^bFi[k];if(getbitsum(offdiag) == 2){int tmp = 1;for(int kk = 1; kk <= nSpins; kk++)if(getbit(offdiag, nSpins-kk+1) == 1)j_location[tmp++] = kk;element = Parameters[Jcoup[j_location[1]][j_location[2]]];};Hami[j][k] = element;};133for(int k = j + 1; k <= bs; k++) Hami[j][k] = 0;};};delete sign;};void FindEigensystem(void) // Диагонализация блоков Ĥ{double* e;for(int i = 1; i <= nBlocks; i++){if(BlockSize[i] > 1){e = new double[BlockSize[i] + 1];// ---------------------------------------------// Диагонализация матрицы алгоритмом Хаусхолдераtred2(Ham[i], BlockSize[i], EigenVal[i], e);tqli(EigenVal[i], e, BlockSize[i], Ham[i]);// ---------------------------------------------delete e;}else{EigenVal[i][1] = Ham[i][1][1];Ham[i][1][1] = 1;};};};// Расчет частот и интенсивностей переходовvoid CalcFreqIntens(double IntensityThreshold){double** HamCurrBlock = NULL;double*HamCurrBlockj = NULL;double** HamNextBlock = NULL;double*HamNextBlockk = NULL;double*EigenValCurr = NULL;double*EigenValNext = NULL;bool**Perturbi = NULL;bool*Perturbik = NULL;doubleintensity = 0, maxintens = 0;int freqnum = 1, bs = 0, bs_next = 0;double* perturb = new double[MaxBlockSize + 1];perturb[0] = 0;134HamTanspose();for(int i = 1; i <= nBlocks - 1; i++){bs = BlockSize[i];bs_next = BlockSize[i + 1];HamCurrBlock = Ham[i];HamNextBlock = Ham[i + 1];EigenValCurr = EigenVal[i];EigenValNext = EigenVal[i + 1];Perturbi = Perturbation[i];for(int j = 1; j <= bs; j++){HamCurrBlockj = HamCurrBlock[j];for(int k = 1; k <= bs_next; k++){Perturbik = Perturbi[k];perturb[k] = 0;for(int ii = 1; ii <= bs; ii++)if(Perturbik[ii])perturb[k] += HamCurrBlockj[ii];};for(int k = 1; k <= bs_next; k++){HamNextBlockk = HamNextBlock[k];intensity = 0;for(int ii = 1; ii <= bs_next; ii++)intensity += perturb[ii] * HamNextBlockk[ii];intensity = 0.25 * intensity * intensity;Intens[freqnum] = intensity;if(maxintens < intensity) maxintens = intensity;Freqs[freqnum] = 0.5 * (EigenValCurr[j] - EigenValNext[k]);freqnum++;};};};delete perturb;};IntensityThreshold *= maxintens;nFreqsFiltered = 0;for(int i = 1; i <= nFreqs; i++){intensity = Intens[i];if(intensity > IntensityThreshold){nFreqsFiltered++;FreqsFiltered[nFreqsFiltered]=Freqs[i];IntensFiltered[nFreqsFiltered]=intensity;};};135void HamTanspose(void){double temp = 0;int tmp = 0;double** Hami = NULL;for(int i = 1; i <= nBlocks; i++){tmp = BlockSize[i];if(tmp > 1){Hami = Ham[i];for(int j = 1; j <= tmp; j++)for(int k = j + 1; k <= tmp; k++){temp = Hami[j][k];Hami[j][k] = Hami[k][j];Hami[k][j] = temp;};};};};};136Импульсная последовательность эксперимента Soft-COSYдля спектрометра Bruker “AV-600”, TopSpin 2.1pl8#include <Avance.incl>"d0=3u"1 ze30m pl0:f1 pl0:f22 d13 p11:sp2:f2 ph1:rd0p11:sp2:f2 ph2:rp11:sp1:f1 ph3:rgo=2 ph31d1 mc #0 to 2 F1PH(ip1, id0)exitph1=0 0ph2=0 2ph3=0 2ph31=0 0;pl1 : f1 channel - power level for pulse (default);p0 : f1 channel - 20 to 90 degree high power pulse;p1 : f1 channel - 90 degree high power pulse;d0 : incremented delay (2D);d1 : relaxation delay; 1-5 * T1;in0: 1/(1 * SW) = 2 * DW;nd0: 1;NS: 4 * n;DS: 16;td1: number of experiments;FnMODE: States-TPPI, TPPI, States or QSEC137Импульсная последовательность гетероядерной J-спектроскопии с селективныминвертирующим импульсом для спектрометра Bruker “AV-600”, TopSpin 2.1pl8#include <Avance.incl>#include <Delay.incl>"p2=p1*2""d0=3u""d11=30m"1 ze2 d11 pl12:f23 d1 cpd2:f2(p1 ph1):f1 (2u do):f210u pl0:f2d0(center (p2 ph2):f1 (p3:sp1 ph3):f2 )d010u pl12:f2go=2 ph31 cpd2:f2d11 mc #0 to 2 F1QF(id0)d11 do:f2exitph1=0 0 0 0 1 1 1 1 2 2 2 2 3 3 3 3ph2=0 2 1 3 1 3 2 0 1 3 2 0 2 0 3 1ph3=0 2 1 3 1 3 2 0 1 3 2 0 2 0 3 1ph31=0 0 2 2 1 1 3 3;pl0 : 120dB;pl1 : f1 channel - power level for pulse (default);sp1 : f2 channel - power level for selective pulse;pl12: f2 channel - power level for CPD/BB decoupling;p1 : f1 channel - 90 degree high power pulse;p2 : f1 channel - 180 degree high power pulse;p3 : f2 channel - 180 degree selective pulse;d0 : incremented delay (2D)[3 usec];d1 : relaxation delay; 1-5 * T1;d11: delay for disk I/O[30 msec];in0: 1/(3.2 * J(max));nd0: 2;NS: 4 * n;DS: 16;td1: number of experiments;FnMODE: QF;cpd2: decoupling according to sequence defined by cpdprg2;pcpd2: f2 channel - 90 degree pulse for decoupling sequence1388.