OK, I have been misuing the term mapped in my head.
I personally don't feel that "is in the toolbar" is the most intuitive
way to talk about the idea that a particular set of spectra
"particularly belong" in a certain window. This is one for the
documentation project to work on ...
(PS can we ban list (in)comprehensions .... ; but then just checked it
out on Wikipedia to see whose wretched invention they were, and at least
we should be glad not to have perl's version "@S = map{$_*2}
grep{$_*$_>3} (0 .. 99);" .....)
Jeremy
Wayne Boucher wrote:
> Hello,
>
> They are all mapped, it's just that some are in the toolbar and some are
> not, and some are visible and some are not. So to do what you want you
> can just do:
>
> views = [view for view in windowPopup.getSpectrumViews() if
> view.isInToolbar]
>
> If you look at the API documentation (ccpnmr1.0/python/doc/classMap.html)
> for SpectrumWindowView you will see there are the following attributes
> that you could filter on:
>
> isInToolbar
> isNegVisible (negative contours)
> isPosVisible (positive contours)
> isSliceVisible (1D trace)
>
> Wayne
>
> On Tue, 25 Sep 2007, Jeremy Craven wrote:
>
>
>> Wayne Boucher wrote:
>>
>>> So they are all HSQCs? (So 2D windows and one dimension is 1H and the
>>> other 15N.) In this case windowPopup.getSpectrumViews() should return all
>>> 15 spectra.
>>>
>> Which it is ..
>>
>>> How do you want to distinguish the two subsets of the 15?
>>> Because if there is some data model way to distinguish them we can add
>>> another function which does that.
>>> (So, is it by whether they appear in
>>> the toolbar of the window?)
>>>
>>>
>>>
>> Yes yes yes. i.e. I would understand the language of the popups as all
>> mapped to one window. I can think of a recent example (that I did not
>> use analysis to look at) where I had about 4 different point mutants
>> with a titration for each. I can easily imagine wanting a window for
>> each and wanting to control those groups of spectra's display properties
>> in one fell swoop. There must be other more common cases, e.g. if have a
>> set of T2 spectra, a set of T1 spectra etc.
>>
>> Intuitively I was guessing that there might be
>>
>> views = windowPopup.getMappedSpectrumViews()
>>
>>
>> Regards
>>
>> Jeremy
>>
>>
>>
>>
>>> Wayne
>>>
>>> On Mon, 24 Sep 2007, Jeremy Craven wrote:
>>>
>>>
>>>
>>>> Thanks for the info Wayne.
>>>>
>>>> The macro still seems to be changing the base level in all the spectra
>>>> in the project (and all 15
>>>> spectra yield the 'print "before",....' output). I am running it by
>>>> putting a keyboard shortcut ("z"), which I
>>>> assume should tie the running of the macro to the particular window that
>>>> the cursor is in when I press "z".
>>>>
>>>> I tried
>>>>
>>>> views = windowPopup.getActiveSpectrumViews()
>>>>
>>>> and that behaved as I expected (so I only got the print statements for
>>>> the spectra on view)
>>>>
>>>> when I put it back to
>>>>
>>>> views = windowPopup.getSpectrumViews()
>>>>
>>>>
>>>> Then I got all 15 printed again (I have 15 spectra divided roughly
>>>> evenly between two windows; one set are HSQCs, and one set are long
>>>> range HSQCs).
>>>>
>>>> Any ideas what else I might be doing wrong ?
>>>>
>>>> Regards
>>>>
>>>> Jeremy
>>>>
>>>>
>>>> Wayne Boucher wrote:
>>>>
>>>>
>>>>> 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
>>>>>>
>>>>>> *********************************************************************************
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>> --
>>>> *********************************************************************************
>>>>
>>>> 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
>>>>
>>>> *********************************************************************************
>>>>
>>>>
>>>>
>> --
>> *********************************************************************************
>>
>> 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
>>
>> *********************************************************************************
>>
>>
--
*********************************************************************************
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
*********************************************************************************
|