5b7a9286f61296b3d9a4645f3fd7bbd078a3aba1
[jalview.git] / src / jalview / gui / JalviewChimeraXBindingModel.java
1 package jalview.gui;
2
3 import java.util.List;
4
5 import ext.edu.ucsf.rbvi.strucviz2.ChimeraModel;
6 import ext.edu.ucsf.rbvi.strucviz2.StructureManager;
7 import ext.edu.ucsf.rbvi.strucviz2.StructureManager.ModelType;
8 import jalview.datamodel.PDBEntry;
9 import jalview.datamodel.SequenceI;
10 import jalview.ext.rbvi.chimera.ChimeraXCommands;
11 import jalview.gui.StructureViewer.ViewerType;
12 import jalview.io.DataSourceType;
13 import jalview.structure.AtomSpec;
14 import jalview.structure.StructureCommand;
15 import jalview.structure.StructureSelectionManager;
16
17 public class JalviewChimeraXBindingModel extends JalviewChimeraBindingModel
18 {
19   public static final String CHIMERAX_SESSION_EXTENSION = ".cxs";
20
21   public JalviewChimeraXBindingModel(ChimeraViewFrame chimeraViewFrame,
22           StructureSelectionManager ssm, PDBEntry[] pdbentry,
23           SequenceI[][] sequenceIs, DataSourceType protocol)
24   {
25     super(chimeraViewFrame, ssm, pdbentry, sequenceIs, protocol);
26     setStructureCommands(new ChimeraXCommands());
27   }
28
29   @Override
30   protected List<String> getChimeraPaths()
31   {
32     return StructureManager.getChimeraPaths(true);
33   }
34
35   @Override
36   protected void addChimeraModel(PDBEntry pe,
37           List<ChimeraModel> modelsToMap)
38   {
39     /*
40      * ChimeraX hack: force chimera model name to pdbId here
41      */
42     int modelNumber = chimeraMaps.size() + 1;
43     String command = "setattr #" + modelNumber + " models name "
44             + pe.getId();
45     executeCommand(new StructureCommand(command), false);
46     modelsToMap.add(new ChimeraModel(pe.getId(), ModelType.PDB_MODEL,
47             modelNumber, 0));
48   }
49
50   /**
51    * {@inheritDoc}
52    * 
53    * @return
54    */
55   @Override
56   protected String getCommandFileExtension()
57   {
58     return ".cxc";
59   }
60
61   /**
62    * Returns the file extension to use for a saved viewer session file (.cxs)
63    * 
64    * @return
65    * @see https://www.cgl.ucsf.edu/chimerax/docs/user/commands/save.html#sesformat
66    */
67   @Override
68   public String getSessionFileExtension()
69   {
70     return CHIMERAX_SESSION_EXTENSION;
71   }
72
73   @Override
74   public String getHelpURL()
75   {
76     return "http://www.rbvi.ucsf.edu/chimerax/docs/user/index.html";
77   }
78
79   @Override
80   protected ViewerType getViewerType()
81   {
82     return ViewerType.CHIMERAX;
83   }
84
85   @Override
86   protected String getModelId(int pdbfnum, String file)
87   {
88     return String.valueOf(pdbfnum + 1);
89   }
90
91   /**
92    * Returns a model of the structure positions described by the ChimeraX format atomspec
93    * @param atomSpec
94    * @return
95    */
96   protected AtomSpec parseAtomSpec(String atomSpec)
97   {
98     return AtomSpec.fromChimeraXAtomspec(atomSpec);
99   }
100
101 }