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

Sorry for codes missing.

final File file = new File("C:\\Temp\\blank.ocb");
final IChromatogramMSD msd = new ChromatogramMSD();
final ChromatogramWriterMSD writer = new ChromatogramWriterMSD();
try {
writer.writeChromatogram(file, msd, new NullProgressMonitor());
} catch(final Exception e2) {
// TODO: handle exception
}


Best regards,

Trig

2016-09-01 15:00 GMT+08:00 Trig Chen <trigchen@xxxxxxxxx>:
I used the following code to generate a blank ChromatogramMSD file, and then opened it in OpenChrom. The Editor part just displayed problem information but not an empty and blank chromatogram figure.

In my data acquisition case, I press the acquisition button and new a blank ChromatogramMSD object. If I immediately open a new ChromatogramMSD Editor with this chromatogram object held, what will hapen? If I update this object with one scan adding, what wil happen to the Editor?


Best regards,

Trig

2016-08-31 22:16 GMT+08:00 Trig Chen <trigchen@xxxxxxxxx>:
In Editor Area, the left part is create by pressing "Start Acquire" button in control pane, the right part is created by opening the file acquired and saved to disk. 
There were many "Given range is invalid" errors printed in Console View:
java.lang.IllegalArgumentException: Given range is invalid
at org.swtchart.internal.axis.Axis.setRange(Axis.java:190)
at org.swtchart.internal.axis.Axis.setRange(Axis.java:156)
at org.eclipse.chemclipse.swt.ui.support.ChartUtil.checkAndSetRange(ChartUtil.java:92)
at org.eclipse.chemclipse.msd.swt.ui.components.AbstractBarSeriesUI.redraw(AbstractBarSeriesUI.java:292)
at org.eclipse.chemclipse.thirdpartylibraries.swtchart.ext.InteractiveChartExtended.handleEvent(InteractiveChartExtended.java:83)
at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:84)

It seems the problem of no acquired chromatogram displayed is caused by the "Given range is invalid" errors.

When I double clicked on the figure of right part, the chromatogram displayed as a red rectangle. 
Even I right clicked on the figure and select "Reset 1:1", the rectangle stayed with no change. :(. 
There were no more error printed as I right clicked or double clicked.


Best regards,

Trig

2016-08-31 21:40 GMT+08:00 Trig Chen <trigchen@xxxxxxxxx>:
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