spl()   F
last analyzed

Complexity

Conditions 29

Size

Total Lines 189
Code Lines 101

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 29
eloc 101
nop 1
dl 0
loc 189
rs 0
c 0
b 0
f 0

How to fix   Long Method    Complexity   

Long Method

Small methods make your code easier to understand, in particular if combined with a good name. Besides, if your method is small, finding a good name is usually much easier.

For example, if you find yourself adding comments to a method's body, this is usually a good sign to extract the commented part to a new method, and use the comment as a starting point when coming up with a good name for this new method.

Commonly applied refactorings include:

Complexity

Complex classes like build.rna_tools.tools.PyMOL4RNA.PyMOL4Spliceosome.spl() often do a lot of different things. To break such a class down, we need to identify a cohesive component within that class. A common approach to find such a component is to look for fields/methods that share the same prefixes, or suffixes.

Once you have determined the fields that belong together, you can apply the Extract Class refactoring. If the component makes sense as a sub-class, Extract Subclass is also a candidate, and is often faster.

1
"""
2
See the PyMOL Sessions processed with this code here <https://github.com/mmagnus/PyMOL4Spliceosome>
3
"""
4
from pymol import cmd
5
from rna_tools.tools.PyMOL4RNA import code_for_color_spl
6
from rna_tools.tools.PyMOL4RNA import code_for_spl
7
8
try:
9
    from pymol import cmd
10
except ImportError:
11
    print("PyMOL Python lib is missing")
12
    # sys.exit(0)
13
14
def spl_help():
15
    print("""
16
PyMOL4Spliceosome
17
-----------------------
18
extract all (ea)  - show
19
colors            - list all colors
20
21
spl hprp8
22
spl prp8
23
spl yprp8 - "color skyblue, PRP8_* and resi 885-1251"
24
spl hprp28
25
26
spl chains
27
 color blue, chain 5
28
 color red, chain 6
29
 color forest, chain 2
30
31
set cartoon_ring_mode to 3 ...
32
33
""")
34
spl_help()
35
36
print("""
37
spl g2 # coloring for 6chr g2 introns
38
""")
39
40
cmd.set('transparency', 0.25)
41
cmd.set('cartoon_ring_mode', 3)
42
# colors taken from https://github.com/maxewilkinson/Spliceosome-PyMOL-sessions
43
cmd.set_color('lightgreen', [144, 238, 144])
44
cmd.set_color('darkgreen', [0, 100, 0])
45
cmd.set_color('darkseagreen', [143, 188, 143])
46
cmd.set_color('greenyellow', [173, 255, 47])
47
cmd.set_color('coral', [255, 127, 80])
48
cmd.set_color('darkorange', [255, 140, 0])
49
cmd.set_color('gold', [255, 215, 0])
50
cmd.set_color('lemonchiffon', [255,250,205])
51
cmd.set_color('moccasin', [255,228,181])
52
cmd.set_color('skyblue', [135,206,235])
53
cmd.set_color('lightyellow', [255,255,224])
54
cmd.set_color('powderblue', [176,224,230])
55
cmd.set_color('royalblue', [65,105,225])
56
cmd.set_color('cornflowerblue', [100,149,237])
57
cmd.set_color('steelblue', [70,130,180])
58
cmd.set_color('lightsteelblue', [176,196,222])
59
cmd.set_color('violetBlue', [40, 0, 120])
60
cmd.set_color('mediumpurple', [147,112,219])
61
cmd.set_color('lavenderblush', [255,240,245])
62
cmd.set_color('lavender', [230,230,250])
63
cmd.set_color('thistle', [216,191,216])
64
65
66
67
def color_by_text(txt):
68
    """Helper function used for color-coding based on residue indexes ranges."""
69
    for t in txt.strip().split('\n'):
70
        print(t)
71
        color, resi = t.replace('color ', '').split(',')
72
        print((color, resi))
73
        cmd.color(color.strip(), resi.strip())
74
75
def spl(arg=''):
76
    """
77
    action='', name=''
78
    """
79
    #reload()
80
    print(arg)
81
    if ' ' in arg:
82
        action, name = arg.split()
83
        name = name.lower()
84
    else:
85
        action = arg
86
        name = ''
87
    #import pandas as pd
88
    #df = pd.read_excel("/home/magnus/Desktop/pyMoL_colors-EMX.xlsx")
89
    if not action or action == 'help':
90
        spl_help()
91
        cmd.do('color red, chain A')        
92
        cmd.do('color forest, chain B')
93
        cmd.do('color grey, chain C')        
94
        cmd.do('color grey, chain D')
95
96
        cmd.do('color grey, chain I')        
97
        cmd.do('color grey, chain J')
98
99
        cmd.do('color purple, chain D and resi 4')        
100
        cmd.do('color purple, resn MG')
101
        # exon
102
        cmd.do('color yellow, chain G')
103
        cmd.do('color yellow, chain E')
104
        
105
        cmd.do('color blue, chain H')
106
        cmd.do('color blue, chain U')
107
108
        cmd.show("spheres", "inorganic")
109
        cmd.set('sphere_scale', '1', '(all)')
110
        #cmd.set('sphere_scale', '1', '(all)')
111
        cmd.color("yellow", "inorganic")
112
113
    elif arg == 'g22':
114
        print('g22')
115
        t = """
116
        color gray, resi 1-600;
117
        color red, resi 550-586;
118
        color pink, resi 587-630;
119
        color brown, resi 507-549;
120
        color marine, resi 350-424;
121
        color yellow, resi 425-507;
122
        color forest, resi 1-26;
123
        color forest, resi 327-350;
124
        color yellow, chain B;
125
        """
126
        color_by_text(t)
127
128
    elif arg == 'g21':
129
        print('g21')
130
        t = """
131
        color gray, resi 1-600;
132
        color red, resi 300-400
133
        color marine, resi 288-289;
134
        """
135
        color_by_text(t)
136
137
    elif action == 'color' or arg=='c':
138
        code_for_color_spl.spl_color()
139
    elif arg == 'extract all' or arg == 'ea' or arg == 'e':
140
        code_for_spl.spl_extract()
141
    elif arg == 'cc': # colorchains
142
        cmd.do('color blue, chain 5')
143
        cmd.do('color red, chain 6')        
144
        cmd.do('color forest, chain 2')
145
146
        cmd.do('color red, chain V')        
147
        cmd.do('color forest, chain Z')
148
149
    elif arg == 'ab': # colorchains
150
        cmd.do('color red, chain B')        
151
        cmd.do('color forest, chain A')
152
        cmd.do('color grey, chain C')        
153
        cmd.do('color grey, chain D')
154
        cmd.do('color purple, chain D and resi 4')        
155
        cmd.do('color purple, resn MG')
156
157
    elif arg == 'trim':
158
        cmd.do("""    	remove chain 5;
159
	remove chain 2 and resi 1-19;
160
	remove chain 2 and resi 50-200;
161
	remove chain 6 and resi 87-200;
162
	remove chain 6 and resi 1-40;
163
	remove chain P and resi 45-200;
164
    """)
165
166
    elif arg == 'trim2':  # keep super small
167
        cmd.do("""    	remove chain 5;
168
	remove chain 2 and resi 1-19;
169
	remove chain 2 and resi 30-200;
170
171
	remove chain 6 and resi 87-200;
172
	remove chain 6 and resi 1-50;
173
174
	remove chain P and resi 45-200;
175
176
	remove chain I;
177
	remove chain E;
178
    """)
179
180
    elif arg == 't5':
181
        cmd.set('transparency', 0.5)
182
    elif arg == 't1':
183
        cmd.set('transparency', 1)
184
    elif arg.startswith('hprp28'):
185
        print("""
186
purple, resi 240-361  # RecA1
187
blue, resi 361-631    # RecA1
188
orange, resi 631-811  # RecA2
189
""")
190
        cmd.do("color purple, PRP28_h* and resi 240-361") # RecA1
191
        cmd.do("color blue, PRP28_h* and resi 361-631") # RecA1
192
        cmd.do("color orange, PRP28_h* and resi 631-811")  # RecA2
193
    elif arg.startswith('hprp8'):
194
        print("""
195
196
RT finger/palm, skyblue, 812-1303
197
Thumb/X, cyan, 1257-1375
198
linker smudge, 1304-1577
199
Endonuclease yellow, 1581-1752
200
RNaseH-like wheat, 1767-2020
201
JAB salmon, 2103-2234
202
203
""")
204
        cmd.do("color yellow, PRP8_h* and resi 1581-1752")  # rt
205
        cmd.do("color wheat, PRP8_h* and resi 1767-2020")   # rh
206
        cmd.do("color salmon, PRP8_h* and resi 2103-2234")  # jab
207
        cmd.do("color smudge, PRP8_h* and resi 1304-1577")  # linker
208
        cmd.do("color skyblue, PRP8_h* and resi 812-1303")  # rt
209
    elif arg.startswith('prp8'):
210
        print(
211
"""
212
select Prp8N, Prp8 and resi 1-870
213
select Prp8Large, Prp8 and resi 871-1827
214
select Prp8RH, Prp8 and resi 1828-2106
215
select Prp8RT, Prp8 and resi 871-1375
216
select Prp8linker, Prp8 and resi 1376-1652
217
select Prp8EN, Prp8 and resi 1653-1824
218
select Prp8afinger, Prp8 and resi 1583-1610
219
""")
220
        cmd.do("color skyblue, PRP8_y* and resi 885-1251")  # rt
221
        cmd.do("color cyan, PRP8_y* and resi 1257-1375")    # thumb/x
222
        cmd.do("color smudge, PRP8_y* and resi 1376-1649")  # linker
223
        cmd.do("color wheat, PRP8_y* and resi  1840-2090")  # rh
224
        cmd.do("color salmon, PRP8_y* and resi 2150-2395")  # jab
225
        cmd.do("color yellow, PRP8_y* and resi 1650-1840")  # endo
226
    elif arg.startswith('yprp8'):
227
        print(
228
"""
229
select Prp8N, Prp8 and resi 1-870
230
select Prp8Large, Prp8 and resi 871-1827
231
select Prp8RH, Prp8 and resi 1828-2106
232
select Prp8RT, Prp8 and resi 871-1375
233
select Prp8linker, Prp8 and resi 1376-1652
234
select Prp8EN, Prp8 and resi 1653-1824
235
select Prp8afinger, Prp8 and resi 1583-1610
236
""")
237
        cmd.do("color skyblue, PRP8_* and resi 885-1251")  # rt
238
        cmd.do("color cyan, PRP8_* and resi 1257-1375")    # thumb/x
239
        cmd.do("color smudge, PRP8_* and resi 1376-1649")  # linker
240
        cmd.do("color wheat, PRP8_* and resi  1840-2090")  # rh
241
        cmd.do("color salmon, PRP8_* and resi 2150-2395")  # jab
242
        cmd.do("color yellow, PRP8_* and resi 1650-1840")  # endo
243
    elif arg.startswith(''):
244
        if 'hjab' in arg.lower():
245
            cmd.select('PRP8_h* and resi 2103-2234')
246
        if 'hlinker' in arg.lower():
247
            cmd.select('PRP8_h* and resi 1304-1577')
248
        if 'hrt' in arg.lower():
249
            cmd.select('PRP8_h* and resi 812-1303')
250
        if 'hrh' in arg.lower():
251
            cmd.select('PRP8_h* and resi 1767-2020')
252
        if 'he' in arg.lower():
253
            cmd.select('PRP8_h* and resi 1581-1752')
254
    elif arg == 'align' or arg=='a':
255
        cmd.do("""
256
    align /5gm6//6, /5lj3//V;
257
    align /5mps//6, /5lj3//V;
258
    align /6exn//6, /5lj3//V;
259
    align /5y88//D, /5lj3//V;
260
    align /5ylz//D, /5lj3//V;
261
    """)
262
    else:
263
        spl_help()
264
265
cmd.extend('spl', spl)
266
267
def g2():
268
    txt = """color gray, all;
269
    color yellow, chain B;
270
    color red, resi 788-824;
271
    color yellow, resi 828-866;
272
    color forest, resi 476-490;
273
    """
274
    color_by_text(txt)
275
    cmd.color('pink', 'resi 120')
276
    cmd.color('pink', 'resi 2')
277
278
def __spl_color():
279
    for m in mapping:
0 ignored issues
show
Comprehensibility Best Practice introduced by
The variable mapping does not seem to be defined.
Loading history...
280
        protein = m[0]
281
        chain = m[1]
282
        color = m[2]
283
        print('\_' + ' '.join([protein, chain, color]))
284
        cmd.do('color ' + color + ', chain ' + chain)
285
        # cmd.do('color firebrick, chain V') # U6
286
287
def _spl_color():
288
    """Color spl RNAs (for only color spl RNA and use 4-color code for residues see `spl2`)
289
    """
290
    AllObj = cmd.get_names("all")
291
    for name in AllObj:
292
        if 'Exon' in name or 'exon' in name:
293
            cmd.color('yellow', name)
294
        if 'Intron' in name or 'intron' in name or '5splicing-site' in name:
295
            cmd.color('gray40', name)
296
        if '3exon-intron' in name.lower():
297
            cmd.color('gray20', name)
298
        if name.startswith("U2_snRNA"):
299
            cmd.color('forest', name)
300
        if name.startswith("U5_snRNA"):
301
            cmd.color('blue', name)
302
        if name.startswith("U4_snRNA"):
303
            cmd.color('orange', name)
304
        if name.startswith("U6_snRNA"):
305
            cmd.color('red', name)
306
307
    cmd.do('color gray')
308
309
    # trisnrp
310
    cmd.do('color orange, chain V') # conflict
311
    cmd.do('color red, chain W')
312
    cmd.do('color blue, chain U')
313
    #
314
    cmd.do('color blue, chain 5')
315
    cmd.do('color forest, chain 2')
316
    cmd.do('color red, chain 6')
317
    cmd.do('color orange, chain 4')
318
    cmd.do('color yellow, chain Y')
319
    # shi
320
    cmd.do('color blue, chain D') # u5
321
    cmd.do('color forest, chain L') # u2
322
    cmd.do('color red, chain E') # u6
323
    cmd.do('color yellow, chain M')
324
    cmd.do('color yellow, chain N')
325
    # afte branch
326
    cmd.do('color blue, chain U') # u5
327
    cmd.do('color forest, chain Z') # u2
328
    cmd.do('color red, chain V') # u6
329
    cmd.do('color yellow, chain E')
330
    cmd.do('color black, chain I')
331
    # 5WSG
332
    # Cryo-EM structure of the Catalytic Step II spliceosome (C* complex) at 4.0 angstrom resolution
333
    cmd.do('color blue, chain D') # u5
334
    #cmd.do('color forest, chain L') # u2
335
    cmd.do('color yellow, chain B')
336
    cmd.do('color yellow, chain b')
337
    cmd.do('color black, chain N')
338
    cmd.do('color black, chain M')
339
340
    cmd.do('color black, chain 3') # orange
341
    cmd.do('color black, chain E') # yellow
342
    cmd.do('color black, chain i')
343
    cmd.do('color black, chain e')
344
345
    cmd.do('color black, chain e')
346
347
    cmd.do('color dirtyviolet, chain L') # bud31
348
    cmd.do('color rasberry, chain L') # CERF1
349
350
    cmd.do('color skyblue, chain A') # PRP8
351
    cmd.do('color grey60, chain B') # BRR2
352
    cmd.do('color dirtyiolet, chain L') # BUD31
353
    cmd.do('color rasberry, chain O') # CEF1
354
    cmd.do('color rasberry, chain S') # CLF1
355
    cmd.do('color dirtyviolet, chain P') # CWC15
356
    cmd.do('color lightteal, chain D') # CWC16/YJU2
357
    cmd.do('color ruby, chain M') # CWC2
358
    cmd.do('color violetpurple, chain R') # CWC21
359
    cmd.do('color bluewhite, chain H') # CWC22
360
    cmd.do('color deepteal, chain F') # CWC25
361
    cmd.do('color black, chain I') # Intron
362
    cmd.do('color dirtyviolet, chain G') # ISY1
363
    cmd.do('color palegreen, chain W') # LEA1
364
    cmd.do('color palegreen, chain Y') # Msl1
365
    cmd.do('color lightpink, chain K') # PRP45
366
    cmd.do('color smudge, chain Q') # Prp16
367
    cmd.do('color grey70, chain t') # Prp19
368
    cmd.do('color lightblue, chain J') # PRP46
369
    cmd.do('color chocolate, chain N') # SLT11/ECM2
370
    cmd.do('color grey70, chain s') # Snt309
371
    cmd.do('color slate, chain C') # SNU114
372
    cmd.do('color brightorange, chain T') # SYF1
373
    cmd.do('color forest, chain Z') # U2
374
    cmd.do('color density, chain U') # U5
375
    cmd.do('color deepblue, chain b') # U5_Sm
376
377
    cmd.do('bg gray')
378
    # cmd.do('remove (polymer.protein)')
379
380
    cmd.set("cartoon_tube_radius", 1.0)
381
    ino()
0 ignored issues
show
Comprehensibility Best Practice introduced by
The variable ino does not seem to be defined.
Loading history...
382
383
def spl2():
384
    """Color spl RNAs and use 4-color code for residues (for only color spl RNA see `spl`)
385
    """
386
387
    AllObj = cmd.get_names("all")
388
    for name in AllObj:
389
        if 'Exon' in name or 'exon' in name:
390
            cmd.color('yellow', name)
391
        if 'Intron' in name or 'intron' in name or '5splicing-site' in name:
392
            cmd.color('gray40', name)
393
        if '3exon-intron' in name.lower():
394
            cmd.color('gray20', name)
395
        if name.startswith("U2_snRNA"):
396
            cmd.color('forest', name)
397
        if name.startswith("U5_snRNA"):
398
            cmd.color('blue', name)
399
        if name.startswith("U4_snRNA"):
400
            cmd.color('orange', name)
401
        if name.startswith("U6_snRNA"):
402
            cmd.color('red', name)
403
404
    cmd.do('color gray')
405
406
    # trisnrp
407
    cmd.do('color orange, chain V') # conflict
408
    cmd.do('color red, chain W')
409
    cmd.do('color blue, chain U')
410
    #
411
    cmd.do('color blue, chain 5')
412
    cmd.do('color forest, chain 2')
413
    cmd.do('color red, chain 6')
414
    cmd.do('color orange, chain 4')
415
    cmd.do('color yellow, chain Y')
416
    # shi
417
    cmd.do('color blue, chain D') # u5
418
    cmd.do('color forest, chain L') # u2
419
    cmd.do('color red, chain E') # u6
420
    cmd.do('color yellow, chain M')
421
    cmd.do('color yellow, chain N')
422
    # afte branch
423
    cmd.do('color blue, chain U') # u5
424
    cmd.do('color forest, chain Z') # u2
425
    cmd.do('color red, chain V') # u6
426
    cmd.do('color yellow, chain E')
427
    cmd.do('color black, chain I')
428
    # 5WSG
429
    # Cryo-EM structure of the Catalytic Step II spliceosome (C* complex) at 4.0 angstrom resolution
430
    cmd.do('color blue, chain D') # u5
431
    #cmd.do('color forest, chain L') # u2
432
    cmd.do('color yellow, chain B')
433
    cmd.do('color yellow, chain b')
434
    cmd.do('color black, chain N')
435
    cmd.do('color black, chain M')
436
437
    cmd.do('color black, chain 3') # orange
438
    cmd.do('color black, chain E') # yellow
439
    cmd.do('color black, chain i')
440
    cmd.do('color black, chain e')
441
442
    cmd.do('bg gray')
443
    cmd.do('remove (polymer.protein)')
444
445
    cmd.color("red",'resn rG+G and name n1+c6+o6+c5+c4+n7+c8+n9+n3+c2+n1+n2')
446
    cmd.color("forest",'resn rC+C and name n1+c2+o2+n3+c4+n4+c5+c6')
447
    cmd.color("orange",'resn rA+A and name n1+c6+n6+c5+n7+c8+n9+c4+n3+c2')
448
    cmd.color("blue",'resn rU+U and name n3+c4+o4+c5+c6+n1+c2+o2')
449
    cmd.set("cartoon_tube_radius", 1.0)
450
    ino()
0 ignored issues
show
Comprehensibility Best Practice introduced by
The variable ino does not seem to be defined.
Loading history...
451
452
453
def x():
454
    spl_extract()
0 ignored issues
show
Comprehensibility Best Practice introduced by
The variable spl_extract does not seem to be defined.
Loading history...
455
    spl_color()
0 ignored issues
show
Comprehensibility Best Practice introduced by
The variable spl_color does not seem to be defined.
Loading history...
456
cmd.extend("x", x)
457
458
def _spli():
459
    """
460
    # this trick is taken from Rhiju's Das code
461
    color red,resn rG+G and name n1+c6+o6+c5+c4+n7+c8+n9+n3+c2+n1+n2
462
    color forest,resn rC+C and name n1+c2+o2+n3+c4+n4+c5+c6
463
    color orange, resn rA+A and name n1+c6+n6+c5+n7+c8+n9+c4+n3+c2
464
    color blue, resn rU+U and name n3+c4+o4+c5+c6+n1+c2+o2
465
466
    #
467
    #cmd.color("yellow", "*intron*")
468
    #cmd.color("yellow", "*exon*")
469
470
    #cmd.show("spheres", "inorganic")
471
    #cmd.color("yellow", "inorganic")
472
    """
473
    cmd.color("orange", "U4_snRNA*")
474
    cmd.color("red", "U6_snRNA*")
475
    cmd.color("blue", "U5_snRNA*")
476
    cmd.color("green", "U2_snRNA*")
477
    cmd.color("red",'resn rG+G and name n1+c6+o6+c5+c4+n7+c8+n9+n3+c2+n1+n2')
478
    cmd.color("forest",'resn rC+C and name n1+c2+o2+n3+c4+n4+c5+c6')
479
    cmd.color("orange",'resn rA+A and name n1+c6+n6+c5+n7+c8+n9+c4+n3+c2')
480
    cmd.color("blue",'resn rU+U and name n3+c4+o4+c5+c6+n1+c2+o2')
481
482
try:
483
    from pymol import cmd
484
except ImportError:
485
    print("PyMOL Python lib is missing")
486
else:
487
488
    #cmd.extend("spl", spl)
489
    cmd.extend("spl2", spl2)
490
491