1
2
3
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
38 package ffx.xray.commands;
39
40 import ffx.algorithms.cli.AlgorithmsCommand;
41 import ffx.numerics.Potential;
42 import ffx.potential.MolecularAssembly;
43 import ffx.utilities.FFXBinding;
44 import ffx.xray.DiffractionData;
45 import ffx.xray.cli.XrayOptions;
46 import ffx.xray.parsers.MTZWriter;
47 import ffx.xray.parsers.MTZWriter.MTZType;
48 import org.apache.commons.configuration2.CompositeConfiguration;
49 import picocli.CommandLine.Command;
50 import picocli.CommandLine.Mixin;
51 import picocli.CommandLine.Parameters;
52
53 import java.util.List;
54
55 import static org.apache.commons.io.FilenameUtils.getBaseName;
56
57
58
59
60
61
62
63
64 @Command(description = " Write out computed structure factors without bulk solvent.", name = "xray.ComputeFc")
65 public class ComputeFc extends AlgorithmsCommand {
66
67 @Mixin
68 private XrayOptions xrayOptions;
69
70
71
72
73 @Parameters(arity = "1..*", paramLabel = "files", description = "PDB and Diffraction input files.")
74 private List<String> filenames;
75
76 private MolecularAssembly[] molecularAssemblies;
77 private DiffractionData diffractionData;
78
79
80
81
82 public ComputeFc() {
83 super();
84 }
85
86
87
88
89
90
91 public ComputeFc(String[] args) {
92 super(args);
93 }
94
95
96
97
98
99
100 public ComputeFc(FFXBinding binding) {
101 super(binding);
102 }
103
104 @Override
105 public ComputeFc run() {
106
107 if (!init()) {
108 return this;
109 }
110
111 xrayOptions.init();
112
113 String filename;
114 if (filenames != null && !filenames.isEmpty()) {
115
116 molecularAssemblies = algorithmFunctions.openAll(filenames.get(0));
117 activeAssembly = molecularAssemblies[0];
118 filename = filenames.get(0);
119 } else if (activeAssembly == null) {
120 logger.info(helpString());
121 return this;
122 } else {
123 molecularAssemblies = new MolecularAssembly[]{activeAssembly};
124 filename = activeAssembly.getFile().getAbsolutePath();
125 }
126
127 logger.info("\n Running xray.ComputeFc on " + filename);
128
129
130 CompositeConfiguration properties = activeAssembly.getProperties();
131 xrayOptions.setProperties(parseResult, properties);
132
133
134 diffractionData = xrayOptions.getDiffractionData(filenames, molecularAssemblies, properties);
135
136
137 diffractionData.scaleBulkFit();
138 diffractionData.printStats();
139
140
141 MTZWriter mtzWriter = new MTZWriter(diffractionData.getReflectionList()[0],
142 diffractionData.getRefinementData()[0], getBaseName(filename) + "_fc.mtz", MTZType.FCONLY);
143
144 mtzWriter.write();
145 return this;
146 }
147
148 @Override
149 public List<Potential> getPotentials() {
150 return getPotentialsFromAssemblies(molecularAssemblies);
151 }
152
153 @Override
154 public boolean destroyPotentials() {
155 return diffractionData == null ? true : diffractionData.destroy();
156 }
157 }