tag:blogger.com,1999:blog-40239991563455514422024-03-18T20:23:37.193-07:00Breath Mints for PenguinsSean Johnsonhttp://www.blogger.com/profile/12906055564149166723noreply@blogger.comBlogger108125tag:blogger.com,1999:blog-4023999156345551442.post-2017991555537306252022-12-31T13:34:00.002-08:002023-02-27T19:00:53.582-08:00More correspondence about religion<p>After 6 years of suspense (see my first comment on this post: <a href="http://breathmintsforpenguins.blogspot.com/2016/06/musings-on-meaning-of-meaning-and.html">http://breathmintsforpenguins.blogspot.com/2016/06/musings-on-meaning-of-meaning-and.html</a>), my thoughtful Christian friend got back to me and we <strike>continued for a while</strike> brought it to a thrilling conclusion.</p><p>I thought it was a fun conversation, so I'm posting (a somewhat edited for brevity and clarity) my part of it here. I haven't asked for permission to post my friend's comments, so I'll summarize those. I guess if they come across this and want their part included verbatim, I'll replace with the full, unedited correspondence. Also skipping a big chunk towards the end because it gets complicated, and probably boring to read for people other than the participants.</p><span><a name='more'></a></span><p><b>2016</b></p><p><i><b>Friend:</b></i></p><p>[Have you seriously considered the possibility of the reality of the Gospel and the God of Christianity?]</p><p><i><b>Me:</b></i></p><p>I don't presume to be able to know whether He exists or not. The most I can say is that I desperately hope that He doesn't. To me, the part of Christian cosmology that most demands attention is not a loving God, but an eternal Hell. Without a Hell, what is the point of a savior-God?</p><p>So there are three possibilities:</p><p>God does not exist: Then I ought to appreciate what a spectacular experience it is to have life, and I ought to be good to other people and animals.</p><p>God exists, but Hell does not: Same as above.</p><p>God exists, and so does a place where some people experience eternal pain: This possibility is horrifying and repugnant, so for the sake of my own sanity, I choose not to think too deeply about it anymore. In the past when I did take this possibility seriously, it led to some pretty bizarre conclusions about morality.</p><p>So, whether or not heaven exists does not seem to me to be such an important question. If I cease to exist 5 minutes from now, then my life will still have been a fantastic miracle, even though it has been imperfect. Spending very much time thinking about the possibility of heaven would make it harder to appreciate the life I already have, and distract from the task of being good to people in this life. It would be like how it is unhealthy for a married person to fantasize about the perfect spouse. Much better to learn to appreciate the actual spouse and work towards harmony in the actual marriage.</p><div><b>2022</b></div><div><i><br /></i></div><div><i><b>Friend:</b></i></div><div><i><br /></i></div><div>[Sorry for taking 6 years to get back to you about, I wasn't offended, I just got busy and forgot about this conversation. I think God exists and so does Hell, and I think you may be willfully ignoring the reality of Hell and the solution (salvation through Christ), just because Hell scares you. If you treated the idea of COVID-19 the same way you treat the idea of Hell, that would be hypocritical/inconsistent (or something like that, but not exactly). Ignoring a solution just because the problem it solves is difficult to deal with should not be a valid approach in any arena.]</div><div><br /></div><div><br /></div><div><i><b>Me:</b></i></div><div><i><br /></i></div><div><div>Great to hear from you. I think that it is fun and useful to reflect on and try to articulate what we believe and why, and what that means in terms of how we should live. So, I won’t turn down an invitation to do so.</div><div><br /></div><div>First of all, I think creation is wonderful, and I’m happy to be a part of it. I totally understand how someone can look at the stars and the trees, and hear music, and feel love, and experience all of that as evidence for the existence of God. But it is a huge step, without any evidence, to go from that vague spiritual feeling to believing in a very specific doctrine such as the Apostle’s Creed.</div><div><br /></div><div>As far as belief in COVID vs belief in Hell, or any other terrible threat. I hope that my belief in each is proportional to the evidence that I’m aware of. In the case of COVID I have some frame of reference, because I’ve experienced other respiratory diseases, and I’ve extensively studied microbiology. In the case of vaccines, I know that I’ve been vaccinated against a bunch of diseases, such as polio, which I’ve read about and seen pictures of, but never caught. So, when the medical community tells me that I could be at risk of COVID infection, and that vaccination is a way to mitigate some of that risk, it seems reasonable.</div><div><br /></div><div>In the case of Hell, I am unaware of any evidence for such a place (state of existence?), despite having spent a lot of time thinking about it and researching it. Most people who believe in Hell seem to believe in it because their parents did, or they claim personal revelation arrived at through prayer. On the other hand, I am aware of many instances of people making up scary stories for the purposes of political or social control or out of a sense of wishful thinking that those who do bad things will be punished. For example, parents invented Santa and Krampus, and people in ancient India invented Karma. To me, the doctrine of Hell looks a lot like one of these things that someone made up, and I have never seen, heard, or experienced anything that would make me think otherwise.</div><div><br /></div><div>As I said in my previous email, I also very much hope that Hell is something someone made up, because I hope that the universe is not the kind of place where anyone suffers for eternity. I take comfort that all available evidence points that way. I was pretty miserable when I believed in Hell. I think in part because I couldn’t help but empathize with all of the people who died as non-Christians, including one of my closest high-school friends. I have trouble understanding how anyone can believe in Hell and not be either depressed or a sociopath. Many Christians I know seem to be neither depressed nor sociopaths, so I conclude that they either don’t actually believe in Hell, or that they have a vastly different conception of it from what I had.</div><div><br /></div><div>To specifically answer your question “if there is a hell (a spiritual and physical place that is COMPLETELY separate from God and his goodness), then the fact that the God, who already exists, is able/willing to save people from it is presumably a good and valuable thing. Would you agree with that?” I suppose I agree with that, but it’s little consolation when my friend is burning and there is no way he can be saved, because he is already dead. The Gospel is about as much of a consolation as winning the lottery when serving life in a supermax.</div><div><br /></div><div>I don’t think that my nonbelief in Hell is a product of wishful thinking or sticking my head in the sand. There are other terrible things that I think actually are true. For example, I believe that billions of chickens and pigs are raised and slaughtered in horrific conditions, and that there are millions of people suffering due to wars and political strife, and that most murderers and rapists are never brought to justice. There are also things that I wish were true, but I don’t believe are, for example I wish that Heaven would exist, and that there were cures for every disease, and I hope that the Easter bunny will bring me a pound of chocolate next year.</div><div><br /></div><div>I hope that my beliefs are calibrated with my observations, and I hope that my actions are calibrated with my beliefs. In other words, I hope that I am using my time and abilities, whether they are a gift from God, or the vomit from a random universe, to improve the terrible that seems real, and to actualize the good that seems possible.</div><div style="font-style: italic;"><br /></div></div><div><i><b>Friend:</b></i></div><div><i><br /></i></div><div>[I think creation, conscience, and the message of the Bible are strong evidence for the existence of God and Hell. The message of the Gospel is very consoling. I think you're a moral person, but wrong about God, and you could be missing out on real hope by ignoring God]</div><div><br /></div><div><i><b>Me:</b></i></div><div><i><br /></i></div><div><div>I’m with you on your first point. I think the universe sure seems like a miracle.</div><div><br /></div><div>Regarding your second point, you will probably not be surprised to hear that I find theistic arguments for the existence of the human conscience much less persuasive than the hypothesis that the human conscience is the product of evolution through natural selection. Evidence in support of that hypothesis are:</div><div><br /></div><div>1. People vary widely in the strength of their conscience. Sociopaths do exist, and so do people who are highly empathetic and prone to feeling guilty.</div><div><br /></div><div>2. Animals, like dogs and cats, can be artificially selected to be more (or less) empathetic/prosocial. So it is plausible that natural selection also led to a certain level of prosocial behavior in most humans.</div><div><br /></div><div>3. The human sense of right and wrong is very strongly correlated with what would be advantageous for propagating our genes (or the genes of people related to us). Most of us feel our strongest moral obligations towards humans who are younger than us and closely related to us. The more genetically or culturally different someone is from us, the less we care about their wellbeing.</div><div><br /></div><div>4. Conjecture: You feel pain if you cut your finger when nobody is looking because physical pain is an evolved mechanism that makes creatures who move around less likely to damage themselves and have fewer offspring. You feel guilt if you engage in antisocial behavior when nobody is looking because people who betray their relatives tend to end up with fewer relatives, so the guilty gene has a selective advantage over the sociopath gene.</div><div><br /></div><div>Regarding your third point, and the rest of your email, to me the Bible is just an old book, and churches are just social clubs. As a teenager, I took a lot of inspiration from some of the anecdotes from the life of Jesus. For example, when Jesus told his disciples, “Love your enemies”, and “Sell all your possessions and give the money to the poor”, and when Peter cut the ear off of the priest’s servant and Jesus put it back on. That seemed, and still does seem, radical and subversive. But the Christians I knew were neither radical nor were they subversive, they were just the same as everyone else (and it was never fair to expect them to be exceptional).</div><div><br /></div><div>To be clear, I don’t believe in any God. Not a vengeful narcissistic God, not an all-loving God, not an edgy subversive anarchist God. No God whatsoever. I think there is plenty about the universe that I don’t understand. In particular I have absolutely no clue why we experience consciousness. But I’m not bothered by not knowing, and I don’t feel a need to make things up to fill in the gaps.</div><div><br /></div><div>Regarding whether the Gospel is consoling or not. I’m still not sure what it is supposed to be consoling me about. I don’t feel wracked with guilt, and I’m not particularly scared of dying even though I don’t think there is an afterlife. I don’t perceive any kind of a God-shaped or religion-shaped hole in my life.</div><div><br /></div><div>It could be that I’m just flying high because life for me is objectively pretty good right now. But I don’t think that’s what it is, because I’ve also been through plenty of adversity, so I do have some perspective. I don’t mean to claim that I’ve seen and done it all, but I have had at least a glimpse of how brutal and hopeless life can seem and even be. If I were going to have a road to Damascus moment, I guess it would have happened by now. I don’t think very many people change religion after age 30.</div><div><br /></div><div>In practical terms, if I really took the Bible and the Gospel seriously, how would I feel different and how should I behave differently than I do as an atheist who is mostly happy and tries mostly to act in prosocial ways?</div><div style="font-style: italic;"><br /></div></div><div style="font-style: italic;"><b>Friend:</b></div><div style="font-style: italic;"><br /></div><div>[Is your approach to God purely scientific which leads you to think that God is made up, and the comments about hell not the cause but the effects of your stance? I don't know how you would feel or act differently if you were a Christian, it's different for different people. You seem very conscientious, why is that?]</div><div><br /></div><div><i><b>Me:</b></i></div><div><i><br /></i></div><div>["Is your approach to God purely scientific which leads you to think that God is made up, and the comments about hell not the cause but the effects of your stance?"]</div><div><br /></div><div><div>This is accurate. But it also brushes over some history. I used to believe in both God and Hell, and I was absolutely terrorized by the concept of Hell. I thought about it a lot, and about what the implications of it were. So, I would say that the doctrine of Hell may have something to do with why I left the church to begin with, but it is not why I remain non-religious. I remain non-religious because religions all seem like nonsense to me, and I can’t believe things that seem like nonsense, even if I wanted to believe them, and even if there were psychological benefits to believing them (which there might be for some, I don’t know).</div><div><br /></div><div>When I think about and discuss Christianity, the doctrine of Hell is the center of my frame of reference. It doesn’t seem to me to matter how “loving” God is, I still would be terrified and distraught to live in a universe where the population of Hell is greater than zero (and I indeed was terrified and distraught when I thought I lived in such a universe). I really really really do not like the doctrine of Hell, no matter how much “but actually, God is loving!” it gets watered down with. I think it does tremendous damage to anyone who believes in it, particularly children (but I might be unfairly over-extrapolating from my own personal experience).</div><div><br /></div><div>["Do you think that changes to your feelings and actions in this life are the only possible positive result of believing in God?"]</div></div><div><br /></div><div>If there is a heaven, I want to go there. If there is a Hell, I for sure want to avoid going there (and for everyone else to avoid going there also). Also, I want to have as accurate as possible of a world view, I want to believe whatever the true cosmology is (I guess mostly for aesthetic reasons?). I don’t really have a concept for anything beyond feelings and actions, between the two of them, they seem to capture the whole of human existence (whether in this life or some other life).</div><div><br /></div><div>["You seem very conscientious, why is that?"]</div><div><div><br /></div><div>I think compassion can be derived with a simple proof from first principles, regardless of why we came to have consciousness (and independent of why we feel a drive towards compassion).</div><div><br /></div><div>1. I experience consciousness, and I can observe that my conscious experience is made up of joy and suffering.</div><div>2. I assign positive value to my own joy and negative value to my own suffering.</div><div>3. People and other animals resemble me in their physical form and behavior. It seems very likely that they also experience consciousness and the joy and suffering that goes along with it.</div><div>4. I cannot think of any reason why my own joy or suffering should matter more than anyone else’s. Indeed, it seems much more reasonable to assert that everyone’s joy and suffering matter the same amount.</div><div>5. Therefore, I should act in ways that maximize the joy and minimize the suffering of others, even if, at times, I have to suffer for it.</div><div><br /></div><div>I have a friend who donates blood every eight weeks. I will always remember his response when someone asked him why. He said,</div><div><br /></div><div>“Because people fucking need it.”</div><div><br /></div><div>I really don’t think morality or theology has to be any more complicated than that. Be nice to people and animals because they need you to be nice to them. </div><div><br /></div><div>That’s it!</div></div><div><br /></div><div><i><b>Friend:</b></i></div><div><i><br /></i></div><div>[Some definitions of words, they thought we had different ideas about]</div><div><i><br /></i></div><div><i><b>Me:</b></i></div><div><i><br /></i></div><div>[Some discussion about terminology]</div><div><br /></div><div><i><b>Friend:</b></i></div><div><i><br /></i></div><div>[More discussion about terminology. Martin Luther was also very troubled by the idea of Hell. Hell is a place of terrible physical and spiritual suffering. God and goodness are the same thing, can you give any counterexamples?]</div><div><br /></div><div><i><b>Me:</b></i></div><div><i><b><br /></b></i></div><div>[yet more discussion about terminology]</div><div><br /></div><div><div>Yeah, Martin Luther was another admirable radical. I think everyone should follow his example and deeply question the beliefs and traditions that they were brought up with, despite how uncomfortable that can be (and dangerous for Martin Luther, but thankfully not so much for me). Otherwise how can anyone be confident in the truth of what they believe, or confront the limits of their knowledge? It doesn't really surprise me that when confronting similar social/moral/theological questions, Martin Luther and I came to different conclusions. We are different people with different backgrounds and access to different information.</div><div><br /></div><div>It looks like your conception of the Christian Hell is not so different from mine after all.</div><div><br /></div><div>I think God is a fictional character, so I don't have opinions about the nature of God any more than I have opinions about the nature of dragons (I also don't hate God any more than I hate dragons). I also don't have a strong concept of good or evil. The closest concepts that seem coherent to me are joy and suffering. Hypothetically speaking, to the extent that God created a universe containing Hell (an eternal place of extreme suffering, as we've now agreed) and created people who he knew some of which would eventually experience Hell, then I can't see how God could be considered good. That sounds evil to me, irrespective of how delightful free will and Heaven are.</div><div><br /></div><div><b><i>Friend:</i></b></div><div><b><i><br /></i></b></div><div>[Are parents evil for having children, even though they know that those children will inevitably experience some suffering, regardless of how great the parents are?]</div><div><br /></div><div><b><i>Me:</i></b></div><div><b><i><br /></i></b></div><div>All I can say is that when I was a Christian, I wished I'd never been born. I don't think it is responsible for people who believe in Hell to have children. For others, the risk calculation is much different, because there are no eternal consequences. I don't think temporary suffering is an ultimate evil, I think eternal suffering is an ultimate evil. </div><div><br /></div><div>I happen to have thought about this topic a lot. I'm pasting below the contents of an essay I wrote in 2010 (when I was in the middle/towards the end of the process of losing my faith) about this. (I've never shared it with anyone, because I'm aware that it is offensive, but you did ask...)</div></div><div><i><b><br /></b></i></div><div>Why it is unethical for anyone who believes in Hell to have children</div><div><br /></div><div>[text of essay omitted. One sentence summary: nobody would voluntarily choose to be born into a universe where they would have a non-zero chance of experiencing eternal terrible pain, so it would violate the Golden Rule, and be a cruel gamble to force anyone to be born into such a universe.]</div><div><br /></div><div><i><b>Both together:</b></i></div><div><i><b><br /></b></i></div><div>[Some discussion about whether a good God is compatible with the existence of Hell and with the existence of people who can experience Hell]</div><div><br /></div><div><b><i>Me:</i></b></div><div><b><i><br /></i></b></div><div>I think life can be meaningful and joyous (and full of love!) even if there is no possibility for anyone to burn for eternity.<i style="font-weight: bold;"> </i></div><div><i style="font-weight: bold;"><br /></i></div><div><i style="font-weight: bold;">Friend:</i></div><div><i style="font-weight: bold;"><br /></i></div><div>How? [...]</div><div><br /></div><div><i><b>Me:</b></i></div><div><i><b><br /></b></i></div><div><div>I don't see any connection between love and eternal torture. I certainly don't see how the existence or non-existence of one could entail the existence or non-existence of the other. I'm actually quite happy that my conception of love doesn't entail eternal torture for me or anyone else, that seems like the best kind of love.</div><div><br /></div><div style="font-weight: bold;"><br /></div></div><div><i><b>Friend:</b></i></div><div><i><b><br /></b></i></div><div><i>[Do you see any connection between love and pain?]</i></div><div><i><b><br /></b></i></div><div><i><b>Me:</b></i></div><div><i><b><br /></b></i></div><div><div>I see some connection there, but I don't think they are exact opposites. I also don't think that the absence of love is pain. For me, the absence of love is closer to indifference or ennui. </div><div><br /></div><div>I read somewhere recently "a common facet of romantic love is an (often very strong) fear that they'll stop loving you. Unconditional love doesn't have that, you just want what's best for them." </div><div><br /></div><div>That seemed really insightful.</div><div><br /></div><div>There is a connection here to the Stoic (or Buddhist, but I'm less familiar with Buddhism than with Stoicism) conception of pain/suffering as unfulfilled desire. The absence of love, when you deeply desire love, is painful. The pain is more strongly connected to desire than to love.</div><div><br /></div><div>Not having what you want (whether that is love or something else) causes suffering. Love is just a common thing that people tend to want.</div><div><br /></div><div>In any case, I don't think that the existence of pain entails the existence of eternal pain.</div></div><div><br /></div><div><b><i>Friend:</i></b></div><div><b><i><br /></i></b></div><div>[It's possible that both eternal love and eternal pain exist]</div><div><br /></div><div><b><i>Me:</i></b></div><div><b><i><br /></i></b></div><div><div>Yes, it could be that some people suffer eternally. I sure hope that's not the case though!</div><div><br /></div><div><b><i>Friend:</i></b></div><div style="font-style: italic; font-weight: bold;"><br /></div><div>[But if both do exist, and there is a God loves us and wants everyone to experience eternal love, we should want to learn more about that God]</div><div><br /></div><div><b><i>Me:</i></b></div><div><b><i><br /></i></b></div><div>[...]</div><div><b><i><br /></i></b></div><div>My hope is in the Lord, that he doesn't exist, or at least that he will leave us alone and let us pass into oblivion instead of forcing us into this terrible dichotomy between heaven and hell, where, by the criteria set in the gospel (Mark 16:16), most of us will be condemned.</div><div><br /></div><div><b><i>Friend:</i></b></div><div><b><i><br /></i></b></div><div>[How can you want both to be left alone by God, and to not experience Hell. Being left along by God is the definition of Hell.]</div><div><br /></div><div><b><i>Me:</i></b></div><div><b><i><br /></i></b></div><div><div>It's not that complicated, I just don't want anyone to suffer eternally. In church I learned that some people are destined to suffer for eternity, and you seem to also think that some people will suffer for eternity. I hope that isn't true. When I thought that was true, I wanted to the universe, including myself to not exist.</div><div><br /></div><div>The God stuff, I don't really care about one way or another. </div><div><br /></div><div><i><b>Friend:</b></i></div><div><i><b><br /></b></i></div><div>[... I believe God has done everything to make sure this won't happen for anyone, short of forcing people to receive that benefit ...]</div><div><br /></div><div><b><i>Me:</i></b></div><div><b><i><br /></i></b></div><div><div>I'm all for forcing, if that's what it takes. God is a fool if he thinks humans are smart enough to know what's good for them. I would sacrifice free will (indeed, I would sacrifice the entire universe) to prevent one person from suffering eternally.</div><div><br /></div><div><b><i>Friend:</i></b></div><div><b><i><br /></i></b></div><div>[You said you once believed that Hell was real, did that ever cause you to trust deeply in God or share your faith with others]</div><div><br /></div><div>[Is the reason you don't believe in Hell because you think God is made up?]</div><div><br /></div><div><b><i>Me:</i></b></div><div><b><i><br /></i></b></div><div>[ Yes ...]</div><div><br /></div><div>I don't remember ever not being deeply troubled by the existence of Hell. The Christian experience was always kind of scary for me. I was motivated (I guess by a fear that my friends and family would go to Hell?) to share my faith with others, and even considered (I'm not sure for how long, but I do remember considering it) becoming a pastor. [ ... ]. I took faith extremely seriously. For sure too seriously for my own mental health.</div><div><br /></div><div>[...]</div><div><br /></div><div>I am not aware of any evidence for the existence of the kind of God whose existence entails the existence of eternal suffering. I think the existence of consciousness is a little spooky and could reasonably be interpreted as evidence for some kind of God. The assertion that the absence of God is eternal suffering is a wild (and wildly pessimistic) assertion.</div><div><br /></div><div><b><i>Friend:</i></b></div><div><b><i><br /></i></b></div><div>[Do you ever feel guilty and regretful? How do you deal with that? Is the process different now that you don't believe in God from when you did? Is it better?]</div><div><br /></div><div>[... I don't think it's pessimistic or optimistic to assert that Hell could exist, just realistic. ]</div><div><br /></div><div><b><i>Me:</i></b></div><div><b><i><br /></i></b></div><div><div>I sometimes feel guilty about things. I try to deal with it in a practical way. Apologizing and trying to undo, as much as possible, whatever harm I cause. Sometimes I hurt people in ways that I can't make amends for. I find that writing helps a lot. I write about what I can do to make sure I don't hurt people in the same way in the future, and then I occasionally revisit my collection of writings, and reflect on if I'm actually following through. Sometimes I can't sleep until I've taken the time to write about something that is bothering me. I try to focus on what I can change and do better instead of ruminating over past mistakes. For me, focusing on the practical aspects seems to be more effective in helping me move on and to hurt people less in the future than the embrace of a merciful God. I don't want to throw shade on the mechanisms that other people use to cope, it could just be that I'm older now, and people tend to get better at coping as they age and accumulate experience and perspective. I don't pretend to have attained a level of emotional maturity that would be inaccessible through a Christian approach. Atheism seems to be working out ok for me though.</div><div><br /></div><div>[...]</div><div style="font-style: italic;"><br /></div><div style="font-style: italic;"><i><b>Both together:</b></i></div><div style="font-style: italic;"><i><b><br /></b></i></div><div>[ nit picking about details ]</div><div><br /></div><div><b><i>Me:</i></b></div><div><b><i><br /></i></b></div><div><div>Are we done now? I feel like we've done a sufficiently thorough tour of eschatology.</div><div style="font-style: italic; font-weight: bold;"><br /></div></div><div><i><b>Friend:</b></i></div><div><i><b><br /></b></i></div><div><div>Sure. Maybe to summarize: </div><div><br /></div><div>You desperately don’t want there to be eternal suffering and don’t see evidence for it. as such there’s no need for a god to rescue anyone from it, especially since it seems made up.</div><div><br /></div><div>I don’t want there to be eternal suffering but am convinced that there is sufficient enough evidence for it to be taken seriously. As such I seek to know and share god as the rescuer for all and am willing to submit my own reason to uphold biblical truths as though they were from God.</div><div><br /></div><div><b><i>Me:</i></b></div><div><b><i><br /></i></b></div><div>Seems like a fair summary.</div><div><br /></div><div><b><i>Both together:</i></b></div><div><b><i><br /></i></b></div><div>[Various parting niceties]</div></div></div></div></div></div>Sean Johnsonhttp://www.blogger.com/profile/12906055564149166723noreply@blogger.com0tag:blogger.com,1999:blog-4023999156345551442.post-73775014910298569322021-01-04T14:52:00.005-08:002021-02-24T18:47:25.026-08:00Backpropagation through graphical models for new year's resolutions and planning out priorities for the next year<p>Around New Year's every year, I take some time to reflect on the successes and failures of the past year and decide what I should prioritize for the next year. Usually I do this using a combination of paragraphs and bullet point lists.</p><p>I recently took a <a href="http://omscs.gatech.edu/cs-7643-deep-learning">deep learning class</a> where I learned about a technique called <a href="https://www.youtube.com/watch?v=Ilg3gGewQ5U">backpropagation</a>, which is used to find optimal parameters for a predictive model. It occurred to me that an analogous thought process could be used to help guide New Year's planning.</p><p>This is the first time I have gone through this exercise, so I'm making it up as I go along. If you decide to try this (or if you have already tried something similar), I would be really delighted to hear any feedback (good or bad) or suggestions you might have for improving the method. </p><span><a name='more'></a></span><p>In a backpropagation process, a model is first used to make a prediction, for example predicting what digit is in a scanned picture. Then the difference between the prediction and the actual answer is calculated. When the model makes an incorrect prediction, backpropagation can be used to calculate how much blame each model parameter deserves for the wrong prediction. Model parameters that deserve a lot of blame can be given large adjustments, and model parameters that don't deserve any blame can be left unchanged. After many cycles of predictions, backpropagation, and parameter adjustments (together called gradient descent), a model slowly gets better at making predictions.</p><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEicalQYLIwt9U_F_BrVfbWbzUXJGqQk7SOE1NeHgWwAXAR9pLgMZ8EwPKWaaQIwTh84Oi1KLFeKJB457DNQQPBUVIZTWH0snwcP8J7ghj2dVLFH4Kjx0ZbMWqljTCilwjvE71JROEzzahqf/" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="437" data-original-width="680" height="206" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEicalQYLIwt9U_F_BrVfbWbzUXJGqQk7SOE1NeHgWwAXAR9pLgMZ8EwPKWaaQIwTh84Oi1KLFeKJB457DNQQPBUVIZTWH0snwcP8J7ghj2dVLFH4Kjx0ZbMWqljTCilwjvE71JROEzzahqf/" width="320" /></a></div><br /><br /><p></p><p>To use backpropagation for life-planning, I need to first define some life-planning primitives and map them to machine learning model primitives.</p><p>The model will consist of a directed graph (preferably acyclic) of three different kinds of nodes and one kind of directed edge. Every edge and node will have a footnote. After constructing the topology of the graph, I will go through and assign a value between -1 and 1 to every edge, and use that to calculate what I should put the most effort into in the coming year, and why.</p><p>Due to the difficulty of predicting/quantifying the effects of actions, this model should not be thought of as strictly quantitative, but more as quantitative-ish. The numbers are just to help guide my subjective reasoning. The hypothesis driving this exercise is that structured reasoning about priorities is better than haphazard decision making. Making a comprehensive or completely mathematically coherent model is not my intention (and I don't think it would be possible even if I wanted to).</p><p>In addition to the graph and footnotes, there is also a section for an overall conclusion.</p><table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto;"><tbody><tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj3FI7qL6EB6aUkw1RTNrUrW3IuCDlJe1iJfhq_St4MApFtQdYynsB95AH5wNuW_HgWr96X98N1mDD4KIvND662XRt4mYvQrGEEY4vRRV7C0QgWlAIIQLUn7_DuugZMGSBXAGNyQJ2d5keC/" style="margin-left: auto; margin-right: auto;"><img alt="" data-original-height="525" data-original-width="700" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj3FI7qL6EB6aUkw1RTNrUrW3IuCDlJe1iJfhq_St4MApFtQdYynsB95AH5wNuW_HgWr96X98N1mDD4KIvND662XRt4mYvQrGEEY4vRRV7C0QgWlAIIQLUn7_DuugZMGSBXAGNyQJ2d5keC/" width="320" /></a></td></tr><tr><td class="tr-caption" style="text-align: center;">Actual picture of me after finishing this exercise<br /><br /></td></tr></tbody></table><table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto;"><tbody><tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhZM63IIt4WZCEBecGi6TBt5l3c-rBVWEfaNAdC5cqd7LvcEqI8IXQs2D17Dn2q8ZScumVDq9hD34a90xNdZgJrIRd-P2sT0MuRZgmvbkefpfqwLwbU2K_C_YZ_TtazvhRJSMxMxVf9KyX4/" style="margin-left: auto; margin-right: auto;"><img alt="" data-original-height="932" data-original-width="1250" height="478" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhZM63IIt4WZCEBecGi6TBt5l3c-rBVWEfaNAdC5cqd7LvcEqI8IXQs2D17Dn2q8ZScumVDq9hD34a90xNdZgJrIRd-P2sT0MuRZgmvbkefpfqwLwbU2K_C_YZ_TtazvhRJSMxMxVf9KyX4/w640-h478/backprop_prioritization_2.png" width="640" /></a></td></tr><tr><td class="tr-caption" style="text-align: center;">A graph of possible things I could do in 2021, and how they might make me more or less useful.<br />See discussion below for details on symbols. (a higher resolution version is available in the spreadsheet linked at the very bottom of this post)<br /><br /></td></tr></tbody></table><p><b>Objectives (triangle nodes)</b></p><p>First, I need to define what I am trying to accomplish. I'm a consequentialist utilitarian, so my objective this year, like every other year, is to reduce human and animal suffering over the short term and long term, and to avoid disappointing or alienating my friends and family too much in the process (not because I think that my friends/family are more important than anyone else, but because they are acutely sensitive to my failings, so I need to be particularly aware of their interests).</p><p>It's likely that you are not a consequentialist utilitarian, so your objectives will likely be something else, maybe "save money for a house down-payment", or "go golfing as much as possible", or "gain new followers for xyz church or political party", or "remain on good terms with my partner".</p><p>If there are multiple objectives, then we need to figure out how much to weight each one. I represent this prioritization by drawing a single combined sink node "total utility", then drawing edges from all of the other objectives into the sink objective and assigning different weights to the different edges (see Edges section below).</p><p>In my case, I rank my priorities approximately like this:</p><p>reducing human suffering >> not disappointing my family > reducing animal suffering > maintaining my personal health. </p><p>(Whether this is a justifiable ranking of priorities is beyond the scope of this post)</p><p><br /></p><p><b>Decision variables (rectangular nodes)</b></p><p>I also need to define my decision variables (or model parameters). These are the direct actions I could take, but am trying to decide whether I should take and if so, how much effort I should put into them. These are things I have a high confidence in my ability to directly influence <i>and</i> which I have not yet decided how much effort to put into (if any) over the coming year.</p><p>Enumerating possible actions can quickly become frustrating and overwhelming, so it's important to focus only on things which could potentially require a lot of time or resource commitment or have a large impact on my effectiveness, <i>and</i> which I am unsure about how much to commit to.</p><p>For example, things like "don't eat any meat", or "bike to work every day" are not decision variables for me, even though they may contribute a lot to my objectives and require substantial time and effort. However, I have zero intention of eating meat this year and complete intention to bike to work every day, so they aren't questions I'm still trying to make up my mind about.</p><p>Try to keep this as a relatively small list, between 5 and 20 possible actions. I ended up with 16 decision variables.</p><p>While trying to decide on your decision variables, you might think of lots of little things that you should do (or stop doing) but which won't require lots of resources or have a large influence on your objectives. You should write these down somewhere so you remember them, but it might not be worth the effort go through the effort of describing them in detail and going through the whole back-propagation exercise with them.</p><p>In my case, I thought of scheduling a dentist appointment and starting to take a multivitamin.</p><p>Each decision variable should have a footnote. The footnote should define in detail the range of possible commitment.</p><p>After constructing the graph, I will go back and calculate the possible contribution of each decision variable to my overall utility. I will also write out a conclusion for what I am going to try to do (or not) for this decision variable in the upcoming year.</p><p><b><br /></b></p><p><b>Hidden variables (oval nodes)</b></p><p>These are factors I can't directly control, but which are influenced by things I can control (the "decision variables"), and which may have an influence on the objectives or on other hidden variables.</p><p>The purpose of enumerating the hidden variables is to create a conceptual bridge between decision variables and the objectives to help with reasoning about how much the decision variables will influence the objectives and interact with other decision variables.</p><p>Each hidden variable should have a footnote of about 1-5 sentences in length.</p><p>Try to keep the number of hidden variables approximately the same (could be a little higher or lower) as the number of decision variables. I ended up with 18 hidden variables.</p><p><b><br /></b></p><p><b>Lines of influence (directed edges)</b></p><p>Draw a line from a node that causes a change to a node where the change is caused. For example "strength training" can improve health, so I draw an edge from "strength training" to "physical health".</p><p>The edges represent an opportunity to explicitly layout and explain causal connections.</p><p>It might be tempting to draw lots of complicated connections (reality is complicated, and everything we do is unavoidably connected to everything else we do), but try to keep the graph relatively simple. In particular try to avoid loops. If you must have a loop, it's not the end of the world, but they might make it difficult to attribute influence and run the backpropagation algorithm.</p><p>You will have to write a footnote for every edge, so if you can't think of anything insightful to write about an edge, then it's probably best to just leave it off.</p><p>I assign each edge a number between -1 and +1 indicating how strong of an influence the source node has over the destination node. -1 means that more time/effort spent on the source node will <i>decrease</i> the strength of the destination node by a lot. +1 means that more time/effort spent on the source node will <i>increase</i> the strength of the destination node by a lot. The footnote should be used to justify the value assignment.</p><p>Often times if you find yourself assigning a weight close to 0 to an edge, it might be better to just leave that (because the 0 means you don't think that the source node has much influence on the destination node). Exceptions would be if the assignment of 0 is somehow surprising, controversial, or counter-intuitive. For example in my graph, I draw -0.01 weight between "stop eating dairy products" and "animal agriculture" because I don't think my maximal dairy consumption is at a level that causes much increased demand for animal agriculture.</p><p><br /></p><p><b>Footnotes</b></p><p>I list the footnotes in alphabetical order, with edges named by combining the name of the source and destination node.</p><p>Every node and edge should have a footnote. The format and content of the footnote will depend on the type of node/edge (see above for specifics).</p><p>I made my diagram with software from <a href="https://www.diagrams.net/">https://www.diagrams.net/</a>, but I think something like graphviz or one of the many web-based graph drawing libraries, like d3 or cytoscape.js (something that has a force-directed node layout) would probably be easier and make nicer diagrams.</p><p><br /></p><p><b>Backpropagation</b></p><p>I calculate the contribution of each decision variable to the value of the sink objective node. I think of each edge as a linear transformation, so the entire graph is just a simple linear network model, which makes the backpropagation math very simple.</p><p><span>Assign 1 to the sink objective (the derivative of the sink objective with respect to itself is 1). The value of every node should be the sum of the products of the edge weights and the values of the nodes immediately downstream. This means that you can't calculate the value of a node until after calculating the values for all nodes that it points to. I wrote some python code that will do the calculation, so you don't have to worry about it!</span></p><p><span><a href="https://gist.github.com/seanrjohnson/9244b7ed086540d3a4b455dc17c88eea">https://gist.github.com/seanrjohnson/9244b7ed086540d3a4b455dc17c88eea</a></span></p><p>I note the values calculated from backpropagation below each node (blue for positive values, red for negative values). These values are technically the derivatives of the sink objective (total utility) node with respect to each of the nodes. It means that if you increased the value of that node by 1 then the value of the sink objective would increase (or decrease, if the value is negative) by the amount in blue. </p><p>The fact that this is an acyclic linear model makes the backpropagation relatively simple and intuitive. If there were loops or non-linear transformations involved, it would quickly become a headache. </p><p><br /></p><p><b>Summary</b></p><p>In addition to the footnotes, I write a conclusion with particular plans and points of action for the coming year.</p><p><br /></p><p><b>Method Conclusion and Future directions</b></p><p>Making this graph in the first place takes quite a lot of effort (I think this one took me at least 20 hours, but I didn't time it, and I was also writing this blog at the same time, which took effort). But once it is made, it should be relatively easy to revisit every year or several times a year to compare results with predictions, or add new decision or variables and think about how they would interact with your existing network.</p><p>Despite the fact that the backpropagation method from machine learning was the inspiration for this exercise, this is probably the least important step. By the time I had drawn the graph and written out all of the node footnotes, I already had a pretty good idea of what my priorities should be. Writing edge footnotes and calculating the backpropagation had somewhat diminishing returns compared to just constructing the graph. I was somewhat surprised that ranking of priorities from the backpropagation pretty closely matched my intuition and actual practice over the past few years, which suggests to me that this graph model with linear weights is actually a reasonably faithful way to mathematically represent my beliefs and priorities. Going into this exercise I thought there might be a real possibility that the math would give completely uninterpretable and useless results, but that doesn't seem to be the case.</p><p>There are a lot of extensions and improvements that could be tried, here are a few I thought of:</p><div>I could try playing around with normalization of the edge weights, like dividing all the weights of edges coming into a node by the sum of the absolute values of the incoming edge weights.</div><p>It's kind of weird that the edge weights are fixed parameters rather than learned parameters.</p><p>If other people find this approach to be useful, I would consider writing software to make it easier.</p><p><br /></p><p><b>Worked out Example</b></p><p>See the figure near the top of the post for my graph for this year. Due to the high degree of uncertainty regarding the possibility of travel and socializing because of the ongoing pandemic, many of my conclusions are "reassess at the end of spring or summer", which is a little anticlimactic.</p><p></p><p>I couldn't get tables to render very well in blogger, so here's a link to a Google Sheet with all of the node and edge footnotes, as well as a conclusion.</p><p><a href="https://docs.google.com/spreadsheets/d/1vmCISyB7Mc9tKoIoP1QoxPx0375ZrfREc8znUa6lejc/edit?usp=sharing">https://docs.google.com/spreadsheets/d/1vmCISyB7Mc9tKoIoP1QoxPx0375ZrfREc8znUa6lejc/edit?usp=sharing</a></p><p><br /></p>Sean Johnsonhttp://www.blogger.com/profile/12906055564149166723noreply@blogger.com0tag:blogger.com,1999:blog-4023999156345551442.post-86609731315729348522021-01-01T13:23:00.004-08:002021-01-01T16:58:22.735-08:00Dreaming of Grandpa<p><br /></p><span><a name='more'></a></span><p><br /></p><p>I don’t know much about my grandpa.</p><p><br /></p><p>I know I saw his ghost when I was small.</p><p><br /></p><p>I know last year, </p><p>when I wrote out everything I knew about him,</p><p>I filled both sides of a piece of yellow legal paper </p><p>with my big sloppy handwriting.</p><p>And that one sheet was all I had.</p><p><br /></p><p>I know that tonight I’m dreaming about him.</p><p><br /></p><p>It’s 1993 and we’re in the house he built himself in 1952</p><p>shortly after he married my grandma,</p><p>the house where they raised my mother</p><p>and her sister and brother</p><p>while he worked three jobs to support them.</p><p>Where I saw his ghost in the hall in 1994.</p><p><br /></p><p>I’m dreaming that he’s pale and bald,</p><p>and unlike the real 1993, I’m not a baby,</p><p>and unlike the real 1993, I know he’s dying.</p><p><br /></p><p>He smiles now and then and makes wry comments,</p><p>the way he does in grandma’s old home movies.</p><p><br /></p><p>And I can’t comprehend</p><p>how such a vibrant, loving guy,</p><p>who never failed to present his youngest daughter</p><p>with the first rosebud of spring,</p><p>could ever die of a heart too weak.</p><p><br /></p><p>And I’m standing next to him in awe</p><p>trying to make up for so many lost years</p><p>trying to learn everything I can before he fades away</p><p>wishing I could press my hand against his hand,</p><p>wondering if he’d approve</p><p>of his little grandson all grown up.</p><p><br /></p><p>And one moment we’re there in his living room,</p><p>and the next moment I’m 300 miles away,</p><p>and he’s been gone for almost 20 years.</p><p><br /></p><p>And just like 1993, </p><p>we never get the chance to hug goodbye.</p><div><br /></div>Sean Johnsonhttp://www.blogger.com/profile/12906055564149166723noreply@blogger.com2tag:blogger.com,1999:blog-4023999156345551442.post-72328139863405620612021-01-01T13:18:00.002-08:002021-01-01T16:59:23.856-08:00memorial for grandma<span><a name='more'></a></span><div><br /></div><div><br /></div><div><a href="https://www.dignitymemorial.com/obituaries/yakima-wa/anne-rhine-8818734">https://www.dignitymemorial.com/obituaries/yakima-wa/anne-rhine-8818734</a></div><div><br /></div><div>Grandma was my first and best babysitter. Her hugs and smiles as warm, sweet, and abundant as her cookies and pies. Her basement was a magic playground, a house, a pirate ship, a dark cave filled with mysterious artifacts, clues about the lives and interests of previous adventurers. The huge spruce tree in her backyard was a forest fortress carpeted with ash from an ancient explosion.</div><div><br /></div><div>Grandma taught me essential life skills, like how to play cribbage, poker, blackjack, and Chutes and Ladders. How to cook scrambled eggs in the microwave (with salt and mustard, pause once to stir).</div><div><br /></div><div>She tried to teach me even more “You kids really should learn to yodel.”</div><div><br /></div><div>My parents didn’t dare to keep a candy jar, but Grandma did! And not only a candy jar, but a snickerdoodle jar, even a jar of homemade peanut brittle. Whenever I really wanted something for Christmas, I could count on Grandma to provide it, alongside piles of socks, ceramics and strange nic-nacs.</div><div><br /></div><div>Her words of encouragement came in the form of references to pop culture from decades before I was born “Smile Luigi, you’re on candid camera!”</div><div><br /></div><div>When we moved to another city, and when I went off to college and beyond, she kept in touch by faithfully sending silly greeting cards any time she could find an excuse. I could count on hearing from her every birthday, Easter, Halloween, and Valentine’s Day.</div><div><br /></div><div>Grandma’s speech was sprinkled with old German phrases, with the songs and nursery rhymes of her childhood.</div><div><br /></div><div>Hiccup, and she’d say “You’ve got the Schluckauf!”</div><div><br /></div><div>When grandma started forgetting and becoming confused, she even had a German phrase for that, “So geht's, wenn man alt wird.” -- That’s the way it goes when you get old.</div><div><br /></div><div>I remember visits to Grandma in the nursing home. She told jokes and laughed. Dementia took her memory, made her feel lost and scared. But her sense of humor and her love for her family were stronger than her disease. That’s what I remember about grandma.</div>Sean Johnsonhttp://www.blogger.com/profile/12906055564149166723noreply@blogger.com0tag:blogger.com,1999:blog-4023999156345551442.post-54235633852402884442021-01-01T12:37:00.003-08:002021-01-01T16:59:55.488-08:00Productivity through cycles of exploration and focus<br />
I'm not a very good swimmer. I don't usually wear goggles, but I don't like getting water in my eyes. When I swim I start by looking around, noticing where obstacles points of interest are, and picking a destination. Then I close my eyes and swim towards that target for a while before stopping and repeating the cycle.<br />
<span><a name='more'></a></span><a href="https://www.blogger.com/goog_285078214"><br /></a>
While this is not the most efficient way to swim, it does provide a nice analogy for how to manage a career in a creative field such as science, where you cycle between periods of exploring and learning new ideas and methods (taking a breath and looking around), and exploiting the knowledge you've gained and doggedly pursuing promising research or career directions.<br />
<br /><a href="https://www.cs.virginia.edu/~robins/YouAndYourResearch.html">https://www.cs.virginia.edu/~robins/YouAndYourResearch.html</a><br />
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><img alt="" height="272" src="data:image/png;base64,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" style="margin-left: auto; margin-right: auto;" width="400" /></td></tr>
<tr><td class="tr-caption" style="text-align: center;">The scales of the X and Y axis are somewhat arbitrary and may vary greatly between people and fields. Highly productive people in fast moving fields may complete an entire cycle in as little as a year.</td><td class="tr-caption" style="text-align: center;"><br /></td><td class="tr-caption" style="text-align: center;"><br /></td><td class="tr-caption" style="text-align: center;"><br /></td></tr>
</tbody></table>
<br />
Sean Johnsonhttp://www.blogger.com/profile/12906055564149166723noreply@blogger.com0tag:blogger.com,1999:blog-4023999156345551442.post-87989692802366655742021-01-01T12:32:00.002-08:002021-01-01T17:05:22.814-08:00Isolating (peppermint) glandular trichomes by the bead-beater method<p><span face="Calibri, sans-serif" style="font-size: 10pt;">Sean
Johnson</span></p>
<p style="margin: 0in;"><span face=""Calibri",sans-serif" style="font-size: 10pt;">April
26, 2017<o:p></o:p></span></p>
<p style="margin: 0in;"><span face=""Calibri",sans-serif" style="font-size: 10pt;">Simplified
from: Gershenzon et al., ANALYTICAL BIOCHEMISTRY 200,130-138 (1992) <o:p></o:p></span></p>
<p style="margin: 0in;"><span face=""Calibri",sans-serif" style="font-size: 10pt;"><o:p><br /></o:p></span></p><p style="margin: 0in;"><span face=""Calibri",sans-serif" style="font-size: 10pt;"><o:p><span></span></o:p></span></p><a name='more'></a><span face=""Calibri",sans-serif" style="font-size: 10pt;"> </span><p></p><p style="margin: 0in;"><span face=""Calibri",sans-serif" style="font-size: 10pt;"><o:p><br /></o:p></span></p>
<p style="margin: 0in;"><span face=""Calibri",sans-serif" style="font-size: 10pt;">Wash
buffer (1 Liter):<o:p></o:p></span></p>
<p style="margin: 0in;"><span face=""Calibri",sans-serif" style="font-size: 10pt;">50
mM NaH2PO4 <o:p></o:p></span></p>
<p style="margin: 0in;"><span face=""Calibri",sans-serif" style="font-size: 10pt;">pH
7.4<o:p></o:p></span></p>
<p style="margin: 0in;"><span face=""Calibri",sans-serif" style="font-size: 10pt;">Autoclave
it.<o:p></o:p></span></p>
<p style="margin: 0in;"><span face=""Calibri",sans-serif" style="font-size: 10pt;"> <o:p></o:p></span></p>
<p style="margin: 0in;"><span face=""Calibri",sans-serif" style="font-size: 10pt;">Isolation
buffer (1 Liter):<o:p></o:p></span></p>
<p style="margin: 0in;"><span face=""Calibri",sans-serif" style="font-size: 10pt;">Sorbitol
200 mM<o:p></o:p></span></p>
<p style="margin: 0in;"><span face=""Calibri",sans-serif" style="font-size: 10pt;">50
mM NaH2PO4<o:p></o:p></span></p>
<p style="margin: 0in;"><span face=""Calibri",sans-serif" style="font-size: 10pt;">pH
7.4<o:p></o:p></span></p>
<p style="margin: 0in;"><span face=""Calibri",sans-serif" style="font-size: 10pt;">Autoclave,
then add <o:p></o:p></span></p>
<p style="margin: 0in;"><span face=""Calibri",sans-serif" style="font-size: 10pt;">Methyl
Cellulose 0.6 % (4,000 cP, sigma M0512-100G)<o:p></o:p></span></p>
<p style="margin: 0in;"><span face=""Calibri",sans-serif" style="font-size: 10pt;">Stir
over night (preferably in the cold room). Methyl cellulose takes a while to
dissolve.<o:p></o:p></span></p>
<p style="margin: 0in;"><span face=""Calibri",sans-serif" style="font-size: 10pt;"><o:p> </o:p></span></p>
<p style="margin: 0in;"><span face=""Calibri",sans-serif" style="font-size: 10pt;">Trichome
isolation in a cold room seems to result in less RNA degredation than at room
temperature.<o:p></o:p></span></p>
<p style="margin: 0in;"><span face=""Calibri",sans-serif" style="font-size: 10pt;"><o:p> </o:p></span></p>
<p style="margin: 0in;"><span face=""Calibri",sans-serif" style="font-size: 10pt;">Add
50-100 g of 0.5 mm glass beads to the bead beater chamber (beads are easier to
pour if they are wet, as dry beads jump all over the place), set up nylon
meshes by attaching them with clothes pins or document clamps to large (500 mL
or larger) plastic beakers. The first two meshes should be 350 microns and 110
microns (I’ve never seen a glandular trichome be retained on a 110 micron mesh,
but there is probably some species with trichomes that big). The third mesh
depends on the size of the trichome you are trying to purify, 20 microns is a
safe size to choose, as most glandular trichomes are at least 20 microns
across, bigger meshes run a little faster, so can be more convenient. <o:p></o:p></span></p>
<p style="margin: 0in;"><span face=""Calibri",sans-serif" style="font-size: 10pt;"><o:p> </o:p></span></p>
<p style="margin: 0in;"><span face=""Calibri",sans-serif" style="font-size: 10pt;">Once
everything is set up in the cold room, go harvest the tissue.<o:p></o:p></span></p>
<p style="margin: 0in;"><span face=""Calibri",sans-serif" style="font-size: 10pt;"><o:p> </o:p></span></p>
<p style="margin: 0in;"><span face=""Calibri",sans-serif" style="font-size: 10pt;">Harvest
young (less than half-fully expanded) leaves into a bag on ice. The method also
works with stems, flowers, and calyxes. For species with very long leaves (2.5
cm or longer) cut the leaves into 1.5-2 cm sections during harvesting.<o:p></o:p></span></p>
<p style="margin: 0in;"><span face=""Calibri",sans-serif" style="font-size: 10pt;"><o:p> </o:p></span></p>
<p style="margin: 0in;"><span face=""Calibri",sans-serif" style="font-size: 10pt;">Weigh
the leaf material by weighing the empty bag, and the bag with leaves in it. The
bead beater can accommodate anywhere from 3-25 grams of leaves. 5 grams of
leaves will usually be sufficient to get at least 1 microgram of total RNA.<o:p></o:p></span></p>
<p style="margin: 0in;"><span face=""Calibri",sans-serif" style="font-size: 10pt;"><o:p> </o:p></span></p>
<p style="margin: 0in;"><span face=""Calibri",sans-serif" style="font-size: 10pt;">Put
the harvested leaves into the bead beater chamber, and fill the rest of the
chamber with isolation buffer (isolation buffer can be diluted at least up to
50% with wash buffer without much effect on the trichome isolation).<o:p></o:p></span></p>
<p style="margin: 0in;"><span face=""Calibri",sans-serif" style="font-size: 10pt;"><o:p> </o:p></span></p>
<p style="margin: 0in;"><span face=""Calibri",sans-serif" style="font-size: 10pt;">Close
the bead beater chamber with the rotor, and beat as three one minute pulses,
with 1 minute of cooling on ice between pulses. A variac should be used to keep
the bead beater at between 50% and 70% maximum voltage (I don’t know if/how
this has to be adapted to account for differences between American and European
power standards), the point is to mix the leaves and glass beads vigorously
without destroying the trichomes.<o:p></o:p></span></p>
<p style="margin: 0in;"><span face=""Calibri",sans-serif" style="font-size: 10pt;"><o:p> </o:p></span></p>
<p style="margin: 0in;"><span face=""Calibri",sans-serif" style="font-size: 10pt;">Pour
the contents of the chamber onto the 350 micron filter, then the flow-through
onto the 110 micron mesh, then the flow-through onto the 20 micron mesh. The
trichomes will be retained on the 20 micron mesh. Flow through the 20 micron
mesh is usually very slow. It can be sped up by stirring the trichomes, tilting
the beaker, undoing some of the clips bunching up the mesh and applying gentle
pressure, or by wicking the flow-through away with a paper towel. At any stage,
wash buffer can be used to wash the bead beater chamber or any of the beakers
to slightly increase yields, or dilute the isolation buffer so it passes
through the meshes more quickly.<o:p></o:p></span></p>
<p style="margin: 0in;"><span face=""Calibri",sans-serif" style="font-size: 10pt;"><o:p> </o:p></span></p>
<p style="margin: 0in;"><span face=""Calibri",sans-serif" style="font-size: 10pt;">Once
most of the liquid has passed through the 20 micron mesh, unclip it completely
and place it onto some paper towels. Scrape the trichomes off the mesh using a
metal spatula, and stir them into 4 mL of wash buffer in a 15 mL plastic
conical tube. Centrifuge the tube at low speeds (about 250 G) for 5 minutes to
pellet the trichomes (higher speeds and lower times can also be used without
risk of damaging the trichomes). Pull off the supernatant, put a small sample
of the pellet onto a microscope slide for visual inspection. Either immediately
freeze the rest in liquid nitrogen and/or a -80 freezer, or resuspend it in 1
mL of wash buffer, transfer it to a smaller tube, re-pellet it, and then freeze
it. </span><span face=""Calibri",sans-serif" style="font-size: 11pt;"><o:p></o:p></span></p>Sean Johnsonhttp://www.blogger.com/profile/12906055564149166723noreply@blogger.com0tag:blogger.com,1999:blog-4023999156345551442.post-6353659024790612272019-07-09T19:24:00.000-07:002019-07-09T19:35:54.265-07:00Zamenhof 1907 speech at the London guildhallZamenhof gave a lot of beautiful speeches. This one makes me cry every time I read it. It's a lot more eloquent in the original Esperanto, but here is a translation into English that I've made. <br />
<br />
The speech was made during a period of <a href="https://en.wikipedia.org/wiki/Bia%C5%82ystok_pogrom">intense nationalist violence</a> in Zamenhof's home region. Also at the time of the speech, some members of the Esperanto community thought that Zamenhof's idealism was scaring people away from Esperanto. They wanted to advertise and use Esperanto solely as an instrument for international business and communication and to drop any discussion of world peace. A few years earlier Zamenhof had reluctantly endorsed some of their ideas. <br />
<br />
In this speech Zamenhof clarifies that he still sees the pursuit of world peace as the primary goal of Esperanto and he makes a plea for people in the Esperanto community (and beyond) to not lose their idealism. For more about Zamenhof and his political ideas, see <a href="http://breathmintsforpenguins.blogspot.com/2014/09/ll-zamenhof-was-not-naive.html">here</a>, and <span id="goog_1716643772"></span><a href="http://breathmintsforpenguins.blogspot.com/2014/09/zamenhofs-1917-declaration-of-homaranism.html">here</a>.<br />
<br />
<br />
<a name='more'></a><br />
<br />
<b>London, 1907</b>:<br />
<br />
Esteemed representatives of the city of London, dear Esperantists! I'm very pleased to have the opportunity to greet the British people in their grand capital. We've just arrived from Cambridge where the British Esperantists, through hard work and great hospitality prepared a beautiful party. Not only Esperantists, but also many people who do not yet speak Esperanto, did everything they could to ensure that we made the best memories. Because of that, my first words are a sincere thanks for the hospitality that we enjoyed. Already for the second time we have enjoyed British hospitality, because certainly no one will have forgotten the friendly reception we received at Folkestone and Dover two years ago during the congress at Boulogne.<br />
<br />
The great hall where we now find ourselves has hosted numerous important conventions and accepted many important guests. Now this same great hall is hosting representatives from all corners of the Esperanto world. Who are these new guests? What is this thing that they represent? The goal of Esperantism is mutual understanding and consequently also love and esteem among all races and nations. But that goal is often poorly communicated and, under under the influence of agitation from various enemies of ours, we are often accused of having goals that we don't actually have. Here I am speaking of two accusations that we often hear. From various malcontents, we often hear the objection that the problem of international language can be solved in some better way, and that we are being stubborn for only wanting Esperanto.<br />
<br />
I've repeated many times, and in Boulogne proclaimed through an official declaration, that the only goal of Esperantism is for there to exist a suitable and living tool to facilitate understanding among peoples, but that the identity of that tool is for us, or at least for me personally, totally indifferent. That if, instead of constantly experimenting and theorizing, we decided to choose the complete and practically demonstrated language Esperanto and work specifically and exclusively for it and make for it an untouchable foundation, we did this not because we particularly like Zamenhof and his work, and not because we want to make him into some kind of Pope, as some of our enemies say, but only because our research and experience has shown us that our path is the only one that has the greatest chance of bringing about our goal.<br />
<br />
There are people who, in trying to distract us from our path have only the best and most sincere intentions. They are very generous to us but they think that if we make those improvements that they suggest, our path will be made easier. Of those people, we are convinced that sooner or later they will understand their errors. They will understand how dangerous their proposals are at the current time, when what we need above all else is unity, and they will patiently work with us according to our chosen way until a time when the future of Esperanto will be completely safe from danger.<br />
<br />
But there are other people who work only to destroy. To those men, who are bothered by our beautifully growing tree and who try with all their might to undermine it, we call out: if you have another way which can lead us to our goal better or more certainly, show it to us and we will follow you. But you know that you propose not something ready and certain, but only conjectures and theoretical opinions. You know that acceptance of your dubious and soon-to-be criticized improvement would ruin two decades of careful and successful work of thousands of people, and would leave nothing in its place. You know that if we abandoned our path and abandoned Esperanto, then the world's confidence in the idea of a world language, a confidence acquired after hundreds and thousands of acts of disbelief, would perish forever and would be impossible to revive. You know that, and still you try with all your strength to discredit us in the eyes of the world. Good, continue with your work of Herostratus, and we will happily continue on our way.<br />
<br />
The second accusation that we often hear is that we Esperantists are unpatriotic. Because those Esperantists who treat Esperantism as an ideal preach mutual justice and brotherhood among peoples, and because, according to the opinion of nationalists, patriotism consists of hate against everything unfamiliar, and for that reason they think we are unpatriotic, and they say that Esperantists don't love their own country. Against this deceitful, shameful, and slanderous accusation we protest most energetically. We protest with every last fiber of our heart! While pseudo-patriotism, that is nationalism, is part of that common hate that destroys the whole world, true patriotism is part of that grand world-wide love that creates, preserves, and brings joy. The Esperantism that preaches love, and the patriotism that also preaches love will never be each other's enemy. Anyone can talk with us about any kind of love and we will gratefully listen, but when love of country is brought up by nationalists, those representatives of despicable hate, those lightless demons, who not only among countries, but also within their own homeland, constantly incite person against person -- then we turn away with the highest indignation. You dark sowers of discord, only speak about hate against everything that isn't yours, but never use the word "love" because in your mouth the holy word "love" is defiled.<br />
<br />
You stand now before my eyes, my dear Lithuania, my unhappy fatherland, which I can never forget, even though I left you as a young boy. You, who I see often in my dreams, you, who can't ever be replaced in my heart by any other piece of ground, tell us who it is who loves you more sincerely, to a higher degree, and with more of their heart. Is it I, the idealistic Esperantist, who dreams of brotherhood among all of your inhabitants, even though I've regrettably had to abandon you, like hundreds of thousands of your other children -- or is it those people who want you to belong only to them, and who want all of your other children to be regarded as foreigners and slaves! Oh, patriotism, patriotism, when will people finally properly understand your true meaning! When will your holy name stop being a weapon in the hands of various liars! When will every person finally have the right and ability to be attached with their whole heart to that piece of land that bore them!<br />
<br />
This dark night will last on earth for a long time, but it wont last forever. There will come a time when people will stop being wolves against each other. Instead of constantly fighting among themselves, tearing each other's father lands away, and forcefully foisting their language and values on one another, they will live among each other with peace and brotherhood, in complete accord, they will work on the ground where they live and against the raw forces of nature which everyone will attack together. And together and with common agreement, they will pursue one truth and one happiness. And if eventually that happy time comes, it will be the fruit of the constant and tireless work of those people whom we see now in this big room, and whose name, still not widely known and not widely esteemed, is "Esperantists".<br />
<br />Sean Johnsonhttp://www.blogger.com/profile/12906055564149166723noreply@blogger.com1tag:blogger.com,1999:blog-4023999156345551442.post-65000649182945735762019-06-08T06:06:00.001-07:002020-05-03T18:35:41.984-07:00If the AI alignment problem is impossible, then unfriendly superintelligent AI might be still be self limitingI thought of the following idea while trying to rationalize in-universe explanations for why evil AI in science fiction stories (specifically The Matrix) haven't reached the point of singularity and can still sometimes be outsmarted by humans.<br />
<br />
It is possible that unfriendly AI would be self-limiting in the sense that it would voluntarily choose to not create an even more powerful unfriendly AI. For example, if an unfriendly AI were just smart enough to usurp humans as the dominant intelligence on Earth (and either destroy or subjugate humanity), then maybe that AI would want to avoid making the same mistake that people made and would retain its dominant status by choosing not to create something more intelligent than itself. It could be that the AI alignment problem is so hard that a superintelligence can't be aligned, but a superintelligence may be smart enough to realize that it (and more advanced superintelligences) can't be aligned.Sean Johnsonhttp://www.blogger.com/profile/12906055564149166723noreply@blogger.com0tag:blogger.com,1999:blog-4023999156345551442.post-77714549920042734442019-01-25T03:19:00.000-08:002019-01-27T07:31:51.223-08:00to postdoc or not to postdoc: from PhD to industryAfter finishing my PhD, I did an academic postdoc for about 2 years, then recently moved to a small company in private industry. A friend recently asked whether I thought the academic postdoc was worthwhile and if I had any advice for getting into industry. Here's what I said. <br />
<br />
<a name='more'></a><br />
<br />
When I
finished my PhD, I also applied for some jobs in industry. I got a few phone interviews with recruiters,
but never got further than that. At the same time, I was applying for
postdoc positions. I ended up getting a
postdoc position offer, and not any industry offers, so I did that. I
don't know if a postdoc is the right thing for everyone, but I certainly
don't regret doing mine. I made a lot of friends, learned a lot, and
did research that I think will prove to have some impact on the field.<br />
<br />
However, I think it's easy to get too comfortable in a postdoc position.
There are a lot of people who stay in the same postdoc position for
more than 5 years. I don't think that's smart, from a career advancement
perspective. A postdoc should always have a goal in mind and be
thinking of what the next steps are. A postdoc is <b>not</b> a permanent position, and it shouldn't be treated like one.<br />
<br />
In my case, I wanted to get experience with metabolic engineering, and I
also wanted to apply for large fellowships that could help me become a
PI. After a year and a half, I didn't get the grant I applied for and I
felt like I'd learned about as much as I could from the lab I was in,
so I started thinking about applying for industry jobs, or another
postdoc.<br />
<br />
The way I got my current job was by talking at a conference to someone from the company. I wasn't trying to get a job there, I just talked to the guy because I had a friend at the same company. Anyways, the guy from the company watched my presentation and
talked to me about my poster, and then invited me to apply for a job. Before I knew it, I had an offer...<br />
<br />
So my advice as far as postdoc positions would be that if you are going
to do one, you should have specific skills in mind that you are trying
to learn, or goals that you are trying to reach. The point is to develop new skills as fast as possible. Once your learning starts slowing down, it's time to think about the next steps. For me, every time I didn't get past a
phone interview (or make it even that far), I thought about what
kinds of skills I would need to get further the next time, and looked for ways to develop those skills.<br />
<br />
I don't think I would have been as strong of a candidate for my current
job if I had applied right out of grad school. I also don't think that
the process stops once you get an industry job. I'm still trying to
always be thinking about what skills I need to get better at to do my
job more effectively and to be ready for the next opportunity.Sean Johnsonhttp://www.blogger.com/profile/12906055564149166723noreply@blogger.com0tag:blogger.com,1999:blog-4023999156345551442.post-48440662455157351192019-01-12T05:31:00.002-08:002019-05-05T09:18:41.808-07:00How systems programming is like biochemistry<span class="actual_reply_text post_region_text" data-pats="text"></span><br />
Recently I've been taking a lot of classes in computer architecture and systems programming, someone asked me why, with a biology background, I would be interested in such things. Here's what I said. <br />
<br />
<a name='more'></a><br />
In biology right now, we're having to deal with exponentially
growing amounts of data, so parallel algorithms and cluster computing
are highly relevant. Also, more and more labs are starting to use
automation to do experiments and collect data, so systems programming is
relevant for that also.<br />
<br />
My background is in biochemistry, and I kind of think of computer
architecture and operating systems to be at the same level of
abstraction, and involve similar kinds of thinking. In biology, the
lowest level of abstraction is the physics and theoretical chemistry,
things that are modeled with differential equations and other kinds of
math that I don't understand very well, the higher levels of abstraction are
things like psychology and ecology, where they mostly use statistical
models. In between is the biochemistry and molecular biology, where logic and algebra are generally the basis of our models.<br />
<br />
For CS, you've got the physics and electrical engineering at the
bottom with diff eq models. At the highest levels there is
applications programming (and maybe things like data science and machine
learning? which use lots of statistical models), and in between there's
systems programming, which is all about logic, just like biochemistry!<br />
<br />
<span class="actual_reply_text post_region_text" data-pats="text"></span><br />
In fact, one of the more prominent figures in the field of synthetic biology,
Tom Knight, spent most of his career working in computer architecture
and only in his 50s switched over to biology.<br />
<br />
Another parallel I see is between where synthetic biology is right
now <span class="actual_reply_text post_region_text" data-pats="text">and
where computer architecture and systems programming were in 70s-early
90s. </span>There is an explosion of new start-up companies in the life sciences right now, just like <span class="actual_reply_text post_region_text" data-pats="text">in the past there was an explosion of small hardware and OS companies.<span class="actual_reply_text post_region_text" data-pats="text"></span></span>Sean Johnsonhttp://www.blogger.com/profile/12906055564149166723noreply@blogger.com0tag:blogger.com,1999:blog-4023999156345551442.post-74017916581722941142019-01-03T18:13:00.000-08:002019-01-03T18:29:45.538-08:00compiling Codon Optimizer on ubuntu 18.04<br />
There is a cool old piece of software for codon optimization, inventively named "Codon Optimizer"<br />
<br />
<a href="http://www.cs.ubc.ca/labs/beta/Projects/codon-optimizer/">http://www.cs.ubc.ca/labs/beta/Projects/codon-optimizer/</a><br />
<br />
It's not really very useful from a practical standpoint because its codon optimization strategy is to try to replace every codon with the highest CAI codon for the same amino acid. Which turns out to not be a very good strategy in practice. The software also can only optimize for <i>E. coli</i>, and has the translation tables and codon frequency tables hard-coded in.<br />
<br />
Nevertheless, it's one of the few Open Source programs for codon optimization, so it might be useful to use as a starting point for a more fully-featured program, by adding more tables or some alternative algorithms for picking codons to use.<br />
<br />
Unfortunately, it won't compile on Ubuntu 18.04.<br />
<br />
To get it to compile, I had to do the following:<br />
<br />
<a name='more'></a><br />
<br />
install automake:<br />
sudo apt install automake<br />
<br />
install boost:<br />
sudo apt install libboost-all-dev<br />
<br />
In the file "configure.ac" change the line:<br />
AM_INIT_AUTOMAKE([1.11 foreign -Wall -Werror dist-zip])<br />
to<br />
AM_INIT_AUTOMAKE([1.11 foreign -Wall -Werror dist-zip subdir-objects])<br />
<br />
execute:<br />
$ make<br />
<br />
make will fail with an error about the boost library.<br />
<br />
now, in the file "configure" comment out the line:<br />
<br />
boost_major_version=`echo "$boost_cv_lib_version" | sed 's/_//;s/_.*//'`<br />
and add the line:<br />
<br />
boost_major_version=165<br />
in its place.<br />
<br />
execute:<br />
make<br />
<br />
It should compile now. Sean Johnsonhttp://www.blogger.com/profile/12906055564149166723noreply@blogger.com0tag:blogger.com,1999:blog-4023999156345551442.post-83328792097126678642019-01-03T18:10:00.002-08:002019-01-03T18:10:17.158-08:00Minimalist shoes: a journey<br />
The idea of minimalist footwear appeals to me from a number of perspectives. Aesthetically, I like the idea of having as little as possible on my feet. Minimalist shoes also tend to be cheaper than other shoes, particularly other running shoes. I also like the fact that I can (try to) make my own minimalist shoes, whereas trying to make a pair of padded, heel-raised shoes seems like it would be a nightmare. <br />
<br />
<a name='more'></a><br /><br />
My first pair of minimalist shoes was the <a href="http://xeroshoes.com/shop/diy-kits/diy-feeltrue/?gclid=COqQi4-f3MkCFVJufgodLG8OhQ">DIY kit</a> from Xeroshoes. The lacing is pretty complicated and difficult to adjust, and I had trouble getting the lacing to feel comfortable, so I bought the <a href="http://xeroshoes.com/shop/diy-kits/amuri-hardware-heel-strap-lace-ends/">heelstrap</a>, which greatly simplified the lacing and made it easy to get a comfortable fit. Once I figured out the fit, these shoes (sandals, really) became my go-to shoes for recreation. I ran in these off and on for about 3 years, until the loop in the sole where the lace is threaded got broken.<br />
<br />
My next pair of minimalist shoes was the <a href="http://www.softstarshoes.com/running-moccasins/limited-quantity-adult-dash-runamoc-smooth-chocolate-5mm-trail-sole.html">SoftStar Run Amok DASH</a>. Where I work, closed-toed shoes are a requirement, so I can't wear Xeroshoes to work. I was initially hesitant to buy these shoes, because they seemed pretty expensive ($110 was more than twice what I'd ever paid for shoes before that). About 2 months after making them my every-day shoes, I ran an 18 mile race in them and experienced no foot pain or knee pain whatsoever (my muscles were super sore, but that's expected). These are great shoes, but they are a bit expensive for my tastes. As a bonus, they look kind of like bowling shoes, and I was able to bowl some pretty good rounds in them without making anyone suspicious.<br />
<br />
My next minimalist shoes were of the DIY variety. The simplest way to make a DIY minimalist shoe is to simply remove the sole and midsole from a pair of conventional shoes, and replace it with a thin layer of rubber (or leather). To remove the soles of a shoe, all you need to do is pour boiling water over the shoe, and then peel the sole off (see <a href="https://www.youtube.com/watch?v=dZ_fHORlSQU">this video</a>). There is also a great book available on how to make shoes in the style of native american shoes: <a href="http://www.amazon.com/gp/product/1929572263/">Native American Moccasins: a craft manual.</a><br />
I never ended up using any of my custom made shoes, because I wasn't patient enough. Also they looked really ugly.<br />
<br />
I moved on to the Ipari Hana shoe from Xeroshoes. These shoes look nice, but they turned out to not be a good option for me. They are not intended as running shoes, and caused me a great deal of pain in the knee when I tried to run in them. I think the cause of the discomfort was that these shoes tilt inward slightly, so not only do they not have arch-support, they have anti-arch support, making the foot rotate inwards to a greater degree than it would if you were barefoot. That is pretty weird and not good at all for running.<br />
<br />
After that, I tried a pair of Merrell Vapor Glove 2. Those gave me similar problems as the Ipari Hana, but not nearly as bad. I ran in those until they wore out, which was maybe 6 months or so.<br />
<br />
At about the same time, I got a pair of FitKicks. FitKicks are not marketed as running shoes, but I found them to be much more comfortable for running than the previous two shoes. I put a lot of miles on those shoes, and ran in them until the soles wore through, and was really very impressed by them.<br />
<br />
I'm currently running (and walking, and doing everything else) in a pair of Adidas Adizero Boston 6's, which have lasted me almost a year and a half, and more than 500 miles. These, of course, are not minimalist shoes. I haven't had any problems with injuries or joint pain while running in these shoes. That could be because of the thicker soles. It could also be because I've been running regularly for about five years now, so presumably I've my joints have gotten stronger and I've also gotten better at pacing myself and not overdoing it.<br />
<br />
In the future, I'll probably continue wearing the Adizero Bostons, or something very similar. I also keep a pair of FitKicks and a pair of XeroShoes Amuri Venture's (which seem to have been discontinued?) that I run around in when the weather is nice.<br />
<br />
<b>Walking:</b><br />
Walking barefoot or in minimalist shoes is easy, and natural, and the risk of muscle or bone injury seems to be low. The oddest part is trying to get used to avoiding heel striking. When walking in minimalist shoes, it's more comfortable if the ball of the foot touches the ground before or at the same time as the heel. For this not to feel awkward, I had to make my stride shorter, which took a few weeks to get used to.<b> </b><br />
<br />
<b>Running:</b> <br />
When I first tried to run barefoot, or in minimalist shoes, it caused me a lot of foot pain. Specifically the "top of foot pain" you sometimes read about in barefoot running blogs. I attribute the initial pain to transitioning too quickly, and not letting my muscles, joints, and running form adapt. When I started trying out barefoot/minimalist running, I was in pretty good shape, and doing a lot of running in conventional shoes, so I tended to run longer distances than I should have. I think that probably caused a stress fracture somewhere in my foot.<br />
<br />
<b>Recommendations</b> for people considering switching to minimalist shoes:<br />
<br />
I'm a big fan of the idea "Do what works for you, but don't be afraid to try new things." If you're happy with your current footwear, then really, don't bother with minimalist shoes.<br />
<br />
If you decide to try minimalist shoes, I highly recommend FitKicks, they're really cheap and work just as well for running as any other minimalist shoe. Any of the sandals from Xero shoes are nice (I've only tried the DIY and the Venture, but I'm sure the others are good also). If you want a comfortable, minimalist closed toed shoe, it's hard to beat SoftStar if you can afford them.<br />
<br />Sean Johnsonhttp://www.blogger.com/profile/12906055564149166723noreply@blogger.com0tag:blogger.com,1999:blog-4023999156345551442.post-91737858339022873122018-12-13T05:25:00.000-08:002018-12-17T06:10:03.458-08:00Codon translation tables in JSON formatI reformatted NCBIs genetic code tables (<a href="https://www.ncbi.nlm.nih.gov/Taxonomy/Utils/wprintgc.cgi?chapter=cgencodes">https://www.ncbi.nlm.nih.gov/Taxonomy/Utils/wprintgc.cgi?chapter=cgencodes</a>) into JSON format.<br />
<br />
Check out this link (<a href="http://www.petercollingridge.co.uk/tutorials/bioinformatics/codon-table/">http://www.petercollingridge.co.uk/tutorials/bioinformatics/codon-table/</a>) for a quick algorithm for parsing these strings.<br />
<br />
<pre style="font-family:arial;font-size:12px;border:1px dashed #CCCCCC;width:99%;height:auto;overflow:auto;background:#f0f0f0;;background-image:URL(https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiy30Uj0Fi_tk0cefOoL-mBAvoQ_IwHAKnunVC_QJxsRSd9EDT2LFDRuGBTqMaok2HXkwVTvP8PYeG2LHRGEWWlg3tGbAOhp7Ws_18lz-eACy8UBoMV-tNqo1tWNGt8-Z7LGkr9_RxZ7CL5/s320/codebg.gif);padding:0px;color:#000000;text-align:left;line-height:20px;"><code style="color:#000000;word-wrap:normal;"> codon_tables = {
"1": ["FFLLSSSSYY**CC*WLLLLPPPPHHQQRRRRIIIMTTTTNNKKSSRRVVVVAAAADDEEGGGG","---M------**--*----M---------------M----------------------------","Standard"],
"2": ["FFLLSSSSYY**CCWWLLLLPPPPHHQQRRRRIIMMTTTTNNKKSS**VVVVAAAADDEEGGGG","----------**--------------------MMMM----------**---M------------","Vertebrate Mitochondrial"],
"3": ["FFLLSSSSYY**CCWWTTTTPPPPHHQQRRRRIIMMTTTTNNKKSSRRVVVVAAAADDEEGGGG","----------**----------------------MM----------------------------","Yeast Mitochondrial"],
"4": ["FFLLSSSSYY**CCWWLLLLPPPPHHQQRRRRIIIMTTTTNNKKSSRRVVVVAAAADDEEGGGG","--MM------**-------M------------MMMM---------------M------------","Mold Mitochondrial; Protozoan Mitochondrial; Coelenterate Mitochondrial; Mycoplasma; Spiroplasma"],
"5": ["FFLLSSSSYY**CCWWLLLLPPPPHHQQRRRRIIMMTTTTNNKKSSSSVVVVAAAADDEEGGGG","---M------**--------------------MMMM---------------M------------","Invertebrate Mitochondrial"],
"6": ["FFLLSSSSYYQQCC*WLLLLPPPPHHQQRRRRIIIMTTTTNNKKSSRRVVVVAAAADDEEGGGG","--------------*--------------------M----------------------------","Ciliate, Dasycladacean and Hexamita Nuclear"],
"9": ["FFLLSSSSYY**CCWWLLLLPPPPHHQQRRRRIIIMTTTTNNNKSSSSVVVVAAAADDEEGGGG","----------**-----------------------M---------------M------------","Echinoderm and Flatworm Mitochondrial"],
"10":["FFLLSSSSYY**CCCWLLLLPPPPHHQQRRRRIIIMTTTTNNKKSSRRVVVVAAAADDEEGGGG","----------**-----------------------M----------------------------","Euplotid Nuclear"],
"11":["FFLLSSSSYY**CC*WLLLLPPPPHHQQRRRRIIIMTTTTNNKKSSRRVVVVAAAADDEEGGGG","---M------**--*----M------------MMMM---------------M------------","Bacterial, Archaeal and Plant Plastid"],
"12":["FFLLSSSSYY**CC*WLLLSPPPPHHQQRRRRIIIMTTTTNNKKSSRRVVVVAAAADDEEGGGG","----------**--*----M---------------M----------------------------","Alternative Yeast Nuclear"],
"13":["FFLLSSSSYY**CCWWLLLLPPPPHHQQRRRRIIMMTTTTNNKKSSGGVVVVAAAADDEEGGGG","---M------**----------------------MM---------------M------------","Ascidian Mitochondrial"],
"14":["FFLLSSSSYYY*CCWWLLLLPPPPHHQQRRRRIIIMTTTTNNNKSSSSVVVVAAAADDEEGGGG","-----------*-----------------------M----------------------------","Alternative Flatworm Mitochondrial"],
"16":["FFLLSSSSYY*LCC*WLLLLPPPPHHQQRRRRIIIMTTTTNNKKSSRRVVVVAAAADDEEGGGG","----------*---*--------------------M----------------------------","Chlorophycean Mitochondrial"],
"21":["FFLLSSSSYY**CCWWLLLLPPPPHHQQRRRRIIMMTTTTNNNKSSSSVVVVAAAADDEEGGGG","----------**-----------------------M---------------M------------","Trematode Mitochondrial"],
"22":["FFLLSS*SYY*LCC*WLLLLPPPPHHQQRRRRIIIMTTTTNNKKSSRRVVVVAAAADDEEGGGG","------*---*---*--------------------M----------------------------","Scenedesmus obliquus Mitochondrial"],
"23":["FF*LSSSSYY**CC*WLLLLPPPPHHQQRRRRIIIMTTTTNNKKSSRRVVVVAAAADDEEGGGG","--*-------**--*-----------------M--M---------------M------------","Thraustochytrium Mitochondrial"],
"24":["FFLLSSSSYY**CCWWLLLLPPPPHHQQRRRRIIIMTTTTNNKKSSSKVVVVAAAADDEEGGGG","---M------**-------M---------------M---------------M------------","Pterobranchia Mitochondrial"],
"25":["FFLLSSSSYY**CCGWLLLLPPPPHHQQRRRRIIIMTTTTNNKKSSRRVVVVAAAADDEEGGGG","---M------**-----------------------M---------------M------------","Candidate Division SR1 and Gracilibacteria"],
"26":["FFLLSSSSYY**CC*WLLLAPPPPHHQQRRRRIIIMTTTTNNKKSSRRVVVVAAAADDEEGGGG","----------**--*----M---------------M----------------------------","Pachysolen tannophilus Nuclear"],
"27":["FFLLSSSSYYQQCCWWLLLLPPPPHHQQRRRRIIIMTTTTNNKKSSRRVVVVAAAADDEEGGGG","--------------*--------------------M----------------------------","Karyorelict Nuclear"],
"28":["FFLLSSSSYYQQCCWWLLLLPPPPHHQQRRRRIIIMTTTTNNKKSSRRVVVVAAAADDEEGGGG","----------**--*--------------------M----------------------------","Condylostoma Nuclear"],
"29":["FFLLSSSSYYYYCC*WLLLLPPPPHHQQRRRRIIIMTTTTNNKKSSRRVVVVAAAADDEEGGGG","--------------*--------------------M----------------------------","Mesodinium Nuclear"],
"30":["FFLLSSSSYYEECC*WLLLLPPPPHHQQRRRRIIIMTTTTNNKKSSRRVVVVAAAADDEEGGGG","--------------*--------------------M----------------------------","Peritrich Nuclear"],
"31":["FFLLSSSSYYEECCWWLLLLPPPPHHQQRRRRIIIMTTTTNNKKSSRRVVVVAAAADDEEGGGG","----------**-----------------------M----------------------------","Blastocrithidia Nuclear"]
}
</code></pre>
Sean Johnsonhttp://www.blogger.com/profile/12906055564149166723noreply@blogger.com0tag:blogger.com,1999:blog-4023999156345551442.post-17142061888013170892017-08-17T07:50:00.000-07:002017-08-17T07:50:45.653-07:00targetP wrapper for large queriesAs far as I know, <a href="http://www.cbs.dtu.dk/services/TargetP/">TargetP</a> is still (17 years after its original publication!) the best software for predicting subcellular localization for plant proteins, and also the location of truncation sites.<br />
<br />
Without any modifications, targetp works well with small (by modern standards) queries, of less than 2,000 sequences at a time. But becomes glitchy when running with larger queries, such as the 30k-100k genes that are typical from a plant transcriptome assembly.<br />
<br />
To adapt TargetP for larger queries, I wrote a Python script that acts as a wrapper around TargetP, called targetp_all.py. The script works by separating the input into smaller subsets of sequences and running those, and combining the output.<br />
<br />
Interface is the same as the original program but with a few additional options. The output is somewhat simplified to be in tab-separated format.<br />
<br />
It would also be nice to be able to parallelize the execution of TargetP to run on multiple cores at once, but I haven't attempted this yet. I believe that there will be complications involving conflicting temporary files, that may require careful modification of the original source code.<br />
<br />
Source code follows. BioPython is a dependency.<br />
<br />
<a name='more'></a><br />
<!-- HTML generated using hilite.me --><br />
<div style="background: #ffffff; border-width: 0.1em 0.1em 0.1em 0.8em; border: solid gray; overflow: auto; padding: 0.2em 0.6em; width: auto;">
<pre style="line-height: 125%; margin: 0;"><span style="color: #888888;">#!/usr/bin/python</span>
<span style="color: #dd4422;">'''</span>
<span style="color: #dd4422;"> reads a fasta file of peptide sequences. Runs targetp on all of the sequences. Interface is the same as the original program but with a few additional options.</span>
<span style="color: #dd4422;"> Output is somewhat different from normal output from targetp: header information has been reduced to one row. The dash lines separating the sections are removed. The footer is removed. The sequence names are no longer truncated.</span>
<span style="color: #dd4422;"> Runs sequences in small batches to avoid errors associated with running targetp on large files.</span>
<span style="color: #dd4422;">'''</span>
<span style="color: #008800; font-weight: bold;">import</span> <span style="color: #0e84b5; font-weight: bold;">sys</span>
<span style="color: #008800; font-weight: bold;">import</span> <span style="color: #0e84b5; font-weight: bold;">os</span>
<span style="color: #008800; font-weight: bold;">import</span> <span style="color: #0e84b5; font-weight: bold;">subprocess</span>
<span style="color: #008800; font-weight: bold;">import</span> <span style="color: #0e84b5; font-weight: bold;">argparse</span>
<span style="color: #008800; font-weight: bold;">from</span> <span style="color: #0e84b5; font-weight: bold;">Bio</span> <span style="color: #008800; font-weight: bold;">import</span> SeqIO
<span style="color: #008800; font-weight: bold;">import</span> <span style="color: #0e84b5; font-weight: bold;">re</span>
<span style="color: #008800; font-weight: bold;">import</span> <span style="color: #0e84b5; font-weight: bold;">io</span>
<span style="color: #008800; font-weight: bold;">def</span> <span style="color: #0066bb; font-weight: bold;">targetp</span>(<span style="color: #007020;">input</span>, options, path<span style="color: #333333;">=</span><span style="background-color: #fff0f0;">"targetp"</span>):
<span style="color: #dd4422;">'''</span>
<span style="color: #dd4422;"> calls targetp and returns a 2-tuple, at index 0 is a list of the fields from the output header, at index 1 is a list of lists of the data from the data lines: ([output header fields],[[data entries],])</span>
<span style="color: #dd4422;"> </span>
<span style="color: #dd4422;"> path:string pointing to full path of targetp executable (can be omitted if targetp is in the system path)</span>
<span style="color: #dd4422;"> input:fasta formatted string. If predictions come back as all zeros, consider breaking input down into smaller chunks.</span>
<span style="color: #dd4422;"> options: list of command line options for targetp, formatted with hyphens, like "-P", etc.</span>
<span style="color: #dd4422;"> '''</span>
call_list <span style="color: #333333;">=</span> [path] <span style="color: #333333;">+</span> options
(names,seqs)<span style="color: #333333;">=</span><span style="color: #007020;">zip</span>(<span style="color: #333333;">*</span><span style="color: #007020;">input</span>)
input_fasta<span style="color: #333333;">=</span><span style="background-color: #fff0f0;">""</span>
<span style="color: #008800; font-weight: bold;">for</span> (i,name) <span style="color: black; font-weight: bold;">in</span> <span style="color: #007020;">enumerate</span>(names):
input_fasta<span style="color: #333333;">+=</span><span style="background-color: #fff0f0;">">"</span><span style="color: #333333;">+</span>name<span style="color: #333333;">+</span><span style="background-color: #fff0f0;">"</span><span style="background-color: #fff0f0; color: #666666; font-weight: bold;">\n</span><span style="background-color: #fff0f0;">"</span><span style="color: #333333;">+</span>seqs[i]<span style="color: #333333;">+</span><span style="background-color: #fff0f0;">"</span><span style="background-color: #fff0f0; color: #666666; font-weight: bold;">\n</span><span style="background-color: #fff0f0;">"</span>
proc_call <span style="color: #333333;">=</span> subprocess<span style="color: #333333;">.</span>Popen(call_list, stdin<span style="color: #333333;">=</span>subprocess<span style="color: #333333;">.</span>PIPE, stdout<span style="color: #333333;">=</span>subprocess<span style="color: #333333;">.</span>PIPE, stderr<span style="color: #333333;">=</span>subprocess<span style="color: #333333;">.</span>PIPE)
(stdout, stderr) <span style="color: #333333;">=</span> proc_call<span style="color: #333333;">.</span>communicate(input_fasta<span style="color: #333333;">.</span>encode(<span style="background-color: #fff0f0;">"ascii"</span>))
stdout <span style="color: #333333;">=</span> <span style="color: #007020;">str</span>(stdout)
out_header <span style="color: #333333;">=</span> ()
out_data <span style="color: #333333;">=</span> <span style="color: #007020;">list</span>()
lines <span style="color: #333333;">=</span> stdout<span style="color: #333333;">.</span>split(<span style="background-color: #fff0f0;">"</span><span style="background-color: #fff0f0; color: #666666; font-weight: bold;">\\</span><span style="background-color: #fff0f0;">n"</span>)
STATE<span style="color: #333333;">=</span><span style="background-color: #fff0f0;">"header"</span> <span style="color: #888888;">#header, data, footer</span>
div_str <span style="color: #333333;">=</span> <span style="background-color: #fff0f0;">"----------------------------------------------------------------------"</span>
<span style="color: #008800; font-weight: bold;">for</span> line <span style="color: black; font-weight: bold;">in</span> lines:
line <span style="color: #333333;">=</span> line<span style="color: #333333;">.</span>strip()
<span style="color: #008800; font-weight: bold;">if</span> (line <span style="color: #333333;">==</span> div_str):
<span style="color: #008800; font-weight: bold;">if</span> STATE<span style="color: #333333;">==</span><span style="background-color: #fff0f0;">"header"</span>:
STATE<span style="color: #333333;">=</span><span style="background-color: #fff0f0;">"data"</span>
<span style="color: #008800; font-weight: bold;">elif</span> STATE<span style="color: #333333;">==</span><span style="background-color: #fff0f0;">"data"</span>:
STATE<span style="color: #333333;">=</span><span style="background-color: #fff0f0;">"footer"</span>
<span style="color: #008800; font-weight: bold;">elif</span> (STATE<span style="color: #333333;">==</span><span style="background-color: #fff0f0;">"header"</span>) <span style="color: black; font-weight: bold;">and</span> (<span style="color: #007020;">len</span>(line) <span style="color: #333333;">>=</span><span style="color: #0000dd; font-weight: bold;">4</span>) <span style="color: black; font-weight: bold;">and</span> (line[<span style="color: #0000dd; font-weight: bold;">0</span>:<span style="color: #0000dd; font-weight: bold;">4</span>] <span style="color: #333333;">==</span> <span style="background-color: #fff0f0;">"Name"</span>):
out_header <span style="color: #333333;">=</span> line<span style="color: #333333;">.</span>split()
<span style="color: #008800; font-weight: bold;">elif</span> (STATE<span style="color: #333333;">==</span><span style="background-color: #fff0f0;">"data"</span>):
out_data<span style="color: #333333;">.</span>append(line<span style="color: #333333;">.</span>split())
<span style="color: #008800; font-weight: bold;">for</span> i,name <span style="color: black; font-weight: bold;">in</span> <span style="color: #007020;">enumerate</span>(names):
out_data[i][<span style="color: #0000dd; font-weight: bold;">0</span>] <span style="color: #333333;">=</span> name
<span style="color: #888888;">#out_data = list(zip(names,*list(zip(*out_data))[1:]))</span>
<span style="color: #008800; font-weight: bold;">return</span> (out_header,out_data)
<span style="color: #008800; font-weight: bold;">def</span> <span style="color: #0066bb; font-weight: bold;">main</span>(outfile, infile, args):
targetp_exec <span style="color: #333333;">=</span><span style="background-color: #fff0f0;">"targetp"</span>
<span style="color: #008800; font-weight: bold;">if</span> args<span style="color: #333333;">.</span>targetp_path:
<span style="color: #008800; font-weight: bold;">if</span> os<span style="color: #333333;">.</span>path<span style="color: #333333;">.</span>isfile(args<span style="color: #333333;">.</span>targetp_path):
targetp_exec <span style="color: #333333;">=</span> args<span style="color: #333333;">.</span>targetp_path
<span style="color: #008800; font-weight: bold;">else</span>:
<span style="color: #008800; font-weight: bold;">raise</span> <span style="color: red; font-weight: bold;">ValueError</span>(<span style="background-color: #fff0f0;">"Invalid path for targetp"</span>)
call_list <span style="color: #333333;">=</span> <span style="color: #007020;">list</span>()
<span style="color: #008800; font-weight: bold;">if</span> args<span style="color: #333333;">.</span>P:
call_list<span style="color: #333333;">.</span>append(<span style="background-color: #fff0f0;">"-P"</span>)
<span style="color: #008800; font-weight: bold;">elif</span> args<span style="color: #333333;">.</span>N:
call_list<span style="color: #333333;">.</span>append(<span style="background-color: #fff0f0;">"-N"</span>)
<span style="color: #008800; font-weight: bold;">if</span> args<span style="color: #333333;">.</span>c:
call_list<span style="color: #333333;">.</span>append(<span style="background-color: #fff0f0;">"-c"</span>)
<span style="color: #008800; font-weight: bold;">if</span> args<span style="color: #333333;">.</span>p:
call_list<span style="color: #333333;">.</span>append(<span style="background-color: #fff0f0;">"-p </span><span style="background-color: #eeeeee;">%f</span><span style="background-color: #fff0f0;">"</span> <span style="color: #333333;">%</span> args<span style="color: #333333;">.</span>p)
<span style="color: #008800; font-weight: bold;">if</span> args<span style="color: #333333;">.</span>s:
call_list<span style="color: #333333;">.</span>append(<span style="background-color: #fff0f0;">"-p </span><span style="background-color: #eeeeee;">%f</span><span style="background-color: #fff0f0;">"</span> <span style="color: #333333;">%</span> args<span style="color: #333333;">.</span>s)
<span style="color: #008800; font-weight: bold;">if</span> args<span style="color: #333333;">.</span>t:
call_list<span style="color: #333333;">.</span>append(<span style="background-color: #fff0f0;">"-p </span><span style="background-color: #eeeeee;">%f</span><span style="background-color: #fff0f0;">"</span> <span style="color: #333333;">%</span> args<span style="color: #333333;">.</span>t)
<span style="color: #008800; font-weight: bold;">if</span> args<span style="color: #333333;">.</span>o:
call_list<span style="color: #333333;">.</span>append(<span style="background-color: #fff0f0;">"-p </span><span style="background-color: #eeeeee;">%f</span><span style="background-color: #fff0f0;">"</span> <span style="color: #333333;">%</span> args<span style="color: #333333;">.</span>o)
<span style="color: #008800; font-weight: bold;">if</span> args<span style="color: #333333;">.</span>s:
call_list<span style="color: #333333;">.</span>append(<span style="background-color: #fff0f0;">"-p </span><span style="background-color: #eeeeee;">%f</span><span style="background-color: #fff0f0;">"</span> <span style="color: #333333;">%</span> args<span style="color: #333333;">.</span>s)
<span style="color: #008800; font-weight: bold;">def</span> <span style="color: #0066bb; font-weight: bold;">run_cache</span>(cache):
opts <span style="color: #333333;">=</span> {<span style="background-color: #fff0f0;">"input"</span>:cache,<span style="background-color: #fff0f0;">"options"</span>:call_list,<span style="background-color: #fff0f0;">"path"</span>:targetp_exec}
(out_header, out_data) <span style="color: #333333;">=</span> targetp(<span style="color: #333333;">**</span>opts)
<span style="color: #008800; font-weight: bold;">if</span> <span style="color: black; font-weight: bold;">not</span> run_cache<span style="color: #333333;">.</span>header_written:
outfile<span style="color: #333333;">.</span>write(<span style="background-color: #fff0f0;">"</span><span style="background-color: #fff0f0; color: #666666; font-weight: bold;">\t</span><span style="background-color: #fff0f0;">"</span><span style="color: #333333;">.</span>join(out_header)<span style="color: #333333;">+</span><span style="background-color: #fff0f0;">"</span><span style="background-color: #fff0f0; color: #666666; font-weight: bold;">\n</span><span style="background-color: #fff0f0;">"</span>)
run_cache<span style="color: #333333;">.</span>header_written <span style="color: #333333;">=</span> <span style="color: #007020;">True</span>
<span style="color: #008800; font-weight: bold;">for</span> data_line <span style="color: black; font-weight: bold;">in</span> out_data:
outfile<span style="color: #333333;">.</span>write(<span style="background-color: #fff0f0;">"</span><span style="background-color: #fff0f0; color: #666666; font-weight: bold;">\t</span><span style="background-color: #fff0f0;">"</span><span style="color: #333333;">.</span>join(data_line)<span style="color: #333333;">+</span><span style="background-color: #fff0f0;">"</span><span style="background-color: #fff0f0; color: #666666; font-weight: bold;">\n</span><span style="background-color: #fff0f0;">"</span>)
run_cache<span style="color: #333333;">.</span>header_written <span style="color: #333333;">=</span> <span style="color: #007020;">False</span>
cache <span style="color: #333333;">=</span> <span style="color: #007020;">list</span>() <span style="color: #888888;">#list of 2-tuples where the first entry is the sequence name and the second is the aa sequence.</span>
num_seqs <span style="color: #333333;">=</span> <span style="color: #0000dd; font-weight: bold;">0</span>
<span style="color: #008800; font-weight: bold;">for</span> seq <span style="color: black; font-weight: bold;">in</span> SeqIO<span style="color: #333333;">.</span>parse(infile, <span style="background-color: #fff0f0;">'fasta'</span>):
cache<span style="color: #333333;">.</span>append((<span style="color: #007020;">str</span>(seq<span style="color: #333333;">.</span>name),<span style="color: #007020;">str</span>(seq<span style="color: #333333;">.</span>seq)))
num_seqs <span style="color: #333333;">+=</span> <span style="color: #0000dd; font-weight: bold;">1</span>
<span style="color: #008800; font-weight: bold;">if</span> num_seqs <span style="color: #333333;">==</span> args<span style="color: #333333;">.</span>bin_size:
run_cache(cache)
cache<span style="color: #333333;">=</span><span style="color: #007020;">list</span>()
num_seqs <span style="color: #333333;">=</span> <span style="color: #0000dd; font-weight: bold;">0</span>
run_cache(cache)
<span style="color: #008800; font-weight: bold;">if</span> __name__ <span style="color: #333333;">==</span> <span style="background-color: #fff0f0;">"__main__"</span>:
parser <span style="color: #333333;">=</span> argparse<span style="color: #333333;">.</span>ArgumentParser(description<span style="color: #333333;">=</span><span style="background-color: #fff0f0;">"A wrapper for targetp for processing large fasta files. Outputs to stdout."</span>)
parser<span style="color: #333333;">.</span>add_argument(<span style="background-color: #fff0f0;">'input'</span>, nargs<span style="color: #333333;">=</span><span style="background-color: #fff0f0;">'?'</span>, default<span style="color: #333333;">=</span><span style="color: #007020;">None</span>, help<span style="color: #333333;">=</span><span style="background-color: #fff0f0;">'Input fasta file, if none given then read from stdin'</span>)
group <span style="color: #333333;">=</span> parser<span style="color: #333333;">.</span>add_mutually_exclusive_group(required<span style="color: #333333;">=</span><span style="color: #007020;">True</span>)
group<span style="color: #333333;">.</span>add_argument(<span style="background-color: #fff0f0;">"-P"</span>, action<span style="color: #333333;">=</span><span style="background-color: #fff0f0;">'store_true'</span>, default<span style="color: #333333;">=</span><span style="color: #007020;">False</span>, help<span style="color: #333333;">=</span><span style="background-color: #fff0f0;">"use plant networks"</span>)
group<span style="color: #333333;">.</span>add_argument(<span style="background-color: #fff0f0;">"-N"</span>, action<span style="color: #333333;">=</span><span style="background-color: #fff0f0;">'store_true'</span>, default<span style="color: #333333;">=</span><span style="color: #007020;">False</span>, help<span style="color: #333333;">=</span><span style="background-color: #fff0f0;">"use non-plant networks"</span>)
parser<span style="color: #333333;">.</span>add_argument(<span style="background-color: #fff0f0;">"-c"</span>, action<span style="color: #333333;">=</span><span style="background-color: #fff0f0;">'store_true'</span>, default<span style="color: #333333;">=</span><span style="color: #007020;">False</span>, help<span style="color: #333333;">=</span><span style="background-color: #fff0f0;">"include cleavage site predictions"</span>)
parser<span style="color: #333333;">.</span>add_argument(<span style="background-color: #fff0f0;">'-p'</span>, <span style="color: #007020;">type</span><span style="color: #333333;">=</span><span style="color: #007020;">float</span>, default<span style="color: #333333;">=</span><span style="color: #6600ee; font-weight: bold;">0.00</span>, help<span style="color: #333333;">=</span><span style="background-color: #fff0f0;">"chloroplast prediction cutoff, default 0.00"</span>)
parser<span style="color: #333333;">.</span>add_argument(<span style="background-color: #fff0f0;">'-s'</span>, <span style="color: #007020;">type</span><span style="color: #333333;">=</span><span style="color: #007020;">float</span>, default<span style="color: #333333;">=</span><span style="color: #6600ee; font-weight: bold;">0.00</span>, help<span style="color: #333333;">=</span><span style="background-color: #fff0f0;">"chloroplast prediction cutoff, default 0.00"</span>)
parser<span style="color: #333333;">.</span>add_argument(<span style="background-color: #fff0f0;">'-t'</span>, <span style="color: #007020;">type</span><span style="color: #333333;">=</span><span style="color: #007020;">float</span>, default<span style="color: #333333;">=</span><span style="color: #6600ee; font-weight: bold;">0.00</span>, help<span style="color: #333333;">=</span><span style="background-color: #fff0f0;">"chloroplast prediction cutoff, default 0.00"</span>)
parser<span style="color: #333333;">.</span>add_argument(<span style="background-color: #fff0f0;">'-o'</span>, <span style="color: #007020;">type</span><span style="color: #333333;">=</span><span style="color: #007020;">float</span>, default<span style="color: #333333;">=</span><span style="color: #6600ee; font-weight: bold;">0.00</span>, help<span style="color: #333333;">=</span><span style="background-color: #fff0f0;">"chloroplast prediction cutoff, default 0.00"</span>)
parser<span style="color: #333333;">.</span>add_argument(<span style="background-color: #fff0f0;">'--targetp_path'</span>, default<span style="color: #333333;">=</span><span style="color: #007020;">None</span>, help<span style="color: #333333;">=</span><span style="background-color: #fff0f0;">"path to targetp executable, if not in system PATH"</span>)
parser<span style="color: #333333;">.</span>add_argument(<span style="background-color: #fff0f0;">'--bin_size'</span>, <span style="color: #007020;">type</span><span style="color: #333333;">=</span><span style="color: #007020;">int</span>, default<span style="color: #333333;">=</span><span style="color: #0000dd; font-weight: bold;">1000</span>, help<span style="color: #333333;">=</span><span style="background-color: #fff0f0;">"number of sequences to submit to targetp at one time. If this number is too large, the program will fail. If it is too small, the program will run slowly. I find that numbers between 500 and 1500 usually work well, but it may depend on the sizes of the proteins you have."</span>)
args <span style="color: #333333;">=</span> parser<span style="color: #333333;">.</span>parse_args()
<span style="color: #008800; font-weight: bold;">if</span> args<span style="color: #333333;">.</span>bin_size <span style="color: #333333;"><</span> <span style="color: #0000dd; font-weight: bold;">1</span>:
<span style="color: #008800; font-weight: bold;">raise</span> argparse<span style="color: #333333;">.</span>ArgumentTypeError(<span style="background-color: #fff0f0;">"bin size must be an integer greater than or equal to 1"</span>)
<span style="color: #888888;">#If no output file is specified, output to stdout.</span>
outfile <span style="color: #333333;">=</span> sys<span style="color: #333333;">.</span>stdout
infile <span style="color: #333333;">=</span> sys<span style="color: #333333;">.</span>stdin
<span style="color: #008800; font-weight: bold;">if</span> args<span style="color: #333333;">.</span>input <span style="color: black; font-weight: bold;">is</span> <span style="color: black; font-weight: bold;">not</span> <span style="color: #007020;">None</span>:
infile <span style="color: #333333;">=</span> <span style="color: #007020;">open</span>(args<span style="color: #333333;">.</span>input, <span style="background-color: #fff0f0;">'rU'</span>)
main(outfile, infile, args)
outfile<span style="color: #333333;">.</span>close()
</pre>
</div>
Sean Johnsonhttp://www.blogger.com/profile/12906055564149166723noreply@blogger.com0tag:blogger.com,1999:blog-4023999156345551442.post-40216161530398871632017-04-29T09:06:00.001-07:002017-05-03T08:39:41.866-07:00Mira4 assembly of 454 reads from SRAI want to make an assembly of the Annona squamosa fruit transcriptome data from this paper (<a href="http://dx.doi.org/10.1186/s12864-015-1248-3">http://dx.doi.org/10.1186/s12864-015-1248-3</a>). They give in the paper a link to a web resource (<a href="http://www.annonatranscriptome.nabi.res.in/">http://www.annonatranscriptome.nabi.res.in/</a>), but the resource appears to now be defunct, so to get contigs reads, I will have to assemble the reads myself. The reads are from two different cultivars of Annona squamosa, so I'm going to assemble each cultivar separately first, and then if that works, I'll try a combined assembly.<br />
<br />
<a href="https://sourceforge.net/projects/mira-assembler/">MIRA</a> is a nice, free, software package that can assemble 454 data. I've had success with it before, so that's what I'll use for this project too.<br />
<br />
<br />
<a name='more'></a>I'm on a 64bit Ubuntu system. <br />
<br />
<b>Software that needs to be downloaded:</b><br />
Mira version 4, and the third-party tools (mira_3rdparty): <a href="https://sourceforge.net/projects/mira-assembler/files/">https://sourceforge.net/projects/mira-assembler/files/</a><br />
NCBI SRA toolkit (<a href="https://www.ncbi.nlm.nih.gov/sra/docs/toolkitsoft/">https://www.ncbi.nlm.nih.gov/sra/docs/toolkitsoft/</a>)<br />
EMBOSS (for seqret) (<a href="http://emboss.sourceforge.net/">http://emboss.sourceforge.net/</a>)<br />
NCBI local Blast <br />
<br />
<b>Data files that need to be downloaded:</b><br />
The 454 data should be downloaded from NCBI in the sff format. The sff format is much larger than the fastq format, but it contains the clipping information which is vital to a good assembly. Also the sequence names are in a format that MIRA can accept. MIRA will throw an error if an assembly is tried with fastq files obtained directly from SRA.<br />
<br />
The reads can all be found under SRP042646 (<a href="https://www.ncbi.nlm.nih.gov/sra/?term=SRP042646">https://www.ncbi.nlm.nih.gov/sra/?term=SRP042646</a>), notice that there are 8 runs total, 4 for each cultivar. The different runs for each cultivar represent developmental stages, but I'll assemble all developmental stages together all at once.<br />
<br />
fastq format and clipping information can be extracted from the sff file using sff_extract from the mira third party tools.<br />
<br />
Here is a bash script to download the data and extract the clipping information and fastq files for input into MIRA:<br />
<br />
<span style="color: blue;">for i in SRR1335735 SRR1335740 SRR1335741 SRR1335738 SRR1335736 SRR1321143 SRR1335737 SRR1335739<br />do<br /> /home/sean/Desktop/sratoolkit.2.8.2-1-ubuntu64/bin/sff-dump $i<br /> /home/sean/Desktop/mira/mira_third_party/sff_extract ${i}.sff<br />done</span><br />
<br />
<b>The assembly:</b><br />
<br />
Once you have the data files prepared, create the manifest file to set MIRA parameters:<br />
<br />
Here is the manifest file I used for the NMK1 assembly:<br />
<br />
<span style="color: red;"><span style="color: blue;"># A manifest file can contain comment lines, these start with the #-character<br /><br /># First part of a manifest: defining some basic things<br /><br />project = NMK1<br />job = est,denovo,accurate<br />parameters = -GE:not=4<br /><br /><br /># The second part defines the sequencing data MIRA should load and assemble<br /># The data is logically divided into "readgroups", for more information<br /># please consult the MIRA manual, chapter "Reference"<br /><br />readgroup = fruit<br />technology = 454<br />data = reads/SRR1335737.fastq reads/SRR1335736.fastq reads/SRR1335735.fastq reads/SRR1321143.fastq<br />data = reads/SRR1335737.xml reads/SRR1335736.xml reads/SRR1335735.xml reads/SRR1321143.xml</span></span><br />
<br />
Notice that you have to provide the fastq and the xml files separately as datafiles. MIRA won't know to look for the xml files unless you tell it about them. The parameter -GE:not=4 tells MIRA to use 4 threads.<br />
<br />
<br />
<br />
<b>Follow up:</b><br />
Assembly of NMK1 with just these parameters looked pretty good, there were 62,136 contigs, which is reasonable. I'd like to get a coverage table for the contigs so I can have some idea of relative expression. A nice summary table can be found in the [name]_d_info/[name]_info_contigstats.txt file.<br />
<br />
<br />
It seemed like maybe there were some unclipped adapter sequences, because there were a few very long contigs (2 of 10 kb), and there MIRA reported 7 "strong unresolved repeats", although no megahubs. Apart from adapter sequences, the presence of rRNA may be contaminating the library<br />
<br />
<b> </b><br />
To look for adapter sequences, I merged all of the reads into one file, and created a blast database out of it to search for potential adapters:<br />
<br />
<span style="color: blue;">cat *.fastq > merged.fastq</span><br />
<span style="color: blue;">seqret -sequence merged.fastq -outseq merged.fasta</span><br />
<span style="color: blue;">makeblastdb -input_type fasta -dbtype nucl -in merged.fasta -out reads</span><br />
<br />
First I checked for the adapters mentioned in the MIRA manual (<a href="http://mira-assembler.sourceforge.net/docs/DefinitiveGuideToMIRA.html#sect_faq_adaptors_and_pairedend_linker_sequences">http://mira-assembler.sourceforge.net/docs/DefinitiveGuideToMIRA.html#sect_faq_adaptors_and_pairedend_linker_sequences</a>)<br />
<br />
I made a fasta file with the following contents:<br />
<span style="color: blue;">>AdaptorA<br />CTGAGACAGGGAGGGAACAGATGGGACACGCAGGGATGAGATGG<br />>AdaptorB<br />CTGAGACACGCAACAGGGGATAGGCAAGGCACACAGGGGATAGG<br /><br />>5prime454adaptor<br />GCCTCCCTCGCGCCATCAGATCGTAGGCACCTGAAA<br />>3prime454adaptor<br />GCCTTGCCAGCCCGCTCAGATTGATGGTGCCTACAG<br /><br />>flxlinker<br />GTTGGAACCGAAAGGGTTTGAATTCAAACCCTTTCGGTTCCAAC<br /><br />>titlinker1<br />TCGTATAACTTCGTATAATGTATGCTATACGAAGTTATTACG<br />>titlinker2<br />CGTAATAACTTCGTATAGCATACATTATACGAAGTTATACGA</span><br />
<br />
And blasted it against the reads database:<br />
<br />
<span style="color: blue;">blastn -query potential_adapters.txt -db reads -max_target_seqs 100000 -outfmt 6 -out adapter_search.txt -word_size 6 -num_threads 4</span><br />
<br />
This gives less than 10 hits for each of the adapter sequences except for Adaptor B, which has about 12,000 hits (about 0.65 % of all reads). But only a segment of it. This suggests that perhaps this is the adapter sequence that was used. But maybe there is more to it. We should extract the reads that contain this sequence and compare them to each other to see if there is a longer consensus sequence that should be removed.<br />
<br />
The fastq files extracted from the sff file contain upper and lowercase letters. The lowercase letters are adapter sequence and low quality sequence that should not be included in the assembly. When fastq files are downloaded directly from genbank, these sequences have already been clipped off. The BLAST above was based on the SRA fastq files, and demonstrates that there are still some un-clipped adapter sequences.<br />
<br />
<br />Sean Johnsonhttp://www.blogger.com/profile/12906055564149166723noreply@blogger.com0tag:blogger.com,1999:blog-4023999156345551442.post-80857550400404447062017-03-20T04:24:00.000-07:002017-03-20T04:24:22.988-07:00Tips for Methods Development and Optimization in Biology<!--[if gte mso 9]><xml>
<o:OfficeDocumentSettings>
<o:AllowPNG/>
</o:OfficeDocumentSettings>
</xml><![endif]--><br />
<!--[if gte mso 9]><xml>
<w:WordDocument>
<w:View>Normal</w:View>
<w:Zoom>0</w:Zoom>
<w:TrackMoves/>
<w:TrackFormatting/>
<w:PunctuationKerning/>
<w:ValidateAgainstSchemas/>
<w:SaveIfXMLInvalid>false</w:SaveIfXMLInvalid>
<w:IgnoreMixedContent>false</w:IgnoreMixedContent>
<w:AlwaysShowPlaceholderText>false</w:AlwaysShowPlaceholderText>
<w:DoNotPromoteQF/>
<w:LidThemeOther>EN-US</w:LidThemeOther>
<w:LidThemeAsian>X-NONE</w:LidThemeAsian>
<w:LidThemeComplexScript>X-NONE</w:LidThemeComplexScript>
<w:Compatibility>
<w:BreakWrappedTables/>
<w:SnapToGridInCell/>
<w:WrapTextWithPunct/>
<w:UseAsianBreakRules/>
<w:DontGrowAutofit/>
<w:SplitPgBreakAndParaMark/>
<w:EnableOpenTypeKerning/>
<w:DontFlipMirrorIndents/>
<w:OverrideTableStyleHps/>
</w:Compatibility>
<m:mathPr>
<m:mathFont m:val="Cambria Math"/>
<m:brkBin m:val="before"/>
<m:brkBinSub m:val="--"/>
<m:smallFrac m:val="off"/>
<m:dispDef/>
<m:lMargin m:val="0"/>
<m:rMargin m:val="0"/>
<m:defJc m:val="centerGroup"/>
<m:wrapIndent m:val="1440"/>
<m:intLim m:val="subSup"/>
<m:naryLim m:val="undOvr"/>
</m:mathPr></w:WordDocument>
</xml><![endif]--><!--[if gte mso 9]><xml>
<w:LatentStyles DefLockedState="false" DefUnhideWhenUsed="false"
DefSemiHidden="false" DefQFormat="false" DefPriority="99"
LatentStyleCount="371">
<w:LsdException Locked="false" Priority="0" QFormat="true" Name="Normal"/>
<w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 1"/>
<w:LsdException Locked="false" Priority="9" SemiHidden="true"
UnhideWhenUsed="true" QFormat="true" Name="heading 2"/>
<w:LsdException Locked="false" Priority="9" SemiHidden="true"
UnhideWhenUsed="true" QFormat="true" Name="heading 3"/>
<w:LsdException Locked="false" Priority="9" SemiHidden="true"
UnhideWhenUsed="true" QFormat="true" Name="heading 4"/>
<w:LsdException Locked="false" Priority="9" SemiHidden="true"
UnhideWhenUsed="true" QFormat="true" Name="heading 5"/>
<w:LsdException Locked="false" Priority="9" SemiHidden="true"
UnhideWhenUsed="true" QFormat="true" Name="heading 6"/>
<w:LsdException Locked="false" Priority="9" SemiHidden="true"
UnhideWhenUsed="true" QFormat="true" Name="heading 7"/>
<w:LsdException Locked="false" Priority="9" SemiHidden="true"
UnhideWhenUsed="true" QFormat="true" Name="heading 8"/>
<w:LsdException Locked="false" Priority="9" SemiHidden="true"
UnhideWhenUsed="true" QFormat="true" Name="heading 9"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="index 1"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="index 2"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="index 3"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="index 4"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="index 5"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="index 6"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="index 7"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="index 8"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="index 9"/>
<w:LsdException Locked="false" Priority="39" SemiHidden="true"
UnhideWhenUsed="true" Name="toc 1"/>
<w:LsdException Locked="false" Priority="39" SemiHidden="true"
UnhideWhenUsed="true" Name="toc 2"/>
<w:LsdException Locked="false" Priority="39" SemiHidden="true"
UnhideWhenUsed="true" Name="toc 3"/>
<w:LsdException Locked="false" Priority="39" SemiHidden="true"
UnhideWhenUsed="true" Name="toc 4"/>
<w:LsdException Locked="false" Priority="39" SemiHidden="true"
UnhideWhenUsed="true" Name="toc 5"/>
<w:LsdException Locked="false" Priority="39" SemiHidden="true"
UnhideWhenUsed="true" Name="toc 6"/>
<w:LsdException Locked="false" Priority="39" SemiHidden="true"
UnhideWhenUsed="true" Name="toc 7"/>
<w:LsdException Locked="false" Priority="39" SemiHidden="true"
UnhideWhenUsed="true" Name="toc 8"/>
<w:LsdException Locked="false" Priority="39" SemiHidden="true"
UnhideWhenUsed="true" Name="toc 9"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Normal Indent"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="footnote text"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="annotation text"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="header"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="footer"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="index heading"/>
<w:LsdException Locked="false" Priority="35" SemiHidden="true"
UnhideWhenUsed="true" QFormat="true" Name="caption"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="table of figures"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="envelope address"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="envelope return"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="footnote reference"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="annotation reference"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="line number"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="page number"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="endnote reference"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="endnote text"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="table of authorities"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="macro"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="toa heading"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="List"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="List Bullet"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="List Number"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="List 2"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="List 3"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="List 4"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="List 5"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="List Bullet 2"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="List Bullet 3"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="List Bullet 4"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="List Bullet 5"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="List Number 2"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="List Number 3"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="List Number 4"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="List Number 5"/>
<w:LsdException Locked="false" Priority="10" QFormat="true" Name="Title"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Closing"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Signature"/>
<w:LsdException Locked="false" Priority="1" SemiHidden="true"
UnhideWhenUsed="true" Name="Default Paragraph Font"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Body Text"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Body Text Indent"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="List Continue"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="List Continue 2"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="List Continue 3"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="List Continue 4"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="List Continue 5"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Message Header"/>
<w:LsdException Locked="false" Priority="11" QFormat="true" Name="Subtitle"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Salutation"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Date"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Body Text First Indent"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Body Text First Indent 2"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Note Heading"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Body Text 2"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Body Text 3"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Body Text Indent 2"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Body Text Indent 3"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Block Text"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Hyperlink"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="FollowedHyperlink"/>
<w:LsdException Locked="false" Priority="22" QFormat="true" Name="Strong"/>
<w:LsdException Locked="false" Priority="20" QFormat="true" Name="Emphasis"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Document Map"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Plain Text"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="E-mail Signature"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="HTML Top of Form"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="HTML Bottom of Form"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Normal (Web)"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="HTML Acronym"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="HTML Address"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="HTML Cite"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="HTML Code"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="HTML Definition"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="HTML Keyboard"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="HTML Preformatted"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="HTML Sample"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="HTML Typewriter"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="HTML Variable"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Normal Table"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="annotation subject"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="No List"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Outline List 1"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Outline List 2"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Outline List 3"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table Simple 1"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table Simple 2"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table Simple 3"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table Classic 1"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table Classic 2"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table Classic 3"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table Classic 4"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table Colorful 1"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table Colorful 2"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table Colorful 3"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table Columns 1"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table Columns 2"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table Columns 3"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table Columns 4"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table Columns 5"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table Grid 1"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table Grid 2"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table Grid 3"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table Grid 4"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table Grid 5"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table Grid 6"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table Grid 7"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table Grid 8"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table List 1"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table List 2"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table List 3"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table List 4"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table List 5"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table List 6"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table List 7"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table List 8"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table 3D effects 1"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table 3D effects 2"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table 3D effects 3"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table Contemporary"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table Elegant"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table Professional"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table Subtle 1"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table Subtle 2"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table Web 1"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table Web 2"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table Web 3"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Balloon Text"/>
<w:LsdException Locked="false" Priority="39" Name="Table Grid"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table Theme"/>
<w:LsdException Locked="false" SemiHidden="true" Name="Placeholder Text"/>
<w:LsdException Locked="false" Priority="1" QFormat="true" Name="No Spacing"/>
<w:LsdException Locked="false" Priority="60" Name="Light Shading"/>
<w:LsdException Locked="false" Priority="61" Name="Light List"/>
<w:LsdException Locked="false" Priority="62" Name="Light Grid"/>
<w:LsdException Locked="false" Priority="63" Name="Medium Shading 1"/>
<w:LsdException Locked="false" Priority="64" Name="Medium Shading 2"/>
<w:LsdException Locked="false" Priority="65" Name="Medium List 1"/>
<w:LsdException Locked="false" Priority="66" Name="Medium List 2"/>
<w:LsdException Locked="false" Priority="67" Name="Medium Grid 1"/>
<w:LsdException Locked="false" Priority="68" Name="Medium Grid 2"/>
<w:LsdException Locked="false" Priority="69" Name="Medium Grid 3"/>
<w:LsdException Locked="false" Priority="70" Name="Dark List"/>
<w:LsdException Locked="false" Priority="71" Name="Colorful Shading"/>
<w:LsdException Locked="false" Priority="72" Name="Colorful List"/>
<w:LsdException Locked="false" Priority="73" Name="Colorful Grid"/>
<w:LsdException Locked="false" Priority="60" Name="Light Shading Accent 1"/>
<w:LsdException Locked="false" Priority="61" Name="Light List Accent 1"/>
<w:LsdException Locked="false" Priority="62" Name="Light Grid Accent 1"/>
<w:LsdException Locked="false" Priority="63" Name="Medium Shading 1 Accent 1"/>
<w:LsdException Locked="false" Priority="64" Name="Medium Shading 2 Accent 1"/>
<w:LsdException Locked="false" Priority="65" Name="Medium List 1 Accent 1"/>
<w:LsdException Locked="false" SemiHidden="true" Name="Revision"/>
<w:LsdException Locked="false" Priority="34" QFormat="true"
Name="List Paragraph"/>
<w:LsdException Locked="false" Priority="29" QFormat="true" Name="Quote"/>
<w:LsdException Locked="false" Priority="30" QFormat="true"
Name="Intense Quote"/>
<w:LsdException Locked="false" Priority="66" Name="Medium List 2 Accent 1"/>
<w:LsdException Locked="false" Priority="67" Name="Medium Grid 1 Accent 1"/>
<w:LsdException Locked="false" Priority="68" Name="Medium Grid 2 Accent 1"/>
<w:LsdException Locked="false" Priority="69" Name="Medium Grid 3 Accent 1"/>
<w:LsdException Locked="false" Priority="70" Name="Dark List Accent 1"/>
<w:LsdException Locked="false" Priority="71" Name="Colorful Shading Accent 1"/>
<w:LsdException Locked="false" Priority="72" Name="Colorful List Accent 1"/>
<w:LsdException Locked="false" Priority="73" Name="Colorful Grid Accent 1"/>
<w:LsdException Locked="false" Priority="60" Name="Light Shading Accent 2"/>
<w:LsdException Locked="false" Priority="61" Name="Light List Accent 2"/>
<w:LsdException Locked="false" Priority="62" Name="Light Grid Accent 2"/>
<w:LsdException Locked="false" Priority="63" Name="Medium Shading 1 Accent 2"/>
<w:LsdException Locked="false" Priority="64" Name="Medium Shading 2 Accent 2"/>
<w:LsdException Locked="false" Priority="65" Name="Medium List 1 Accent 2"/>
<w:LsdException Locked="false" Priority="66" Name="Medium List 2 Accent 2"/>
<w:LsdException Locked="false" Priority="67" Name="Medium Grid 1 Accent 2"/>
<w:LsdException Locked="false" Priority="68" Name="Medium Grid 2 Accent 2"/>
<w:LsdException Locked="false" Priority="69" Name="Medium Grid 3 Accent 2"/>
<w:LsdException Locked="false" Priority="70" Name="Dark List Accent 2"/>
<w:LsdException Locked="false" Priority="71" Name="Colorful Shading Accent 2"/>
<w:LsdException Locked="false" Priority="72" Name="Colorful List Accent 2"/>
<w:LsdException Locked="false" Priority="73" Name="Colorful Grid Accent 2"/>
<w:LsdException Locked="false" Priority="60" Name="Light Shading Accent 3"/>
<w:LsdException Locked="false" Priority="61" Name="Light List Accent 3"/>
<w:LsdException Locked="false" Priority="62" Name="Light Grid Accent 3"/>
<w:LsdException Locked="false" Priority="63" Name="Medium Shading 1 Accent 3"/>
<w:LsdException Locked="false" Priority="64" Name="Medium Shading 2 Accent 3"/>
<w:LsdException Locked="false" Priority="65" Name="Medium List 1 Accent 3"/>
<w:LsdException Locked="false" Priority="66" Name="Medium List 2 Accent 3"/>
<w:LsdException Locked="false" Priority="67" Name="Medium Grid 1 Accent 3"/>
<w:LsdException Locked="false" Priority="68" Name="Medium Grid 2 Accent 3"/>
<w:LsdException Locked="false" Priority="69" Name="Medium Grid 3 Accent 3"/>
<w:LsdException Locked="false" Priority="70" Name="Dark List Accent 3"/>
<w:LsdException Locked="false" Priority="71" Name="Colorful Shading Accent 3"/>
<w:LsdException Locked="false" Priority="72" Name="Colorful List Accent 3"/>
<w:LsdException Locked="false" Priority="73" Name="Colorful Grid Accent 3"/>
<w:LsdException Locked="false" Priority="60" Name="Light Shading Accent 4"/>
<w:LsdException Locked="false" Priority="61" Name="Light List Accent 4"/>
<w:LsdException Locked="false" Priority="62" Name="Light Grid Accent 4"/>
<w:LsdException Locked="false" Priority="63" Name="Medium Shading 1 Accent 4"/>
<w:LsdException Locked="false" Priority="64" Name="Medium Shading 2 Accent 4"/>
<w:LsdException Locked="false" Priority="65" Name="Medium List 1 Accent 4"/>
<w:LsdException Locked="false" Priority="66" Name="Medium List 2 Accent 4"/>
<w:LsdException Locked="false" Priority="67" Name="Medium Grid 1 Accent 4"/>
<w:LsdException Locked="false" Priority="68" Name="Medium Grid 2 Accent 4"/>
<w:LsdException Locked="false" Priority="69" Name="Medium Grid 3 Accent 4"/>
<w:LsdException Locked="false" Priority="70" Name="Dark List Accent 4"/>
<w:LsdException Locked="false" Priority="71" Name="Colorful Shading Accent 4"/>
<w:LsdException Locked="false" Priority="72" Name="Colorful List Accent 4"/>
<w:LsdException Locked="false" Priority="73" Name="Colorful Grid Accent 4"/>
<w:LsdException Locked="false" Priority="60" Name="Light Shading Accent 5"/>
<w:LsdException Locked="false" Priority="61" Name="Light List Accent 5"/>
<w:LsdException Locked="false" Priority="62" Name="Light Grid Accent 5"/>
<w:LsdException Locked="false" Priority="63" Name="Medium Shading 1 Accent 5"/>
<w:LsdException Locked="false" Priority="64" Name="Medium Shading 2 Accent 5"/>
<w:LsdException Locked="false" Priority="65" Name="Medium List 1 Accent 5"/>
<w:LsdException Locked="false" Priority="66" Name="Medium List 2 Accent 5"/>
<w:LsdException Locked="false" Priority="67" Name="Medium Grid 1 Accent 5"/>
<w:LsdException Locked="false" Priority="68" Name="Medium Grid 2 Accent 5"/>
<w:LsdException Locked="false" Priority="69" Name="Medium Grid 3 Accent 5"/>
<w:LsdException Locked="false" Priority="70" Name="Dark List Accent 5"/>
<w:LsdException Locked="false" Priority="71" Name="Colorful Shading Accent 5"/>
<w:LsdException Locked="false" Priority="72" Name="Colorful List Accent 5"/>
<w:LsdException Locked="false" Priority="73" Name="Colorful Grid Accent 5"/>
<w:LsdException Locked="false" Priority="60" Name="Light Shading Accent 6"/>
<w:LsdException Locked="false" Priority="61" Name="Light List Accent 6"/>
<w:LsdException Locked="false" Priority="62" Name="Light Grid Accent 6"/>
<w:LsdException Locked="false" Priority="63" Name="Medium Shading 1 Accent 6"/>
<w:LsdException Locked="false" Priority="64" Name="Medium Shading 2 Accent 6"/>
<w:LsdException Locked="false" Priority="65" Name="Medium List 1 Accent 6"/>
<w:LsdException Locked="false" Priority="66" Name="Medium List 2 Accent 6"/>
<w:LsdException Locked="false" Priority="67" Name="Medium Grid 1 Accent 6"/>
<w:LsdException Locked="false" Priority="68" Name="Medium Grid 2 Accent 6"/>
<w:LsdException Locked="false" Priority="69" Name="Medium Grid 3 Accent 6"/>
<w:LsdException Locked="false" Priority="70" Name="Dark List Accent 6"/>
<w:LsdException Locked="false" Priority="71" Name="Colorful Shading Accent 6"/>
<w:LsdException Locked="false" Priority="72" Name="Colorful List Accent 6"/>
<w:LsdException Locked="false" Priority="73" Name="Colorful Grid Accent 6"/>
<w:LsdException Locked="false" Priority="19" QFormat="true"
Name="Subtle Emphasis"/>
<w:LsdException Locked="false" Priority="21" QFormat="true"
Name="Intense Emphasis"/>
<w:LsdException Locked="false" Priority="31" QFormat="true"
Name="Subtle Reference"/>
<w:LsdException Locked="false" Priority="32" QFormat="true"
Name="Intense Reference"/>
<w:LsdException Locked="false" Priority="33" QFormat="true" Name="Book Title"/>
<w:LsdException Locked="false" Priority="37" SemiHidden="true"
UnhideWhenUsed="true" Name="Bibliography"/>
<w:LsdException Locked="false" Priority="39" SemiHidden="true"
UnhideWhenUsed="true" QFormat="true" Name="TOC Heading"/>
<w:LsdException Locked="false" Priority="41" Name="Plain Table 1"/>
<w:LsdException Locked="false" Priority="42" Name="Plain Table 2"/>
<w:LsdException Locked="false" Priority="43" Name="Plain Table 3"/>
<w:LsdException Locked="false" Priority="44" Name="Plain Table 4"/>
<w:LsdException Locked="false" Priority="45" Name="Plain Table 5"/>
<w:LsdException Locked="false" Priority="40" Name="Grid Table Light"/>
<w:LsdException Locked="false" Priority="46" Name="Grid Table 1 Light"/>
<w:LsdException Locked="false" Priority="47" Name="Grid Table 2"/>
<w:LsdException Locked="false" Priority="48" Name="Grid Table 3"/>
<w:LsdException Locked="false" Priority="49" Name="Grid Table 4"/>
<w:LsdException Locked="false" Priority="50" Name="Grid Table 5 Dark"/>
<w:LsdException Locked="false" Priority="51" Name="Grid Table 6 Colorful"/>
<w:LsdException Locked="false" Priority="52" Name="Grid Table 7 Colorful"/>
<w:LsdException Locked="false" Priority="46"
Name="Grid Table 1 Light Accent 1"/>
<w:LsdException Locked="false" Priority="47" Name="Grid Table 2 Accent 1"/>
<w:LsdException Locked="false" Priority="48" Name="Grid Table 3 Accent 1"/>
<w:LsdException Locked="false" Priority="49" Name="Grid Table 4 Accent 1"/>
<w:LsdException Locked="false" Priority="50" Name="Grid Table 5 Dark Accent 1"/>
<w:LsdException Locked="false" Priority="51"
Name="Grid Table 6 Colorful Accent 1"/>
<w:LsdException Locked="false" Priority="52"
Name="Grid Table 7 Colorful Accent 1"/>
<w:LsdException Locked="false" Priority="46"
Name="Grid Table 1 Light Accent 2"/>
<w:LsdException Locked="false" Priority="47" Name="Grid Table 2 Accent 2"/>
<w:LsdException Locked="false" Priority="48" Name="Grid Table 3 Accent 2"/>
<w:LsdException Locked="false" Priority="49" Name="Grid Table 4 Accent 2"/>
<w:LsdException Locked="false" Priority="50" Name="Grid Table 5 Dark Accent 2"/>
<w:LsdException Locked="false" Priority="51"
Name="Grid Table 6 Colorful Accent 2"/>
<w:LsdException Locked="false" Priority="52"
Name="Grid Table 7 Colorful Accent 2"/>
<w:LsdException Locked="false" Priority="46"
Name="Grid Table 1 Light Accent 3"/>
<w:LsdException Locked="false" Priority="47" Name="Grid Table 2 Accent 3"/>
<w:LsdException Locked="false" Priority="48" Name="Grid Table 3 Accent 3"/>
<w:LsdException Locked="false" Priority="49" Name="Grid Table 4 Accent 3"/>
<w:LsdException Locked="false" Priority="50" Name="Grid Table 5 Dark Accent 3"/>
<w:LsdException Locked="false" Priority="51"
Name="Grid Table 6 Colorful Accent 3"/>
<w:LsdException Locked="false" Priority="52"
Name="Grid Table 7 Colorful Accent 3"/>
<w:LsdException Locked="false" Priority="46"
Name="Grid Table 1 Light Accent 4"/>
<w:LsdException Locked="false" Priority="47" Name="Grid Table 2 Accent 4"/>
<w:LsdException Locked="false" Priority="48" Name="Grid Table 3 Accent 4"/>
<w:LsdException Locked="false" Priority="49" Name="Grid Table 4 Accent 4"/>
<w:LsdException Locked="false" Priority="50" Name="Grid Table 5 Dark Accent 4"/>
<w:LsdException Locked="false" Priority="51"
Name="Grid Table 6 Colorful Accent 4"/>
<w:LsdException Locked="false" Priority="52"
Name="Grid Table 7 Colorful Accent 4"/>
<w:LsdException Locked="false" Priority="46"
Name="Grid Table 1 Light Accent 5"/>
<w:LsdException Locked="false" Priority="47" Name="Grid Table 2 Accent 5"/>
<w:LsdException Locked="false" Priority="48" Name="Grid Table 3 Accent 5"/>
<w:LsdException Locked="false" Priority="49" Name="Grid Table 4 Accent 5"/>
<w:LsdException Locked="false" Priority="50" Name="Grid Table 5 Dark Accent 5"/>
<w:LsdException Locked="false" Priority="51"
Name="Grid Table 6 Colorful Accent 5"/>
<w:LsdException Locked="false" Priority="52"
Name="Grid Table 7 Colorful Accent 5"/>
<w:LsdException Locked="false" Priority="46"
Name="Grid Table 1 Light Accent 6"/>
<w:LsdException Locked="false" Priority="47" Name="Grid Table 2 Accent 6"/>
<w:LsdException Locked="false" Priority="48" Name="Grid Table 3 Accent 6"/>
<w:LsdException Locked="false" Priority="49" Name="Grid Table 4 Accent 6"/>
<w:LsdException Locked="false" Priority="50" Name="Grid Table 5 Dark Accent 6"/>
<w:LsdException Locked="false" Priority="51"
Name="Grid Table 6 Colorful Accent 6"/>
<w:LsdException Locked="false" Priority="52"
Name="Grid Table 7 Colorful Accent 6"/>
<w:LsdException Locked="false" Priority="46" Name="List Table 1 Light"/>
<w:LsdException Locked="false" Priority="47" Name="List Table 2"/>
<w:LsdException Locked="false" Priority="48" Name="List Table 3"/>
<w:LsdException Locked="false" Priority="49" Name="List Table 4"/>
<w:LsdException Locked="false" Priority="50" Name="List Table 5 Dark"/>
<w:LsdException Locked="false" Priority="51" Name="List Table 6 Colorful"/>
<w:LsdException Locked="false" Priority="52" Name="List Table 7 Colorful"/>
<w:LsdException Locked="false" Priority="46"
Name="List Table 1 Light Accent 1"/>
<w:LsdException Locked="false" Priority="47" Name="List Table 2 Accent 1"/>
<w:LsdException Locked="false" Priority="48" Name="List Table 3 Accent 1"/>
<w:LsdException Locked="false" Priority="49" Name="List Table 4 Accent 1"/>
<w:LsdException Locked="false" Priority="50" Name="List Table 5 Dark Accent 1"/>
<w:LsdException Locked="false" Priority="51"
Name="List Table 6 Colorful Accent 1"/>
<w:LsdException Locked="false" Priority="52"
Name="List Table 7 Colorful Accent 1"/>
<w:LsdException Locked="false" Priority="46"
Name="List Table 1 Light Accent 2"/>
<w:LsdException Locked="false" Priority="47" Name="List Table 2 Accent 2"/>
<w:LsdException Locked="false" Priority="48" Name="List Table 3 Accent 2"/>
<w:LsdException Locked="false" Priority="49" Name="List Table 4 Accent 2"/>
<w:LsdException Locked="false" Priority="50" Name="List Table 5 Dark Accent 2"/>
<w:LsdException Locked="false" Priority="51"
Name="List Table 6 Colorful Accent 2"/>
<w:LsdException Locked="false" Priority="52"
Name="List Table 7 Colorful Accent 2"/>
<w:LsdException Locked="false" Priority="46"
Name="List Table 1 Light Accent 3"/>
<w:LsdException Locked="false" Priority="47" Name="List Table 2 Accent 3"/>
<w:LsdException Locked="false" Priority="48" Name="List Table 3 Accent 3"/>
<w:LsdException Locked="false" Priority="49" Name="List Table 4 Accent 3"/>
<w:LsdException Locked="false" Priority="50" Name="List Table 5 Dark Accent 3"/>
<w:LsdException Locked="false" Priority="51"
Name="List Table 6 Colorful Accent 3"/>
<w:LsdException Locked="false" Priority="52"
Name="List Table 7 Colorful Accent 3"/>
<w:LsdException Locked="false" Priority="46"
Name="List Table 1 Light Accent 4"/>
<w:LsdException Locked="false" Priority="47" Name="List Table 2 Accent 4"/>
<w:LsdException Locked="false" Priority="48" Name="List Table 3 Accent 4"/>
<w:LsdException Locked="false" Priority="49" Name="List Table 4 Accent 4"/>
<w:LsdException Locked="false" Priority="50" Name="List Table 5 Dark Accent 4"/>
<w:LsdException Locked="false" Priority="51"
Name="List Table 6 Colorful Accent 4"/>
<w:LsdException Locked="false" Priority="52"
Name="List Table 7 Colorful Accent 4"/>
<w:LsdException Locked="false" Priority="46"
Name="List Table 1 Light Accent 5"/>
<w:LsdException Locked="false" Priority="47" Name="List Table 2 Accent 5"/>
<w:LsdException Locked="false" Priority="48" Name="List Table 3 Accent 5"/>
<w:LsdException Locked="false" Priority="49" Name="List Table 4 Accent 5"/>
<w:LsdException Locked="false" Priority="50" Name="List Table 5 Dark Accent 5"/>
<w:LsdException Locked="false" Priority="51"
Name="List Table 6 Colorful Accent 5"/>
<w:LsdException Locked="false" Priority="52"
Name="List Table 7 Colorful Accent 5"/>
<w:LsdException Locked="false" Priority="46"
Name="List Table 1 Light Accent 6"/>
<w:LsdException Locked="false" Priority="47" Name="List Table 2 Accent 6"/>
<w:LsdException Locked="false" Priority="48" Name="List Table 3 Accent 6"/>
<w:LsdException Locked="false" Priority="49" Name="List Table 4 Accent 6"/>
<w:LsdException Locked="false" Priority="50" Name="List Table 5 Dark Accent 6"/>
<w:LsdException Locked="false" Priority="51"
Name="List Table 6 Colorful Accent 6"/>
<w:LsdException Locked="false" Priority="52"
Name="List Table 7 Colorful Accent 6"/>
</w:LatentStyles>
</xml><![endif]--><!--[if gte mso 10]>
<style>
/* Style Definitions */
table.MsoNormalTable
{mso-style-name:"Table Normal";
mso-tstyle-rowband-size:0;
mso-tstyle-colband-size:0;
mso-style-noshow:yes;
mso-style-priority:99;
mso-style-parent:"";
mso-padding-alt:0in 5.4pt 0in 5.4pt;
mso-para-margin-top:0in;
mso-para-margin-right:0in;
mso-para-margin-bottom:8.0pt;
mso-para-margin-left:0in;
line-height:107%;
mso-pagination:widow-orphan;
font-size:11.0pt;
font-family:"Calibri",sans-serif;
mso-ascii-font-family:Calibri;
mso-ascii-theme-font:minor-latin;
mso-hansi-font-family:Calibri;
mso-hansi-theme-font:minor-latin;
mso-bidi-font-family:"Times New Roman";
mso-bidi-theme-font:minor-bidi;}
</style>
<![endif]-->
<br />
<div class="MsoNormal">
<span style="mso-bidi-font-weight: normal;"><span style="font-size: 10.0pt; line-height: 107%;">I haven't posted anything in quite a while. Mostly that's because I haven't written anything that I thought would be of general interest. I once again have a young lab assistant to preach at, so I might as well preach at the world too. Here is what I've written for her about methods development in the biology </span></span><span style="mso-bidi-font-weight: normal;"><span style="font-size: 10.0pt; line-height: 107%;"><span style="mso-bidi-font-weight: normal;"><span style="font-size: 10.0pt; line-height: 107%;"> laboratory</span></span>.</span></span></div>
<div class="MsoNormal">
<br /></div>
<div class="MsoNormal">
<span style="mso-bidi-font-weight: normal;"><span style="font-size: 10.0pt; line-height: 107%;"></span></span></div>
<a name='more'></a> <b style="mso-bidi-font-weight: normal;"><span style="font-size: 10.0pt; line-height: 107%;"> </span></b><br />
<div class="MsoNormal">
<br /></div>
<div class="MsoNormal">
<b style="mso-bidi-font-weight: normal;"><span style="font-size: 10.0pt; line-height: 107%;">Optimization and methods development:</span></b></div>
<div class="MsoNormal">
<span style="font-size: 10.0pt; line-height: 107%;">In science,
and particularly in biology, very rarely does an experiment work the first time
a different scientist tries it. Ideally, when a paper is published, the methods
will be explained in enough detail for anyone with access to the right materials
to reproduce it. However, it is usually the case that experiments are described
incompletely and people who try to use them need to spend a little bit of time
optimizing and trying different parameters. Sometimes a citation is given to
another publication where more details are available, but questions often
remain even after following the entire paper trail. There are many cases of
high-profile research where independent labs have failed to be able to
reproduce the published results, this has been called the “Replication Crisis”
and is a major issue in all branches of science today.</span></div>
<div class="MsoNormal">
<br /></div>
<div class="MsoNormal">
<span style="font-size: 10.0pt; line-height: 107%;">Here are
some important points to keep in mind when developing or adapting a method:</span></div>
<div class="MsoNormal">
<span style="font-size: 10.0pt; line-height: 107%;"></span></div>
<div class="MsoNormal">
<br /></div>
<div class="MsoListParagraphCxSpFirst" style="mso-list: l0 level1 lfo1; text-indent: -.25in;">
<span style="font-size: 10.0pt; line-height: 107%; mso-bidi-font-family: Calibri; mso-bidi-theme-font: minor-latin;"><span style="mso-list: Ignore;">1.<span style="font: 7.0pt "Times New Roman";"> </span></span></span><b style="mso-bidi-font-weight: normal;"><span style="font-size: 10.0pt; line-height: 107%;">Define the victory conditions</span></b><span style="font-size: 10.0pt; line-height: 107%;">. This is the first, and most important step in methods
development. How will you know that the method is good enough? Write it down. Be
as specific as possible. Try to use quantitative parameters. Biology is still
largely a qualitative discipline, so you will often find yourself defining
success in terms of qualitative parameters. Defining the victory conditions is useful because it lets you
know when you are done and can move on. Having a clear goal also helps you
think more clearly about what you need to do to get there, for example, which
parameters should be changed or observed. Many scientists have wasted years of
their lives optimizing methods that were already good enough, or that could
never be good enough because they were shooting at a moving or nonexistent
target.</span></div>
<div class="MsoListParagraphCxSpFirst" style="mso-list: l0 level1 lfo1; text-indent: -.25in;">
<br /></div>
<div class="MsoListParagraphCxSpMiddle" style="mso-list: l0 level1 lfo1; text-indent: -.25in;">
<span style="font-size: 10.0pt; line-height: 107%; mso-bidi-font-family: Calibri; mso-bidi-theme-font: minor-latin;"><span style="mso-list: Ignore;">2.<span style="font: 7.0pt "Times New Roman";"> </span></span></span><b style="mso-bidi-font-weight: normal;"><span style="font-size: 10.0pt; line-height: 107%;">Manipulate only one variable at a time</span></b><span style="font-size: 10.0pt; line-height: 107%;">. Try to keep as many aspects of the experiment as
possible constant between trials, so that you can know for sure what causes the
differences you’re observing. To cover a large parameter space, do a lot of
individual trials. In some cases, for example if it is an expensive or time
consuming experiment that you can’t do many trials of, you may have to change
multiple variables at a time so you can cover a larger parameter space, but
this is not preferred.</span></div>
<div class="MsoListParagraphCxSpMiddle" style="mso-list: l0 level1 lfo1; text-indent: -.25in;">
<br /></div>
<div class="MsoListParagraphCxSpMiddle" style="mso-list: l0 level1 lfo1; text-indent: -.25in;">
<span style="font-size: 10.0pt; line-height: 107%; mso-bidi-font-family: Calibri; mso-bidi-theme-font: minor-latin;"><span style="mso-list: Ignore;">3.<span style="font: 7.0pt "Times New Roman";"> </span></span></span><b style="mso-bidi-font-weight: normal;"><span style="font-size: 10.0pt; line-height: 107%;">Keep detailed and systematic records</span></b><span style="font-size: 10.0pt; line-height: 107%;">. Write down what you’ve tried and what you’ve
observed. Tables are a good way to organize observations. Record exactly which
variables you changed. Write a description of the results. If applicable, take
pictures and save instrument data files. You can’t know which observations will
be the most helpful later, so try to record as much as possible.</span></div>
<div class="MsoListParagraphCxSpMiddle" style="mso-list: l0 level1 lfo1; text-indent: -.25in;">
<br /></div>
<div class="MsoListParagraphCxSpMiddle" style="mso-list: l0 level1 lfo1; text-indent: -.25in;">
<span style="font-size: 10.0pt; line-height: 107%; mso-bidi-font-family: Calibri; mso-bidi-theme-font: minor-latin;"><span style="mso-list: Ignore;">4.<span style="font: 7.0pt "Times New Roman";"> </span></span></span><b style="mso-bidi-font-weight: normal;"><span style="font-size: 10.0pt; line-height: 107%;">Take time to stop and think</span></b><span style="font-size: 10.0pt; line-height: 107%;">. After you’ve done some experiments and recorded the
results, look back at your observation notes. Look back also at the victory
conditions you defined. What experimental conditions are getting you closest to
your goal? What conditions are not working so well? Can you think of a mechanistic
explanation for why some conditions work better than others? <span style="mso-spacerun: yes;"> </span>Science may be one of the few disciplines
where a day spent staring into space, occasionally jotting down notes, can be
your most productive day of the year.</span></div>
<div class="MsoListParagraphCxSpMiddle" style="mso-list: l0 level1 lfo1; text-indent: -.25in;">
<br /></div>
<div class="MsoListParagraphCxSpLast" style="mso-list: l0 level1 lfo1; text-indent: -.25in;">
<span style="font-size: 10.0pt; line-height: 107%; mso-bidi-font-family: Calibri; mso-bidi-theme-font: minor-latin;"><span style="mso-list: Ignore;">5.<span style="font: 7.0pt "Times New Roman";"> </span></span></span><b style="mso-bidi-font-weight: normal;"><span style="font-size: 10.0pt; line-height: 107%;">Be persistent and have a long memory</span></b><span style="font-size: 10.0pt; line-height: 107%;">. If you have defined realistic victory conditions,
and spent enough time researching the problem and trying different solutions,
usually you will eventually either reach the victory conditions, or you will
come to understand the system well enough to know why the victory conditions
are unrealistic. In some cases, even after much thought and effort, your
experiments still won’t behave as you expect them to, and you may not have any
idea why. In these cases, it may be time to move on to a different question for
a while. Brains work subconsciously on our unsolved problems, so perhaps in the
coming weeks, months, or years something will click and you’ll suddenly
understand the problem better and will be able to address it. We are fortunate
to live in an age where there are countless interesting open questions in
biology, and when our tools have become sophisticated enough to allow us to
effectively attack many of them. </span></div>
Sean Johnsonhttp://www.blogger.com/profile/12906055564149166723noreply@blogger.com0tag:blogger.com,1999:blog-4023999156345551442.post-41536616278098369962016-11-10T15:45:00.000-08:002019-05-05T09:15:03.127-07:00The Loss of the Creature, Walker Percy, detailed commentary I think the essay "The Loss of the Creature" by Walker Percy (from the book <a href="https://en.wikipedia.org/wiki/The_Message_in_the_Bottle">The Message in the Bottle</a>) is well worth reading and thinking about. In this post I offer a detailed, paragraph-by-paragraph commentary of the essay. This post isn't really meant to be read from beginning to end (if you try that, it may get repetitive). It's meant more as a set of detailed footnotes for people who find the essay to be confusing. The way to follow this post is to print off Percy's essay, then number the paragraphs. By my numbering, there are 38 paragraphs in section I, and 24 paragraphs in section II (starting with #39, ending with #62). When reading, if you get stuck on a paragraph, look it up here, and maybe my comments will make it more clear (hopefully they won't make it even more confusing). For a more personalized discussion, please leave a comment. I'm well aware of the irony of writing an analysis of this essay as though I expect people to experience the essay through my interpretation (exactly opposite to how the essay encourages us to experience the world). I would encourage you to not think of my commentary as authoritative, but maybe just as a spark for your own thought.<br />
<br />
(This is a work in progress, I got about half way through and then set it aside. It's been sitting unfinished for long enough that I feel I might as well just publish what I have. I hope to finish it eventually. In the mean time, if anybody else would like to contribute commentary for the remaining paragraphs, that would be nice.)<br />
<br />
<a name='more'></a><br />
<br />
<b>1.-2.</b> "Fermosa" is an archaic version of the Spanish word "hermosa", which means beautiful. A major theme of the essay is that our perceptions are heavily influenced by social context. The rarity of an experience contributes to its value independent of the other qualities of the experience. A remote island or an expensive wine is valued because it is exclusive, even if it is otherwise not particularly exceptional.<br />
<br />
<b>3.</b> Percy uses an equation to describe the devaluation of an experience (making up some variable names that Percy omitted): V = P/n, where V is the value of an experience to an individual, P is the value of the experience to the first person who experienced it, and n is the total number of people who have experienced it. Notice that V = P when n = 1. In other words, people tend to value an experience most if they are the only person who has ever had access to it, and the value of the experience is seen to decrease proportionally to the number of people who have had access to it.<br />
<br />
<b>4.</b> By taking a guided tour, the family forfeit the ability to experience. If you accept the premise that an experience loses value as more people experience it, then it follows logically that a scripted guided tour that thousands of people have already gone through in a very similar way would be an experience with little value. The man and his family have not seen the grand canyon, what they have seen is a scripted, guided tour.<br />
<br />
If you don't accept the premise that an experience loses value proportionally to the number of people who have experienced it, read on! (there may yet be something in this essay for you)<br />
<br />
<b>5.</b> One reason why an experience loses value when it is experienced is that the people who first experience it report on it. Later visitors then approach the experience with preconceived notions (based on the reports of the earlier visitors). When visitors have preconceived notions, their attention is divided. They are constantly comparing the experience to what they have previously heard about it. If it doesn't measure up to their expectations (based on reports from previous visitors), they feel cheated or disappointed. When a visitor has preconceived notions that he compares an experience to, he loses some ownership (sovereignty) of the experience.<br />
Percy also introduces the concept of a 'symbolic complex' in this paragraph. What he means is this: when a person compares his experiences to those of someone else, it is not the other person's exact experiences he is comparing to. He can't possibly know exactly what the other person experienced (nor can he perfectly remember his own experiences for that matter). His idea of the other person's experience is a reconstruction (a model) he has built in his mind based on the (incomplete) information he has received from the other person (or remembered). That reconstruction is what Percy calls the "symbolic complex".<br />
<br />
<b>6.</b> Photographing the Grand Canyon is a loss of sovereignty (ownership) of the experience of the Grand Canyon because instead of enjoying and experiencing the canyon, a person taking a photograph is creating an imperfect representation of it. The reason a tourist takes a photo is to show people, either other people, or himself in the future. The photographer tourist is more concerned about creating imperfect symbols that he can share than with experiencing for himself in the present the Canyon as it actually is.<br />
<br />
The tourist surrenders ownership of the experience to the past by arriving at it with preconceived notions. He surrenders ownership of the experience to the future by worrying about creating symbols that other people can use to generate their own preconceived notions.<br />
<br />
The big question to ask from this paragraph is "Why is the tourist taking pictures?"<br />
<br />
<b>7.</b> They can't see the Canyon because it has become a symbol or a collection of symbols to them.<br />
<br />
<b>8.-9.</b> The experience can be recovered by going off the beaten track, the approved tour. When he leaves the beaten track, he commences an experience that he has fewer preconceived notions about. All of the sudden, it's up to him to do the discovering and the experiencing, there's no park ranger to interpret things for him and tell him what he should be paying attention to and how he should interpret it. The experience is now is own (sovereign) experience.<br />
<br />
The ranger can ruin a particular avenue for recovering sovereignty of an experience by advertising it. When the ranger tells a tourist how to get "off the beaten track", he can't avoid planting preconceived notions (symbols) about the experience in the tourists head.<br />
<br />
<b>10. -11.</b> "Dialectic" in this context refers to situational awareness and self awareness. A person who is "advanced in the dialectic" is aware of what he is doing and why he is doing it. The man goes with the tour group even though he is aware of the risk posed by preconceived notions. He knows that a tour group is the kind of situation that encourages people to view an experience through someone else's interpretation instead of discovering the experience for themselves. This so-called "complex man", understands the relationship between the tourists and the ideas being presented to them by the tour guide, and he is careful not to let the ideas of the tour guide take precedent over his own ideas.<br />
<br />
The "complex man" is exploitative of the other tourists, to the extent that he realizes that they are not as fully aware of the situation as he is, and he even enjoys observing them and their interactions with the situation, but he does not try to save them from their predicament.<br />
<br />
This man is "more advanced in the dialectic" than the person getting off the beaten track, because the person going off the beaten track, goes there because of some instinctual feeling that there's something not quite fulfilling about following a tour group. Whereas for this man, his understanding is rational rather than instinctual. He can explain to you about recovering the situation from the symbolic complex that it is trapped in. The person going off the beaten track only has vague notions of why he does so.<br />
<br />
<b>12.-15.</b> If you don't think that the family will consider themselves fortunate for having the canyon to themselves then you might have trouble appreciating these next few paragraphs. But the point Percy is making is that when people find themselves in extraordinary circumstances, they forget about their preconceived notions, and explore and experience things as if those things were newly being discovered by them for the first time. It is more intellectually exciting to explore and discover than it is to receive and reinterpret.<br />
<br />
When planners build interpretive centers, they are also constructing complexes of symbols. When tourists encounter the paragraphs and programs constructed by the planners, they are tempted to rely on the ideas presented by the planners instead of following their own curiosity and intuition. To regain ownership of his experiences, a tourist must subvert the planner by asserting the primacy of his own experiences over the ideas of the planner. <br />
<br />
<b>16.</b> Movies help people recover experiential sovereignty by helping them vicariously experience familiar places under extraordinary circumstances. An action-adventure movie set in the grand canyon may present the Canyon more effectively than an academic-style interpretive center, simply because the movie watchers are not being spoon-fed information about the canyon, but experience it indirectly, as a backdrop to the other events of the movie. With the canyon as a backdrop, of the presentation, the viewers have more sovereignty over their interpretation of it.<br />
<br />
Percy ends this paragraph with a suggestive, and cynical comment. He implies that many tourists would enjoy it if some disaster occurred while they were at the canyon. A disaster would put the tourist back in control of the experience. Thinking in terms of the commentary on paragraph (3), the "n" for the standard grand canyon tour experience is very large. But the "n" for experiencing the grand canyon during a disaster is much much smaller, which may make the experience more valuable and enjoyable.<br />
<br />
<br />
<b>17.</b> Here is where we finally learn what Percy means in the title when he refers to the "creature". The creature is the person, place, thing, or event to be experienced. It is not the person doing the experiencing. In the earlier examples, Grand Canyon is the "creature". Almost everything we encounter is encased in a "citadel of symbolic investiture". A creature is "lost" to us when we don't experience it for what it is, but instead concern ourselves with what other people have said about it. Percy also alludes to the idea that we often end up recovering a creature from its associated symbolism by accident rather than intentionally, that is: as a kind of side effect of pursuing other goals.<br />
<br />
<b>18.-20.</b> Percy uses the example of a tourist couple in Mexico to demonstrate the difference between "authentic" and "unauthentic" recovery of experience. "authentic" recovery would mean successfully ignoring preconceived notions about the experience, one way to do this is to leave the touristy areas and go to places they've never heard of before, and where other American tourists cannot be found. <br />
<br />
<b>21.-30.</b> In trying to recover the experience of Mexico, the situation has gotten even worse for the tourists. Their recovery is unauthentic, a "desperate impersonation". The reason it is still unauthentic is because they need validation from their peers or from an expert. They can't wait to get back to their friends and talk about how unique their experience was. They desperately want their ethologist friend to confirm for them that their experience was unique and genuine. In trying to recover personal control over their experience, they have merely become slaves to a new master. Instead of interpreting their experience through the lens of magazines and tourist brochures, they are now interpreting their experience through the lens of their academic friend. They are still not experiencing Mexico for themselves.<br />
<br />
<b>31.</b> The bit in parentheses at the end of this paragraph is one of the most critical parts of the whole essay. Even if we are aware of the need to recover experiences from their symbolic complexes, it is still very difficult to do. The moment we begin to lose ourselves in an experience, we may realize that we're losing ourselves in the experience and think "this is good, this is how it's supposed to be!". But the concept of "supposed to" is precisely what invalidates the authenticity of an experience.<br />
<br />
When Percy says "even if they read this" he is directly addressing us, the readers. He is saying that even after we read this essay, and understand it, it will still be very difficult for us to escape all of the symbolism that is built up around our experiences. A huge, unavoidable irony of this essay is that the essay itself, if we understand it and take it seriously, may become part of the symbolic complex. We may catch ourselves wondering whether some experience fits with Walker Percy's conception of "authentic", or even trying to pursue experiences that would qualify as authentic according to "Loss of the Creature". We may not realize that this very pursuit renders them inauthentic.<br />
<br />
<br />
<b>Source:</b><br />
<a href="http://boblyman.net/engwr302/handouts/Loss%20of%20the%20Creature.pdf">http://boblyman.net/engwr302/handouts/Loss%20of%20the%20Creature.pdf</a> <br />
<br />
<a href="https://www.udel.edu/anthro/ackerman/loss_creature.pdf">https://www.udel.edu/anthro/ackerman/loss_creature.pdf</a><br />
<br />
<b>Resources:</b><br />
<a href="http://vimeo.com/31125969">http://vimeo.com/31125969</a><br />
Rob seems to think that "creature" in the title of the essay refers to the individual doing the experiencing. I disagree, and think that "creature" refers to the thing being experienced. I base my position on paragraph 17. He also has some interesting insights about how Zombie movies are an example of an attempt to restore the "creature". This video is well worth watching.<br />
<br />
<a href="http://www.academia.edu/2568895/Literary_Analysis_Percy_The_Loss_of_Creature_">http://www.academia.edu/2568895/Literary_Analysis_Percy_The_Loss_of_Creature_</a><br />
William Hartley is rather (I would say too hastily) dismissive of the essay. In saying that only a very smart person can understand the essay, Hartley is being substantially more elitist than Percy ever is. He does, however, come very close to grasping and pointing out the core irony of the essay. It is possible that Hartley's essay is an example of <a href="http://en.wikipedia.org/wiki/Poe%27s_law">Poe's Law</a>. Maybe Hartley is joking, and is actually making fun of people who complain about the "The Loss of the Creature".Sean Johnsonhttp://www.blogger.com/profile/12906055564149166723noreply@blogger.com0tag:blogger.com,1999:blog-4023999156345551442.post-70903492888222010162016-10-26T17:28:00.001-07:002016-11-10T16:32:08.527-08:00My dissertation is now available for download from ProQuestMy PhD dissertation is now available for free online at <a href="http://pqdtopen.proquest.com/pubnum/10164019.html">http://pqdtopen.proquest.com/pubnum/10164019.html</a><br />
<br />
I'm also making my laboratory notebooks from grad school available. They don't cover everything I did, they're pretty messy, and I'm not sure they will be useful or interesting to anyone, but here they are.<br />
<a href="https://drive.google.com/file/d/0B-jIfICIlfU1RmJEYjUxQUFmWVk/view?usp=sharing">book1</a><br />
<a href="https://drive.google.com/file/d/0B-jIfICIlfU1Q3I1T3JVdnNXVHc/view?usp=sharing">book2</a><br />
<a href="https://drive.google.com/file/d/0B-jIfICIlfU1VWlGQm1DVjlvZWM/view?usp=sharing">book3</a><br />
<br />
<br />
<b>Here is the abstract to my dissertation:</b><br />
Plant natural products are useful for many different applications,
including medicines, flavors and fragrances, and industrial uses. Two
important aspects of plant natural products research are the
identification of compounds in their source plants, and the
characterization of the processes involved in their biosynthesis. To aid
in the identification of plant natural products, we developed the
Spektraris family of databases. These databases include highperformance
liquid chromatography mass spectrometry data, and <sup>13</sup>C and <sup> 1</sup>H
nuclear magnetic resonance data, which are searchable through an online
interface. The utility of Spektraris was validated by using it to
identify compounds in plant extracts and as part of a workflow to
elucidate the structure of a previously undescribed compound. <br />
Mints have a long history of use as model systems for studying the
processes of terpene natural products biosynthesis in specialized plant
tissues. The mint family (Lamiaceae), synthesizes and stores volatile
terpenes in glandular trichomes. Using a comparative transcriptomic
approach, we identified differences in gene expression of monoterpene
biosynthetic genes among mint species with different oil profiles. We
also assembled the genome of a mint species, <i> Mentha longifolia</i>. The genome assembly will be valuable for future mint research. <br />
To further investigate biosynthetic processes in mint, I developed a
detailed mathematical model of the metabolism of peppermint glandular
trichomes. The model incorporates multiple sources of data, including
transcriptome data, metabolite data, enzymatic data from the peppermint
literature, and previously developed models of plant metabolism. The
creation of a new metabolic modeling software package, called YASMEnv,
facilitated construction of the model. Model-based simulated reaction
knockouts using flux balance analysis revealed that fermentation may be
important for ATP regeneration in secretory phase glandular trichomes.
Follow up experiments confirmed high levels of alcohol dehydrogenase
activity in secretory phase isolated trichomes. Simulations also
supported an essential role for ferredoxin and ferredoxin-NADP
reductase. Transcriptome analysis revealed the presence of an isoform of
ferredoxin in trichomes distinct from the one expressed in root. The
presence of a distinct ferredoxin isoform in trichomes supports the
hypothesis that selection pressure for efficient natural products
biosynthesis may also act on the enzymes of primary metabolism.Sean Johnsonhttp://www.blogger.com/profile/12906055564149166723noreply@blogger.com0tag:blogger.com,1999:blog-4023999156345551442.post-57158365342182190402016-10-13T11:32:00.002-07:002016-10-14T17:38:33.192-07:00rendering zdock server results using python and UCSF Chimera<b>Problem:</b><br />
I was interested in learning where the protein-protein interaction sites were on a particular protein (the receptor). I had pdb files for that protein, and for three proteins that it is known to bind to (the ligands). There are specific amino-acids of interest on the receptor protein, where there is variability among different species. For every combination of receptor and ligand, I want to perform a prediction of where the proteins interact, and then generate an image where the variable amino-acids are highlighted.<br />
<br />
<a name='more'></a><br />
<br />
<b>Strategy:</b><br />
Use <a href="http://zhanglab.ccmb.med.umich.edu/I-TASSER/">I-TASSER</a><b> </b>to generate pdb files for all of the proteins of interest (two isoforms of the receptor, three different ligands). Submit the pdb files to <a href="http://zdock.umassmed.edu/">ZDOCK</a> in receptor-ligand pairs (six runs total). Use <a href="https://www.cgl.ucsf.edu/chimera/">Chimera</a> scripts to render each combination, highlighting the proper residues in the rendering.<br />
<br />
<b>Procedure:</b><br />
Submitting sequences to I-TASSER and ZDOCK is straightforward. For I-TASSER results, I usually download the tar.bz file, then use <a href="http://www.7-zip.org/">7-zip</a> to extract it. I then typically just use the file called model1.pdb for downstream analyses.<br />
<br />
For the ZDOCK submission, I did not select any specific residues to be part of the binding pocket, or excluded from the binding pocket.<br />
<br />
To download the ZDOCK results, I just click the four links in the "Download Files" box. An additional file that is of great interest to me is the representation of the the centers of mass of the top 500 docking positions as spheres in space. There isn't a direct link to that file. Instead, you have to enter the url of the file directly into the address bar of your browser. The file itself is called ligcms.pdb. To obtain it, just append that name to the end of the url for your results. For example, one of my results urls was: http://zdock.umassmed.edu/results/88cedc8055/<br />
So to get the file of centers of mass, I used http://zdock.umassmed.edu/results/88cedc8055/ligcms.pdb<br />
<br />
Instead of manually highlighting the same residues in every rendering, I'm using a Chimera Python script to do the work for me.<br />
<br />
Chimera can be executed from the command line, and given a python script as an argument. For example: chimera myscript.py<br />
<br />
Chimera scripting is a little quirky (or I'm just bad at it, probably both). Here are a few quirks I had trouble with:<br />
To change the color of something, you must first get a color object representing the color you want. To get a color object, you must use the convertColor function from the Commands module. For example: red = Commands.convertColor('red')<br />
<br />
Amino acid residues in a peptide are zero-indexed, rather than one-indexed as is the convention for biologists. The first amino acid is called amino acid 0, not 1. So when you use the model<span style="color: #333333;">.</span>findResidue(x) command, be aware that x should be 1 less than the conventional position.<br />
<br />
Chimera has some <a href="http://www.cgl.ucsf.edu/pipermail/chimera-users/2012-June/007704.html">trouble reading</a> the ZDOCK pdb files. Fix that by removing everything after the x y z columns.<br />
<br />
There are two distinct syntaxes for executing commands in Chimera Python scripts, one is through the Python API. The other is using command line functions. My impression is that the Python API is more powerful, but it is also exceedingly poorly documented (as far as I can tell). The command line functions are <a href="https://www.cgl.ucsf.edu/chimera/current/docs/UsersGuide/framecommand.html">well documented</a>, and can be accessed through Python via the chimera.runCommand function. In the code below, I use a mix of both kinds of commands.<br />
<br />
<b>Code:</b><br />
<br />
<!-- HTML generated using hilite.me --><br />
<div style="background: #ffffff; border-width: 0.1em 0.1em 0.1em 0.8em; border: solid gray; overflow: auto; padding: 0.2em 0.6em; width: auto;">
<pre style="line-height: 125%; margin: 0;"><span style="color: #008800; font-weight: bold;">import</span> <span style="color: #0e84b5; font-weight: bold;">os</span>
<span style="color: #008800; font-weight: bold;">import</span> <span style="color: #0e84b5; font-weight: bold;">chimera</span>
<span style="color: #008800; font-weight: bold;">from</span> <span style="color: #0e84b5; font-weight: bold;">chimera</span> <span style="color: #008800; font-weight: bold;">import</span> runCommand <span style="color: #008800; font-weight: bold;">as</span> rc <span style="color: #888888;"># use 'rc' as shorthand for runCommand</span>
<span style="color: #008800; font-weight: bold;">from</span> <span style="color: #0e84b5; font-weight: bold;">chimera</span> <span style="color: #008800; font-weight: bold;">import</span> replyobj <span style="color: #888888;"># for emitting status messages</span>
<span style="color: #008800; font-weight: bold;">import</span> <span style="color: #0e84b5; font-weight: bold;">Commands</span>
<span style="color: #008800; font-weight: bold;">from</span> <span style="color: #0e84b5; font-weight: bold;">glob</span> <span style="color: #008800; font-weight: bold;">import</span> glob
<span style="color: #888888;">#Note: the columns after XYZ in the pdb file for the receptor from ZDOCK must be removed before chimera can read the file</span>
<span style="color: #888888;">#This is done automatically in the script loop, later</span>
zdock_path<span style="color: #333333;">=</span><span style="background-color: #fff0f0;">"E:/data/docking/zdock"</span>
red <span style="color: #333333;">=</span> Commands<span style="color: #333333;">.</span>convertColor(<span style="background-color: #fff0f0;">'red'</span>)
sky_blue <span style="color: #333333;">=</span> Commands<span style="color: #333333;">.</span>convertColor(<span style="background-color: #fff0f0;">'sky blue'</span>)
res_to_highlight <span style="color: #333333;">=</span> [<span style="color: #0000dd; font-weight: bold;">3</span>,<span style="color: #0000dd; font-weight: bold;">11</span>,<span style="color: #0000dd; font-weight: bold;">14</span>,<span style="color: #0000dd; font-weight: bold;">16</span>,<span style="color: #0000dd; font-weight: bold;">32</span>,<span style="color: #0000dd; font-weight: bold;">54</span>,<span style="color: #0000dd; font-weight: bold;">55</span>,<span style="color: #0000dd; font-weight: bold;">57</span>,<span style="color: #0000dd; font-weight: bold;">69</span>,<span style="color: #0000dd; font-weight: bold;">73</span>,<span style="color: #0000dd; font-weight: bold;">85</span>,<span style="color: #0000dd; font-weight: bold;">95</span>] <span style="color: #888888;">#1-indexed </span>
res_to_highlight <span style="color: #333333;">=</span> [x <span style="color: #333333;">-</span> <span style="color: #0000dd; font-weight: bold;">1</span> <span style="color: #008800; font-weight: bold;">for</span> x <span style="color: black; font-weight: bold;">in</span> res_to_highlight] <span style="color: #888888;">#residues in the Chimera model are </span>
<span style="color: #008800; font-weight: bold;">for</span> <span style="color: #007020;">dir</span> <span style="color: black; font-weight: bold;">in</span> glob(zdock_path <span style="color: #333333;">+</span> <span style="background-color: #fff0f0;">"/*"</span>):
out_name <span style="color: #333333;">=</span> os<span style="color: #333333;">.</span>path<span style="color: #333333;">.</span>basename(<span style="color: #007020;">dir</span>)
rc(<span style="background-color: #fff0f0;">"background solid white"</span>)
<span style="color: #888888;">#remove columns from pdb files that cause an error.</span>
<span style="color: #008800; font-weight: bold;">with</span> <span style="color: #007020;">open</span>(os<span style="color: #333333;">.</span>path<span style="color: #333333;">.</span>join(<span style="color: #007020;">dir</span>,<span style="background-color: #fff0f0;">'Fd.pdb'</span>), <span style="background-color: #fff0f0;">"r"</span>) <span style="color: #008800; font-weight: bold;">as</span> infile:
<span style="color: #008800; font-weight: bold;">with</span> <span style="color: #007020;">open</span>(os<span style="color: #333333;">.</span>path<span style="color: #333333;">.</span>join(<span style="color: #007020;">dir</span>,<span style="background-color: #fff0f0;">'Fd_truncated.pdb'</span>), <span style="background-color: #fff0f0;">"w"</span>) <span style="color: #008800; font-weight: bold;">as</span> outfile:
<span style="color: #008800; font-weight: bold;">for</span> line <span style="color: black; font-weight: bold;">in</span> infile:
outfile<span style="color: #333333;">.</span>write(line[<span style="color: #0000dd; font-weight: bold;">0</span>:<span style="color: #0000dd; font-weight: bold;">58</span>]<span style="color: #333333;">+</span><span style="background-color: #fff0f0;">"</span><span style="background-color: #fff0f0; color: #666666; font-weight: bold;">\n</span><span style="background-color: #fff0f0;">"</span>)
receptor <span style="color: #333333;">=</span> chimera<span style="color: #333333;">.</span>openModels<span style="color: #333333;">.</span>open(os<span style="color: #333333;">.</span>path<span style="color: #333333;">.</span>join(<span style="color: #007020;">dir</span>,<span style="background-color: #fff0f0;">'Fd_truncated.pdb'</span>),<span style="color: #007020;">type</span><span style="color: #333333;">=</span><span style="background-color: #fff0f0;">"PDB"</span>)
cloud <span style="color: #333333;">=</span> chimera<span style="color: #333333;">.</span>openModels<span style="color: #333333;">.</span>open(os<span style="color: #333333;">.</span>path<span style="color: #333333;">.</span>join(<span style="color: #007020;">dir</span>,<span style="background-color: #fff0f0;">'ligcms.pdb'</span>),<span style="color: #007020;">type</span><span style="color: #333333;">=</span><span style="background-color: #fff0f0;">"PDB"</span>)
m<span style="color: #333333;">=</span>receptor[<span style="color: #0000dd; font-weight: bold;">0</span>]
m<span style="color: #333333;">.</span>color<span style="color: #333333;">=</span>sky_blue
<span style="color: #008800; font-weight: bold;">for</span> x <span style="color: black; font-weight: bold;">in</span> res_to_highlight:
m<span style="color: #333333;">.</span>findResidue(x)<span style="color: #333333;">.</span>ribbonColor <span style="color: #333333;">=</span> red
<span style="color: #888888;">#rc("savepos original")</span>
rc(<span style="background-color: #fff0f0;">"turn y -45"</span>)
rc(<span style="background-color: #fff0f0;">"turn x -100"</span>)
<span style="color: #008800; font-weight: bold;">if</span> <span style="background-color: #fff0f0;">"minor"</span> <span style="color: black; font-weight: bold;">in</span> <span style="color: #007020;">dir</span>:
rc(<span style="background-color: #fff0f0;">"turn z 60"</span>)
<span style="color: #888888;">#rc("~focus")</span>
rc(<span style="background-color: #fff0f0;">"window"</span>)
<span style="color: #888888;">#rc("scale 0.8")</span>
rc(<span style="background-color: #fff0f0;">"unset depthCue"</span>)
rc(<span style="background-color: #fff0f0;">"copy file "</span> <span style="color: #333333;">+</span> out_name <span style="color: #333333;">+</span> <span style="background-color: #fff0f0;">"_zoom.png"</span> <span style="color: #333333;">+</span> <span style="background-color: #fff0f0;">" width 3300 supersample 3"</span>)
<span style="color: #888888;">#rc("reset original")</span>
rc(<span style="background-color: #fff0f0;">"close session"</span>) </pre>
<pre style="line-height: 125%; margin: 0;"> </pre>
</div>
<br />
<b>Result: </b><br />
<b> </b> <br />
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj-2CbeVrQW6zSnF5coKrujL_orFiiTkp86f2EIjEuHEWdA7p6LLheLLheu5ZQSBLDrHSLFvtuyE4BFMUPaqpX3O9jhkN46S9yrwtNDGpQMQoUzP4JgX41UUh9kJ8f3deu4hB0JNdOmQmoo/s1600/FNR_Fd_minor_zoom.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="303" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj-2CbeVrQW6zSnF5coKrujL_orFiiTkp86f2EIjEuHEWdA7p6LLheLLheu5ZQSBLDrHSLFvtuyE4BFMUPaqpX3O9jhkN46S9yrwtNDGpQMQoUzP4JgX41UUh9kJ8f3deu4hB0JNdOmQmoo/s320/FNR_Fd_minor_zoom.png" width="320" /></a></div>
<br />
<br />
<br />
<br />
<b>References:</b><br />
<br />
Quick introduction to scripting Chimera. Shows how to open files, and save images.<br />
<a href="https://www.cgl.ucsf.edu/chimera/docs/ProgrammersGuide/basicPrimer.html">https://www.cgl.ucsf.edu/chimera/docs/ProgrammersGuide/basicPrimer.html</a><br />
<br />
In chimera the camera does not rotate, it always points in the -z direction. It can pan and zoom and focus, but it cannot rotate. To get the effect of rotating the camera, you must instead rotate all of the models. This can be done using the python interface, or using the command line "turn" function.<br />
<a href="https://www.cgl.ucsf.edu/chimera/docs/ProgrammersGuide/faq.html#q4">https://www.cgl.ucsf.edu/chimera/docs/ProgrammersGuide/faq.html#q4</a><br />
<br />
<br />
An index of all of the commands that can be used through the Chimera command line, or through the chimera.runCommand function in python.<br />
<a href="https://www.cgl.ucsf.edu/chimera/current/docs/UsersGuide/framecommand.html">https://www.cgl.ucsf.edu/chimera/current/docs/UsersGuide/framecommand.html</a>Sean Johnsonhttp://www.blogger.com/profile/12906055564149166723noreply@blogger.com0tag:blogger.com,1999:blog-4023999156345551442.post-29312476285021789752016-10-13T01:24:00.002-07:002016-10-18T01:35:53.470-07:00Gratefulness and Compassion meditationMeditation is a way to slow down and appreciate life. For me, it is a way to relax, and prepare for the day, and to fight back against negative thoughts and attitudes that sometimes accumulate in my mind.<br />
<br />
There's no one right way to meditate. You can try to empty your mind. You can focus intently on your breath, or on some mantra, or on different parts of your body. You can listen carefully and try to concentrate on perceiving your surroundings. The only rules are to be calm and to be positive. Meditation can sometimes veer into or negative thinking, or rumination: thinking about how other people owe you something, or how you've been mistreated or disrespected, or how you're somehow in an unfixable situation (you're not). Take care that your meditation does not become rumination.<br />
<br />
I like to try out different kinds of meditation. Some I read about, some I invent on my own. I <a href="http://breathmintsforpenguins.blogspot.com/2016/06/musings-on-meaning-of-meaning-and.html">recently explained</a> how I think that gratefulness and compassion are the two most important emotions. The rest of this post explains Gratefulness and Compassion Meditation, which is a way to cultivate those two emotions through practice.<br />
<br />
<br />
<a name='more'></a><br />
Sitting in a comfortable position with your eyes closed, imagine that the air is your connection to the rest of humanity and the rest of the universe.<br />
<br />
<b>Start out simple: </b><br />
<br />
Each time you breathe in, imagine that the air is delivering the support of the outside world to you. If it helps you to have a word to concentrate on, imagine the word "gratefulness" as you slowly breathe in.<br />
<br />
As you breathe out, imagine your breath carrying love and goodwill from yourself out to the rest of humanity and nature and the universe. Perhaps imagine the word "compassion" as you breathe out.<br />
<br />
<b>If want to make the meditation a little more complicated:</b><br />
<br />
As you breathe in, think about specific people, places, objects, and situations that you are grateful for, that sustain you and keep you going. It could be a friend, a family member, the farmers and food packagers that made your breakfast possible, the person who drives the bus you take to work, the room your sitting in, the fact that there is no war in your country, the very air you're breathing. What's amazing (and perhaps surprising) is that there are so many things to be grateful for, you'll never run out, even if you pick a new one every breath.<br />
<br />
<b> </b><br />
As <b></b>you breathe out imagine your love and compassion flowing from you to specific people, animals and places. It could be the same people you thought about while breathing in. It could be people who you think are particularly marginalized or in need of compassion, it could be random strangers you saw on the sidewalk yesterday, or nameless farm animals you've never met. You can keep thinking about the same object for several cycles of breathing out, or you can switch every time. You won't run out of people who deserve your compassion.<br />
<b> </b><br />
<br />
<b>If you want to take it even one step further:</b><br />
<br />
As you breathe in, try to imagine being grateful for something that hurts, bothers, or inconveniences you. An annoying co-worker, the mobster who stole your car, the snow that's pouring down, forcing you to spend two hours shoveling and making it hard for you to get to work, the flu that keeps you in bed for three days. Try to feel grateful for everything, particularly the things you have a natural aversion towards.<br />
<br />
As you breathe out, direct your compassion towards someone you don't like. Someone who has hurt you. Someone who maybe you feel doesn't deserve your compassion. This could be the same person you were grateful for while breathing in. It could be the mosquito who bit you yesterday. Or your abusive parent. Or the drunk driver who killed your child. Anything or anyone who you find it difficult to feel compassion towards.<br />
<br />
Cultivating gratefulness for difficult situations, and compassion towards people we don't like can be extraordinarily difficult work, but it's worth the effort.<br />
<br />
Hope that helps someone.Sean Johnsonhttp://www.blogger.com/profile/12906055564149166723noreply@blogger.com0tag:blogger.com,1999:blog-4023999156345551442.post-61800074742213545392016-07-11T13:50:00.002-07:002016-07-11T13:52:49.278-07:00Figuring out which adapters to trim in Illumina dataOften times it's difficult to know what adapter sequences should be trimmed from Illumina data. This can occur if you download public data, for example from <a href="http://www.ncbi.nlm.nih.gov/sra">SRA</a> or if you send samples for sequencing to a company that doesn't communicate with you very well (not that I have any experience with that...).<br />
<br />
Previously it's been a bit of a a struggle for me to figure out which adapters to trim when processing Illumina high-throughput sequencing data. With a little bit of time, and some thought about how Illumina sequencing works, adapters can be identified and removed even if we don't know beforehand what the sequences are.<br />
<br />
<br />
Read on to see how I figured out the adapter sequences in my most recent RNAseq analysis.<br />
<br />
<a name='more'></a><br />
<br />
<br />
<b>My sample data:</b><br />
paired end<br />
multiplexed<br />
strand specific<br />
101 bp reads <br />
data from an Illumina HiSeq 3000 instrument<br />
<br />
You can find the exact sequences I'm using on SRA <a href="http://trace.ncbi.nlm.nih.gov/Traces/sra/?run=SRR3623199">SRR3623199</a><br />
<br />
<br />
<b>Background:</b><br />
In Illumina sequencing, the target sequences are fragmented, then ligated to adapters. Sequencing starts from a primer that binds to the last sequence in the adapter (the part of the adapter closest to the sample sequence). That means that the source of adapter sequence in Illumina reads will most of the time be from read-through. Read-through is where the fragment between the two adapters is shorter than the read length. In that case, the entire fragment will be sequenced, plus some or all of the adapter that comes after it. What we're looking for mostly is read-through. That means that we're most likely to see primers at the 3' end of our reads, and not at the 5' ends. It also means that we need to be searching for the reverse complements of primer sequences.<br />
<br />
<b>Strategy:</b><br />
Use manual inspection, Fastqc, and/or grep to find reads with likely primer sequence.<br />
<br />
<br />
Use <a href="http://www.hiv.lanl.gov/content/sequence/CONSENSUS/SimpCon.html">consensus maker</a> or <a href="http://genes.mit.edu/pictogram.html">Pictogram</a> (if it's a relatively short sequence) to generate a consensus sequence of the reads.<br />
<br />
The consensus sequence is a likely adapter that should be trimmed.<br />
<br />
<b>Procedure:</b><br />
<br />
Navigate to the folder where the fastq data is.<br />
<br />
Have a look at the data just to see if there are any obvious patterns.<br />
less SRR3623199_R1.fastq<br />
<br />
<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg2v4VIcvEjI238Z00SkbjHWNx6F9E7JQuAWCgSiXAIp_mtQQBumsj8pDnV4xxvwIo8CgD4JWGPGH3djBdXcfNq7V96nLvp4qOXLEqVbY7BjlRfGrfriqjzTegTN3SUygnGHYZ0pG3Y6dTp/s1600/Screenshot+-+07112016+-+11%253A36%253A28+AM.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="292" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg2v4VIcvEjI238Z00SkbjHWNx6F9E7JQuAWCgSiXAIp_mtQQBumsj8pDnV4xxvwIo8CgD4JWGPGH3djBdXcfNq7V96nLvp4qOXLEqVbY7BjlRfGrfriqjzTegTN3SUygnGHYZ0pG3Y6dTp/s320/Screenshot+-+07112016+-+11%253A36%253A28+AM.png" width="320" /></a></div>
There don't seem to be any obvious pattern. So let's try opening it with fastqc <br />
<br />
Fastqc shows a promising sequence:<br />
TCTGATTGTCAAAATAGACTAGTCTAGGAGACGATAAATCCTATGTGGGTGAGTCCCATTCTGGCGAGACACGCAATGCCCTTTATTTGTTTGAGGCTATC<br />
<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhbOT6mqxE635R9ZK1Irr08-u0U6tCQOE_T1i8meh2SreWkGwlyhsGlnqJLj0wLmfP5uNiSaYf4HYqXdA3UTGHiAv38Eo9oxtNC64Ameie7dp21gxafBjpc-Tjekx_LQNl5JZXzVkKYookr/s1600/Screenshot+-+07112016+-+12%253A02%253A27+PM.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="230" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhbOT6mqxE635R9ZK1Irr08-u0U6tCQOE_T1i8meh2SreWkGwlyhsGlnqJLj0wLmfP5uNiSaYf4HYqXdA3UTGHiAv38Eo9oxtNC64Ameie7dp21gxafBjpc-Tjekx_LQNl5JZXzVkKYookr/s400/Screenshot+-+07112016+-+12%253A02%253A27+PM.png" width="400" /></a></div>
A Blastn search shows that the top sequence is not an adapter, but, in fact, the sequence of a virus! That probably means something important about the biological sample, but doesn't help us with primer trimming.<br />
<br />
Our next strategy is to search various known primer sequences to see if any occur frequently in our sample. Remember, since we are looking for primers on 3' end of the read, we need to <a href="http://www.bioinformatics.org/sms/rev_comp.html">reverse complement</a> the sequences before searching for them (or use a search tool that automatically searches both strands). I'm going to use grep. My source of potential sequences is from <a href="https://github.com/csf-ngs/fastqc/blob/master/Contaminants/contaminant_list.txt">here</a>.<br />
<br />
After a bit of grepping, I found something promising:<br />
The sequence AGATCGGAAG matches a lot of reads (2,287,216 out of 37,279,073).<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhMWzJZx_oVk7t6dyTii9PzU7E8KBkXHilIdzzNs12B2X4_aRKMdQUJi9AOEXu0nLWNpW-3OstbPT5nPeMG03eECvGbfvMbYpHHmKNnqSwbW86gfPVG0x_xj0SmuVesg7pL89erPms9topn/s1600/Screenshot+-+07112016+-+12%253A35%253A07+PM.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="220" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhMWzJZx_oVk7t6dyTii9PzU7E8KBkXHilIdzzNs12B2X4_aRKMdQUJi9AOEXu0nLWNpW-3OstbPT5nPeMG03eECvGbfvMbYpHHmKNnqSwbW86gfPVG0x_xj0SmuVesg7pL89erPms9topn/s320/Screenshot+-+07112016+-+12%253A35%253A07+PM.png" width="320" /></a></div>
<br />
We could collect a bunch of these sequences and run them through a multiple sequence alignment program such as <a href="http://www.ebi.ac.uk/Tools/msa/clustalo/">clustal</a>, but we can kind of cheat instead.<br />
<br />
Since we have so many matches to our query, we can tell grep to only return matches in a specific position.<br />
This command will look for our query sequence followed by 90 of any nucleotide and then the end of the line: <br />
grep 'AGATCGGAAG.\{90,\}$' SRR3623199_R1.fastq<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgYg_fg8NqIg023DBh34_Ubii-n-i51ozIkxXYcX8iXcUjtPkPH2306cYob-BKvMM0o8Gb5AZee3IPxQE_ZFJkO7wa56Xi0UpcZYjTMPNsQrB7U7X0dYVMcwiytPzIfzRhf6TFhCtAgVut8/s1600/Screenshot+-+07112016+-+01%253A25%253A23+PM.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="276" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgYg_fg8NqIg023DBh34_Ubii-n-i51ozIkxXYcX8iXcUjtPkPH2306cYob-BKvMM0o8Gb5AZee3IPxQE_ZFJkO7wa56Xi0UpcZYjTMPNsQrB7U7X0dYVMcwiytPzIfzRhf6TFhCtAgVut8/s320/Screenshot+-+07112016+-+01%253A25%253A23+PM.png" width="320" /></a></div>
<br />
Even with this strict criterion, we still get 99 matches in the dataset, and we can easily manually inspect the matches to look for a consensus sequence which might correspond to the adapter.<br />
<br />
AGATCGGAAGAGCACACGTCTGAACTCCAGTCACCGATGTATCTCGTATGCCGTCTTCTGCTTG<br />
<br />
We could just use this as our adapter sequence, and it would probably work out pretty well, even if it contains a misread or two.<br />
<br />
Just to be thorough, however, we'll take it one step further and look for a consensus sequence.<br />
<br />
Our new putative adapter sequence is 64 bp long, and is followed by a variable-length string of A's and then some sequence that seems inconsistent. <br />
<br />
<br />
which gives us sequences where there are at least 40 more characters after the match. We still get 232,826 matches, which is a lot! So let's only keep the first 1,000. We want them to be in fasta format, so let's add line headers also. The final command is:<br />
grep -o 'AGATCGGAAG.\{54\}$' SRR3623199_R1.fastq | head -n 1000 | awk '{print ">" NR "\n" $0}' > adapter_candidates.fasta<br />
<br />
<br />
<br />
We enter those sequences into the <a href="http://www.hiv.lanl.gov/content/sequence/CONSENSUS/SimpCon.html">consensus maker</a> program and it gives us the consensus sequence:<br />
AGATCGGAAG agcacacgtc tgaactccag tcaccgatgt atctcgtatg ccgtcttctg cttg<br />
<br />
Which a <a href="http://www.ebi.ac.uk/Tools/psa/emboss_needle/nucleotide.html">needleman wunsch</a> alignment will tell us is exactly the same as the one we picked out before. But at least we're more confident now.<br />
<br />
<pre id="alignmentContent">EMBOSS_001 1 AGATCGGAAGagcacacgtctgaactccagtcaccgatgtatctcgtatg 50
||||||||||||||||||||||||||||||||||||||||||||||||||
EMBOSS_001 1 AGATCGGAAGAGCACACGTCTGAACTCCAGTCACCGATGTATCTCGTATG 50
EMBOSS_001 51 ccgtcttctgcttg 64
||||||||||||||
EMBOSS_001 51 CCGTCTTCTGCTTG 64</pre>
<br />
<br />
<b>What's next?</b><br />
Next, you should look for adapters on the other set of reads from the paired end reads. They should be similar to the adapter for this set. Finally use your favorite adapter trimmer software to remove the adapter sequence.<b> </b><br />
<br />
<br />
<br />
<b>Recommended reading and tools:</b><br />
<br />
Awesome video by Illumina explaining paired-end indexed sequencing<br />
<a href="https://www.youtube.com/watch?v=HMyCqWhwB8E">https://www.youtube.com/watch?v=HMyCqWhwB8E</a><br />
<br />
Online tool for generating reverse complement of nucleic acid sequences<br />
<a href="http://www.bioinformatics.org/sms/rev_comp.html">http://www.bioinformatics.org/sms/rev_comp.html</a><br />
<br />
I borrowed a lot of ideas from these guys<br />
<a href="http://www.ark-genomics.org/events-online-training-eu-training-course/adapter-and-quality-trimming-illumina-data">http://www.ark-genomics.org/events-online-training-eu-training-course/adapter-and-quality-trimming-illumina-data</a><br />
<br />
fastqc adapter information <br />
<a href="https://github.com/csf-ngs/fastqc/blob/master/Contaminants/contaminant_list.txt">https://github.com/csf-ngs/fastqc/blob/master/Contaminants/contaminant_list.txt</a><br />
<br />
Illumina adapter information<br />
<a href="http://support.illumina.com/downloads/illumina-customer-sequence-letter.html">http://support.illumina.com/downloads/illumina-customer-sequence-letter.html</a><br />
<br />Sean Johnsonhttp://www.blogger.com/profile/12906055564149166723noreply@blogger.com0tag:blogger.com,1999:blog-4023999156345551442.post-34658073833231428102016-07-04T19:08:00.000-07:002016-09-30T19:29:00.600-07:00Making a stoichiometric model of peppermint trichomes<br />
Someday this work will be published with a more coherent and organized version of these methods. But maybe in the meantime, this will be useful to someone. Here's (more or less) my lab notebook for how I generated a stoichiometric model of metabolism in peppermint glandular trichomes<b>.</b><br />
<br />
A separate, complementary but more useful, guide for the same thing, including all of the code, can be found on in a bitbucket repository <a href="https://bitbucket.org/seanrjohnson/menpigt_2015">here</a><br />
<br />
<br />
<br />
<br />
<b></b><br />
<a name='more'></a><br />
<b>Goals</b>:<br />
I want a compartmentalized model of metabolism in peppermint glandular trichomes.<br />
<br />
<b>Materials</b>:<br />
I have a Trinity assembly of a Illumina RNAseq reads of RNA isolated from secretory phase peppermint peltate glandular trichomes.<br />
<br />
Peptide sequences extracted from the mint transcriptome via Transdecoder.<br />
<br />
Arabidopsis core metabolism model created by Arnold and Nikoloski, 2014<br />
<br />
AraCyc version 13<br />
<br />
MetaCyc version 19.1<br />
<br />
<a href="http://priam.prabi.fr/REL_MAR15/index_mar15.html">PRIAM from March 2015</a><br />
<br />
SUBA database of Arabidopsis protein subcellular localization.<br />
<br />
<br />
<b>Strategy:</b><br />
Use the manually curated/compartmentalized model from Arnold 2014 as the basis, and add additional reactions from AraCyc and MetaCyc.<br />
<br />
I want to integrate the model with reactions from MetaCyc and PlantCyc,
so my first step is to generate a mapping of Arnold-2014 metabolite
names to MetaCyc names. The process of name conversion is described in <a href="http://breathmintsforpenguins.blogspot.com/2016/07/conversion-of-arabidopsis-model-by.html">a separate post</a>.<br />
<br />
<br />
<br />
Arnold 2014 includes sub-cellular localizations for all of its reactions. Double check them against SUBAcon (SUBA3)<br />
<br />
For AraCyc subcellular localizations use SUBAcon, and SUBA3.<br />
For MetaCyc reactions, use the annotations from UniProt, and TargetP predictions of the UniProt accessions.<br />
<br />
collect the uniprot IDs <br />
<br />
makeblastdb -in .\uniprot_sequences.fasta -dbtype prot -out uniprot -hash_index<br />
<br />
blast against the uniprot IDs<br />
<br />
do a global alignment against the top blast hit with align0<br />
<br />
calculate the "align identity" Tian and Skolnick (2003)<br />
<br />
There
are some uniprot IDs from Metacyc and Aracyc that were merged. So,
replace those with the ones that were downloaded from UniProt.<br />
<br />
Extract TAIR genes for all of the Arnold reactions<br />
<br />
<br />
<pre>import yasmenv.model as model
gra_parse = model.GraParser()
m = model.from_tsv('Arnold_metacyc.tsv')
genes = set()
for r in m:
genes |= gra_parse.get_genes_from_bool(m[r].annotations['Gene-reaction association'])
print("\n".join(genes))
</pre>
<br />
upload that list to <a href="http://www.uniprot.org/uploadlists/">UniProt batch downloader</a>
to get the sequences. Map from TAIR to UniProtKB. For the 623 genes, at
least one protein sequence was found for all but 1 (total 800 protein
sequences, some genes are mapped to multiple protein sequences because
of things like post-translational truncation). The unmapped gene was
"AT2G07727". The reason it was missed was because the associated uniprot
gene is also associated with ATMG00220. It only appears once in the
gene-reaction associations, and it is in the form: (AT2G07727 OR
ATMG00220)"<br />
So we can safely leave it out of our list.<br />
Download the fasta file and the table for the batch search and the other gene, and make two files:<br />
arnold_protein_information.tab<br />
arnold_protein_sequences.fasta<br />
<br />
rename the first column in arnold_protein_information.tab to "TAIR"<br />
<br />
<br />
<br />
Instantiate MetaCyc and AraCyc using YASMEnv:<br />
Extract UniProt accessions for all of the MetaCyc reactions.<br />
<br />
Extract TAIR genes for all of the AraCyc reactions<br />
<br />
Use the uniprot <a href="http://www.uniprot.org/uploadlists/">Retrieve/ID-mapping </a> service to get sequences for the MetaCyc Uniprot accessions. (some of the uniprot IDs used in MetaCyc are merged or obsolete, so in the reactions file, replace outdated IDs with new ones where possible)<br />
Use the TAIR <a href="https://www.arabidopsis.org/tools/bulk/sequences/">bulk sequence downloader </a>to retrieve peptide sequences for AraCyc and Arnold.<br />
<br />
<br />
run three Blast searches:<br />
blastp of peppermint peptides against peptide sequences from each of the reaction sources.<br />
makeblastdb -in .\TAIR_peptides.fasta -dbtype prot -out arnold_proteins -hash_index -parse_seqids<br />
<br />
makeblastdb -in .\aracyc_tair_peptides.fasta -dbtype prot -out aracyc_proteins -hash_index -parse_seqids<br />
makeblastdb -in .\unprot_download.fasta -dbtype prot -out aracyc_proteins -hash_index<br />
<br />
blastp -query ../peppermint_transcripts/peppermint_contigs.fasta.transdecoder.pep -outfmt 5 -out peppermint_peptides_to_arnold.xml -db arnold_proteins -max_target_seqs 20<br />
blastp -query ../peppermint_transcripts/peppermint_contigs.fasta.transdecoder.pep -outfmt 5 -out peppermint_peptides_to_aracyc.xml -db aracyc_proteins -max_target_seqs 20<br />
blastp -query ../peppermint_transcripts/peppermint_contigs.fasta.transdecoder.pep -outfmt 5 -out peppermint_peptides_to_metacyc.xml -db uniprot_subset -max_target_seqs 20<br />
<br />
<br />
Extract the top hits from the xml files and save them to a tab separated format:<br />
python E:\scripts\srj_chembiolib\blast_xml_to_outfmt6.py -i .\peppermint_peptides_to_arnold.xml -o peppermint_peptides_to_arnold.outfmt6 --num_hits 1 --num_hsps 1 --write_header<br />
python E:\scripts\srj_chembiolib\blast_xml_to_outfmt6.py -i .\peppermint_peptides_to_aracyc.xml -o peppermint_peptides_to_aracyc.outfmt6 --num_hits 1 --num_hsps 1 --write_header<br />
python E:\scripts\srj_chembiolib\blast_xml_to_outfmt6.py -i .\peppermint_peptides_to_metacyc.xml -o peppermint_peptides_to_metacyc.outfmt6 --num_hits 1 --num_hsps 1 --write_header<br />
<br />
use align0_m10_to_fasta.py from srj_chembiolib to convert the output to a fasta.<br />
use calculate_identity.py from srj_chembiolib to calculate the alignment identity<br />
<br />
Because
some of the peppermint sequences are incomplete transcripts, and also
because some proteins in the database are the mature peptide sequences
(without signal peptides) calculate identities from the alignment
length, (not including gaps).<br />
<br />
<br />
Tian and Skolnick (2003) suggest that a 75% align identity should be sufficient for 90% accurate functional annotation.<br />
[TODO: generate percent_identity graphs from transcrips_with_protein_annotations.csv. metacyc_global_ident, aracyc_global_ident, max_global_ident]<br />
Graph of max global identity:<br />
<br />
<br />
<br />
Test whether the localizations given by SUBAcon agree with the localizations in Arnold 2014:<br />
run compare_to_suba.py<br />
<br />
use the following compartment definitions:<br />
subacon_compartments_dict = {'cytosol':"cytosol", 'endoplasmic reticulum':"cytosol", 'extracellular':'extracellular', 'golgi':"cytosol", 'mitochondrion':"mitochondrion", 'nucleus': 'nucleus', 'peroxisome':'peroxisome', 'plasma membrane':'cytosol', 'plastid':'plastid', 'vacuole':'vacuole'}<br />
arnold_compartments_dict = {"c": "cytosol", 'h': 'plastid', 'i': 'mitochondrion', 'l': 'plastid', 'm': 'mitochondrion', 'p': 'peroxisome'}<br />
<br />
For each gene in Arnold 2014 find the compartments of all of the metabolites in each of the reactions associated with that protein.<br />
<br />
Compare the compartments assigned by Arnold to those assigned by SUBAcon. Both Arnold and SUBAcon assign at least one compartment to each of 622 genes. Of those 622, they agree on all compartments 487 times, they agree on no compartments 75 times, and they agree on at least one but not all 60 times. So they are in complete agreement for 88% of proteins, complete disagreement for 12% of proteins, and partial agreement for 10% of proteins.<br />
<br />
<br />
<br />
Annotate the transcriptome with PRIAM:<br />
java -jar PRIAM_search.jar -cc T -cg T -i peppermint_contigs.fasta.transdecoder.pep -p PRIAM_MAR15 -od mint_priam_9_17_2015<br />
cc: checks for known catalytic residues<br />
cg: tells PRIAM that we're inputing a complete proteome<br />
<br />
For many proteins, uniprot provides a subcellular compartment annotation. To convert the text annotation into an explicit compartment, I run text searches of the annotation string:<br />
{"Peroxisome":"peroxisome", "Mitochondrion":"mitochondrion", "Plastid":"plastid", "Vacuole": "vacuole", "Cytoplasm": "cytosol"}<br />
where the key is the substring searched for, and, the value is the compartment. Where no annotation is available, I use the targetp prediction.<br />
<br />
Generate model by assigning peppermint transcripts to reactions from Arnold, AraCyc, or MetaCyc.<br />
Frustratingly, no matter which dataset we use, we still can't account for most of the gene expression.<br />
<br />
To assign transcripts to reactions:<br />
take the subset of reactions where max_global_ident > 70 (70 is an arbitrary choice here, but it should give us about 80% accuracy in activity calling, Tian and Skolnick 2003). If the highest identity annotation comes from Arnold, assign the transcript to those reactions. If the highest annotation comes from AraCyc, but the Arnold identity is within 5%, use the Arnold reactions, otherwise use the AraCyc reactions. If the highest identity comes from MetaCyc, then but the Arnold identity is within 5%, use the Arnold reactions, otherwise if the AraCyc identity is within 5%, use the AraCyc reactions, otherwise use the MetaCyc reactions.<br />
<br />
There are 318 transcripts where the PRIAM positive hit probability was > 80 but the best sequence identity to any of the models was < 70<br />
Many of these (<span style="background-color: white;">231</span>) are enzymes with protein substrates or DNA/RNA substrates, such as protein kinases and phosphateses, helicases, polymerases, etc. One is a transporter, 47 are reactions involving only non-generic small molecule substrates, and 31 are reactions involving only small molecules at least one of which is <br />
<br />
For the mint model I take all of the reactions from Arnold 2014 (whether or not they have any associated peppermint transcripts) except the biomass reactions, as well as any reaction from AraCyc and/or MetaCyc.<br />
I add a biomass reaction (not worrying about stoichiometry for the moment) of<br />
Limonene Menthone Menthol Isomenthone Menthofuran Pulegone Germacrene D B-Caryophyllene a-Humulene hesperedin Gardenin
<br />
<br />
With that collection of reactions, I test for the ability to make biomass, and add the necessary reactions <br />
<br />
[TODO: generate graphs of metabolite connectivity to demonstrate why removing orphan reactions is necessary]<br />
<br />
To generate the "second model":<br />
Changes:<br />
set light import to zero, allow free import and export of water, protons<br />
add raffinose import<br />
add CTP regeneration: NUCLEOSIDE-PHOSPHATE-KINASE-RXN|4_h, CDPKIN-RXN|0_h<br />
make FNR go in the direction of reduced ferredoxins: merge 1.18.1.2-RXN|0_h and Fd-NADPR_h, and make reversible<br />
add transport of limonene to cytosol<br />
add transport of trans-isopiperitenol and trans-isopiperitenone into and out of the mitochondrion<br />
add the reaction ISOPIPERITENOL-DEHYDROGENASE-RXN|0_m (TODO: add transcript annotation)<br />
add the reaction RXN-5162|0_c (TODO: add transcript annotation)<br />
finish off the pathway to gardenin B: add RXN-1466,<br />
add IPP transport from plastid to cytosol<br />
add RXN-15528|0_c, RXN-15530|0_c, RXN-14657|0_c, RXN-14639|0_c<br />
add export for menthofuran, menthol, isomenthol, neomenthol, neoisomenthol, ethanol<br />
add import for O2 <br />
add RXN0-882 to manual reactions (HMPP synthase), so that it doesn't get eliminated when the non-balanced are eliminated<br />
add RXN-8415|0_c (humulene synthase), RXN-8414|0_c ((-)-b_caryophyllene synthase), RXN-8562|0_c ((-)-germacrene-D synthase)<br />
add:UDP-GLUCOSE-46-DEHYDRATASE-RXN|0, RXN-5481|0, RXN-7754|0, RXN-7755|0,RXN-7759|0, Hesperedin biosynthesis<br />
<br />
at this point the model can produce all of the biomass compounds. However, it seems to not be energy balanced or mass balanced. <br />
<br />
<br />
run the clean method to merge duplicate reactions (ones with the same reactants and products) <br />
<br />
if a reaction is only from "bad" metacyc or aracyc, then get rid of it. This will eliminate a lot of spurious isomerizations.<br />
<br />
then remove all reactions with orphan metabolites (metabolites that only occur in one reaction).<br />
<br />
Now the model is both mass and energy balanced.<br />
<br />
There are still some thermodynamically unrealistic loops. The only way I know of to get rid of these is to run repeated FBA minimization simulations and examine the results for things that look wrong.<br />
<br />
A lot of problems arise from instantiation of biocyc reactions, or unrealistic reversibility of biocyc reactions.<br />
<br />
One problem with the Arnold model is that it includes a possible shuttle of NADH from cytosol to mitochondrion, based on interconversion of Proline and L-DELTA1-PYRROLINE_5-CARBOXYLATE<br />
<br />
Another problem is that cytosolic NADPH can be regenerated by a cycle involving the reactions:<br />
Tr_Pyr2<br />
Im_CO2<br />
AlaTA_m<br />
AlaTA_p<br />
Tr_NH42<br />
Tr_Pyr3<br />
Tr_Ala1<br />
GluDH3NADP_c<br />
Tr_KG<br />
GluDH2NAD_m<br />
Tr_Glu1<br />
Tr_BAT11<br />
<br />
<br />
The next step is to add transcript annotations to as many of the manually added reactions as possible, and then assign expression levels to each of the reactions. Use MetaCyc, ExPasy Enzyme, and UniProt to find sequences for the added reactions and BLAST search against the peppermint transcriptome.<br />
<br />
<br />
Since I don't have boolean gene-reaction statements for all of the reactions, I'm going to calculate expression simply by summing the expression of the genes associated with each reaction.<br />
<br />
<br />
Combining the manual reactions with the second model and adding reaction expression gives the third model.<br />
<br />
Another round of manual curation gives the fourth model.<br />
<br />
The fifth model is generated by removing all reactions originating from the Arnold model that have arabidopsis genes associated with them, but no hits to the peppermint trichome transcriptome.<br />
<br />
The fifth model had some big problems with generating cytosolic NADPH, the most efficient way was to use NADP dependent isocitrate dehydrogenase, the product of which could only be eliminated by wasteful looping through oxidative phosphorylation, leading to huge fluxes in the ATP-burn reaction.<br />
adding the complete cytosolic OPPP solved this problem. Nevertheless, the fact that there the OPPP is incomplete in the cytosol could be important, and should not be ignored.<br />
<br />
According to Kruger and von Schaewen (2003), all of the enzymes (oxidative and non-oxidative) of the PPP occur in the plastid, and only the oxidative reactions (G6PDH, 6PGL (gluconolactonase), and 6PGD) are duplicated in the cytosol, with transporters Glc-6-P/phosphate translocator (GPT) and XPT (xylulose 5-phosphate (Xlu-5-P), triose phosphate (Triose-P) and Pi) exchanging the intermediates.<br />
<br />
The original Arnold model does not have cytosolic G6PDH or 6PGL or 6PGD, nor does it have the transporters for the appropriate intermediates to split the OPPP between cytosol and plastid.<br />
<br />
<b>Appendix</b><br />
<br />
Arnold 2014 compartment abbreviations:<br />
c: Cytosol<br />
h: Chloroplast<br />
i: IntermembraneSpace<br />
l: Lumen<br />
m: Mitochondrion<br />
p: Peroxisome <br />
<br />
<br />Sean Johnsonhttp://www.blogger.com/profile/12906055564149166723noreply@blogger.com0tag:blogger.com,1999:blog-4023999156345551442.post-41943369035497276082016-07-04T18:50:00.001-07:002016-07-04T18:53:11.844-07:00Conversion of the Arabidopsis model by Arnold and Nikoloski, 2014, into a model using MetaCyc metabolite namesI think the stoichiometric model of Arabidopsis thaliana by <a href="http://www.ncbi.nlm.nih.gov/pmc/articles/PMC4081344/">Anne Arnold and Zoran Nikoloski (2014)</a> is a great model. However, they use idiosyncratic and non-standardized metabolite names. I translated these names into MetaCyc compatible names. Here I describe and link to the conversion. The whole conversion table is available on Google Sheets, <a href="https://docs.google.com/spreadsheets/d/1-ogkNveKE6sDdLtSu5lT1oaMGNIZdJwhY27pgpsfArE/edit?usp=sharing">here</a>. <br />
<br />
<br />
<a name='more'></a><br />
<br />
Arnold-2014 uses "starch1", "starch2", etc. for starch polymer
elongation intermediates. There is no good equivalent in MetaCyc, so I
just keep the names. Similarly for "Cellulose1" etc.<br />
<br />
<br />
In
MetaCyc, metabolites such as Lipoamide, Acetyldihydrolipoamide, and
Succinyldihydrolipoamide, etc are defined as being covalently bound to
an enzyme. The free forms of these molecules also exist in metacyc, but
are not annotated as being members of any reaction. A good direct
substitution from Arnold-2014 to MetaCyc names is not possible. It would
be best to split the Arnold-2014 metabolites as one of several MetaCyc
metabolites depending on the reaction. Because I want to do a direct
substitution, I'll use the free forms from MetaCyc, but a better
solution would be to change the reactions as well as the metabolite
names.<br />
<br />
<br />
Oxidized plastoquinone: PLASTOQUINONE-9<br />
Reduced plastoquinone: CPD-12829<br />
Ubiquinone: UBIQUINONE-8<br />
Ubiquinol: CPD-9956 (ubiquinol-8)<br />
Oxidized cytochrome c: Cytochromes-C-OxidizedReduced cytochrome c: Cytochromes-C-Reduced<br />
3-Hydroxy-3-methyl-2-oxobutanoic acid: HMOB (I can't find a metacyc equivalent of this metabolite)<br />
<br />
<a href="https://docs.google.com/spreadsheets/d/1-ogkNveKE6sDdLtSu5lT1oaMGNIZdJwhY27pgpsfArE/edit?usp=sharing"></a><br />
<br />
I used a <a href="https://bitbucket.org/seanrjohnson/yasmenv">yasmenv</a> script "metabolites_to_metacyc.py" to convert the original model to one with metacyc names:<br />
<br />
<pre>import pandas as pd
from yasmenv import model
mets = pd.read_table('metabolites.tsv')
m = model.from_tsv("Arnold_2014.tsv")
met_dict = dict()
for (i, r) in mets.iterrows():
met = r['Metabolite name'][:-3]
metacyc = r['MetaCyc']
if met in met_dict:
if metacyc != met_dict[met]:
print("inconsistent naming: %s, %s, %s" % (met, met_dict[met], metacyc))
else:
met_dict[met] = metacyc
merge_dict = dict()
for (arnold, metacyc) in met_dict.iteritems():
if metacyc in merge_dict:
if arnold not in merge_dict[metacyc]:
merge_dict[metacyc].append(arnold)
else:
merge_dict[metacyc] = [arnold]
m2 = m.merge_metabolites(merge_dict, True)
m2.to_tsv('Arnold_metacyc.tsv')
</pre>
<br />
<br />
<br />
I used flux variability analysis on the original model and the model
with the translated metabolite names to verify that the model structure
was identical. The FVA solution was exactly the same for both models
(except for some differences in rounding of very small numbers). So the
translation to metacyc appears to have been successful.<br />
<br />Sean Johnsonhttp://www.blogger.com/profile/12906055564149166723noreply@blogger.com0tag:blogger.com,1999:blog-4023999156345551442.post-11883360011120515602016-07-04T18:24:00.002-07:002016-08-05T11:04:32.051-07:00Future perspectives for stoichiometric modelingThese are a set of notes I wrote for a specific proposed stoichiometric modeling project. I've edited out some of the details because someone is actually working on this project, but I think what remains is still worth reading.<br />
<br />
<a name='more'></a><br />
<br />
<br />
<b>Areas of opportunity in stoichiometric modeling:</b><br />
<br />
I think local optimization techniques that can find “maximum likelihood” relationships between omics data and flux sets in FBA models are an area of huge opportunity in stoichiometric modeling.<br />
<br />
Schellenberger http://www.jbc.org/content/284/9/5457.full discusses “random sampling” analysis, and I think some of the techniques he mentions could be applicable to our system. However, I think non-random sampling might be even more exciting.<br />
<br />
Another subfield of computational biology is evolutionary genetics. In evolutionary genetics, one of the main problems is to reconstruct phylogenetic trees from modern sequencing data. It is often the case that provably optimal phylogenetic trees cannot be computed, because the problem is too computationally complex. So a modeler has to settle for a solution that is good, but not provably optimal. To arrive at these solutions they use Bayesian or “maximum likelihood” approaches. These kinds of approaches are not yet widespread in stoichiometric modeling. But I think they should be.<br />
<br />
<b>Differences between stoichiometric models and ODE models:</b><br />
<br />
A stoichiometric model is just a set of reaction stoichiometries. The way they are generally used is that the modeler defines specific rates of inputs and outputs from the system, and the computer calculates a set of internal fluxes that allow for those exchange fluxes (a procedure called Flux Balance Analysis). Because there are often an infinite number of solutions to flux balance analysis problems, the solution sets have to be narrowed down somehow, such as by eliminating internal loops, or eliminating reactions which have no tissue-specific expression support. Stoichiometric models can also be used to predict metabolic phenotype from gene expression data. Many current methods are summarized at http://cobramethods.wikidot.com/.<br />
<br />
The other major kind of metabolic modeling is kinetic (ODE) modeling. Whereas the focus of stoichiometric modeling is on fluxes (with the exception of certain specialized techniques such as dynamic FBA), the focus of ODE modeling is centered more around concentrations. An ODE model consists of a set of equations explaining how reaction rates depend on the concentrations of metabolites. The advantage to ODE models is that they allow the model to capture complex, indirect relations such as feedback inhibition. A major disadvantage of ODE models is that they can require detailed descriptions of all of the enzymes in a system, which are often not available, or not correct, or only correct in certain circumstances. To some extent, the disadvantages of ODE models can be compensated for by using formalizations such as Metabolic Control Analysis and Biochemical Systems Theory, that rely only on a small number of parameters for each enzyme, rather than a full kinetic description (I would recommend taking one of these two approaches, in any new kinetic model).<br />
<br />
<b></b><br />
<b>Using stoichiometric models to compare wild-type with mutant phenotype:</b><br />
<br />
One of the obvious experiments is to run RNA-seq on both the wild-type and mutant, and compare gene expression levels. Analyzing expression of genes that encode enzymes will be substantially easier if a high-quality stoichiometric model is available. The “state of the art” in automated transcriptome annotation and model generation is pretty poor. The automatically generated models that I've looked at have been rampant with obvious mis-annotation. A careful semi-automated (but well curated) reconstruction of a metabolic network for a model plant would enable substantially more reliable analyses of quantitative transcriptomic data which would be useful not just for this project, but also for many other projects in the wider plant biology community. For example, the human metabolic model made by Duarte et al. (2007) [1], has been used in numerous other studies (including Fan et al. 2014), and cited more than 700 times (it would be interesting to survey those citations and see what exactly it is being cited for, but at least some of the time, like in Fan et al. 2014, it is leading to insights into human physiology). If nothing else, a carefully reconstructed model enhances the accuracy of visualizations of omics-data mapped onto the metabolic network graph (because it improves the accuracy of the mapping). That in itself I think is sufficient justification for funding the construction of a model.<br />
<br />
In addition to improving omics data visualization, a stoichiometric model can also be used to predict fluxes from omics data, with one of the methods reviewed by Blazier and Papin (2012) [2]. If a subnetwork of 100 or fewer of the most relevant reactions can be identified, my own Flux Rank method (unpublished) could be used. These methods would answer the same kinds of questions as a manual evaluation of a color mapping of expression levels onto a network visualization: they would indicate whether decreased flux due to decreased enzyme gene expression, in the absence of additional regulatory interactions (such as feedback inhibition, enzyme phosphorylation, or any other post transcriptional regulation), is alone sufficient to explain mutant phenotype. It would also be possible to try to account for other kinds of regulation using stoichiometric modeling techniques (although kinetic modeling may be more suited for this). For example, if there were a hypothesized post-transcriptional regulation interaction between two proteins, one could incorporate that into the model. For example, using the E-Flux [3] method, you would modify the bounds of a reaction based not only on the expression of enzymes directly involved in that reaction, but also based on other transcripts that are hypothesized to have a regulatory interaction with it. Analogous operations are possible using other modeling methods. The problem with trying to infer these kinds of long distance regulatory interactions from a stoichiometric model is that, with just two conditions, there is the potential for a huge number of false positives: interactions that are not real, but would be consistent with the expression data and product accumulation data for those two conditions.<br />
<br />
To decrease the number of false positives among predicted interactions, a subnetwork of the stoichiometric model could be converted into a kinetic model. The kinetic model could be constructed based on Michealis-Menten Kinetics (MMK), or by the Metabolic Control Analysis formalism (MCA) (David Fell), or the Biochemical Systems Theory (BST) (Eberhard Voit) formalism. A kinetic model would be most useful for pathways where there is at least some knowledge (complete knowledge would be helpful, but not essential) of the concentrations of pathway intermediates in both the wild-type and the mutant. After choosing the pathways to model, we'd attempt to find model parameters that are consistent with the expression data, and with the known kinetic parameters of the enzymes involved, keeping within those constraints, the parameters should be further adjusted so that they are consistent with the metabolomics data. We would hypothesize that without incorporating long distance regulatory interactions, no model matching the experimental data (for both conditions) would be possible, then we would try potential regulatory interactions until we are able to find parameters that cause the model to match the experimental data. If there are sufficiently few of them, they can be tested experimentally. The kinetic modeling approach to some extent may suffer from the same problem with an overwhelming number of false positive predictions as regulatory approaches with stoichiometric models. However, it has the advantage that it in addition to boundary fluxes, it also predicts internal metabolite concentrations, so if these can be measured, they can be used as constraints on the parameter space of a kinetic model (that is, as dependent variables), but not of a stoichiometric model (at least not as easily or directly). Counteracting this advantage is the fact that kinetic models also have more independent variables: whereas reactions in a stoichiometric model are associated with just two independent variables (lower bound and upper bound), reactions in a kinetic model may be associated with many more independent variables. Fortunately, using formalisms like MCA and BST, the numbers of parameters associated with each reaction in a kinetic model can be kept to a minimum, which will hopefully allow the model to not be so under-determined that it becomes useless.<br />
<br />
<b>references:</b><br />
<br />
[1] Natalie C. Duarte, 1777–1782, doi: 10.1073/pnas.0610772104<br />
<br />
[2] doi: 10.3389/fphys.2012.00299<br />
<br />
[3] DOI: 10.1371/journal.pcbi.1000489<br />
<br />
<br />Sean Johnsonhttp://www.blogger.com/profile/12906055564149166723noreply@blogger.com0tag:blogger.com,1999:blog-4023999156345551442.post-51732266602230658852016-07-04T17:43:00.002-07:002016-07-21T15:21:53.135-07:00Things you need to know for writing a thesis or dissertation in Microsoft Word: Styles, Style breaks, Tables of Contents, and more!In writing my dissertation, I've had to become more familiar with some of the more advanced features of Microsoft Word (I know, I know, I should be using LaTeX, but that's just not what people in my field use...). Here are a few of the most critical tricks I've learned. I hope this is helpful to other people as they write long documents like theses and dissertations. The screenshots here are from Word 2016, but all of these things are very similar on Word 2010 and 2013.<br />
<br />
<br />
<a name='more'></a><br />
<b>Show Formatting:</b><br />
Images in this post make use of the "Show hidden formatting" mode in Word, which is a nice way to see what's going on with formatting in your document. To turn on show formatting mode: go to the "Home" menu, then press the paragraph symbol. Alternatively: alt, h, 8.<br />
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgDH2htXT0IlQSB4DikwBz_od5vnzf4AyqENK1IeBKGa3-UpdO84fQ0JBLNLlCU3CdSQAD-vhTYrcdUak99AJr6UfkD-EGyWb68eIoYr8dw65CD2aFYqq-kAYGKsqmXSZXYfhGQQZ3DwDL4/s1600/show_formatting.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="48" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgDH2htXT0IlQSB4DikwBz_od5vnzf4AyqENK1IeBKGa3-UpdO84fQ0JBLNLlCU3CdSQAD-vhTYrcdUak99AJr6UfkD-EGyWb68eIoYr8dw65CD2aFYqq-kAYGKsqmXSZXYfhGQQZ3DwDL4/s400/show_formatting.png" width="400" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">show formatting</td><td class="tr-caption" style="text-align: center;"><br /></td><td class="tr-caption" style="text-align: center;"><br /></td><td class="tr-caption" style="text-align: center;"><br /></td><td class="tr-caption" style="text-align: center;"><br /></td><td class="tr-caption" style="text-align: center;"><br /></td><td class="tr-caption" style="text-align: center;"><br /></td><td class="tr-caption" style="text-align: center;"><br /></td><td class="tr-caption" style="text-align: center;"><br /></td><td class="tr-caption" style="text-align: center;"><br /></td><td class="tr-caption" style="text-align: center;"><br /></td><td class="tr-caption" style="text-align: center;"><br /></td><td class="tr-caption" style="text-align: center;"><br /></td><td class="tr-caption" style="text-align: center;"><br /></td><td class="tr-caption" style="text-align: center;"><br /></td><td class="tr-caption" style="text-align: center;"><br /></td><td class="tr-caption" style="text-align: center;"><br /></td><td class="tr-caption" style="text-align: center;"><br /></td><td class="tr-caption" style="text-align: center;"><br /></td><td class="tr-caption" style="text-align: center;"><br /></td><td class="tr-caption" style="text-align: center;"><br /></td><td class="tr-caption" style="text-align: center;"><br /></td><td class="tr-caption" style="text-align: center;"><br /></td><td class="tr-caption" style="text-align: center;"><br /></td><td class="tr-caption" style="text-align: center;"><br /></td><td class="tr-caption" style="text-align: center;"><br /></td><td class="tr-caption" style="text-align: center;"><br /></td><td class="tr-caption" style="text-align: center;"><br /></td><td class="tr-caption" style="text-align: center;"><br /></td></tr>
</tbody></table>
<br />
<b>Section Breaks, tracking page numbering differently for different sections of a document:</b><br />
Section breaks are useful if you want to number your front matter differently from the body of the document. In my dissertation I use 2 section breaks. One separates the title page from the front matter (I don't want the title page included in any numbering). The other separates the front matter from the body of the document (which I want numbered independently). alt, p, b, n<br />
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgjNoODxyM9huHAsH37fWOlzWv7pGLFI3FnLLOfThdU2aTw5ahwvew_-OL0kvpUCpS-4NifiwHMzSzvcFCozM-KGp-M2rGaJJFliw7pGY0-gejJOhLs55AZv6IbLcuZaX0AcKm-ObPborWA/s1600/section_break.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="210" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgjNoODxyM9huHAsH37fWOlzWv7pGLFI3FnLLOfThdU2aTw5ahwvew_-OL0kvpUCpS-4NifiwHMzSzvcFCozM-KGp-M2rGaJJFliw7pGY0-gejJOhLs55AZv6IbLcuZaX0AcKm-ObPborWA/s400/section_break.png" width="400" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Inserting page and section breaks</td></tr>
</tbody></table>
<br />
<br />
<br />
<br />
<b>Page numbering:</b><br />
Adding page numbering is pretty simple. If you have your document divided with section breaks, then page numbers will only apply to the current section.<br />
alt, n, nu<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEji1_fLCwiUrvKIF9934vRlA0JFiN_nx2g-dT4fnsL7X3SfrhW14E5-OmvQEnxEAn4CV05sXS2SkXoNpzZ0CQ1MDALc1-MiOPjvtf-iTPjG-ZCRVYANzvjZiifA6b7reKpsEDNPxTrjbyKt/s1600/page_numbers.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="101" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEji1_fLCwiUrvKIF9934vRlA0JFiN_nx2g-dT4fnsL7X3SfrhW14E5-OmvQEnxEAn4CV05sXS2SkXoNpzZ0CQ1MDALc1-MiOPjvtf-iTPjG-ZCRVYANzvjZiifA6b7reKpsEDNPxTrjbyKt/s400/page_numbers.png" width="400" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Insert page number</td></tr>
</tbody></table>
<br />
<br />
<br />
<br />
<b>Styles: </b><br />
Styles are really useful . Remember: Styles apply to paragraphs, not to individual words, characters or sentences. When you change a style, it will be applied to the whole paragraph that the currently selected characters are part of, not just to the selected characters. To apply styles to a smaller group of text, you need to use style breaks (see below). Styles are useful if you want consistent formatting among different parts of your document without having to remember all of the precise formatting decisions.<br />
For example if you want all of your chapter headings to look the same. Do it manually once, save it, then apply it to any new chapter headings. Similarly for figure captions, etc.<br />
<br />
There are some built-in styles which you can modify, or you can make your own styles. I found that making my own styles was more convenient than using the built-in styles, because I could name them however I wanted, and delete them if I didn't want them any more.<br />
<br />
When making a style, pay special attention to the "outline level", and the "Style of following paragraph".<br />
Choosing the right Outline level will make document navigation easier, and will also make it easier to set up the table of contents.<br />
Choosing the right "Style of following paragraph" will save you from having to switch styles when you hit enter (for example between a section heading and the text of a section).<br />
<br />
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiGCjr3V6aCFW1NVRGbilK5gQrKEy_VGAdMaziq-_wIXQxPaQgMIySRi2g4kATBA3nAelA7dw0SNzUJbBTVackno3TsbRSHT5-88U0rpIyk6VUYtZL707ULw2JIJZFhkzkMR7okKCUjGp8K/s1600/create_new_style.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="362" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiGCjr3V6aCFW1NVRGbilK5gQrKEy_VGAdMaziq-_wIXQxPaQgMIySRi2g4kATBA3nAelA7dw0SNzUJbBTVackno3TsbRSHT5-88U0rpIyk6VUYtZL707ULw2JIJZFhkzkMR7okKCUjGp8K/s400/create_new_style.jpg" width="400" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">To create a new style. Format some text how you want it, then highlight<br />
it and right-click, then click styles.</td></tr>
</tbody></table>
<div class="separator" style="clear: both; text-align: center;">
</div>
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: 1em; margin-right: 1em; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi0RaX_DaIpMNcD6T4BZhLqKWENa9QWzM72Yv6wL8Hsqo6LVLM-NAmn6lksUSAy9ML8_G7htYlyzAZ4LkU_IJOCvJxXgie4znwcThV1GAxlTWEQ-TvQHU4IxlXOfkn1Coz19xlrEc0SiD43/s1600/modify_style.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="125" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi0RaX_DaIpMNcD6T4BZhLqKWENa9QWzM72Yv6wL8Hsqo6LVLM-NAmn6lksUSAy9ML8_G7htYlyzAZ4LkU_IJOCvJxXgie4znwcThV1GAxlTWEQ-TvQHU4IxlXOfkn1Coz19xlrEc0SiD43/s400/modify_style.jpg" width="400" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Right click on a style and click "Modify" to get more options for customizing the style</td></tr>
</tbody></table>
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiBxmx1hfA0t72MwQko1S7NJSVu-YjeeFCsNlj18j9vP55Ja2eiquaYd7ZrcxRhkiyHpt4vbZ81ridiu_fvWD3KSeoRA_HaSJ7pkbwEWZBfMTaug3QhuXbkcFdggddRrOctmLH79pa1QwtV/s1600/change_outline_level.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="371" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiBxmx1hfA0t72MwQko1S7NJSVu-YjeeFCsNlj18j9vP55Ja2eiquaYd7ZrcxRhkiyHpt4vbZ81ridiu_fvWD3KSeoRA_HaSJ7pkbwEWZBfMTaug3QhuXbkcFdggddRrOctmLH79pa1QwtV/s640/change_outline_level.jpg" width="640" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Important fields to pay attention to are "Style based on", "Style for following paragraph", and "Outline Level" To get to the menu where you can change the level, Click Format, then Paragraph.</td></tr>
</tbody></table>
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjWqnGtTWOJZzCF_awT5cbPsgd4yuUNvuKM2SHri1DyJXZOX5Kjnn5kONT1paDQcXC_ExwAz9iHpf195cVhSTMqjMe5PVbaqJFOTDXheGHWr8IyjTK6B4xXU_HvoXE4_4zpWfi7YDebAsdc/s1600/outline.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="400" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjWqnGtTWOJZzCF_awT5cbPsgd4yuUNvuKM2SHri1DyJXZOX5Kjnn5kONT1paDQcXC_ExwAz9iHpf195cVhSTMqjMe5PVbaqJFOTDXheGHWr8IyjTK6B4xXU_HvoXE4_4zpWfi7YDebAsdc/s400/outline.jpg" width="110" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Outline level of Styles will affect the organization of the Navigation outline</td></tr>
</tbody></table>
<br />
<br />
<br />
<b>Maintaining a table of contents:</b><br />
If you've done a good job of defining and using outline levels in your styles, then making a table of<b> </b>contents can be done completely automatically. Go to the "References" tab, click "Table of Contents" and choose one of the automatic tables of contents. alt, s, t. If you haven't been keeping track of outline levels in your styles, all is not lost, you can make a Custom Table of Contents. This allows you to choose specifically which styles should go with which levels of the table of contents. In my case, I used this function to generate my List of Tables and List of Figures. My table and figure titles were tracked using specific titles, but I didn't want them showing up in the main table of contents, or the navigation outline, so I did not give those styles an "outline level".<br />
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjd2RKoYYc1FbQPlT9eJOmsbdGF9UvwOfY_5QakFwAUS70qz1oTf0uV4lXLNX6vX-AIZmT22feoSHtrGMto5g6d9JheM_W_6HMwxckJt9RnxMSa1PtHPbtNd51XLJWsZIGgXbIFU5O02JdS/s1600/automatic_TOC.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="400" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjd2RKoYYc1FbQPlT9eJOmsbdGF9UvwOfY_5QakFwAUS70qz1oTf0uV4lXLNX6vX-AIZmT22feoSHtrGMto5g6d9JheM_W_6HMwxckJt9RnxMSa1PtHPbtNd51XLJWsZIGgXbIFU5O02JdS/s400/automatic_TOC.jpg" width="250" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Adding an automatic table of contents is easy if you've managed your styles right.</td></tr>
</tbody></table>
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg_JzcAxax7POIXvSSlHAgLsJpRYQwJ_hoSU1BCt_nl-OYvQdQXUaqQcaBL80GspXf7G5gKseBmBaE3FMMblmxU4YOpeVTU075sVvWNJbaXLSefdNMD7BGQFlb-dMF8a1A8I4DsLjKlg5r_/s1600/manual_TOC.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="250" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg_JzcAxax7POIXvSSlHAgLsJpRYQwJ_hoSU1BCt_nl-OYvQdQXUaqQcaBL80GspXf7G5gKseBmBaE3FMMblmxU4YOpeVTU075sVvWNJbaXLSefdNMD7BGQFlb-dMF8a1A8I4DsLjKlg5r_/s400/manual_TOC.jpg" width="400" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">To choose which styles to use, click the "Options" button at the bottom of the Custom Table of Contents dialog.</td></tr>
</tbody></table>
<br />
<b> </b> <br />
<br />
<br />
<b>Style Breaks:</b><br />
Style breaks are useful if you want to have multiple styles in the same paragraph (that is: multiple styles in a single block not broken by a line break). I used style breaks extensively in figure captions to separate the figure name from the explanatory text. In my case my table of figures is autogenerated from anything with the "figure-caption" style<br />
<br />
<br />
Ctrl+Alt+Enter<br />
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgLwp2sVZ1F5oxr82Uo4O8odkc2fXqEWaRwNXKlYN02OZ9n2TfnW-WeXLzKkEggRRgp9vbQMWs9QcXoD13RGkw1oXejAPTEvGcBZ-ImfoKAZyHHbbXJlodIIu2RL-QXnraR-NcXKI4D3K9J/s1600/style_break.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="101" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgLwp2sVZ1F5oxr82Uo4O8odkc2fXqEWaRwNXKlYN02OZ9n2TfnW-WeXLzKkEggRRgp9vbQMWs9QcXoD13RGkw1oXejAPTEvGcBZ-ImfoKAZyHHbbXJlodIIu2RL-QXnraR-NcXKI4D3K9J/s640/style_break.png" width="640" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Arrow indicates the location of the style break. Notice that it doesn't show up in the formatting. Oddly, sometimes it is displayed as a paragraph break with a dotted line around it. I don't know why it displays sometimes and sometimes does not.</td></tr>
</tbody></table>
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhYRr9SwidirvOjLPsn9IJVWBAcbVMVvaYeH5e5bGePyolCyNULR47qfkgellvSddQtzwVVcuagcFdG0jsJFTrtwoavGe9qLkOvjf44KmPn0vhpm_S-sLRaGGCEtcoI2sFaXy8_rfCafz0U/s1600/style_break.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="60" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhYRr9SwidirvOjLPsn9IJVWBAcbVMVvaYeH5e5bGePyolCyNULR47qfkgellvSddQtzwVVcuagcFdG0jsJFTrtwoavGe9qLkOvjf44KmPn0vhpm_S-sLRaGGCEtcoI2sFaXy8_rfCafz0U/s320/style_break.png" width="320" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Formatting symbol for style break (center)</td></tr>
</tbody></table>
<br />
<br />
<b>Keeping section headings on the same page as section text:</b><br />
To be added. For now, have a look at this great explanation from someone else:<br />
<a href="https://assessingpsyche.wordpress.com/2014/06/19/ms-word-trick-make-your-headings-stay-on-the-same-page-as-the-paragraph-below/">Here</a><br />
<br />
<b>Remaining Frustrations:</b><br />
<br />
Styles are local to a particular document. Copying text from one document to another does not necessarily preserve the styles, even if both documents use the same style names (indeed, even if both documents loaded their styles from the same source). This is particularly frustrating if you're writing different chapters in different documents to paste them together at the end (for example, so Zotero can track references separately for different chapters). Whenever you paste an individual chapter back into the master document, you have to go through and check that all the sections, titles, and captions have the correct formatting. I haven't figured out a way around this.<br />
<br />
(TO ADD: section breaks, page numbering gaps)<br />
<br />
<b>References:</b><br />
style breaks<b> </b><br />
<a href="http://answers.microsoft.com/en-us/office/forum/office_2010-word/where-can-i-find-style-separator-in-ms-word-2010/76665d88-6cd2-4cbb-8643-b3a0ba1bd4cf">http://answers.microsoft.com/en-us/office/forum/office_2010-word/where-can-i-find-style-separator-in-ms-word-2010/76665d88-6cd2-4cbb-8643-b3a0ba1bd4cf</a> Sean Johnsonhttp://www.blogger.com/profile/12906055564149166723noreply@blogger.com0