Hello,
It looks ok to me, i.e. it should only affect spectra which are mapped
into that window. I just tried it and it seemed to work for me (i.e. the
contour levels for the spectra of the window were changed and the other
spectrum was not). A couple of other comments.
With the call windowPopup.getSpectrumViews() you are getting the views (in
data model terminology, the SpectrumWindowViews) of the window, which
exactly represent the spectra which are mapped into that window. To get
to the spectrum from a view you do exactly what you did, i.e. spectrum =
view.dataSource.
Alternatively, you can get the data model window object via window =
windowPopup.window (in data model terminology, this is a SpectrumWindow).
And you can then get the views from that via views =
window.spectrumWindowViews. This is what the function getSpectrumViews()
is doing, except that that also tries to protect against broken links
view.dataSource (these are not supposed to occur but for technical reasons
they might).
On the contour level front, this is all unfortunately more complicated
than you might think it ought to be, but the problem is that we have two
systems in place. One is where you just define the baseLevel, the number
of levels and the level changer and mode. The other is where you define
the levels explicitly as a list (or tuple). The former is normally what
people like to use, and that should then set the latter, because it is the
latter that the contouring code actually uses. What you have done seems
as reasonable an approach as any.
Wayne
On Fri, 21 Sep 2007, Jeremy Craven wrote:
> Hi, it seems my macro is actually changing the values of the contour
> levels in ALL the spectra in the project rather than just the ones
> mapped to my window
> of interest (so that is one bogus macro in this list for "posterity"..).
> Only just realised this when tried to make one that would set the base
> level of all the mapped spectra to the same thing and it seems to report
> dealing with all the spectra in the whole project. is there something like
> views = windowPopup.getMappedSpectrumViews()
> ??
>
> Also am I changing the contour levels using the correct functions or is
> there a more logical way to do it ?
>
> Cheers
>
> Jeremy
>
>
> #################################################################################
>
> def setAllContoursMappedToWindow(argServer = None, windowPopup = None):
>
> # this sets base level same for ALL the spectra mapped to window
> # (I hope) so all points in titration stay in lock step, whether viewed
> or not
>
> from ccpnmr.analysis import Util
> from ccpnmr.analysis.ExperimentBasic import changeSpectrumContourLevels,
> calcContourLevels
>
> if argServer and not windowPopup:
> windowPopup = argServer.getCurrentWindowPopup()
>
> if windowPopup:
>
> newBaseLevel=argServer.askFloat("Enter base level for all spectra",10.0)
> views = windowPopup.getSpectrumViews()
> for view in views:
> spectrum = view.dataSource
> (baseLevel, numberLevels, levelChanger, changeMode) =
> Util.getSpectrumLevelValues(spectrum)
> print "before",spectrum, baseLevel
> baseLevel=newBaseLevel
> Util.setSpectrumContourLevels(spectrum, calcContourLevels(baseLevel,
> numberLevels, levelChanger, changeMode = 0))
> Util.setSpectrumLevelValues(spectrum, baseLevel, numberLevels, levelChanger)
>
> ##############################################################################
>
>
>
> Wayne Boucher wrote:
> > Hello,
> >
> > The graphical interaction with contour levels is in
> > python/ccpnmr/analysis/EditContourLevelsPopup.py.
> >
> > The function that Jeremy wrote changes the levels of all spectra mapped
> > into a window. Perhaps people would also want a function that changes the
> > levels of all spectra, period. Etc. A workshop sounds like a reasonable
> > idea to me.
> >
> > Wayne
> >
> > On Fri, 21 Sep 2007, Brian Smith wrote:
> >
> >
> >> On Fri, 21 Sep 2007, Jeremy Craven wrote:
> >>
> >>> Thanks Wayne, got it to work now. (Took out the try/except - which I
> >>> inherited from the analysis code, and there was one more import needed). Will
> >>> append the working code below for posterity.
> >>>
> >> Nice one Jeremy.
> >>
> >>
> >>> I think a bunch of utilities like this would be good and some macro-writing
> >>> users should get together to see what we can achieve maybe.
> >>>
> >> An excellent idea. Time for an advanced analysis users' workshop perhaps
> >> where a bunch of us bring our wish list together with Tim/Wayne/Wim on
> >> hand to facilitate us implementing them?
> >>
> >>
> >>> Oh and before I poke around more: where is levelChanger set in the GUIs (or
> >>> is it?) ?
> >>>
> >> Not quite sure what you're asking but I always start digging with
> >> something like
> >>
> >> grep levelChanger /usr/local/ccpnmr/ccpnmr1.0/python/ccpnmr/analysis/*.py
> >>
> >> If you're after where the value of levelChanger is set in the GUI, my
> >> reading of the code is that it's the modifier that determines your contour
> >> spacing. i.e. you should go up or down one whole contour. Haven't
> >> checked if that's true yet.
> >>
> >> Brian
> >>
> >> --
> >> Dr. Brian O. Smith ---------------------- B Smith at bio gla ac uk
> >> Division of Biochemistry & Molecular Biology,
> >> Institute Biomedical & Life Sciences,
> >> Joseph Black Building, University of Glasgow, Glasgow G12 8QQ, UK.
> >> Tel: 0141 330 5167/6459/3089 Fax: 0141 330 8640
> >>
> >>
>
>
> --
> *********************************************************************************
>
> Dr C. Jeremy Craven
> Department of Molecular Biology and Biotechnology
> University of Sheffield,
> Firth Court, Western Bank
> S10 2TN Sheffield UK
>
> e-mail: [log in to unmask]
> http://www.nmr.group.shef.ac.uk/CJC.html
>
> Phone: x24323
> >From outside Sheffield: 0114 222 4323
> >From outside UK: +44 114 2224323
> Fax: 0114 272 2800
>
> *********************************************************************************
>
|