Statistiques
| Branche: | Tag: | Révision :

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