Пример #1
0
def main():
    #list = [0,1,2,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,39,40,41,42,43,44,45,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,84,85,86,87,88,89,90,92,93,94,96,97,98,99,100,101,102,103,104,105,106,108,109,110,111,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,137,138,139,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,258,259,261,262,263,264,265,266,267,268,269,270,271,272,273,274,275,276,278,280,281,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,344,345,346,347,348,349,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,370,371,372,373,374,375,377,378,379,380,381,382,383,384,385,386,387,388,389,390,391,392,393,394,395,396,397,398,399,400,401,402,403,404,405,406,407,408,409,410,411,412,413,414,415,416,417,418,419,420,421,422,423,424,425,426,427,429,430,431,432,433,434,435,436,437,438,439,440,441,442,443,444,445,446,447,448,449,450,451,452,453,454,455,456,457,458,459,460,461,462,463,464,465,466,467,468,469,470,471,472,473,474,475,476,477,478,479,480,481,482,484,485,486,487,488,489,490,491,492,493,494,495,496,497,498,499,500,501,502,503,504,505,506,508,509,510,511,512,513,514,515,516,517,518,519,520,521,523,524,526,528,529,530,531,532,534,535,536,537,538,539,540,541,542,543,544,545,546,547,548,549,550,551,552,553,554,555,556,557,558,559,560,561,562,563,564,565,566,567,568,569,570,571,572,573,574,575,576,577,578,579,580,581,582,583,584,585,586,587,588,589,590,592,593,594,596,597,598,599,600,601,603,604,605,606,607,608,609,610,611,612,613,614,615,616,617,618,619,620,621,622,623,624,625,626,627,628,629,630,631,632,633,634,635,636,637,638,639,640,641,642,643,644,646,647,648,649,650,651,653,654,655,656,657,658,659,660,661,662,663,664,665,666,667,668,669,670,671,672,673,674,675,676,677,678,679,680,681,682,683,684,685,686,687,688,689,690,691,692,693,694,695,696,697,698,699,700,701,702,703,704,705,706,707,708,709,710,711,712,713,714,715,716,717,718,719,720,721,722,723,724,725,726,727,728,729,730,731,732,733,734,736,737,738,739,740,741,742,743,744,745,746,747,748,749,750,751,752,753,754,755,756,757,758,759,761,762,763,764,765,766,767,768,769,770,772,773,774,775,776,778,779,781,783,784,785,786,787,788,789,790,791,792,793,794,795,796,797,798,799,800,801,802,803,804,805,806,807,808,809,810,811,812,813,814,815,816,817,818,819,820,821,822,823,824,825,826,827,828,829,830,831,832,833,834,835,836,837,838,839,840,841,842,843,844,845,846,847,848,849,850,851,852,853,854,855,856,857,858,859,860,861,862,863,864,865,866,867,870,871,872,873,874,875,876,877,878,879,880,881,882,883,884,885,886,887,888,889,890,891,892,893,895,896,897,898,899,900,901,902,903,904,905,906,907,909,910,911,912,913,914,915,916,917,918,919,920,921,922,923,924,925,926,927,928,929,930,931,933,934,935,936,937,938,939,940,941,942,943,944,946,947,948,949,950,951,952,953,954,955,956,957,958,959,960,961,963,964,965,966,967,968,969,970,972,973,974,975,976,977,978,979,980,981,982,983,984,985,986,987,988,989,990,991,992,993,994,995,996,997,998,999,1000,1001,1002,1003,1004,1005,1006,1007,1008,1009,1010,1011,1012,1013,1014,1015,1016,1017,1018,1019,1020,1021,1022,1023,1024,1025,1026,1027,1028,1030,1031,1032,1033,1034,1035,1036,1037,1038,1039,1040,1041,1042,1043,1044,1046,1047,1048,1049,1050,1051,1052,1053,1054,1055,1056,1057,1058,1059,1060,1061,1062,1063,1064,1065,1066,1067,1068,1070,1071,1072,1073,1074,1075,1076,1077,1078,1080,1081,1082,1083,1084,1085,1086,1087,1088,1089,1090,1091,1092,1093,1094,1095,1097,1098,1099,1100,1101,1102,1103,1104,1105,1106,1107,1108,1110,1111,1113,1114,1115,1116,1117,1118,1119,1120,1121,1122,1123,1124,1125,1127,1128,1129,1130,1131,1132,1133,1134,1135,1136,1137,1138,1139,1140,1141,1142,1143,1144,1145,1146,1147,1148,1149,1150,1151,1152,1153,1154,1155,1156,1157,1158,1159,1160,1161,1162,1163,1164,1165,1166,1167,1168,1169,1170,1171,1172,1173,1174,1175,1176,1177,1178,1179,1180,1181,1182,1183,1184,1185,1186,1187,1188,1189,1190,1191,1192,1193,1194,1195,1196,1197,1198,1199,1200,1201,1202,1203,1204,1205,1206,1207,1208,1209,1210,1211,1212,1213,1214,1215,1216,1217,1218,1219,1220,1221,1222,1223,1224,1225,1226,1227,1228,1229,1230,1231,1232,1233,1234,1235,1236,1237,1238,1239,1240,1241,1242,1243,1244,1245,1246,1247,1248,1249,1250,1251,1252,1253,1254,1255,1256,1257,1258,1259,1260,1261,1262,1263,1264,1265,1266,1267,1268,1269,1270,1271,1272,1273,1274,1275,1276,1278,1279,1280,1281,1282,1283,1284,1285,1286,1287,1288,1289,1290,1291,1292,1293,1294,1295,1296,1297,1298,1299,1300,1301,1302,1303,1304,1305,1307,1308,1310,1311,1312,1313,1314,1315,1316,1317,1318,1319,1320,1321,1322,1324,1325,1326,1327,1328,1329,1330,1331,1332,1333,1334,1335,1336,1337,1338,1339,1340,1341,1342,1343,1344,1345,1346,1347,1348,1349,1350,1352,1353,1354,1355,1356,1357,1358,1359,1360,1361,1362,1363,1364,1365,1366,1367,1368,1369,1370,1371,1372,1373,1374,1375,1376,1377,1378,1379,1380,1381,1382,1383,1384,1385,1386,1387,1388,1389,1390,1391,1392,1393,1394,1395,1396,1397,1398,1399,1400,1401,1403,1404,1405,1406,1407,1408,1409,1410,1411,1412,1413,1414,1415,1417,1418,1419,1420,1421,1423,1424,1425]
    list = [0,1,2,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,39,40,41,42,43,44,45,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,84,85,86,87,88,89,92,93,94,96,97,98,99,100,101,102,103,104,105,106,108,109,110,111,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,137,138,139,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,258,259,261,262,263,264,265,266,267,268,269,270,271,272,273,274,275,276,278,280,281,282,283,284,285,286,287,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,344,346,347,348,349,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,370,371,372,373,374,375,377,378,379,380,381,382,384,385,386,387,388,389,390,391,392,393,394,395,396,397,398,399,400,401,402,403,404,405,406,407,408,409,410,411,413,414,415,416,417,418,419,420,421,422,423,424,425,426,429,430,431,432,433,434,435,436,437,438,439,440,441,442,443,444,445,446,447,448,449,450,451,452,453,454,455,456,457,458,459,460,461,462,463,464,465,466,467,468,469,470,471,472,473,474,475,477,478,479,480,481,482,484,485,486,487,488,489,490,491,492,493,494,495,496,497,498,499,500,501,502,503,504,505,506,508,509,510,511,512,513,514,515,516,517,518,519,520,521,523,524,526,527,528,529,530,532,534,535,536,537,538,540,541,542,543,544,545,546,547,548,549,551,552,553,554,555,556,557,558,559,560,561,562,563,564,565,566,567,568,569,570,571,572,573,574,575,576,577,578,579,580,581,582,583,584,585,586,587,588,589,590,592,593,594,596,597,598,599,600,601,603,604,605,606,607,608,609,610,611,612,613,614,615,616,617,618,619,620,621,622,623,624,625,626,627,628,629,630,631,632,633,634,635,636,637,638,639,640,641,642,643,644,646,647,648,649,650,651,653,654,655,656,657,658,659,660,661,662,663,664,665,666,667,668,669,671,672,673,674,675,676,677,678,679,680,681,682,683,684,685,686,687,688,689,690,691,692,693,694,695,696,697,698,699,700,702,703,704,705,706,707,708,709,710,711,712,713,714,715,716,717,718,719,720,721,722,723,724,725,726,727,728,729,730,731,732,733,734,736,737,738,739,740,741,742,743,744,745,746,747,748,749,750,751,752,753,754,755,756,757,758,759,761,762,763,764,765,766,767,768,769,770,772,773,774,775,776,778,779,781,783,784,785,786,787,788,789,790,791,792,793,794,795,796,797,798,799,800,801,802,803,804,805,806,807,808,809,810,811,812,813,814,815,816,817,818,819,820,821,822,823,824,825,826,827,828,829,830,831,832,833,834,835,836,837,838,839,840,841,842,843,844,845,846,847,848,849,850,851,852,853,854,855,856,857,858,859,860,861,863,864,865,866,867,870,871,872,873,874,875,876,877,878,879,880,881,882,883,884,885,886,887,888,889,890,891,892,893,895,896,897,898,899,900,901,902,903,904,905,906,907,909,910,911,912,913,914,915,916,917,918,919,920,921,922,923,924,925,926,927,928,929,930,931,933,934,935,936,937,938,939,940,941,942,943,944,946,947,948,949,950,951,952,953,954,955,956,958,959,960,961,963,964,965,966,967,968,969,970,972,973,974,975,976,977,978,979,980,981,982,983,984,985,986,987,988,989,990,991,992,993,994,995,996,997,998,999,1000,1001,1002,1003,1004,1005,1007,1008,1009,1010,1011,1012,1013,1014,1015,1016,1018,1019,1021,1022,1023,1024,1025,1026,1027,1028,1030,1031,1032,1033,1034,1036,1037,1038,1039,1040,1041,1042,1043,1044,1046,1047,1048,1049,1050,1051,1052,1053,1054,1055,1056,1057,1058,1059,1060,1061,1062,1063,1064,1065,1066,1067,1068,1070,1071,1072,1073,1074,1075,1076,1077,1078,1080,1081,1082,1083,1084,1085,1086,1087,1088,1089,1090,1091,1092,1093,1094,1095,1096,1097,1098,1099,1100,1101,1102,1103,1104,1105,1106,1107,1108,1110,1111,1113,1114,1115,1116,1117,1118,1119,1120,1121,1122,1123,1124,1125,1127,1129,1130,1131,1132,1133,1134,1135,1136,1137,1138,1139,1140,1141,1142,1143,1144,1145,1146,1147,1148,1149,1150,1151,1152,1153,1154,1155,1156,1157,1158,1159,1161,1162,1163,1164,1165,1166,1167,1168,1169,1170,1171,1172,1173,1174,1175,1176,1177,1178,1180,1181,1182,1183,1184,1185,1186,1187,1188,1189,1190,1191,1192,1193,1194,1195,1196,1197,1198,1199,1200,1201,1202,1203,1204,1205,1206,1207,1208,1209,1210,1211,1212,1213,1214,1215,1216,1217,1218,1219,1220,1221,1222,1223,1224,1225,1226,1227,1228,1229,1230,1231,1232,1233,1234,1235,1236,1237,1238,1239,1240,1241,1242,1243,1244,1245,1246,1247,1248,1249,1250,1251,1252,1253,1254,1255,1256,1257,1258,1259,1260,1261,1262,1263,1264,1265,1266,1267,1269,1270,1271,1272,1273,1274,1275,1276,1278,1279,1280,1281,1282,1283,1284,1285,1286,1287,1288,1289,1290,1291,1292,1293,1294,1295,1296,1297,1298,1299,1300,1301,1302,1303,1304,1305,1307,1308,1310,1311,1312,1313,1314,1315,1316,1317,1318,1319,1320,1321,1322,1324,1325,1326,1327,1328,1329,1330,1331,1332,1333,1334,1335,1336,1337,1338,1339,1340,1341,1342,1343,1344,1345,1346,1347,1348,1349,1350,1352,1353,1354,1355,1356,1357,1359,1360,1361,1362,1363,1364,1365,1366,1367,1368,1369,1370,1371,1372,1373,1374,1375,1376,1377,1378,1379,1380,1381,1382,1383,1384,1385,1386,1387,1388,1389,1390,1391,1392,1393,1394,1395,1396,1397,1398,1399,1400,1401,1403,1404,1405,1406,1407,1408,1409,1410,1411,1412,1413,1414,1415,1417,1418,1419,1420,1421,1423,1424,1425]
    #list = [x-1 for x in list if x > 277]
    list1 = []
    for i in list:
        if i >= 277:
            list1.append(i-1)
        else:
            list1.append(i)
    print(list1)
    list2 = range(0,1426)
    list3 = [x for x in list2 if x not in list1]
    print(list3)

    modelfile = sys.argv[1]
    m = Model(modelfile)

    cluster = [atom for atom in m.atoms if atom.id not in list1]
    #ids = [atom.id for atom in m.atoms if atom.id not in list]
    for atom in cluster:
        print(atom)

    cm = Model("yellow ico cluster in jwh's t3 model", m.lx, m.ly, m.lz, cluster)
    cm.write_cif("jwh_ico_cluster.cif")
def save_vp_cluster_with_index(m,index):
    """ Index should be a 4-list, e.g. [0,0,12,0].
    This function goes thru the model and finds all
    atoms with index "index" and saves that atom's
    VP as a new model, with name "temp{atom.id}.cif """
    for atom in m.atoms:
        if(atom.vp.index[0:4] == index):
            temp_model = Model("VP with index {0}".format(index), m.lx, m.ly, m.lz, atom.neighs+[atom])
            temp_model.write_cif("temp{0}.cif".format(atom.id))
            print("Saved VP cluster to modelfile temp{0}.cif".format(atom.id))
def main():
    modelfile = sys.argv[1]
    m = Model(modelfile)
    #(93, 440, 80, 17, 0.1121997376282069, 2.9919930034188509, 0.63579851322650582)
    #ra = calc_rot_array(0.1121997376282069, 2.9919930034188509, 0.63579851322650582)
    #(87, 440, 80, 28, 0.1121997376282069, 2.9919930034188509, 1.0471975511965979)
    ra = calc_rot_array(0.1121997376282069, 2.9919930034188509, 1.0471975511965979)
    rot_normal_model(m,ra)
    m.write_cif('found_rot_3.cif')
    #m.write_our_xyz('found_rot_1.xyz')
    #(93, 440, 80, 59, 0.1121997376282069, 2.9919930034188509, 2.2065948400214026)
    #m = Model(modelfile)
    #ra = calc_rot_array(0.1121997376282069, 2.9919930034188509, 2.2065948400214026)
    #rot_normal_model(m,ra)
    #m.write_cif('found_rot_2.xyz')
    #m.write_our_xyz('found_rot_2.xyz')


    return
    modelfile = sys.argv[1]
    m = fastModel(modelfile)
    for i in range(0,m.natoms):
        m.atoms[i][2] = 0.0

    deltaDist = 0.3
    numangles = 84

    alpha = np.arange(0.0,np.pi,np.pi/numangles)
    beta  = np.arange(0.0,np.pi,np.pi/numangles)
    gamma = np.arange(0.0,np.pi,np.pi/numangles)

    numdone = 0
    results = []
    for i,a in enumerate(alpha):
        print("{0}% done".format(100*i/float(numangles)))
        for j,b in enumerate(beta):
            for k,g in enumerate(gamma):
                mrot = fastModel(modelfile)
                ra = calc_rot_array(a,b,g)
                rot(mrot,ra)
                #mrot.write_cif("{0}{1}{2}.cif".format(i,j,k))
                count = 0
                for i in range(0,mrot.natoms):
                    dists = dist_2d_arry(mrot.atoms[i+1:],[mrot.atoms[i]],np.array([mrot.lx,mrot.ly,mrot.lz]))
                    for d in dists:
                        if(d < deltaDist): count += 1
                results.append( (count,i,j,k,a,b,g) )
                numdone += 1
                print("finished a model... {0} {1}".format(numdone,count))

    results.sort(key=lambda x:x[0])
    pprint(results)
Пример #4
0
def main():
    modelfile = sys.argv[1]
    outfilebase = sys.argv[2]
    m = Model(modelfile)

    # Below is the identity rotation array.
    #rot_arr = [1,0,0,0,1,0,0,0,1]

    # Below is the correct rotation matrix for JWH t3 icofrac to get it into the orientation in his PRL paper.
    #rot_arr = [-0.031777, 0.998843, 0.036102, 0.986602, 0.025563, 0.161133, 0.160023, 0.040739, -0.986272]

    # Below is a (the?) rotation matrix for JWH t1 icofrac.
    #rot_arr = [ 0.954646, -0.233932, 0.184194, 0.280650, 0.913581, -0.294287, -0.099433, 0.332633, 0.937800 ]

    # Below is a (the?) rotation matrix of Pei's t1 that gives some planes. Oriented for a specific plane ~.
    #rot_arr = [ -0.977103, -0.123352, -0.173361, -0.130450, 0.990997, 0.030118, 0.168085, 0.052043, -0.984398 ]

    # Below is a (the?) rotation matrix of Pei's t2 that gives some planes. Oriented for a specific plane ~.
    #rot_arr = [ 0.985478, -0.010230, -0.169493, 0.009247, 0.999936, -0.006586, 0.169549, 0.004923, 0.985509]

    # Below is a (the?) rotation matrix of Pei's t3 that gives some planes. Oriented for a specific plane ~.
    #rot_arr = [0.981624,-0.002765,-0.190808, -0.003436,0.999477,-0.032163, 0.190797,0.032228,0.981100]

    # Below is a rotation matrix of Pei's Zr50 t3 that gives some planes. Oriented for a specific plane ~.
    #rot_arr = [0.983910,-0.035278,-0.175147,0.048246,0.996356,0.070340,0.172028,-0.077659,0.982026]

    # Below is a rotation matrix of Pei's Zr50 t3, cluster 0 from 'Crystal-like' with an alternate plane pattern.
    #rot_arr = [-0.078966,-0.539181,0.838479,-0.486443,0.755011,0.439695,-0.870137,-0.373151,-0.321901]
    #rot_arr = [-0.550168, -0.592703, -0.588233, -0.675963, 0.729699, -0.103023, 0.490295, 0.340944, -0.802102] # a second attempt
    #rot_arr = [ -0.102056, 0.795154, -0.597758, 0.867018, 0.365702, 0.338439, 0.487712, -0.483728, -0.726735] # eh
    #rot_arr = [ -0.485998, 0.815787, 0.313525, -0.151211, -0.431820, 0.889195, 0.860779, 0.384739, 0.333220]
    #rot_arr = [ -0.508856, -0.631880, -0.584631, -0.710228, 0.691926, -0.129672, 0.486458, 0.349237, -0.800870]

    # Below is a rotation matrix of Pei's Zr50 t3, all clusters, with one promising spot. Mostly noise probably.
    #rot_arr = [0.563829, 0.290821, -0.772995, -0.641563, -0.435169, -0.631684, -0.520090, 0.852086, -0.058781]
    #rot_arr = [-0.832982, -0.489634, -0.257683, -0.212007, -0.147731, 0.966038, -0.511072, 0.859322, 0.019252]
    #rot_arr = [ 0.494247,  0.236924,  -0.836413, 0.704623,  0.454325,  0.545064, 0.509142,  -0.858752,  0.057607]

    #rot_arr = [0.235445, 0.089792, 0.967731, -0.967993, 0.110713, 0.225236, -0.086917, -0.989788, 0.112985]
    #rot_arr = [0.216234, -0.047608, 0.975180,-0.955161, 0.196601, 0.221394,-0.202262, -0.979327, -0.002961]
    # BELOW: t3 - 0 rot
    rot_arr = [ 0.984104, 0.007169, -0.177450, 0.008311, 0.996231, 0.086340, 0.177400, -0.086442, 0.980335] # Pei t3 0 rot
    #rot_arr = [ 0.983102, -0.003388, -0.183028, 0.003365, 0.999994, -0.000437, 0.183028, -0.000187, 0.983108]
    
    # Pei's t2
    #rot_arr = [ 0.985568, 0.001345, -0.169276, 0.000677, 0.999929, 0.011883, 0.169280, -0.011826, 0.985497] # 0rot
    #rot_arr = [ -0.406881, -0.461953, -0.788065, -0.548766, 0.813295, -0.193412, 0.730277, 0.353768, -0.584418] #1rot
    #rot_arr =[ -0.466130, 0.820964, 0.329760, -0.171769, -0.449615, 0.876551, 0.867881, 0.351944, 0.350596] # 2rot
    #rot_arr = [ -0.303913, -0.572611, -0.761415, -0.608626, 0.731562, -0.307232, 0.732947, 0.370045, -0.570838] # 3rot
    #rot_arr = [ -0.653632, -0.441386, -0.614771, -0.749000, 0.260854, 0.609061, -0.108465,0.858565, -0.501100] # 4rot

    # Pei's t1
    #rot_arr =  [0.985435, 0.000143, -0.170053, 0.003167, 0.999811, 0.019194, 0.170023, -0.019453, 0.985248] #0rot
    #rot_arr = [ -0.181186, -0.653769, -0.734682, -0.632103, 0.649717, -0.422273, 0.753404, 0.387885, -0.530968] #1rot
    #rot_arr = [ -0.408942, 0.873456, 0.264275, -0.252622, -0.386635, 0.886959, 0.876897, 0.295953, 0.378765] #2rot
    #rot_arr = [ -0.243749, -0.741828, -0.624722, -0.637231, 0.608094, -0.473453, 0.731111, 0.282689, -0.620938] #3rot

    # JWH's t1
    #rot_arr = [ 0.915013, -0.004459, -0.403401, -0.010527, 0.999335, -0.034924, 0.403288, 0.036202, 0.914357]
    # JWH's t2
    #rot_arr = [ 0.983576, 0.009003, -0.180268, 0.010862, 0.993992, 0.108912, 0.180165, -0.109081, 0.977569]
    #JWH's t3
    #rot_arr = [ 0.985667, 0.014122, 0.168112, -0.020755, 0.999071, 0.037763, -0.167422, -0.040711, 0.985044]
    #JWH's t3 all.xtal cluster
    #rot_arr = [ 0.985237, 0.004144, 0.171146, -0.008192, 0.999703, 0.022952, -0.171000, -0.024015, 0.984978] 

    # 10k Zr50 model, rotated to see cluster in bottom right corner.
    #rot_arr = [ 0.985669, -0.008419, -0.168483, -0.000875, 0.998485, -0.055012, 0.168691, 0.054371, 0.984168]

    #rot_arr = [1,0,0,0,1,0,0,0,1]

    #kx = 0.3046888
    #ky = -0.0234376
    #kz = 0.2578136
    #kmag = sqrt(kx**2+ky**2+kz**2)
    #print(kx,ky,kz,kmag)
    #rot_arr = calc_rot_array(acos(kx/kmag),acos(ky/kmag),acos(kz/kmag))
    #print(rot_arr)

    npra = np.asarray(rot_arr)
    rot(m,npra)

    # Write cif file to screen
    m.write_cif(outfilebase+'.cif')
    m.write_our_xyz(outfilebase+'.xyz')
Пример #5
0
def main():
    # sys.argv[1] should be the modelfile in the xyz format
    # sys.argv[2] should be the cutoff desired
    modelfile = sys.argv[1]
    cutoff = float(sys.argv[2])
    ag = AtomGraph(modelfile, cutoff)
    clusters = ag.get_clusters("Icosahedra-like", "Mixed")

    ## Let's just get the biggest one for now.
    ## Comment this section to get them all.
    # l = 0
    # for cluster in clusters:
    #    if(len(cluster) > l):
    #        l = len(cluster)
    #        i = clusters.index(cluster)
    # clusters = [clusters[i]]

    orig_clusters = clusters[:]
    # Print orig clusters
    j = 0
    for i, cluster in enumerate(clusters):
        print("Orig cluster {0} contains {1} atoms.".format(i, len(cluster)))
        # for atom in cluster:
        #    if atom not in orig_clusters[i]:
        #        #print("{0} {1}".format(atom.vesta(),atom.vp))
        #        print(atom.vesta())
        #        j += 1
        #    else:
        #        print(atom.vesta())
        # Save cluster files
        cluster_model = Model(
            "Orig cluster {0} contains {1} atoms.".format(i, len(cluster)),
            ag.model.lx,
            ag.model.ly,
            ag.model.lz,
            cluster,
        )
        cluster_model.write_cif("cluster{0}.cif".format(i))

    # Expand the clusters
    for i, cluster in enumerate(clusters):
        new_clust = [
            atom for atom in ag.model.atoms if atom in clusters[i] or (nnnic(atom, ag.model, clusters[i]) >= 4)
        ]
        new_clust = list(set(new_clust))
        clusters[i] = new_clust[:]

    j = 0
    for i, cluster in enumerate(clusters):
        print("New, bigger cluster {0} contains {1} atoms.".format(i, len(cluster)))
        # for atom in cluster:
        #    if atom not in orig_clusters[i]:
        #        #print("{0} {1}".format(atom.vesta(),atom.vp))
        #        print(atom.vesta())
        #        j += 1
        #    else:
        #        print(atom.vesta())
        # Save cluster files
        cluster_model = Model(
            "New, bigger cluster {0} contains {1} atoms.".format(i, len(cluster)),
            ag.model.lx,
            ag.model.ly,
            ag.model.lz,
            cluster,
        )
        cluster_model.write_cif("cluster{0}.big.cif".format(i))
Пример #6
0
def main():
    modelfile = sys.argv[1]

    m = Model(modelfile)
    m.write_cif()
Пример #7
0
def main():
    # sys.argv[1] should be the modelfile in the xyz format
    # sys.argv[2] should be the cutoff desired
    modelfile = sys.argv[1]
    cutoff = float(sys.argv[2])
    ag = AtomGraph(modelfile,cutoff)
    model = Model(modelfile)
    model.generate_neighbors(cutoff)
    #submodelfile = sys.argv[3]

    #mixedmodel = Model('Mixed atoms',model.lx,model.ly,model.lz, [atom for atom in ag.model.atoms if atom.vp.type == 'Mixed'])
    #icolikemodel = Model('Ico-like atoms',model.lx,model.ly,model.lz, [atom for atom in ag.model.atoms if(atom.vp.type == 'Icosahedra-like' or atom.vp.type == 'Full-icosahedra')])
    #fullicomodel = Model('Full-icosahedra atoms',model.lx,model.ly,model.lz, [atom for atom in ag.model.atoms if atom.vp.type == 'Full-icosahedra'])
    #xtalmodel = Model('Xtal-like atoms',model.lx,model.ly,model.lz, [atom for atom in ag.model.atoms if atom.vp.type == 'Crystal-like'])
    #undefmodel = Model('Undef atoms',model.lx,model.ly,model.lz, [atom for atom in ag.model.atoms if atom.vp.type == 'Undef'])
    ##mixedmodel.write_cif('mixed.cif')
    ##mixedmodel.write_our_xyz('mixed.xyz')
    ##icolikemodel.write_cif('icolike.cif')
    ##icolikemodel.write_our_xyz('icolike.xyz')
    ##fullicomodel.write_cif('fullico.cif')
    ##fullicomodel.write_our_xyz('fullico.xyz')
    ##xtalmodel.write_cif('xtal.cif')
    ##xtalmodel.write_our_xyz('xtal.xyz')
    ##undefmodel.write_cif('undef.cif')
    ##undefmodel.write_our_xyz('undef.xyz')
    #icomixedmodel = Model('ico+mix atoms',model.lx,model.ly,model.lz, mixedmodel.atoms + icolikemodel.atoms)
    ##mixedmodel.write_cif('icomixed.cif')
    ##mixedmodel.write_our_xyz('icomixed.xyz')
    #vpcoloredmodel = Model('vp colored atoms',model.lx,model.ly,model.lz, ag.model.atoms)
    #for atom in vpcoloredmodel.atoms:
    #    if(atom.vp.type == 'Full-icosahedra'):
    #        atom.z = 1
    #    elif(atom.vp.type == 'Icosahedra-like'):
    #        atom.z = 2
    #    elif(atom.vp.type == 'Mixed'):
    #        atom.z = 3
    #    elif(atom.vp.type == 'Crystal-like'):
    #        atom.z = 4
    #    elif(atom.vp.type == 'Undef'):
    #        atom.z = 5
    ##vpcoloredmodel.write_cif('vpcolored.cif')
    ##vpcoloredmodel.write_our_xyz('vpcolored.xyz')
    #subvpcoloredmodel = Model(submodelfile)
    #for atom in subvpcoloredmodel.atoms:
    #    atom.z = vpcoloredmodel.atoms[ag.model.atoms.index(atom)].z
    #subvpcoloredmodel.write_cif('subvpcolored.cif')
    #subvpcoloredmodel.write_our_xyz('subvpcolored.xyz')
    #return

    golden = False

    #cluster_prefix = 'ico.t3.'
    #cluster_types = 'Icosahedra-like', 'Full-icosahedra' # Need this for final/further analysis

    #cluster_prefix = 'fi.t3.'
    #cluster_types = ['Full-icosahedra'] # Need this for final/further analysis

    cluster_prefix = 'xtal.t3.'
    cluster_types = 'Crystal-like' # Need this for final/further analysis

    #cluster_prefix = 'mix.t3'
    #cluster_types = ['Mixed'] # Need this for final/further analysis

    #cluster_prefix = 'undef.t3'
    #cluster_types = ['Undef'] # Need this for final/further analysis

    # Decide what time of clustering you want to do
    #clusters = ag.get_clusters_with_n_numneighs(cutoff,5,cluster_types) #Vertex
    #clusters = ag.get_vertex_sharing_clusters(cutoff,cluster_types) #Vertex
    #clusters = ag.get_edge_sharing_clusters(cutoff,cluster_types) #Edge
    #clusters = ag.get_face_sharing_clusters(cutoff,cluster_types) #Face
    #clusters = ag.get_interpenetrating_atoms(cutoff,cluster_types) #Interpenetrating
    #clusters = ag.get_interpenetrating_clusters_with_neighs(cutoff,cluster_types) #Interpenetrating+neighs
    #clusters = ag.get_connected_clusters_with_neighs(cutoff, cluster_types) #Connected (vertex) + neighs
    v,e,f,i = ag.vefi_sharing(cluster_types)
    print("V: {0}  E: {1}  F: {2}  I: {3}".format(int(v),int(e),int(f),int(i)))
    return

    orig_clusters = clusters[:]
    # Print orig clusters
    j = 0
    for i,cluster in enumerate(clusters):
        print("Orig cluster {0} contains {1} atoms.".format(i,len(cluster)))
        if(golden):
            for atom in cluster:
                if(atom.vp.type in cluster_types):
                    atom.z = 0
        # Save cluster files
        cluster_model = Model("Orig cluster {0} contains {1} atoms.".format(i,len(cluster)),model.lx, model.ly, model.lz, cluster)
        cluster_model.write_cif('{1}cluster{0}.cif'.format(i,cluster_prefix))
        cluster_model.write_our_xyz('{1}cluster{0}.xyz'.format(i,cluster_prefix))

    allclusters = []
    for cluster in clusters:
        for atom in cluster:
            if(atom not in allclusters):
                allclusters.append(atom)
                #if(atom.vp.type in cluster_types): print('  {0}\t{1}'.format(atom,atom.vp.type))
    allclusters = Model("All clusters.",model.lx, model.ly, model.lz, allclusters)
    allclusters.write_cif('{0}allclusters.cif'.format(cluster_prefix))
    allclusters.write_our_xyz('{0}allclusters.xyz'.format(cluster_prefix))
    print("{0}allclusters.cif and {0}allclusters.xyz contain {1} atoms.".format(cluster_prefix, allclusters.natoms))

    if(not golden):
        x_cluster = []
        for i,atom in enumerate(model.atoms):
            if atom not in allclusters.atoms:
                x_cluster.append(atom)
        x_cluster = Model("Opposite cluster of {0}".format(cluster_prefix),model.lx, model.ly, model.lz, x_cluster)
        x_cluster.write_cif('{0}opposite.cif'.format(cluster_prefix))
        x_cluster.write_our_xyz('{0}opposite.xyz'.format(cluster_prefix))
        print('{0}opposite.cif and {0}opposite.xyz contain {1} atoms.'.format(cluster_prefix, x_cluster.natoms))
    
    if(False): # Further analysis
        cn = 0.0
        for atom in model.atoms:
            cn += atom.cn
        cn /= model.natoms

        vpcn = 0.0
        count = 0
        for atom in ag.model.atoms:
            if( atom.vp.type in cluster_types ):
                vpcn += atom.cn
                count += 1
        vpcn /= count

        natomsinVPclusters = allclusters.natoms # Number of atoms in VP clusters
        nVPatoms = count # Number of VP atoms
        numsepVPatoms = nVPatoms * vpcn # Number of atoms in VP clusters if all clusters were separated
        maxnumatoms = model.natoms # Max number of atoms in VP clusters if all clusters were separated but still within the model size

        print('Average CN is {0}'.format(cn))
        print('Average CN of VP atoms is {0}'.format(vpcn))
        print('# atoms in all clusters: {0}. # VP atoms * vpcn: {1}. # VP atoms: {2}'.format(natomsinVPclusters,numsepVPatoms,nVPatoms))
        print('~ Number of VP that can fit in the model: {0}'.format(maxnumatoms/vpcn))
        print('Ratio of: (# atoms involved in VP clusters)/(# atoms involved in VP clusters if all clusters were completely separated):                          {0}%  <--- Therefore {1}% sharing.'.format(round(float(natomsinVPclusters)/(numsepVPatoms)*100.0,3),100.0-round(float(natomsinVPclusters)/(numsepVPatoms)*100.0,3)))
        print('Ratio of: (# atoms involved in VP clusters)/(# atoms involved in VP clusters if all clusters were separated as much as possible within the model): {0}%  <--- Therefore {1}% sharing.'.format(round(float(natomsinVPclusters)/min(numsepVPatoms,maxnumatoms)*100.0,3),100.0-round(float(natomsinVPclusters)/min(numsepVPatoms,maxnumatoms)*100.0,3) if numsepVPatoms < maxnumatoms else round(float(natomsinVPclusters)/min(numsepVPatoms,maxnumatoms)*100.0,3)))

        vor_instance = Vor()
        vor_instance.runall(modelfile,cutoff)
        index = vor_instance.get_indexes()
        vor_instance.set_atom_vp_indexes(model)
        vp_dict = categorize_vor.load_param_file('/home/jjmaldonis/model_analysis/scripts/categorize_parameters_iso.txt')
        atom_dict = categorize_vor.generate_atom_dict(index,vp_dict)
        categorize_vor.set_atom_vp_types(model,vp_dict)
        # Count the number of common neighbors in each of the VP
        vp_atoms = []
        for atom in model.atoms:
            if(atom.vp.type in cluster_types):
                vp_atoms.append(atom)
        common_neighs = 0.0
        atom_pairs = []
        for atomi in vp_atoms:
            for atomj in vp_atoms:
                if(atomi != atomj):
                    if(atomi in atomj.neighs and [atomi,atomj] not in atom_pairs and [atomj,atomi] not in atom_pairs):
                        common_neighs += 1
                        atom_pairs.append([atomi,atomj])
                    #if(atomj in atomi.neighs): common_neighs += 0.5
                    for n in atomi.neighs:
                        if(n in atomj.neighs and [n,atomj] not in atom_pairs and [atomj,n] not in atom_pairs):
                            common_neighs += 1
                            atom_pairs.append([n,atomj])
                    #for n in atomj.neighs:
                    #    if(n in atomi.neighs): common_neighs += 0.5
        # Now common_neighs is the number of shared atoms
        #print(common_neighs)
        print('Percent shared based on common neighsbors: {0}'.format(100.0*common_neighs/natomsinVPclusters))