Skip to main content

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [List Home]
Re: [chemclipse-dev] Help: display chromatogram during acquisition

Following is my open/create EditorMSD code:

=====================================================================
final TideMSChromatogram tideMSChromatogram = new TideMSChromatogram();
tideMSChromatogram.setFile(saveFile);
final ZipBufferWriter writer = new ZipBufferWriter(saveFile);
// ****
openMSDEditor(tideMSChromatogram); 
//***
for(int i = 0; i < usbDevice.getSpectraNumber(); i++) {
usbDevice.acquireMassSpectrum(tideMSChromatogram, writer, i);
}
writer.writeOverviewFolder(tideMSChromatogram);

=====================================================================
private void openMSDEditor(final IChromatogram chromatogram) {

new UIJob("Open MSD Editor") {

@Override
public IStatus runInUIThread(final IProgressMonitor monitor) {

MPart editor = findMSDEditor(chromatogram);
if(editor == null) {
editor = createMSDEditor(chromatogram);
} else {
editor.setObject(chromatogram);
partService.showPart(editor, PartState.ACTIVATE);
}
return Status.OK_STATUS;
}
}.schedule();
}

=====================================================================
private MPart findMSDEditor(final IChromatogram chromatogram) {

final Iterator<MPart> it = partService.getParts().iterator();
while(it.hasNext()) {
final MPart part = it.next();
if(ChromatogramEditorMSD.CONTRIBUTION_URI.equals(part.getContributionURI())) {
final Object obj = part.getObject();
if(obj instanceof IChromatogram) {
final File file1 = ((IChromatogram)obj).getFile();
final File file2 = chromatogram.getFile();
if((file1 != null) && (file2 != null) && file1.getAbsolutePath().equals(file2.getAbsolutePath())) {
return part;
}
}
}
}
return null;
}

=====================================================================

Best regards,

Trig

2016-08-31 21:34 GMT+08:00 Trig Chen <trigchen@xxxxxxxxx>:

2016-08-31 14:53 GMT+08:00 Philip Wenig <philip.wenig@xxxxxxxxxxxxx>:
When recording the chromatogram, you could use your chromatogram object to display the data and fire the updates, see how the chromatogram editor is created. It requires a file or an IChromatogramMSD instance:

org.eclipse.chemclipse.ux.extension.msd.ui.editors.ChromatogramEditorMSD

    private void loadChromatogram() {

        try {
            /*
             * Import the chromatogram without showing it on the gui. The GUI
             * will take care itself of this action.
             */
            Object object = part.getObject();
            if(object instanceof String) {
                /*
                 * Try to load the chromatogram from file.
                 */
                File file = new File((String)object);
                importChromatogram(file);
            } else if(object instanceof IChromatogramMSD) {
                IChromatogramMSD chromatogram = (IChromatogramMSD)object;
                chromatogramSelection = new ChromatogramSelectionMSD(chromatogram);
It seems the chromatogramSelection field is very important and should not be absent.
 I created an EditorMSD and set it's object to chromatogram. But I don't know how to create a chromatogramSelection for the EditorMSD. There is not a setter method to set chromatogramSelection. :(.

                chromatogramFile = null;  
Why set chromatogramFile to null?
 
            }
        } catch(Exception e) {
            logger.warn(e);
        }
    }

Have a look at the convenient class that helps to open a chromatogram from file or from instance:

org.eclipse.chemclipse.ux.extension.msd.ui.support.ChromatogramEditorSupport

public void openEditor(IChromatogram chromatogram, EModelService modelService, MApplication application, EPartService partService) {
...

Please also check, that the retention time (in milliseconds) is set in each scan of your chromatogram.


Best,
Philip





Back to the top