dockonsurf / modules / script_grandes_molecules+diss.sh @ f43a1b4c
Historique | Voir | Annoter | Télécharger (12,6 ko)
1 | 86112fec | Marti Aliod Carles | #!/bin/bash |
---|---|---|---|
2 | 86112fec | Marti Aliod Carles | |
3 | 86112fec | Marti Aliod Carles | ########################## |
4 | 86112fec | Marti Aliod Carles | #### Arguments input #### |
5 | 86112fec | Marti Aliod Carles | ########################## |
6 | 86112fec | Marti Aliod Carles | |
7 | 86112fec | Marti Aliod Carles | nom_de_la_molecule=$1 |
8 | 86112fec | Marti Aliod Carles | atom_nb=$2 |
9 | 86112fec | Marti Aliod Carles | nb_surf=$3 |
10 | 86112fec | Marti Aliod Carles | cutoff=$4 |
11 | 86112fec | Marti Aliod Carles | |
12 | 86112fec | Marti Aliod Carles | |
13 | 86112fec | Marti Aliod Carles | ############################################################# |
14 | 86112fec | Marti Aliod Carles | #### Creation of the working diretory and initialisation #### |
15 | 86112fec | Marti Aliod Carles | ############################################################# |
16 | 86112fec | Marti Aliod Carles | |
17 | 86112fec | Marti Aliod Carles | |
18 | 86112fec | Marti Aliod Carles | mol_dir=${MolOnSurf_results_path}/${nom_de_la_molecule} |
19 | 86112fec | Marti Aliod Carles | |
20 | 86112fec | Marti Aliod Carles | list_errors=() |
21 | 86112fec | Marti Aliod Carles | |
22 | 86112fec | Marti Aliod Carles | mkdir ${mol_dir}/analyse |
23 | 86112fec | Marti Aliod Carles | |
24 | 86112fec | Marti Aliod Carles | |
25 | 86112fec | Marti Aliod Carles | ############################################################### |
26 | 86112fec | Marti Aliod Carles | #### Extraction of structures needed from file *-pos-1.xyz #### |
27 | 86112fec | Marti Aliod Carles | ############################################################### |
28 | 86112fec | Marti Aliod Carles | |
29 | 86112fec | Marti Aliod Carles | |
30 | 86112fec | Marti Aliod Carles | num=0 |
31 | 86112fec | Marti Aliod Carles | |
32 | 86112fec | Marti Aliod Carles | for dir in ${mol_dir}/* ; do |
33 | 86112fec | Marti Aliod Carles | if [ ! -e $dir/*-pos-1.xyz ] |
34 | 86112fec | Marti Aliod Carles | then list_errors+=($dir) |
35 | 86112fec | Marti Aliod Carles | else |
36 | 86112fec | Marti Aliod Carles | name="$(echo $dir | awk -F/ '{print $NF}')" |
37 | 86112fec | Marti Aliod Carles | mkdir ${mol_dir}/analyse/${name}_$num |
38 | 86112fec | Marti Aliod Carles | |
39 | 86112fec | Marti Aliod Carles | |
40 | 86112fec | Marti Aliod Carles | ####################################### |
41 | 86112fec | Marti Aliod Carles | #### Get last geometry of mol+surf #### |
42 | 86112fec | Marti Aliod Carles | ####################################### |
43 | 86112fec | Marti Aliod Carles | |
44 | 86112fec | Marti Aliod Carles | |
45 | 86112fec | Marti Aliod Carles | n_line="$(grep -n "i =" ${dir}/*-pos-1.xyz | awk 'END{print}' | awk 'NF=1{print}' | awk 'sub(".$", "")')" |
46 | 86112fec | Marti Aliod Carles | n_line_1="$(expr $n_line - 1)" |
47 | 86112fec | Marti Aliod Carles | awk -v ligne="$n_line_1" 'NR>=ligne{print}' ${dir}/*-pos-1.xyz > ${mol_dir}/analyse/${name}_$num/last_geo.xyz |
48 | 86112fec | Marti Aliod Carles | |
49 | 86112fec | Marti Aliod Carles | |
50 | 86112fec | Marti Aliod Carles | ####################################################### |
51 | 86112fec | Marti Aliod Carles | #### Recenter the mol+surf on one atom without pbc #### |
52 | 86112fec | Marti Aliod Carles | ####################################################### |
53 | 86112fec | Marti Aliod Carles | |
54 | 86112fec | Marti Aliod Carles | |
55 | 86112fec | Marti Aliod Carles | ${DockOnSurf_path}/modules/recenter_only.py ${mol_dir}/analyse/${name}_$num ${atom_nb} |
56 | 86112fec | Marti Aliod Carles | recentered_temp_file=${mol_dir}/analyse/${name}_$num/recentered_only.xyz |
57 | 86112fec | Marti Aliod Carles | |
58 | 86112fec | Marti Aliod Carles | |
59 | 86112fec | Marti Aliod Carles | ##################################################### |
60 | 86112fec | Marti Aliod Carles | #### Get the molecule alone centered on one atom #### |
61 | 86112fec | Marti Aliod Carles | ##################################################### |
62 | 86112fec | Marti Aliod Carles | |
63 | 86112fec | Marti Aliod Carles | nb_surf2="$(expr ${nb_surf} + 2 )" |
64 | 86112fec | Marti Aliod Carles | nbligne="$(awk 'END{print NR}' ${recentered_temp_file})" |
65 | 86112fec | Marti Aliod Carles | for ((a=3; a<=nbligne; a++)) ; do |
66 | 86112fec | Marti Aliod Carles | z="$(awk '{print NR,$0}' ${recentered_temp_file}| awk 'NR == nligne {print}' nligne="$a" | awk '{print $1}')" |
67 | 86112fec | Marti Aliod Carles | if (( $(echo "$z > ${nb_surf2}" | bc -l) )) |
68 | 86112fec | Marti Aliod Carles | then awk 'NR == nligne {print}' nligne="$a" ${recentered_temp_file} >> ${mol_dir}/analyse/${name}_$num/temp_file.xyz |
69 | 86112fec | Marti Aliod Carles | fi |
70 | 86112fec | Marti Aliod Carles | done |
71 | 86112fec | Marti Aliod Carles | |
72 | 86112fec | Marti Aliod Carles | temp_file=${mol_dir}/analyse/${name}_$num/temp_file.xyz |
73 | 86112fec | Marti Aliod Carles | awk 'END{print NR}' ${temp_file} > ${mol_dir}/analyse/${name}_$num/molecule_seule.xyz |
74 | 86112fec | Marti Aliod Carles | mol_seule_file=${mol_dir}/analyse/${name}_$num/molecule_seule.xyz |
75 | 86112fec | Marti Aliod Carles | echo ' ' >> ${mol_seule_file} |
76 | 86112fec | Marti Aliod Carles | cat ${temp_file} >> ${mol_seule_file} |
77 | 86112fec | Marti Aliod Carles | rm ${temp_file} |
78 | 86112fec | Marti Aliod Carles | |
79 | 86112fec | Marti Aliod Carles | |
80 | 86112fec | Marti Aliod Carles | ############################################################## |
81 | 86112fec | Marti Aliod Carles | ### Apply pbc conditions to surface only in mol+surf file #### |
82 | 86112fec | Marti Aliod Carles | ############################################################## |
83 | 86112fec | Marti Aliod Carles | |
84 | 86112fec | Marti Aliod Carles | |
85 | 86112fec | Marti Aliod Carles | ${DockOnSurf_path}/modules/recenter_periodicity.py ${mol_dir}/analyse/${name}_$num ${atom_nb} |
86 | 86112fec | Marti Aliod Carles | recentered_periodicity_file=${mol_dir}/analyse/${name}_$num/recentered_periodicity.xyz |
87 | 86112fec | Marti Aliod Carles | |
88 | 86112fec | Marti Aliod Carles | for ((a=3; a<=nbligne; a++)) ; do |
89 | 86112fec | Marti Aliod Carles | z="$(awk '{print NR,$0}' ${recentered_temp_file}| awk 'NR == nligne {print}' nligne="$a" | awk '{print $1}')" |
90 | 86112fec | Marti Aliod Carles | if (( $(echo "$z <= ${nb_surf2}" | bc -l) )) |
91 | 86112fec | Marti Aliod Carles | then awk 'NR == nligne {print}' nligne="$a" ${recentered_periodicity_file} >> ${mol_dir}/analyse/${name}_$num/temp_file.xyz |
92 | 86112fec | Marti Aliod Carles | fi |
93 | 86112fec | Marti Aliod Carles | done |
94 | 86112fec | Marti Aliod Carles | |
95 | 86112fec | Marti Aliod Carles | awk 'NR <= 2{print}' ${recentered_periodicity_file} > ${mol_dir}/analyse/${name}_$num/recentered_pbc.xyz |
96 | 86112fec | Marti Aliod Carles | cat ${mol_dir}/analyse/${name}_$num/temp_file.xyz >> ${mol_dir}/analyse/${name}_$num/recentered_pbc.xyz |
97 | 86112fec | Marti Aliod Carles | awk 'NR > 2{print}' ${mol_seule_file} >> ${mol_dir}/analyse/${name}_$num/recentered_pbc.xyz |
98 | 86112fec | Marti Aliod Carles | |
99 | 86112fec | Marti Aliod Carles | rm ${mol_dir}/analyse/${name}_$num/temp_file.xyz |
100 | 86112fec | Marti Aliod Carles | rm ${recentered_periodicity_file} |
101 | 86112fec | Marti Aliod Carles | rm ${recentered_temp_file} |
102 | 86112fec | Marti Aliod Carles | |
103 | 86112fec | Marti Aliod Carles | |
104 | 86112fec | Marti Aliod Carles | num=$((num+1)) |
105 | 86112fec | Marti Aliod Carles | |
106 | 86112fec | Marti Aliod Carles | fi |
107 | 86112fec | Marti Aliod Carles | done |
108 | 86112fec | Marti Aliod Carles | |
109 | 86112fec | Marti Aliod Carles | echo "All structures files have been created" |
110 | 86112fec | Marti Aliod Carles | |
111 | 86112fec | Marti Aliod Carles | |
112 | 86112fec | Marti Aliod Carles | ################################################################################# |
113 | 86112fec | Marti Aliod Carles | #### RMSD calculation of molecules without surface to create the RMSD matrix #### |
114 | 86112fec | Marti Aliod Carles | ################################################################################# |
115 | 86112fec | Marti Aliod Carles | |
116 | 86112fec | Marti Aliod Carles | |
117 | 86112fec | Marti Aliod Carles | matrix_file=${mol_dir}/analyse/matrice_RMSD_mol_seule.txt |
118 | 86112fec | Marti Aliod Carles | |
119 | 86112fec | Marti Aliod Carles | touch ${matrix_file} |
120 | 86112fec | Marti Aliod Carles | |
121 | 86112fec | Marti Aliod Carles | for ((i=0; i<$num; i++)) ; do |
122 | 86112fec | Marti Aliod Carles | echo >> ${matrix_file} |
123 | 86112fec | Marti Aliod Carles | done |
124 | 86112fec | Marti Aliod Carles | |
125 | 86112fec | Marti Aliod Carles | for ((i=1; i<=$num; i++)) ; do |
126 | 86112fec | Marti Aliod Carles | for ((j=$i; j<=$num; j++)) ; do |
127 | 86112fec | Marti Aliod Carles | if (( $(echo "$i == $j" | bc -l) )) |
128 | 86112fec | Marti Aliod Carles | then |
129 | 86112fec | Marti Aliod Carles | add_to_line="$(awk -v ii="$i" 'NR==ii {print}' ${matrix_file})" |
130 | 86112fec | Marti Aliod Carles | add_to_line+=' 0' |
131 | 86112fec | Marti Aliod Carles | sed -i "${i}c $add_to_line" ${matrix_file} |
132 | 86112fec | Marti Aliod Carles | else |
133 | 86112fec | Marti Aliod Carles | num_i="$(expr $i - 1)" |
134 | 86112fec | Marti Aliod Carles | num_j="$(expr $j - 1)" |
135 | 86112fec | Marti Aliod Carles | RMSD_mol_seule_i_j="$(${DockOnSurf_path}/modules/calculate_rmsd --reorder ${mol_dir}/analyse/${nom_de_la_molecule}*_${num_i}/molecule_seule.xyz ${mol_dir}/analyse/${nom_de_la_molecule}*_${num_j}/molecule_seule.xyz)" |
136 | 86112fec | Marti Aliod Carles | add_to_i_line="$(awk -v ii="$i" 'NR==ii {print}' ${matrix_file})" |
137 | 86112fec | Marti Aliod Carles | add_to_i_line+=' -' |
138 | 86112fec | Marti Aliod Carles | add_to_i_line+=$RMSD_mol_seule_i_j |
139 | 86112fec | Marti Aliod Carles | sed -i "${i}c $add_to_i_line" ${matrix_file} |
140 | 86112fec | Marti Aliod Carles | add_to_j_line="$(awk -v jj="$j" 'NR==jj {print}' ${matrix_file})" |
141 | 86112fec | Marti Aliod Carles | add_to_j_line+=' -' |
142 | 86112fec | Marti Aliod Carles | add_to_j_line+=$RMSD_mol_seule_i_j |
143 | 86112fec | Marti Aliod Carles | sed -i "${j}c $add_to_j_line" ${matrix_file} |
144 | 86112fec | Marti Aliod Carles | fi |
145 | 86112fec | Marti Aliod Carles | done |
146 | 86112fec | Marti Aliod Carles | done |
147 | 86112fec | Marti Aliod Carles | |
148 | 86112fec | Marti Aliod Carles | echo "RMSD matrix for molecules without surface has been calculated" |
149 | 86112fec | Marti Aliod Carles | |
150 | 86112fec | Marti Aliod Carles | |
151 | 86112fec | Marti Aliod Carles | ############################################################### |
152 | 86112fec | Marti Aliod Carles | #### Clustering of the molecule structures without surface #### |
153 | 86112fec | Marti Aliod Carles | ############################################################### |
154 | 86112fec | Marti Aliod Carles | |
155 | 86112fec | Marti Aliod Carles | |
156 | 86112fec | Marti Aliod Carles | cluster_molecule_file=${mol_dir}/analyse/cluster_molecule.txt |
157 | 86112fec | Marti Aliod Carles | |
158 | 86112fec | Marti Aliod Carles | ${DockOnSurf_path}/modules/clustering.py ${matrix_file} > ${cluster_molecule_file} |
159 | 86112fec | Marti Aliod Carles | |
160 | 86112fec | Marti Aliod Carles | echo "Clustering of molecules has been done" |
161 | 86112fec | Marti Aliod Carles | |
162 | 86112fec | Marti Aliod Carles | |
163 | 86112fec | Marti Aliod Carles | ################################################################################### |
164 | 86112fec | Marti Aliod Carles | #### Separation of the clusters found for the molecule alone and re-clustering #### |
165 | 86112fec | Marti Aliod Carles | ################################################################################### |
166 | 86112fec | Marti Aliod Carles | |
167 | 86112fec | Marti Aliod Carles | |
168 | 86112fec | Marti Aliod Carles | nb_clusters="$(awk 'END{print NR}' ${cluster_molecule_file})" |
169 | 86112fec | Marti Aliod Carles | |
170 | 86112fec | Marti Aliod Carles | sed -i 's/\[/ /g' ${cluster_molecule_file} |
171 | 86112fec | Marti Aliod Carles | sed -i 's/\]/ /g' ${cluster_molecule_file} |
172 | 86112fec | Marti Aliod Carles | |
173 | 86112fec | Marti Aliod Carles | mkdir ${mol_dir}/analyse/cluster_centers_energy |
174 | 86112fec | Marti Aliod Carles | |
175 | 86112fec | Marti Aliod Carles | s=1 |
176 | 86112fec | Marti Aliod Carles | |
177 | 86112fec | Marti Aliod Carles | line_cluster_group="$(awk '{print NR,$0}' ${cluster_molecule_file} | grep "Cluster\ groups:" | awk '{print $1}')" |
178 | 86112fec | Marti Aliod Carles | line_first_cluster="$(expr ${line_cluster_group} + 1 )" |
179 | 86112fec | Marti Aliod Carles | |
180 | 86112fec | Marti Aliod Carles | for ((k=${line_first_cluster}; k<=${nb_clusters}; k++)) ; do |
181 | 86112fec | Marti Aliod Carles | |
182 | 86112fec | Marti Aliod Carles | |
183 | 86112fec | Marti Aliod Carles | ################################ |
184 | 86112fec | Marti Aliod Carles | #### Separation of clusters #### |
185 | 86112fec | Marti Aliod Carles | ################################ |
186 | 86112fec | Marti Aliod Carles | |
187 | 86112fec | Marti Aliod Carles | |
188 | 86112fec | Marti Aliod Carles | awk -v ligne="$k" 'NR==ligne{print}' ${cluster_molecule_file} > ${mol_dir}/analyse/array |
189 | 86112fec | Marti Aliod Carles | sed -i 's/^ *//' ${mol_dir}/analyse/array |
190 | 86112fec | Marti Aliod Carles | sed -i 's/ / /g' ${mol_dir}/analyse/array |
191 | 86112fec | Marti Aliod Carles | sed -i 's/ / /g' ${mol_dir}/analyse/array |
192 | 86112fec | Marti Aliod Carles | sed -i 's/ / /g' ${mol_dir}/analyse/array |
193 | 86112fec | Marti Aliod Carles | sed -i 's/ / /g' ${mol_dir}/analyse/array |
194 | 86112fec | Marti Aliod Carles | readarray -d " " cluster < ${mol_dir}/analyse/array |
195 | 86112fec | Marti Aliod Carles | |
196 | 86112fec | Marti Aliod Carles | mkdir ${mol_dir}/analyse/cluster_molecule_$s |
197 | 86112fec | Marti Aliod Carles | cluster_dir=${mol_dir}/analyse/cluster_molecule_$s |
198 | 86112fec | Marti Aliod Carles | |
199 | 86112fec | Marti Aliod Carles | for numero in ${cluster[*]} ; do |
200 | 86112fec | Marti Aliod Carles | mv ${mol_dir}/analyse/${nom_de_la_molecule}*_${numero} ${cluster_dir}/. |
201 | 86112fec | Marti Aliod Carles | done |
202 | 86112fec | Marti Aliod Carles | a=0 |
203 | 86112fec | Marti Aliod Carles | for dir2 in ${cluster_dir}/${nom_de_la_molecule}* ; do |
204 | 86112fec | Marti Aliod Carles | mv $dir2 ${dir2}_$a |
205 | 86112fec | Marti Aliod Carles | a=$((a+1)) |
206 | 86112fec | Marti Aliod Carles | done |
207 | 86112fec | Marti Aliod Carles | |
208 | 86112fec | Marti Aliod Carles | rm ${mol_dir}/analyse/array |
209 | 86112fec | Marti Aliod Carles | |
210 | 86112fec | Marti Aliod Carles | |
211 | 86112fec | Marti Aliod Carles | ###################################################################### |
212 | 86112fec | Marti Aliod Carles | #### Calculation of RMSD for mol+surf and creation of RMSD matrix #### |
213 | 86112fec | Marti Aliod Carles | ###################################################################### |
214 | 86112fec | Marti Aliod Carles | |
215 | 86112fec | Marti Aliod Carles | |
216 | 86112fec | Marti Aliod Carles | cluster_matrix_file=${cluster_dir}/matrice_RMSD_cluster.txt |
217 | 86112fec | Marti Aliod Carles | touch ${cluster_matrix_file} |
218 | 86112fec | Marti Aliod Carles | |
219 | 86112fec | Marti Aliod Carles | len=${#cluster[@]} |
220 | 86112fec | Marti Aliod Carles | len_cluster="$(expr $len - 1)" |
221 | 86112fec | Marti Aliod Carles | |
222 | 86112fec | Marti Aliod Carles | for ((i=1; i<=${len_cluster}; i++)) ; do |
223 | 86112fec | Marti Aliod Carles | echo >> ${cluster_matrix_file} |
224 | 86112fec | Marti Aliod Carles | done |
225 | 86112fec | Marti Aliod Carles | |
226 | 86112fec | Marti Aliod Carles | for ((i=1; i<=${len_cluster}; i++)) ; do |
227 | 86112fec | Marti Aliod Carles | for ((j=$i; j<=${len_cluster}; j++)) ; do |
228 | 86112fec | Marti Aliod Carles | if (( $(echo "$i == $j" | bc -l) )) |
229 | 86112fec | Marti Aliod Carles | then |
230 | 86112fec | Marti Aliod Carles | add_to_line="$(awk -v ii="$i" 'NR==ii {print}' ${cluster_matrix_file})" |
231 | 86112fec | Marti Aliod Carles | add_to_line+=' 0' |
232 | 86112fec | Marti Aliod Carles | sed -i "${i}c $add_to_line" ${cluster_matrix_file} |
233 | 86112fec | Marti Aliod Carles | else |
234 | 86112fec | Marti Aliod Carles | num_i="$(expr $i - 1)" |
235 | 86112fec | Marti Aliod Carles | num_j="$(expr $j - 1)" |
236 | 86112fec | Marti Aliod Carles | RMSD_mol_surf_i_j="$(${DockOnSurf_path}/modules/calculate_rmsd --reorder ${cluster_dir}/${nom_de_la_molecule}*_${num_i}/recentered_pbc.xyz ${cluster_dir}/${nom_de_la_molecule}*_${num_j}/recentered_pbc.xyz)" |
237 | 86112fec | Marti Aliod Carles | add_to_i_line="$(awk -v ii="$i" 'NR==ii {print}' ${cluster_matrix_file})" |
238 | 86112fec | Marti Aliod Carles | add_to_i_line+=' -' |
239 | 86112fec | Marti Aliod Carles | add_to_i_line+=$RMSD_mol_surf_i_j |
240 | 86112fec | Marti Aliod Carles | sed -i "${i}c $add_to_i_line" ${cluster_matrix_file} |
241 | 86112fec | Marti Aliod Carles | add_to_j_line="$(awk -v jj="$j" 'NR==jj {print}' ${cluster_matrix_file})" |
242 | 86112fec | Marti Aliod Carles | add_to_j_line+=' -' |
243 | 86112fec | Marti Aliod Carles | add_to_j_line+=$RMSD_mol_surf_i_j |
244 | 86112fec | Marti Aliod Carles | sed -i "${j}c $add_to_j_line" ${cluster_matrix_file} |
245 | 86112fec | Marti Aliod Carles | fi |
246 | 86112fec | Marti Aliod Carles | done |
247 | 86112fec | Marti Aliod Carles | done |
248 | 86112fec | Marti Aliod Carles | |
249 | 86112fec | Marti Aliod Carles | |
250 | 86112fec | Marti Aliod Carles | ####################### |
251 | 86112fec | Marti Aliod Carles | #### Re-clustering #### |
252 | 86112fec | Marti Aliod Carles | ####################### |
253 | 86112fec | Marti Aliod Carles | |
254 | 86112fec | Marti Aliod Carles | |
255 | 86112fec | Marti Aliod Carles | cluster_molsurf_file=${cluster_dir}/cluster_molsurf.txt |
256 | 86112fec | Marti Aliod Carles | ${DockOnSurf_path}/modules/clustering.py ${cluster_matrix_file} > ${cluster_molsurf_file} |
257 | 86112fec | Marti Aliod Carles | |
258 | 86112fec | Marti Aliod Carles | |
259 | 86112fec | Marti Aliod Carles | ################################################# |
260 | 86112fec | Marti Aliod Carles | #### Get the cluster centers (min of energy) #### |
261 | 86112fec | Marti Aliod Carles | ################################################# |
262 | 86112fec | Marti Aliod Carles | |
263 | 86112fec | Marti Aliod Carles | |
264 | 86112fec | Marti Aliod Carles | nb_cluster_molsurf="$(awk 'END{print NR}' ${cluster_molsurf_file})" |
265 | 86112fec | Marti Aliod Carles | line_cluster_group2="$(awk '{print NR,$0}' ${cluster_molsurf_file} | grep "Cluster\ groups:" | awk '{print $1}')" |
266 | 86112fec | Marti Aliod Carles | line_first_cluster2="$(expr ${line_cluster_group2} + 1 )" |
267 | 86112fec | Marti Aliod Carles | |
268 | 86112fec | Marti Aliod Carles | for ((a=${line_first_cluster2}; a<=${nb_cluster_molsurf}; a++)); do |
269 | 86112fec | Marti Aliod Carles | awk -v ligne="$a" 'NR==ligne{print}' ${cluster_molsurf_file} > ${cluster_dir}/array |
270 | 86112fec | Marti Aliod Carles | sed -i 's/\[/ /g' ${cluster_dir}/array |
271 | 86112fec | Marti Aliod Carles | sed -i 's/\]/ /g' ${cluster_dir}/array |
272 | 86112fec | Marti Aliod Carles | sed -i 's/^ *//' ${cluster_dir}/array |
273 | 86112fec | Marti Aliod Carles | sed -i 's/ / /g' ${cluster_dir}/array |
274 | 86112fec | Marti Aliod Carles | readarray -d " " cluster_struct < ${cluster_dir}/array |
275 | 86112fec | Marti Aliod Carles | |
276 | 86112fec | Marti Aliod Carles | E_min=0 |
277 | 86112fec | Marti Aliod Carles | numero_mol_E_min=t |
278 | 86112fec | Marti Aliod Carles | |
279 | 86112fec | Marti Aliod Carles | for struct_nb in ${cluster_struct[*]} ; do |
280 | 86112fec | Marti Aliod Carles | energie="$(awk 'NR==2{E=$NF} END{print E}' ${cluster_dir}/*_${struct_nb}/last_geo.xyz)" |
281 | 86112fec | Marti Aliod Carles | if (( $(echo $energie '<' $E_min | bc -l) )) |
282 | 86112fec | Marti Aliod Carles | then |
283 | 86112fec | Marti Aliod Carles | E_min=$energie |
284 | 86112fec | Marti Aliod Carles | numero_mol_E_min=$struct_nb |
285 | 86112fec | Marti Aliod Carles | fi |
286 | 86112fec | Marti Aliod Carles | done |
287 | 86112fec | Marti Aliod Carles | |
288 | 86112fec | Marti Aliod Carles | cp -r ${cluster_dir}/${nom_de_la_molecule}*_${numero_mol_E_min} ${mol_dir}/analyse/cluster_centers_energy/. |
289 | 86112fec | Marti Aliod Carles | done |
290 | 86112fec | Marti Aliod Carles | |
291 | 86112fec | Marti Aliod Carles | s=$((s+1)) |
292 | 86112fec | Marti Aliod Carles | done |
293 | 86112fec | Marti Aliod Carles | |
294 | 86112fec | Marti Aliod Carles | for dir in ${mol_dir}/analyse/cluster_centers_energy/${nom_de_la_molecule}* ; do |
295 | 86112fec | Marti Aliod Carles | nb_champs="$(echo $dir | awk -F "_" '{print NF}')" |
296 | 86112fec | Marti Aliod Carles | nb_limit="$(expr $nb_champs - 2)" |
297 | 86112fec | Marti Aliod Carles | name="$(echo $dir | cut -d '_' -f-$nb_limit)" |
298 | 86112fec | Marti Aliod Carles | mv $dir $name |
299 | 86112fec | Marti Aliod Carles | done |
300 | 86112fec | Marti Aliod Carles | |
301 | 86112fec | Marti Aliod Carles | echo "Clustering of structures mol+surf has been done" |
302 | 86112fec | Marti Aliod Carles | |
303 | 86112fec | Marti Aliod Carles | |
304 | 86112fec | Marti Aliod Carles | ################################################### |
305 | 86112fec | Marti Aliod Carles | #### Determination of calculations to relaunch #### |
306 | 86112fec | Marti Aliod Carles | ################################################### |
307 | 86112fec | Marti Aliod Carles | |
308 | 86112fec | Marti Aliod Carles | Energy_min=0 |
309 | 86112fec | Marti Aliod Carles | |
310 | 86112fec | Marti Aliod Carles | for structure in ${mol_dir}/analyse/cluster_centers_energy/*; do |
311 | 86112fec | Marti Aliod Carles | Energy="$(awk 'NR==2{E=$NF} END{print E}' $structure/last_geo.xyz)" |
312 | 86112fec | Marti Aliod Carles | if (( $(echo $Energy '<' $Energy_min | bc -l) )) |
313 | 86112fec | Marti Aliod Carles | then Energy_min=$Energy |
314 | 86112fec | Marti Aliod Carles | fi |
315 | 86112fec | Marti Aliod Carles | done |
316 | 86112fec | Marti Aliod Carles | |
317 | 86112fec | Marti Aliod Carles | Limit_energy="$(echo $Energy_min + ${cutoff}/27.2 | bc -l)" #limit of energy to relaunch the calculation 0.25eV more than min |
318 | 86112fec | Marti Aliod Carles | |
319 | 86112fec | Marti Aliod Carles | mkdir ${mol_dir}/relaunched_calculations |
320 | 86112fec | Marti Aliod Carles | |
321 | 86112fec | Marti Aliod Carles | for structure in ${mol_dir}/analyse/cluster_centers_energy/*; do |
322 | 86112fec | Marti Aliod Carles | Energy="$(awk 'NR==2{E=$NF} END{print E}' $structure/last_geo.xyz)" |
323 | 86112fec | Marti Aliod Carles | if (( $(echo $Energy '<' $Limit_energy | bc -l) )) |
324 | 86112fec | Marti Aliod Carles | then cp -r $structure ${mol_dir}/relaunched_calculations/. |
325 | 86112fec | Marti Aliod Carles | fi |
326 | 86112fec | Marti Aliod Carles | done |
327 | 86112fec | Marti Aliod Carles | |
328 | 86112fec | Marti Aliod Carles | |
329 | 86112fec | Marti Aliod Carles | #################################### |
330 | 86112fec | Marti Aliod Carles | #### Launching the calculations #### |
331 | 86112fec | Marti Aliod Carles | #################################### |
332 | 86112fec | Marti Aliod Carles | |
333 | 86112fec | Marti Aliod Carles | n="$(find ${mol_dir}/relaunched_calculations/${nom_de_la_molecule}* -type d | wc -l)" |
334 | 86112fec | Marti Aliod Carles | |
335 | 86112fec | Marti Aliod Carles | echo $n "clusters centers with energy lower than Emin+$cutoff eV have been found" |
336 | 86112fec | Marti Aliod Carles | echo "Relaunch the calculations ?" |
337 | 86112fec | Marti Aliod Carles | read answer |
338 | 86112fec | Marti Aliod Carles | |
339 | 86112fec | Marti Aliod Carles | if [[ $answer = "yes" ]] |
340 | 86112fec | Marti Aliod Carles | then |
341 | 86112fec | Marti Aliod Carles | cp ${mol_dir}/${nom_de_la_molecule}_1/cp2k_gamma.j ${mol_dir}/relaunched_calculations/. |
342 | 86112fec | Marti Aliod Carles | |
343 | 86112fec | Marti Aliod Carles | for dir in ${mol_dir}/relaunched_calculations/${nom_de_la_molecule}*; do |
344 | 86112fec | Marti Aliod Carles | # takes the restart file of the previous calculation as input file for re-optimization |
345 | 86112fec | Marti Aliod Carles | conf=$(echo $dir | rev | cut -d/ -f1 | rev ) |
346 | 86112fec | Marti Aliod Carles | cp ${mol_dir}/$conf/surf_${nom_de_la_molecule}-1.restart ${dir}/surf_${nom_de_la_molecule}.inp |
347 | 86112fec | Marti Aliod Carles | topo_line=$(grep -n \&TOPOLOGY ${dir}/surf_${nom_de_la_molecule}.inp | cut -d: -f1) |
348 | 86112fec | Marti Aliod Carles | sed -i "$topo_line,$(($topo_line+5))d" ${dir}/surf_${nom_de_la_molecule}.inp |
349 | 86112fec | Marti Aliod Carles | # changes the optimization criterions for more precise re-optimization |
350 | 86112fec | Marti Aliod Carles | sed -i 's/MAX_FORCE/#MAX_FORCE/g' ${dir}/surf_${nom_de_la_molecule}.inp |
351 | 86112fec | Marti Aliod Carles | sed -i 's/MAX_DR/#MAX_DR/g' ${dir}/surf_${nom_de_la_molecule}.inp |
352 | 86112fec | Marti Aliod Carles | sed -i 's/RMS_DR/#RMS_DR/g' ${dir}/surf_${nom_de_la_molecule}.inp |
353 | 86112fec | Marti Aliod Carles | sed -i 's/RMS_FORCE/#RMS_FORCE/g' ${dir}/surf_${nom_de_la_molecule}.inp |
354 | 86112fec | Marti Aliod Carles | sed -i 's/EPS_SCF/EPS_SCF\ 1E-07\ #/g' ${dir}/surf_${nom_de_la_molecule}.inp |
355 | 86112fec | Marti Aliod Carles | # launches the calculation |
356 | 86112fec | Marti Aliod Carles | cd $dir/ |
357 | f43a1b4c | Marti Aliod Carles | new_job_id=$(qsub ${mol_dir}/relaunched_calculations/cp2k_gamma.j | awk '{print $3}') |
358 | f43a1b4c | Marti Aliod Carles | echo "Submitted job $new_job_id" |
359 | f43a1b4c | Marti Aliod Carles | jobs_owned+=($new_job_id) |
360 | 86112fec | Marti Aliod Carles | cd - |
361 | 86112fec | Marti Aliod Carles | done |
362 | 86112fec | Marti Aliod Carles | fi |
363 | 86112fec | Marti Aliod Carles | |
364 | f43a1b4c | Marti Aliod Carles | ### Attente jusqu'à ce que tous les calculs aient fini |
365 | f43a1b4c | Marti Aliod Carles | go_on=true |
366 | f43a1b4c | Marti Aliod Carles | while [ $go_on == true ]; do |
367 | f43a1b4c | Marti Aliod Carles | all_jobs=`qstat | tail -n+3 | awk '{print $1}'` |
368 | f43a1b4c | Marti Aliod Carles | for j1 in ${jobs_owned[@]} ; do |
369 | f43a1b4c | Marti Aliod Carles | for j2 in ${all_jobs[@]}; do |
370 | f43a1b4c | Marti Aliod Carles | if [ $j1 == $j2 ]; then |
371 | f43a1b4c | Marti Aliod Carles | sleep 30 |
372 | f43a1b4c | Marti Aliod Carles | continue 3 |
373 | f43a1b4c | Marti Aliod Carles | fi |
374 | f43a1b4c | Marti Aliod Carles | done |
375 | f43a1b4c | Marti Aliod Carles | done |
376 | f43a1b4c | Marti Aliod Carles | echo "loop finished" |
377 | f43a1b4c | Marti Aliod Carles | go_on=false |
378 | f43a1b4c | Marti Aliod Carles | done |