Welcome to TiddlyWiki created by Jeremy Ruston, Copyright © 2007 UnaMesa Association
{{outline{
!!Outline
#Overview of adaptive immunity
#Humoral immunity: exogenous antigens (extracellular pathogens)
##Antigens
##Lymphocytes
##Antigen-presenting cells and MHC II
##Activation of T~~H~~ cells
##Activation of B cells
##Differentiation and antibody production
#Antibodies
##Antibody structure
##Antibody function
#Cell-mediated immunity: endogenous antigens (intracellular pathogens)
##Antigen-presenting cells and MHC I
##Activation of T~~C~~ cells
##Differentiation
##Cell-mediated killing of infected cells
#Immunity: the secondary response
!!Handouts and class materials
!!Links to more information
*[[3D Interactive tutorial on antibody structure|http://www.callutheran.edu/Academic_Programs/Departments/BioDev/omm/jmol/immunoglobulin/ig.html]]
*[[3D Interactive tutorial on antigen recognition by antibody|http://www.callutheran.edu/Academic_Programs/Departments/BioDev/omm/jmol/epitope/epitope.html]]
*[[What the heck is an antibody?|http://people.ku.edu/~jbrown/antibody.html]]
*[[Antibody structure and antigen binding|http://www.biology.arizona.edu/immunology/tutorials/antibody/structure.html]]
*[[Adaptive immunity|http://student.ccbcmd.edu/courses/bio141/lecguide/unit5/index.html]] - Multiple pages, many links to animations
*[[3D Model of MHC proteins|http://www.umass.edu/microbio/chime/mhc/2frmcont.htm]] (requires Chime plug-in)
}}}
!Objectives
!Outline
!Activities
!Ideas
{{lechelp{
The ''Independent Study'' section is designed to help you __prepare__ for each class session. If you learn the basics //before// you come to class, we can use class time for more sophisticated and active learning. The focused readings, guide questions and list of key terms will help you direct your preparation appropriately. We will //not// go back over these basic ideas during class; you are expected to know them (a quiz could happen at any time!). You can test your ability to apply what you've learned with the application questions, which will often be discussed in class. Application questions will help you see if you can apply what you've learned and will often be discussed in class. You are encouraged to bring your notes to class in case you need them.
}}}
{{lecblurb{
''How do we become "immune?"'' Barriers help keep pathogens out, while inflammation, phagocytosis, NK cells, interferon and other innate immune responses contribute to the elimination of pathogens that get past the barriers. But none of these are specific enough to make us immune to another attack by the same specific pathogen. The adaptive immune response is where immunity comes from, as well as the firepower to eliminate an infection that the innate response can't contain.
}}}
!!Focused readings
{{smalltext{all page numbers below are from //Microbiology: Diversity, Disease and the Environment// by Salyers and Whitt}}}
*Overview of adaptive immunity: pp. 249-251 (up to "Antibodies")
*Activation of the antibody response: pp. 258-262 (up to "Response to Polysaccharide Antigens") and Figures 13.1, 13.8, 13.9, 13.11
*Antibody structure and function: pp. 251-253 ("Antibodies") and Figures 13.3 and 13.4
*Cell-mediated immunity: pp. 257-258 ("Cytotoxic T cells and Activated Macrophages") and 259-260 ("Cytotoxic T Cell Activation")
*Immunity (secondary response): pp. 249-250 ("Timing of the Specific Immune Response and Vaccination") and Figure 13.2
!!Guide questions
#In what key ways is adaptive (or specific) immunity different from the innate immunity we discussed previously?
#Starting with the presence of a foreign antigen in the body, list the steps required to initiate production of specific antibodies against that antigen.
#What two kinds of lymphocytes are involved in this process? What are their roles?
#What is MHC? How is it involved in activating the antibody response?
#Sketch the structure of an antibody. Label the proteins that make up the antibody, the antigen binding site(s), and the constant region(s).
#In what ways might antibody production be useful in fighting a bacterial pathogen? List all that are appropriate.
#In what ways might antibody production be useful in fighting a viral pathogen? List all that are appropriate.
#In what ways might antibody production be useful in fighting a larger eukaryotic pathogen, such as a pathogenic protist? List all that are appropriate.
#Cell-mediated immunity involves killing our own cells! How can this be useful?
#Why isn't cell-mediated immunity useful against a bacterial cell that doesn't invade?
#List the steps required to initiate cell-mediated immunity. Then note the differences between this process and the activation of humoral (antibody) immunity.
#Why do we say we're "immune" to many diseases we've already had once?
!!Key terms
{{col3{
adaptive immunity
humoral immunity
antigen (Ag)
epitope
lymphocyte
antigen-presenting cell (APC)
antigen processing
MHC protein
MHC class II
MHC class I
endogenous antigen
exogenous antigen
extracellular pathogen
intracellular pathogen
T-helper lymphocyte (T~~H~~ cell)
T-cell receptor (TCR)
CD4 co-receptor
cytokines
proliferation
B lymphocyte (B cell)
plasma cell
memory cell
antibody (Ab)
constant region
variable region
antigen binding site
heavy chain
light chain
DNA rearrangement
opsonization
neutralization
ADCC
degranulation
IgA
cell-mediated immunity
cytotoxic T cell (T~~C~~ cell)
cytotoxic T lymphocyte (CTL)
apoptosis
immunity
}}}
!!Application questions
#If you wanted to produce a new vaccine against a __virus__, what aspect(s) of the adaptive immune response do you think it would be most important to stimulate? Why?
#If you wanted to produce a new vaccine against a __non-invasive__ bacterium, what aspect(s) of the adaptive immune response do you think it would be most important to stimulate? Why?
<script>
var ctid = story.findContainingTiddler(place).getAttribute("tiddler");
var slideState = store.getValue(ctid,"slides");
if (slideState == "true" ) {
folder = ctid.toLowerCase();
folder = folder.replace(" ","%20");
linkpath = "web%20materials/" + folder + "/slides.pdf";
var slideLink = createTiddlyElement(place,"a",null,"fileLink","click here to download")
slideLink.href = linkpath;
slideLink.onclick = openInNewWindow;
var stext = "<html><br><iframe height = \"600\" width=\"800\" src=\"";
stext += linkpath + "\"></iframe></html>";
wikify(stext,place);
}
else {
wikify("//Slides for this class session have not yet been posted. Please check back later.//",place);
}
</script>
!!Review questions
#The cellular receptor for the HIV virus is the CD4 protein. What cells will this virus be able to infect? +++*{{keyButton{[answer]}}}...
{{anstxt{
This protein is a specific marker for helper T cells (T~~H~~), allowing them to interact with MHC class II on macrophages and on B cells. The ability of HIV to bind this receptor means it will infect and kill helper T cells.
}}}
===
#The HIV virus specifically infects and kills cells that carry CD4 molecules on their surfaces. Why does this result in immunodeficiency? What part of the adaptive immune response would be most affected by this virus? +++*{{keyButton{[answer]}}}...
{{anstxt{
The CD4-carrying cells are helper T cells. If these are killed, then there is no cell to interact with the antigen-presenting macrophage and no cell to subsequently activate the B cells. Then, B cells don't become plasma cells and don't produce antibody, resulting in a serious inability to respond to an infection. Although it turns out that T~~H~~ cells also affect cell-mediated immunity, the greatest effect will be on the antibody response.
}}}
===
#Most people who have chicken pox once never get it again. Explain why this is true. +++*{{keyButton{[answer]}}}...
{{anstxt{
When someone is infected with the chickenpox virus, his/her adaptive immune response leads to the activation of B cells and cytotoxic T cells specific for the virus. These cells multiply and differentiate; some become plasma cells and make antibody or CTLs that kill infected cells. But, others become memory cells that are activated rapidly upon a second exposure to the same virus. Certainly, the person who has recovered from chickenpox will encounter the virus again. But this time, the immune response is so rapid that the virus will not have time to produce symptoms.
}}}
===
#A minority of individuals who recover from chicken pox can catch the same disease a second time. Suggest some reasons why these individuals might fail to become immune. +++*{{keyButton{[answer]}}}...
{{anstxt{
We don't really know all the reasons, but it could be because of the different MHC alleles that different individuals have, so that not all individuals recognize the same chickenpox antigens or epitopes. Or, it could be related to the number of type of memory cells produced.
}}}
===
#For other diseases, such as the common cold, we do not see the same immunity phenomenon: all individuals, not just a few, will have multiple colds in their lifetime. Suggest a possible explanation for this observation. +++*{{keyButton{[answer]}}}...
{{anstxt{
From the point of view of the immune system, a pathogen is "new" if it has an antigen that has not been reacted to by the immune system before, even if it is basically the same pathogen. So, while we certainly do become immune to the various strains of rhinovirus, adenovirus, etc. that cause us to get colds, there are many, many strains of these viruses and a strain we haven't seen before can be antigenically different enough to appear like a different pathogen to the immune system.
}}}
===
#Suppose an individual is born with a genetic defect that prevents his cells from producing functional CD8 protein. What specific class of cells would be affected by this defect? Would this person have more difficulty fighting off bacterial diseases or viral diseases? Explain. +++*{{keyButton{[answer]}}}...
{{anstxt{
CD8 is the protein on the surface of cytotoxic T cells that allows them to interact with MHC class I on the surface of a cell infected by a virus or other invasive pathogen and become activated if they are specific for the antigen being displayed. A defect in this protein would mean that the cytotoxic T cells can't become activated, so there would be essentially no cell-mediated adaptive immune response. This would hamper the person's ability to respond to viral diseases (always invasive) than bacterial diseases (only a minority of bacterial pathogens actually invade cells).
}}}
===
#Which body cells can serve as antigen-presenting cells? Why are antigen-presenting cells important in the activation of the adaptive immune response? +++*{{keyButton{[answer]}}}...
{{anstxt{
Macrophages present antigen bound to MHC class II (to activate helper T cells), as do B cells that have encountered their matching antigen (to interact with the activated helper T cells). Additionally, almost any body cell that is infected by a virus or other invasive pathogen so that pathogen proteins are synthesized inside the cell can display antigens on MHC class I, thus serving as an antigen-presenting cell. This process is critical for the immune response, because the B cells and cytotoxic T cells that carry out the immune response don't respond to their antigens in just any form: the antigens must be presented by cells whose job it is to recognize that pathogens are present and sound the alarm.
}}}
===
#An individual can express up to six different MHC class II alleles (three distinct genes, two alleles each). What do you think is the advantage of having multiple copies of the MHC II gene? If a particular individual had only one MHC class II allele, how would that affect his ability to respond to pathogens (be specific!)? +++*{{keyButton{[answer]}}}...
{{anstxt{
MHC proteins have to be able to bind a wide variety of possible antigens/epitopes, including those never before encountered. They do not bind //specific// antigens, but rather are able to bind many different peptides that have the same general pattern of amino acids. Different alleles encode MHC proteins that can bind different sets of antigens/epitopes, so the more different MHC alleles one individual has, the broader the range of antigens s/he can respond to.
}}}
===
!!Additional terms
{{col2{
specificity
memory
antigen receptor
differentiation
primary response
secondary response
}}}
!!Practice problems
*[Dd[Problems|problem sets/adaptive immunity.htm]] from previous exams
*[Dd[Key|problem sets/adaptive immunity key.htm]] for problem set
{{outline{
!!Outline
#The oxygen revolution
#Oxigenic photosynthesis: cyanobacteria
#Oxygen toxicity
##Reactive oxygen species
##Protective enzymes
#Aerobic respiration
#Anaerobic eukaryotes
!!Handouts and class materials
!!Links to more information
*[[Cyanobacteria and the cryptobiotic crust of desert soils|http://helios.bto.ed.ac.uk/bto/microbes/cyano.htm]]
*[[Metabolic diversity of bacteria|http://textbookofbacteriology.net/metabolism.html]] - //note lots of info. on photosynthesis near the bottom//
*[[The importance of photosynthesis|http://photoscience.la.asu.edu/photosyn/study.html]]
*[[Cyanobacteria image gallery|http://www-cyanosite.bio.purdue.edu/images/images.html]]
*[[Bacterial community in a microbial mat from a salt marsh|http://www.rz.uni-frankfurt.de/~schauder/mats/microbial_mats.html]]
*[[Nice summary of aerobic and anaerobic metabolism|http://www.sp.uconn.edu/~terry/229sp03/lectures/catabolism.html]]
}}}
!Objectives
!Outline
!Activities
!Ideas
{{lechelp{
The ''Independent Study'' section is designed to help you __prepare__ for each class session. If you learn the basics //before// you come to class, we can use class time for more sophisticated and active learning. The focused readings, guide questions and list of key terms will help you direct your preparation appropriately. We will //not// go back over these basic ideas during class; you are expected to know them (a quiz could happen at any time!). You can test your ability to apply what you've learned with the application questions, which will often be discussed in class. Application questions will help you see if you can apply what you've learned and will often be discussed in class. You are encouraged to bring your notes to class in case you need them.
}}}
{{lecblurb{
''What about oxygen?'' Clearly, oxygen-dependent metabolism dominates multicellular life today. Where did the oxygen come from, and why is its use so advantageous? What are the trade-offs? This class session will explore the "oxygen revolution" and its consequences.
}}}
!!Focused readings
*Oxygen requirements and detoxifying oxygen: [[The Effect of Oxygen|http://textbookofbacteriology.net/nutgro_4.html]] (just read this section, not the whole page)
{{smalltext{all page numbers below are from //Microbiology: Diversity, Disease and the Environment// by Salyers and Whitt}}}
*The oxygen "revolution:" pp. 24-25
*Photosynthesis by cyanobacteria: p. 464-467 and Figures 22.6 and 22.7
*Aerobic respiration: review pp. 161-170 as needed
!!Guide questions
#What process was responsible for putting significant oxygen into the atmosphere?
#What bacteria were involved in this process?
#How are these bacteria involved in plant photosynthesis?
#Cyanobacteria have two distinct photosystems in their membranes. How does this make their photosynthtic process more efficient than that of the purples and greens?
#What is the electron source for cyanobacteria? What is the product of this reaction?
#How do obligate aerobes and facultative anaerobes use oxygen?
#What three key enzymes do bacteria use to protect themselves from the toxic effects of oxygen?
#How are obligate aerobes, aerotolerant anaerobes and obligate anaerobes different in their use of protective enzymes?
#How is aerobic respiration different from anaerobic respiration?
#What are the advantages of aerobic respiration?
!!Key terms
{{col3{
cyanobacteria
oxigenic photosynthesis
chlorophyll A
photosystem I
photosystem II
aerobic respiration
reactive oxygen species (ROS)
superoxide dismutase
catalase
peroxidase
}}}
!!Application questions
#How is the photosynthesis pathway for cyanobacteria more efficient to that of the purple and green bacteria?
#Plants and cyanobacteria have exactly the same photosynthetic pigment (chlorophyll A). How do you explain this?
<script>
var ctid = story.findContainingTiddler(place).getAttribute("tiddler");
var slideState = store.getValue(ctid,"slides");
if (slideState == "true" ) {
folder = ctid.toLowerCase();
folder = folder.replace(" ","%20");
linkpath = "web%20materials/" + folder + "/slides.pdf";
var slideLink = createTiddlyElement(place,"a",null,"fileLink","click here to download")
slideLink.href = linkpath;
slideLink.onclick = openInNewWindow;
var stext = "<html><br><iframe height = \"600\" width=\"800\" src=\"";
stext += linkpath + "\"></iframe></html>";
wikify(stext,place);
}
else {
wikify("//Slides for this class session have not yet been posted. Please check back later.//",place);
}
</script>
!!Review questions
#You have isolated a heterotrophic organism from a soil sample that makes superoxide dismutase but not catalase. Would you expect to find that this organism obtains energy by fermentation, aerobic respiration, anaerobic respiration or some combination of these? Explain. +++*{{keyButton{[answer]}}}...
{{anstxt{
Catalase is produced by obligate aerobes and facultative anaerobes, but not by obligate and aerotolerant anaerobes that can live only by non-oxygen-requiring metabolic pathways. Most of these bacteria use anaerobic respiration. Fermentation is possible but is more commonly seen as an alternative for the facultative anaerobes.
}}}
===
#Green bacteria, purple bacteria and cyanobacteria are often found growing near each other in microbial mat communities. Oddly, even though they are all photosynthetic, they seem to be able to coexist without competing for resources. Explain how this is possible. +++*{{keyButton{[answer]}}}...
{{anstxt{
The bacteriochlorophylls of the purple and green bacteria absorb light of different wavelengths, and the chlorophyll A of the cyanobacteria absorbs in yet another, different range of wavelengths. Thus, these bacteria can essentially "share" the light.
}}}
===
#You have two bacterial cultures growing in an appropriate defined medium: one contains a photosynthetic green bacterium and the other a photosynthetic cyanobacterium. You use a light meter to ensure that each gets exactly the same dosage of light each day, and their growth media are exactly the same. Which will multiply more rapidly, and why?. +++*{{keyButton{[answer]}}}...
{{anstxt{
We would expect the cyanobacteria to be able to multiply more rapidly. Given the same number of photons and thus the same number of activated electrons, the cyanobacteria can make twice as much ATP and NADPH, because each of the electrons can carry out both functions in this organism. The green bacteria must use each electron //either// to make ATP or NADPH.
}}}
===
#Aerobic respiration requires that an organism also produce oxygen-deoxifying enzymes, which costs energy. Multicellular organisms have had to develop sophisticated ways of getting oxygen from the air, such as gills and lungs—again, there are major costs associated with this machinery. Why would the development off all this extra "stuff" be "worth it," evolutionarily? +++*{{keyButton{[answer]}}}...
{{anstxt{
Because oxygen is much more electronegative than alternative electron acceptors, an electron transport chain driven by oxygen can use a much wider variety of electron donors and carriers and can extract more energy from each electron.
}}}
===
#Overall, the process of glucose oxidation and ATP synthesis by aerobic respiration is more efficient in bacteria than in eukaryotes. Why would this be the case?. +++*{{keyButton{[answer]}}}...
{{anstxt{
In eukaryotes, glycolysis occurs in the cytoplasm, after which in the "transition step," acetyl CoA has to be transported into the mitochondria, where the TCA cycle and electron transport occur. This transport requires energy that the prokaryote is not having to spend.
}}}
===
!!Practice problems
*[Dd[Problems|problem sets/aerobes.htm]] from previous exams
*[Dd[Key|problem sets/aerobes key.htm]] for problem set
{{outline{
!!Outline
#Microbial metabolism
#Anaerobes and anaerobes
#Life on earth
##Conditions on the early earth
##Metabolic responses
#Methanogens
##Archaea
##One-carbon metabolism
##Electron transport
#Anoxigenic photosynthesis
##Purple bacteria
##Green bacteria
#Anaerobic metabolism
##Fermentation
##Anaerobic respiration
!!Handouts and class materials
!!Links to more information
*[[Introduction to the Archaea|http://www.ucmp.berkeley.edu/archaea/archaea.html]]
*[[Methanogens|http://microbewiki.kenyon.edu/index.php/Methanogens]]
*[[Energy generation and bacterial metabolism|http://textbookofbacteriology.net/metabolism.html]]
*[[Anaerobic respiration|http://lecturer.ukdw.ac.id/dhira/Metabolism/RespAnaer.html]]
*[[TCA and respiration|http://www.bact.wisc.edu/microtextbook/Metabolism/Respiration.html]]
*[[Microbial energetics, with animations|http://www.sp.uconn.edu/~terry/229sp03/lectures/catabolism.html]]
*[[Bacterial metabolism and photosynthesis (with movies)|http://www-micro.msb.le.ac.uk/video/photosynthesis.html]]
*[[Purple bacteria and the origins of photosynthesis|http://www.bric.postech.ac.kr/science/97now/00_9now/000907b.html]]
*[[The importance of photosynthesis|http://photoscience.la.asu.edu/photosyn/study.html]]
*[[Bacterial energetics|http://www.sp.uconn.edu/~terry/229sp03/lectures/catabolism.html]]
*[[Great 2D and 3D views of pathways and molecules|http://www.gwu.edu/~mpb/index.html]]
*[[Cool site on metabolic pathways|http://www.genome.ad.jp/kegg/pathway/map/map01100.html]]
*[[Glycolysis and fermentation|http://www.phage.org/biol1095.htm#lactic_acid_fermentation]]
}}}
{{outline{
!Objectives
!Outline
#Anaerobes
##In the body
##In the environment
#Life on earth
##Conditions on the early earth
##Metabolic responses
#Methanogens
##One-carbon metabolism
##Electron transport
#Anoxigenic photosynthesis
##Purple bacteria
##Green bacteria
#Anaerobic metabolism
##Fermentation
##Anaerobic respiration
!Activities
!Ideas
}}}
{{lechelp{
The ''Independent Study'' section is designed to help you __prepare__ for each class session. If you learn the basics //before// you come to class, we can use class time for more sophisticated and active learning. The focused readings, guide questions and list of key terms will help you direct your preparation appropriately. We will //not// go back over these basic ideas during class; you are expected to know them (a quiz could happen at any time!). You can test your ability to apply what you've learned with the application questions, which will often be discussed in class. Application questions will help you see if you can apply what you've learned and will often be discussed in class. You are encouraged to bring your notes to class in case you need them.
}}}
{{lecblurb{
''How can there be life without oxygen?'' It's hard for us to imagine living without oxygen, but in fact a huge number of bacterial species living both in the environment and in our bodies do exactly that—and have been doing so for most of earth's history. This class session will explore
}}}
!!Review of central metabolism
>//@@color: navy;Your text assumes that you already have basic familiarity with the basic processes of central metabolism: glycolysis, the Krebs (or TCA) cycle, electron transport and ATP synthesis by chemiosmosis (oxidative phosphorylation). This should be true, as everyone taking this class has had BIO 102 and most have had cell biology as well. The readings below will help you review and learn more about the energy transfer aspects. If your understanding of central metabolism is fuzzy, this will probably not be enough for you; in that case, sections 9.1 to 9.4 in your Campbell text provide an excellent introduction to get you back up to speed. Please be aware that we will __not__ cover this introductory-level material in detail in class.@@//
{{smalltext{all page numbers below are from //Microbiology: Diversity, Disease and the Environment// by Salyers and Whitt}}}
*Overview of central metabolism in bacteria: pp. 157-163 and Figures 8.1, 8.2, 8.3, 8.4 and 8.5
*Energy transfer in central metabolism: pp. 163-170 and Figures 8.6, 8.7, 8.8 and 8.9
Questions to help you review:
#Polysaccharides are too large and hydrophilic to enter cells directly; what two strategies do heterotrophic bacteria use to break down these large molecules into usable pieces?
#What enzymatic reaction usually occurs at the same time as glucose is being transported into the cell?
#What are the products of glycolysis?
#Glycolysis is the oxidation of glucose. What is meant by //oxidation// in a biological context? In addition to an enzyme and its substrate, what molecule is needed for an oxidation reaction, and what happens to it?
#In glycolysis, ATP is generated by substrate-level phosphorylation. Where does the energy to make ATP from ADP (a highly endergonic reaction) come from in this form of ATP synthesis?
#What important function does glycolysis have in addition to energy generation?
#What two alternative pathways are possible starting from the end of glycolysis?
#At the end of the Krebs (TCA) cycle, where are the six carbon atoms that started out as a glucose molecule?
#What are two important functions of electron transport?
#When ATP is generated following electron transport, where does the energy come from to make ATP from ADP?
!!Focused readings
{{smalltext{all page numbers below are from //Microbiology: Diversity, Disease and the Environment// by Salyers and Whitt}}}
*Metabolic types of microbes: p. 449
*Microbes and the history of life on earth: pp. 22-25 (up to "Mining Diversity") and Figure 2.4
*Methanogens: p. 450 and Figures 21.7 and 21.8
*Photosynthesis by purple and green bacteria: pp. 459-461 (up to "Cultivating Phototrophs"), pp. 462-464, p. 467 and Figures 22.1, 22.3, 22.5, 22.7 and 22.8
*Anaerobic respiration in sulfur reducers: pp. 452-454 ("Sulfate-reducing bacteria") and Figure 21.11
!!Guide questions
#Make a chart in your notes showing the carbon and energy sources for photoautotrophs, photoheterotrophs, heterotrophs and lithotrophs (chemoautotrophs).
#What were some of the conditions on the early earth? How did this influence evolution of metabolism?
#How long did life exist before significant oxygen was present in the atmosphere? What does this tell you about the metabolism of the first microbes?
#A methanogen makes ATP in the process of converting what atmospheric molecule to what other molecule?
#What is the carbon source for a methanogen?
#What would be the metabolic classification for methanogens (chemoheterotroph, photoheterotroph, chemoautotroph, photoautotroph)?
#Some people think the first living cells on earth may have been similar to today's methanogens. What evidence might support this idea?
#What is the light-gathering pigment for purple bacteria?
#How is the electron transport system in photosynthesis similar to the ETS in respiration? How is it different?
#Describe generally how a purple bacterium uses light energy to make ATP.
#Why does the purple bacterium also need to make NADPH?
#How is photosynthesis in the green bacteria more advanced than in the purple bacteria?
#Sulfate reducers are anaerobic heterotrophs that carry out respiration, a process that we normally think of as oxygen-requiring. How can they do respiration without oxygen?
#All organisms that respire other than bacteria and a few protists use oxygen as their terminal electron acceptor. What makes this mechanism so advantageous?
!!Key terms
{{col3{
(//find the first four in the glossary//)
obligate aerobe
obligate anaerobe
facultative anaerobe
aerotolerant anaerobe
metabolism
heterotroph
autotroph
chemotroph
phototroph
(chemo)heterotroph
chemoautotroph (lithotroph)
photoheterotroph
photoautotroph
methanogen
photosynthesis (oxigenic/anoxigenic)
photosystem
bacteriochlorophyll
ubiquinone
BC complex
cytochrome c
cyclic flow
non-cyclic flow
NADPH
NADPH-UQ oxidoreductase
ferredoxin (Fd)
anerobic respiration
electron transport system
proton gradient
ATP synthase
electron donor
electron acceptor
carbon fixation
phosphotransferase (PTS)
facilitated diffusion
oxidation/reduction
endergonic/exergonic
substrate-level phosphorylation
fermentation
}}}
!!Application question
*Put these metabolic pathways in the order you think they evolved: fermentation, anaerobic respiration, aerobic respiration, oxigenic photosynthesis, anoxigenic photosynthesis. Back up your choices with specific evidence.
<script>
var ctid = story.findContainingTiddler(place).getAttribute("tiddler");
var slideState = store.getValue(ctid,"slides");
if (slideState == "true" ) {
folder = ctid.toLowerCase();
folder = folder.replace(" ","%20");
linkpath = "web%20materials/" + folder + "/slides.pdf";
var slideLink = createTiddlyElement(place,"a",null,"fileLink","click here to download")
slideLink.href = linkpath;
slideLink.onclick = openInNewWindow;
var stext = "<html><br><iframe height = \"600\" width=\"800\" src=\"";
stext += linkpath + "\"></iframe></html>";
wikify(stext,place);
}
else {
wikify("//Slides for this class session have not yet been posted. Please check back later.//",place);
}
</script>
!!Review questions
#Some scientists now believe that organisms like modern methanogens were among the first successful living cells. What support for this hypothesis can you find in the metabolism of the methanogens, given the conditions on the early earth? +++*{{keyButton{[answer]}}}...
{{anstxt{
Methanogens can utilize a one-carbon metabolic pathway that doesn't require polysaccharides, sugars or other molecules that would not be available given limited biomass. They require only CO~~2~~ and H~~2~~, both plentiful on the early earth and can utilize them via a relatively simple electron transport pathway.
}}}
===
#Methanogens do not need glycolysis or the TCA cycle in order to make ATP. What is their energy source, and how do they obtain energy in a usable form from this source? +++*{{keyButton{[answer]}}}...
{{anstxt{
Methanogens use H~~2~~ as their energy source; their electron transport system oxidizes H~~2~~ directly, harvesting high-energy electrons that can be used to pump protons.
}}}
===
#How was the type of photosynthesis carried out by the purple and green bacteria appropriate given conditions on the early earth? +++*{{keyButton{[answer]}}}...
{{anstxt{
*Electron source is H~~2~~S, plentiful on the early earth
*Simple cyclic flow pathway, requires minimal modification from simple electron transport
*Anoxigenic
}}}
===
#Why could we say that anoxigenic photosynthesis as carried out by the green bacteria is an improvement over anoxigenic photosynthesis as carried out by the purple bacteria? +++*{{keyButton{[answer]}}}...
{{anstxt{
In the purple bacteria, a separate enzyme is needed to take an electron out of the cyclic flow and use it to make NADPH. In the green bacteria, a single electron carrier, ferredoxin, can transfer its electron either to the bc complex for cyclic flow or to NADP to make NADPH, so the system accomplishes the same goals more efficiently.
}}}
===
#How are sulfate reducers similar to methanogens? How are they different? +++*{{keyButton{[answer]}}}...
{{anstxt{
Like methanogens, sulfate reducers are anaerobes and use an electron transport system to obtain most of the energy from their energy source. However, sulfate reducers are heterotrophs that oxidize carbohydrates to produce NADH like modern aerobes would, with sulfate serving as a final electron acceptor. The methanogens are chemoautotrophs that use electron transport to get energy-rich electrons directly from an inorganic molecule.
}}}
===
#There is no known organism that has a TCA cycle but not an electron transport/ATP synthase system. Why do you think this is true? +++*{{keyButton{[answer]}}}...
{{anstxt{
The TCA cycle required many enzymes in addition to those used in glycolysis, yet it generates only 2 ATP: not enough energy gain to be worth the energy cost of the additional components. Furthermore, it produces many NADH and FADH~~2~~ and so would require some system for re-oxidizing them that wouldn't yield any additional energy.
}}}
===
#Suppose you isolated an organism from your throat-swab that one of the throat-swab organisms you tested was negative in the glucose fermentation test. You assumed this meant it could not do fermentation and lived only by aerobic respiration, but upon further testing, you found that it could actually grow in either the presence or absence of oxygen. How do you think it is able to obtain energy in the absence of oxygen? +++*{{keyButton{[answer]}}}...
{{anstxt{
This organism must be doing anaerobic respiration, using electron transport and chemiosmosis but with a final electron acceptor other than oxygen.
}}}
===
#When we talk about the food chain in 100-level biology courses, we say that there must be plants or other photosynthetic "producers" at the bottom to support "consumers" farther up the chain. Now that you know more, could you imagine a food chain with no photosynthesis? +++*{{keyButton{[answer]}}}...
{{anstxt{
Chemoautotrophs do not carry out photosynthesis yet can obtain energy from simple inorganic molecules. Although most chemoautotrophs do not grow fast, they could nonetheless be the basis of a food chain which would not require any photosynthesis. It's likely that such food chains actually exist in some parts of the earth, such as some isolated deep-ocean communities.
}}}
===
#Organisms A and B can both grow on glucose as a carbon and energy source. Organism A makes glucose 6-phosphate using the phosphotransferase (PTS) system. Organism B lacks the phosphotransferase system but has a cytoplasmic enzyme that phosphorylates glucose to make glucose 6-phosphate. Assuming that they are otherwise similar organisms, which one would you expect to have a shorter generation time when grown on glucose-containing media, and why? +++*{{keyButton{[answer]}}}...
{{anstxt{
Using facilitated transport, Organism B would only be able to move glucose into the cell until its concentration in the cytoplasm equals the concentration outside; it would particularly have difficulty scavenging glucose when it is in low concentration. Organism A could continue to take up glucose as long as there is //any// outside, since it is phosphorylated during transport so that there is never any free glucose in the cytoplasm.
}}}
===
#If a bacterial cell needs to oxidize a particular molecule using NAD+ as an electron carrier, what must be true about the relationship of the E~~0~~ values for NAD+ and the molecule to be oxidized? +++*{{keyButton{[answer]}}}...
{{anstxt{
In an oxidation reaction, NAD+ has to essentially be able to "take away" electrons from the molecule being oxidized. That means NAD+ needs to be more electronegative (larger E~~0~~ value) than what it is oxidizing.
}}}
===
!!Practice problems
*[Dd[Problems|problem sets/anaerobes.htm]] from previous exams
*[Dd[Key|problem sets/anaerobes key.htm]] for problem set
!!Handouts and class materials
* [Dd[Roles|web materials/antibiotic issues/group roles.pdf]] for participants in the debate
!Objectives
*Understand the need to take action to reduce and control antibiotic resistance
*Appreciate the economic, political and social complexity of solutions to antibiotic resistance
*Consider some potential solutions
!Activities
*Case study on antibiotic legislation
!Ideas
{{lecblurb{
''What are we going to do about antibiotic resistance'' There is no question that antibiotic resistance is one of the key medical problems of our day, and we as scientists and educated people have a responsibility to contribute to solutions. This class session will lead you to think about possible solutions to the problem and about the complexities of getting these solutions implemented.
}}}
!!Class preparation
{{box{
In this class session, we will stage a debate over legislation designed to reduce antibiotic overuse. We will imagine that a member of the Illinois State Legislature has introduced a bill to restrict agricultural use of antibiotics, and that we are at a hearing to discuss that legislation. Groups of class members will be given specific roles and will be expected to defend their positions for or against the legislation. You are expected to come to class having thoroughly read and understood the proposed legislation and the additional short essay below. You should be prepared to talk about the scientific, economic, health, political and other issues surrounding this controversial topic.}}}
*[[Proposed legislation|Case study: antibiotic legislation]]
*Essay: [Dd[Tackling Antibiotic Resistance|web materials/antibiotic issues/Bush2011.pdf]] - this article was developed from the recommendations of a group of 30 scientists who met in 2011 to discuss potential solutions to the global problem of antibiotic resistance.
!!Some questions to think about
#Why is subtherapeutic use of antibiotics a concern from a scientific or medical standpoint?
#Why is subtherapeutic use of antibiotics desirable from an agricultural or economic standpoint?
#Who stands to gain or lose from legislation banning subtherapeutic agricultural use of antibiotics?
#Is agricultural use of antibiotics really the major area of concern in terms of antibiotic resistance, or is it just one area that has gotten media attention when other areas might be equally deserving of legislative efforts?
#What effect would a ban on subtherapeutic agricultural antibiotics have on the price of food? On the cost of health care?
#Would this ban really resolve the problems in a significant way, or will it just delay the inevitable rise of resistance?
!!Helpful articles (optional)
*Salyers, A. A., A. Gupta, and Y. Wang. 2004. Human intestinal bacteria as reservoirs for antibiotic resistance genes. [[Trends Microbiol. 12:412|https://login.libproxy.noctrl.edu/login?url=http://www.sciencedirect.com/science?_ob=MImg&_imagekey=B6TD0-4CXMTPG-1-5&_cdi=5184&_user=2389059&_orig=browse&_coverDate=09%2F01%2F2004&_sk=999879990&view=c&wchp=dGLbVtb-zSkzk&md5=3ae5e53567814b2f7fa2978dae1e918d&ie=/sdarticle.pdf]]. {{smalltext{Review of an important research study done by the author of your textbook to examine experimentally whether agricultural organisms have transferred resistance to human pathogens}}}
*Dixon, B. 2000. Antibiotics as growth promoters: risks and alternatives. [[ASM News 66:264-265|http://newsarchive.asm.org/may00/animalcule.asp]]. {{smalltext{Opinion on limiting antibiotic use in animals from a former president of the American Society for Microbiology}}}
*Falkow, S., and D. Kennedy. 2001. Antibiotics, animals, and people—again! [[Science 291:397|http://www.sciencemag.org/cgi/content/summary/291/5503/397?maxtoshow=&HITS=10&hits=10&RESULTFORMAT=&fulltext=falkow+AND+animals+AND+antibiotics&searchid=1&FIRSTINDEX=0&resourcetype=HWCIT]]. {{smalltext{Opinion on the FDA's reversal of its decision to allow one animal antibiotic. Free to registered users, or get it using NCC's subscription via the library Web site.}}}
*Byrd, D. M., L. A. Cox, and J. D. Wilson. 2001. Tracking antibiotics up the food chain. [[Science 291:2550|http://www.sciencemag.org/cgi/content/full/sci;291/5513/2550a]]. {{smalltext{Rebuttal of the above opinion, with response from Falkow and Kennedy. Free to registered users, or get it using NCC's subscription via the library Web site.}}}
*Phillips, I., M. Casewell1, T. Cox, B. De Groot, C. Friis, R. Jones, C. Nightingale, R. Preston, and J. Waddell. 2004. Does the use of antibiotics in food animals pose a risk to human health? A critical review of published data. [[J. Antimicrob. Chemother. 53:28-52|http://jac.oxfordjournals.org/cgi/reprint/53/1/28]] {{smalltext{Lengthy but thorough discussion of the importance of agricultural antibiotics, based on published literature. You may want to just skim this paper for evidence that you think is important to have in your notes.}}}
*D. L. Smith, J. Dushoff, J. G. Morris. 2005. Agricultural antibiotics and human health: Does antibiotic use in agriculture have a greater impact than hospital use? [[PLoS Medicine 2:e232|http://medicine.plosjournals.org/archive/1549-1676/2/8/pdf/10.1371_journal.pmed.0020232-L.pdf]] {{smalltext{Review of the problem of agricultural antibiotics and some informative cases.}}}
*Wegener, H. C. 2003. Antibiotics in animal feed and their role in resistance development. [[Curr. Opin. Microbiol. 6:439-445|https://login.libproxy.noctrl.edu/login?url=http://www.sciencedirect.com/science?_ob=MImg&_imagekey=B6VS2-49JPTXD-2-5&_cdi=6250&_user=2389059&_orig=na&_coverDate=10%2F31%2F2003&_sk=999939994&view=c&wchp=dGLbVzz-zSkWz&md5=6038ae644eea747fdce37bb3e9476f95&ie=/sdarticle.pdf]]. {{smalltext{Review of data on the effect of curbing animal antibiotics; supports the conclusion that this will reduce resistance but questions whether that actually impacts human health.}}}
!!Links to additional information (optional)
*[[Introduction|http://www.serconline.org/antibiotics/index.html]] to the problem of agricultural antibiotics
*"[[Talking points|http://www.serconline.org/antibiotics/talking.html]]" in support of the proposed legislation
*[[Fact sheet|http://www.serconline.org/antibiotics/fact.html]] giving more background information
*[[Links|http://www.serconline.org/antibiotics/press.html]] to many more articles and reports
*[[Campaign to Keep Antibiotics Working|http://www.keepantibioticsworking.com]]
*[[Alliance for the Prudent Use of Antibiotics|http://www.tufts.edu/med/apua/]]
*[[CDC booklet on antibiotic resistance|http://www.cdc.gov/ncidod/emergplan/antiresist/antimicrobial.pdf]]
*[[Emerging antibiotic resistance (Amer. Coll. of Physicians)|http://www.acponline.org/ear/index.html]]
*[[Protecting the crown jewels|http://www.cspinet.org/reports/abiotic.htm]]
*[[Antibiotics and usage guidelines|http://www.intmed.mcw.edu/AntibioticGuide.html]]
*[[FDA antibiotic resistance resources|http://fsrio.nal.usda.gov/document_reslist.php?product_id=71]]
*[[Antimicrobial resistance information bank|http://rhone.b3e.jussieu.fr/arinfobank/]]
*[[CDC links to more resistance info.|http://www.cdc.gov/drugresistance/links.htm]]
<script>
var ctid = story.findContainingTiddler(place).getAttribute("tiddler");
var slideState = store.getValue(ctid,"slides");
if (slideState == "true" ) {
folder = ctid.toLowerCase();
folder = folder.replace(" ","%20");
linkpath = "web%20materials/" + folder + "/slides.pdf";
var slideLink = createTiddlyElement(place,"a",null,"fileLink","click here to download")
slideLink.href = linkpath;
slideLink.onclick = openInNewWindow;
var stext = "<html><br><iframe height = \"600\" width=\"800\" src=\"";
stext += linkpath + "\"></iframe></html>";
wikify(stext,place);
}
else {
wikify("//Slides for this class session have not yet been posted. Please check back later.//",place);
}
</script>
!!Review questions
#What is the //scientific// basis for arguing that non-therapeutic (or sub-therapeutic) agricultural use of antibiotics should be banned, limited or regulated?
#What //evidence// would you cite in support of this scientific argument?
#Give two good arguments against such restrictions on agricultural antibiotics.
#The mock legislation we used in class proposed to ban agricultural use only of antibiotics that are also used therapeutically in humans (and their close relatives). This is seen by some as somewhat of a compromise: antibiotics that are not important for human therapy could continue to be used in animal feed, reducing the economic burden of the legislation, but the biggest concerns for human health would be alleviated. Give at least two specific reasons why this limited ban might turn out to be much less effective than an outright ban.
#Do you think the precautionary principle applies to this issue?
!!Additional terms
{{col2{
precautionary principle
}}}
{{outline{
!!Outline
#Antibiotics: the "miracle drugs"
##Importance of antibiotics
##Discovery of penicillin
#Mechanism of action and selective toxicity
##Penicillin and the bacterial cell wall
##Vancomycin
##Bacitracin
##Tetracycline, chloramphenicol and the ribosome
#Measuring antibiotic effectiveness
!!Handouts and class materials
*[Dd[Group problem|web materials/antibiotics/group problem.pdf]] on penicillin and the cell wall
!!Links to more information
*[[Cell wall illustrations and EMs|http://www.uct.ac.za/depts/mmi/lsteyn/cellwall.html]]
*[[Structure of peptidoglycan and the cell wall|http://www.bact.wisc.edu/Microtextbook/modules.php?op=modload&name=Sections&file=index&req=viewarticle&artid=35&page=1]]
*[[Antibiotics that affect the cell wall|http://rossmed.drbuschman.com/notes/semesterfour/cellwall.htm]]
*[[3D Models of prokaryotic & eukaryotic cells|http://www.cellsalive.com/cells/3dcell.htm]]
*[[Bacterial cell structure and function|http://www.liunet.edu/cwis/bklyn/acadres/facdev/FacultyProjects/WebClass/micro-web/html-files/chapterA-1.html]]
}}}
!!!Homework: mass of earth problem
How long for one //E. coli// cell's descendants to equal the mass of the earth?
>Mass of earth = 6 × 10^^24^^ kg = 6×10^^27^^ g
>Mass of //E. coli// = 9.5×10^^-13^^ g, so no. of E. coli to equal mass of earth = 6.3 x 10^^39^^ cells
>b = B x 2^^n^^, so 6.3×10^^39^^ = 2^^n^^
>n = log~~2~~(6.3×10^^39^^)
>n = log~~10~~(6.3 x 10^^39^^) / log~~10~~(2)
>n = 39.8 / 0.3 = 132 generations
>g = 20 min, so 3 generations/hour; 132 / 3 = 44 hours
!!!Antibiotics: miracle drugs
Imagine a time when getting cut on a piece of broken glass could be fatal. When the treatment for a badly infected foot was to cut off your leg at the knee so the infection couldn't spread. When diphtheria and whooping cough were dreaded diseases that might well kill your children. When the worst thing that could happen to you was that you needed surgery—because it was then so likely you'd die of an infection. This day is not long ago: your grandparents certainly remember it.
In 1942, {{slide{Ann Miller}}} was dying of "blood poisoning" (@@sepsis@@) resulting from an infection following a miscarriage
*4 weeks of 103-106° fever, transfusions, surgery and the new sulfa drugs all failed to stop her //Streptococcus// infection
*Dr. John Bumstead of Yale had a conversation with Dr. John Fulton, also in the hospital, who knew Howard Florey
*Florey was an Oxford scientist who had learned how to make enough penicillin to be medically useful; he had come to the US in 1941 to persuade U.S. drug companies to work on penicillin, due to the devastation of WWII in Britain
*Fulton also knew the chairman of the federal Committee on Chemotherapy, and persuaded him to authorize Merck to release 5.5 g of penicillin (half the entire amount in the US)
*Filtered and administered a small dose; when there was no negative reaction in 4 hrs., a larger dose was administered. Within 9 hours, Ann's fever was down to 100 degrees; in 18 hours, it was normal and she was able to eat.
*Ann Miller died in 1999 at the age of 90.
This "miracle drug," penicillin became the first commercially available antibiotic just in time for World War II, and World War II consequently became the first war in which more soldiers died from bullets and bombs than from infection.
Back in the mid-1800s, {{slide{Louis Pasteur and Robert Koch}}} had advanced the @@germ theory of disease@@: the idea that diseases result from microbes.
*Koch had isolated specific bacteria that he had shown were the causes of anthrax, gonorrhea, pneumonia, typhoid, abscesses, cholera, tuberculosis, diphtheria, tetanus, meningitis and plague.
*Pasteur {{slide{quote}}}: "It is now in the power of man to cause all parasitic diseases to disappear from the world."
*Chemists and biologists had been looking since then for treatments that could kill disease-causing bacteria.
*{{slide{Joseph Lister}}} advocated spraying carbolic acid (phenol) before and during surgery and applying it to wounds to prevent infection. But, ''what was the problem with using an antiseptic like phenol to control a bacterial disease, or an infection that had already gotten started?''
*{{slide{Phenol}}} is not selectively toxic—it kills our cells just as well as it kills bacterial cells. In fact, chemicals that kill bacteria are easy to find, but selectively toxic ones are not. And, until the mid 20th century, most antibacterial drugs were at best marginally selective, the exception being the new sulfa drugs.
*''How did Alexander Fleming discover penicillin?'' This idea, that microorganisms could make selectively toxic antibacterial drugs for us, revolutionized the pharmaceutical industry.
*Why is penicillin selectively toxic?
!!!Structure and synthesis of the cell wall
*''What part of the cell envelope is affected by penicillin?''
*''What is the function of peptidoglycan?''
*''What does peptidoglycan look like?'' (slides: {{slide{peptidoglycan structure}}} and {{slide{3D structure}}})
**Surprisingly, the 3D structure of this well-known molecule is only now coming to light
*Lysozyme attacks peptidoglycan directly (enzymatically); penicillin blocks synthesis: ''How is peptidoglycan synthesized?'' ({{slide{slides}}})
**synthesis of NAG and NAM in cytoplasm
**5-amino-acid peptide added to NAM (structure specific to bacterial families; note D-amino acids)
**NAG is added by enzymes on inside of membrane (note that this is more current info. than your text has)
**NAG-NAM unit transported through membrane by amphipathic lipid bactoprenol
**subunit added to growing chain by enzymes on outer surface of membrane
**cross-linked by PBP; essential for rigidity: recognizes 2 D-Ala, cleaves off one, joins remaining D-Ala to DAP of adjacent chain
**{{slide{animation}}}
!!!Pencillin mechanism of action
*Penicillin inhibits PBPs {{slide{animation}}}
*β-lactam antibiotic: β-lactam ring mimics 2 D-Ala, binds to active site (''What kind of inhibition is this?'')
*At high-enough concentration of penicillin, all PBPs are inactive
*''How does penicillin actually kill the cell?''
**Primarily kills growing cells: lysis when new peptidoglycan can't cross-link {{slide{Penicillin movie}}}
**Improperly linked peptidoglycan also triggers autolysins
{{box{
[Dd[Group problem|course materials/antibiotics/group problem.pdf]]: Will penicillin be more effective against a Gram-positive or a Gram-negative cell?
//(Need to talk about permeability and porins here)//
}}}
*Penicillin derivatives and other β-lactam antibiotics all work the same way but have different characteristics
*Vancomycin also blocks cell-wall synthesis but by binding directly to the two D-Ala
**harder to develop resistance; "last-resort" antibiotic
*Bacitracin blocks transport of the NAG-NAM subunits out of the cell; ''what cell component would it inhibit?''
**Too toxic for internal use; a topical antibiotic
!!!Antibiotics that bind the ribosome
*Chloramphenicol, discovered by a team including NCC alum Mildred Rebstock
**Binds large subunit of 70S ribosome, inhibits peptidyl transferase
**''Why is it selectively toxic?''
**''What would be the result of this activity?''
**Chloramphenicol is @@bacteriostatic@@, not @@bactericidal@@
*Tetracycline binds 16S rRNA of 70S ribosome; prevents tRNA binding in A site
!!!Measuring antibiotic effectiveness
*''How do we know whether an antibiotic is effective against a particular bacterium at a particular dose?''
*Sensitivity testing
*MIC/MBC
!Objectives
*Appreciate the importance of antibiotics in treating infectious disease
*Recognize selective toxicity as the key requirement for a chemotherapeutic agent
*Understand how the peptidoglycan cell wall is synthesized and how penicillin blocks synthesis
*Know some major classes of antibiotics and their mechanisms of action
!Outline
#Antibiotics: the "miracle drugs"
##Importance of antibiotics
##Discovery of penicillin
#Mechanism of action and selective toxicity
##Penicillin and the bacterial cell wall
##Vancomycin
##Bacitracin
##Tetracycline, chloramphenicol and the ribosome
#Measuring antibiotic effectiveness
!Activities
*[Dd[Group problem|course materials/antibiotics/group problem.pdf]] on penicillin on Gram-positive vs. Gram-negative cells
!Ideas
*Modify the group problem to include "how would you test your hypothesis," then move the discussion of MIC and sensitivity testing to the follow-up on the group problem
{{lechelp{
The ''Independent Study'' section is designed to help you __prepare__ for each class session. If you learn the basics //before// you come to class, we can use class time for more sophisticated and active learning. The focused readings, guide questions and list of key terms will help you direct your preparation appropriately. We will //not// go back over these basic ideas during class; you are expected to know them (a quiz could happen at any time!). You can test your ability to apply what you've learned with the application questions, which will often be discussed in class. Application questions will help you see if you can apply what you've learned and will often be discussed in class. You are encouraged to bring your notes to class in case you need them.
}}}
{{lecblurb{
''How can we control the growth of disease-causing bacteria __inside__ the human body?'' For thousands of years, bacterial diseases were a major cause of human death—and often the source of great fear, when diseases like the Black Death (bubonic plague) reached epidemic proportion. Today, most bacterial diseases can be cured with a simple course of antibiotic therapy. What are these "miracle drugs," and how can they be both highly effective and extremely safe? And, are they truly the cure-all they seem to be??
}}}
!!Focused readings
{{smalltext{all page numbers below are from //Microbiology: Diversity, Disease and the Environment// by Salyers and Whitt}}}
*Bacterial cell walls: pp. 55-59 ("The Bacterial Cell Wall" and "The Cell Surface of Archaea") and Figures 4.7-4.9
*Penicillin and the Cell Wall: pp. 61-63 ("The Synthesis of Peptidoglycan") and Figures 4.11 and 4.12
*Antibiotics and Translation: p. 118 ("Antibiotics that Inhibit Translation") and Figure 6.18
*Antibiotic Sensitivity: pp. 308-309 ("Measuring Susceptibility of Bacteria to Antibiotics") and Figures 15.7 and 15.8
!!Guide questions
#What two major groups can bacteria be divided into? Sketch the cell wall structure of these two major groups.
#How do archaea differ from bacteria in cell wall structure?
#Make a simplified sketch of the structure of peptidoglycan, showing NAG, NAM and the peptide crosslinks.
#List the five major events in the synthesis of peptidoglycan.
#How does penicillin block peptidoglycan synthesis?
#Why does penicillin result in the death of the cell?
#Why doesn't penicillin harm human cells?
#How does vancomycin block peptidoglycan synthesis?
#How can binding of an antibiotic to ribosomes inhibit bacterial growth?
#Do you expect ribosome-binding antibiotics to be bactericidal or bacteriostatic?
#In your own words, what does the MIC of an antibiotic represent?
#How is the MIC related to the dose of an antibiotic that a physician would want to give a patient?
!!Outside reading
{{smalltext{Please keep in mind that outside readings are __not__ optional in this class and will be an integral part of class discussions!}}}
*Alexander Fleming's 1945 [Dd[Nobel prize lecture|web materials\antibiotics\Alexander Fleming Nobel lecture 1945.pdf]]
#Describe briefly how Fleming discovered penicillin.
#Why did Fleming think penicillin was more promising than lysozyme, another antibacterial agent he had discovered previously?
#Agents that kill bacteria are actually very easy to find. But, what major problem with most of them is illustrated by Fleming's Fig. 6? What happened when a similar experiment was done with penicillin?
#What danger does Fleming predict at the end of his talk? Did this prediction turn out to be valid?
!!Key terms
{{col3{
Gram-positive
Gram-negative
lipopolysaccharide (LPS)
teichoic acid
peptidoglycan
NAG, NAM
peptide bridge
cross-linking
resistant
susceptible
chemotherapeutic agent
antibiotic
selective toxicity
penicillin
lysis
broad-spectrum antibiotic
narrow-spectrum antibiotic
}}}
!!Application question
*Would penicillin be more effective in killing a culture of //E. coli// (a Gram-negative bacterium) or //Staphylococcus aureus// (a Gram-positive bacterium)? Why?
<script>
var ctid = story.findContainingTiddler(place).getAttribute("tiddler");
var slideState = store.getValue(ctid,"slides");
if (slideState == "true" ) {
folder = ctid.toLowerCase();
folder = folder.replace(" ","%20");
linkpath = "web%20materials/" + folder + "/slides.pdf";
var slideLink = createTiddlyElement(place,"a",null,"fileLink","click here to download")
slideLink.href = linkpath;
slideLink.onclick = openInNewWindow;
var stext = "<html><br><iframe height = \"600\" width=\"800\" src=\"";
stext += linkpath + "\"></iframe></html>";
wikify(stext,place);
}
else {
wikify("//Slides for this class session have not yet been posted. Please check back later.//",place);
}
</script>
!!Review questions
#A researcher investigating the possibility of combining antibiotics to fight aggressive infections obtains some surprising results. When killing of a particular Gram-positive organism by penicillin is compared to killing by a combination of penicillin and tetracycline, penicillin __alone__ is shown to be //more// effective than the combination. Why is this true? +++*{{keyButton{[answer]}}}...
{{anstxt{
Penicillin is a bactericidal antibiotic that primarily kills growing cells, because they lyse when they are unable to synthesize new peptidoglycan cross-links. Tetracycline is a bacteriostatic antibiotic that halts growth of bacteria but does not kill them. Halting growth with tetracycline doesn't kill the cell, and because it's not growing, penicillin now can't kill it effectively, so fewer cells will be killed.
}}}
===
#Why were antibiotics thought of as "miracle drugs" when they first became commercially available? +++*{{keyButton{[answer]}}}...
{{anstxt{
Prior to this time, there were very few drugs that could be used to control a bacterial infection, and those that were available were not very selectively toxic (often causing as many problems as they cured). Penicillin and the antibiotics that followed it allowed previously incurable diseases to be cured with minimal or no side-effects.
}}}
===
#How is the action of lysozyme (also discovered by Fleming) different from the action of penicillin? +++*{{keyButton{[answer]}}}...
{{anstxt{
Lysozyme is an enzyme that breaks down penicillin after synthesis. Penicillin is a small molecule that blocks peptidoglycan //synthesis// by inactivating the PBP enzyme necessary to cross-link it.
}}}
===
#Why does penicillin kill growing cells best? +++*{{keyButton{[answer]}}}...
{{anstxt{
These are the cells that are actively making new peptidoglycan—remember that penicillin works on peptidoglycan //synthesis//, not on existing peptidoglycan.
}}}
===
#After the discovery of penicillin, why did researchers want to continue to develop modified penicillins and additional β-lactam antibiotics? +++*{{keyButton{[answer]}}}...
{{anstxt{
Modified and related antibiotics often behave differently: some are more broad (ampicillin) or narrow (penicillin G) in their spectrum of activity, some can be absorbed if taken orally (amoxicillin) while others have to be injected (penicillin G), some can be used to overcome resistance (cephalosporins) or allergies (monobactams), etc.
}}}
===
#Would you expect bacitracin to be a bactericidal or bacteriostatic drug? +++*{{keyButton{[answer]}}}...
{{anstxt{
Like penicillin, it inhibits cell wall synthesis, so like penicillin it will probably lead to lysis of growing cells: bactericidal.
}}}
===
#Why can an antiseptic be used even though it is typically far less selectively toxic than an antibiotic? +++*{{keyButton{[answer]}}}...
{{anstxt{
An antiseptic is only used topically, such as ethanol or peroxide to kill bacteria in a wound. Although it probably does kill some of our cells, it has limited contact with anything but the skin (which has a protective layer of dead cells and keratin) and so is unlikely to do any significant damage there. If it were taken internally, it could be disastrous.
}}}
===
!!Additional terms
{{col2{
germ theory of disease
sepsis
cell envelope
bactoprenol
autolysin
β-lactam antibiotic
cephalosporins
monobactams
MIC
MBC
}}}
!!Practice problems
*[Dd[Problems|problem sets/antibiotics.htm]] from previous exams
*[Dd[Key|problem sets/antibiotics key.htm]] for problem set
text/plain
.txt .text .js .vbs .asp .cgi .pl
----
text/html
.htm .html .hta .htx .mht
----
text/comma-separated-values
.csv
----
text/javascript
.js
----
text/css
.css
----
text/xml
.xml .xsl .xslt
----
image/gif
.gif
----
image/jpeg
.jpg .jpe .jpeg
----
image/png
.png
----
image/bmp
.bmp
----
image/tiff
.tif .tiff
----
audio/basic
.au .snd
----
audio/wav
.wav
----
audio/x-pn-realaudio
.ra .rm .ram
----
audio/x-midi
.mid .midi
----
audio/mp3
.mp3
----
audio/m3u
.m3u
----
video/x-ms-asf
.asf
----
video/avi
.avi
----
video/mpeg
.mpg .mpeg
----
video/quicktime
.qt .mov .qtvr
----
application/pdf
.pdf
----
application/rtf
.rtf
----
application/postscript
.ai .eps .ps
----
application/wordperfect
.wpd
----
application/mswrite
.wri
----
application/msexcel
.xls .xls3 .xls4 .xls5 .xlw
----
application/msword
.doc
----
application/mspowerpoint
.ppt .pps
----
application/x-director
.swa
----
application/x-shockwave-flash
.swf
----
application/x-zip-compressed
.zip
----
application/x-gzip
.gz
----
application/x-rar-compressed
.rar
----
application/octet-stream
.com .exe .dll .ocx
----
application/java-archive
.jar
/***
|Name|AttachFilePlugin|
|Source|http://www.TiddlyTools.com/#AttachFilePlugin|
|Documentation|http://www.TiddlyTools.com/#AttachFilePluginInfo|
|Version|4.0.0|
|Author|Eric Shulman|
|License|http://www.TiddlyTools.com/#LegalStatements|
|~CoreVersion|2.1|
|Type|plugin|
|Requires|AttachFilePluginFormatters, AttachFileMIMETypes|
|Description|Store binary files as base64-encoded tiddlers with fallback links for separate local and/or remote file storage|
Store or link binary files (such as jpg, gif, pdf or even mp3) within your TiddlyWiki document and then use them as images or links from within your tiddler content.
> Important note: As of version 3.6.0, in order to //render// images and other binary attachments created with this plugin, you must also install [[AttachFilePluginFormatters]], which extends the behavior of the TiddlyWiki core formatters for embedded images ({{{[img[tooltip|image]]}}}), linked embedded images ({{{[img[tooltip|image][link]]}}}), and external/"pretty" links ({{{[[label|link]]}}}), so that these formatter will process references to attachment tiddlers as if a normal file reference had been provided. |
!!!!!Documentation
>see [[AttachFilePluginInfo]]
!!!!!Inline interface (live)
>see [[AttachFile]] (shadow tiddler)
><<tiddler AttachFile>>
!!!!!Revisions
<<<
2009.06.04 [4.0.0] changed attachment storage format to use //sections// instead of embedded substring markers.
|please see [[AttachFilePluginInfo]] for additional revision details|
2005.07.20 [1.0.0] Initial Release
<<<
!!!!!Code
***/
// // version
//{{{
version.extensions.AttachFilePlugin= {major: 4, minor: 0, revision: 0, date: new Date(2009,6,4)};
// shadow tiddler
config.shadowTiddlers.AttachFile="<<attach inline>>";
// add 'attach' backstage task (insert before built-in 'importTask')
if (config.tasks) { // for TW2.2b or above
config.tasks.attachTask = {
text: "attach",
tooltip: "Attach a binary file as a tiddler",
content: "<<attach inline>>"
}
config.backstageTasks.splice(config.backstageTasks.indexOf("importTask"),0,"attachTask");
}
config.macros.attach = {
// // lingo
//{{{
label: "attach file",
tooltip: "Attach a file to this document",
linkTooltip: "Attachment: ",
typeList: "AttachFileMIMETypes",
titlePrompt: " enter tiddler title...",
MIMEPrompt: "<option value=''>select MIME type...</option><option value='editlist'>[edit list...]</option>",
localPrompt: " enter local path/filename...",
URLPrompt: " enter remote URL...",
tiddlerErr: "Please enter a tiddler title",
sourceErr: "Please enter a source path/filename",
storageErr: "Please select a storage method: embedded, local or remote",
MIMEErr: "Unrecognized file format. Please select a MIME type",
localErr: "Please enter a local path/filename",
URLErr: "Please enter a remote URL",
fileErr: "Invalid path/file or file not found",
tiddlerFormat: '!usage\n{{{%0}}}\n%0\n!notes\n%1\n!type\n%2\n!file\n%3\n!url\n%4\n!data\n%5\n',
//}}}
// // macro definition
//{{{
handler:
function(place,macroName,params) {
if (params && !params[0])
{ createTiddlyButton(place,this.label,this.tooltip,this.toggleAttachPanel); return; }
var id=params.shift();
this.createAttachPanel(place,id+"_attachPanel",params);
document.getElementById(id+"_attachPanel").style.position="static";
document.getElementById(id+"_attachPanel").style.display="block";
},
//}}}
//{{{
createAttachPanel:
function(place,panel_id,params) {
if (!panel_id || !panel_id.length) var panel_id="_attachPanel";
// remove existing panel (if any)
var panel=document.getElementById(panel_id); if (panel) panel.parentNode.removeChild(panel);
// set styles for this panel
setStylesheet(this.css,"attachPanel");
// create new panel
var title=""; if (params && params[0]) title=params.shift();
var types=this.MIMEPrompt+this.formatListOptions(store.getTiddlerText(this.typeList)); // get MIME types
panel=createTiddlyElement(place,"span",panel_id,"attachPanel",null);
var html=this.html.replace(/%id%/g,panel_id);
html=html.replace(/%title%/g,title);
html=html.replace(/%disabled%/g,title.length?"disabled":"");
html=html.replace(/%IEdisabled%/g,config.browser.isIE?"disabled":"");
html=html.replace(/%types%/g,types);
panel.innerHTML=html;
if (config.browser.isGecko) { // FF3 FIXUP
document.getElementById("attachSource").style.display="none";
document.getElementById("attachFixPanel").style.display="block";
}
return panel;
},
//}}}
//{{{
toggleAttachPanel:
function (e) {
if (!e) var e = window.event;
var parent=resolveTarget(e).parentNode;
var panel = document.getElementById("_attachPanel");
if (panel==undefined || panel.parentNode!=parent)
panel=config.macros.attach.createAttachPanel(parent,"_attachPanel");
var isOpen = panel.style.display=="block";
if(config.options.chkAnimate)
anim.startAnimating(new Slider(panel,!isOpen,e.shiftKey || e.altKey,"none"));
else
panel.style.display = isOpen ? "none" : "block" ;
e.cancelBubble = true;
if (e.stopPropagation) e.stopPropagation();
return(false);
},
//}}}
//{{{
formatListOptions:
function(text) {
if (!text || !text.trim().length) return "";
// get MIME list content from text
var parts=text.split("\n----\n");
var out="";
for (var p=0; p<parts.length; p++) {
var lines=parts[p].split("\n");
var label=lines.shift(); // 1st line=display text
var value=lines.shift(); // 2nd line=item value
out +='<option value="%1">%0</option>'.format([label,value]);
}
return out;
},
//}}}
// // interface definition
//{{{
css:
".attachPanel { display: none; position:absolute; z-index:10; width:35em; right:105%; top:0em;\
background-color: #eee; color:#000; font-size: 8pt; line-height:110%;\
border:1px solid black; border-bottom-width: 3px; border-right-width: 3px;\
padding: 0.5em; margin:0em; -moz-border-radius:1em;-webkit-border-radius:1em; text-align:left }\
.attachPanel form { display:inline;border:0;padding:0;margin:0; }\
.attachPanel select { width:99%;margin:0px;font-size:8pt;line-height:110%;}\
.attachPanel input { width:98%;padding:0px;margin:0px;font-size:8pt;line-height:110%}\
.attachPanel textarea { width:98%;margin:0px;height:2em;font-size:8pt;line-height:110%}\
.attachPanel table { width:100%;border:0;margin:0;padding:0;color:inherit; }\
.attachPanel tbody, .attachPanel tr, .attachPanel td { border:0;margin:0;padding:0;color:#000; }\
.attachPanel .box { border:1px solid black; padding:.3em; margin:.3em 0px; background:#f8f8f8; \
-moz-border-radius:5px;-webkit-border-radius:5px; }\
.attachPanel .chk { width:auto;border:0; }\
.attachPanel .btn { width:auto; }\
.attachPanel .btn2 { width:49%; }\
",
//}}}
//{{{
html:
'<form>\
attach from source file\
<input type="file" id="attachSource" name="source" size="56"\
onChange="config.macros.attach.onChangeSource(this)">\
<div id="attachFixPanel" style="display:none"><!-- FF3 FIXUP -->\
<input type="text" id="attachFixSource" style="width:90%"\
title="Enter a path/file to attach"\
onChange="config.macros.attach.onChangeSource(this);">\
<input type="button" style="width:7%" value="..."\
title="Enter a path/file to attach"\
onClick="config.macros.attach.askForFilename(document.getElementById(\'attachFixSource\'));">\
</div><!--end FF3 FIXUP-->\
<div class="box">\
<table style="border:0"><tr style="border:0"><td style="border:0;text-align:right;width:1%;white-space:nowrap">\
embed data <input type=checkbox class=chk name="useData" %IEdisabled% \
onclick="if (!this.form.MIMEType.value.length)\
this.form.MIMEType.selectedIndex=this.checked?1:0; "> \
</td><td style="border:0">\
<select size=1 name="MIMEType" \
onchange="this.title=this.value; if (this.value==\'editlist\')\
{ this.selectedIndex=this.form.useData.checked?1:0; story.displayTiddler(null,config.macros.attach.typeList,2); return; }">\
<option value=""></option>\
%types%\
</select>\
</td></tr><tr style="border:0"><td style="border:0;text-align:right;width:1%;white-space:nowrap">\
local link <input type=checkbox class=chk name="useLocal"\
onclick="this.form.local.value=this.form.local.defaultValue=this.checked?config.macros.attach.localPrompt:\'\';"> \
</td><td style="border:0">\
<input type=text name="local" size=15 autocomplete=off value=""\
onchange="this.form.useLocal.checked=this.value.length" \
onkeyup="this.form.useLocal.checked=this.value.length" \
onfocus="if (!this.value.length) this.value=config.macros.attach.localPrompt; this.select()">\
</td></tr><tr style="border:0"><td style="border:0;text-align:right;width:1%;white-space:nowrap">\
remote link <input type=checkbox class=chk name="useURL"\
onclick="this.form.URL.value=this.form.URL.defaultValue=this.checked?config.macros.attach.URLPrompt:\'\';\"> \
</td><td style="border:0">\
<input type=text name="URL" size=15 autocomplete=off value=""\
onfocus="if (!this.value.length) this.value=config.macros.attach.URLPrompt; this.select()"\
onchange="this.form.useURL.checked=this.value.length;"\
onkeyup="this.form.useURL.checked=this.value.length;">\
</td></tr></table>\
</div>\
<table style="border:0"><tr style="border:0"><td style="border:0;text-align:right;vertical-align:top;width:1%;white-space:nowrap">\
notes \
</td><td style="border:0" colspan=2>\
<textarea name="notes" style="width:98%;height:3.5em;margin-bottom:2px"></textarea>\
</td><tr style="border:0"><td style="border:0;text-align:right;width:1%;white-space:nowrap">\
attach as \
</td><td style="border:0" colspan=2>\
<input type=text name="tiddlertitle" size=15 autocomplete=off value="%title%"\
onkeyup="if (!this.value.length) { this.value=config.macros.attach.titlePrompt; this.select(); }"\
onfocus="if (!this.value.length) this.value=config.macros.attach.titlePrompt; this.select()" %disabled%>\
</td></tr></tr><tr style="border:0"><td style="border:0;text-align:right;width:1%;white-space:nowrap">\
add tags \
</td><td style="border:0">\
<input type=text name="tags" size=15 autocomplete=off value="" onfocus="this.select()">\
</td><td style="width:40%;text-align:right;border:0">\
<input type=button class=btn2 value="attach"\
onclick="config.macros.attach.onClickAttach(this)"><!--\
--><input type=button class=btn2 value="close"\
onclick="var panel=document.getElementById(\'%id%\'); if (panel) panel.parentNode.removeChild(panel);">\
</td></tr></table>\
</form>',
//}}}
// // control processing
//{{{
onChangeSource:
function(here) {
var form=here.form;
var list=form.MIMEType;
var theFilename = here.value;
var theExtension = theFilename.substr(theFilename.lastIndexOf('.')).toLowerCase();
// if theFilename is in current document folder, remove path prefix and use relative reference
var h=document.location.href; folder=getLocalPath(decodeURIComponent(h.substr(0,h.lastIndexOf("/")+1)));
if (theFilename.substr(0,folder.length)==folder) theFilename='./'+theFilename.substr(folder.length);
else theFilename='file:///'+theFilename; // otherwise, use absolute reference
theFilename=theFilename.replace(/\\/g,"/"); // fixup: change \ to /
form.useLocal.checked = true;
form.local.value = theFilename;
form.useData.checked = !form.useData.disabled;
list.selectedIndex=1;
for (var i=0; i<list.options.length; i++) // find matching MIME type
if (list.options[i].value.indexOf(theExtension)!=-1) { list.selectedIndex = i; break; }
if (!form.tiddlertitle.disabled)
form.tiddlertitle.value=theFilename.substr(theFilename.lastIndexOf('/')+1); // get tiddlername from filename
},
//}}}
//{{{
onClickAttach:
function (here) {
clearMessage();
// get input values
var form=here.form;
var src=form.source; if (config.browser.isGecko) src=document.getElementById("attachFixSource");
src=src.value!=src.defaultValue?src.value:"";
var when=(new Date()).formatString(config.macros.timeline.dateFormat);
var title=form.tiddlertitle.value;
var local = form.local.value!=form.local.defaultValue?form.local.value:"";
var url = form.URL.value!=form.URL.defaultValue?form.URL.value:"";
var notes = form.notes.value;
var tags = "attachment excludeMissing "+form.tags.value;
var useData=form.useData.checked;
var useLocal=form.useLocal.checked;
var useURL=form.useURL.checked;
var mimetype = form.MIMEType.value.length?form.MIMEType.options[form.MIMEType.selectedIndex].text:"";
// validate checkboxes and get filename
if (useData) {
if (src.length) { if (!theLocation) var theLocation=src; }
else { alert(this.sourceErr); src.focus(); return false; }
}
if (useLocal) {
if (local.length) { if (!theLocation) var theLocation = local; }
else { alert(this.localErr); form.local.focus(); return false; }
}
if (useURL) {
if (url.length) { if (!theLocation) var theLocation = url; }
else { alert(this.URLErr); form.URL.focus(); return false; }
}
if (!(useData||useLocal||useURL))
{ form.useData.focus(); alert(this.storageErr); return false; }
if (!theLocation)
{ src.focus(); alert(this.sourceErr); return false; }
if (!title || !title.trim().length || title==this.titlePrompt)
{ form.tiddlertitle.focus(); alert(this.tiddlerErr); return false; }
// if not already selected, determine MIME type based on filename extension (if any)
if (useData && !mimetype.length && theLocation.lastIndexOf('.')!=-1) {
var theExt = theLocation.substr(theLocation.lastIndexOf('.')).toLowerCase();
var theList=form.MIMEType;
for (var i=0; i<theList.options.length; i++)
if (theList.options[i].value.indexOf(theExt)!=-1)
{ var mimetype=theList.options[i].text; theList.selectedIndex=i; break; }
}
// attach the file
return this.createAttachmentTiddler(src, when, notes, tags, title,
useData, useLocal, useURL, local, url, mimetype);
},
getMIMEType:
function(src,def) {
var ext = src.substr(src.lastIndexOf('.')).toLowerCase();
var list=store.getTiddlerText(this.typeList);
if (!list || !list.trim().length) return def;
// get MIME list content from tiddler
var parts=list.split("\n----\n");
for (var p=0; p<parts.length; p++) {
var lines=parts[p].split("\n");
var mime=lines.shift(); // 1st line=MIME type
var match=lines.shift(); // 2nd line=matching extensions
if (match.indexOf(ext)!=-1) return mime;
}
return def;
},
createAttachmentTiddler:
function (src, when, notes, tags, title, useData, useLocal, useURL, local, url, mimetype, noshow) {
if (useData) { // encode the data
if (!mimetype.length) {
alert(this.MIMEErr);
form.MIMEType.selectedIndex=1; form.MIMEType.focus();
return false;
}
var d = this.readFile(src); if (!d) { return false; }
displayMessage('encoding '+src);
var encoded = this.encodeBase64(d);
displayMessage('file size='+d.length+' bytes, encoded size='+encoded.length+' bytes');
}
var usage=(mimetype.substr(0,5)=="image"?'[img[%0]]':'[[%0|%0]]').format([title]);
var theText=this.tiddlerFormat.format([
usage, notes.length?notes:'//none//', mimetype,
useLocal?local.replace(/\\/g,'/'):'', useURL?url:'',
useData?('data:'+mimetype+';base64,'+encoded):'' ]);
store.saveTiddler(title,title,theText,config.options.txtUserName,new Date(),tags);
var panel=document.getElementById("attachPanel"); if (panel) panel.style.display="none";
if (!noshow) { story.displayTiddler(null,title); story.refreshTiddler(title,null,true); }
displayMessage('attached "'+title+'"');
return true;
},
//}}}
// // base64 conversion
//{{{
encodeBase64:
function (d) {
if (!d) return null;
// encode as base64
var keyStr = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
var out="";
var chr1,chr2,chr3="";
var enc1,enc2,enc3,enc4="";
for (var count=0,i=0; i<d.length; ) {
chr1=d.charCodeAt(i++);
chr2=d.charCodeAt(i++);
chr3=d.charCodeAt(i++);
enc1=chr1 >> 2;
enc2=((chr1 & 3) << 4) | (chr2 >> 4);
enc3=((chr2 & 15) << 2) | (chr3 >> 6);
enc4=chr3 & 63;
if (isNaN(chr2)) enc3=enc4=64;
else if (isNaN(chr3)) enc4=64;
out+=keyStr.charAt(enc1)+keyStr.charAt(enc2)+keyStr.charAt(enc3)+keyStr.charAt(enc4);
chr1=chr2=chr3=enc1=enc2=enc3=enc4="";
}
return out;
},
decodeBase64: function(input) {
var out="";
var chr1,chr2,chr3;
var enc1,enc2,enc3,enc4;
var i = 0;
// remove all characters that are not A-Z, a-z, 0-9, +, /, or =
input=input.replace(/[^A-Za-z0-9\+\/\=]/g, "");
do {
enc1=keyStr.indexOf(input.charAt(i++));
enc2=keyStr.indexOf(input.charAt(i++));
enc3=keyStr.indexOf(input.charAt(i++));
enc4=keyStr.indexOf(input.charAt(i++));
chr1=(enc1 << 2) | (enc2 >> 4);
chr2=((enc2 & 15) << 4) | (enc3 >> 2);
chr3=((enc3 & 3) << 6) | enc4;
out=out+String.fromCharCode(chr1);
if (enc3!=64) out=out+String.fromCharCode(chr2);
if (enc4!=64) out=out+String.fromCharCode(chr3);
} while (i<input.length);
return out;
},
//}}}
// // I/O functions
//{{{
readFile: // read local BINARY file data
function(filePath) {
if(!window.Components) { return null; }
try { netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect"); }
catch(e) { alert("access denied: "+filePath); return null; }
var file = Components.classes["@mozilla.org/file/local;1"].createInstance(Components.interfaces.nsILocalFile);
try { file.initWithPath(filePath); } catch(e) { alert("cannot read file - invalid path: "+filePath); return null; }
if (!file.exists()) { alert("cannot read file - not found: "+filePath); return null; }
var inputStream = Components.classes["@mozilla.org/network/file-input-stream;1"].createInstance(Components.interfaces.nsIFileInputStream);
inputStream.init(file, 0x01, 00004, null);
var bInputStream = Components.classes["@mozilla.org/binaryinputstream;1"].createInstance(Components.interfaces.nsIBinaryInputStream);
bInputStream.setInputStream(inputStream);
return(bInputStream.readBytes(inputStream.available()));
},
//}}}
//{{{
writeFile:
function(filepath,data) {
// TBD: decode base64 and write BINARY data to specified local path/filename
return(false);
},
//}}}
//{{{
askForFilename: // for FF3 fixup
function(target) {
var msg=config.messages.selectFile;
if (target && target.title) msg=target.title; // use target field tooltip (if any) as dialog prompt text
// get local path for current document
var path=getLocalPath(document.location.href);
var p=path.lastIndexOf("/"); if (p==-1) p=path.lastIndexOf("\\"); // Unix or Windows
if (p!=-1) path=path.substr(0,p+1); // remove filename, leave trailing slash
var file=""
var result=window.mozAskForFilename(msg,path,file,true); // FF3 FIXUP ONLY
if (target && result.length) // set target field and trigger handling
{ target.value=result; target.onchange(); }
return result;
}
};
//}}}
//{{{
if (window.mozAskForFilename===undefined) { // also defined by CoreTweaks (for ticket #604)
window.mozAskForFilename=function(msg,path,file,mustExist) {
if(!window.Components) return false;
try {
netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect');
var nsIFilePicker = window.Components.interfaces.nsIFilePicker;
var picker = Components.classes['@mozilla.org/filepicker;1'].createInstance(nsIFilePicker);
picker.init(window, msg, mustExist?nsIFilePicker.modeOpen:nsIFilePicker.modeSave);
var thispath = Components.classes['@mozilla.org/file/local;1'].createInstance(Components.interfaces.nsILocalFile);
thispath.initWithPath(path);
picker.displayDirectory=thispath;
picker.defaultExtension='';
picker.defaultString=file;
picker.appendFilters(nsIFilePicker.filterAll|nsIFilePicker.filterText|nsIFilePicker.filterHTML);
if (picker.show()!=nsIFilePicker.returnCancel)
var result=picker.file.persistentDescriptor;
}
catch(ex) { displayMessage(ex.toString()); }
return result;
}
}
//}}}
/***
|Name|AttachFilePluginFormatters|
|Source|http://www.TiddlyTools.com/#AttachFilePluginFormatters|
|Version|4.0.1|
|Author|Eric Shulman|
|License|http://www.TiddlyTools.com/#LegalStatements|
|~CoreVersion|2.1.3|
|Type|plugin|
|Description|run-time library for displaying attachment tiddlers|
Runtime processing for //rendering// attachment tiddlers created by [[AttachFilePlugin]]. Attachment tiddlers are tagged with<<tag attachment>>and contain binary file content (e.g., jpg, gif, pdf, mp3, etc.) that has been stored directly as base64 text-encoded data or can be loaded from external files stored on a local filesystem or remote web server. Note: after creating new attachment tiddlers, you can remove [[AttachFilePlugin]], as long as you retain //this// tiddler (so that images can be rendered later on).
!!!!!Formatters
<<<
This plugin extends the behavior of the following TiddlyWiki core "wikify()" formatters:
* embedded images: {{{[img[tooltip|image]]}}}
* linked embedded images: {{{[img[tooltip|image][link]]}}}
* external/"pretty" links: {{{[[label|link]]}}}
''Please refer to AttachFilePlugin (source: http://www.TiddlyTools.com/#AttachFilePlugin) for additional information.''
<<<
!!!!!Revisions
<<<
2009.10.10 [4.0.1] in fileExists(), check for IE to avoid hanging Chrome during startup
2009.06.04 [4.0.0] changed attachment storage format to use //sections// instead of embedded substring markers.
2008.01.08 [*.*.*] plugin size reduction: documentation moved to ...Info
2007.12.04 [*.*.*] update for TW2.3.0: replaced deprecated core functions, regexps, and macros
2007.10.29 [3.7.0] more code reduction: removed upload handling from AttachFilePlugin (saves ~7K!)
2007.10.28 [3.6.0] removed duplicate formatter code from AttachFilePlugin (saves ~10K!) and updated documentation accordingly. This plugin ([[AttachFilePluginFormatters]]) is now //''required''// in order to display attached images/binary files within tiddler content.
2006.05.20 [3.4.0] through 2007.03.01 [3.5.3] sync with AttachFilePlugin
2006.05.13 [3.2.0] created from AttachFilePlugin v3.2.0
<<<
!!!!!Code
***/
// // version
//{{{
version.extensions.AttachFilePluginFormatters= {major: 4, minor: 0, revision: 1, date: new Date(2009,10,10)};
//}}}
//{{{
if (config.macros.attach==undefined) config.macros.attach= { };
//}}}
//{{{
if (config.macros.attach.isAttachment==undefined) config.macros.attach.isAttachment=function (title) {
var tiddler = store.getTiddler(title);
if (tiddler==undefined || tiddler.tags==undefined) return false;
return (tiddler.tags.indexOf("attachment")!=-1);
}
//}}}
//{{{
// test for local file existence - returns true/false without visible error display
if (config.macros.attach.fileExists==undefined) config.macros.attach.fileExists=function(f) {
if(window.Components) { // MOZ
try { netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect"); }
catch(e) { return false; } // security access denied
var file = Components.classes["@mozilla.org/file/local;1"].createInstance(Components.interfaces.nsILocalFile);
try { file.initWithPath(f); }
catch(e) { return false; } // invalid directory
return file.exists();
}
else if (config.browser.isIE) { // IE
var fso = new ActiveXObject("Scripting.FileSystemObject");
return fso.FileExists(f);
}
else return true; // other browsers: assume file exists
}
//}}}
//{{{
if (config.macros.attach.getAttachment==undefined) config.macros.attach.getAttachment=function(title) {
// extract embedded data, local and remote links (if any)
var text=store.getTiddlerText(title,'');
var embedded=store.getTiddlerText(title+'##data','').trim();
var locallink=store.getTiddlerText(title+'##file','').trim();
var remotelink=store.getTiddlerText(title+'##url','').trim();
// backward-compatibility for older attachments (pre 4.0.0)
var startmarker="---BEGIN_DATA---\n";
var endmarker="\n---END_DATA---";
var pos=0; var endpos=0;
if ((pos=text.indexOf(startmarker))!=-1 && (endpos=text.indexOf(endmarker))!=-1)
embedded="data:"+(text.substring(pos+startmarker.length,endpos)).replace(/\n/g,'');
if ((pos=text.indexOf("/%LOCAL_LINK%/"))!=-1)
locallink=text.substring(text.indexOf("|",pos)+1,text.indexOf("]]",pos));
if ((pos=text.indexOf("/%REMOTE_LINK%/"))!=-1)
remotelink=text.substring(text.indexOf("|",pos)+1,text.indexOf("]]",pos));
// if there is a data: URI defined (not supported by IE)
if (embedded.length && !config.browser.isIE) return embedded;
// document is being served remotely... use remote URL (if any) (avoids security alert)
if (remotelink.length && document.location.protocol!="file:")
return remotelink;
// local link only... return link without checking file existence (avoids security alert)
if (locallink.length && !remotelink.length)
return locallink;
// local link, check for file exist... use local link if found
if (locallink.length) {
locallink=locallink.replace(/^\.[\/\\]/,''); // strip leading './' or '.\' (if any)
if (this.fileExists(getLocalPath(locallink))) return locallink;
// maybe local link is relative... add path from current document and try again
var pathPrefix=document.location.href; // get current document path and trim off filename
var slashpos=pathPrefix.lastIndexOf("/"); if (slashpos==-1) slashpos=pathPrefix.lastIndexOf("\\");
if (slashpos!=-1 && slashpos!=pathPrefix.length-1) pathPrefix=pathPrefix.substr(0,slashpos+1);
if (this.fileExists(getLocalPath(pathPrefix+locallink))) return locallink;
}
// no embedded data, no local (or not found), fallback to remote URL (if any)
if (remotelink.length) return remotelink;
// attachment URL doesn't resolve, just return input as is
return title;
}
//}}}
//{{{
if (config.macros.attach.init_formatters==undefined) config.macros.attach.init_formatters=function() {
if (this.initialized) return;
// find the formatter for "image" and replace the handler
for (var i=0; i<config.formatters.length && config.formatters[i].name!="image"; i++);
if (i<config.formatters.length) config.formatters[i].handler=function(w) {
this.lookaheadRegExp.lastIndex = w.matchStart;
var lookaheadMatch = this.lookaheadRegExp.exec(w.source)
if(lookaheadMatch && lookaheadMatch.index == w.matchStart) // Simple bracketted link
{
var e = w.output;
if(lookaheadMatch[5])
{
var link = lookaheadMatch[5];
var external=config.formatterHelpers.isExternalLink(link);
if(external) {
e = createExternalLink(w.output,link);
}
else {
if (config.macros.attach.isAttachment(link))
{ e = createExternalLink(w.output,link);
e.href=config.macros.attach.getAttachment(link);
e.title = config.macros.attach.linkTooltip + link;
}
else {
e = createTiddlyLink(w.output,link,false,null,w.isStatic);
}
}
addClass(e,"imageLink");
}
var img = createTiddlyElement(e,"img");
if(lookaheadMatch[1])
img.align = "left";
else if(lookaheadMatch[2])
img.align = "right";
if(lookaheadMatch[3])
img.title = lookaheadMatch[3];
img.src = lookaheadMatch[4];
// ELS -------------
if (config.macros.attach.isAttachment(lookaheadMatch[4]))
img.src=config.macros.attach.getAttachment(lookaheadMatch[4]);
// ELS -------------
w.nextMatch = this.lookaheadRegExp.lastIndex;
}
}
//}}}
//{{{
// find the formatter for "prettyLink" and replace the handler
for (var i=0; i<config.formatters.length && config.formatters[i].name!="prettyLink"; i++);
if (i<config.formatters.length) {
config.formatters[i].handler=function(w) {
this.lookaheadRegExp.lastIndex = w.matchStart;
var lookaheadMatch = this.lookaheadRegExp.exec(w.source);
if(lookaheadMatch && lookaheadMatch.index == w.matchStart) {
var e;
var text = lookaheadMatch[1];
if(lookaheadMatch[3]) {
// Pretty bracketted link
var link = lookaheadMatch[3];
if (config.macros.attach.isAttachment(link)) {
e = createExternalLink(w.output,link);
e.href=config.macros.attach.getAttachment(link);
e.title=config.macros.attach.linkTooltip+link;
}
else e = (!lookaheadMatch[2] && config.formatterHelpers.isExternalLink(link))
? createExternalLink(w.output,link)
: createTiddlyLink(w.output,link,false,null,w.isStatic);
} else {
e = createTiddlyLink(w.output,text,false,null,w.isStatic);
}
createTiddlyText(e,text);
w.nextMatch = this.lookaheadRegExp.lastIndex;
}
}
} // if "prettyLink" formatter found
this.initialized=true;
}
//}}}
//{{{
config.macros.attach.init_formatters(); // load time init
//}}}
//{{{
if (TiddlyWiki.prototype.coreGetRecursiveTiddlerText==undefined) {
TiddlyWiki.prototype.coreGetRecursiveTiddlerText = TiddlyWiki.prototype.getRecursiveTiddlerText;
TiddlyWiki.prototype.getRecursiveTiddlerText = function(title,defaultText,depth) {
return config.macros.attach.isAttachment(title)?
config.macros.attach.getAttachment(title):this.coreGetRecursiveTiddlerText.apply(this,arguments);
}
}
//}}}
/%
!info
|Name|AutoRefresh|
|Source|http://www.TiddlyTools.com/#AutoRefresh|
|Version|2.0.0|
|Author|Eric Shulman|
|License|http://www.TiddlyTools.com/#LegalStatements|
|~CoreVersion|2.1|
|Type|transclusion|
|Description|set/clear tiddler refresh flags to force/prevent re-rendering when changes occur|
Usage:
<<<
{{{
<<tiddler AutoRefresh>>
<<tiddler AutoRefresh with: mode id>>
}}}
*''mode'' (optional), one of:
**''off'' or ''disable'' - prevents refresh of rendered content (except when PageTemplate is changed!)
**''on'' or ''enable'' - re-render content whenever corresponding tiddler source is changed (default)
**''force'' - re-render content whenever //''ANY''// tiddler is changed
*''id'' (optional), is a unique DOM element identifier on which to operate (e.g., 'mainMenu'). If omitted, the current tiddler (if any) is implied.
<<<
!end
!show
<<tiddler {{
var here=story.findContainingTiddler(place);
var target=document.getElementById('$2')||here||place.parentNode;
if (target==here) { // in a tiddler, get viewer element
var elems=target.getElementsByTagName('*');
for (var i=0;i<elems.length;i++)
if (hasClass(elems[i],'viewer')) { target=elems[i]; break; }
}
if (target) {
var mode='$1'; if (mode=='$'+'1') mode='on';
if (['on','enable','force'].contains(mode.toLowerCase())) {
var title=target.getAttribute('tiddler');
if (!title&&here) title=here.getAttribute('tiddler');
if (title) target.setAttribute('tiddler',title);
target.setAttribute('refresh','content');
target.setAttribute('force',(mode=='force')?'true':'');
} else if (['off','disable'].contains(mode.toLowerCase())) {
target.setAttribute('refresh','');
target.setAttribute('force','');
}
}
'';}}>>
!end
%/<<tiddler {{var src='AutoRefresh'; src+(tiddler&&tiddler.title==src?'##info':'##show');}}
with: [[$1]] [[$2]]>>
!!Outline
!!Handouts and class materials
!!Links to more information
!Objectives
!Outline
!Activities
!Ideas
{{lechelp{
The ''Independent Study'' section is designed to help you __prepare__ for each class session. If you learn the basics //before// you come to class, we can use class time for more sophisticated and active learning. The focused readings, guide questions and list of key terms will help you direct your preparation appropriately. We will //not// go back over these basic ideas during class; you are expected to know them (a quiz could happen at any time!). You can test your ability to apply what you've learned with the application questions, which will often be discussed in class. Application questions will help you see if you can apply what you've learned and will often be discussed in class. You are encouraged to bring your notes to class in case you need them.
}}}
{{lecblurb{
''Context question'' Lecture introduction
}}}
!!Focused readings
{{smalltext{
all page numbers below are from //Microbiology: Diversity, Disease and the Environment// by Salyers and Whitt
}}}
!!Guide questions
!!Key terms
{{col3{
}}}
!!Application questions
<script>
var ctid = story.findContainingTiddler(place).getAttribute("tiddler");
var slideState = store.getValue(ctid,"slides");
if (slideState == "true" ) {
folder = ctid.toLowerCase();
folder = folder.replace(" ","%20");
linkpath = "web%20materials/" + folder + "/slides.pdf";
var slideLink = createTiddlyElement(place,"a",null,"fileLink","click here to download")
slideLink.href = linkpath;
slideLink.onclick = openInNewWindow;
var stext = "<html><br><iframe height = \"600\" width=\"800\" src=\"";
stext += linkpath + "\"></iframe></html>";
wikify(stext,place);
}
else {
wikify("//Slides for this class session have not yet been posted. Please check back later.//",place);
}
</script>
!!Review questions
#Question. +++*{{keyButton{[answer]}}}...
{{anstxt{
Answer.
}}}
===
!!Additional terms
{{col2{
}}}
!!Practice problems
!!Links to more information
!!Outline
!!Handouts and class materials
!!Links to more information
!Objectives
!Outline
!Activities
!Ideas
{{lechelp{
The ''Independent Study'' section is designed to help you __prepare__ for each class session. If you learn the basics //before// you come to class, we can use class time for more sophisticated and active learning. The focused readings, guide questions and list of key terms will help you direct your preparation appropriately. We will //not// go back over these basic ideas during class; you are expected to know them (a quiz could happen at any time!). You can test your ability to apply what you've learned with the application questions, which will often be discussed in class. Application questions will help you see if you can apply what you've learned and will often be discussed in class. You are encouraged to bring your notes to class in case you need them.
}}}
{{lecblurb{
''Context question'' Lecture introduction
}}}
!!Focused readings
{{smalltext{
all page numbers below are from //Microbiology: Diversity, Disease and the Environment// by Salyers and Whitt
}}}
!!Guide questions
!!Key terms
{{col3{
}}}
!!Application questions
<script>
var ctid = story.findContainingTiddler(place).getAttribute("tiddler");
var slideState = store.getValue(ctid,"slides");
if (slideState == "true" ) {
folder = ctid.toLowerCase();
folder = folder.replace(" ","%20");
linkpath = "web%20materials/" + folder + "/slides.pdf";
var slideLink = createTiddlyElement(place,"a",null,"fileLink","click here to download")
slideLink.href = linkpath;
slideLink.onclick = openInNewWindow;
var stext = "<html><br><iframe height = \"600\" width=\"800\" src=\"";
stext += linkpath + "\"></iframe></html>";
wikify(stext,place);
}
else {
wikify("//Slides for this class session have not yet been posted. Please check back later.//",place);
}
</script>
!!Review questions
#Question. +++*{{keyButton{[answer]}}}...
{{anstxt{
Answer.
}}}
===
!!Additional terms
{{col2{
}}}
!!Practice problems
!!Links to more information
{{smalltext{
This case study is adapted from a case developed by Kristy J. Wilson at Emory University for the National Center for Case Study Teaching in Science collection.
}}}
!Sandy's story
Having suffered from Berger's disease—an autoimmune disease affecting kidney function—since I was 16, I have been in an out of hospitals for years. Especially since my condition worsened enough that I sometimes need dialysis. Still, I was surprised to find myself spending time in the restricted access area of the hospital, especially for what seemed like a routine urinary tract infection (UTI).
Heck, I get urinary tract infections all the time—anyone on dialysis does. This one started while I was visiting my cousins in India. I didn't even bother going to the doctor. My aunt and uncle picked up some powerful antibiotics for me at the drug store. Not much control over drugs there. Lots of antibiotics can be purchased over-the-counter, no prescription required. My aunt said these fixed her right up when she had a UTI. A couple days of antibiotics and she'd feel better right away. But they didn't work for me; by the time I got back to the U.S., I felt bad enough to see my doctor, who prescribed antibiotics I had to take for a full 10 days. Still didn't do the trick, so he sent me down to the hospital for some tests. They called me back the next day and said I had to get down here and get checked in right away...now I'm stuck here for a while.
It seems my UTI was caused by a strain of //E. coli// carrying a gene called NDM-1. The articles I've been reading—suddenly, I have lots of time to read—call bugs with this gene "superbugs." They were first found in India a couple of years back but have spread elsewhere, too. Guess they're resistant to about every antibiotic under the sun, so that's why the docs were so worried about me. Luckily, they seem to have found an antibiotic that kills it; I'm feeling better and can go home in a couple days.
!NDM-1 and Antibiotic Resistance
[1>i(300,auto)[course materials/resistance/resistance graph.jpg]]According to what I've been reading, NDM-1 encodes an enzyme called a metallo-β-lactamase. What's special about this enzyme is that it can work on some of the newer antibiotics that have been developed to resist the activity of ordinary β-lactamases, like the carbapemes. Usually, these are used as "last resort" antibiotics when patients are infected with Gram-negative bacteria like //E. coli// and //Klebsiella// (a cause of bacterial pneumonia) that won't respond to other drugs. Plus, it turns out that NDM-1 is carried on a plasmid that can pass easily from one bacterium to another, even if they're different species.
One research paper measured how much antibiotic it took to kill normal ("wild-type") //E. coli// and //E. coli// with the NDM-1 gene. This graph shows their results. The amount of antibiotic that kills wild-type //E. coli// is set to 100%, and then the amount that it took to kill the "superbug" is compared to that amount. Notice that it's a log scale.
[1>i(400,auto)[Number of new antibiotics developed by decade.|course materials/resistance/antibiotic development.jpg]]I guess they did some testing like this to find out what antibiotics to use on me. They're using ciprofloxacin ("Cipro"). I guess I'm lucky my superbug didn't get any genes for resistance to other kinds of antibiotics at the same time.
I've also been doing some research on how antibiotic resistance got so bad and what we can do about it. Here are some of the data I've found in some different articles. I'm planning to make this the topic for my term paper in 20th Century History when I get back to college.
{{clear{
}}}
|noline ctrtable|k
|[1i(250,auto)[Antibiotic usage in the United States.|course materials/resistance/antibiotic use.jpg]]|[1<i(300,auto)[Estimated unnecessary antibiotic prescriptions in the U.S.|course materials/resistance/unnecessary rx.jpg]]|
!Questions
#What characteristics of the NDM-1 gene make it an important medical concern?
#Carbapemes are some of our most reliable drugs for fighting resistant Gram-negative organisms. What is the mechanism of action for these drugs, and how do you know?
#Normally, an adult patient being treated with meropenem would be injected with 1 gram of the drug dissolved in 10 ml of fluid every 8 hours. How much would be necessary to treat //E. coli// with NDM-1? Would this be a practical treatment?
#Why do you think the ciprofloxacin and colistin work when none of the other antibiotics in the chart do?
#How do you think conditions in India might have contributed to the evolution of bacteria carrying the NDM-1 gene?
#How does each of the last three figures above demonstrate an important aspect of the problem of antibiotic resistance in the U.S.?
{{box{
This bill has never actually been introduced in the Illinois legislature, but its text was prepared by advocates of antibiotic regulation to serve as a starting point for actual legislators who may wish to develop such legislation for their states. Currently, Illinois has no laws in place to regulate the agricultural use of antibiotics.
}}}
!The Animal Feed Act
''Section 1. Short Title.''
The Act shall be known and may be cited as the “Illinois Animal Feed Act.”
''Section 2. Legislative Findings.''
The Legislature for the state of Illinois finds the following:
#Agriculture is important to the economic and general welfare of Illinois;
#Many bacteria reside in animals and humans;
#The use of antibiotics has been a common practice since the late 1940s in agriculture to promote the growth of animals, increase feed efficiency, and prevent disease, thereby increasing the output of eggs, milk, and meat;
#There is increasing evidence that the prevalence of antibiotic-resistant bacteria is on the rise and is an increasing risk to human health; and
#Eliminating the practice of adding low levels of antibiotics to animal feed that are routinely used to treat common ailments in humans will allow Illinois to maintain a profitable agricultural industry and promote general human health.
''Section 3. Legislative Intent.''
It is the intent of the Legislature to:
#Regulate the administration to healthy animals of low levels of antibiotics that are routinely used to treat human ailments in the overall interest of public welfare; and
#Create the “Illinois Animal Feed Act” to accomplish this purpose.
''Section 4. Definitions.''
For the purposes of this Act the following words have the following meanings:
#"Agricultural animal" refers to a domesticated livestock species, including but not limited to cow, equine, pig, and poultry species.
#"Animal feed" refers to any liquid or solid material administered to an agricultural animal for sustenance.
#"Antibiotic" refers to a drug or class of drugs used to treat bacterial infections.
#"Department of Agriculture" refers to the Illinois Department of Agriculture.
#"Department of Environmental Quality" refers to the Illinois Department of Environmental Quality.
#"Department of Health" refers to the Illinois Department of Health.
#"Extension Service" refers to the University of Illinois Cooperative Extension Service.
#"Subtherapeutic" refers to the use of an antibiotic, in the absence of disease, to increase feed efficiency, or prevent disease in a healthy animal.
#"Therapeutic" refers to the use of an antibiotic to treat a bacterial infection.
''Section 5. Antibiotic Use in Agriculture.''
#The subtherapeutic use of antibiotics in agricultural animals is hereby prohibited as follows:
##After September 30, 2012 no person or entity may sell, buy, or use animal feed containing fluoroquinolones for subtherapeutic use; and
##After September 30, 2013 no person or entity may sell, buy or use animal feed containing penicillin, tetracycline, erythromycin, lincomycin, tylosin, virginiamycin, or other antibiotics used in human medicine for a subtherapeutic use.
#The Department of Agriculture, in consultation with the Department of Health, shall establish a list of antibiotics used in human medicine that are regularly used in agriculture. A list of recommended guidelines shall be established for the appropriate therapeutic uses of antibiotics in animals if the antibiotics are used in human medicine.
''Section 6. Sale of Feed.''
#Any person or entity who manufactures, distributes, or sells commercial animal feed containing antibiotics shall pay to the Department of Agriculture an annual surcharge of one percent of the person’s or entity’s annual gross sales of all commercial agricultural animal feeds sold that contain antibiotics.
#The money collected from the surcharge shall be managed according to the following provisions:
##Funds shall be deposited into a fund managed by the Department of Agriculture;
##The principal may not be spent and deposits made shall be returned to the person or entity that paid the surcharge five years after the payment; and
##The interest from the deposits collected from the surcharge shall be used in the following manner by the Director of the Department of Agriculture, or a designee thereof:
###In cooperation with the Extension Service, to support on-farm demonstrations of alternatives to antibiotics for growth promotion;
###To monitor antibiotic resistance in animals raised for human consumption;
###To survey antimicrobial-resistant Salmonella in retail meats;
###In consultation with the Department of Environmental Quality, to monitor bacteria, resistant bacteria, and antibiotic residues in drinking water supplies and;
###For the payments of the costs of inspection, sampling, analysis, and other expenses necessary for the administration of this Act.
''Section 7. Severability.''
If any provision of this Act, or the application thereof to any person or circumstance, is held invalid, the invalidity shall not affect other provisions or applications of this Act, which can be given effect without regard to the invalid provision or application and, to this end, the provisions of this Act are severable.
''Section 8. Promulgation of Regulations.''
The Department of Agriculture and the Department of Health are authorized to make rules and perform any additional duties deemed necessary to implement the provisions of this Act.
''Section 9. Effective Date.''
This Act shall take effect immediately upon enactment.
/***
|Name|CheckboxPlugin|
|Source|http://www.TiddlyTools.com/#CheckboxPlugin|
|Documentation|http://www.TiddlyTools.com/#CheckboxPluginInfo|
|Version|2.4.0|
|Author|Eric Shulman|
|License|http://www.TiddlyTools.com/#LegalStatements|
|~CoreVersion|2.1|
|Type|plugin|
|Description|Add checkboxes to your tiddler content|
This plugin extends the TiddlyWiki syntax to allow definition of checkboxes that can be embedded directly in tiddler content. Checkbox states are preserved by:
* by setting/removing tags on specified tiddlers,
* or, by setting custom field values on specified tiddlers,
* or, by saving to a locally-stored cookie ID,
* or, automatically modifying the tiddler content (deprecated)
When an ID is assigned to the checkbox, it enables direct programmatic access to the checkbox DOM element, as well as creating an entry in TiddlyWiki's config.options[ID] internal data. In addition to tracking the checkbox state, you can also specify custom javascript for programmatic initialization and onClick event handling for any checkbox, so you can provide specialized side-effects in response to state changes.
!!!!!Documentation
>see [[CheckboxPluginInfo]]
!!!!!Revisions
<<<
2008.01.08 [*.*.*] plugin size reduction: documentation moved to [[CheckboxPluginInfo]]
2008.01.05 [2.4.0] set global "window.place" to current checkbox element when processing checkbox clicks. This allows init/beforeClick/afterClick handlers to reference RELATIVE elements, including using "story.findContainingTiddler(place)". Also, wrap handlers in "function()" so "return" can be used within handler code.
|please see [[CheckboxPluginInfo]] for additional revision details|
2005.12.07 [0.9.0] initial BETA release
<<<
!!!!!Code
***/
//{{{
version.extensions.CheckboxPlugin = {major: 2, minor: 4, revision:0 , date: new Date(2008,1,5)};
//}}}
//{{{
config.checkbox = { refresh: { tagged:true, tagging:true, container:true } };
config.formatters.push( {
name: "checkbox",
match: "\\[[xX_ ][\\]\\=\\(\\{]",
lookahead: "\\[([xX_ ])(=[^\\s\\(\\]{]+)?(\\([^\\)]*\\))?({[^}]*})?({[^}]*})?({[^}]*})?\\]",
handler: function(w) {
var lookaheadRegExp = new RegExp(this.lookahead,"mg");
lookaheadRegExp.lastIndex = w.matchStart;
var lookaheadMatch = lookaheadRegExp.exec(w.source)
if(lookaheadMatch && lookaheadMatch.index == w.matchStart) {
// get params
var checked=(lookaheadMatch[1].toUpperCase()=="X");
var id=lookaheadMatch[2];
var target=lookaheadMatch[3];
if (target) target=target.substr(1,target.length-2).trim(); // trim off parentheses
var fn_init=lookaheadMatch[4];
var fn_clickBefore=lookaheadMatch[5];
var fn_clickAfter=lookaheadMatch[6];
var tid=story.findContainingTiddler(w.output); if (tid) tid=tid.getAttribute("tiddler");
var srctid=w.tiddler?w.tiddler.title:null;
config.macros.checkbox.create(w.output,tid,srctid,w.matchStart+1,checked,id,target,config.checkbox.refresh,fn_init,fn_clickBefore,fn_clickAfter);
w.nextMatch = lookaheadMatch.index + lookaheadMatch[0].length;
}
}
} );
config.macros.checkbox = {
handler: function(place,macroName,params,wikifier,paramString,tiddler) {
if(!(tiddler instanceof Tiddler)) { // if no tiddler passed in try to find one
var here=story.findContainingTiddler(place);
if (here) tiddler=store.getTiddler(here.getAttribute("tiddler"))
}
var srcpos=0; // "inline X" not applicable to macro syntax
var target=params.shift(); if (!target) target="";
var defaultState=params[0]=="checked"; if (defaultState) params.shift();
var id=params.shift(); if (id && !id.length) id=null;
var fn_init=params.shift(); if (fn_init && !fn_init.length) fn_init=null;
var fn_clickBefore=params.shift();
if (fn_clickBefore && !fn_clickBefore.length) fn_clickBefore=null;
var fn_clickAfter=params.shift();
if (fn_clickAfter && !fn_clickAfter.length) fn_clickAfter=null;
var refresh={ tagged:true, tagging:true, container:false };
this.create(place,tiddler.title,tiddler.title,0,defaultState,id,target,refresh,fn_init,fn_clickBefore,fn_clickAfter);
},
create: function(place,tid,srctid,srcpos,defaultState,id,target,refresh,fn_init,fn_clickBefore,fn_clickAfter) {
// create checkbox element
var c = document.createElement("input");
c.setAttribute("type","checkbox");
c.onclick=this.onClickCheckbox;
c.srctid=srctid; // remember source tiddler
c.srcpos=srcpos; // remember location of "X"
c.container=tid; // containing tiddler (may be null if not in a tiddler)
c.tiddler=tid; // default target tiddler
c.refresh = {};
c.refresh.container = refresh.container;
c.refresh.tagged = refresh.tagged;
c.refresh.tagging = refresh.tagging;
place.appendChild(c);
// set default state
c.checked=defaultState;
// track state in config.options.ID
if (id) {
c.id=id.substr(1); // trim off leading "="
if (config.options[c.id]!=undefined)
c.checked=config.options[c.id];
else
config.options[c.id]=c.checked;
}
// track state in (tiddlername|tagname) or (fieldname@tiddlername)
if (target) {
var pos=target.indexOf("@");
if (pos!=-1) {
c.field=pos?target.substr(0,pos):"checked"; // get fieldname (or use default "checked")
c.tiddler=target.substr(pos+1); // get specified tiddler name (if any)
if (!c.tiddler || !c.tiddler.length) c.tiddler=tid; // if tiddler not specified, default == container
if (store.getValue(c.tiddler,c.field)!=undefined)
c.checked=(store.getValue(c.tiddler,c.field)=="true"); // set checkbox from saved state
} else {
var pos=target.indexOf("|"); if (pos==-1) var pos=target.indexOf(":");
c.tag=target;
if (pos==0) c.tag=target.substr(1); // trim leading "|" or ":"
if (pos>0) { c.tiddler=target.substr(0,pos); c.tag=target.substr(pos+1); }
if (!c.tag.length) c.tag="checked";
var t=store.getTiddler(c.tiddler);
if (t && t.tags)
c.checked=t.isTagged(c.tag); // set checkbox from saved state
}
}
// trim off surrounding { and } delimiters from init/click handlers
if (fn_init) c.fn_init="(function(){"+fn_init.trim().substr(1,fn_init.length-2)+"})()";
if (fn_clickBefore) c.fn_clickBefore="(function(){"+fn_clickBefore.trim().substr(1,fn_clickBefore.length-2)+"})()";
if (fn_clickAfter) c.fn_clickAfter="(function(){"+fn_clickAfter.trim().substr(1,fn_clickAfter.length-2)+"})()";
c.init=true; c.onclick(); c.init=false; // compute initial state and save in tiddler/config/cookie
},
onClickCheckbox: function(event) {
window.place=this;
if (this.init && this.fn_init) // custom function hook to set initial state (run only once)
{ try { eval(this.fn_init); } catch(e) { displayMessage("Checkbox init error: "+e.toString()); } }
if (!this.init && this.fn_clickBefore) // custom function hook to override changes in checkbox state
{ try { eval(this.fn_clickBefore) } catch(e) { displayMessage("Checkbox onClickBefore error: "+e.toString()); } }
if (this.id)
// save state in config AND cookie (only when ID starts with 'chk')
{ config.options[this.id]=this.checked; if (this.id.substr(0,3)=="chk") saveOptionCookie(this.id); }
if (this.srctid && this.srcpos>0 && (!this.id || this.id.substr(0,3)!="chk") && !this.tag && !this.field) {
// save state in tiddler content only if not using cookie, tag or field tracking
var t=store.getTiddler(this.srctid); // put X in original source tiddler (if any)
if (t && this.checked!=(t.text.substr(this.srcpos,1).toUpperCase()=="X")) { // if changed
t.set(null,t.text.substr(0,this.srcpos)+(this.checked?"X":"_")+t.text.substr(this.srcpos+1),null,null,t.tags);
if (!story.isDirty(t.title)) story.refreshTiddler(t.title,null,true);
store.setDirty(true);
}
}
if (this.field) {
if (this.checked && !store.tiddlerExists(this.tiddler))
store.saveTiddler(this.tiddler,this.tiddler,"",config.options.txtUserName,new Date());
// set the field value in the target tiddler
store.setValue(this.tiddler,this.field,this.checked?"true":"false");
// DEBUG: displayMessage(this.field+"@"+this.tiddler+" is "+this.checked);
}
if (this.tag) {
if (this.checked && !store.tiddlerExists(this.tiddler))
store.saveTiddler(this.tiddler,this.tiddler,"",config.options.txtUserName,new Date());
var t=store.getTiddler(this.tiddler);
if (t) {
var tagged=(t.tags && t.tags.indexOf(this.tag)!=-1);
if (this.checked && !tagged) { t.tags.push(this.tag); store.setDirty(true); }
if (!this.checked && tagged) { t.tags.splice(t.tags.indexOf(this.tag),1); store.setDirty(true); }
}
// if tag state has been changed, update display of corresponding tiddlers (unless they are in edit mode...)
if (this.checked!=tagged) {
if (this.refresh.tagged) {
if (!story.isDirty(this.tiddler)) // the TAGGED tiddler in view mode
story.refreshTiddler(this.tiddler,null,true);
else // the TAGGED tiddler in edit mode (with tags field)
config.macros.checkbox.refreshEditorTagField(this.tiddler,this.tag,this.checked);
}
if (this.refresh.tagging)
if (!story.isDirty(this.tag)) story.refreshTiddler(this.tag,null,true); // the TAGGING tiddler
}
}
if (!this.init && this.fn_clickAfter) // custom function hook to react to changes in checkbox state
{ try { eval(this.fn_clickAfter) } catch(e) { displayMessage("Checkbox onClickAfter error: "+e.toString()); } }
// refresh containing tiddler (but not during initial rendering, or we get an infinite loop!) (and not when editing container)
if (!this.init && this.refresh.container && this.container!=this.tiddler)
if (!story.isDirty(this.container)) story.refreshTiddler(this.container,null,true); // the tiddler CONTAINING the checkbox
return true;
},
refreshEditorTagField: function(title,tag,set) {
var tagfield=story.getTiddlerField(title,"tags");
if (!tagfield||tagfield.getAttribute("edit")!="tags") return; // if no tags field in editor (i.e., custom template)
var tags=tagfield.value.readBracketedList();
if (tags.contains(tag)==set) return; // if no change needed
if (set) tags.push(tag); // add tag
else tags.splice(tags.indexOf(tag),1); // remove tag
for (var t=0;t<tags.length;t++) tags[t]=String.encodeTiddlyLink(tags[t]);
tagfield.value=tags.join(" "); // reassemble tag string (with brackets as needed)
return;
}
}
//}}}
| Name | e-Mail | Phone |h
|Barnum, Gloria|[e[gkbarnum|gkbarnum]]|(231) 675-3712|
|Campbell, Jackie|[e[jmcampbell|jmcampbell]]||
|Carlson, Sarah|[e[sacarlson|sacarlson]]|(630) 715-9074|
|Cook, Alex|[e[agcook|agcook]]||
|DeRosa, Katie|[e[kederosa|kederosa]]|(630) 267-4187|
|DeWerff, Sam|[e[sjdewerff|sjdewerff]]|(309) 631-8767|
|Guenther, Joe|[e[jaguenther|jaguenther]]|(815) 347-7584|
|Jacob, Sadie|[e[sljacob|sljacob]]|(815) 481-4000|
|Knowlton, Ethan|[e[ejknowlton|ejknowlton]]|(630) 858-8786|
|Oskielunas, Corey|[e[choskielunas|choskielunas]]|(815) 260-5985|
|Rowe, Brittany|[e[bnrowe|bnrowe]]|(815) 821-4542|
|Thinn, Aye-Myat|[e[athinn|athinn]]|(909) 270-1017|
|Vernygora, Oksana|[e[ovvernygora|ovvernygora]]|(630) 457-6548|
|Young, Dan|[e[dmyoung|dmyoung]]||
{{outline{
!!Outline
#ETEC
##Pili and adhesion
##AB toxins: LT and ST
##Disease and treatment
#EPEC
##Bundle-forming pili
##Type III secretion
##Pathogenicity islands: LEE
##Disease and treatment
#EHEC
##Acid resistance
##Shiga toxin
##Disease and treatment
#EIEC and UPEC
!!Handouts and class materials
*How do different //E. coli// pathovars accomplish the basic [Dd[steps of pathogenesis|web materials/coli/group problem.pdf]]
!!Links to more information
*[[What the heck is an E. coli|http://people.ku.edu/~jbrown/ecoli.html]]
*[[E. coli|http://www.biology.ualberta.ca/facilities/multimedia/uploads/microbiology/ecoli.html]]
*[[A-B toxins (with animations)|http://student.ccbcmd.edu/courses/bio141/lecguide/unit2/bacpath/abtox.html]]
*[[FDA information on E. coli O157:H7|http://vm.cfsan.fda.gov/~mow/chap15.html]]
*[[E. coli, Salmonella and Shigella: masters of host-cell exploitation|http://www.cdc.gov/ncidod/eid/vol5no2/goosney.htm]]
*[[The Finlay lab: experts on EPEC and EHEC|http://www.finlaylab.biotech.ubc.ca/]]
}}}
How can we consider //E. coli// to be a harmless normal flora organism and yet also consider it an important pathogen?
*Is it an opportunist? Not really, although this might be true sometimes
*Multiple strains, or ''pathovars'' with distinct characteristics
!!!ETEC: Enterotoxigenic //E. coli//
Significance: "travellers' diarrhea," potentially serious diarrhea in children; often caused by (someone else's) normal flora strains
Pathogenesis:
#Reservoir: environmental (water)
#Entry: oral (contaminated water or food)
#Attachment
**Pili
**Flagella with EtpA adhesin
**Outer membrane proteins Tia and TibA
#Invasion: not invasive
#Multiply and obtain nutrients: intestinal nutrients, primarily
#Evade defenses
**In lumen of intestine, no phagocytes, etc.
**Tolerance of normal flora strains probably allows evasion of most immune response
**May inhibit antimicrobial peptides
#Damage tissues or produce symptoms
**Endotoxin
**Exotoxins LT (labile) and ST (stable): A-B toxins, ADP-ribosylation of adenylate and guanylate cyclases, activates CFTR
**Diarrhea due to osmotic efflux of water
**Why does this organism "want" to cause diarrhea?
#Exit
**Fecal (diarrhea)
Treatment: uncomplicated diarrhea, self-limiting, antibiotics have little value (why?)
!!!EPEC: Enteropathogenic //E. coli//
Significance: major cause of diarrhea in infants; primary pathogen
Pathogenesis: attaching and effacing (A/E) lesions, more intimate association
#Reservoir: environmental (water)
#Entry: oral (contaminated water or food)
#Attachment
**Initially, bundle-forming pili
**T3SS: EspA, B, C form channel; Tir becomes receptor for intimin, actin polmerization, pedestal formation
#Invasion: not invasive
#Multiply and obtain nutrients: intestinal nutrients, primarily
#Evade defenses
**Translocated proteins inhibit phagocytosis
**Molecules transported directly into host cells don't stimulate immune response
#Damage tissues or produce symptoms
**Type III secretion system (T3SS) encoded by 35-kb PAI called LEE (locus of enterocyte effacement)
**Map disrupts mitochondrial structure and function
**Disruption of tight junctions
**Inhibition of cell cycle
#Exit
**Fecal (diarrhea)
!!!EHEC: Enterohemorrhagic //E. coli//
Significance: severe gastroenteritis, potentially fatal hemolytic uremic syndrome (HUS)
Currently most common strain: H7:O157
Pathogenesis: very similar to EPEC but with addition of Stx toxin
*Shiga or Shiga-like toxin (first found in //Shigella//)
*A-B toxin but no secretion mechanism: released when cells lyse
*Blocks protein synthesis, causes cell death
*In some cells, suppresses inflammatory response
*Receptors in intestine and kidney epithelium; cattle lack the receptors
Treatment: antibiotics can lyse cells and release more toxin, plus don't stop toxin.
!!!EIEC: Enteroinvasive //E. coli//
*Formerly //Shigella//
*Invade cells, move on "tails" of polymerized actin
!!!UPEC: Uropathogenic //E. coli//
*Significance: 80% of UTIs
*Still intestinal, then moves to urethra and works its way up
*Adhesion by pili
*Invasive, intracellular communities
*Stimulates inflammation, apoptosis
!Objectives
!Outline
!Activities
!Ideas
{{lechelp{
The ''Independent Study'' section is designed to help you __prepare__ for each class session. If you learn the basics //before// you come to class, we can use class time for more sophisticated and active learning. The focused readings, guide questions and list of key terms will help you direct your preparation appropriately. We will //not// go back over these basic ideas during class; you are expected to know them (a quiz could happen at any time!). You can test your ability to apply what you've learned with the application questions, which will often be discussed in class. Application questions will help you see if you can apply what you've learned and will often be discussed in class. You are encouraged to bring your notes to class in case you need them.
}}}
{{lecblurb{
''//E. coli//: is it our friend or our foe?'' The news media portray //E. coli// as a frightening pathogen. Yet, you know that it lives harmlessly in your gut and is routinely used in all kinds of lab experiments without incident. In reality, this single species is a constellation of strains that have acquired different virulence factors. Some strains can cause mild diarrhea, others are responsible for UTIs, while yet others can result in severe and possibly fatal kidney disease. In this class session, we'll explore some of the different virulence factors that enable //E. coli// to have this range of activities, and along the way learn more about what makes pathogens pathogenic.
}}}
!!Focused readings
{{smalltext{all page numbers below are from //Microbiology: Diversity, Disease and the Environment// by Salyers and Whitt}}}
*Pathogenic //E. coli//: pp. 345-350 and Figures 17.3, 17.4 and 17.5
!!Guide questions
#What is an A-B toxin? What are the roles of its two components?
#How do the LT and ST toxins of ETEC cause diarrhea?
#What is a type III secretion system? How is this advantageous to EPEC?
#Why is EHEC the most dangerous type of pathogenic //E. coli//?
#How is horizontal gene transfer important to the pathogenesis of EHEC strains?
!!Outside reading
{{smalltext{
Please remember that outside reading is __not optional__: it's an integral part of the learning objectives. Everyone should be prepared to discuss the questions below.
}}}
Croxen, M. A., and B. B. Finlay. 2010. Molecular mechanisms of //Escherichia coli// pathogenicity. Nat. Rev. Microbiol. ''8'':26-38.[L[web materials/coli/finlay.pdf]].
#The article lists eight major "pathovars" with very different effects. All are //Escherichia coli//. What is a "pathovar," and how is this different from a species? What gives the different pathovars their different characteristics?
#What are two general steps that all of the types of //E. coli// have to accomplish in order to cause disease?
#How do EPEC and EHEC establish an intimate interaction with their host? How are they able to deliver toxic molecules to the host?
#List two ways that proteins made by EPEC are detrimental to host cells.
#The //E. coli// outbreaks that we hear about on the news are usually EHEC strain O157:H7. What major virulence factor sets these bacteria apart from EPEC (which uses a very similar attachment and delivery mechanism)? How do EHEC bacteria acquire this virulence factor?
#In what way are EIEC very different from ETEC, EPEC and EHEC?
#Make a chart listing some virulence factors for ETEC, EPEC, EHEC and EIEC.
!!Key terms
{{col3{
EPEC
ETEC
EHEC
EIEC
LT and ST toxins
A-B type toxin
Type III secretion
Shiga-like toxin
invasion
}}}
!!Application questions
#Your patient has diarrhea with no blood or abdominal pain. The symptoms started a couple of days after drinking some questionable water on a camping trip. Is antibiotic treatment likely to be helpful or necessary?
#Your patient has bloody diarrhea with abdominal pain. Which types of //E. coli// would you suspect in this case?
#What are some key reasons why the different types of //E. coli// are not considered different species? Consider what the Croxen and Finlay article has to say about their genomes and virulence factors.
<script>
var ctid = story.findContainingTiddler(place).getAttribute("tiddler");
var slideState = store.getValue(ctid,"slides");
if (slideState == "true" ) {
folder = ctid.toLowerCase();
folder = folder.replace(" ","%20");
linkpath = "web%20materials/" + folder + "/slides.pdf";
var slideLink = createTiddlyElement(place,"a",null,"fileLink","click here to download")
slideLink.href = linkpath;
slideLink.onclick = openInNewWindow;
var stext = "<html><br><iframe height = \"600\" width=\"800\" src=\"";
stext += linkpath + "\"></iframe></html>";
wikify(stext,place);
}
else {
wikify("//Slides for this class session have not yet been posted. Please check back later.//",place);
}
</script>
!!Review questions
#What do you think are some advantages of the A-B toxin mechanism? (Why not just make a single toxin molecule?) +++*{{keyButton{[answer]}}}...
{{anstxt{
Some possibilities include: one "B" toxin could transport more than one different "A" toxin; only a few "B" molecules could transport many "A" molecules; need to separate hydrophilic "A" protein from hydrophobic "B" protein; etc.
}}}
===
#As you consider //E. coli// pathogenesis, what evidence can you find that these bacteria and their human host have coexisted over a long evolutionary history? +++*{{keyButton{[answer]}}}...
{{anstxt{
The //E. coli// toxins work by interacting with the host cell machinery in very specific ways. Perhaps most significantly, Type III secretion involves multiple levels of bacterial proteins interacting very specifically with host functions.
}}}
===
#Why do you always hear that undercooked hamburger is a concern for //E. coli// food poisoning, while other beef products (roasts, steak, etc.) don't seem to be mentioned as often? +++*{{keyButton{[answer]}}}...
{{anstxt{
Steaks or roasts really only need to be cooked enough to kill bacteria on their outsides, because there is little opportunity for contaminants to penetrate deeply into the meat. Hamburger is ground meat, however, so any bacteria get mixed throughout; to kill them, the meat needs to be heated all the way through.
}}}
===
#The contaminated product in a recent Taco Bell outbreak of //E. coli// H7:O157 was probably lettuce or green onions. Why are contaminated vegetables probably a bigger risk for producing human disease than contaminated meat? List at least three ways these non-meat food products might have become contaminated. +++*{{keyButton{[answer]}}}...
{{anstxt{
Because salad vegetables are eaten raw, bacteria that contaminate them are not killed by cooking. These vegetables could have been contaminated during preparation (such as being cut up on a contaminated cutting board), in a processing plant that might process both meats and vegetables, or even in the field if they are watered with contaminated water.
}}}
===
#Your friend ate at Taco Bell last night and has diarrhea today. She wants to call the Health Department because she thinks there may be an //E. coli// outbreak at Taco Bell restaurants in our area. Should she? +++*{{keyButton{[answer]}}}...
{{anstxt{
Because //E. coli// has to colonize the intestine and produce toxins (as well as potentially T3SS and other components) in order to cause disease, it's not common for it to produce disease so quickly. Usually, it would take 24-48 hours at least after being ingested for symptoms to appear.
}}}
===
#People with chronic heartburn or acid reflux problems often use drugs that block acid production daily. Explain why these individuals might also be increasing their risk of disease due to intestinal bacteria. +++*{{keyButton{[answer]}}}...
{{anstxt{
Stomach acid is an important first line of defense against any bacteria (or viruses) that enter by the oral route. Controlling stomach acid might have the side effect of reducing the effectiveness of this defense, allowing more bacteria to safely reach the intestine.
}}}
===
#Discuss how an ETEC strain might evolve into an EHEC strain. What horizontal gene transfer events would be necessary, and how might they occur? +++*{{keyButton{[answer]}}}...
{{anstxt{
The ETEC strain would have to acquire at least a Type III secretion system and the Shiga toxin. Probably these would be carried on a virulence plasmid as part of pathogenesis islands. Probably the most likely way for this large plasmid to move to the ETEC strain would be for it to be self-transmissible and move by conjugation.
}}}
===
#The Tir protein is necessary for EPEC pathogenesis; why wouldn't the production of anti-Tir antibodies by the host be useful in eliminating the infection? +++*{{keyButton{[answer]}}}...
{{anstxt{
Because the Type III secretion system forms a direct channel between the //E. coli// cell and the host cell, Tir protein can be transported directly into the host cell. Antibodies outside the host cell would never see this protein.
}}}
===
#Suppose your biotech company wants to design drugs to combat //E. coli// infections of various types. What targets might you want to attack for each of the three major classes of pathogenic //E. coli//? +++*{{keyButton{[answer]}}}...
{{anstxt{
For ETEC, blocking the synthesis, secretion or action of LT and ST would be the most effective. For EPEC, you'd want to stop Type III secretion, maybe by attacking the Esp proteins or Tir. For EHEC, blocking Type III secretion would also be useful, but stopping the Shiga toxin would be the most important.
}}}
===
!!Additional terms
{{col2{
UPEC
EIEC
}}}
!!Practice problems
*[Dd[Problems|problem sets/pathogenesis.htm]] from previous exams
*[Dd[Key|problem sets/pathogenesis key.htm]] for problem set
!!Outline
!!Handouts and class materials
!!Links to more information
!Objectives
!Outline
!Activities
!Ideas
{{lechelp{
The ''Independent Study'' section is designed to help you __prepare__ for each class session. If you learn the basics //before// you come to class, we can use class time for more sophisticated and active learning. The focused readings, guide questions and list of key terms will help you direct your preparation appropriately. We will //not// go back over these basic ideas during class; you are expected to know them (a quiz could happen at any time!). You can test your ability to apply what you've learned with the application questions, which will often be discussed in class. Application questions will help you see if you can apply what you've learned and will often be discussed in class. You are encouraged to bring your notes to class in case you need them.
}}}
{{lecblurb{
''Context question'' Lecture introduction
}}}
!!Focused readings
{{smalltext{
all page numbers below are from //Microbiology: Diversity, Disease and the Environment// by Salyers and Whitt
}}}
!!Guide questions
!!Key terms
{{col3{
}}}
!!Application questions
<script>
var ctid = story.findContainingTiddler(place).getAttribute("tiddler");
var slideState = store.getValue(ctid,"slides");
if (slideState == "true" ) {
folder = ctid.toLowerCase();
folder = folder.replace(" ","%20");
linkpath = "web%20materials/" + folder + "/slides.pdf";
var slideLink = createTiddlyElement(place,"a",null,"fileLink","click here to download")
slideLink.href = linkpath;
slideLink.onclick = openInNewWindow;
var stext = "<html><br><iframe height = \"600\" width=\"800\" src=\"";
stext += linkpath + "\"></iframe></html>";
wikify(stext,place);
}
else {
wikify("//Slides for this class session have not yet been posted. Please check back later.//",place);
}
</script>
!!Review questions
#Question. +++*{{keyButton{[answer]}}}...
{{anstxt{
Answer.
}}}
===
!!Additional terms
{{col2{
}}}
!!Practice problems
!!Links to more information
/***
|Name|CopyTiddlerPlugin|
|Source|http://www.TiddlyTools.com/#CopyTiddlerPlugin|
|Version|3.2.5|
|Author|Eric Shulman|
|License|http://www.TiddlyTools.com/#LegalStatements|
|~CoreVersion|2.3|
|Type|plugin|
|Description|Quickly create a copy of any existing tiddler|
!!!Usage
<<<
The plugin automatically updates the default (shadow) ToolbarCommands definitions to insert the ''copyTiddler'' command, which will appear as ''copy'' when a tiddler is rendered. If you are already using customized toolbar definitions, you will need to manually add the ''copyTiddler'' toolbar command to your existing ToolbarCommands tiddler, e.g.:
{{{
|EditToolbar|... copyTiddler ... |
}}}
When the ''copy'' command is selected, a new tiddler is created containing an exact copy of the current text/tags/fields, using a title of "{{{TiddlerName (n)}}}", where ''(n)'' is the next available number (starting with 1, of course). If you copy while //editing// a tiddler, the current values displayed in the editor are used (including any changes you may have already made to those values), and the new tiddler is immediately opened for editing.
The plugin also provides a macro that allows you to embed a ''copy'' command directly in specific tiddler content:
{{{
<<copyTiddler TidderName label:"..." prompt:"...">>
}}}
where
* ''TiddlerName'' (optional)<br>specifies the //source// tiddler to be copied. If omitted, the current containing tiddler (if any) will be copied.
* ''label:"..."'' (optional)<br>specifies text to use for the embedded link (default="copy TiddlerName")
* ''prompt:"..."'' (optional)<br>specifies mouseover 'tooltip' help text for link
//Note: to use non-default label/prompt values with the current containing tiddler, use "" for the TiddlerName//
<<<
!!!Configuration
<<<
<<option chkCopyTiddlerDate>> use date/time from existing tiddler (otherwise, use current date/time)
{{{<<option chkCopyTiddlerDate>>}}}
<<<
!!!Revisions
<<<
2009.06.08 [3.2.5] added option to use timestamp from source tiddler
2009.03.09 [3.2.4] fixed IE-specific syntax error
2009.03.02 [3.2.3] refactored code (again) to restore use of config.commands.copyTiddler.* custom settings
2009.02.13 [3.2.2] in click(), fix calls to displayTiddler() to use current tiddlerElem and use getTiddlerText() to permit copying of shadow tiddler content
2009.01.30 [3.2.1] fixed handling for copying field values when in edit mode
2009.01.23 [3.2.0] refactored code and added {{{<<copyTiddler TiddlerName>>}}} macro
2008.12.18 [3.1.4] corrected code for finding next (n) value when 'sparse' handling is in effect (thanks to RussThomas for identifying and diagnosing the problem)
2008.11.14 [3.1.3] added optional 'sparse' setting (avoids 'filling in' missing numbers that may have been previously deleted)
2008.11.14 [3.1.2] added optional 'zeroPad' setting
2008.11.14 [3.1.1] moved hard-coded '(n)' regex into 'suffixPattern' object property so it can be customized
2008.09.26 [3.1.0] changed new title generation to use '(n)' suffix instead of 'Copy of' prefix
2008.05.20 [3.0.3] in handler, when copying from VIEW mode, create duplicate array from existing tags array before saving new tiddler.
2007.12.19 [3.0.2] in handler, when copying from VIEW mode, duplicate custom fields before saving new tiddler. Thanks to bug report from Ken Girard.
2007.09.26 [3.0.1] in handler, use findContainingTiddler(src) to get tiddlerElem (and title). Allows 'copy' command to find correct tiddler when transcluded using {{{<<tiddler>>}}} macro or enhanced toolbar inclusion (see [[CoreTweaks]])
2007.06.28 [3.0.0] complete re-write to handle custom fields and alternative view/edit templates
2007.05.17 [2.1.2] use store.getTiddlerText() to retrieve tiddler content, so that SHADOW tiddlers can be copied correctly when in VIEW mode
2007.04.01 [2.1.1] in copyTiddler.handler(), fix check for editor fields by ensuring that found field actually has edit=='text' attribute
2007.02.05 [2.1.0] in copyTiddler.handler(), if editor fields (textfield and/or tagsfield) can't be found (i.e., tiddler is in VIEW mode, not EDIT mode), then get text/tags values from stored tiddler instead of active editor fields. Allows use of COPY toolbar directly from VIEW mode (based on a request from LaurentCharles)
2006.12.12 [2.0.0] completely rewritten so plugin just creates a new tiddler EDITOR with a copy of the current tiddler EDITOR contents, instead of creating the new tiddler in the STORE by copying the current tiddler values from the STORE.
2005.xx.xx [1.0.0] original version by Tim Morgan
<<<
!!!Code
***/
//{{{
version.extensions.CopyTiddlerPlugin= {major: 3, minor: 2, revision: 5, date: new Date(2009,6,8)};
// automatically tweak shadow EditTemplate to add 'copyTiddler' toolbar command (following 'cancelTiddler')
config.shadowTiddlers.ToolbarCommands=config.shadowTiddlers.ToolbarCommands.replace(/cancelTiddler/,'cancelTiddler copyTiddler');
if (config.options.chkCopyTiddlerDate===undefined) config.options.chkCopyTiddlerDate=false;
config.commands.copyTiddler = {
text: 'copy',
hideReadOnly: true,
tooltip: 'Make a copy of this tiddler',
notitle: 'this tiddler',
prefix: '',
suffixText: ' (%0)',
suffixPattern: / \(([0-9]+)\)$/,
zeroPad: 0,
sparse: false,
handler: function(event,src,title)
{ return config.commands.copyTiddler.click(src,event); },
click: function(here,ev) {
var tiddlerElem=story.findContainingTiddler(here);
var template=tiddlerElem?tiddlerElem.getAttribute('template'):null;
var title=here.getAttribute('from');
if (!title || !title.length) {
if (!tiddlerElem) return false;
else title=tiddlerElem.getAttribute('tiddler');
}
var root=title.replace(this.suffixPattern,''); // title without suffix
// find last matching title
var last=title;
if (this.sparse) { // don't fill-in holes... really find LAST matching title
var tids=store.getTiddlers('title','excludeLists');
for (var t=0; t<tids.length; t++) if (tids[t].title.startsWith(root)) last=tids[t].title;
}
// get next number (increment from last matching title)
var n=1; var match=this.suffixPattern.exec(last); if (match) n=parseInt(match[1])+1;
var newTitle=this.prefix+root+this.suffixText.format([String.zeroPad(n,this.zeroPad)]);
// if not sparse mode, find the next hole to fill in...
while (store.tiddlerExists(newTitle)||document.getElementById(story.idPrefix+newTitle))
{ n++; newTitle=this.prefix+root+this.suffixText.format([String.zeroPad(n,this.zeroPad)]); }
if (!story.isDirty(title)) { // if tiddler is not being EDITED
// duplicate stored tiddler (if any)
var text=store.getTiddlerText(title,'');
var who=config.options.txtUserName;
var when=new Date();
var newtags=[]; var newfields={};
var tid=store.getTiddler(title); if (tid) {
if (config.options.chkCopyTiddlerDate) var when=tid.modified;
for (var t=0; t<tid.tags.length; t++) newtags.push(tid.tags[t]);
store.forEachField(tid,function(t,f,v){newfields[f]=v;},true);
}
store.saveTiddler(newTitle,newTitle,text,who,when,newtags,newfields,true);
story.displayTiddler(tiddlerElem,newTitle,template);
} else {
story.displayTiddler(tiddlerElem,newTitle,template);
var fields=config.commands.copyTiddler.gatherFields(tiddlerElem); // get current editor fields
var newTiddlerElem=document.getElementById(story.idPrefix+newTitle);
for (var f=0; f<fields.length; f++) { // set fields in new editor
if (fields[f].name=='title') fields[f].value=newTitle; // rename title in new tiddler
var fieldElem=config.commands.copyTiddler.findField(newTiddlerElem,fields[f].name);
if (fieldElem) {
if (fieldElem.getAttribute('type')=='checkbox')
fieldElem.checked=fields[f].value;
else
fieldElem.value=fields[f].value;
}
}
}
story.focusTiddler(newTitle,'title');
return false;
},
findField: function(tiddlerElem,field) {
var inputs=tiddlerElem.getElementsByTagName('input');
for (var i=0; i<inputs.length; i++) {
if (inputs[i].getAttribute('type')=='checkbox' && inputs[i].field == field) return inputs[i];
if (inputs[i].getAttribute('type')=='text' && inputs[i].getAttribute('edit') == field) return inputs[i];
}
var tas=tiddlerElem.getElementsByTagName('textarea');
for (var i=0; i<tas.length; i++) if (tas[i].getAttribute('edit') == field) return tas[i];
var sels=tiddlerElem.getElementsByTagName('select');
for (var i=0; i<sels.length; i++) if (sels[i].getAttribute('edit') == field) return sels[i];
return null;
},
gatherFields: function(tiddlerElem) { // get field names and values from current tiddler editor
var fields=[];
// get checkboxes and edit fields
var inputs=tiddlerElem.getElementsByTagName('input');
for (var i=0; i<inputs.length; i++) {
if (inputs[i].getAttribute('type')=='checkbox')
if (inputs[i].field) fields.push({name:inputs[i].field,value:inputs[i].checked});
if (inputs[i].getAttribute('type')=='text')
if (inputs[i].getAttribute('edit')) fields.push({name:inputs[i].getAttribute('edit'),value:inputs[i].value});
}
// get textareas (multi-line edit fields)
var tas=tiddlerElem.getElementsByTagName('textarea');
for (var i=0; i<tas.length; i++)
if (tas[i].getAttribute('edit')) fields.push({name:tas[i].getAttribute('edit'),value:tas[i].value});
// get selection lists (droplist or listbox)
var sels=tiddlerElem.getElementsByTagName('select');
for (var i=0; i<sels.length; i++)
if (sels[i].getAttribute('edit')) fields.push({name:sels[i].getAttribute('edit'),value:sels[i].value});
return fields;
}
};
//}}}
// // MACRO DEFINITION
//{{{
config.macros.copyTiddler = {
label: 'copy',
prompt: 'Make a copy of %0',
handler: function(place,macroName,params,wikifier,paramString,tiddler) {
var title=params.shift();
params=paramString.parseParams('anon',null,true,false,false);
var label =getParam(params,'label',this.label+(title?' '+title:''));
var prompt =getParam(params,'prompt',this.prompt).format([title||this.notitle]);
var b=createTiddlyButton(place,label,prompt,
function(ev){return config.commands.copyTiddler.click(this,ev)});
b.setAttribute('from',title||'');
}
};
//}}}
/***
|''Name''|DeprecatedFunctionsPlugin|
|''Description''|Provides support for functions removed from the TiddlyWiki core|
|''Version''|1.0.0|
|''Status''|stable|
|''Source''|http://www.tiddlywiki.com/coreplugins.html#DeprecatedFunctionsPlugin|
|''~CodeRepository:''|http://svn.tiddlywiki.org/Trunk/association/plugins/DeprecatedFunctionsPlugin/DeprecatedFunctionsPlugin.js |
|''License''|[[BSD open source license]]|
|''~CoreVersion''|2.3.0|
|''Feedback''|[[TiddlyWiki community|http://groups.google.com/group/TiddlyWiki]] |
|''Keywords''|legacySupport|
!Code
***/
//{{{
if(!version.extensions.DeprecatedFunctionsPlugin) {
version.extensions.DeprecatedFunctionsPlugin = {installed:true};
//--
//-- Deprecated code
//--
// @Deprecated: Use createElementAndWikify and this.termRegExp instead
config.formatterHelpers.charFormatHelper = function(w)
{
w.subWikify(createTiddlyElement(w.output,this.element),this.terminator);
};
// @Deprecated: Use enclosedTextHelper and this.lookaheadRegExp instead
config.formatterHelpers.monospacedByLineHelper = function(w)
{
var lookaheadRegExp = new RegExp(this.lookahead,"mg");
lookaheadRegExp.lastIndex = w.matchStart;
var lookaheadMatch = lookaheadRegExp.exec(w.source);
if(lookaheadMatch && lookaheadMatch.index == w.matchStart) {
var text = lookaheadMatch[1];
if(config.browser.isIE)
text = text.replace(/\n/g,"\r");
createTiddlyElement(w.output,"pre",null,null,text);
w.nextMatch = lookaheadRegExp.lastIndex;
}
};
// @Deprecated: Use <br> or <br /> instead of <<br>>
config.macros.br = {};
config.macros.br.handler = function(place)
{
createTiddlyElement(place,"br");
};
// Find an entry in an array. Returns the array index or null
// @Deprecated: Use indexOf instead
Array.prototype.find = function(item)
{
var i = this.indexOf(item);
return i == -1 ? null : i;
};
// Load a tiddler from an HTML DIV. The caller should make sure to later call Tiddler.changed()
// @Deprecated: Use store.getLoader().internalizeTiddler instead
Tiddler.prototype.loadFromDiv = function(divRef,title)
{
return store.getLoader().internalizeTiddler(store,this,title,divRef);
};
// Format the text for storage in an HTML DIV
// @Deprecated Use store.getSaver().externalizeTiddler instead.
Tiddler.prototype.saveToDiv = function()
{
return store.getSaver().externalizeTiddler(store,this);
};
// @Deprecated: Use store.allTiddlersAsHtml() instead
function allTiddlersAsHtml()
{
return store.allTiddlersAsHtml();
}
// @Deprecated: Use refreshPageTemplate instead
function applyPageTemplate(title)
{
refreshPageTemplate(title);
}
// @Deprecated: Use story.displayTiddlers instead
function displayTiddlers(srcElement,titles,template,unused1,unused2,animate,unused3)
{
story.displayTiddlers(srcElement,titles,template,animate);
}
// @Deprecated: Use story.displayTiddler instead
function displayTiddler(srcElement,title,template,unused1,unused2,animate,unused3)
{
story.displayTiddler(srcElement,title,template,animate);
}
// @Deprecated: Use functions on right hand side directly instead
var createTiddlerPopup = Popup.create;
var scrollToTiddlerPopup = Popup.show;
var hideTiddlerPopup = Popup.remove;
// @Deprecated: Use right hand side directly instead
var regexpBackSlashEn = new RegExp("\\\\n","mg");
var regexpBackSlash = new RegExp("\\\\","mg");
var regexpBackSlashEss = new RegExp("\\\\s","mg");
var regexpNewLine = new RegExp("\n","mg");
var regexpCarriageReturn = new RegExp("\r","mg");
}
//}}}
/***
|Name|DisableWikiLinksPlugin|
|Source|http://www.TiddlyTools.com/#DisableWikiLinksPlugin|
|Version|1.6.0|
|Author|Eric Shulman|
|License|http://www.TiddlyTools.com/#LegalStatements|
|~CoreVersion|2.1|
|Type|plugin|
|Description|selectively disable TiddlyWiki's automatic ~WikiWord linking behavior|
This plugin allows you to disable TiddlyWiki's automatic ~WikiWord linking behavior, so that WikiWords embedded in tiddler content will be rendered as regular text, instead of being automatically converted to tiddler links. To create a tiddler link when automatic linking is disabled, you must enclose the link text within {{{[[...]]}}}.
!!!!!Usage
<<<
You can block automatic WikiWord linking behavior for any specific tiddler by ''tagging it with<<tag excludeWikiWords>>'' (see configuration below) or, check a plugin option to disable automatic WikiWord links to non-existing tiddler titles, while still linking WikiWords that correspond to existing tiddlers titles or shadow tiddler titles. You can also block specific selected WikiWords from being automatically linked by listing them in [[DisableWikiLinksList]] (see configuration below), separated by whitespace. This tiddler is optional and, when present, causes the listed words to always be excluded, even if automatic linking of other WikiWords is being permitted.
Note: WikiWords contained in default ''shadow'' tiddlers will be automatically linked unless you select an additional checkbox option lets you disable these automatic links as well, though this is not recommended, since it can make it more difficult to access some TiddlyWiki standard default content (such as AdvancedOptions or SideBarTabs)
<<<
!!!!!Configuration
<<<
<<option chkDisableWikiLinks>> Disable ALL automatic WikiWord tiddler links
<<option chkAllowLinksFromShadowTiddlers>> ... except for WikiWords //contained in// shadow tiddlers
<<option chkDisableNonExistingWikiLinks>> Disable automatic WikiWord links for non-existing tiddlers
Disable automatic WikiWord links for words listed in: <<option txtDisableWikiLinksList>>
Disable automatic WikiWord links for tiddlers tagged with: <<option txtDisableWikiLinksTag>>
<<<
!!!!!Revisions
<<<
2008.07.22 [1.6.0] hijack tiddler changed() method to filter disabled wiki words from internal links[] array (so they won't appear in the missing tiddlers list)
2007.06.09 [1.5.0] added configurable txtDisableWikiLinksTag (default value: "excludeWikiWords") to allows selective disabling of automatic WikiWord links for any tiddler tagged with that value.
2006.12.31 [1.4.0] in formatter, test for chkDisableNonExistingWikiLinks
2006.12.09 [1.3.0] in formatter, test for excluded wiki words specified in DisableWikiLinksList
2006.12.09 [1.2.2] fix logic in autoLinkWikiWords() (was allowing links TO shadow tiddlers, even when chkDisableWikiLinks is TRUE).
2006.12.09 [1.2.1] revised logic for handling links in shadow content
2006.12.08 [1.2.0] added hijack of Tiddler.prototype.autoLinkWikiWords so regular (non-bracketed) WikiWords won't be added to the missing list
2006.05.24 [1.1.0] added option to NOT bypass automatic wikiword links when displaying default shadow content (default is to auto-link shadow content)
2006.02.05 [1.0.1] wrapped wikifier hijack in init function to eliminate globals and avoid FireFox 1.5.0.1 crash bug when referencing globals
2005.12.09 [1.0.0] initial release
<<<
!!!!!Code
***/
//{{{
version.extensions.DisableWikiLinksPlugin= {major: 1, minor: 6, revision: 0, date: new Date(2008,7,22)};
if (config.options.chkDisableNonExistingWikiLinks==undefined) config.options.chkDisableNonExistingWikiLinks= false;
if (config.options.chkDisableWikiLinks==undefined) config.options.chkDisableWikiLinks=false;
if (config.options.txtDisableWikiLinksList==undefined) config.options.txtDisableWikiLinksList="DisableWikiLinksList";
if (config.options.chkAllowLinksFromShadowTiddlers==undefined) config.options.chkAllowLinksFromShadowTiddlers=true;
if (config.options.txtDisableWikiLinksTag==undefined) config.options.txtDisableWikiLinksTag="excludeWikiWords";
// find the formatter for wikiLink and replace handler with 'pass-thru' rendering
initDisableWikiLinksFormatter();
function initDisableWikiLinksFormatter() {
for (var i=0; i<config.formatters.length && config.formatters[i].name!="wikiLink"; i++);
config.formatters[i].coreHandler=config.formatters[i].handler;
config.formatters[i].handler=function(w) {
// supress any leading "~" (if present)
var skip=(w.matchText.substr(0,1)==config.textPrimitives.unWikiLink)?1:0;
var title=w.matchText.substr(skip);
var exists=store.tiddlerExists(title);
var inShadow=w.tiddler && store.isShadowTiddler(w.tiddler.title);
// check for excluded Tiddler
if (w.tiddler && w.tiddler.isTagged(config.options.txtDisableWikiLinksTag))
{ w.outputText(w.output,w.matchStart+skip,w.nextMatch); return; }
// check for specific excluded wiki words
var t=store.getTiddlerText(config.options.txtDisableWikiLinksList);
if (t && t.length && t.indexOf(w.matchText)!=-1)
{ w.outputText(w.output,w.matchStart+skip,w.nextMatch); return; }
// if not disabling links from shadows (default setting)
if (config.options.chkAllowLinksFromShadowTiddlers && inShadow)
return this.coreHandler(w);
// check for non-existing non-shadow tiddler
if (config.options.chkDisableNonExistingWikiLinks && !exists)
{ w.outputText(w.output,w.matchStart+skip,w.nextMatch); return; }
// if not enabled, just do standard WikiWord link formatting
if (!config.options.chkDisableWikiLinks)
return this.coreHandler(w);
// just return text without linking
w.outputText(w.output,w.matchStart+skip,w.nextMatch)
}
}
Tiddler.prototype.coreAutoLinkWikiWords = Tiddler.prototype.autoLinkWikiWords;
Tiddler.prototype.autoLinkWikiWords = function()
{
// if all automatic links are not disabled, just return results from core function
if (!config.options.chkDisableWikiLinks)
return this.coreAutoLinkWikiWords.apply(this,arguments);
return false;
}
Tiddler.prototype.disableWikiLinks_changed = Tiddler.prototype.changed;
Tiddler.prototype.changed = function()
{
this.disableWikiLinks_changed.apply(this,arguments);
// remove excluded wiki words from links array
var t=store.getTiddlerText(config.options.txtDisableWikiLinksList,"").readBracketedList();
if (t.length) for (var i=0; i<t.length; i++)
if (this.links.contains(t[i]))
this.links.splice(this.links.indexOf(t[i]),1);
};
//}}}
<<remind show:all type:D event:0 exams:1 link:0>>
/***
|Name|EditFieldPlugin|
|Source|http://www.TiddlyTools.com/#EditFieldPlugin|
|Version|1.6.1|
|Author|Eric Shulman|
|License|http://www.TiddlyTools.com/#LegalStatements|
|~CoreVersion|2.1|
|Type|plugin|
|Description|extend core edit macro for use in ViewTemplates or direct embedding in tiddler content|
!!!!!Usage
<<<
Normally, when a tiddler is edited, a set of input fields is displayed (as defined by the [[EditTemplate]]), and any changes you make are only saved when you press the "done" (or "cancel") command in the tiddler editor's toolbar. However, you can also ''embed an input field directly in //viewed// tiddler content'' by writing:
{{{
<<edit fieldname numberOfLines defaultValue>>
<<edit fieldname@TiddlerName numberOfLines defaultValue>>
}}}
or in the [[ViewTemplate]] (to add it to every tiddler):
{{{
<span macro='edit fieldname numberOfLines defaultValue'></span>
<span macro='edit fieldname@TiddlerName numberOfLines defaultValue'></span>
}}}
Unfortunately, while the input field will be displayed, the "done" command item is not available when //viewing// a tiddler, so the 'save/discard' handling cannot be invoked once you have decided that your input activities are complete, and any changes you make will not stored anywhere. To address this, the plugin extends the input field handler so that when a field is embedded in normal tiddler content and you make changes, it can automatically save/discard your changes as soon as you press ENTER or move away ('onBlur' handling) from that input field. You can also abandon your changes to input field content by pressing ESCAPE.
The plugin also adds support for an optional 'remote field reference' syntax: "{{{fieldname@TiddlerName}}}" so you can display and edit fields stored in other tiddlers. This allows you to create, for example, 'summary' tiddlers for reviewing/editing field values from several tiddlers at the same time.
Note: a message is displayed before saving/discarding any field changes. To suppress either (or both) of these confirmation messages, you can add the following configuration settings to [[EditFieldPluginConfig]] (or any other tiddler you are using to store and apply 'persistent settings'):
{{{
config.macros.edit.cancelMsg = "";
config.macros.edit.saveMsg = "";
}}}
<<<
!!!!!Examples
<<<
*"""<<edit foobar>>"""<br><<edit foobar>>
*"""<<edit foobar@SomeTiddler>>"""<br><<edit foobar@SomeTiddler>>
*"""<<edit tags>>"""<br><<edit tags>>
*"""<<edit text 15>>"""<br>{{editor{<<edit text 15>>}}}
<<<
!!!!!Revisions
<<<
2010.11.15 [1.6.1] In handler(), corrected display field values for 'non-stored' tiddler content (e.g., shadows, tags, default new tiddler)
2010.10.31 [1.6.0] In handler(), fixed display of remote field values. In onblur(), refactored save/cancel message text for easier customization and bypass confirmation if text is blank.
2009.09.16 [1.5.1] fixed 'onblur' handling for local fields (fieldname@here). Added support for '@here' syntax
2009.09.05 [1.5.0] code refactored. added handling for fieldname@tiddlername
2007.08.22 [1.0.0] initial release
<<<
!!!!!Code
***/
//{{{
version.extensions.EditFieldPlugin= {major: 1, minor: 6, revision: 1, date: new Date(2010,11,15)};
config.macros.edit.editFieldPlugin_savedHandler=config.macros.edit.handler;
config.macros.edit.cancelMsg = "Abandon changes to %0@%1?";
config.macros.edit.saveMsg = "Save changes to %0@%1?";
config.macros.edit.handler = function(place,macroName,params,wikifier,paramString,tiddler) {
// let core render input/textarea, then get resulting element
config.macros.edit.editFieldPlugin_savedHandler.apply(this,arguments);
var fieldType=params[0]=="text"||params[1]?'textarea':'input';
var elems=place.getElementsByTagName(fieldType); var e=elems[elems.length-1];
// extended fieldname@tiddlername handling
var parts=e.getAttribute("edit").split('@');
var field=parts[0];
var title=parts[1]||tiddler.title;
if (title=='here') title=tiddler.title;
// stop field from being saved with 'done' button
if (parts[1]) { e.setAttribute("edit",null); e.setAttribute("field",field); }
// save starting value and target tiddler
e.value=store.getValue(title,field)||e.value; // get field value
e.setAttribute("currval",e.value); // save starting value
e.setAttribute("tiddler",title);
// force height for textarea field
if (fieldType=="textarea" && params[1]) e.style.height=params[1]+"em";
// if viewing tiddler, add autosave handlers
var here=story.findContainingTiddler(place);
var isViewed=here&&here.getAttribute("template").indexOf("ViewTemplate")!=-1;
if (parts[1]||isViewed) { // remote reference or view mode editing...
story.setDirty(tiddler.title,false); // clear tiddler ("dirty") flag (set by core)
e.onkeydown=function(ev) { // ENTER key=save (for single-line input)
var event=ev?ev:window.event;
this.setAttribute("keyCode",event.keyCode); // save last keyCode (for blur)
if (event.keyCode==13 && this.nodeName.toUpperCase()!="TEXTAREA")
this.saveField(); // save input to tiddler field
}
e.onblur=function(ev) { // confirm input when focus moves away
var event=ev?ev:window.event;
var tid=this.getAttribute("tiddler"); if (!tid || !tid.length) return;
var field=this.getAttribute("edit")||this.getAttribute("field");
if (this.value==this.getAttribute("currval")) return; // no change
if (this.getAttribute("keyCode")=="27") { // if user pressed ESC
var msg=config.macros.edit.cancelMsg.format([field,tid]);
if (!msg.length || confirm(msg)) this.value=this.getAttribute("currval"); // reset value
this.id=new Date().getTime(); // set unique ID for delayed re-focus after blur
setTimeout("document.getElementById('"+this.id+"').focus()",1);
} else { // other focus change events
var msg=config.macros.edit.saveMsg.format([field,tid]);
if (!msg.length || confirm(msg)) this.saveField(); // save value
else this.value=this.getAttribute("currval");
}
};
e.saveField=function() { // unpack/validate attribs and then save the field
var tid=this.getAttribute("tiddler"); if (!tid || !tid.length) return;
var field=this.getAttribute("edit")||this.getAttribute("field");
var title=(field=="title")?this.value:tid;
if (!title.length) { // error: blank tiddler title
this.value=this.getAttribute("currval"); // reset value
this.id=new Date().getTime(); // set unique ID for delayed messages/refocus
setTimeout("displayMessage('Please enter a non-blank value')",1);
setTimeout("document.getElementById('"+this.id+"').focus()",2);
return;
}
config.macros.edit.saveField(tid,title,field,this.value);
this.setAttribute("currval",this.value); // remember new starting value
};
}
}
//}}}
//{{{
// save input value to tiddler field (create/touch/rename tiddler as needed)
config.macros.edit.saveField = function(tid,title,field,val) {
var t=store.getTiddler(tid);
store.suspendNotifications();
var anim=config.options.chkAnimate; config.options.chkAnimate=false; // suspend animation
var who=t&&config.options.chkForceMinorUpdate?t.modifier:config.options.txtUserName;
var when=t&&config.options.chkForceMinorUpdate?t.modified:new Date();
store.saveTiddler(t?tid:title,title,t?t.text:"",who,when,t?t.tags:[],t?t.fields:null);
store.setValue(title,field,val); // save field
if (tid!=title) // new title... show renamed tiddler in place of current one
{ story.displayTiddler(story.getTiddler(tid),title); story.closeTiddler(tid); }
if (field=="text") // content changed, refresh tiddler display
{ story.refreshTiddler(title,null,true); }
config.options.chkAnimate=anim; // resume animation
store.resumeNotifications();
store.notify(title,true);
}
//}}}
<!--{{{-->
<div class='toolbar' macro='toolbar [[ToolbarCommands::EditToolbar]]'></div>
<div class='title' macro='view title'></div>
<div class='editor' macro='edit title'></div>
<div macro='annotations'></div>
<div class='editor' macro='edit text'></div>
<div class='editor' macro='edit tags'></div><div class='editorFooter'><span macro='message views.editor.tagPrompt'></span><span macro='tagChooser excludeLists'></span></div>
<!--}}}-->
//{{{
config.macros.tabs.handler = function(place,macroName,params)
{
var cookie = params[0];
var numTabs = (params.length-1)/3;
var wrapper = createTiddlyElement(null,"div",null,"tabsetWrapper " + cookie);
var tabset = createTiddlyElement(wrapper,"div",null,"tabset");
tabset.setAttribute("cookie",cookie);
var validTab = false;
for(var t=0; t<numTabs; t++) {
var label = params[t*3+1];
var prompt = params[t*3+2];
var content = params[t*3+3];
var tab = createTiddlyButton(tabset,label,prompt,this.onClickTab,"tab tabUnselected",content);
tab.setAttribute("tab",label);
tab.setAttribute("content",content);
if ( cookie.toLowerCase().indexOf("edit") > -1 ) {
var edit = createTiddlyButton(tab,"","",function(e){story.displayTiddler(null,this.getAttribute("tabSource"),DEFAULT_EDIT_TEMPLATE);},"tabEdit");
edit.setAttribute("tabSource",content);
}
tab.title = prompt;
if(config.options[cookie] == label) { validTab = true; }
}
if(!validTab) { config.options[cookie] = params[1]; }
place.appendChild(wrapper);
this.switchTab(tabset,config.options[cookie]);
};
//}}}
!!Outline
!!Handouts and class materials
!!Links to more information
!Objectives
!Outline
!Activities
!Ideas
{{lechelp{
The ''Independent Study'' section is designed to help you __prepare__ for each class session. If you learn the basics //before// you come to class, we can use class time for more sophisticated and active learning. The focused readings, guide questions and list of key terms will help you direct your preparation appropriately. We will //not// go back over these basic ideas during class; you are expected to know them (a quiz could happen at any time!). You can test your ability to apply what you've learned with the application questions, which will often be discussed in class. Application questions will help you see if you can apply what you've learned and will often be discussed in class. You are encouraged to bring your notes to class in case you need them.
}}}
{{lecblurb{
''Context question'' Lecture introduction
}}}
!!Focused readings
{{smalltext{
all page numbers below are from //Microbiology: Diversity, Disease and the Environment// by Salyers and Whitt
}}}
!!Guide questions
!!Key terms
{{col3{
}}}
!!Application questions
<script>
var ctid = story.findContainingTiddler(place).getAttribute("tiddler");
var slideState = store.getValue(ctid,"slides");
if (slideState == "true" ) {
folder = ctid.toLowerCase();
folder = folder.replace(" ","%20");
linkpath = "web%20materials/" + folder + "/slides.pdf";
var slideLink = createTiddlyElement(place,"a",null,"fileLink","click here to download")
slideLink.href = linkpath;
slideLink.onclick = openInNewWindow;
var stext = "<html><br><iframe height = \"600\" width=\"800\" src=\"";
stext += linkpath + "\"></iframe></html>";
wikify(stext,place);
}
else {
wikify("//Slides for this class session have not yet been posted. Please check back later.//",place);
}
</script>
!!Review questions
#Question. +++*{{keyButton{[answer]}}}...
{{anstxt{
Answer.
}}}
===
!!Additional terms
{{col2{
}}}
!!Practice problems
!!Links to more information
!!Outline
!!Handouts and class materials
!!Links to more information
!Objectives
!Outline
!Activities
!Ideas
{{lechelp{
The ''Independent Study'' section is designed to help you __prepare__ for each class session. If you learn the basics //before// you come to class, we can use class time for more sophisticated and active learning. The focused readings, guide questions and list of key terms will help you direct your preparation appropriately. We will //not// go back over these basic ideas during class; you are expected to know them (a quiz could happen at any time!). You can test your ability to apply what you've learned with the application questions, which will often be discussed in class. Application questions will help you see if you can apply what you've learned and will often be discussed in class. You are encouraged to bring your notes to class in case you need them.
}}}
{{lecblurb{
''Context question'' Lecture introduction
}}}
!!Focused readings
{{smalltext{
all page numbers below are from //Microbiology: Diversity, Disease and the Environment// by Salyers and Whitt
}}}
!!Guide questions
!!Key terms
{{col3{
}}}
!!Application questions
<script>
var ctid = story.findContainingTiddler(place).getAttribute("tiddler");
var slideState = store.getValue(ctid,"slides");
if (slideState == "true" ) {
folder = ctid.toLowerCase();
folder = folder.replace(" ","%20");
linkpath = "web%20materials/" + folder + "/slides.pdf";
var slideLink = createTiddlyElement(place,"a",null,"fileLink","click here to download")
slideLink.href = linkpath;
slideLink.onclick = openInNewWindow;
var stext = "<html><br><iframe height = \"600\" width=\"800\" src=\"";
stext += linkpath + "\"></iframe></html>";
wikify(stext,place);
}
else {
wikify("//Slides for this class session have not yet been posted. Please check back later.//",place);
}
</script>
!!Review questions
#Question. +++*{{keyButton{[answer]}}}...
{{anstxt{
Answer.
}}}
===
!!Additional terms
{{col2{
}}}
!!Practice problems
!!Links to more information
!!Outline
!!Handouts and class materials
!!Links to more information
!Objectives
!Outline
!Activities
!Ideas
{{lechelp{
The ''Independent Study'' section is designed to help you __prepare__ for each class session. If you learn the basics //before// you come to class, we can use class time for more sophisticated and active learning. The focused readings, guide questions and list of key terms will help you direct your preparation appropriately. We will //not// go back over these basic ideas during class; you are expected to know them (a quiz could happen at any time!). You can test your ability to apply what you've learned with the application questions, which will often be discussed in class. Application questions will help you see if you can apply what you've learned and will often be discussed in class. You are encouraged to bring your notes to class in case you need them.
}}}
{{lecblurb{
''Context question'' Lecture introduction
}}}
!!Focused readings
{{smalltext{
all page numbers below are from //Microbiology: Diversity, Disease and the Environment// by Salyers and Whitt
}}}
!!Guide questions
!!Key terms
{{col3{
}}}
!!Application questions
<script>
var ctid = story.findContainingTiddler(place).getAttribute("tiddler");
var slideState = store.getValue(ctid,"slides");
if (slideState == "true" ) {
folder = ctid.toLowerCase();
folder = folder.replace(" ","%20");
linkpath = "web%20materials/" + folder + "/slides.pdf";
var slideLink = createTiddlyElement(place,"a",null,"fileLink","click here to download")
slideLink.href = linkpath;
slideLink.onclick = openInNewWindow;
var stext = "<html><br><iframe height = \"600\" width=\"800\" src=\"";
stext += linkpath + "\"></iframe></html>";
wikify(stext,place);
}
else {
wikify("//Slides for this class session have not yet been posted. Please check back later.//",place);
}
</script>
!!Review questions
#Question. +++*{{keyButton{[answer]}}}...
{{anstxt{
Answer.
}}}
===
!!Additional terms
{{col2{
}}}
!!Practice problems
!!Links to more information
/***
|Name|FileDropPlugin|
|Source|http://www.TiddlyTools.com/#FileDropPlugin|
|Version|2.1.4|
|Author|BradleyMeck and Eric Shulman|
|License|http://www.TiddlyTools.com/#LegalStatements|
|~CoreVersion|2.1|
|Type|plugin|
|Description|drag-and-drop files/directories to create tiddlers|
''requires FireFox or another Mozilla-compatible browser.''
!!!!!Usage
<<<
This plugin automatically creates tiddlers from files that are dropped onto an open TiddlyWiki document. You can drop multiple selected files and/or folders to create many tiddlers at once. New tiddler titles are created using the filename of each dropped file (i.e., omitting the path). If a title is already in use, you are prompted to enter a new title for that file. If you drop a folder, you will be asked if you want to create a simple 'directory list' of files in a single tiddler or create one tiddler for each file in that folder.
By default, it is assumed that all dropped files contain text. However, if [[AttachFilePlugin]], [[AttachFilePluginFormatters]] and [[AttachFileMIMETypes]] are installed, then you can drop ''//binary data files//'' as well as text files. If the MIME type of a dropped file is not "text/plain", then AttachFilePlugin is used to create an 'attachment' tiddler, rather than creating a simple text tiddler.
When creating text tiddlers, you can embed a //link// to the original external file at the top of the new tiddler, in addition to (or instead of) the text content itself. The format for this link (see Configuration, below) uses embedded ''//replacement markers//'' that allow you to generate a variety of wiki-formatted output, where:
*%0 = filename (without path)
*%1 = local """file://...""" URL
*%2 = local path and filename (OS-native format)
*%3 = relative path (if subdirectory of current document directory)
*%4 = file size
*%5 = file date
*%6 = current date
*%7 = current ~TiddlyWiki username
*\n = newline
By default, the link format uses the filename (%0) and local URL (%1), enclosed within a //hidden section// syntax, like this:
{{{
/%
!link
[[%0|%1]]
!end
%/
}}}
This permits the link to be embedded along with the text content, without changing the appearance of that content when the tiddler is viewed. To display the link in your tiddler content, use:
{{{
<<tiddler TiddlerName##link>>
}}}
<<<
!!!!!Configuration
<<<
__FileDropPlugin options:__
<<option chkFileDropContent>>Copy file content into tiddlers if smaller than: <<option txtFileDropDataLimit>> bytes
//(note: excess text content will be truncated, oversized binary files will skipped, 0=no limit)//
<<option chkFileDropLink>>Generate external links to files, using this format:{{editor{<html><nowiki><textarea rows="4" onchange="
config.macros.option.propagateOption('txtFileDropLinkFormat','value',this.value.escapeLineBreaks(),'input');
"></textarea></html><<tiddler {{
var ta=place.lastChild.getElementsByTagName('textarea')[0];
var v=config.options.txtFileDropLinkFormat.unescapeLineBreaks();
ta.value=v;
"";}}>>}}}<<option chkFileDropTrimFilename>>Omit file extensions from tiddler titles
<<option chkFileDropDisplay>>Automatically display newly created tiddlers
Tag newly created tiddlers with: <<option txtFileDropTags>>
__FileDropPlugin+AttachFilePlugin options:__ //(binary file data as encoded 'base64' text)//
<<option chkFileDropAttachLocalLink>> attachment includes reference to local path/filename
>Note: if the plugin does not seem to work, enter ''about:config'' in the Firefox address bar, and make sure that {{{signed.applets.codebase_principal_support}}} is set to ''true''
<<<
!!!!!Examples (custom handler functions)
<<<
Adds a single file with confirmation and prompting for title:
{{{
config.macros.fileDrop.addEventListener('application/x-moz-file',
function(nsiFile) {
var msg='You have dropped the file:\n'
+nsiFile.path+'\n'
+'onto the page, it will be imported as a tiddler. Is that ok?'
if(confirm(msg)) {
var newDate = new Date();
var title = prompt('what would you like to name the tiddler?');
store.saveTiddler(title,title,loadFile(nsiFile.path),config.options.txtUserName,newDate,[]);
}
return true;
});
}}}
Adds a single file without confirmation, using path/filename as tiddler title:
{{{
config.macros.fileDrop.addEventListener('application/x-moz-file',
function(nsiFile) {
var newDate = new Date();
store.saveTiddler(nsiFile.path,nsiFile.path,loadFile(nsiFile.path),config.options.txtUserName,newDate,[]);
story.displayTiddler(null,nsiFile.path)
return true;
});
}}}
<<<
!!!!!Revisions
<<<
2010.03.06 2.1.4 added event listener for 'dragover' (for FireFox 3.6+)
2009.10.10 2.1.3 fixed IE code error
2009.10.08 2.1.2 fixed chkFileDropContent bypass handling for binary attachments
2009.10.07 2.1.0 added chkFileDropContent and chkFileDropLink/txtFileDropLinkFormat
2009.08.19 2.0.0 fixed event listener registration for FireFox 3.5+. Also, merged with FileDropPluginConfig, with code cleanup/reduction
2008.08.11 1.5.1 added chkFileDropAttachLocalLink option to allow suppression of local path/file link
2007.xx.xx *.*.* add suspend/resume of notifications to improve performance when multiple files are handled
2007.01.01 0.9.9 extensions for AttachFilePlugin
2006.11.04 0.1.1 initial release by Bradley Meck
<<<
!!!!!Code
***/
//{{{
version.extensions.FileDropPlugin={major:2, minor:1, revision:4, date: new Date(2010,3,6)};
config.macros.fileDrop = {
customDropHandlers: [],
addEventListener: function(paramflavor,func,inFront) {
var obj={}; obj.flavor=paramflavor; obj.handler=func;
if (!inFront) this.customDropHandlers.push(obj);
else this.customDropHandlers.shift(obj);
},
dragDropHandler: function(evt) {
netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect');
var dragService = Components.classes['@mozilla.org/widget/dragservice;1'].getService(Components.interfaces.nsIDragService);
var dragSession = dragService.getCurrentSession();
var transferObject = Components.classes['@mozilla.org/widget/transferable;1'].createInstance();
transferObject = transferObject.QueryInterface(Components.interfaces.nsITransferable);
transferObject.addDataFlavor('application/x-moz-file');
var numItems = dragSession.numDropItems;
if (numItems>1) {
clearMessage();
displayMessage('Reading '+numItems+' files...');
store.suspendNotifications();
}
for (var i = 0; i < numItems; i++) {
dragSession.getData(transferObject, i);
var dataObj = {};
var dropSizeObj = {};
for(var ind=0; ind<config.macros.fileDrop.customDropHandlers.length; ind++) {
var item = config.macros.fileDrop.customDropHandlers[ind];
if(dragSession.isDataFlavorSupported(item.flavor)) {
transferObject.getTransferData(item.flavor, dataObj, dropSizeObj);
var droppedFile = dataObj.value.QueryInterface(Components.interfaces.nsIFile);
var result = item.handler.call(item,droppedFile);
evt.stopPropagation();
evt.preventDefault();
if (result) break;
}
}
}
if (numItems>1) {
store.resumeNotifications();
store.notifyAll();
displayMessage(numItems+' files have been processed');
}
}
}
//}}}
/***
!!!!!window event handlers
***/
//{{{
if(!window.event) {
window.addEventListener('dragdrop', // FireFox3.1-
config.macros.fileDrop.dragDropHandler, true);
window.addEventListener('drop', // FireFox3.5+
config.macros.fileDrop.dragDropHandler, true);
window.addEventListener('dragover', // FireFox3.6+
function(e){e.stopPropagation();e.preventDefault();}, true);
}
//}}}
/***
!!!!!handler for files, directories and binary attachments (see [[AttachFilePlugin]])
***/
//{{{
var defaults={
chkFileDropDisplay: true,
chkFileDropTrimFilename: false,
chkFileDropContent: true,
chkFileDropLink: true,
txtFileDropLinkFormat: '/%\\n!link\\n[[%0|%1]]\\n!end\\n%/',
txtFileDropDataLimit: '32768',
chkFileDropAttachLocalLink: true,
txtFileDropTags: ''
};
for (var id in defaults) if (config.options[id]===undefined)
config.options[id]=defaults[id];
config.macros.fileDrop.addEventListener('application/x-moz-file',function(nsiFile) {
var co=config.options; // abbrev
var header='Index of %0\n^^(as of %1)^^\n|!filename| !size | !modified |\n';
var item='|[[%0|%1]]| %2|%3|\n';
var footer='Total of %0 bytes in %1 files\n';
var now=new Date();
var files=[nsiFile];
if (nsiFile.isDirectory()) {
var folder=nsiFile.directoryEntries;
var files=[];
while (folder.hasMoreElements()) {
var f=folder.getNext().QueryInterface(Components.interfaces.nsILocalFile);
if (f instanceof Components.interfaces.nsILocalFile && !f.isDirectory()) files.push(f);
}
var msg=nsiFile.path.replace(/\\/g,'/')+'\n\n';
msg+='contains '+files.length+' files... ';
msg+='select OK to attach all files or CANCEL to create a list...';
if (!confirm(msg)) { // create a list in a tiddler
var title=nsiFile.leafName; // tiddler name is last directory name in path
while (title && title.length && store.tiddlerExists(title)) {
if (confirm(config.messages.overwriteWarning.format([title]))) break;
title=prompt('Enter a new tiddler title',nsiFile.path.replace(/\\/g,'/'));
}
if (!title || !title.length) return true; // cancelled
var text=header.format([nsiFile.path.replace(/\\/g,'/'),now.toLocaleString()]);
var total=0;
for (var i=0; i<files.length; i++) { var f=files[i];
var name=f.leafName;
if (co.chkFileDropTrimFilename)
{ var p=name.split('.'); if (p.length>1) p.pop(); name=p.join('.'); }
var path='file:///'+f.path.replace(/\\/g,'/');
var size=f.fileSize; total+=size;
var when=new Date(f.lastModifiedTime).formatString('YYYY.0MM.0DD 0hh:0mm:0ss');
text+=item.format([name,path,size,when]);
}
text+=footer.format([total,files.length]);
var newtags=co.txtFileDropTags?co.txtFileDropTags.readBracketedList():[];
store.saveTiddler(null,title,text,co.txtUserName,now,newtags);
if (co.chkFileDropDisplay) story.displayTiddler(null,title);
return true;
}
}
if (files.length>1) store.suspendNotifications();
for (i=0; i<files.length; i++) {
var file=files[i];
if (file.isDirectory()) continue; // skip over nested directories
var type='text/plain';
var title=file.leafName; // tiddler name is file name
if (co.chkFileDropTrimFilename)
{ var p=title.split('.'); if (p.length>1) p.pop(); title=p.join('.'); }
var name=file.leafName;
var path=file.path;
var url='file:///'+path.replace(/\\/g,'/');
var size=file.fileSize;
var when=new Date(file.lastModifiedTime);
var now=new Date();
var who=config.options.txtUserName;
var h=document.location.href;
var cwd=getLocalPath(decodeURIComponent(h.substr(0,h.lastIndexOf('/')+1)));
var relpath=path.startsWith(cwd)?'./'+path.substr(cwd.length):path;
while (title && title.length && store.tiddlerExists(title)) {
if (confirm(config.messages.overwriteWarning.format([title]))) break;
title=prompt('Enter a new tiddler title',path.replace(/\\/g,'/'));
}
if (!title || !title.length) continue; // cancelled
if (config.macros.attach) {
type=config.macros.attach.getMIMEType(name,'');
if (!type.length)
type=prompt('Unknown file type. Enter a MIME type','text/plain');
if (!type||!type.length) continue; // cancelled
}
var newtags=co.txtFileDropTags?co.txtFileDropTags.readBracketedList():[];
if (type=='text/plain' || !co.chkFileDropContent) {
var txt=''; var fmt=co.txtFileDropLinkFormat.unescapeLineBreaks();
if (co.chkFileDropLink) txt+=fmt.format([name,url,path,relpath,size,when,now,who]);
if (co.chkFileDropContent) {
var out=loadFile(path); var lim=co.txtFileDropDataLimit;
txt+=co.txtFileDropDataLimit?out.substr(0,lim):out;
if (size>lim) txt+='\n----\nfilesize ('+size+')'
+' is larger than FileDrop limit ('+lim+')...\n'
+'additional content has been omitted';
}
store.saveTiddler(null,title,txt,co.txtUserName,now,newtags);
} else {
var embed=co.chkFileDropContent
&& (!co.txtFileDropDataLimit||size<co.txtFileDropDataLimit);
newtags.push('attachment'); newtags.push('excludeMissing');
config.macros.attach.createAttachmentTiddler(path,
now.formatString(config.macros.timeline.dateFormat),
'attached by FileDropPlugin', newtags, title,
embed, co.chkFileDropAttachLocalLink, false,
relpath, '', type,!co.chkFileDropDisplay);
}
if (co.chkFileDropDisplay) story.displayTiddler(null,title);
}
if (files.length>1) { store.resumeNotifications(); store.notifyAll(); }
return true;
})
//}}}
@font-face {
font-family: 'AvantGarde';
font-style: normal;
font-weight: normal;
src: local('fonts/AVGARDN.ttf'), url('fonts/AVGARDN.ttf') format('truetype');
}
@font-face {
font-family: 'AvantGarde';
font-style: italic;
font-weight: normal;
src: local('fonts/AVGARDNI.ttf'), url('fonts/AVGARDNI.ttf') format('truetype');
}
@font-face {
font-family: 'AvantGarde';
font-style: normal;
font-weight: bold;
src: local('fonts/AVGARDD.ttf'), url('fonts/AVGARDD.ttf') format('truetype');
}
@font-face {
font-family: 'AvantGarde';
font-style: italic;
font-weight: bold;
src: local('fonts/AVGARDDO.ttf'), url('fonts/AVGARDDO.ttf') format('truetype');
}
@font-face {
font-family: 'Calibri';
font-style: normal;
font-weight: normal;
src: local('fonts/calibri.ttf'), url('fonts/calibri.ttf') format('truetype');
}
@font-face {
font-family: 'Calibri';
font-style: italic;
font-weight: normal;
src: local('fonts/calibrii.ttf'), url('fonts/calibrii.ttf') format('truetype');
}
@font-face {
font-family: 'Calibri';
font-style: normal;
font-weight: bold;
src: local('fonts/calibrib.ttf'), url('fonts/calibrib.ttf') format('truetype');
}
@font-face {
font-family: 'Calibri';
font-style: italic;
font-weight: bold;
src: local('fonts/calibriz.ttf'), url('fonts/calibriz.ttf') format('truetype');
}
/***
|''Name:''|ForEachTiddlerPlugin|
|''Version:''|1.0.8 (2007-04-12)|
|''Source:''|http://tiddlywiki.abego-software.de/#ForEachTiddlerPlugin|
|''Author:''|UdoBorkowski (ub [at] abego-software [dot] de)|
|''Licence:''|[[BSD open source license (abego Software)|http://www.abego-software.de/legal/apl-v10.html]]|
|''Copyright:''|© 2005-2007 [[abego Software|http://www.abego-software.de]]|
|''TiddlyWiki:''|1.2.38+, 2.0|
|''Browser:''|Firefox 1.0.4+; Firefox 1.5; InternetExplorer 6.0|
!Description
Create customizable lists, tables etc. for your selections of tiddlers. Specify the tiddlers to include and their order through a powerful language.
''Syntax:''
|>|{{{<<}}}''forEachTiddler'' [''in'' //tiddlyWikiPath//] [''where'' //whereCondition//] [''sortBy'' //sortExpression// [''ascending'' //or// ''descending'']] [''script'' //scriptText//] [//action// [//actionParameters//]]{{{>>}}}|
|//tiddlyWikiPath//|The filepath to the TiddlyWiki the macro should work on. When missing the current TiddlyWiki is used.|
|//whereCondition//|(quoted) JavaScript boolean expression. May refer to the build-in variables {{{tiddler}}} and {{{context}}}.|
|//sortExpression//|(quoted) JavaScript expression returning "comparable" objects (using '{{{<}}}','{{{>}}}','{{{==}}}'. May refer to the build-in variables {{{tiddler}}} and {{{context}}}.|
|//scriptText//|(quoted) JavaScript text. Typically defines JavaScript functions that are called by the various JavaScript expressions (whereClause, sortClause, action arguments,...)|
|//action//|The action that should be performed on every selected tiddler, in the given order. By default the actions [[addToList|AddToListAction]] and [[write|WriteAction]] are supported. When no action is specified [[addToList|AddToListAction]] is used.|
|//actionParameters//|(action specific) parameters the action may refer while processing the tiddlers (see action descriptions for details). <<tiddler [[JavaScript in actionParameters]]>>|
|>|~~Syntax formatting: Keywords in ''bold'', optional parts in [...]. 'or' means that exactly one of the two alternatives must exist.~~|
See details see [[ForEachTiddlerMacro]] and [[ForEachTiddlerExamples]].
!Revision history
* v1.0.8 (2007-04-12)
** Adapted to latest TiddlyWiki 2.2 Beta importTiddlyWiki API (introduced with changeset 2004). TiddlyWiki 2.2 Beta builds prior to changeset 2004 are no longer supported (but TiddlyWiki 2.1 and earlier, of cause)
* v1.0.7 (2007-03-28)
** Also support "pre" formatted TiddlyWikis (introduced with TW 2.2) (when using "in" clause to work on external tiddlers)
* v1.0.6 (2006-09-16)
** Context provides "viewerTiddler", i.e. the tiddler used to view the macro. Most times this is equal to the "inTiddler", but when using the "tiddler" macro both may be different.
** Support "begin", "end" and "none" expressions in "write" action
* v1.0.5 (2006-02-05)
** Pass tiddler containing the macro with wikify, context object also holds reference to tiddler containing the macro ("inTiddler"). Thanks to SimonBaird.
** Support Firefox 1.5.0.1
** Internal
*** Make "JSLint" conform
*** "Only install once"
* v1.0.4 (2006-01-06)
** Support TiddlyWiki 2.0
* v1.0.3 (2005-12-22)
** Features:
*** Write output to a file supports multi-byte environments (Thanks to Bram Chen)
*** Provide API to access the forEachTiddler functionality directly through JavaScript (see getTiddlers and performMacro)
** Enhancements:
*** Improved error messages on InternetExplorer.
* v1.0.2 (2005-12-10)
** Features:
*** context object also holds reference to store (TiddlyWiki)
** Fixed Bugs:
*** ForEachTiddler 1.0.1 has broken support on win32 Opera 8.51 (Thanks to BrunoSabin for reporting)
* v1.0.1 (2005-12-08)
** Features:
*** Access tiddlers stored in separated TiddlyWikis through the "in" option. I.e. you are no longer limited to only work on the "current TiddlyWiki".
*** Write output to an external file using the "toFile" option of the "write" action. With this option you may write your customized tiddler exports.
*** Use the "script" section to define "helper" JavaScript functions etc. to be used in the various JavaScript expressions (whereClause, sortClause, action arguments,...).
*** Access and store context information for the current forEachTiddler invocation (through the build-in "context" object) .
*** Improved script evaluation (for where/sort clause and write scripts).
* v1.0.0 (2005-11-20)
** initial version
!Code
***/
//{{{
//============================================================================
//============================================================================
// ForEachTiddlerPlugin
//============================================================================
//============================================================================
// Only install once
if (!version.extensions.ForEachTiddlerPlugin) {
if (!window.abego) window.abego = {};
version.extensions.ForEachTiddlerPlugin = {
major: 1, minor: 0, revision: 8,
date: new Date(2007,3,12),
source: "http://tiddlywiki.abego-software.de/#ForEachTiddlerPlugin",
licence: "[[BSD open source license (abego Software)|http://www.abego-software.de/legal/apl-v10.html]]",
copyright: "Copyright (c) abego Software GmbH, 2005-2007 (www.abego-software.de)"
};
// For backward compatibility with TW 1.2.x
//
if (!TiddlyWiki.prototype.forEachTiddler) {
TiddlyWiki.prototype.forEachTiddler = function(callback) {
for(var t in this.tiddlers) {
callback.call(this,t,this.tiddlers[t]);
}
};
}
//============================================================================
// forEachTiddler Macro
//============================================================================
version.extensions.forEachTiddler = {
major: 1, minor: 0, revision: 8, date: new Date(2007,3,12), provider: "http://tiddlywiki.abego-software.de"};
// ---------------------------------------------------------------------------
// Configurations and constants
// ---------------------------------------------------------------------------
config.macros.forEachTiddler = {
// Standard Properties
label: "forEachTiddler",
prompt: "Perform actions on a (sorted) selection of tiddlers",
// actions
actions: {
addToList: {},
write: {}
}
};
// ---------------------------------------------------------------------------
// The forEachTiddler Macro Handler
// ---------------------------------------------------------------------------
config.macros.forEachTiddler.getContainingTiddler = function(e) {
while(e && !hasClass(e,"tiddler"))
e = e.parentNode;
var title = e ? e.getAttribute("tiddler") : null;
return title ? store.getTiddler(title) : null;
};
config.macros.forEachTiddler.handler = function(place,macroName,params,wikifier,paramString,tiddler) {
// config.macros.forEachTiddler.traceMacroCall(place,macroName,params,wikifier,paramString,tiddler);
if (!tiddler) tiddler = config.macros.forEachTiddler.getContainingTiddler(place);
// --- Parsing ------------------------------------------
var i = 0; // index running over the params
// Parse the "in" clause
var tiddlyWikiPath = undefined;
if ((i < params.length) && params[i] == "in") {
i++;
if (i >= params.length) {
this.handleError(place, "TiddlyWiki path expected behind 'in'.");
return;
}
tiddlyWikiPath = this.paramEncode((i < params.length) ? params[i] : "");
i++;
}
// Parse the where clause
var whereClause ="true";
if ((i < params.length) && params[i] == "where") {
i++;
whereClause = this.paramEncode((i < params.length) ? params[i] : "");
i++;
}
// Parse the sort stuff
var sortClause = null;
var sortAscending = true;
if ((i < params.length) && params[i] == "sortBy") {
i++;
if (i >= params.length) {
this.handleError(place, "sortClause missing behind 'sortBy'.");
return;
}
sortClause = this.paramEncode(params[i]);
i++;
if ((i < params.length) && (params[i] == "ascending" || params[i] == "descending")) {
sortAscending = params[i] == "ascending";
i++;
}
}
// Parse the script
var scriptText = null;
if ((i < params.length) && params[i] == "script") {
i++;
scriptText = this.paramEncode((i < params.length) ? params[i] : "");
i++;
}
// Parse the action.
// When we are already at the end use the default action
var actionName = "addToList";
if (i < params.length) {
if (!config.macros.forEachTiddler.actions[params[i]]) {
this.handleError(place, "Unknown action '"+params[i]+"'.");
return;
} else {
actionName = params[i];
i++;
}
}
// Get the action parameter
// (the parsing is done inside the individual action implementation.)
var actionParameter = params.slice(i);
// --- Processing ------------------------------------------
try {
this.performMacro({
place: place,
inTiddler: tiddler,
whereClause: whereClause,
sortClause: sortClause,
sortAscending: sortAscending,
actionName: actionName,
actionParameter: actionParameter,
scriptText: scriptText,
tiddlyWikiPath: tiddlyWikiPath});
} catch (e) {
this.handleError(place, e);
}
};
// Returns an object with properties "tiddlers" and "context".
// tiddlers holds the (sorted) tiddlers selected by the parameter,
// context the context of the execution of the macro.
//
// The action is not yet performed.
//
// @parameter see performMacro
//
config.macros.forEachTiddler.getTiddlersAndContext = function(parameter) {
var context = config.macros.forEachTiddler.createContext(parameter.place, parameter.whereClause, parameter.sortClause, parameter.sortAscending, parameter.actionName, parameter.actionParameter, parameter.scriptText, parameter.tiddlyWikiPath, parameter.inTiddler);
var tiddlyWiki = parameter.tiddlyWikiPath ? this.loadTiddlyWiki(parameter.tiddlyWikiPath) : store;
context["tiddlyWiki"] = tiddlyWiki;
// Get the tiddlers, as defined by the whereClause
var tiddlers = this.findTiddlers(parameter.whereClause, context, tiddlyWiki);
context["tiddlers"] = tiddlers;
// Sort the tiddlers, when sorting is required.
if (parameter.sortClause) {
this.sortTiddlers(tiddlers, parameter.sortClause, parameter.sortAscending, context);
}
return {tiddlers: tiddlers, context: context};
};
// Returns the (sorted) tiddlers selected by the parameter.
//
// The action is not yet performed.
//
// @parameter see performMacro
//
config.macros.forEachTiddler.getTiddlers = function(parameter) {
return this.getTiddlersAndContext(parameter).tiddlers;
};
// Performs the macros with the given parameter.
//
// @param parameter holds the parameter of the macro as separate properties.
// The following properties are supported:
//
// place
// whereClause
// sortClause
// sortAscending
// actionName
// actionParameter
// scriptText
// tiddlyWikiPath
//
// All properties are optional.
// For most actions the place property must be defined.
//
config.macros.forEachTiddler.performMacro = function(parameter) {
var tiddlersAndContext = this.getTiddlersAndContext(parameter);
// Perform the action
var actionName = parameter.actionName ? parameter.actionName : "addToList";
var action = config.macros.forEachTiddler.actions[actionName];
if (!action) {
this.handleError(parameter.place, "Unknown action '"+actionName+"'.");
return;
}
var actionHandler = action.handler;
actionHandler(parameter.place, tiddlersAndContext.tiddlers, parameter.actionParameter, tiddlersAndContext.context);
};
// ---------------------------------------------------------------------------
// The actions
// ---------------------------------------------------------------------------
// Internal.
//
// --- The addToList Action -----------------------------------------------
//
config.macros.forEachTiddler.actions.addToList.handler = function(place, tiddlers, parameter, context) {
// Parse the parameter
var p = 0;
// Check for extra parameters
if (parameter.length > p) {
config.macros.forEachTiddler.createExtraParameterErrorElement(place, "addToList", parameter, p);
return;
}
// Perform the action.
var list = document.createElement("ul");
place.appendChild(list);
for (var i = 0; i < tiddlers.length; i++) {
var tiddler = tiddlers[i];
var listItem = document.createElement("li");
list.appendChild(listItem);
createTiddlyLink(listItem, tiddler.title, true);
}
};
abego.parseNamedParameter = function(name, parameter, i) {
var beginExpression = null;
if ((i < parameter.length) && parameter[i] == name) {
i++;
if (i >= parameter.length) {
throw "Missing text behind '%0'".format([name]);
}
return config.macros.forEachTiddler.paramEncode(parameter[i]);
}
return null;
}
// Internal.
//
// --- The write Action ---------------------------------------------------
//
config.macros.forEachTiddler.actions.write.handler = function(place, tiddlers, parameter, context) {
// Parse the parameter
var p = 0;
if (p >= parameter.length) {
this.handleError(place, "Missing expression behind 'write'.");
return;
}
var textExpression = config.macros.forEachTiddler.paramEncode(parameter[p]);
p++;
// Parse the "begin" option
var beginExpression = abego.parseNamedParameter("begin", parameter, p);
if (beginExpression !== null)
p += 2;
var endExpression = abego.parseNamedParameter("end", parameter, p);
if (endExpression !== null)
p += 2;
var noneExpression = abego.parseNamedParameter("none", parameter, p);
if (noneExpression !== null)
p += 2;
// Parse the "toFile" option
var filename = null;
var lineSeparator = undefined;
if ((p < parameter.length) && parameter[p] == "toFile") {
p++;
if (p >= parameter.length) {
this.handleError(place, "Filename expected behind 'toFile' of 'write' action.");
return;
}
filename = config.macros.forEachTiddler.getLocalPath(config.macros.forEachTiddler.paramEncode(parameter[p]));
p++;
if ((p < parameter.length) && parameter[p] == "withLineSeparator") {
p++;
if (p >= parameter.length) {
this.handleError(place, "Line separator text expected behind 'withLineSeparator' of 'write' action.");
return;
}
lineSeparator = config.macros.forEachTiddler.paramEncode(parameter[p]);
p++;
}
}
// Check for extra parameters
if (parameter.length > p) {
config.macros.forEachTiddler.createExtraParameterErrorElement(place, "write", parameter, p);
return;
}
// Perform the action.
var func = config.macros.forEachTiddler.getEvalTiddlerFunction(textExpression, context);
var count = tiddlers.length;
var text = "";
if (count > 0 && beginExpression)
text += config.macros.forEachTiddler.getEvalTiddlerFunction(beginExpression, context)(undefined, context, count, undefined);
for (var i = 0; i < count; i++) {
var tiddler = tiddlers[i];
text += func(tiddler, context, count, i);
}
if (count > 0 && endExpression)
text += config.macros.forEachTiddler.getEvalTiddlerFunction(endExpression, context)(undefined, context, count, undefined);
if (count == 0 && noneExpression)
text += config.macros.forEachTiddler.getEvalTiddlerFunction(noneExpression, context)(undefined, context, count, undefined);
if (filename) {
if (lineSeparator !== undefined) {
lineSeparator = lineSeparator.replace(/\\n/mg, "\n").replace(/\\r/mg, "\r");
text = text.replace(/\n/mg,lineSeparator);
}
saveFile(filename, convertUnicodeToUTF8(text));
} else {
var wrapper = createTiddlyElement(place, "span");
wikify(text, wrapper, null/* highlightRegExp */, context.inTiddler);
}
};
// ---------------------------------------------------------------------------
// Helpers
// ---------------------------------------------------------------------------
// Internal.
//
config.macros.forEachTiddler.createContext = function(placeParam, whereClauseParam, sortClauseParam, sortAscendingParam, actionNameParam, actionParameterParam, scriptText, tiddlyWikiPathParam, inTiddlerParam) {
return {
place : placeParam,
whereClause : whereClauseParam,
sortClause : sortClauseParam,
sortAscending : sortAscendingParam,
script : scriptText,
actionName : actionNameParam,
actionParameter : actionParameterParam,
tiddlyWikiPath : tiddlyWikiPathParam,
inTiddler : inTiddlerParam, // the tiddler containing the <<forEachTiddler ...>> macro call.
viewerTiddler : config.macros.forEachTiddler.getContainingTiddler(placeParam) // the tiddler showing the forEachTiddler result
};
};
// Internal.
//
// Returns a TiddlyWiki with the tiddlers loaded from the TiddlyWiki of
// the given path.
//
config.macros.forEachTiddler.loadTiddlyWiki = function(path, idPrefix) {
if (!idPrefix) {
idPrefix = "store";
}
var lenPrefix = idPrefix.length;
// Read the content of the given file
var content = loadFile(this.getLocalPath(path));
if(content === null) {
throw "TiddlyWiki '"+path+"' not found.";
}
var tiddlyWiki = new TiddlyWiki();
// Starting with TW 2.2 there is a helper function to import the tiddlers
if (tiddlyWiki.importTiddlyWiki) {
if (!tiddlyWiki.importTiddlyWiki(content))
throw "File '"+path+"' is not a TiddlyWiki.";
tiddlyWiki.dirty = false;
return tiddlyWiki;
}
// The legacy code, for TW < 2.2
// Locate the storeArea div's
var posOpeningDiv = content.indexOf(startSaveArea);
var posClosingDiv = content.lastIndexOf(endSaveArea);
if((posOpeningDiv == -1) || (posClosingDiv == -1)) {
throw "File '"+path+"' is not a TiddlyWiki.";
}
var storageText = content.substr(posOpeningDiv + startSaveArea.length, posClosingDiv);
// Create a "div" element that contains the storage text
var myStorageDiv = document.createElement("div");
myStorageDiv.innerHTML = storageText;
myStorageDiv.normalize();
// Create all tiddlers in a new TiddlyWiki
// (following code is modified copy of TiddlyWiki.prototype.loadFromDiv)
var store = myStorageDiv.childNodes;
for(var t = 0; t < store.length; t++) {
var e = store[t];
var title = null;
if(e.getAttribute)
title = e.getAttribute("tiddler");
if(!title && e.id && e.id.substr(0,lenPrefix) == idPrefix)
title = e.id.substr(lenPrefix);
if(title && title !== "") {
var tiddler = tiddlyWiki.createTiddler(title);
tiddler.loadFromDiv(e,title);
}
}
tiddlyWiki.dirty = false;
return tiddlyWiki;
};
// Internal.
//
// Returns a function that has a function body returning the given javaScriptExpression.
// The function has the parameters:
//
// (tiddler, context, count, index)
//
config.macros.forEachTiddler.getEvalTiddlerFunction = function (javaScriptExpression, context) {
var script = context["script"];
var functionText = "var theFunction = function(tiddler, context, count, index) { return "+javaScriptExpression+"}";
var fullText = (script ? script+";" : "")+functionText+";theFunction;";
return eval(fullText);
};
// Internal.
//
config.macros.forEachTiddler.findTiddlers = function(whereClause, context, tiddlyWiki) {
var result = [];
var func = config.macros.forEachTiddler.getEvalTiddlerFunction(whereClause, context);
tiddlyWiki.forEachTiddler(function(title,tiddler) {
if (func(tiddler, context, undefined, undefined)) {
result.push(tiddler);
}
});
return result;
};
// Internal.
//
config.macros.forEachTiddler.createExtraParameterErrorElement = function(place, actionName, parameter, firstUnusedIndex) {
var message = "Extra parameter behind '"+actionName+"':";
for (var i = firstUnusedIndex; i < parameter.length; i++) {
message += " "+parameter[i];
}
this.handleError(place, message);
};
// Internal.
//
config.macros.forEachTiddler.sortAscending = function(tiddlerA, tiddlerB) {
var result =
(tiddlerA.forEachTiddlerSortValue == tiddlerB.forEachTiddlerSortValue)
? 0
: (tiddlerA.forEachTiddlerSortValue < tiddlerB.forEachTiddlerSortValue)
? -1
: +1;
return result;
};
// Internal.
//
config.macros.forEachTiddler.sortDescending = function(tiddlerA, tiddlerB) {
var result =
(tiddlerA.forEachTiddlerSortValue == tiddlerB.forEachTiddlerSortValue)
? 0
: (tiddlerA.forEachTiddlerSortValue < tiddlerB.forEachTiddlerSortValue)
? +1
: -1;
return result;
};
// Internal.
//
config.macros.forEachTiddler.sortTiddlers = function(tiddlers, sortClause, ascending, context) {
// To avoid evaluating the sortClause whenever two items are compared
// we pre-calculate the sortValue for every item in the array and store it in a
// temporary property ("forEachTiddlerSortValue") of the tiddlers.
var func = config.macros.forEachTiddler.getEvalTiddlerFunction(sortClause, context);
var count = tiddlers.length;
var i;
for (i = 0; i < count; i++) {
var tiddler = tiddlers[i];
tiddler.forEachTiddlerSortValue = func(tiddler,context, undefined, undefined);
}
// Do the sorting
tiddlers.sort(ascending ? this.sortAscending : this.sortDescending);
// Delete the temporary property that holds the sortValue.
for (i = 0; i < tiddlers.length; i++) {
delete tiddlers[i].forEachTiddlerSortValue;
}
};
// Internal.
//
config.macros.forEachTiddler.trace = function(message) {
displayMessage(message);
};
// Internal.
//
config.macros.forEachTiddler.traceMacroCall = function(place,macroName,params) {
var message ="<<"+macroName;
for (var i = 0; i < params.length; i++) {
message += " "+params[i];
}
message += ">>";
displayMessage(message);
};
// Internal.
//
// Creates an element that holds an error message
//
config.macros.forEachTiddler.createErrorElement = function(place, exception) {
var message = (exception.description) ? exception.description : exception.toString();
return createTiddlyElement(place,"span",null,"forEachTiddlerError","<<forEachTiddler ...>>: "+message);
};
// Internal.
//
// @param place [may be null]
//
config.macros.forEachTiddler.handleError = function(place, exception) {
if (place) {
this.createErrorElement(place, exception);
} else {
throw exception;
}
};
// Internal.
//
// Encodes the given string.
//
// Replaces
// "$))" to ">>"
// "$)" to ">"
//
config.macros.forEachTiddler.paramEncode = function(s) {
var reGTGT = new RegExp("\\$\\)\\)","mg");
var reGT = new RegExp("\\$\\)","mg");
return s.replace(reGTGT, ">>").replace(reGT, ">");
};
// Internal.
//
// Returns the given original path (that is a file path, starting with "file:")
// as a path to a local file, in the systems native file format.
//
// Location information in the originalPath (i.e. the "#" and stuff following)
// is stripped.
//
config.macros.forEachTiddler.getLocalPath = function(originalPath) {
// Remove any location part of the URL
var hashPos = originalPath.indexOf("#");
if(hashPos != -1)
originalPath = originalPath.substr(0,hashPos);
// Convert to a native file format assuming
// "file:///x:/path/path/path..." - pc local file --> "x:\path\path\path..."
// "file://///server/share/path/path/path..." - FireFox pc network file --> "\\server\share\path\path\path..."
// "file:///path/path/path..." - mac/unix local file --> "/path/path/path..."
// "file://server/share/path/path/path..." - pc network file --> "\\server\share\path\path\path..."
var localPath;
if(originalPath.charAt(9) == ":") // pc local file
localPath = unescape(originalPath.substr(8)).replace(new RegExp("/","g"),"\\");
else if(originalPath.indexOf("file://///") === 0) // FireFox pc network file
localPath = "\\\\" + unescape(originalPath.substr(10)).replace(new RegExp("/","g"),"\\");
else if(originalPath.indexOf("file:///") === 0) // mac/unix local file
localPath = unescape(originalPath.substr(7));
else if(originalPath.indexOf("file:/") === 0) // mac/unix local file
localPath = unescape(originalPath.substr(5));
else // pc network file
localPath = "\\\\" + unescape(originalPath.substr(7)).replace(new RegExp("/","g"),"\\");
return localPath;
};
// ---------------------------------------------------------------------------
// Stylesheet Extensions (may be overridden by local StyleSheet)
// ---------------------------------------------------------------------------
//
setStylesheet(
".forEachTiddlerError{color: #ffffff;background-color: #880000;}",
"forEachTiddler");
//============================================================================
// End of forEachTiddler Macro
//============================================================================
//============================================================================
// String.startsWith Function
//============================================================================
//
// Returns true if the string starts with the given prefix, false otherwise.
//
version.extensions["String.startsWith"] = {major: 1, minor: 0, revision: 0, date: new Date(2005,11,20), provider: "http://tiddlywiki.abego-software.de"};
//
String.prototype.startsWith = function(prefix) {
var n = prefix.length;
return (this.length >= n) && (this.slice(0, n) == prefix);
};
//============================================================================
// String.endsWith Function
//============================================================================
//
// Returns true if the string ends with the given suffix, false otherwise.
//
version.extensions["String.endsWith"] = {major: 1, minor: 0, revision: 0, date: new Date(2005,11,20), provider: "http://tiddlywiki.abego-software.de"};
//
String.prototype.endsWith = function(suffix) {
var n = suffix.length;
return (this.length >= n) && (this.right(n) == suffix);
};
//============================================================================
// String.contains Function
//============================================================================
//
// Returns true when the string contains the given substring, false otherwise.
//
version.extensions["String.contains"] = {major: 1, minor: 0, revision: 0, date: new Date(2005,11,20), provider: "http://tiddlywiki.abego-software.de"};
//
String.prototype.contains = function(substring) {
return this.indexOf(substring) >= 0;
};
//============================================================================
// Array.indexOf Function
//============================================================================
//
// Returns the index of the first occurance of the given item in the array or
// -1 when no such item exists.
//
// @param item [may be null]
//
version.extensions["Array.indexOf"] = {major: 1, minor: 0, revision: 0, date: new Date(2005,11,20), provider: "http://tiddlywiki.abego-software.de"};
//
Array.prototype.indexOf = function(item) {
for (var i = 0; i < this.length; i++) {
if (this[i] == item) {
return i;
}
}
return -1;
};
//============================================================================
// Array.contains Function
//============================================================================
//
// Returns true when the array contains the given item, otherwise false.
//
// @param item [may be null]
//
version.extensions["Array.contains"] = {major: 1, minor: 0, revision: 0, date: new Date(2005,11,20), provider: "http://tiddlywiki.abego-software.de"};
//
Array.prototype.contains = function(item) {
return (this.indexOf(item) >= 0);
};
//============================================================================
// Array.containsAny Function
//============================================================================
//
// Returns true when the array contains at least one of the elements
// of the item. Otherwise (or when items contains no elements) false is returned.
//
version.extensions["Array.containsAny"] = {major: 1, minor: 0, revision: 0, date: new Date(2005,11,20), provider: "http://tiddlywiki.abego-software.de"};
//
Array.prototype.containsAny = function(items) {
for(var i = 0; i < items.length; i++) {
if (this.contains(items[i])) {
return true;
}
}
return false;
};
//============================================================================
// Array.containsAll Function
//============================================================================
//
// Returns true when the array contains all the items, otherwise false.
//
// When items is null false is returned (even if the array contains a null).
//
// @param items [may be null]
//
version.extensions["Array.containsAll"] = {major: 1, minor: 0, revision: 0, date: new Date(2005,11,20), provider: "http://tiddlywiki.abego-software.de"};
//
Array.prototype.containsAll = function(items) {
for(var i = 0; i < items.length; i++) {
if (!this.contains(items[i])) {
return false;
}
}
return true;
};
} // of "install only once"
// Used Globals (for JSLint) ==============
// ... DOM
/*global document */
// ... TiddlyWiki Core
/*global convertUnicodeToUTF8, createTiddlyElement, createTiddlyLink,
displayMessage, endSaveArea, hasClass, loadFile, saveFile,
startSaveArea, store, wikify */
//}}}
/***
!Licence and Copyright
Copyright (c) abego Software ~GmbH, 2005 ([[www.abego-software.de|http://www.abego-software.de]])
Redistribution and use in source and binary forms, with or without modification,
are permitted provided that the following conditions are met:
Redistributions of source code must retain the above copyright notice, this
list of conditions and the following disclaimer.
Redistributions in binary form must reproduce the above copyright notice, this
list of conditions and the following disclaimer in the documentation and/or other
materials provided with the distribution.
Neither the name of abego Software nor the names of its contributors may be
used to endorse or promote products derived from this software without specific
prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY
EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
DAMAGE.
***/
/***
|Name|FramedLinksPlugin|
|Source|http://www.TiddlyTools.com/#FramedLinksPlugin|
|Version|1.1.1|
|Author|Eric Shulman|
|License|http://www.TiddlyTools.com/#LegalStatements|
|~CoreVersion|2.1|
|Type|plugin|
|Description|clicking an external link opens an IFRAME following the link instead of opening a new tab/window|
This plugin causes clicks on external links to be rendered as inline frames (~IFRAMEs) instead of opening new browser tabs/windows.
!!!!!Usage
<<<
Use standard TiddlyWiki external link syntax into your tiddler content. If {{{chkFramedLinks}}} is enabled or the tiddler is tagged with 'framedLinks' (see Configuration), then whenever you click the external link an IFRAME will be dynamically added to the content. Clicking on the link again removes the IFRAME. Hold down any modifier (shift, control, or alt) while clicking a link ''temporarily'' bypasses the IFRAME handling and use the standard link handling behavior.
<<<
!!!!!Configuration
<<<
<<option chkFramedLinks>> display inline frames for all external links
{{{<<option chkFramedLinks>>}}}
<<option chkFramedLinksTag>> display inline frames for external links in tiddlers tagged with: <<option txtFramedLinksTag>>
{{{<<option chkFramedLinksTag>> <<option txtFramedLinksTag>>}}}
IFRAME size (CSS units: %, em, px, cm, in) - width: <<option txtFrameWidth>> height: <<option txtFrameHeight>>
{{{<<option txtFrameWidth>> <<option txtFrameHeight>>}}}
<<<
!!!!!Examples
<<<
Try these links:
*http://www.TiddlyWiki.com
*http://www.TiddlyTools.com
*http://groups.google.com/group/TiddlyWiki/topics
<<<
!!!!!Revisions
<<<
2008.11.14 [1.1.1] fixed handling for external links embedded in //shadow// tiddlers
2008.09.13 [1.1.0] added support to selectively enable embedded IFRAMEs if the containing tiddler is tagged with 'framedLinks'
2007.11.29 [1.0.5] added slider animation and improved CSS handling for IFRAME height/width to maximize display area
2007.11.29 [1.0.0] initial release
<<<
!!!!!Code
***/
//{{{
version.extensions.FramedLinksPlugin= {major: 1, minor: 1, revision: 1, date: new Date(2008,11,14)};
var co=config.options; // abbreviation
if (co.chkFramedLinks==undefined) co.chkFramedLinks=false;
if (co.chkFramedLinksTag==undefined) co.chkFramedLinksTag=true;
if (co.txtFramedLinksTag==undefined) co.txtFramedLinksTag="framedLinks";
if (co.txtFrameWidth==undefined) co.txtFrameWidth="100%";
if (co.txtFrameHeight==undefined) co.txtFrameHeight="80%";
window.framedLinks_createExternalLink=createExternalLink;
window.createExternalLink=function(place,url)
{
var link=this.framedLinks_createExternalLink.apply(this,arguments);
link.onclick=function(ev) { var e=ev?ev:window.event;
var co=config.options; // abbreviation
var here=story.findContainingTiddler(this);
if (here) var tid=store.getTiddler(here.getAttribute("tiddler"));
var enabled=co.chkFramedLinks || co.chkFramedLinksTag && tid && tid.isTagged(co.txtFramedLinksTag);
if (!enabled || e.ctrlKey || e.shiftKey || e.altKey) return; // BYPASS
var p=this.parentNode;
var f=this.nextSibling?this.nextSibling.firstChild:null; // get the IFRAME... maybe...
var w=co.txtFrameWidth; if (!w || !w.length) w="100%";
var h=co.txtFrameHeight; if (!h || !h.length) h="80%";
if (h.indexOf("%")) h=(findWindowHeight()*h.replace(/%/,"")/100)+"px"; // calc height as % of window
var showing=f && f.nodeName.toUpperCase()=="IFRAME"; // does IFRAME really exist?
var stretchCell=p.nodeName.toUpperCase()=="TD" && w.indexOf("%")!=-1 && w.replace(/%/,"")>=100;
if (!showing) { // create an iframe
link.style.display="block"; // force IFRAME onto line following link
if (stretchCell) { p.setAttribute("savedWidth",p.style.width); p.style.width="100%"; } // adjust TD so IFRAME stretches
var wrapper=createTiddlyElement(null,"span"); // wrapper for slider animation
wrapper.setAttribute("url",this.href); // for async loading of frame after animation completes
var f=createTiddlyElement(wrapper,"iframe"); // create IFRAME
f.style.backgroundColor="#fff"; f.style.width=w; f.style.height=h;
p.insertBefore(wrapper,this.nextSibling);
function loadURL(wrapper) { var f=wrapper.firstChild; var url=wrapper.getAttribute("url");
var d=f.contentDocument?f.contentDocument:(f.contentWindow?f.contentWindow.document:f.document);
d.open(); d.writeln("<html>connecting to "+url+"</html>"); d.close();
try { f.src=url; } // if the iframe can't handle the href
catch(e) { alert(e.description?e.description:e.toString()); } // ... then report the error
window.scrollTo(0,ensureVisible(wrapper));
}
if (!co.chkAnimate) loadURL(wrapper);
else {
var morph=new Slider(wrapper,true);
morph.callback=loadURL;
morph.properties.push({style: 'width', start: 0, end: 100, template: '%0%'});
anim.startAnimating(morph);
}
} else { // remove iframe
link.style.display="inline"; // restore link style
if (stretchCell) p.style.width=p.getAttribute("savedWidth"); // restore previous width of TD
if (!co.chkAnimate) p.removeChild(f.parentNode);
else {
var morph=new Slider(f.parentNode,false,false,"all");
morph.properties.push({style: 'width', start: 100, end: 0, template: '%0%'});
anim.startAnimating(morph);
}
}
e.cancelBubble=true; if (e.stopPropagation) e.stopPropagation(); return false;
}
return link;
}
//}}}
{{outline{
!!Outline
#The reservoir hypothesis
#Acquisition of resistance genes by horizontal gene transfer
##Transformation
##Transduction
##Conjugation
#Transposons: architects of genomes and plasmids
#Evolution of resistance genes and plasmids
!!Handouts and class materials
!!Links to more information
*Good illustrations and animations of [[HGT mechanisms|http://www.learner.org/courses/biology/textbook/infect/infect_7.html]]
*Nice overview of [[conjugation|http://www.mun.ca/biochem/courses/3107/Lectures/Topics/conjugation.html]]
*[[Conjugation and transduction|http://www.sp.uconn.edu/~terry/229sp03/lectures/genetransfer.html]] (includes animation of conjugation)
*[[Bacterial genetic exchange|http://www.slic2.wsu.edu:82/hurlbert/micro101/pages/Chap9.html]] by conjugation, transformation and transduction
*[[Genetic exchange in bacteria|http://www.sci.sdsu.edu/~smaloy/MicrobialGenetics/topics/genetic-exchange/]]
*[[Transposons|http://www.sci.sdsu.edu/~smaloy/MicrobialGenetics/topics/transposons/]] and how they transpose
*[[Integrons|http://www.sci.sdsu.edu/~smaloy/MicrobialGenetics/topics/transposons/integrons/integrons.html]]
}}}
!!!The problem of gene transfer
Courvalin paper
*''What was Courvalin's "big insight?"'' - resistance genes already exist because the antibiotic //producers// would need them
*''Where, then, should we look to study resistance genes?'' - rather than waiting for resistance to occur, we should look pro-actively for existing resistance genes that might become a problem and figure out how to prevent them in advance.
*''So, our biggest worry is not the //development// of new resistance genes but...?'' - the //spread// of resistance genes
The reservoir hypothesis
*''How can use of antibiotics in agricultural animals possibly lead to resistant human pathogens?''
*{{slide{the reservoir hypothesis}}}
*''How has this idea been tested experimentally?''
!!!Horizontal gene transfer
''What is "horizontal" gene transfer? As opposed to what?''
Suppose we have MRSA - methicillin-resistant //Staphylococcus aureus//, and we have mild-mannered non-resistant //S. aureus//. ''How can the resistance gene move horizontally from one cell to the other?''
*Transformation - need to consider whether the resistance gene is on the chromosome or on a plasmid
*Transduction - {{slide{phage life cycle}}} - does it matter if it's a plasmid or not?
*Conjugation
**Transfer of a plasmid across a "mating bridge" formed by a sex pilus - {{slide{photo and animation}}}
**Requires //mob// and //tra// genes
**''What's the difference between a self-transmissible plasmid and a mobilizable plasmid?''
**''How does retrotransfer work?''
**''Could you ever transfer chromosomal genes?'' - transposon creates homology between SP and chromosome→Hfr
!!!Origin of an R-plasmid
*''How could a resistance plasmid evolve?''
*Remembering the pathway of evolution of a PBP to become a β-lactamase, ''what has to happen first?'' - gene duplication
*Transposons {{slide{(slides)}}} as agents of gene duplication and genome architects
*IS flank PBP, copy-and-paste transposition duplicates it; voila, a disposable copy
*Mutations occur to produce a β-lactamase, selected by exposure to β-lactam antibiotics
*Cell has or gains an ST plasmid
*Transposon "hops" into plasmid, now it's an R-plasmid
*A single plasmid can acquire multiple resistance genes (MDR)
*A conjugative transposon can directly move a gene it contains to a new host.
{{outline{
!Objectives
*Appreciate the importance of horizontal gene transfer in the spread of resistance
*Understand the mechanisms of horizontal gene transfer
*Understand how transposons are important as genome architects
*Gain familiarity with the reservoir hypothesis and its implications for agricultural antibiotic use
*Understand pathways of evolution for resistance plasmids
!Outline
#The reservoir hypothesis
#Acquisition of resistance genes by horizontal gene transfer
##Transformation
##Transduction
##Conjugation
#Transposons: architects of genomes and plasmids
#Evolution of resistance genes and plasmids
!Activities
!Ideas
}}}
{{lechelp{
The ''Independent Study'' section is designed to help you __prepare__ for each class session. If you learn the basics //before// you come to class, we can use class time for more sophisticated and active learning. The focused readings, guide questions and list of key terms will help you direct your preparation appropriately. We will //not// go back over these basic ideas during class; you are expected to know them (a quiz could happen at any time!). You can test your ability to apply what you've learned with the application questions, which will often be discussed in class. Application questions will help you see if you can apply what you've learned and will often be discussed in class. You are encouraged to bring your notes to class in case you need them.
}}}
{{lecblurb{
''How has antibiotic resistance spread so quickly?'' If all we had to worry about was the gradual development of antibiotic resistance by mutation and selection, resistance wouldn't be the huge problem that it is today. Unfortunately, once bacteria develop resistance, the resistance genes can be passed from cell to cell by a variety of mechanisms that collectively we call horizontal gene transfer. This leads to much more rapid evolution and spread of resistance.
}}}
!!Focused readings
{{smalltext{all page numbers below are from //Microbiology: Diversity, Disease and the Environment// by Salyers and Whitt}}}
*Importance of horizontal gene transfer: pp. 133-135 and Figure 7.2
*Transformation: pp. 135-137 and Figure 7.3
*Transduction: pp. 137-140 and Figure 7.4
*Conjugation: pp. 140-142and Figures 7.5 and 7.6
*Pili: pp. 54-55 ("Adherence") and Figure 4.6.
*How horizontal gene transfer is detected: p. 145, Box 7-1
*Transposons and integrons: pp. 145-149 and Figures 7.7, 7.8, 7.9 and 7.10
!!Guide questions
#What is meant by "horizontal" gene transfer? How is it different from "vertical" gene transfer?
#What kinds of genes might bacteria acquire by horizontal gene transfer?
#What is one way to introduce DNA by transformation into bacteria for which natural transformation is not observed?
#Could a bacteriophage that does __not__ cleave the chromosomal DNA of its host transduce host genes?
#What happens to an individual bacteriophage that is carrying genes from the host chromosome?
#What are pili? What are these structures made of? Other than conjugation, what functions can pili have?
#What two types of functions must a plasmid encode in order to be self-transmissible?
#Which of the two functions is missing in a mobilizable plasmid? How is it transferred?
#At the end of transfer of a self-transmissible plasmid from a donor to a recipient, which of the two cells is a donor that can transfer the plasmid to a new cell?
#What are two kinds of evidence that might suggest a particular gene originated by horizontal gene transfer?
#How is an insertion sequence different from a transposon? How are they similar?
#What are two different ways that a transposon can affect antibiotic resistance?
!!Outside reading
{{lechelp{
The goal of outside reading in this class is to see how the concepts we are learning relate to what is going on now in microbiology and to get you used to learning from the scientific literature (no textbooks in the real world!). It is usually not necessary to carefully read and dissect the entire article; use the guide questions below to help you see what you need to learn from the article.
}}}
Courvalin, P. 2005. Antimicrobial drug resistance: Prediction is very difficult, especially about the future. Emerging Inf. Diseases ''11'':1503-1515. [L[web materials/gene transfer/Courvalin2005.pdf]]
#Where does Courvalin suggest that many antibiotic-resistance genes come from?
#Why does Courvalin suggest that the development of resistance to some antibiotics ought to be predictable?
#Rather than waiting to find resistant organisms to study, how does Courvalin suggest we might be able to study antibiotic resistance more efficiently?
#How have bacteria responded to the use of β-lactamase inhibitors in combination with β-lactam antibiotics?
#What two mechanisms of antibiotic resistance does Courvalin say are becoming more common and significant?
!!Key terms
{{col3{
horizontal gene transfer
transformation
transduction
bacteriophage (phage)
conjugation
pilus
sex pilus
donor
recipient
self-transmissible plasmid
mobilizable plasmid
integration
Hfr
insertion sequence
transposon
}}}
!!Application question
You have identified two strains of //Streptococcus pneumoniae// that are resistant to erythromycin. Strain A has a chromosomal gene encoding an enzyme that inactivates the antibiotic. Strain B has a plasmid with a gene encoding an efflux pump. Which is more likely to lead to spread of resistance to this antibiotic?
<script>
var ctid = story.findContainingTiddler(place).getAttribute("tiddler");
var slideState = store.getValue(ctid,"slides");
if (slideState == "true" ) {
folder = ctid.toLowerCase();
folder = folder.replace(" ","%20");
linkpath = "web%20materials/" + folder + "/slides.pdf";
var slideLink = createTiddlyElement(place,"a",null,"fileLink","click here to download")
slideLink.href = linkpath;
slideLink.onclick = openInNewWindow;
var stext = "<html><br><iframe height = \"600\" width=\"800\" src=\"";
stext += linkpath + "\"></iframe></html>";
wikify(stext,place);
}
else {
wikify("//Slides for this class session have not yet been posted. Please check back later.//",place);
}
</script>
!!Review questions
#Why is____ transfer of //chromosomal// genes by transformation most likely to occur between bacteria that are closely related (have mostly similar genes)? Why is this requirement relaxed if the genes are transferred on a plasmid? +++*{{keyButton{[answer]}}}...
{{anstxt{
A chromosome fragment picked up by a bacterial cell will normally be rapidly degraded. It can only survive to function in the new cell if it is integrated into the host chromosome by recombination ("crossing-over"). Recombination occurs between sequences that are highly similar, so there have to be at least regions of the transformed DNA that are nearly identical to the new host chromosome. A plasmid is circular, so it's not degraded by the new host, and it replicates on its own, so no recombination into the chromosome is necessary.
}}}
===
#Do you think transduction is more likely or less likely than transformation to occur between less-related bacterial species? +++*{{keyButton{[answer]}}}...
{{anstxt{
Less likely: the bacteriophage must be able to infect (at least bind to a receptor and inject its DNA) both species. Bacteriophages are usually very specific.
}}}
===
#Which of the following would be most likely to be successful in transferring an antibiotic-resistance gene from the Gram-positive bacterium //Bacillus subtilis// to the Gram-negative bacterium //Escherichia coli//?
##Transformation, with the resistance gene located on the //B. subtilis// chromosome
##Transformation, with the resistance gene located on a plasmid
##Transduction, with the resistance gene located on the //B. subtilis// chromosome (assume you can find a transducing phage that can infect //B. subtilis//)
##Transduction, with the resistance gene located on a plasmid +++*{{keyButton{[answer]}}}...
{{anstxt{
(b) Transformation, with the resistance gene located on a plasmid. Whether the gene is located on the chromosome or a plasmid, transduction is unlikely because few if any bacteriophages could infect two bacteria that are so different. Transformation is much more likely, but less so if the gene is chromosomal, because recombination depends on highly similar DNA sequences.
}}}
===
#How can transposons contribute to the development and spread of antibiotic resistance? List at least three ways. +++*{{keyButton{[answer]}}}...
{{anstxt{
*Make a copy of a gene, allowing for mutation to convert one copy to a resistance gene without disturbing normal gene function
*"Hop" a resistance gene from a chromosome to a plasmid or vice-versa
*Place a promoter in front of an otherwise poorly expressed gene that could affect resistance
*Conjugative transposons could move a gene to a new cell
*Possibly disruption of a gene by a transposon could affect antibiotic sensitivity in some way
}}}
===
#How are normal, harmless intestinal bacteria important in spread of antibiotic resistance, according to the reservoir hypothesis? +++*{{keyButton{[answer]}}}...
{{anstxt{
When horizontal gene transfer occurs within the enormous intestinal bacterial population, harmless bacteria can gain resistance genes which they can then share with any pathogens that might pass through the gut.
}}}
===
#Your friend, a farmer, has been told that there there is no good evidence to suggest that the agricultural use of antibiotics is directly linked to the emergence of antibiotic-resistant human pathogens. He is not willing to give up the economic benefit of this practice unless he can be convinced that there is a real benefit to human health in doing so. What arguments would you make that might help convince him of the potential danger of non-therapeutic antibiotic use? +++*{{keyButton{[answer]}}}...
{{anstxt{
It might help him to know that human pathogens and human intestinal bacteria that could interact with pathogens have been shown to have the exact same resistance genes that can be isolated from agricultural animals treated with antibiotics, suggesting that gene transfer can and does occur.
}}}
===
#Another friend is recovering from a nasty case of strep throat with the help of a 10-day prescription for amoxicillin. By day 5, she feels well again, but her roommate has come down with the same symptoms. Your friend is sure her roommate caught strep throat as well and wants to give her the remaining 5 days of amoxicillin to save her the trouble and expense of going to the doctor. List at least three problems with this plan, giving some details about why each is a problem. +++*{{keyButton{[answer]}}}...
{{anstxt{
*The roommate might not actually have strep throat: she might have influenza or some other disease with similar symptoms. The antibiotics then might not help her at all but trying them would keep her from seeing her own doctor and finding out what's really wrong.
*The friend who got the prescription may feel better, but she may not have killed all the strep throat bacteria, especially the part of the population that happens to be more resistant. She may get a relapse, and potentially the bacteria that cause the relapse might be more resistant than the original pathogens, so that she won't be healed as quickly.
*If the roommate takes the antibiotics unnecessarily, then she is just selecting for resistant bacteria in her own body; even if these are harmless bacteria, they could spread resistance to others.
*There would also be trouble if the roommate turned out to be allergic to the antibiotics or had some other problem—the friend would be responsible!
}}}
===
#A penicillin-resistant strain of //Staphylococcus aureus// is mixed with a tetracycline-resistant strain. After incubating the two together for a day or so, some colonies can be isolated which are resistant to both antibiotics. How could you determine experimentally whether this gene transfer occurred by __transformation__, __transduction__ or __conjugation__? +++*{{keyButton{[answer]}}}...
{{anstxt{
*Heat-treat one of the strains to kill the bacteria and any viruses and see if the transfer still occurs. If so, it's transformation.
*If it's not transformation, then see if mixing the growth medium (centrifuge or filter out any cells) of one with the other will result in the transfer. If so, it's transduction.
(There are also other possible answers; this is just one example.)
}}}
===
#Suppose your experiment shows that the gene transfer above occurred by conjugation. The doubly resistant bacteria have a plasmid that carries a penicillin-resistance gene and a second plasmid that carries a tetracycline-resistance gene. However, further experiments show that the tetracycline-resistance plasmid is not self-transmissible. List two different ways that doubly resistant bacteria might have arisen by conjugation. +++*{{keyButton{[answer]}}}...
{{anstxt{
*The penicillin-resistant strain could have transferred its resistance plasmid into the tetracycline-resistant strain.
*The penicillin-resistant strain could have initiated conjugation with the tetracycline-resistant strain, and the tetracycline-resistant plasmid (not self-transmissible but presumably mobilizable) could have retrotransferred into the penicillin-resistant strain.
}}}
===
!!Practice problems
*[Dd[Problems|problem sets/gene transfer.htm]] from previous exams
*[Dd[Key|problem sets/gene transfer key.htm]] for problem set
<<tabs genSetTabsEdit
Setup "General setup information" [[GeneralSetup]]
Supplies "General supplies" [[GeneralSupplies]]
>>
!Student supplies
|>|>|>|>|>|>|>| Drawers ||h
| A | B | C | D | E | F | G | H |Supplies|h
|||||||||1 box microscope slides|
|||||||||1 box cover slips|
|||||||||1 regular Sharpie|
|||||||||1 extra-fine or ultra-fine Sharpie|
|||||||||1 roll labeling tape|
|||||||||1 pair forceps|
|||||||||1 glass spreading rod|
|||||||||1 Bunsen burner striker|
|||||||||1 wire inoculating loop in good shape|
|||||||||1 wire inoculating needle|
|||||||||1 test-tube holder|
|||||||||1 microcentrifuge rack|
|||||||||1 P-1000 micropipettor labeled with the letter of the drawer|
|||||||||1 P-200 micropipettor labeled with the letter of the drawer|
|||||||||1 P-20 micropipettor labeled with the letter of the drawer|
|||||||||1 P-10 micropipettor labeled with the letter of the drawer|
|||||||||1 timer labeled with the letter of the drawer|
|||||||||1 6" plastic ruler|
|||||||||1 green Pipet-Aid labeled with the letter of the drawer|
|||||||||1 pad bibulous paper (not lens paper)|
|||||||||2 clothespins|
|||||||||1 microscope slide box|
|||||||||1 pad lens paper|
|||||||||1 hemocytometer|
|>|>|>|>|>|>|>| Bench ||h
| A | B | C | D | E | F | G | H | Supplies |h
|>|>|>|>|>|>|>|>| Benchtop |h
|||||||||1 box sterile P-1000 tips|
|||||||||1 box sterile P-200 tips|
|||||||||1 box sterile P-10 tips|
|||||||||1 red test-tube rack|
|||||||||1 bunsen burner|
|>|>|>|>|>|>|>|>| Sink cabinet |h
|||||||||sponge|
|||||||||staining rack|
|||||||||crystal violet|
|||||||||safranin|
|||||||||95% ethanol|
|||||||||Gram's iodine|
|||||||||malachite green (1 per table)|
|>|>|>|>|>|>|>|>| Microscope cabinet |h
|||||||||compound microscope with letter of cabinet|
|||||||||1 bottle immersion oil|
|>|>|>|>|>|>|>|>| Top of table (shared between two benches) |h
|>||>||>||>||>|disposable 1000-ml beaker labeled for waste tips and tubes|
|>||>||>||>||>|paper towels|
|>||>||>||>||>|ice bucket (clean and empty!)|
|>|>|>|>|>|>|>|>| Wire racks on top of table |h
|>||>||>||>||>|wash bottle of diluted disinfectant (refill as needed)|
|>||>||>||>||>|wash bottle of dH~~2~~O (refill as needed)|
|>||>||>||>||>|square bottle of sterile dH~~2~~O|
|>||>||>||>||>|square bottle of sterile saline ([O[0.85% NaCl]])|
|>||>||>||>||>|jar of microcentrifuge tubes|
|>||>||>||>||>|box of Kimwipes|
|>||>||>||>||>|2 alcohol jars about 1/3 full of 95% ethanol|
|>||>||>||>||>|jar of sterile toothpicks|
!Lab supplies (please check weekly)
!!Autoclave room:
*Bins for glassware to be washed in dishwasher (labeled for narrow-mouth and wide-mouth)
*Bin for caps (labeled)
*2 racks for used agar tubes (labeled)
*2 wash bottles of 10% bleach
*1 wash bottle of 95% ethanol
*2 autoclave buckets with autoclave bags (as needed, double-bag, autoclave and discard)
!!Front bench (rack above sink):
*Wash bottle of disinfectant (refill as needed)
*Wash bottle of 95% ethanol (refill as needed)
*Wash bottle of 70% ethanol (refill as needed)
*Wash bottle of dH~~2~~O (refill as needed)
*Hand soap
*Hand lotion
*Stain remover
*Bon Ami
!!North bench:
*Gloves (S-M-L)
*Tray for empty tip boxes and microcentrifuge tube jars
*Tray for empty/contaminated bottles of water and saline
*Be sure balance area is kept clean
!!Cabinet above north bench:
*Sterile P-200/20 tip boxes
*Sterile microcentrifuge tube jars
*4 extra bottles of sterile dH~~2~~O
*4 extra bottles of sterile 0.85% NaCl
*2 bottles (100 ml each) of the following //sterile// media, for starting cultures:
**[G[Luria-Bertani broth|lb_broth]] (LB broth)
**[G[Brain-heart infusion|bhi_broth]] (BHI) broth
**[G[Trypticase soy|tsb]] broth (TSB)
*1 rack of sterile 13×100 mm culture tubes
*1 rack of sterile 16×125 mm culture tubes
!!South bench:
*Carboy of 10× [G[TBE]] (Tris-boric acid-EDTA)
!!Incubators:
*Large incubator in SC222 at 37 °C, with 2 test-tube racks labeled "Bio 340"
*Large incubator in SC222 at 30 °C, with 2 test-tube racks labeled "Bio 340"
*Large (white) shaking incubator in back hall at 37 °C
*Small shaking incubator in back hall at 30 °C
*Large (brown) shaking incubator in back hall at room temperature (label)
*Small refrigerated incubator in back hall at 25 °C
*Small glass-door incubator in SC222 at 42 °C (label)
!!Refrigerator:
*Label a shelf and two test-tube racks for Bio 340
!!Freezer:
*Label a white box for Bio 340 and place it in the Microbiology bin
{{ckList{
!!Media
*LB broth mix (Miller)
*Trypticase soy broth mix
*BHI broth mix
!!Chemicals and reagents
*Crystal violet solution
*Safranin solution
*95% ethanol
*Gram's iodine solution
*Immersion oil
*Disinfectant
*Stain remover
*Tris base
*Boric acid
*EDTA
!!General supplies
*Wash bottles for dH~~2~~O
*Wash bottles for ethanol
*Wash bottles for bleach
*Wash bottles for disinfectant
*Square bottles
*Microcentrifuge tube jars
*Kimwipes
*Alcohol jars
*Toothpick jars
*Ice buckets
*Microscope slides
*Cover slips
*Sharpies, regular
*Sharpies, extra-fine or ultra-fine
*Labeling tape
*Forceps
*Glass spreading rods
*Bunsen burner strikers
*Wire inoculating loops
*Wire inoculating needles
*Test-tube holders
*Microcentrifuge racks
*6" plastic rulers
*Pipet-Aids
*Bibulous paper
*Clothespins
*Microscope slide boxes
*Lens paper
*Hemocytometers
*P-1000 tips
*P-200 tips
*P-10 tips
*Red test-tube racks
*Sponges
*Staining racks
*Autoclave bags
*Gloves (S-M-L)
*13×100 mm culture tubes
*16×125 mm culture tubes
!!Equipment
*P-1000 micropipettors
*P-200 micropipettors
*P-20 micropipettors
*P-10 micropipettors
*Timers
*Bunsen burners
!!Local purchases
*Toothpicks
*Bleach
*Hand soap
*Hand lotion
*Bon Ami
}}}
// // Function to return an array of only unique elements from an array
//{{{
function getUniqueArray(myArray) {
var o = {}, i, l = myArray.length, r = [];
for(i=0; i<l;i+=1) o[myArray[i]] = myArray[i];
for(i in o) r.push(o[i]);
return r;
};
//}}}
// // Function to return only unique elements from an array
//{{{
function getUniqueArray(myArray) {
var o = {}, i, l = myArray.length, r = [];
for(i=0; i<l;i+=1) o[myArray[i]] = myArray[i];
for(i in o) r.push(o[i]);
return r;
};
//}}}
// // Global arrays and variables for dealing with dates
//{{{
months=["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"];
days=["S","M","T","W","R","F","Y"];
nicedays=["Su","M","T","W","Th","F","Sa"];
oneDay = 24 * 60 * 60 * 1000;
//}}}
// // Function to format a date as d mmm
//{{{
function fmtDate(someDate) {
var dateString = someDate.getDate();
dateString += " " + months[someDate.getMonth()];
return(dateString);
}
//}}}
// // Function to format a date as mm/dd/yyyy
//{{{
function fmtDateSlash(someDate) {
var dateString = (someDate.getMonth()+1) + "/" + someDate.getDate() + "/" + someDate.getFullYear();
return(dateString);
}
//}}}
|nutrient_agar|<<tiddler [[Recipes##Nutrient agar]]>>|
|lb_agar|<<tiddler [[Recipes##LB agar]]>>|
|lb_broth|<<tiddler [[Recipes##LB broth]]>>|
|bhi_agar|<<tiddler [[Recipes##BHI agar]]>>|
|bhi_broth|<<tiddler [[Recipes##BHI broth]]>>|
|slants|<<tiddler [[Recipes##Slants]]>>|
|tsa|<<tiddler [[Recipes##TSA]]>>|
|tsb|<<tiddler [[Recipes##TSB]]>>|
|hydrogen_peroxide|<<tiddler [[Recipes##3% hydrogen peroxide]]>>|
|simmons_citrate_agar|<<tiddler [[Recipes##Simmons citrate agar]]>>|
|emb_agar|<<tiddler [[Recipes##EMB agar]]>>|
|mannitol_salt_agar|<<tiddler [[Recipes##Mannitol salt agar]]>>|
|oxidase_reagent|<<tiddler [[Recipes##Kovac's oxidase reagent]]>>|
|phenol_red_fermentation_tubes|<<tiddler [[Recipes##Phenol red fermentation tubes]]>>|
|mueller_hinton_broth|<<tiddler [[Recipes##Mueller-Hinton broth]]>>|
|mueller_hinton_agar|<<tiddler [[Recipes##Mueller-Hinton agar]]>>|
|r2a_agar|<<tiddler [[Recipes##R2A agar]]>>|
|endo_agar|<<tiddler [[Recipes##Endo agar]]>>|
|dsb|<<tiddler [[Recipes##Deca-strength broth]]>>|
|top_agar|<<tiddler [[Recipes##Top agar]]>>|
|pcr_water|<<tiddler [[Recipes##PCR water]]>>|
|barium_chloride_standard|<<tiddler [[Recipes##Barium chloride standard]]>>|
|tbe|<<tiddler [[Recipes##TBE]]>>|
|supercoiled_dna_ladder|<<tiddler [[Recipes##Supercoiled DNA ladder]]>>|
|te|<<tiddler [[Recipes##TE buffer]]>>|
<html><iframe><src="http://depts.noctrl.edu/biology/courses/100/grades/grade.php"></iframe></html>
{{outline{
!!Outline
#Bacterial growth
##Binary fission and the growth equation
##The growth curve
#Growth media
##Nutrients
##Types of media
##Growth requirements
#Controlling growth
##Heat
##Refrigeration
##Drying
##Disinfectants and antiseptics
!!Handouts and class materials
*[Dd[Key|web materials/growth/quiz key.pdf]] for reading quiz
!!Links to more information
*[[Dividing Bacteria: why are they not knee-deep? (includes animation and movie)|http://www.cellsalive.com/ecoli.htm]]
*[[Online experiment in bacterial growth|http://www.microbiologybytes.com/LabWork/bact/bact1.htm]]
*[[Review article on antiseptics, their activity and resistance|http://www.pubmedcentral.nih.gov/picrender.fcgi?artid=88911&blobtype=pdf]]
*[[Concerns about triclosan resistance|http://www.sciencenews.org/20000527/fob4.asp]]
*[[FDA FAQ on irradiation of food|http://www.fsis.usda.gov/Fact_Sheets/Irradiation_and_Food_Safety/index.asp]]
*[[Ask Bill Nye about antibacterial soap|http://encarta.msn.com/encnet/features/columns/?article=BNAntibacterialAnything]]
}}}
@@color:maroon;props: tube of uninoculated broth and an overnight culture@@
!!!Bacterial growth and the growth curve
''How do bacteria grow?''
*Growth means cell division, not enlargement
*Binary fission: replicate DNA, divide cell
*@@color:blue;Bacterial growth movie@@
[0>i[course materials/growth/blgraph.jpg]]The growth curve
*A loopful of bacteria is added to a tube of broth, which is then incubated at a good growth temperature. Every 15 minutes, you measure the cloudiness (@@optical density@@) of the broth with a spectrophotometer. ''Sketch the results and label the parts of your sketch''.
*''Why is there a lag phase?''
*''What is happening in log (exponential) phase?'' (cells dividing at a constant rate, the generation time)
*If the generation time is 30 minutes and we imagine we started with one cell:
|ctrtable|k
|time|cells|h
| 0| 1|
| 30| 2|
| 60| 4|
| 90| 8|
| 120| 16|
| 150| 32|
*Can you see why it's called exponential phase?
*So, then ''why is the line in exponential phase a straight line'' instead of an exponential curve? (absorbance, or optical density, is on a logarithmic scale)
*''What's happening in stationary phase?''
*''What's happening in death phase?''
*In reality, the number of cells does not drop to zero, but @@long-term stationary phase@@ for many bacteria can continue for days, weeks, months or years as the bacteria respond to starvation, selection takes place and balanced growth and death occur.
!!!The exponential growth equation
*From our table of bacterial numbers, ''what equation would allow us to calculate the total number of bacteria at any given time?''
*Number of cells (b) = 2^^n^^, where n = the number of generations
*''How is the number of generations related to the generation time?'' (time/g, so b = 2^^(t/g)^^)
*So, now we can solve a @@color:blue;problem@@: if g = 30 min and we give the colony 16 hours to grow but have a 2-hour lag phase, this is 28 generations, so b = 2^^28^^ = 2.7×10^^8^^ — enough to make a nice-sized colony
*But, ''what's wrong with this equation''? It only works if we start with one cell, which we do at some point on a streaked plate, but don't if we just add a loopful of cells to a broth.
*''How can we modify our equation to work?'' If we started with 100 cells:
|ctrtable|k
| time | cells |h
| 0| 100|
| 30| 200|
| 60| 400|
| 90| 800|
| 120| 1600|
| 150| 3200|
*So, we just need to multiply the result by the number of starting cells (B): b = B × 2^^n^^
!!!Growth media
*To grow bacteria in the lab, we have to provide nutrients and conditions that allow them to grow as they would in nature.
*For example, ''what are the basic elements that every cell needs''? (C, O, N, P, H, S, K, Mg, Ca, Fe - plus trace elements that are sometimes added specifically but that we often assume are present in the water or as contaminants)
*''What environmental conditions do we need to provide?'' (temperature, pH, oxygen, water, salinity, etc.)
*There are many different kinds of growth media that can be used for specific purposes; let's try a couple of @@color:blue;problems@@
!!!Controlling growth (@@color:blue;slides@@)
*''Why is controlling bacterial growth such an important problem?''
*''What's the goal of controlling growth on an inoculating loop? How do we do it? How does it work?''
*I can't flame a bottle of growth medium or a pipette tip or a culture tube. ''How can I sterilize it?''
*''What are the advantages of using an autoclave?''
##Moist heat transfers best: less time, lower temperature than dry heat
##Pressure allows temperature to be raised above boiling to kill endospores
*''What's an example of using heat to control bacterial growth other than in the lab?'' (e.g., canning of food)
*''What is the goal of controlling bacterial growth in milk? How do we do it?''
##Need to increase shelf life in a cost-effective way without destroying taste and quality
##Pasteurization: heat briefly to greatly reduce bacterial numbers and kill most pathogens
##Refrigeration: slows bacterial growth (@@bacteriostatic@@)
*''Why does refrigeration prevent growth of most bacteria?'' (membrane fluidity, speed of reactions)
*''Why don't I have to put honey in the refrigerator?'' High sugar content → osmosis → drying (limiting water availability)
*''What other kinds of food preservation work this way?'' Jelly, peanut butter, beef jerky, ham, bacon
*''What if I want to reduce bacteria on my kitchen counter?'' @@Disinfectants@@ are intended to kill or inhibit bacteria on surfaces and inanimate objects; for example, QACs disrupt membranes
*''What if I want to prevent a cut from becoming infected?'' @@Antiseptics@@ are safe for //topical// use on humans or animals
##Ethanol disrupts membranes and denatures proteins
##Hydrogen peroxide is a strong oxidizing agent that causes oxidative damage to proteins and DNA
*''What if I'm camping and I want to drink the stream water?''
##Bleach: sodium hypochlorite is a strong oxidizing agent (also why we chlorinate drinking water)
##Iodine: denatures proteins
##Filtration: physically removes bacteria
{{outline{
!Objectives
*Understand the basic requirements for growth
*Understand exponential growth and how to calculate bacterial numbers
*Know the parts of the growth curve and why they occur
*Know various types of growth media and their utility
*Understand how to control bacterial growth by heat, refrigeration, drying and chemical disinfectants and antiseptics
!Outline
#Bacterial growth
##Binary fission and the growth equation
##The growth curve
#Growth media
##Nutrients
##Types of media
##Growth requirements
#Controlling growth
##Heat
##Refrigeration
##Drying
##Disinfectants and antiseptics
!Activities
*[Dd[Quiz|course materials/growth/quiz.pdf]] on independent study material
*Development of the growth equation
!Ideas
}}}
{{lechelp{
The ''Independent Study'' section is designed to help you __prepare__ for each class session. If you learn the basics //before// you come to class, we can use class time for more sophisticated and active learning. The focused readings, guide questions and list of key terms will help you direct your preparation appropriately. We will //not// go back over these basic ideas during class; you are expected to know them (a quiz could happen at any time!). You can test your ability to apply what you've learned with the application questions, which will often be discussed in class. Application questions will help you see if you can apply what you've learned and will often be discussed in class. You are encouraged to bring your notes to class in case you need them.
}}}
{{lecblurb{
''Why is controlling bacterial growth such a big issue?'' Products to control bacterial growth, ranging from household cleaners to hand soaps to antiseptics for wounds to antibiotics to cure disease are all around us and frequently in the news. In this class session, we'll see why the explosive growth characteristic of bacteria is a problem and discuss various means of controlling bacteria.
}}}
!!Focused readings
{{smalltext{all page numbers below are from //Microbiology: Diversity, Disease and the Environment// by Salyers and Whitt}}}
*Bacterial cell division and the growth curve: pp. 73-75 and figure 5.4
*Cultivation of microorganisms: pp. 33-38, especially the section "Second step: cultivation" beginning on p. 35
{{smalltext{growth media and control of growth are areas that are not covered well in your textbook, so please also read these Web resources:}}}
*Nutrition and Growth of Bacteria from [[Todar's online microbiology textbook|http://textbookofbacteriology.net/nutgro.html]] //(note that there are six pages total in this topic; you should focus primarily on the information on growth media and conditions starting on page 3)//
*Control of Microbial Growth from [[Todar's online microbiology textbook|http://textbookofbacteriology.net/control.html]] //(note that there are six pages total in this topic)//
!!Guide questions
#What do we mean by "growth" in bacteria? Is this different from our usual idea of growth?
#When bacteria are added to fresh growth medium, why do they initially go through a lag phase? Why do they eventually reach stationary phase?
#What is the generation time (g)? What kinds of environmental factors would increase or decrease g?
#What are the major elements that must be available in order for any bacterium to grow?
#When might it be appropriate to choose a complex growth medium rather than a defined growth medium?
#Why might you choose a rich growth medium rather than a minimal growth medium?
#What would be the value of a selective growth medium or an enrichment medium?
#Why does heat kill bacteria and other organisms? Can heat be used for sterilization?
#What are two reasons we use an autoclave for sterilization in the laboratory?
#What are two reasons that refrigeration slows bacterial growth? Some organisms can grow well at refrigerator temperature; how would these organisms overcome the two problems created by refrigeration?
#Explain why honey, jelly and beef jerky can be left at room temperature without spoiling.
#Could radiation be used to sterilize something? How about filtration? Drying?
#The active ingredient in most hand sanitizers is ethanol. How does this kill bacteria?
#Our lab disinfectant contains a quaternary ammonium compound. How does this kill bacteria?
!!Key terms
{{col3{
bacterial growth
binary fission
generation time (g)
growth curve
lag phase
log (exponential) phase
stationary phase
death phase
growth medium
rich medium
minimal medium
complex medium
defined medium
selective medium
differential medium
enrichment medium
sterilization
refrigeration
antiseptic
disinfectant
preservative
}}}
!!Application questions
#If you know how many bacteria you start with and their generation time, how would you calculate the number of bacteria present after a defined period of time?
#What would be an appropriate means of sterilizing Petri dishes and plastic pipets (that will melt at high temperature)?
<script>
var ctid = story.findContainingTiddler(place).getAttribute("tiddler");
var slideState = store.getValue(ctid,"slides");
if (slideState == "true" ) {
folder = ctid.toLowerCase();
folder = folder.replace(" ","%20");
linkpath = "web%20materials/" + folder + "/slides.pdf";
var slideLink = createTiddlyElement(place,"a",null,"fileLink","click here to download")
slideLink.href = linkpath;
slideLink.onclick = openInNewWindow;
var stext = "<html><br><iframe height = \"600\" width=\"800\" src=\"";
stext += linkpath + "\"></iframe></html>";
wikify(stext,place);
}
else {
wikify("//Slides for this class session have not yet been posted. Please check back later.//",place);
}
</script>
!!@@color: maroon;Homework problem@@
{{smalltext{Please write out your answer to this problem and bring it to the next class session}}}
{{box{
The generation time for //E. coli// is approximately 20 minutes under optimal conditions. Assuming optimal conditions and unlimited nutrient availability, how long would it take for the descendants of a single //E. coli// cell (mass of one cell is approximately 9.5 × 10^^–13^^ g) to have a total mass equal to the mass of the earth?!
}}}
!!Review questions
#What is the difference between an antiseptic and a disinfectant? Is it possible for a single chemical to be both an antiseptic and a disinfectant? +++*{{keyButton{[answer]}}}...
{{anstxt{
A disinfectant is suitable for controlling microbes on a surface or inanimate object. An antiseptic is also a chemical agent that can be used to control microbes, but in this case it is mild enough to be used (but only //topically//) on a human or animal. Some antiseptics can also be used as disinfectants: for example, you might pour "rubbing alcohol" (70% ethanol or isopropanol) on a cut, or you might use it to disinfect a thermometer before you put it in your mouth.
}}}
===
#You know that heat can be used to sterilize something; are there other methods of achieving sterilization? +++*{{keyButton{[answer]}}}...
{{anstxt{
Certainly. UV radiation can sterilize a surface, gamma radiation can penetrate to sterilize many materials, even filtration can be used for sterilization if the filter is fine enough to remove all microbes.
}}}
===
#What method of controlling growth is used for each of the following foods? How does each work? (//mouse over gray box to reveal the answers//)
##Canned green beans %% - Heat (denatures proteins)%%
##Milk %% - Heat (pasteurization) and refrigeration (slows metabolic reactions, makes membranes more rigid)%%
##Bacon %% - High salt content (limits water availability by osmosis)%%
##Jam %% - High sugar content (limits water availability by osmosis)%%
##Beef jerky %% - Drying (limits water availability)%%
##Yogurt %% - Acid (denatures proteins)%%
#State whether each of the following is a __bactericidal__ or __bacteriostatic__ method of controlling growth. (//mouse over gray box to reveal the answers//)
##Heat %% - Bactericidal (kills cells by denaturing proteins)%%
##Refrigeration %% - Bacteriostatic (does not directly kill the cells but slows their growth and metabolism)%%
##QAC %% - Bactericidal (kills cells by disrupting membranes)%%
##Filtration %% - a little different, since it //removes// bacteria, but since it doesn't //kill// them, bacteriostatic%%
#You have a culture of //Streptococcus salivarius// that you know contains 100,000 cells/ml. You add 5 μl of this culture to a 5-ml tube of fresh broth and let it grow for 16 hours. At the end of this time, you find there are approximately 3.3 × 10^^7^^ cells/ml in the culture. What is the generation time (g) for //S. salivarius// in this medium? +++*{{keyButton{[answer]}}}...
{{anstxt{
If there are originally 100,000 cells/ml, then there are 100 cells in 1 μl and therefore 500 cells in the 5 μl you started with. We know that we ended up with 3.3 × 10^^7^^ cells/ml in a 5-ml tube, or 1.65 × 10^^8^^ cells total; this is //b//. So, now we have 1.65×10^^8^^ = 500 × 2^^n^^, or 2^^n^^ = 3.3×10^^5^^. So, n = log~~2~~(3.3×10^^5^^) or log~~10~~(3.3×10^^5^^)/log~~10~~(2) = 18.33 generations. If 16 hours = 18.33 generations, then one generation = 16/18.33 = 0.87 hours = about 52 minutes.
}}}
===
#You would like to isolate bacteria from a water sample that are resistant to the antibiotic tetracycline. You don't care what species you isolate, however—in fact, you'd like to see all the different kinds of resistant bacteria that might be there. What sort of growth medium would you choose? +++*{{keyButton{[answer]}}}...
{{anstxt{
A rich medium would be wisest, to promote rapid growth of any bacteria present, and it should probably be a complex medium, since you don't know enough about what is there to design a defined medium that would meet all of their possible growth requirements. Finally, it should be a selective medium: by including tetracycline in the medium at a modest concentration, you will kill all the non-resistant bacteria.
}}}
===
!!Additional terms
{{col2{
bactericidal
bacteriostatic
optical density
quaternary ammonium compound (QAC)
filtration
long-term stationary phase
}}}
!!Practice problems
*[Dd[Problems|problem sets/growth.htm]] from previous exams
*[Dd[Key|problem sets/growth key.htm]] for problem set
!!Outline
!!Handouts and class materials
!!Links to more information
!Objectives
!Outline
!Activities
!Ideas
{{lechelp{
The ''Independent Study'' section is designed to help you __prepare__ for each class session. If you learn the basics //before// you come to class, we can use class time for more sophisticated and active learning. The focused readings, guide questions and list of key terms will help you direct your preparation appropriately. We will //not// go back over these basic ideas during class; you are expected to know them (a quiz could happen at any time!). You can test your ability to apply what you've learned with the application questions, which will often be discussed in class. Application questions will help you see if you can apply what you've learned and will often be discussed in class. You are encouraged to bring your notes to class in case you need them.
}}}
{{lecblurb{
''Context question'' Lecture introduction
}}}
!!Focused readings
{{smalltext{
all page numbers below are from //Microbiology: Diversity, Disease and the Environment// by Salyers and Whitt
}}}
!!Guide questions
!!Key terms
{{col3{
}}}
!!Application questions
<script>
var ctid = story.findContainingTiddler(place).getAttribute("tiddler");
var slideState = store.getValue(ctid,"slides");
if (slideState == "true" ) {
folder = ctid.toLowerCase();
folder = folder.replace(" ","%20");
linkpath = "web%20materials/" + folder + "/slides.pdf";
var slideLink = createTiddlyElement(place,"a",null,"fileLink","click here to download")
slideLink.href = linkpath;
slideLink.onclick = openInNewWindow;
var stext = "<html><br><iframe height = \"600\" width=\"800\" src=\"";
stext += linkpath + "\"></iframe></html>";
wikify(stext,place);
}
else {
wikify("//Slides for this class session have not yet been posted. Please check back later.//",place);
}
</script>
!!Review questions
#Question. +++*{{keyButton{[answer]}}}...
{{anstxt{
Answer.
}}}
===
!!Additional terms
{{col2{
}}}
!!Practice problems
!!Links to more information
/***
|Name:|HideWhenPlugin|
|Description:|Allows conditional inclusion/exclusion in templates|
|Version:|3.1 ($Rev: 3919 $)|
|Date:|$Date: 2008-03-13 02:03:12 +1000 (Thu, 13 Mar 2008) $|
|Source:|http://mptw.tiddlyspot.com/#HideWhenPlugin|
|Author:|Simon Baird <simon.baird@gmail.com>|
|License:|http://mptw.tiddlyspot.com/#TheBSDLicense|
For use in ViewTemplate and EditTemplate. Example usage:
{{{<div macro="showWhenTagged Task">[[TaskToolbar]]</div>}}}
{{{<div macro="showWhen tiddler.modifier == 'BartSimpson'"><img src="bart.gif"/></div>}}}
***/
//{{{
window.hideWhenLastTest = false;
window.removeElementWhen = function(test,place) {
window.hideWhenLastTest = test;
if (test) {
removeChildren(place);
place.parentNode.removeChild(place);
}
};
merge(config.macros,{
hideWhen: { handler: function(place,macroName,params,wikifier,paramString,tiddler) {
removeElementWhen( eval(paramString), place);
}},
showWhen: { handler: function(place,macroName,params,wikifier,paramString,tiddler) {
removeElementWhen( !eval(paramString), place);
}},
hideWhenTagged: { handler: function (place,macroName,params,wikifier,paramString,tiddler) {
removeElementWhen( tiddler.tags.containsAll(params), place);
}},
showWhenTagged: { handler: function (place,macroName,params,wikifier,paramString,tiddler) {
removeElementWhen( !tiddler.tags.containsAll(params), place);
}},
hideWhenTaggedAny: { handler: function (place,macroName,params,wikifier,paramString,tiddler) {
removeElementWhen( tiddler.tags.containsAny(params), place);
}},
showWhenTaggedAny: { handler: function (place,macroName,params,wikifier,paramString,tiddler) {
removeElementWhen( !tiddler.tags.containsAny(params), place);
}},
hideWhenTaggedAll: { handler: function (place,macroName,params,wikifier,paramString,tiddler) {
removeElementWhen( tiddler.tags.containsAll(params), place);
}},
showWhenTaggedAll: { handler: function (place,macroName,params,wikifier,paramString,tiddler) {
removeElementWhen( !tiddler.tags.containsAll(params), place);
}},
hideWhenExists: { handler: function(place,macroName,params,wikifier,paramString,tiddler) {
removeElementWhen( store.tiddlerExists(params[0]) || store.isShadowTiddler(params[0]), place);
}},
showWhenExists: { handler: function(place,macroName,params,wikifier,paramString,tiddler) {
removeElementWhen( !(store.tiddlerExists(params[0]) || store.isShadowTiddler(params[0])), place);
}},
hideWhenTitleIs: { handler: function(place,macroName,params,wikifier,paramString,tiddler) {
removeElementWhen( tiddler.title == params[0], place);
}},
showWhenTitleIs: { handler: function(place,macroName,params,wikifier,paramString,tiddler) {
removeElementWhen( tiddler.title != params[0], place);
}},
'else': { handler: function(place,macroName,params,wikifier,paramString,tiddler) {
removeElementWhen( !window.hideWhenLastTest, place);
}}
});
//}}}
{{box bluebox bigtext{
{{titlebox{
{{bigger{Microbiology}}} BIO 340 ▪ Winter 2012
}}}
Microbiologists study bacteria, viruses, fungi and protists. They seek to understand the physiology and genetics of these organisms and their roles in the environment, associations with animals and plants, and relationships to disease. This course focuses on bacteria and viruses and includes readings from the current scientific literature as well as hands-on investigation using classical and molecular experimental techniques.
}}}
{{box bluebox{
!Announcements and Reminders
<<remind show:current type:AD event:0 exams:1>>
}}}
{{box bluebox{
!Contact Us
|ntable rcol1|k
| Instructor|Jonathan Visick ▪ [e[email|jevisick]] ▪ 637-5185<br>office: SC 215 ▪ office hours: xxx|
| Lab assistants|Caila Byrd ▪ [e[email|ctbyrd]]<br>Sarah Ahn ▪ [e[email|jahn]]|
}}}
{{box bluebox{
!General Course Information
|ntable rcol1|k
| Lecture|MWF 10:40-11:50 a.m.|
| Lab|M & W 1:30-3:30 p.m. in SC222|
| Texts|<<tiddler Home##texts>>|
}}}
{{box2{
This site requires Javascript. The site works with Firefox for PC, Mac and Linux. It is not tested with other browsers and some of its features are likely to fail if another browser (especially IE) is used. Get Firefox [[here|http://www.mozilla.com/en-US/firefox/fx]]
}}}
/%
!!!texts
*//Microbiology: Diversity, Disease and the Environment// by Abigail Salyers and Dixie Whitt (ISBN 978-1891786013)
*Syllabus and lab manual available in the bookstore
*Purchase a //Biology Student Handbook// from the bookstore if you don't already have one
!!!end
%/
<!--{{{-->
<div macro='hideWhen readOnly'><div class='toolbar' macro='toolbar [[ToolbarCommands::FullToolbar]]'></div></div>
<div class='viewer' macro='view text wikified'></div>
<div class='tagClear'></div>
<!--}}}-->
!!Slants
|ntable|k
|• Make slants in screw-cap tubes<br>• Pipette 5 ml agar, let harden on angle (use a white slant rack propped up on something)<br>• Slant should have a 3-4 cm "butt" and a long slant surface|[img(200px,auto)[images/slant.png]]<br>(shift-click to enlarge image)|
!!Fermentation tubes
*Pipette 12 ml into 16x125-mm tubes
*Add Durham tube
*Cap with thumb, shake to fill Durham tube
*Cap and autoclave
!!Stabs
*Pipette 7 ml of melted agar into sterile screw-cap tubes
*Let harden while standing vertically in a rack
!!Filter sterilization
[>img(150px,auto)[images/sfilter.jpg]]
*Peel paper on back of filter package; don't remove filter from package yet
>Remember, the tip (packaged away from the paper backing) is sterile and has to stay that way!
*''Remove plunger'' of syringe before attaching to filter
*Insert tip of syringe into top of filter and remove filter from package without touching it
*Twist filter firmly onto syringe without touching tip
*Rest filter on the tube or other vessel you are filtering into; don't let it touch the sides
*Pour solution to be filtered into the syringe
>If there is more solution to be filtered than will fit in the syringe, filter the first aliquot, then //unscrew the syringe from the filter// and remove the plunger before refilling. Never pull back on the plunger while the syringe is attached to the filter or the filter is likely to break.
*Insert plunger and slowly but firmly press solution through filter
>If you put too much pressure on, the filter will break
>If the solution suddenly shoots through the filter, you broke it and need to start over
!!Antibiotics
| !Antibiotic |>| !Final concentration | !Stock solution |h
|~| !Rich medium | !Minimal medium |~|h
|Ampicillin (Ap)| 100 μg/ml| 15 μg/ml|100 mg/ml, store at –20 °C|
|Ampicillin (Ap), sodium salt| 100 μg/ml| 15 μg/ml|100 mg/ml in 50% EtOH; store at –20 °C|
|Chloramphenicol (Cm)| 20 μg/ml| 5 μg/ml|20 mg/ml in EtOH|
|Kanamycin SO~~4~~ (Km)| 50 μg/ml| 125 μg/ml|50 mg/ml|
|Nalidixic Acid| 120 μg/ml| 120 μg/ml|30 mg/ml in 300 mM (12 mg/ml) NaOH|
|Ofloxacin| 25 μg/ml||25 mg/ml|
|Streptomycin (Sm)| 1 mg/ml| 2 mg/ml|100 mg/ml|
|Tetracycline HCl (Tc)| 20 μg/ml| 10 μg/ml|20 mg/ml in 70% EtOH|
*All stock solutions are prepared in dH~~2~~O and stored at 4 °C unless otherwise indicated
*To make media, antibiotics should always be added after autoclaving: autoclave medium, cool to 50 °C in waterbath, add desired amount of antibiotic from a liquid stock, swirl to mix thoroughly, then dispense as usual
Antibacterial response of manduca
Bacterial succession in fermenting cabbage
Biofilm resistance lab
Additional possible selections/enrichments: Isolation lab notes.wpd
Sample skin flora rather than soil (or roll together characterization lab with something like this)
swab "window" of forearm with detergent-impregnated swab
use broad-range PCR primer, clone and sequence
recent clinical study: only 6 genera represented in all 6 individuals swabbed; 62 genera seen in one individual
define unknown species as <97% similarity
/***
|Name|ImageSizePlugin|
|Source|http://www.TiddlyTools.com/#ImageSizePlugin|
|Version|1.2.1|
|Author|Eric Shulman|
|License|http://www.TiddlyTools.com/#LegalStatements|
|~CoreVersion|2.1|
|Type|plugin|
|Description|adds support for resizing images|
This plugin adds optional syntax to scale an image to a specified width and height and/or interactively resize the image with the mouse.
!!!!!Usage
<<<
The extended image syntax is:
{{{
[img(w+,h+)[...][...]]
}}}
where ''(w,h)'' indicates the desired width and height (in CSS units, e.g., px, em, cm, in, or %). Use ''auto'' (or a blank value) for either dimension to scale that dimension proportionally (i.e., maintain the aspect ratio). You can also calculate a CSS value 'on-the-fly' by using a //javascript expression// enclosed between """{{""" and """}}""". Appending a plus sign (+) to a dimension enables interactive resizing in that dimension (by dragging the mouse inside the image). Use ~SHIFT-click to show the full-sized (un-scaled) image. Use ~CTRL-click to restore the starting size (either scaled or full-sized).
<<<
!!!!!Examples
<<<
{{{
[img(100px+,75px+)[images/meow2.jpg]]
}}}
[img(100px+,75px+)[images/meow2.jpg]]
{{{
[<img(34%+,+)[images/meow.gif]]
[<img(21% ,+)[images/meow.gif]]
[<img(13%+, )[images/meow.gif]]
[<img( 8%+, )[images/meow.gif]]
[<img( 5% , )[images/meow.gif]]
[<img( 3% , )[images/meow.gif]]
[<img( 2% , )[images/meow.gif]]
[img( 1%+,+)[images/meow.gif]]
}}}
[<img(34%+,+)[images/meow.gif]]
[<img(21% ,+)[images/meow.gif]]
[<img(13%+, )[images/meow.gif]]
[<img( 8%+, )[images/meow.gif]]
[<img( 5% , )[images/meow.gif]]
[<img( 3% , )[images/meow.gif]]
[<img( 2% , )[images/meow.gif]]
[img( 1%+,+)[images/meow.gif]]
{{tagClear{
}}}
<<<
!!!!!Revisions
<<<
2009.02.24 [1.2.1] cleanup width/height regexp, use '+' suffix for resizing
2009.02.22 [1.2.0] added stretchable images
2008.01.19 [1.1.0] added evaluated width/height values
2008.01.18 [1.0.1] regexp for "(width,height)" now passes all CSS values to browser for validation
2008.01.17 [1.0.0] initial release
<<<
!!!!!Code
***/
//{{{
version.extensions.ImageSizePlugin= {major: 1, minor: 2, revision: 1, date: new Date(2009,2,24)};
//}}}
//{{{
var f=config.formatters[config.formatters.findByField("name","image")];
f.match="\\[[<>]?[Ii][Mm][Gg](?:\\([^,]*,[^\\)]*\\))?\\[";
f.lookaheadRegExp=/\[([<]?)(>?)[Ii][Mm][Gg](?:\(([^,]*),([^\)]*)\))?\[(?:([^\|\]]+)\|)?([^\[\]\|]+)\](?:\[([^\]]*)\])?\]/mg;
f.handler=function(w) {
this.lookaheadRegExp.lastIndex = w.matchStart;
var lookaheadMatch = this.lookaheadRegExp.exec(w.source)
if(lookaheadMatch && lookaheadMatch.index == w.matchStart) {
var floatLeft=lookaheadMatch[1];
var floatRight=lookaheadMatch[2];
var width=lookaheadMatch[3];
var height=lookaheadMatch[4];
var tooltip=lookaheadMatch[5];
var src=lookaheadMatch[6];
var link=lookaheadMatch[7];
// Simple bracketted link
var e = w.output;
if(link) { // LINKED IMAGE
if (config.formatterHelpers.isExternalLink(link)) {
e = createExternalLink(w.output,link);
}
else {
if (config.macros.attach && config.macros.attach.isAttachment(link)) {
// see [[AttachFilePluginFormatters]]
e = createExternalLink(w.output,link);
e.href=config.macros.attach.getAttachment(link);
e.title = config.macros.attach.linkTooltip + link;
}
else {
e = createTiddlyLink(w.output,link,false,null,w.isStatic);
}
}
addClass(e,"imageLink");
}
var img = createTiddlyElement(e,"img");
if(floatLeft) img.align="left"; else if(floatRight) img.align="right";
if(width||height) {
var x=width.trim(); var y=height.trim();
var stretchW=(x.substr(x.length-1,1)=='+'); if (stretchW) x=x.substr(0,x.length-1);
var stretchH=(y.substr(y.length-1,1)=='+'); if (stretchH) y=y.substr(0,y.length-1);
if (x.substr(0,2)=="{{")
{ try{x=eval(x.substr(2,x.length-4))} catch(e){displayMessage(e.description||e.toString())} }
if (y.substr(0,2)=="{{")
{ try{y=eval(y.substr(2,y.length-4))} catch(e){displayMessage(e.description||e.toString())} }
img.style.width=x.trim(); img.style.height=y.trim();
config.formatterHelpers.addStretchHandlers(img,stretchW,stretchH);
}
if(tooltip) img.title = tooltip;
// GET IMAGE SOURCE
if (config.macros.attach && config.macros.attach.isAttachment(src))
src=config.macros.attach.getAttachment(src); // see [[AttachFilePluginFormatters]]
else if (config.formatterHelpers.resolvePath) { // see [[ImagePathPlugin]]
if (config.browser.isIE || config.browser.isSafari) {
img.onerror=(function(){
this.src=config.formatterHelpers.resolvePath(this.src,false);
return false;
});
} else
src=config.formatterHelpers.resolvePath(src,true);
}
img.src=src;
w.nextMatch = this.lookaheadRegExp.lastIndex;
}
}
config.formatterHelpers.addStretchHandlers=function(e,stretchW,stretchH) {
e.title=((stretchW||stretchH)?'DRAG=stretch/shrink, ':'')
+'SHIFT-CLICK=show full size, CTRL-CLICK=restore initial size';
e.statusMsg='width=%0, height=%1';
e.style.cursor='move';
e.originalW=e.style.width;
e.originalH=e.style.height;
e.minW=Math.max(e.offsetWidth/20,10);
e.minH=Math.max(e.offsetHeight/20,10);
e.stretchW=stretchW;
e.stretchH=stretchH;
e.onmousedown=function(ev) { var ev=ev||window.event;
this.sizing=true;
this.startX=!config.browser.isIE?ev.pageX:(ev.clientX+findScrollX());
this.startY=!config.browser.isIE?ev.pageY:(ev.clientY+findScrollY());
this.startW=this.offsetWidth;
this.startH=this.offsetHeight;
return false;
};
e.onmousemove=function(ev) { var ev=ev||window.event;
if (this.sizing) {
var s=this.style;
var currX=!config.browser.isIE?ev.pageX:(ev.clientX+findScrollX());
var currY=!config.browser.isIE?ev.pageY:(ev.clientY+findScrollY());
var newW=(currX-this.offsetLeft)/(this.startX-this.offsetLeft)*this.startW;
var newH=(currY-this.offsetTop )/(this.startY-this.offsetTop )*this.startH;
if (this.stretchW) s.width =Math.floor(Math.max(newW,this.minW))+'px';
if (this.stretchH) s.height=Math.floor(Math.max(newH,this.minH))+'px';
clearMessage(); displayMessage(this.statusMsg.format([s.width,s.height]));
}
return false;
};
e.onmouseup=function(ev) { var ev=ev||window.event;
if (ev.shiftKey) { this.style.width=this.style.height=''; }
if (ev.ctrlKey) { this.style.width=this.originalW; this.style.height=this.originalH; }
this.sizing=false;
clearMessage();
return false;
};
e.onmouseout=function(ev) { var ev=ev||window.event;
this.sizing=false;
clearMessage();
return false;
};
}
//}}}
{{outline{
!!Outline
#Influenza
##Importance
##The disease
##Epidemics and pandemics
#Influenza virus
##Virus structure
##Virus replication
###Attachment
###Entry
###Uncoating
###Genome replication and protein synthesis
###Assembly
###Exit
#Antiviral drugs
!!Handouts and class materials
*[Dd[Group problem|web materials/influenza/group problem.pdf]] on virus replication strategies
*[Dd[Key|web materials/influenza/group problem key.pdf]] for group problem
!!Links to more information
*[[CDC influenza pages|http://www.cdc.gov/flu]]
*[[Key flu facts from the CDC|http://www.cdc.gov/flu/keyfacts.htm]]
*[[Seasonal flu and data on the current flu season|http://www.cdc.gov/flu/about/disease.htm]]
*[[Good overview of influenza|http://users.rcn.com/jkimball.ma.ultranet/BiologyPages/I/Influenza.html]]
*[[Holiday lecture on influenza|http://www.hhmi.org/biointeractive/disease/lectures.html]]
*[[Where is the flu now?|http://www.msnbc.msn.com/id/6248862]]
*[[PBS feature on the 1918 flu|http://www.pbs.org/wgbh/amex/influenza/maps/index.html]]
*[[Interactive look at influenza virus replication|http://www.microbiologybytes.com/tutorials/balti/balti.html]]
*[[Animal virus replication, with animations|http://student.ccbcmd.edu/courses/bio141/lecguide/unit3/viruses/prodlc.html]]
*[[Animations of virus replication strategies|http://www.blackwellpublishing.com/wagner/animation.asp#]]
*[[General introduction to viruses|http://www.slic2.wsu.edu:82/hurlbert/micro101/pages/Chap11.html]]
}}}
!Objectives
{{outline{
!Outline
#Influenza
##Importance
##The disease
##Epidemics and pandemics
#Influenza virus
##Virus structure
##Virus replication
###Attachment
###Entry
###Uncoating
###Genome replication and protein synthesis
###Assembly
###Exit
#Antiviral drugs
}}}
!Activities
*Group problem on how a virus with a specific genome structure replicates
!Ideas
{{lechelp{
The ''Independent Study'' section is designed to help you __prepare__ for each class session. If you learn the basics //before// you come to class, we can use class time for more sophisticated and active learning. The focused readings, guide questions and list of key terms will help you direct your preparation appropriately. We will //not// go back over these basic ideas during class; you are expected to know them (a quiz could happen at any time!). You can test your ability to apply what you've learned with the application questions, which will often be discussed in class. Application questions will help you see if you can apply what you've learned and will often be discussed in class. You are encouraged to bring your notes to class in case you need them.
}}}
{{lecblurb{
''Why is "the flu" such a big deal?'' H1N1! Bird flu! Now maybe H2N2? Why is an ordinary disease like the flu always in the news? In the next several sessions, we'll use influenza as our context for exploring the problem of viral diseases, how viruses replicate, our natural defenses against viruses (and other invaders) and how we can bolster those defenses through vaccination. In the process, we'll learn a lot of good "practical microbiology" about dealing with "the flu" and people's questions about it.
}}}
!!Focused readings
{{smalltext{all page numbers below are from //Microbiology: Diversity, Disease and the Environment// by Salyers and Whitt}}}
*Introduction to influenza: pp. 320-321
*The 1918 influenza pandemic: p. 210
*Review of basic virus structure: pp. 13-14 and Figure 1.4
*Animal virus structure: pp. 197-199 (up to "Nomenclature") and Figure 10.1
*Virus replication: pp. 201-208 (up to "Antiviral Compounds") and Figures 10.3-10.8
*Antiviral drugs: pp. 208-209 and Figure 10.9
!!Guide questions
#Why is influenza an important disease in any year?
#Why does influenza sometimes represent a major public health threat?
#What are some of the key features of the influenza virus?
#Describe the structural elements that all viruses have in common. What additional features do some viruses have?
#What are the possible genome structures of viruses?
#Which mutates more rapidly, an RNA virus or a DNA virus? Why?
#List the basic steps of replication required for any virus. You may want to sketch the steps in your notebook!
#How does the influenza virus attach to its host cell? What viral components are needed? What cell components?
#How does the influenza virus enter the cell? How does it reach the cytoplasm?
#What are some other strategies that other viruses use to enter their host cells?
#What viral genome structures can be replicated entirely by the host replication machinery? Where in the cell does their replication occur?
#What viral genome structures require viral genes for replication, and which require viral enzymes carried in the capsid? Why?
#Which of these mechanisms does the inflenza virus use to replicate its genome? Describe its replication process.
#Why is it more difficult to find a good antiviral drug than a good antibiotic?
#What step in influenza virus replication is attacked by amantidine?
!!Outside reading
{{smalltext{
Please remember outside reading is __not__ optional! This may be the shortest paper you read all term: one page! But don't be fooled: papers in //Science// are very dense. It is usually not necessary to carefully read and dissect the entire article; use the guide questions below to help you see what you need to learn from the article.
}}}
{{box{
van Riel, D., V. J. Munster, E. de Wit, G. F. Rimmelzwaan, R. A. M. Fouchier, A. D. M. E. Osterhaus, and T. Kuiken. 2006. H5N1 virus attachment to lower respiratory tract. Science ''312'':399. [L[http://www.sciencemag.org.libproxy.noctrl.edu/cgi/reprint/312/5772/399]]
}}}
#Influenza viruses are generally capable of infecting birds, animals and humans. Before the sudden appearance of H1N1 flu, the major strain we were watching was a "bird flu" virus, H5N1. This virus is highly fatal to birds and has the potential to cause serious human disease, but so far is not very easily transmited to humans.
#The authors of this paper examine why H5N1 is not very infectious for humans. Read the paper (don't forget the figure and its legend) and briefly summarize their answer to this question.
#Briefly list the main lines of evidence on which this conclusion is based.
#Finally, discuss briefly what kinds of mutations could potentially make H5N1 into a human pandemic strain.
!!Key terms
{{col3{
influenza
epidemic
pandemic
hemagglutinin (HA)
neuraminidase (NA)
sialic acid
genome
segmented genome
capsid
envelope
naked virus
enveloped virus
glycoprotein
core
matrix
attachment
receptor
entry
endocytosis
fusion
uncoating
replication
plus-sense (+strand)
minus-sense (–strand)
replicase
budding
amantidine
}}}
<script>
var ctid = story.findContainingTiddler(place).getAttribute("tiddler");
var slideState = store.getValue(ctid,"slides");
if (slideState == "true" ) {
folder = ctid.toLowerCase();
folder = folder.replace(" ","%20");
linkpath = "web%20materials/" + folder + "/slides.pdf";
var slideLink = createTiddlyElement(place,"a",null,"fileLink","click here to download")
slideLink.href = linkpath;
slideLink.onclick = openInNewWindow;
var stext = "<html><br><iframe height = \"600\" width=\"800\" src=\"";
stext += linkpath + "\"></iframe></html>";
wikify(stext,place);
}
else {
wikify("//Slides for this class session have not yet been posted. Please check back later.//",place);
}
</script>
!!Review questions
#Polio virus has a single-stranded, plus-sense RNA genome. Where in the cell will this virus replicate? Would you expect its genome to encode a replicase? Would you expect the virus to carry a replicase in its capsid?. +++*{{keyButton{[answer]}}}...
{{anstxt{
The first event for polio virus would be translation of the ss(+)RNA genome by ribosomes; this must occur in the cytoplasm. One product of translation would be a replicase which would then make ss(-)RNA templates followed by ss(+)RNA progeny genomes. The replicase does not need to be carried in the capsid.
}}}
===
#Human papilloma virus (cause of genital warts and a major factor in cervical cancer) has a double-stranded DNA genome. Where in the cell will this virus replicate? Would you expect its genome to encode a replicase? Would you expect the virus to carry a replicase in its capsid? +++*{{keyButton{[answer]}}}...
{{anstxt{
The cellular replication machinery in the nucleus is perfectly capable of replicating a dsDNA virus genome, so long as it has a recognizable origin sequence. The virus does not need to encode or carry its own replicase.
}}}
===
#Rabies virus has a single-stranded, minus-sense RNA genome. Where in the cell will this virus replicate? Would you expect its genome to encode a replicase? Would you expect the virus to carry a replicase in its capsid? +++*{{keyButton{[answer]}}}...
{{anstxt{
The cellular machinery can neither replicate nor translate ss(-)RNA. So, this virus can't do anything unless it carries its own replicase in the capsid. This replicase makes an ss(+)RNA copy of the genome, which can then be translated by ribosomes and used as the template for ss(-)RNA progeny genomes. This virus can carry out all these steps in the cytoplasm and has no need to move to the nucleus.
}}}
===
#If all you knew about influenza virus was that it has an ss(-)RNA genome, where would you expect it to replicate? Given the details you know about the actual replication process for the influenza virus, where does it have to replicate?. +++*{{keyButton{[answer]}}}...
{{anstxt{
Like the rabies virus example above, a typical ss(-)RNA virus carries a replicase and has no need to move to the nucleus. But, influenza virus replicase uses "cap snatching" to remove the 5′ end of capped cellular mRNAs and then use that short piece of RNA as a primer in making RNA. It needs to be in the nucleus to have access to a high concentration of mRNAs.
}}}
===
#A cell infected with the influenza virus synthesizes viral proteins efficiently, but its rate of synthesis of normal cellular proteins is greatly reduced. Based on what you now know about influenza virus replication, give one good reason for this difference. +++*{{keyButton{[answer]}}}...
{{anstxt{
The viral replicase cleaves off the cap from cellular mRNAs, which means many fewer mRNAs will be available for translation.
}}}
===
#A young researcher at a pharmaceutical company has found a potential new anti-influenza drug. This drug binds to the ribosome, and the researcher has demonstrated that cells infected with the influenza virus stop synthesizing viral proteins upon treatment with the drug. Do you think this is a promising candidate for clinical use? Explain. +++*{{keyButton{[answer]}}}...
{{anstxt{
Yikes! No! Sure, the drug stops virus replication, but since the virus uses __host__ cellular ribosomes for translation, this will also stop all __host__ protein synthesis!
}}}
===
#Most enveloped viruses enter the cell by fusing their envelope with the cell membrane. Influenza virus is an enveloped virus, but this is not exactly how it gets into the cell. How is influenza virus entry different from the typical enveloped virus? +++*{{keyButton{[answer]}}}...
{{anstxt{
Influenza virus first triggers endocytosis like a typical naked virus and then fuses its envelope with the membrane of the endosome to escape into the cytoplasm.
}}}
===
#The influenza virus infects many species, including birds, many mammals and humans. The HIV virus infects only humans, and in fact can infect only a specific class of human white blood cells. What do you think is responsible for the difference in host range between these two viruses? +++*{{keyButton{[answer]}}}...
{{anstxt{
The sialic acid receptor used by the influenza virus is found on many different cells, while the CD4 receptor used by the HIV virus is very specific to a particular class of WBCs. Furthermore, sialic acid is very similar in all species (it's a carbohydrate, not a protein), while the CD4 protein is different enough in different species to disallow HIV binding.
}}}
===
#What are some of the reasons why many doctors are reluctant to give their patients antiviral drugs for influenza? What patients probably should get these drugs? +++*{{keyButton{[answer]}}}...
{{anstxt{
The available drugs are expensive and only shorten the flu. However, they're very useful in protecting the elderly and immunocompromised who are at highest risk of dying from the flu.
}}}
===
#Suppose an influenza virus gets a mutation in the hemagglutinin gene that prevents the hemagglutinin protein from binding to sialic acid. What would be the effect of this mutation on the replication of the virus? (Be specific!) +++*{{keyButton{[answer]}}}...
{{anstxt{
This virus would be completely unable to infect cells, as it could not attach to its receptor and therefore could go nowhere.
}}}
===
#Suppose an influenza virus gets a mutation in the neuraminidase gene that prevents the neuraminidase protein from cleaving sialic acid. What would be the effect of this mutation on the replication of the virus? (Be specific!) +++*{{keyButton{[answer]}}}...
{{anstxt{
Many of the progeny viruses would stick to the cells they're budding out of, as HA could bind right back to the sialic acid on the cell surface. This would greatly limit the ability of the virus to spread.
}}}
===
#Suppose an influenza virus gets a mutation in the M2 gene that prevents the M2 protein from functioning. What is the normal function of this protein? What would be the effect of this mutation on the replication of the virus? (Be specific!). +++*{{keyButton{[answer]}}}...
{{anstxt{
M2 normally acts as a proton channel that acidifies the interior of the virus when the endosome is acidified, allowing the RNA to dissociate from the capsid (uncoating). A mutant virus would be able to attach to and enter the cell but would be trapped in the endosome and unable to reach the cytoplasm for replication.
}}}
===
!!Additional terms
{{col2{
respiratory droplets
spike
host range
serotype
endosome
M2 protein
RNP
assembly
lysis
rimantidine
zanamivir
oseltamivir
}}}
!!Practice problems
*[Dd[Problems|problem sets/influenza.htm]] from previous exams
*[Dd[Key|problem sets/influenza key.htm]] for problem set
/***
|Name|InlineJavascriptPlugin|
|Source|http://www.TiddlyTools.com/#InlineJavascriptPlugin|
|Documentation|http://www.TiddlyTools.com/#InlineJavascriptPluginInfo|
|Version|1.9.5|
|Author|Eric Shulman|
|License|http://www.TiddlyTools.com/#LegalStatements|
|~CoreVersion|2.1|
|Type|plugin|
|Description|Insert Javascript executable code directly into your tiddler content.|
''Call directly into TW core utility routines, define new functions, calculate values, add dynamically-generated TiddlyWiki-formatted output'' into tiddler content, or perform any other programmatic actions each time the tiddler is rendered.
!!!!!Documentation
>see [[InlineJavascriptPluginInfo]]
!!!!!Revisions
<<<
2009.04.11 [1.9.5] pass current tiddler object into wrapper code so it can be referenced from within 'onclick' scripts
2009.02.26 [1.9.4] in $(), handle leading '#' on ID for compatibility with JQuery syntax
|please see [[InlineJavascriptPluginInfo]] for additional revision details|
2005.11.08 [1.0.0] initial release
<<<
!!!!!Code
***/
//{{{
version.extensions.InlineJavascriptPlugin= {major: 1, minor: 9, revision: 5, date: new Date(2009,4,11)};
config.formatters.push( {
name: "inlineJavascript",
match: "\\<script",
lookahead: "\\<script(?: src=\\\"((?:.|\\n)*?)\\\")?(?: label=\\\"((?:.|\\n)*?)\\\")?(?: title=\\\"((?:.|\\n)*?)\\\")?(?: key=\\\"((?:.|\\n)*?)\\\")?( show)?\\>((?:.|\\n)*?)\\</script\\>",
handler: function(w) {
var lookaheadRegExp = new RegExp(this.lookahead,"mg");
lookaheadRegExp.lastIndex = w.matchStart;
var lookaheadMatch = lookaheadRegExp.exec(w.source)
if(lookaheadMatch && lookaheadMatch.index == w.matchStart) {
var src=lookaheadMatch[1];
var label=lookaheadMatch[2];
var tip=lookaheadMatch[3];
var key=lookaheadMatch[4];
var show=lookaheadMatch[5];
var code=lookaheadMatch[6];
if (src) { // external script library
var script = document.createElement("script"); script.src = src;
document.body.appendChild(script); document.body.removeChild(script);
}
if (code) { // inline code
if (show) // display source in tiddler
wikify("{{{\n"+lookaheadMatch[0]+"\n}}}\n",w.output);
if (label) { // create 'onclick' command link
var link=createTiddlyElement(w.output,"a",null,"tiddlyLinkExisting",wikifyPlainText(label));
var fixup=code.replace(/document.write\s*\(/gi,'place.bufferedHTML+=(');
link.code="function _out(place,tiddler){"+fixup+"\n};_out(this,this.tiddler);"
link.tiddler=w.tiddler;
link.onclick=function(){
this.bufferedHTML="";
try{ var r=eval(this.code);
if(this.bufferedHTML.length || (typeof(r)==="string")&&r.length)
var s=this.parentNode.insertBefore(document.createElement("span"),this.nextSibling);
if(this.bufferedHTML.length)
s.innerHTML=this.bufferedHTML;
if((typeof(r)==="string")&&r.length) {
wikify(r,s,null,this.tiddler);
return false;
} else return r!==undefined?r:false;
} catch(e){alert(e.description||e.toString());return false;}
};
link.setAttribute("title",tip||"");
var URIcode='javascript:void(eval(decodeURIComponent(%22(function(){try{';
URIcode+=encodeURIComponent(encodeURIComponent(code.replace(/\n/g,' ')));
URIcode+='}catch(e){alert(e.description||e.toString())}})()%22)))';
link.setAttribute("href",URIcode);
link.style.cursor="pointer";
if (key) link.accessKey=key.substr(0,1); // single character only
}
else { // run script immediately
var fixup=code.replace(/document.write\s*\(/gi,'place.innerHTML+=(');
var c="function _out(place,tiddler){"+fixup+"\n};_out(w.output,w.tiddler);";
try { var out=eval(c); }
catch(e) { out=e.description?e.description:e.toString(); }
if (out && out.length) wikify(out,w.output,w.highlightRegExp,w.tiddler);
}
}
w.nextMatch = lookaheadMatch.index + lookaheadMatch[0].length;
}
}
} )
//}}}
// // Backward-compatibility for TW2.1.x and earlier
//{{{
if (typeof(wikifyPlainText)=="undefined") window.wikifyPlainText=function(text,limit,tiddler) {
if(limit > 0) text = text.substr(0,limit);
var wikifier = new Wikifier(text,formatter,null,tiddler);
return wikifier.wikifyPlain();
}
//}}}
// // GLOBAL FUNCTION: $(...) -- 'shorthand' convenience syntax for document.getElementById()
//{{{
if (typeof($)=='undefined') { function $(id) { return document.getElementById(id.replace(/^#/,'')); } }
//}}}
{{outline{
!!Outline
#Barriers
##Respiratory barriers
##Other barriers
#Innate immune responses to pathogens
##The problem: recognition and response
##Recognition by macrophages: PAMPs
##Response: Inflammation
##Recognition and response by complement
##Response: Interferons
##Response: NK cells
!!Handouts and class materials
!!Links to more information
*[[Phagocytosis (includes movie)|http://www.cellsalive.com/mac.htm]]
*[[Innate immunity|http://student.ccbcmd.edu/courses/bio141/lecguide/unit4/index.html]]
*[[The inflammatory response|http://www.cellsalive.com/ouch.htm]]
*[[PAMPs and TLRs|http://student.ccbcmd.edu/courses/bio141/lecguide/unit4/innate/prr.html]]
*[[Introduction to the ImmuneSystem|http://www.cancer.gov/cancertopics/understandingcancer/immunesystem]]
}}}
!Objectives
!Outline
!Activities
!Ideas
{{lechelp{
The ''Independent Study'' section is designed to help you __prepare__ for each class session. If you learn the basics //before// you come to class, we can use class time for more sophisticated and active learning. The focused readings, guide questions and list of key terms will help you direct your preparation appropriately. We will //not// go back over these basic ideas during class; you are expected to know them (a quiz could happen at any time!). You can test your ability to apply what you've learned with the application questions, which will often be discussed in class. Application questions will help you see if you can apply what you've learned and will often be discussed in class. You are encouraged to bring your notes to class in case you need them.
}}}
{{lecblurb{
''With all these microbes around us, why don't we get sick all the time?'' Fortunately, we have a highly sophisticated system of defenses that collectively we call the immune system. For the next two class sessions, we'll explore how the major parts of the immune system work. Today, we'll focus on the //innate// immune system, which includes barriers, inflammation and pattern-based responses that don't depend on identifying a specific pathogen.
}}}
!!Focused readings
{{smalltext{all page numbers below are from //Microbiology: Diversity, Disease and the Environment// by Salyers and Whitt}}}
*Physical and chemical barriers to respiratory infection: pp. 316-319 ("Why Lung Infections are so Dangerous" up to "The Missing Defense") and Figure16.1
*Other barriers to infection: pp. 233-237 and Figures 12.1-12.3
*Recognition by macrophages: p. 237
*Activation of inflammation: pp. 237-243 and Figures 12.4, 12.5, 12.7 and 12.8
*Damage due to inflammation: pp. 244-245 (up to "Natural Killer Cells")
*Natural killer cells: pp. 245-246
!!Guide questions
#In what way do the normal flora of the mouth and throat help protect against infection of the lung?
#How does the mucin layer help protect physically against respiratory infections?
#How do the ciliated cells help protect against respiratory infections?
#What defensive cells would a microbe encounter if it got past these barriers and into the lung?
#Why are physical and chemical barriers called "nonspecific" defenses?
#What defensive benefits do we gain from having an outer layer of dead cells on our skin?
#How can pathogens get through the skin to establish an infection?
#What chemical defenses do we find in the mucin layer?
#If a pathogen gets through the skin, where would it probably first encounter macrophages?
#Where would a pathogen that breached the mucosal layer first encounter macrophages?
#How does complement become activated in the presence of a bacterial pathogen?
#How does active complement protein C5a contribute to phagocytosis of an invading organism?
#How does active complement protein C3b contribute to phagocytosis of an invading organism?
#How do cytokines contribute to this process?
#What is one way that excessive activation of inflammation can have a //negative// effect on the patient?
#Why and how does a natural killer cell (NK) kill other cells in the human body?
#How is an NK cell similar to and different from a cytotoxic T cell (T~~C~~)?
!!Outside reading
>@@color: maroon;O'Neill, L. A. J. 2005. Immunity's early warning system. Sci. Amer. ''292'' (1):38-45. [L[https://login.libproxy.noctrl.edu/login?url=http://www.nature.com/scientificamerican/journal/v292/n1/pdf/scientificamerican0105-38.pdf]]@@
#Define Toll-like receptors (TLRs) in a sentence or two. Be sure your definition explains their function as well as what they are.
#Would TLRs be considered specific or nonspecific defenses? Justify your answer.
#What are some molecules that TLRs can bind to?
#Which TLRs would respond specifically to viral infections?
!!Key terms
{{col3{
innate immunity
barriers
ciliated epithelium
mucin
mucosa
lysozyme
lactoferrin
defensins
keratin
lysozyme
phagocytosis
macrophages
SALT, GALT, MALT
toll-like receptors (TLRs)
inflammation
cytokines
neutrophils (PMNs)
complement
C5a
C3b
opsonization
septic shock
}}}
!!Application question
>Considering barriers, macrophages, activation of inflammation, TLRs, etc., summarize how you think the innate immune response would respond to an infection by the influenza virus.
<script>
var ctid = story.findContainingTiddler(place).getAttribute("tiddler");
var slideState = store.getValue(ctid,"slides");
if (slideState == "true" ) {
folder = ctid.toLowerCase();
folder = folder.replace(" ","%20");
linkpath = "web%20materials/" + folder + "/slides.pdf";
var slideLink = createTiddlyElement(place,"a",null,"fileLink","click here to download")
slideLink.href = linkpath;
slideLink.onclick = openInNewWindow;
var stext = "<html><br><iframe height = \"600\" width=\"800\" src=\"";
stext += linkpath + "\"></iframe></html>";
wikify(stext,place);
}
else {
wikify("//Slides for this class session have not yet been posted. Please check back later.//",place);
}
</script>
!!Review questions
#Which of the upper respiratory defenses do you think would be most important against the influenza virus specifically? Which would have little or no effect against this pathogen? +++*{{keyButton{[answer]}}}...
{{anstxt{
Among the barriers, ciliated cells, mucus and sloughing of epithelial cells would all be important; the chemical defenses like lysozyme and lactoferrin are primarily directed against bacteria.
Among other responses, phagocytosis is helpful, but probably interferons and natural killer cells do the most good. Complement is directed largely against bacteria, and we don't expect to truly clear the infection by phagocytosis because the viruses spend much of their time inside cells.
}}}
===
#Where do you think the influenza virus would first encounter macrophages or macrophage-like cells? Why? +++*{{keyButton{[answer]}}}...
{{anstxt{
Most likely in the MALT underlying the epithelium of the pharynx and upper respiratory system, to which the viruses would be exposed as they infect and lyse epithelial cells. A few might make it to the lungs and encounter alveolar macrophages.
}}}
===
#The most common cause of death from influenza is actually bacterial pneumonia. Why do you think someone is much more likely to get bacterial pneumonia following a bout of the flu? +++*{{keyButton{[answer]}}}...
{{anstxt{
The influenza virus is infecting and killing the ciliated epithelial cells that beat their cilia to keep particles out of the respiratory system and secrete mucus. With these defenses reduced, there is much greater likelihood that a bacterium like //Streptococcus pneumoniae// could get all the way to the lungs and establish an infection there.
}}}
===
#TLR3 is likely to be involved in recognition of influenza virus; this TLR binds dsRNA. Explain why this target would be present in an influenza infection. +++*{{keyButton{[answer]}}}...
{{anstxt{
When the influenza virus replicates, its replicase makes a ss(+)RNA template from the ss(-)RNA genome, and then that template is used to synthesize more ss(-)RNA genomes. During synthesis, the template and genome RNAs will be paired up as dsRNA.
}}}
===
#Macrophages are not the most important phagocytes in the body in terms of eliminating invading organisms (which cells are?). However, they are critical to the operation of the defense system as a whole. Why? +++*{{keyButton{[answer]}}}...
{{anstxt{
Neutrophils, not macrophages, are the major phagocytes. But, macrophages are central to the response: it is these cells that recognize PAMPs and generate cytokine signals that allow neutrophils to respond, and they also initiate the adaptive immune response.
}}}
===
#Give at least one specific example of how our normal flora can act in a specific way (not just by crowding or competiton) to defend us against pathogens. +++*{{keyButton{[answer]}}}...
{{anstxt{
The most specific example we've talked about is the //Lactobacilli// and other flora of the vagina that utilize glycogen synthesized in response to estrogen and produce lactic acid and peroxide. This lowers vaginal pH and increases oxidative stress, killing many other bacteria that might otherwise be able to colonize.
}}}
===
#There are more options for innate immune responses to bacteria than to viruses. Why do you think this is the case? +++*{{keyButton{[answer]}}}...
{{anstxt{
Bacteria are structurally complex cells that not only have a variety of components and metabolic processes but (being prokaryotes) are very different from our own cells. There are many molecules that could be used to distinguish between a bacterial cell and a human cell. Viruses have few components and no metabolism, so there are not many targets for recognition that would be distinct from human cell components; additionally, they invade cells and thus are not available for phagocytosis, etc. much of the time.
}}}
===
#Suppose an individual had a genetic defect resulting in the lack of complement protein C5. In what specific way(s) do you think his or her innate immune defenses would be impaired? +++*{{keyButton{[answer]}}}...
{{anstxt{
When activated, the C5a portion of C5 acts as a chemoattractant for neutrophils; in its absence, fewer neutrophils would find the specific area where the infection is being fought. C5b contributes to a complex used for lysing bacterial cells, so the efficiency of the anti-bacterial defenses would also be reduced.
}}}
===
!!Additional terms
{{col2{
recognition
interferons
NK cells
inhibitory/activating receptors
}}}
!!Practice problems
*[Dd[Problems|problem sets/innate immunity.htm]] from previous exams
*[Dd[Key|problem sets/innate immunity key.htm]] for problem set
<script>
var tids = store.getTaggedTiddlers("supplies");
var cats = new Array();
var text = "";
for (var i=0; i<tids.length; i++) { text += tids[i].text + "\n"; }
text = text.replace(/\{\{ckList\{\n/g,"");
text = text.replace(/\}\}\}/g,"");
text = text.replace(/\n\n/g,"\n");
text = text.split("\n");
for ( var i = 0; i < text.length; i++ ) {
if ( text[i].substr(0,2) == "!!" ) {
var found = -1;
var ccat = text[i];
for ( var j=0; j < cats.length; j++ ) {
if ( cats[j][0] == ccat ) {
found = j;
break;
}
}
if ( found == -1 ) {
var clen = cats.length;
cats[clen] = new Array();
cats[clen][0] = ccat;
found = clen;
}
}
else {
if ( text[i].substr(0,1) == "*" ) {
if ( text[i].indexOf(":") > -1 ) { text[i] = text[i].substr(0,text[i].indexOf(":")); }
cats[found].push(text[i]);
}
}
}
for ( var i=0; i<cats.length; i++ ) {
wikify(cats[i][0],place);
var ctext = "{{invList{\n";
var tarray = getUniqueArray(cats[i]);
tarray.splice(0,1);
tarray.sort(function(x,y){
var a = String(x).toUpperCase();
var b = String(y).toUpperCase();
if (a > b)
return 1
if (a < b)
return -1
return 0;
});
for ( var j=0; j<tarray.length; j++) {
ctext += tarray[j]+"\n"
}
ctext += "}}}";
wikify(ctext,place);
}
</script>
!!!!Characterization of Bacteria
!Day 1
!!Media
[ ][M[Trypticase soy agar (TSA)]] plates - 3 total for the lab, by 2 days before lab
[ ][M[Brain-heart infusion (BHI) agar]] slants - 4 total for the lab, by 2 days before lab
[ ][M[Luria-Bertani (LB) agar]] slants - 4 total for the lab, by 2 days before lab
[ ][M[Trypticase soy broth (TSB)]] - one 50-ml bottle per table
[ ]BHI agar plates - one plate per person
>//''Note: pour all agar plates at least 24 hours before use and let dry in 37°C incubator overnight''//
!!Cultures
!!!Three days before lab:
[ ]2-ml culture of //[B[E. coli strain K-12]]// in LB broth at 37°C with aeration
[ ]2-ml culture of //[B[Serratia marcescens strain D1]]// in LB broth at 37°C with aeration
!!!Two days before lab:
[ ]Prepare //E. coli/////Serratia// plates:
>Mix 50 ml of //E. coli// culture with 200 ml of //S. marcescens// culture
>Make 10^^-5^^, 10^^-6^^ and 10^^-7^^ dilutions of the mixture
>Plate 100 ml of each dilution on a TSA plate, incubate at 25°C until lab day
[ ]Inoculate two BHI agar slants with //[B[Branhamella catarrhalis]]//, grow at 37°C
[ ]Inoculate two BHI agar slants with //[B[Staphylococcus epidermidis]]//, grow at 37°C
[ ]Inoculate two LB agar slants with //[B[Streptococcus salivarius]]//, grow at 37°C
[ ]Inoculate two LB agar slants with //[B[Proteus vulgaris]]//, grow at 37°C
!!Advance preparation:
[ ]Sterile [S[16×125 mm culture tubes]], 2 per pair
!!Day of lab preparation
[ ]Choose //E. coli/////Serratia// plate with ~1000 colonies (should look crowded)
!!Supplies available on north bench
[ ]Bottles of TSB
[ ]Plate of //E. coli// and //Serratia// colonies
[ ]Sterile 16x125 mm tubes
[ ]Sterile [S[10-ml disposable pipets]]
[ ]Slants of bacteria for Gram staining
[ ]Box of [S[sterile cotton swabs]]
[ ][S[Sterile tongue depressors]]
[ ]BHI plates
[ ][M[Blood agar plates]] (1 per person)
[ ]Autoclave bag marked for swabs
[ ]Nikon digital camera (plug USB cable into computer)
!!After lab
[ ]Autoclave swabs and tounge depressors, discard
[ ]Check drawers and tables, note any problems
[ ]Store slants in a rack on the north bench until the end of the experiment (they can be used as controls); do not refrigerate
[ ]Discard the //E. coli/Serratia// plates
[ ]Refrigerate leftover media
!Day 2
!!Media preparation
[ ][M[Brain-heart infusion (BHI) agar]] plates: 3 plates per person
[ ][M[EMB agar]] plates: 2 plates per person
[ ][M[Fluid thioglycollate]]: 10 ml in [G[screw-cap tubes]], 5 per pair (see recipe card)
[ ][M[Phenol red broth]] [[fermentation tubes|How-To##Fermentation tubes]] with 1% [C[glucose]] and [S[Durham tube]]: 5 per person
[ ]Phenol red broth with 1% [C[lactose]] and Durham tube: 5 per person
[ ]Phenol red broth with 1% [C[maltose]] and Durham tube: 5 per pair
[ ]Phenol red broth with 1% [C[mannitol]] and Durham tube: 5 per pair
[ ]Phenol red broth with 1% [C[sucrose]] and Durham tube: 5 per pair
[ ][M[SIM agar]] [[stabs|How-To##Stabs]]: 7 ml in screw-cap tubes, 5 per pair
[ ][M[Nitrate broth]]: 12 ml in [S[16×125 mm culture tubes]] with Durham tubes: 5 per pair
[ ][M[MR/VP broth]]: 3 ml in 16x125 mm tubes: 1 per person
[ ][M[arginine broth]]: 3 ml in 16x125 mm tubes: 1 per person
[ ][M[urease broth]]: 3 ml in 16x125 mm tubes: 1 per person
[ ][M[Mueller-Hinton agar]] plates: 1 plate per person
[ ][M[Mueller-Hinton broth]] tubes: 3 ml in 16x125 mm tubes: 1 per person
[ ][M[Luria-Bertani (LB) broth]]: 3 ml in 16 x 125 mm tubes: 1 per person
!!Reagents and solutions
[ ]3% [C[hydrogen peroxide]] in dropping bottle (undiluted H~~2~~O~~2~~ is 30%)
[ ]5% [C[sodium deoxycholate]] (in water, no need to sterilize, do not refrigerate)
[ ]50 ml [O[Kovac's reagent]] (see recipe card)
[ ]50 ml [O[Nitrate reagent A]] (see recipe card)
[ ]50 ml [O[Nitrate reagent B]] (see recipe card)
[ ]50 ml [O[Barritt's reagent A]] (see recipe card)
[ ]50 ml [O[Barritt's reagent B]] (see recipe card)
!!Lab setup
[ ]2 racks for tubes, labeled Bio 340, in 37°C incubator
!!Supplies available on North bench
[ ]Slants of control bacteria
[ ]BHI plates
[ ]Blood agar plates (3 per person)
[ ]Sodium deoxycholate
[ ]Sterile, [S[disposable Pasteur pipettes]]
[ ]Sterile swabs
!!Refrigerator
>Note that only the BHI and blood agar plates are actually needed during lab today. The rest of the media and reagents should be clearly marked and available in the refrigerator for students to use beginning the day after this lab.
[ ]Fluid thioglycollate tubes
[ ]H~~2~~O~~2~~
[ ][C[Coagulase plasma]], 1 vial/person
[ ]Carbohydrate tubes
[ ]SIM agar tubes
[ ]Kovac's reagent
[ ]nitrate broth tubes
[ ]nitrate Reagent A
[ ]nitrate Reagent B
[ ]MR/VP broth tubes
[ ]arginine broth tubes
[ ]urease broth tubes
[ ]Barritt's Reagent A
[ ]Barritt's Reagent B
[ ]Nessler's reagent
[ ]EMB agar
[ ]Mueller-Hinton agar
[ ][A[Methicillin sensitivity discs]]
[ ][A[Bacitracin sensitivity discs]]
[ ]LB broth tubes
!!After lab
[ ]Check drawers and tables, note any problems
[ ]Refrigerate leftover media
[ ]Refill tip boxes and tube jars as needed
[ ]Dishwashing as needed
!Day 3
!!Supplies available on north bench
>No additional media preparation is required for this lab: these are the same materials as for day 2.
[ ]Slants of control bacteria
[ ]Sodium deoxycholate
[ ]Sterile, disposable Pasteur pipettes
[ ]Fluid thioglycollate tubes
[ ]H~~2~~O~~2~~
[ ]Coagulase plasma, 1 vial/person
[ ]Carbohydrate tubes
[ ]SIM agar tubes
[ ]Kovac's reagent
[ ]nitrate broth tubes
[ ]nitrate Reagent A
[ ]nitrate Reagent B
[ ]EMB agar
[ ]LB broth tubes
!!After lab
[ ]Check drawers and tables, note any problems
[ ]Store slants in a rack on the north bench until the end of the experiment (they can be used as controls); do not refrigerate
[ ]Refrigerate leftover media
[ ]Refill tip boxes and tube jars as needed
[ ]Dishwashing as needed
!Day 4
!!Supplies available on north bench
>No additional media preparation is required for this lab: these are the same materials as for day 2.
[ ]Slants of control bacteria
[ ]Sodium deoxycholate
[ ]Sterile, disposable Pasteur pipettes
[ ]Fluid thioglycollate tubes
[ ]H~~2~~O~~2~~
[ ]Coagulase plasma, 1 vial/person
[ ]Carbohydrate tubes
[ ]SIM agar tubes
[ ]Kovac's reagent
[ ]nitrate broth tubes
[ ]nitrate Reagent A
[ ]nitrate Reagent B
[ ]EMB agar
[ ]LB broth tubes
!!After lab
[ ]Check drawers and tables, note any problems
[ ]Store slants in a rack on the north bench until the end of the experiment (they can be used as controls); do not refrigerate
[ ]Refrigerate leftover media
[ ]Refill tip boxes and tube jars as needed
[ ]Dishwashing as needed
For notebook, where there are ambiguities or uncertainties, list specific further tests that could be done from Bergey's
Previous to 2007, used mixtures of 3 known bacteria to make "unknown":
A and E: 600 µl S. lutea, 300 µl E. coli, 100 µl P. vulgaris
B and F: 300 µl S. marcescens, 300 µl S. typhimurium, 500 µl B. subtilis
C and G: 600 µl S. faecalis, 200 µl Ps. fluorescens, 200 µl E. aerogenes
D and H: 400 µl E. aerogenes, 200 µl P. vulgaris, 400 µl Ps. aeruginosa
<script>
var tableString = "|datetable|k\n| No | Day | Date | Topic |h\n";
for ( var i=0; i<courseData.length; i++ ) {
if (courseData[i] && courseData[i].labday) {
var labText = "| ";
if ( courseData[i].lab > 0 ) { labText += courseData[i].lab; }
labText += "| " + courseData[i].niceday + " | " + courseData[i].day + " " + courseData[i].nicemonth + "|";
if ( courseData[i].labExist == 1 ) { labText += "[["; }
labText += courseData[i].labtext;
if ( courseData[i].labExist == 1 ) { labText += "|" + courseData[i].labshort + "]]"; }
labText += "|\n";
tableString += labText;
}
}
tableString += "\n";
wikify(tableString,place);
</script>
|ltable|k
|>| date | topic |h
| 3 Jan| M |[[Characterization of Bacteria, day 1|Lab 1##Day 1]]|
| 5 Jan| W |[[Characterization of Bacteria, day 2|Lab 1##Day 2]]|
| 10 Jan| M |[[Characterization of Bacteria, day 3|Lab 1##Day 3]]|
| 12 Jan| W |[[Characterization of Bacteria, day 4|Lab 1##Day 4]]<br>[[Antimicrobial Testing, day 1|Lab 2##Day 1]]|
| 17 Jan| M |[[Antibiotic Resistance, day 1|Lab 3##Day 1]]|
| 19 Jan| W |[[Antimicrobial Testing, day 2|Lab 2##Day 2]]<br>[[Antibiotic Resistance, day 2|Lab 3##Day 2]]|
| 24 Jan| M |[[Antimicrobial Testing, day 3|Lab 2##Day 3]]<br>[[Antibiotic Resistance, day 3|Lab 3##Day 3]]|
| 26 Jan| W |[[Antibiotic Resistance, day 4|Lab 3##Day 4]]<br>[[Soil Communities, day 1|Lab 4##Day 1]]|
| 31 Jan| M |[[Antibiotic Resistance, day 5|Lab 3##Day 5]]<br>[[Soil Communities, day 2|Lab 4##Day 2]]|
| 2 Feb| W |[[Soil Communities, day 3|Lab 4##Day 3]]|
| 7 Feb| M |[[Soil Communities, day 4|Lab 4##Day 4]]|
| 9 Feb| W |[[Soil Communities, day 5|Lab 4##Day 5]]|
| 14 Feb| M |[[Soil Communities, day 6|Lab 4##Day 6]]|
| 16 Feb| W |[[Soil Communities, day 7|Lab 4##Day 7]]|
| 21 Feb| M |[[Soil Communities, day 8|Lab 4##Day 8]]<br>[[Isolation of Bacteriophage, day 1|Lab 5##Day 1]]|
| 23 Feb| W |[[Soil Communities, day 9|Lab 4##Day 9]]<br>[[Isolation of Bacteriophage, day 2|Lab 5##Day 2]]|
| 28 Feb| M |[[Soil Communities, day 10|Lab 4##Day 10]]<br>[[Isolation of Bacteriophage, day 3|Lab 5##Day 3]]|
| 2 Mar| W |[[Soil Communities, day 11|Lab 4##Day 11]]<br>[[Isolation of Bacteriophage, day 4|Lab 5##Day 4]]|
| 7 Mar| M |Current Microbiology presentations|
| 9 Mar| W |Soil Communities poster presentations|
<!--{{{-->
<div class='toolbar' macro='toolbar [[ToolbarCommands::EditToolbar]]'></div>
<div><span class='FormLabel'>Lab no. (e.g.: Lab 1): </span><span class='FormEdit' macro='edit title'></span></div>
<div><span class='FormLabel'>Short title (e.g.: microscope): </span><span class='FormEdit' macro='edit short'></span></div>
<div><span class='FormLabel'>Lab title (e.g.: Using the Microscope): </span><span class='FormEdit w500' macro='edit labtitle'></span></div>
<div macro='annotations'></div>
<div class='editor' macro='edit tags'></div><div class='editorFooter'><span macro='message views.editor.tagPrompt'></span><span macro='tagChooser excludeLists'></span></div>
<!--}}}-->
<!--{{{-->
<div macro='hideWhen readOnly'><div class='toolbar' macro='toolbar [[ToolbarCommands::FullToolbar]]'></div></div>
<div macro='showWhen readOnly'><div class='toolbar' macro='toolbar [[ToolbarCommands::ViewToolbar]]'></div></div>
<div class='title'><span macro='view title'></span><span macro='view labtitle'>: </span></div>
<div macro='showWhen config.options.txtUserType == "studentUser"'>
<div class='viewer' macro='tiddler labTabs##StudentTabset with:{{tiddler.title.toLowerCase().replace(/\s/g,"")}}'></div>
</div>
<div macro='showWhen config.options.txtUserType == "labAsstUser"'>
<div class='viewer' macro='tiddler labTabs##LabAsstTabset with:{{tiddler.title.toLowerCase().replace(/\s/g,"")}}'></div>
</div>
<div macro='showWhen config.options.txtUserType == "facultyUser"'>
<div class='viewer' macro='tiddler labTabs##FacultyTabset with:{{tiddler.title.toLowerCase().replace(/\s/g,"")}}'></div>
</div>
<div class='tagClear'></div>
<div class='viewer' macro='view text wikified'></div>
<!--}}}-->
<script>
schedArray = [];
for ( var i=0; i<courseData.length; i++ ) {
if (courseData[i] && courseData[i].lectureday) {
var lecText = "| ";
if ( courseData[i].lec > 0 ) { lecText += courseData[i].lec; }
lecText += "| " + courseData[i].niceday + " | " + courseData[i].day + " " + courseData[i].nicemonth + "|";
if ( courseData[i].lecExist == 1 ) { lecText += "[["; }
lecText += courseData[i].text
if ( courseData[i].lecExist == 1 ) { lecText += "|" + courseData[i].short + "]]"; }
lecText += "|";
schedArray.push(lecText);
}
}
var halfTable = parseInt(schedArray.length/2);
if ( halfTable < schedArray.length/2 ) { halfTable++; }
var tableString = "|datetable|k\n| No | Day | Date | Topic || No | Day | Date | Topic |h\n";
for ( var i = 0; i<halfTable; i++) {
tableString += schedArray[i];
if ( halfTable + i < schedArray.length ) { tableString += schedArray[i+halfTable]; }
else { tableString += "|||||" }
tableString += "\n";
}
wikify(tableString,place);
</script>
|01|Introduction|Course Introduction and Vaccination Issues|There is no advance reading for this class session.|
|02|Microbe Hunters|Microbe Hunters and the Scientific Method|Hofkin, pp. 120-130: "The Science of Microbiology: A Brief History"<br>Hofkin, pp. 10-13: "The Scientific Method"|
|03|Cells|Cells and Microbes|Hofkin, pp. 3-5: "All living things are composed of one or more cells" through "Viruses strain our notion of what it means to be 'alive'<br>Hofkin, pp. 45-57, "The Cell: Where Life Begins" up to "Some prokaryotes lack a cell wall"|
|04|
<!--{{{-->
<div class='toolbar' macro='toolbar [[ToolbarCommands::EditToolbar]]'></div>
<div><span class='FormLabel'>Short title: </span><span class='FormEdit' macro='edit title'></span></div>
<div><span class='FormLabel'>Full title: </span><span class='FormEdit w500' macro='edit fulltitle'></span></div>
<div macro='annotations'></div>
<div class='editor' macro='edit tags'></div><div class='editorFooter'><span macro='message views.editor.tagPrompt'></span><span macro='tagChooser excludeLists'></span></div>
<!--}}}-->
<!--{{{-->
<div macro='hideWhen readOnly'><div class='toolbar' macro='toolbar [[ToolbarCommands::FullToolbar]]'></div></div>
<div macro='showWhen readOnly'><div class='toolbar' macro='toolbar [[ToolbarCommands::ViewToolbar]]'></div></div>
<div class='title' macro='view fulltitle'></div>
<div macro='showWhen config.options.txtUserType == "facultyUser"'><div class='subtext' macro='view title'></div><div style='float:right;' class='subtext' macro='checkbox slides@'>post slides</div></div>
<div macro='showWhen config.options.txtUserType != "facultyUser"'>
<div class='viewer' macro='tiddler lecTabs##StudentTabset with:{{tiddler.title}}'></div>
</div>
<div macro='showWhen config.options.txtUserType == "facultyUser"'>
<div class='viewer' macro='tiddler lecTabs##FacultyTabset with:{{tiddler.title}}'></div>
</div>
<div class='tagClear'></div>
<div class='viewer' macro='view text wikified'></div>
<!--}}}-->
// // Scrollable window
//{{{
// //setStylesheet(".tiddler{height: " + window.innerHeight*0.8 + "px; overflow-y:auto;}\n","WindowStyles");
//}}}
// //Put index in backstage
//{{{
config.tasks.myTab = {
text: "index",
tooltip: "Index of all tiddlers",
content: "<<tiddler index>>"
};
config.backstageTasks.push("myTab");
//}}}
// //Put style sheet in backstage
//{{{
config.tasks.styleSheet = {
text: "styles",
tooltip: "Open style sheet",
action: function() {story.displayTiddler("top","StyleSheet");}
};
config.backstageTasks.push("styleSheet");
//}}}
// //Permanent options
//{{{
config.options.chkAutoSave=true;
config.options.chkConfirmDelete=true;
config.options.chkOpenInNewWindow=true;
config.options.chkHttpReadOnly=false;
config.options.txtUserName="JV";
config.options.chkSaveBackups=false;
config.options.txtBackupFolder="Backups";
config.options.chkDisableNonExistingWikiLinks= true; // disable automatic creation of links from WikiWords
config.options.chkDisableWikiLinks=true; // disable automatic creation of links from WikiWords
config.options.chkHideTabsBarWhenSingleTab=true; // remove tab bar when only one tab open
config.macros.edit.saveMsg = ""; // suppress save message for editing in view mode
store.setValue("loginBox","text",store.getTiddler("loginBoxStore").text);
//}}}
// // Login function
//{{{
config.options.txtUserType="studentUser"; // set intial user to student pending login
readOnly = true;
function logMeIn(passCode) {
if ( passCode == "10576117118771059911411198101115") { config.options.txtUserType = "labAsstUser"; }
else if ( passCode == "105761171187710599114111981011153333") { config.options.txtUserType = "facultyUser";}
else { alert ("Sorry, you don't seem to know the password."); }
if ( config.options.txtUserType != "studentUser" ) {
store.setValue("loginBox","text",store.getTiddler("logoutBoxStore").text);
}
if ( config.options.txtUserType == "facultyUser" ) {
store.setValue("menuStore","text",store.getValue("facultyMenuStore","text"));
readOnly = false;
showBackstage = true;
if ( !backstage.button ) { backstage.init() };
if ( !backstage.isVisible() ) { backstage.show(); }
}
story.closeAllTiddlers();
story.displayDefaultTiddlers();
refreshAll();
};
//}}}
// //Formatter for image with caption
// // syntax: {{{[1>i(w,h)[caption:path]]}}} where 1 is 1 for border, 0 for no border, > floats right, < floats left (omit for no float)
//{{{
config.formatters.push({
name:"imagecap",
match:"\\[[0-9]{0,1}[><]{0,1}[Ii](?:\\([^,]*,[^\\)]*\\))?\\[",
lookaheadRegExp:/\[([0-9]{0,1})([><]{0,1})[Ii](?:\(([^,]*),([^\)]*)\))?\[(.+?)\]\]/g,
handler:function(w) {
this.lookaheadRegExp.lastIndex=w.matchStart;
var eMatch=this.lookaheadRegExp.exec(w.source);
if(eMatch && eMatch.index==w.matchStart) {
var iborder = eMatch[1];
var ipos = eMatch[2];
var iwidth = eMatch[3];
var iheight = eMatch[4];
var ipath = eMatch[5];
var icap = "";
if ( ipath.indexOf("|") > -1 ) {
icap = ipath.substr(0,ipath.indexOf("|"));
ipath = ipath.substr(ipath.indexOf("|")+1);
}
var iclass = "imgWrap";
if ( ipos == "<" ) { iclass += " iLeft"; }
if ( ipos == ">" ) { iclass += " iRight"; }
if ( !iborder == "" && iborder == 0 ) { iclass += " iNoBord"; }
var idiv = createTiddlyElement(w.output,"div",null,iclass);
var iImg = createTiddlyElement(idiv,"img");
iImg.src = ipath;
if ( iwidth || iheight ) {
if ( iwidth ) { iImg.style.width = iwidth.trim() + "px"; } else { iImg.style.width = "auto"; }
if ( iheight ) { iImg.style.height = iheight.trim() + "px"; } else { iImg.style.height = "auto"; }
iImg.oriHt = iImg.style.height;
iImg.oriWd = iImg.style.width;
iImg.title = "SHIFT-CLICK=show full size, CTRL-CLICK=restore original size";
iImg.onclick = function (ev) { if (ev.ctrlKey) { iImg.style.width = iImg.oriWd; iImg.style.height = iImg.oriHt; } if (ev.shiftKey) { iImg.style.width = iImg.naturalWidth + "px"; iImg.style.height = iImg.naturalHeight + "px"; } };
}
if ( icap != "" ) {
icap = wikifyStatic(icap,null,null);
var cdiv = createTiddlyElement(idiv,"div",null,"iCap");
cdiv.innerHTML = icap;
}
w.nextMatch=eMatch.index+eMatch[0].length;
}
}
});
//}}}
// // Show a sorted list of announcements and due dates
//{{{
config.macros.remind = {
handler: function(place,macroName,params,wikifier,paramString) {
var parsed=paramString.parseParams('anon',null,true,false,false);
var aShow=getParam(parsed,'show','current').toLowerCase();
var aType = getParam(parsed,'type','ad').toLowerCase();
var aEvent = getParam(parsed,'event',0).toUpperCase();
var aExams = getParam(parsed,'exams',1);
var text = store.getTiddler("dates & reminders").text;
text = text.substring(0,text.indexOf("----"));
var rems = [];
var nextrem = 0;
var match;
if ( aType.indexOf("a") > -1 ) {
var re = /\[[Aa]\((.*?),(.*?),(.*?),(.*?)\)\[(.*?)\]\]/g;
while ( match = re.exec(text) ) {
rems[nextrem]={};
rems[nextrem].start=match[1];
rems[nextrem].end=match[2];
rems[nextrem].link=match[3];
rems[nextrem].showdate=match[4];
rems[nextrem].text=match[5];
rems[nextrem].type="a";
nextrem++;
}
}
if ( aType.indexOf("d") > -1 ) {
re = /\[[Dd]\((.*?),(.*?)\)\[(.*?)\]\]/g;
while ( match = re.exec(text) ) {
rems[nextrem]={};
rems[nextrem].date=match[1];
rems[nextrem].link=match[2];
rems[nextrem].text=match[3];
rems[nextrem].type="d";
nextrem++;
}
}
if ( aType.indexOf("f") > -1 && config.options.txtUserType == "facultyUser" ) {
re = /\[[Ff]\((.*?),(.*?)\)\[(.*?)\]\]/g;
while ( match = re.exec(text) ) {
rems[nextrem]={};
rems[nextrem].date=match[1];
rems[nextrem].link=match[2];
rems[nextrem].text=match[3];
rems[nextrem].type="f";
nextrem++;
}
}
if ( aExams == 1 ) {
for ( var i = 0; i < courseData.length; i++ ) {
if ( courseData[i] && courseData[i].exam ) {
rems[nextrem]={};
rems[nextrem].date=fmtDateSlash(courseData[i].date);
rems[nextrem].text=courseData[i].text;
rems[nextrem].link=0;
rems[nextrem].type="e";
nextrem++;
}
}
}
for ( var i = 0; i < rems.length; i++ ) {
if ( rems[i].link != 0 ) {
if ( rems[i].link.substr(0,1).toUpperCase() == "L" ) {
var labNo = rems[i].link.substr(1);
for ( var j=0; j<courseData.length; j++ ) {
if ( courseData[j] && courseData[j].lab == labNo ) {
var realDate = new Date(courseData[j].date);
rems[i].lab = labNo;
rems[i].data = i;
break;
}
}
}
else {
var lecNo = rems[i].link;
for ( var j=0; j<courseData.length; j++ ) {
if ( courseData[j] && courseData[j].lec == lecNo ) {
var realDate = new Date(courseData[j].date);
rems[i].lec = lecNo;
rems[i].data = i;
break;
}
}
}
}
if ( rems[i].date ) {
if ( rems[i].date.substr(0,1) == "+" || rems[i].date.substr(0,1) == "-") {
realDate.setDate(realDate.getDate() + parseInt(rems[i].date,10));
rems[i].date = fmtDateSlash(realDate);
rems[i].end = rems[i].date;
rems[i].sort = realDate;
realDate.setDate(realDate.getDate()-7);
rems[i].start = fmtDateSlash(realDate);
}
else {
rems[i].end = rems[i].date;
var sDate = new Date(rems[i].date);
sDate.setDate(sDate.getDate() - 7);
rems[i].start = fmtDateSlash(sDate);
rems[i].sort = sDate;
}
}
else {
if ( rems[i].start.substr(0,1) == "+" || rems[i].start.substr(0,1) == "-") {
var sDate = new Date(realDate);
sDate.setDate(sDate.getDate() + parseInt(rems[i].start,10));
rems[i].start = fmtDateSlash(sDate);
rems[i].sort = sDate;
}
else { rems[i].sort = new Date(rems[i].start); }
if ( rems[i].end.substr(0,1) == "+" || rems[i].end.substr(0,1) == "-") {
realDate.setDate(realDate.getDate() + parseInt(rems[i].end,10));
rems[i].end = fmtDateSlash(realDate);
}
}
}
rems.sort(function(a,b) { return(a.sort-b.sort) });
var theList = createTiddlyElement(place,"ul",null,"remList","");
var today = new Date();
if ( aEvent == "Z" ) {
var t = place;
while ( !t.getAttribute("tiddler") ) { t = t.parentNode; }
if ( t.getAttribute("tags").indexOf("Lectures") > -1 ) { aEvent = parseFloat(t.getAttribute("tags").match(/\d\d/)[0]); }
else if ( t.getAttribute("tags").indexOf("Labs") > -1 ) { aEvent = "L" + parseInt(t.getAttribute("tiddler").match(/\d{1,2}/)[0],10); }
}
for ( var i=0; i<rems.length; i++ ) {
if ( ( ( aShow == "current" && today >= new Date(rems[i].start) && today <= new Date(rems[i].end) ) || aShow == "all" ) && ( aEvent == 0 || rems[i].link == aEvent ) ) {
var listText = rems[i].text.replace("@@","[[");
listText = listText.replace("@@","]]");
if ( rems[i].type == "a" ) {
var theItem = createTiddlyElement(theList,"li",null,"announce","");
if ( rems[i].showdate == 1 ) { listText = rems[i].start + " - " + listText; }
else if (rems[i].showdate == 2) { listText = rems[i].end + " - " + listText; }
}
if ( rems[i].type == "d" ) {
var theItem = createTiddlyElement(theList,"li",null,"due","");
listText = rems[i].date + " - " + listText;
}
if ( rems[i].type == "f" ) { var theItem = createTiddlyElement(theList,"li",null,"fac",""); }
if ( rems[i].type == "e") {
var theItem = createTiddlyElement(theList,"li",null,"exam","");
listText = rems[i].date + " - " + listText;
}
var listWik = wikifyStatic(listText);
theItem.innerHTML = listWik;
}
}
}
}
//}}}
// // Formatter for linkout to external reference in text
// // Syntax: {{{[L[link URL]]}}}
//{{{
config.formatters.push({
name:"linkout",
match:"\\[[Ll]\\[",
lookaheadRegExp:/\[[Ll]\[(.+?)\]\]/g,
handler:function(w) {
this.lookaheadRegExp.lastIndex=w.matchStart;
var eMatch=this.lookaheadRegExp.exec(w.source);
if(eMatch && eMatch.index==w.matchStart) {
var linkSource = eMatch[1];
var linkParams = [linkSource,"linkoutButton"];
var eCreate=config.macros.linkoutGen.handler(place,"linkoutGen",linkParams,w);
w.nextMatch=eMatch.index+eMatch[0].length;
}
}
});
config.macros.linkoutGen = {
handler: function(place,macroName,params,w) {
var linkSource = params[0];
var linkout = createTiddlyElement(w.output,"a",null,"linkout","");
linkout.href = linkSource;
linkout.onclick = openInNewWindow;
}
};
//}}}
// // Formatter for local document in iframe or download
// // Syntax: {{{[Dd[text|filename]]}}} where d = download link (in addition to iframe)
//{{{
config.formatters.push({
name:"localfile",
match:"\\[[Dd][Dd]{0,1}\\[",
lookaheadRegExp:/\[[Dd]([Dd]{0,1})\[(.+?)\|(.+?)\]\]/g,
handler:function(w) {
this.lookaheadRegExp.lastIndex=w.matchStart;
var eMatch=this.lookaheadRegExp.exec(w.source);
if(eMatch && eMatch.index==w.matchStart) {
var dtype = eMatch[1].toLowerCase();
var dtext = eMatch[2];
var dpath = eMatch[3];
var ftext = "+++*{{keyButton{[" + dtext + "]}}}..."
ftext += "<html><iframe height=\"600\" width=\"98%\" src=\"" + dpath + "\"></iframe></html>===";
wikify(ftext,w.output);
if ( dtype == "d" ) {
if ( dpath.substr(0,1) == "/" ) { dpath = dpath.substr(1); }
dpath = dpath.replace(" ","%20");
wikify(" ",w.output);
var flink = createTiddlyElement(w.output,"a",null,"linkout","")
flink.href = dpath;
flink.onclick = openInNewWindow;
}
w.nextMatch=eMatch.index+eMatch[0].length;
}
}
});
//}}}
// // Function to open a link in a new window
//{{{
function openInNewWindow() {
// Change "_blank" to something like "newWindow" to load all links in the same new window
var newWindow = window.open(this.getAttribute('href'), '_blank');
newWindow.focus();
return false;
}
//}}}
// // Formatter for glossary popup link
// // Syntax: {{{[G[text|glossary term]]}}}
//{{{
config.formatters.push({
name: "glossary",
match: "\\[[Gg]\\[",
lookaheadRegExp: /\[[Gg]\[(.+?)\]\]/g,
handler: function(w) {
this.lookaheadRegExp.lastIndex=w.matchStart;
var eMatch=this.lookaheadRegExp.exec(w.source);
if(eMatch && eMatch.index==w.matchStart) {
if ( eMatch[1].indexOf("|") > -1 ) {
var glossText = eMatch[1].substr(0,eMatch[1].indexOf("|"));
var glossLookup = eMatch[1].substr(eMatch[1].indexOf("|")+1);
}
else {
var glossText = eMatch[1];
var glossLookup = glossText.replace(/\s/g,"_");
glossLookup = glossLookup.replace(/\-/g,"_");
}
glossLookup = glossLookup.toLowerCase();
var gText = createTiddlyElement(w.output,"span",null,"glossText","");
var gWik = wikify(glossText,gText,null,null);
var gLink = createTiddlyElement(w.output,"span",null,"glossLink","");
gLink.anno = store.getTiddlerSlice("Glossary",glossLookup);
gLink.subject = glossText;
gLink.onmouseover = this.onmouseover;
gLink.onmouseout = this.onmouseout;
gLink.ondblclick = this.onmouseout;
w.nextMatch=eMatch.index+eMatch[0].length;
}
},
onmouseover: function(e) {
popup = createTiddlyElement(document.body,"div",null,"glossPop");
this.popup = popup;
if (this.subject) { wikify ("!" + this.subject + "\n",popup); }
wikify(this.anno,popup);
addClass(this,"glossSubOver");
var popHeight = this.popup.offsetHeight;
var popWidth = this.popup.offsetWidth;
var winHeight = findWindowHeight();
var winWidth = findWindowWidth();
var mouseY = e.pageY;
var mouseX = e.pageX;
var popTop = mouseY + 6;
var popLeft = mouseX + 6;
if ( mouseY + popHeight >= winHeight - 20 ) { popTop = popTop - popHeight - 12; }
if ( mouseX + popWidth >= winWidth - 20 ) { popLeft = popLeft - popWidth -12; }
this.popup.style.top = popTop + "px";
this.popup.style.left = popLeft + "px";
this.popup.style.display = "block";
},
onmouseout: function(e) {
removeNode(this.popup);
this.popup=null;
removeClass(this,"glossSubOver");
}
});
//}}}
// // Formatter for obfuscated e-mail
// // Syntax: {{{[E[text|username]]}}}
//{{{
config.formatters.push({
name:"obmail",
match:"\\[[Ee]\\[",
lookaheadRegExp:/\[[Ee]\[(.+?)\|(.+?)\]\]/g,
handler:function(w) {
this.lookaheadRegExp.lastIndex=w.matchStart;
var eMatch=this.lookaheadRegExp.exec(w.source);
if(eMatch && eMatch.index==w.matchStart) {
var linkText = eMatch[1];
var linkSource = eMatch[2];
var linkParams = [linkSource,linkText];
var eCreate=config.macros.obmailGen.handler(place,"obmailGen",linkParams,w);
w.nextMatch=eMatch.index+eMatch[0].length;
}
}
});
config.macros.obmailGen = {
handler: function(place,macroName,params,w) {
var obmailSource = params[0];
var obmailText = params[1];
var obLink = createTiddlyElement(w.output,"a",null,"",obmailText);
obLink.href = "mailto:" + obmailSource + "@" + "noctrl.edu";
}
};
//}}}
// //"Spoiler Text" formatter - surround text with double percent signs to use
// //http://starjelly.net/portfolio/esperanto.html
//{{{
spoilerFormatter = {};
spoilerFormatter.spoiler = {
name: 'spoiler',
match: '%%',
handler: function( w )
{
var k = document.createElement( "span" );
w.subWikifyTerm( w.output.appendChild( k ), /(%%)/mg );
k.setAttribute( "style", "background-color: #ccc; color: #ccc;" );
k.onmouseover = function()
{
k.setAttribute( "style", "background-color: #FFF; color: #900;" );
}
k.onmouseout = function()
{
k.setAttribute( "style", "background-color: #ccc; color: #ccc;" );
}
}
},
config.formatters.push( spoilerFormatter.spoiler );
//}}}
*[[Home]]
*[[Lecture schedule]]
*[[Lab schedule]]
*[[Due dates]]
*[[Grades|http://depts.noctrl.edu/biology/courses/340/web materials/grades/grade.php]]
*[[Class members]]
<<menu>>
<script>
if ( config.options.txtUserType != "studentUser" ) {
wikify("[[General setup]]<br><br>",place);
}
if ( config.options.txtUserType == "facultyUser" ) {
wikify("<<search>><br>",place);
wikify("<<newTiddler label:'new lecture' title:'Subject' tag:'Lectures' tag:'99' template:'LecturesEditTemplate'>><br>",place);
wikify("<<newTiddler label:'new lab' title:'Lab X' tag:'Labs' template:'LabsEditTemplate'>><br>",place);
wikify("<<newTiddler>><br>",place);
wikify("[[grades|https://docs.google.com/spreadsheet/ccc?key=0AhPgd7E8XV0FdGJSS3hiaWRUWTJnQk15RENzamV2WVE&hl=en_US#gid=0]]",place);
}
</script>
<<tiddler AutoRefresh>>
<script label="create lectures">
var newDate = new Date();
var lparms = new Array();
lparms[0] = ["Microbial World","01","The Microbial World"];
lparms[1] = ["Growth","02","Growth and Control of Growth"];
lparms[2] = ["Antibiotics","03","The Miracle Drugs"];
lparms[3] = ["Resistance","04","The Problem of Resistance"];
lparms[4] = ["Gene Transfer","05","Origin and Spread of Resistance"];
lparms[5] = ["Antibiotic Issues","06","Microbes and Society: Antibiotics"];
lparms[6] = ["Normal Flora","07","The Human Microbiome"];
lparms[7] = ["Pathogenesis","08","How Bacteria Cause Disease"];
lparms[8] = ["Coli","09","Pathogenesis of Escherichia coli"];
lparms[9] = ["Influenza","10","Viral Pathogenesis: Influenza"];
lparms[10] = ["Innate Immunity","11","Fighting Back: Innate Immunity"];
lparms[11] = ["Adaptive Immunity","12","Fighting Back: Adaptive Immunity"];
lparms[12] = ["Vaccination","13","Vaccination: Immunity Without Disease"];
lparms[13] = ["Vaccine Issues","14","Microbes and Society: Vaccination"]
lparms[14] = ["Anaerobic Metabolism","15","Life Without Oxygen"]
lparms[15] = ["Aerobic Metabolism","16","The Oxygen Revolution"]
lparms[16] = ["Communities","17","Communities, Lifestyles and Syntrophy"]
lparms[17] = ["Origin","18","Microbes, Bioinformatics and the Origin of Life"]
lparms[18] = ["Nutrient Cycles","19","Nutrient Cycles and Symbiosis"]
lparms[19] = ["Symbiosis","20","Becoming a Symbiont: Genes and Regulation"]
lparms[20] = ["Biofilms","21","Bacterial Biofilms"]
lparms[21] = ["Pseudomonas","22","Biofilms and Disease in Pseudomonas"]
lparms[22] = ["Sporulation","23","Gene Regulation and Sporulation in Bacillus anthracis"]
lparms[23] = ["Bioterrorism","24","Microbes and Society: Bioterrorism"]
lparms[24] = ["Emerging Disease","25","Emerging Infectious Disease"]
lparms[25] = ["HIV","25","HIV and AIDS: 21st Century Plague"]
lparms[26] = ["Fighting HIV","26","Drugs and Vaccines to Combat AIDS"]
lparms[27] = ["Eukaryotes","27","Eukaryotic Microorganisms: Giardia, Malaria and Trypanosomes"]
for ( var i = 0; i<lparms.length; i++) {
store.saveTiddler(lparms[i][0],lparms[i][0],"","JV",newDate,"Lectures " + lparms[i][1]);
store.setValue(lparms[i][0],"fulltitle",lparms[i][2]);
var bodytxt = store.getTiddler("lecTemplate - Overview").text;
var tidtitle = lparms[i][0] + " Overview";
store.saveTiddler(tidtitle,tidtitle,bodytxt,"JV",newDate,"lec");
tidtitle = lparms[i][0] + " Preparation";
var bodytxt = store.getTiddler("lecTemplate - Preparation").text;
store.saveTiddler(tidtitle,tidtitle,bodytxt,"JV",newDate,"lec");
tidtitle = lparms[i][0] + " Notes";
var bodytxt = store.getTiddler("lecTemplate - Notes").text;
store.saveTiddler(tidtitle,tidtitle,bodytxt,"JV",newDate,"lec");
tidtitle = lparms[i][0] + " Materials";
var bodytxt = store.getTiddler("lecTemplate - Materials").text;
store.saveTiddler(tidtitle,tidtitle,bodytxt,"JV",newDate,"lec");
tidtitle = lparms[i][0] + " Slides";
var bodytxt = store.getTiddler("lecTemplate - Slides").text;
store.saveTiddler(tidtitle,tidtitle,bodytxt,"JV",newDate,"lec");
tidtitle = lparms[i][0] + " StudyGuide";
var bodytxt = store.getTiddler("lecTemplate - StudyGuide").text;
store.saveTiddler(tidtitle,tidtitle,bodytxt,"JV",newDate,"lec");
}
</script>
<!--{{{-->
<link rel='alternate' type='application/rss+xml' title='RSS' href='index.xml' />
<link rel="shortcut icon" href="images/icons/favicon.ico" type="image/x-icon">
<!--}}}-->
/***
|Name|MatchTagsPlugin|
|Source|http://www.TiddlyTools.com/#MatchTagsPlugin|
|Documentation|http://www.TiddlyTools.com/#MatchTagsPluginInfo|
|Version|2.0.4|
|Author|Eric Shulman|
|License|http://www.TiddlyTools.com/#LegalStatements|
|~CoreVersion|2.1|
|Type|plugin|
|Description|'tag matching' with full boolean expressions (AND, OR, NOT, and nested parentheses)|
!!!!!Documentation
> see [[MatchTagsPluginInfo]]
!!!!!Revisions
<<<
2010.08.11 2.0.4 in getMatchingTiddlers(), fixed sorting for descending order (e.g, "-created")
| please see [[MatchTagsPluginInfo]] for additional revision details |
2008.02.28 1.0.0 initial release
<<<
!!!!!Code
***/
//{{{
version.extensions.MatchTagsPlugin= {major: 2, minor: 0, revision: 4, date: new Date(2010,8,11)};
// store.getMatchingTiddlers() processes boolean expressions for tag matching
// sortfield (optional) sets sort order for tiddlers - default=title
// tiddlers (optional) use alternative set of tiddlers (instead of current store)
TiddlyWiki.prototype.getMatchingTiddlers = function(tagexpr,sortfield,tiddlers) {
var debug=config.options.chkDebug; // abbreviation
var cmm=config.macros.matchTags; // abbreviation
var r=[]; // results are an array of tiddlers
var tids=tiddlers||store.getTiddlers();
if (tids && sortfield) tids=store.sortTiddlers(tids,sortfield);
if (debug) displayMessage(cmm.msg1.format([tids.length]));
// try simple lookup to quickly find single tags or tags that
// contain boolean operators as literals, e.g. "foo and bar"
for (var t=0; t<tids.length; t++)
if (tids[t].isTagged(tagexpr)) r.pushUnique(tids[t]);
if (r.length) {
if (debug) displayMessage(cmm.msg4.format([r.length,tagexpr]));
return r;
}
// convert expression into javascript code with regexp tests,
// so that "tag1 AND ( tag2 OR NOT tag3 )" becomes
// "/\~tag1\~/.test(...) && ( /\~tag2\~/.test(...) || ! /\~tag3\~/.test(...) )"
// normalize whitespace, tokenize operators, delimit with "~"
var c=tagexpr.trim(); // remove leading/trailing spaces
c = c.replace(/\s+/ig," "); // reduce multiple spaces to single spaces
c = c.replace(/\(\s?/ig,"~(~"); // open parens
c = c.replace(/\s?\)/ig,"~)~"); // close parens
c = c.replace(/(\s|~)?&&(\s|~)?/ig,"~&&~"); // &&
c = c.replace(/(\s|~)AND(\s|~)/ig,"~&&~"); // AND
c = c.replace(/(\s|~)?\|\|(\s|~)?/ig,"~||~"); // ||
c = c.replace(/(\s|~)OR(\s|~)/ig,"~||~"); // OR
c = c.replace(/(\s|~)?!(\s|~)?/ig,"~!~"); // !
c = c.replace(/(^|~|\s)NOT(\s|~)/ig,"~!~"); // NOT
c = c.replace(/(^|~|\s)NOT~\(/ig,"~!~("); // NOT(
// change tag terms to regexp tests
var terms=c.split("~"); for (var i=0; i<terms.length; i++) { var t=terms[i];
if (/(&&)|(\|\|)|[!\(\)]/.test(t) || t=="") continue; // skip operators/parens/spaces
if (t==config.macros.matchTags.untaggedKeyword)
terms[i]="tiddlertags=='~~'"; // 'untagged' tiddlers
else
terms[i]="/\\~"+t+"\\~/.test(tiddlertags)";
}
c=terms.join(" ");
if (debug) { displayMessage(cmm.msg2.format([tagexpr])); displayMessage(cmm.msg3.format([c])); }
// scan tiddlers for matches
for (var t=0; t<tids.length; t++) {
// assemble tags from tiddler into string "~tag1~tag2~tag3~"
var tiddlertags = "~"+tids[t].tags.join("~")+"~";
try { if(eval(c)) r.push(tids[t]); } // test tags
catch(e) { // error in test
displayMessage(cmm.msg2.format([tagexpr]));
displayMessage(cmm.msg3.format([c]));
displayMessage(e.toString());
break; // skip remaining tiddlers
}
}
if (debug) displayMessage(cmm.msg4.format([r.length,tagexpr]));
return r;
}
//}}}
//{{{
config.macros.matchTags = {
msg1: "scanning %0 input tiddlers",
msg2: "looking for '%0'",
msg3: "using expression: '%0'",
msg4: "found %0 tiddlers matching '%1'",
noMatch: "no matching tiddlers",
untaggedKeyword: "-",
untaggedLabel: "no tags",
untaggedPrompt: "show tiddlers with no tags",
defTiddler: "MatchingTiddlers",
defTags: "",
defFormat: "[[%0]]",
defSeparator: "\n",
reportHeading: "Found %0 tiddlers tagged with: '{{{%1}}}'\n----\n",
handler: function(place,macroName,params,wikifier,paramString,tiddler) {
var mode=params[0]?params[0].toLowerCase():'';
if (mode=="inline")
params.shift();
if (mode=="report" || mode=="panel") {
params.shift();
var target=params.shift()||this.defTiddler;
}
if (mode=="popup") {
params.shift();
if (params[0]&¶ms[0].substr(0,6)=="label:") var label=params.shift().substr(6);
if (params[0]&¶ms[0].substr(0,7)=="prompt:") var prompt=params.shift().substr(7);
} else {
var fmt=(params.shift()||this.defFormat).unescapeLineBreaks();
var sep=(params.shift()||this.defSeparator).unescapeLineBreaks();
}
var sortBy="+title";
if (params[0]&¶ms[0].substr(0,5)=="sort:") sortBy=params.shift().substr(5);
var expr = params.join(" ");
if (mode!="panel" && (!expr||!expr.trim().length)) return;
if (expr==this.untaggedKeyword)
{ var label=this.untaggedLabel; var prompt=this.untaggedPrompt };
switch (mode) {
case "popup": this.createPopup(place,label,expr,prompt,sortBy); break;
case "panel": this.createPanel(place,expr,fmt,sep,sortBy,target); break;
case "report": this.createReport(target,this.defTags,expr,fmt,sep,sortBy); break;
case "inline": default: this.createInline(place,expr,fmt,sep,sortBy); break;
}
},
formatList: function(tids,fmt,sep) {
var out=[];
for (var i=0; i<tids.length; i++) { var t=tids[i];
var title=t.title;
var who=t.modifier;
var when=t.modified.toLocaleString();
var text=t.text;
var first=t.text.split("\n")[0];
var desc=store.getTiddlerSlice(t.title,"description");
desc=desc||store.getTiddlerSlice(t.title,"Description");
desc=desc||store.getTiddlerText(t.title+"##description");
desc=desc||store.getTiddlerText(t.title+"##Description");
var tags=t.tags.length?'[['+t.tags.join(']] [[')+']]':'';
out.push(fmt.format([title,who,when,text,first,desc,tags]));
}
return out.join(sep);
},
createInline: function(place,expr,fmt,sep,sortBy) {
wikify(this.formatList(store.sortTiddlers(store.getMatchingTiddlers(expr),sortBy),fmt,sep),place);
},
createPopup: function(place,label,expr,prompt,sortBy) {
var btn=createTiddlyButton(place,
(label||expr).format([expr]),
(prompt||config.views.wikified.tag.tooltip).format([expr]),
function(ev){ return config.macros.matchTags.showPopup(this,ev||window.event); });
btn.setAttribute("sortBy",sortBy);
btn.setAttribute("expr",expr);
},
showPopup: function(here,ev) {
var p=Popup.create(here); if (!p) return false;
var tids=store.getMatchingTiddlers(here.getAttribute("expr"));
store.sortTiddlers(tids,here.getAttribute("sortBy"));
var list=[]; for (var t=0; t<tids.length; t++) list.push(tids[t].title);
if (!list.length) createTiddlyText(p,this.noMatch);
else {
var b=createTiddlyButton(createTiddlyElement(p,"li"),
config.views.wikified.tag.openAllText,
config.views.wikified.tag.openAllTooltip,
function() {
var list=this.getAttribute("list").readBracketedList();
story.displayTiddlers(null,tids);
});
b.setAttribute("list","[["+list.join("]] [[")+"]]");
createTiddlyElement(p,"hr");
}
var out=this.formatList(tids," [[%0]] ","\n"); wikify(out,p);
Popup.show();
ev.cancelBubble=true;
if(ev.stopPropagation) ev.stopPropagation();
return false;
},
createReport: function(target,tags,expr,fmt,sep,sortBy) {
var tids=store.sortTiddlers(store.getMatchingTiddlers(expr),sortBy);
if (!tids.length) { displayMessage('no matches for: '+expr); return false; }
var msg=config.messages.overwriteWarning.format([target]);
if (store.tiddlerExists(target) && !confirm(msg)) return false;
var out=this.reportHeading.format([tids.length,expr])
out+=this.formatList(tids,fmt,sep);
store.saveTiddler(target,target,out,config.options.txtUserName,new Date(),tags,{});
story.closeTiddler(target); story.displayTiddler(null,target);
},
createPanel: function(place,expr,fmt,sep,sortBy,tid) {
var s=createTiddlyElement(place,"span"); s.innerHTML=store.getTiddlerText("MatchTagsPlugin##html");
var f=s.getElementsByTagName("form")[0];
f.expr.value=expr; f.fmt.value=fmt; f.sep.value=sep.escapeLineBreaks();
f.tid.value=tid; f.tags.value=this.defTags;
}
};
//}}}
/***
//{{{
!html
<form style='display:inline;white-space:nowrap'>
<input type='text' name='expr' style='width:50%' title='tag expression'><!--
--><input type='text' name='fmt' style='width:10%' title='list item format'><!--
--><input type='text' name='sep' style='width:5%' title='list item separator'><!--
--><input type='text' name='tid' style='width:12%' title='target tiddler title'><!--
--><input type='text' name='tags' style='width:10%' title='target tiddler tags'><!--
--><input type='button' name='go' style='width:8%' value='go' onclick="
var expr=this.form.expr.value;
if (!expr.length) { alert('Enter a boolean tag expression'); return false; }
var fmt=this.form.fmt.value;
if (!fmt.length) { alert('Enter the list item output format'); return false; }
var sep=this.form.sep.value.unescapeLineBreaks();
var tid=this.form.tid.value;
if (!tid.length) { alert('Enter a target tiddler title'); return false; }
var tags=this.form.tags.value;
config.macros.matchTags.createReport(tid,tags,expr,fmt,sep,'title');
return false;">
</form>
!end
//}}}
***/
//{{{
// SHADOW TIDDLER for displaying default panel input form
config.shadowTiddlers.MatchTags="<<matchTags panel>>";
//}}}
//{{{
// TWEAK core filterTiddlers() for enhanced boolean matching in [tag[...]] syntax:
// use getMatchingTiddlers instead getTaggedTiddlers
var fn=TiddlyWiki.prototype.filterTiddlers;
fn=fn.toString().replace(/getTaggedTiddlers/g,"getMatchingTiddlers");
eval("TiddlyWiki.prototype.filterTiddlers="+fn);
//}}}
//{{{
// REDEFINE core handler for enhanced boolean matching in tag:"..." paramifier
// use filterTiddlers() instead of getTaggedTiddlers() to get list of tiddlers.
config.paramifiers.tag = {
onstart: function(v) {
var tagged = store.filterTiddlers("[tag["+v+"]]");
story.displayTiddlers(null,tagged,null,false,null);
}
};
//}}}
//{{{
config.macros.menu = {
handler: function (place) {
var menuText = store.getTiddler("menuStore").text;
var icons = menuText.match(/icon\:.+?\n/g);
if (icons != null) {
if (icons.length > 0 ) { var openIcon = jQuery.trim(icons[0].substr(icons[0].indexOf(":")+1)); } else { var openIcon = false; }
if (icons.length > 1 ) { var closeIcon = jQuery.trim(icons[1].substr(icons[1].indexOf(":")+1)); } else { var closeIcon = false; }
if (icons.length > 2 ) { var itemIcon = jQuery.trim(icons[2].substr(icons[2].indexOf(":")+1)); } else { var itemIcon = false; }
}
var menus = menuText.match(/menu\:.+?\b/g);
var tids = store.getTiddlers('tags')
for ( var i = 0; i < menus.length; i++ ) {
var menuLabel = menus[i].substr(menus[i].indexOf(":")+1);
var menuID = "Menu" + menuLabel;
var menuButtonDiv = createTiddlyElement(place,"div",menuID,"buttonDiv");
if ( closeIcon ) {
var menuIcon = createTiddlyElement(menuButtonDiv,"img",menuID+"Img","buttonImg");
menuIcon.src = closeIcon;
}
var menuText = createTiddlyText(menuButtonDiv,menuLabel)
menuButtonDiv.setAttribute("menuID",menuID);
menuButtonDiv.onclick = function() { var menuID = this.getAttribute("menuID");
if ( jQuery("#"+menuID+"Items").css("display") == "none" ) { var showIt = 1; }
jQuery(".menuList").css("display","none");
jQuery(".buttonDiv").removeClass("menuOpened");
jQuery(".buttonImg").attr("src",closeIcon);
if ( showIt == 1 ) {
jQuery("#"+menuID+"Items").css("display","block");
jQuery("#"+menuID+"Img").attr("src",openIcon);
jQuery("#"+menuID).addClass("menuOpened");
}
}
var menuList = createTiddlyElement(place,"ul",menuID+"Items","menuList");
menuList.style.display = "none";
for ( var j = 0; j < tids.length; j++ ) {
if ( tids[j].tags.contains(menuLabel)) {
var menuItem = createTiddlyElement(menuList,"li",null,"menuItem");
var menuLink = createTiddlyLink(menuItem,tids[j].title,true,"menuLink");
}
}
}
if ( itemIcon) { jQuery(".menuList").css("list-style-image","url('"+itemIcon+"')"); }
}
}
//}}}
{{outline{
!!Outline
#How microbes produce food
##Types of microbes
##Microbial activities
#The microbial world
##Prokaryotes: bacteria and archaea
##Eukaryotic microbes
##Viruses
##Helminths
!!Handouts and class materials
!!Links to more information
*[[Bacteria: Incredible Numbers, Incredible Variety|http://whyfiles.org/shorties/count_bact.html]]
*[[Sizes of Viruses, Bacteria, Eukaryotic Cells|http://www.cellsalive.com/howbig.htm]]
*[[Three domains of life|http://www.ucmp.berkeley.edu/alllife/threedomains.html]]
*[[Comparison of prokaryotes and eukaryotes|http://www.life.umd.edu/classroom/bsci424/BSCI223WebSiteFiles/ProkaryoticvsEukaryotic.htm]]
*[[Are viruses alive?|http://serc.carleton.edu/microbelife/yellowstone/viruslive.html]]
*[[The bacterial cell wall|http://web.uct.ac.za/depts/mmi/lsteyn/cellwall.html]]
}}}
!!!Microbes and food
*Microbial food fest: sourdough bread, yogurt, kefir, cheese
*Check class roster while eating
''How are these foods connected to microbes?''
__Bread__
*Flour, water, a little salt and sugar - how does it become bread?
*Yeast - what kind of organism is it? How does it work?
*Sourdough bread: additional flavor added by bacterial fermentation (e.g., //Lactobacillus acidophilus//)
*What kinds of organisms are bacteria?
*Prokaryotes vs. eukaryotes
|| Prokaryotes | Eukaryotes |h
|cell membrane|phospholipid bilayer|phospholipid bilayer|
|cell wall|peptidoglycan (bacteria)<br>pseudomurein or protein (archaea)<br>rarely none|cellulose (plants), chitin (fungi) or none|
|genetic material|DNA in nucleoid within cytoplasm|DNA in nucleus|
|membrane-bounded organelles|no|yes|
|internal membranes|rare|common|
|size|1-10 μm|10-100 μm|
|ribosomes|70S|80S|
__Yogurt__
*Bacteria, such as //Lactobacillus bulgaricus// and //Streptococcus thermophilus//
*Heat milk to 80°C briefly (why?), add bacteria, incubate 4-7 hours at 45°C (why?)
*Fermentation of lactose to produce acids→sour flavor, denatures milk protein for texture
*Besides what many people think is a good taste, why is this useful?
*Probiotics: possible health benefits
*//Lactobacillus// in the normal flora of the human vagina
__Kefir__
*Similar to yogurt but subtly different: thinner texture, slight effervescence
*"Kefir grains" added to milk: community of lactic-acid bacteria and yeasts, so acid and CO~~2~~
__Brie__
*Again, starts with milk
*Needs at least some //Lactobacillus// for acidification, but curd production can be done by adding rennin: enzyme originally isolated from stomach of cows
*Curd, denatured milk protein, separated from whey, liquid portion
*Fresh cheese shaped in a mold and inoculated with //Penicillium camemberti// (mold), //Penicillium candidum// (mold) and //Brevibacterium linens// (bacterium)
*"Aging" allows the fungi and bacteria to produce flavorful metabolites
*Distinct cheeses result from distinct bacteria and fungi and distinct aging processes
Other foods produced by microbes: sauerkraut, kimchi, beer and wine, pickles, some salsas, vinegar, soy sauce, chocolate, mushrooms, coffee, some sausages, mushrooms, vegemite, meat substitutes, etc.
!!!The Microbial World
*We discussed the difference between prokaryotes and eukaryotes; can all living things be grouped into one of these two groups?
*What other divisions can we make in classifying living things?
*Topics of study for microbiologists: prokaryotes (bacteria and archaea), eukaryotic microbes (molds, yeasts and protists), helminths (parasitic worms), viruses
*Where in the tree of life are the viruses?
!Objectives
*Know what organisms microbiologists study: bacteria, archaea, fungi, protists, helminths, viruses
*Know the basic classification scheme for living things
*Understand what distinguishes prokaryotes from eukaryotes
*Recognize differences between viruses and cells
*Appreciate the importance of microorganisms
!Outline
{{outline{
#Food microbiology
##Yeast and fermentation
##Bacteria and fermentative acid production
##Molds
##Value of microbes in food: production and preservation
#The microbial world
##Prokaryotes vs eukaryotes
##Classification of living things & the tree of life
##Bacteria and archaea
##Protists
}}}
!Activities
*Microbe-produced foods: sourdough bread, yogurt, cheese, kefir
!Ideas
{{lechelp{
The ''Independent Study'' section is designed to help you __prepare__ for each class session. If you learn the basics //before// you come to class, we can use class time for more sophisticated and active learning. The focused readings, guide questions and list of key terms will help you direct your preparation appropriately. We will //not// go back over these basic ideas during class; you are expected to know them (a quiz could happen at any time!). You can test your ability to apply what you've learned with the application questions, which will often be discussed in class. Application questions will help you see if you can apply what you've learned and will often be discussed in class. You are encouraged to bring your notes to class in case you need them.
}}}
{{lecblurb{
''Who are the microbes?'' Obviously, microbiologists study microbes, or microorganisms. But, just what do we mean by a microbe? What kinds of organisms are considered microbes, and what do they do? Why are they important to study? In this class session, we'll get a handle on what microbiologists study and what our focus for the term will be as well as making some connections to what you already know.
}}}
!!Focused readings
{{smalltext{all page numbers below are from //Microbiology: Diversity, Disease and the Environment// by Salyers and Whitt}}}
*Chapter 1, pp. 3-17 (don't miss the helpful table on p. 17)
!!Guide questions
#Draw a prokaryotic cell and a eukaryotic cell and label their major structures. What are the key differences between these two major groups of living things?
#Why isn't it correct to say that someone who studies prokaryotes is the same as someone who studies bacteria?
#What kinds of eukaryotes might be studied by a microbiologist?
#Why wouldn't you consider a virus to be a cell? What are some major differences between viruses and cells?
#The chapter starts with the statement "The moon is the earth without microbes." What evidence is presented in the chapter to support this rather bold statement?"
!!Key terms
{{col3{
microbe or microorganism
prokaryote
eukaryote
organelle
bacteria vs. archaea
fungi
protozoa (protists)
binary fission
cell wall
yeasts
viruses
}}}
!!Application questions
#Antibiotics are drugs that can kill disease-causing microbes without harming our own cells. What possible targets can you imagine an antibiotic attacking that would give this result?
#Why might it be harder to discover an antibiotic that is capable of curing a yeast infection than an antibiotic suitable for treating a bacterial infection?
<script>
var ctid = story.findContainingTiddler(place).getAttribute("tiddler");
var slideState = store.getValue(ctid,"slides");
if (slideState == "true" ) {
folder = ctid.toLowerCase();
folder = folder.replace(" ","%20");
linkpath = "web%20materials/" + folder + "/slides.pdf";
var slideLink = createTiddlyElement(place,"a",null,"fileLink","click here to download")
slideLink.href = linkpath;
slideLink.onclick = openInNewWindow;
var stext = "<html><br><iframe height = \"600\" width=\"800\" src=\"";
stext += linkpath + "\"></iframe></html>";
wikify(stext,place);
}
else {
wikify("//Slides for this class session have not yet been posted. Please check back later.//",place);
}
</script>
!!Review questions
#Many high-school students today still learn a "five kingdom" system for classifying living things: Animals, Plants, Fungi, Protists and Monera (or Bacteria). List at least three ways that this now-outdated classification system is too simplistic. +++*{{keyButton{[answer]}}}...
{{anstxt{
*It fails to recognize that the biggest distinction among living things is between prokaryotes and eukaryotes: this difference is much greater than the differences between plants and animals, for example.
*It fails to recognize the existence of the Archaea, which are as different from the Bacteria as the Bacteria are from the Eukaryotes.
*It lumps all the protists together into a single kingdom, even though the protists are actually a far more diverse group than any of the other four.
}}}
===
#List all the key differences you can between prokaryotes and eukaryotes. +++*{{keyButton{[answer]}}}...
{{anstxt{
|| prokaryotes | eukaryotes |h
|cell wall|peptidoglycan (bacteria)<br>pseudomurein or protein (archaea)<br>rarely none|cellulose (plants), chitin (fungi) or none|
|genetic material|DNA in nucleoid within cytoplasm|DNA in nucleus|
|membrane-bounded organelles|no|yes|
|internal membranes|rare|common|
|size|1-10 μm|10-100 μm|
|ribosomes|70S|80S|
}}}
===
#In terms of food production, why is fermentation a much more interesting process than respiration? +++*{{keyButton{[answer]}}}...
{{anstxt{
Respiration results in the complete oxidation of a carbon source (like glucose) to carbon dioxide. This would be OK for making bread rise, but wouldn't do much else. Fermentation results in the production of interesting waste products like ethanol and acids which contribute taste, texture, etc. to the food.
}}}
===
#Besides producing yummy flavors, what are two good reasons why microbes are beneficial in food production? +++*{{keyButton{[answer]}}}...
{{anstxt{
Acids produced by harmless bacteria can prevent the growth of pathogens or spoilage bacteria, giving the food a longer shelf life (yogurt, for example). Also, foods containing live beneficial bacteria are called probiotics and are thought to have benefits for the digestive system.
}}}
===
#Why is the statement that microbiologists study bacteria and other prokaryotes too simplistic? +++*{{keyButton{[answer]}}}...
{{anstxt{
Microbiologists also study eukaryotic microorganisms, such as yeasts, molds and protists.
}}}
===
#Why is the statement that microbiologists study microscopic organisms too simplistic? +++*{{keyButton{[answer]}}}...
{{anstxt{
Microbiologists also study helminths: parasitic worms which may not be microscopic.
}}}
===
#Why is the statement that microbiologists study single-celled living things as well as some multicellular fungi and helminths too simplistic? +++*{{keyButton{[answer]}}}...
{{anstxt{
Microbiologists also study viruses, which are acellular.
}}}
===
!!Practice problems
*[Dd[Problems|problem sets/microbial world.htm]] from previous exams
*[Dd[Key|problem sets/microbial world key.htm]] for problem set
/***
|Name|NestedSlidersPlugin|
|Source|http://www.TiddlyTools.com/#NestedSlidersPlugin|
|Documentation|http://www.TiddlyTools.com/#NestedSlidersPluginInfo|
|Version|2.4.9|
|Author|Eric Shulman|
|License|http://www.TiddlyTools.com/#LegalStatements|
|~CoreVersion|2.1|
|Type|plugin|
|Description|show content in nest-able sliding/floating panels, without creating separate tiddlers for each panel's content|
!!!!!Documentation
>see [[NestedSlidersPluginInfo]]
!!!!!Configuration
<<<
<<option chkFloatingSlidersAnimate>> allow floating sliders to animate when opening/closing
>Note: This setting can cause 'clipping' problems in some versions of InternetExplorer.
>In addition, for floating slider animation to occur you must also allow animation in general (see [[AdvancedOptions]]).
<<<
!!!!!Revisions
<<<
2008.11.15 - 2.4.9 in adjustNestedSlider(), don't make adjustments if panel is marked as 'undocked' (CSS class). In onClickNestedSlider(), SHIFT-CLICK docks panel (see [[MoveablePanelPlugin]])
|please see [[NestedSlidersPluginInfo]] for additional revision details|
2005.11.03 - 1.0.0 initial public release. Thanks to RodneyGomes, GeoffSlocock, and PaulPetterson for suggestions and experiments.
<<<
!!!!!Code
***/
//{{{
version.extensions.NestedSlidersPlugin= {major: 2, minor: 4, revision: 9, date: new Date(2008,11,15)};
// options for deferred rendering of sliders that are not initially displayed
if (config.options.chkFloatingSlidersAnimate===undefined)
config.options.chkFloatingSlidersAnimate=false; // avoid clipping problems in IE
// default styles for 'floating' class
setStylesheet(".floatingPanel { position:absolute; z-index:10; padding:0.5em; margin:0em; \
background-color:#eee; color:#000; border:1px solid #000; text-align:left; }","floatingPanelStylesheet");
// if removeCookie() function is not defined by TW core, define it here.
if (window.removeCookie===undefined) {
window.removeCookie=function(name) {
document.cookie = name+'=; expires=Thu, 01-Jan-1970 00:00:01 UTC; path=/;';
}
}
config.formatters.push( {
name: "nestedSliders",
match: "\\n?\\+{3}",
terminator: "\\s*\\={3}\\n?",
lookahead: "\\n?\\+{3}(\\+)?(\\([^\\)]*\\))?(\\!*)?(\\^(?:[^\\^\\*\\@\\[\\>]*\\^)?)?(\\*)?(\\@)?(?:\\{\\{([\\w]+[\\s\\w]*)\\{)?(\\[[^\\]]*\\])?(\\[[^\\]]*\\])?(?:\\}{3})?(\\#[^:]*\\:)?(\\>)?(\\.\\.\\.)?\\s*",
handler: function(w)
{
lookaheadRegExp = new RegExp(this.lookahead,"mg");
lookaheadRegExp.lastIndex = w.matchStart;
var lookaheadMatch = lookaheadRegExp.exec(w.source)
if(lookaheadMatch && lookaheadMatch.index == w.matchStart)
{
var defopen=lookaheadMatch[1];
var cookiename=lookaheadMatch[2];
var header=lookaheadMatch[3];
var panelwidth=lookaheadMatch[4];
var transient=lookaheadMatch[5];
var hover=lookaheadMatch[6];
var buttonClass=lookaheadMatch[7];
var label=lookaheadMatch[8];
var openlabel=lookaheadMatch[9];
var panelID=lookaheadMatch[10];
var blockquote=lookaheadMatch[11];
var deferred=lookaheadMatch[12];
// location for rendering button and panel
var place=w.output;
// default to closed, no cookie, no accesskey, no alternate text/tip
var show="none"; var cookie=""; var key="";
var closedtext=">"; var closedtip="";
var openedtext="<"; var openedtip="";
// extra "+", default to open
if (defopen) show="block";
// cookie, use saved open/closed state
if (cookiename) {
cookie=cookiename.trim().slice(1,-1);
cookie="chkSlider"+cookie;
if (config.options[cookie]==undefined)
{ config.options[cookie] = (show=="block") }
show=config.options[cookie]?"block":"none";
}
// parse label/tooltip/accesskey: [label=X|tooltip]
if (label) {
var parts=label.trim().slice(1,-1).split("|");
closedtext=parts.shift();
if (closedtext.substr(closedtext.length-2,1)=="=")
{ key=closedtext.substr(closedtext.length-1,1); closedtext=closedtext.slice(0,-2); }
openedtext=closedtext;
if (parts.length) closedtip=openedtip=parts.join("|");
else { closedtip="show "+closedtext; openedtip="hide "+closedtext; }
}
// parse alternate label/tooltip: [label|tooltip]
if (openlabel) {
var parts=openlabel.trim().slice(1,-1).split("|");
openedtext=parts.shift();
if (parts.length) openedtip=parts.join("|");
else openedtip="hide "+openedtext;
}
var title=show=='block'?openedtext:closedtext;
var tooltip=show=='block'?openedtip:closedtip;
// create the button
if (header) { // use "Hn" header format instead of button/link
var lvl=(header.length>5)?5:header.length;
var btn = createTiddlyElement(createTiddlyElement(place,"h"+lvl,null,null,null),"a",null,buttonClass,title);
btn.onclick=onClickNestedSlider;
btn.setAttribute("href","javascript:;");
btn.setAttribute("title",tooltip);
}
else
var btn = createTiddlyButton(place,title,tooltip,onClickNestedSlider,buttonClass);
btn.innerHTML=title; // enables use of HTML entities in label
// set extra button attributes
btn.setAttribute("closedtext",closedtext);
btn.setAttribute("closedtip",closedtip);
btn.setAttribute("openedtext",openedtext);
btn.setAttribute("openedtip",openedtip);
btn.sliderCookie = cookie; // save the cookiename (if any) in the button object
btn.defOpen=defopen!=null; // save default open/closed state (boolean)
btn.keyparam=key; // save the access key letter ("" if none)
if (key.length) {
btn.setAttribute("accessKey",key); // init access key
btn.onfocus=function(){this.setAttribute("accessKey",this.keyparam);}; // **reclaim** access key on focus
}
btn.setAttribute("hover",hover?"true":"false");
btn.onmouseover=function(ev) {
// optional 'open on hover' handling
if (this.getAttribute("hover")=="true" && this.sliderPanel.style.display=='none') {
document.onclick.call(document,ev); // close transients
onClickNestedSlider(ev); // open this slider
}
// mouseover on button aligns floater position with button
if (window.adjustSliderPos) window.adjustSliderPos(this.parentNode,this,this.sliderPanel);
}
// create slider panel
var panelClass=panelwidth?"floatingPanel":"sliderPanel";
if (panelID) panelID=panelID.slice(1,-1); // trim off delimiters
var panel=createTiddlyElement(place,"div",panelID,panelClass,null);
panel.button = btn; // so the slider panel know which button it belongs to
btn.sliderPanel=panel; // so the button knows which slider panel it belongs to
panel.defaultPanelWidth=(panelwidth && panelwidth.length>2)?panelwidth.slice(1,-1):"";
panel.setAttribute("transient",transient=="*"?"true":"false");
panel.style.display = show;
panel.style.width=panel.defaultPanelWidth;
panel.onmouseover=function(event) // mouseover on panel aligns floater position with button
{ if (window.adjustSliderPos) window.adjustSliderPos(this.parentNode,this.button,this); }
// render slider (or defer until shown)
w.nextMatch = lookaheadMatch.index + lookaheadMatch[0].length;
if ((show=="block")||!deferred) {
// render now if panel is supposed to be shown or NOT deferred rendering
w.subWikify(blockquote?createTiddlyElement(panel,"blockquote"):panel,this.terminator);
// align floater position with button
if (window.adjustSliderPos) window.adjustSliderPos(place,btn,panel);
}
else {
var src = w.source.substr(w.nextMatch);
var endpos=findMatchingDelimiter(src,"+++","===");
panel.setAttribute("raw",src.substr(0,endpos));
panel.setAttribute("blockquote",blockquote?"true":"false");
panel.setAttribute("rendered","false");
w.nextMatch += endpos+3;
if (w.source.substr(w.nextMatch,1)=="\n") w.nextMatch++;
}
}
}
}
)
function findMatchingDelimiter(src,starttext,endtext) {
var startpos = 0;
var endpos = src.indexOf(endtext);
// check for nested delimiters
while (src.substring(startpos,endpos-1).indexOf(starttext)!=-1) {
// count number of nested 'starts'
var startcount=0;
var temp = src.substring(startpos,endpos-1);
var pos=temp.indexOf(starttext);
while (pos!=-1) { startcount++; pos=temp.indexOf(starttext,pos+starttext.length); }
// set up to check for additional 'starts' after adjusting endpos
startpos=endpos+endtext.length;
// find endpos for corresponding number of matching 'ends'
while (startcount && endpos!=-1) {
endpos = src.indexOf(endtext,endpos+endtext.length);
startcount--;
}
}
return (endpos==-1)?src.length:endpos;
}
//}}}
//{{{
window.onClickNestedSlider=function(e)
{
if (!e) var e = window.event;
var theTarget = resolveTarget(e);
while (theTarget && theTarget.sliderPanel==undefined) theTarget=theTarget.parentNode;
if (!theTarget) return false;
var theSlider = theTarget.sliderPanel;
var isOpen = theSlider.style.display!="none";
// if SHIFT-CLICK, dock panel first (see [[MoveablePanelPlugin]])
if (e.shiftKey && config.macros.moveablePanel) config.macros.moveablePanel.dock(theSlider,e);
// toggle label
theTarget.innerHTML=isOpen?theTarget.getAttribute("closedText"):theTarget.getAttribute("openedText");
// toggle tooltip
theTarget.setAttribute("title",isOpen?theTarget.getAttribute("closedTip"):theTarget.getAttribute("openedTip"));
// deferred rendering (if needed)
if (theSlider.getAttribute("rendered")=="false") {
var place=theSlider;
if (theSlider.getAttribute("blockquote")=="true")
place=createTiddlyElement(place,"blockquote");
wikify(theSlider.getAttribute("raw"),place);
theSlider.setAttribute("rendered","true");
}
// show/hide the slider
if(config.options.chkAnimate && (!hasClass(theSlider,'floatingPanel') || config.options.chkFloatingSlidersAnimate))
anim.startAnimating(new Slider(theSlider,!isOpen,e.shiftKey || e.altKey,"none"));
else
theSlider.style.display = isOpen ? "none" : "block";
// reset to default width (might have been changed via plugin code)
theSlider.style.width=theSlider.defaultPanelWidth;
// align floater panel position with target button
if (!isOpen && window.adjustSliderPos) window.adjustSliderPos(theSlider.parentNode,theTarget,theSlider);
// if showing panel, set focus to first 'focus-able' element in panel
if (theSlider.style.display!="none") {
var ctrls=theSlider.getElementsByTagName("*");
for (var c=0; c<ctrls.length; c++) {
var t=ctrls[c].tagName.toLowerCase();
if ((t=="input" && ctrls[c].type!="hidden") || t=="textarea" || t=="select")
{ try{ ctrls[c].focus(); } catch(err){;} break; }
}
}
var cookie=theTarget.sliderCookie;
if (cookie && cookie.length) {
config.options[cookie]=!isOpen;
if (config.options[cookie]!=theTarget.defOpen) window.saveOptionCookie(cookie);
else window.removeCookie(cookie); // remove cookie if slider is in default display state
}
// prevent SHIFT-CLICK from being processed by browser (opens blank window... yuck!)
// prevent clicks *within* a slider button from being processed by browser
// but allow plain click to bubble up to page background (to close transients, if any)
if (e.shiftKey || theTarget!=resolveTarget(e))
{ e.cancelBubble=true; if (e.stopPropagation) e.stopPropagation(); }
Popup.remove(); // close open popup (if any)
return false;
}
//}}}
//{{{
// click in document background closes transient panels
document.nestedSliders_savedOnClick=document.onclick;
document.onclick=function(ev) { if (!ev) var ev=window.event; var target=resolveTarget(ev);
if (document.nestedSliders_savedOnClick)
var retval=document.nestedSliders_savedOnClick.apply(this,arguments);
// if click was inside a popup... leave transient panels alone
var p=target; while (p) if (hasClass(p,"popup")) break; else p=p.parentNode;
if (p) return retval;
// if click was inside transient panel (or something contained by a transient panel), leave it alone
var p=target; while (p) {
if ((hasClass(p,"floatingPanel")||hasClass(p,"sliderPanel"))&&p.getAttribute("transient")=="true") break;
p=p.parentNode;
}
if (p) return retval;
// otherwise, find and close all transient panels...
var all=document.all?document.all:document.getElementsByTagName("DIV");
for (var i=0; i<all.length; i++) {
// if it is not a transient panel, or the click was on the button that opened this panel, don't close it.
if (all[i].getAttribute("transient")!="true" || all[i].button==target) continue;
// otherwise, if the panel is currently visible, close it by clicking it's button
if (all[i].style.display!="none") window.onClickNestedSlider({target:all[i].button})
if (!hasClass(all[i],"floatingPanel")&&!hasClass(all[i],"sliderPanel")) all[i].style.display="none";
}
return retval;
};
//}}}
//{{{
// adjust floating panel position based on button position
if (window.adjustSliderPos==undefined) window.adjustSliderPos=function(place,btn,panel) {
if (hasClass(panel,"floatingPanel") && !hasClass(panel,"undocked")) {
// see [[MoveablePanelPlugin]] for use of 'undocked'
var rightEdge=document.body.offsetWidth-1;
var panelWidth=panel.offsetWidth;
var left=0;
var top=btn.offsetHeight;
if (place.style.position=="relative" && findPosX(btn)+panelWidth>rightEdge) {
left-=findPosX(btn)+panelWidth-rightEdge; // shift panel relative to button
if (findPosX(btn)+left<0) left=-findPosX(btn); // stay within left edge
}
if (place.style.position!="relative") {
var left=findPosX(btn);
var top=findPosY(btn)+btn.offsetHeight;
var p=place; while (p && !hasClass(p,'floatingPanel')) p=p.parentNode;
if (p) { left-=findPosX(p); top-=findPosY(p); }
if (left+panelWidth>rightEdge) left=rightEdge-panelWidth;
if (left<0) left=0;
}
panel.style.left=left+"px"; panel.style.top=top+"px";
}
}
//}}}
//{{{
// TW2.1 and earlier:
// hijack Slider stop handler so overflow is visible after animation has completed
Slider.prototype.coreStop = Slider.prototype.stop;
Slider.prototype.stop = function()
{ this.coreStop.apply(this,arguments); this.element.style.overflow = "visible"; }
// TW2.2+
// hijack Morpher stop handler so sliderPanel/floatingPanel overflow is visible after animation has completed
if (version.major+.1*version.minor+.01*version.revision>=2.2) {
Morpher.prototype.coreStop = Morpher.prototype.stop;
Morpher.prototype.stop = function() {
this.coreStop.apply(this,arguments);
var e=this.element;
if (hasClass(e,"sliderPanel")||hasClass(e,"floatingPanel")) {
// adjust panel overflow and position after animation
e.style.overflow = "visible";
if (window.adjustSliderPos) window.adjustSliderPos(e.parentNode,e.button,e);
}
};
}
//}}}
{{outline{
!!Outline
#Normal flora
##Human resident microbiota
##Symbiosis
##Normal flora of the gastrointestinal tract
#Metagenomics: sampling the normal flora
#Roles of the normal flora and evidence for mutualism
#Probiotics and prebiotics
!!Handouts and class materials
*W. H. Auden [[poem|web materials/normal flora/Auden - A New Year Greeting.pdf]] on the normal flora
!!Links to more information
*[[Normal Flora of Humans|http://textbookofbacteriology.net/normalflora.html]]
*[[More on the Normal Flora|http://gsbs.utmb.edu/microbook/ch006.htm]]
*[[Killing Germs May Be Hazardous to Your Health|http://www.newsweek.com/id/57368/output/print]] (Newsweek article on our increasing understanding of the benefits of the normal flora)
*[[The Human Microbiome Project|http://nihroadmap.nih.gov/hmp/]] (new NIH-supported project to define the microbial flora of humans)
}}}
{{outline{
!Objectives
!Outline
#Normal flora
##Human resident microbiota
##Symbiosis
##Normal flora of the gastrointestinal tract
#Metagenomics: sampling the normal flora
#Roles of the normal flora and evidence for mutualism
#Probiotics and prebiotics
!Activities
!Ideas
*Video on normal flora and obesity
}}}
{{lechelp{
The ''Independent Study'' section is designed to help you __prepare__ for each class session. If you learn the basics //before// you come to class, we can use class time for more sophisticated and active learning. The focused readings, guide questions and list of key terms will help you direct your preparation appropriately. We will //not// go back over these basic ideas during class; you are expected to know them (a quiz could happen at any time!). You can test your ability to apply what you've learned with the application questions, which will often be discussed in class. Application questions will help you see if you can apply what you've learned and will often be discussed in class. You are encouraged to bring your notes to class in case you need them.
}}}
{{lecblurb{
''You are only 10% human.'' Or, at least, only 10% of the 100 trillion or so cells that walk around with you are yours. The rest are prokaryotes, mostly bacteria. And not only are they not doing you any harm, but there is increasing evidence that they are an integral part of your life. In this class session, we'll look at the roles of the "normal flora" or human microbiome and the evidence that this is a cultivated bacterial population important if not essential to human life.
}}}
!!Focused readings
{{smalltext{all page numbers below are from //Microbiology: Diversity, Disease and the Environment// by Salyers and Whitt}}}
*Introduction to the normal flora: pp. 219-220 (up to "Microbiota of Human Skin") and Figure 11.1
*Normal flora of the stomach and small intestine: pp. 224-225
*Normal flora of the colon: pp. 225-228 and Figures 11.3, 11.4 and 11.5
*Anaerobes in the colon: p. 45
*Symbiosis: pp. 475-476 (up to "Oases at the Bottom of the Ocean")
!!Outside reading
Antibiotics and the normal flora: [Dd[Chicago Tribune article|web materials/normal flora/C-diff.pdf]]
!!Guide questions
#Why do the authors say it is not entirely correct that humans are eukaryotic organisms?
#How can members of the resident microbiota cause disease?
#Why are there relatively few resident microbes in the stomach? Why are there relatively few in the small intestine?
#Why is //Helicobacter pylori// controversial as a possible normal flora organism in the stomach?
#What is the food source for bacteria that live in the colon?
#List some ways we benefit from the microorganisms in our colons.
#Why is a ruptured appendix so dangerous?
#Why are //E. coli// and its relatives the best-understood organisms in the colon, when there are others such as //Bacteroides// that are much more numerous?
#How does the strict definition of symbiosis differ from the popular definition?
#What would be a better term to express what most people mean when they say "symbiosis?"
#Why are normal flora organisms in the human colon traditionally regarded as a commensal relationship?
!!Key terms
{{col3{
resident microbiota
microbial consortium
symbiosis
mutualism
commensalism
parasitism
competition
anaerobe
}}}
!!Application question
Considering what you have learned thus far about the "normal flora" (resident microbiota) of the gut, would you conclude that our relationship with them is __mutualistic __or __commensal__? List some arguments in favor of each position, then decide which you agree with.
<script>
var ctid = story.findContainingTiddler(place).getAttribute("tiddler");
var slideState = store.getValue(ctid,"slides");
if (slideState == "true" ) {
folder = ctid.toLowerCase();
folder = folder.replace(" ","%20");
linkpath = "web%20materials/" + folder + "/slides.pdf";
var slideLink = createTiddlyElement(place,"a",null,"fileLink","click here to download")
slideLink.href = linkpath;
slideLink.onclick = openInNewWindow;
var stext = "<html><br><iframe height = \"600\" width=\"800\" src=\"";
stext += linkpath + "\"></iframe></html>";
wikify(stext,place);
}
else {
wikify("//Slides for this class session have not yet been posted. Please check back later.//",place);
}
</script>
!!Review questions
#Why is //E. coli// a good indicator of fecal contamination? +++*{{keyButton{[answer]}}}...
{{anstxt{
//E. coli// is part of the resident community of bacteria in the gut of essentially all warm-blooded animals, and it survives well in water and many other environments. Thus, if a water source, for example, is contaminated by feces, we can be nearly certain that it will contain //E. coli//.
}}}
===
#What evidence would you cite to support the hypothesis there that there is actually a mutualism between us and at least some of our normal flora? What evidence would you use to argue that this relationship is really commensalism? +++*{{keyButton{[answer]}}}...
{{anstxt{
*It appears that we can live without our normal flora (germ-free mice survive, as do kids with immune-system deficiencies kept in the most germ-free environment practical), and for most of them, no specific benefits to our health or well-being have been defined. Furthermore, some of the benefits are not really specific to particular kinds of bacteria—//any// large number of resident bacteria, for example, would help crowd out competition.This suggests to some that the bacteria are just commensal "passengers," and that their benefits to us are merely accidental.
*But, evidence such as producing specific sugars to attract specific microbes and the apparent roles of the normal flora organisms in the development of the intestinal capillaries and the immune system seem to suggest a much more intimate and highly evolved interaction. Evidence like this argues in favor of mutualism, as does the rather specific set of bacterial species found in any given type of animal.
}}}
===
#You swallow some bacteria of a particular species that lacks pili. If this organism becomes part of your normal flora, where would you expect to find it? +++*{{keyButton{[answer]}}}...
{{anstxt{
Lacking pili, you won't find it in the small intestine where the flow is fast. If it's going to be able to stay in your gastrointestinal tract somewhere, it would have to be in the large intestine, where the flow is slow.
}}}
===
#Aunt Mary is not ill but has //Staphylococcus aureus// among her resident nasal microbiota. She inadvertently transfers some of these organisms to her famous potato salad, which she then fails to refrigerate before serving it to her nephew several hours later. The nephew comes down with a case of //S. aureus// food poisoning. How do you explain the fact that the same organism that is a harmless resident for Aunt Mary can cause disease in her nephew? +++*{{keyButton{[answer]}}}...
{{anstxt{
Sometimes, differences in normal flora among individuals can reflect differences (probably genetic) in what is recognized and controlled by the immune system. In this case, however, it's probably mostly a case of wrong place, wrong time: the toxins produced by food-poisoning strains of //S. aureus// affect the gastrointestinal system but have no effect in the nose. So long as the organism stays where it belongs, it does no harm, but in the wrong place it can produce disease.
}}}
===
#List three distinct roles of the gastrointestinal flora in a healthy individual. +++*{{keyButton{[answer]}}}...
{{anstxt{
*Provide some absorbable nutrients from the breakdown of otherwise indigestible polymers like cellulose.
*Produce some vitamins, such as vitamin K.
*Colonize the available surface area of the intestine, crowding out other bacteria that might otherwise colonize.
*Produce molecules toxic to other bacteria, again reducing the ability of incoming potential pathogens to get a foothold.
*During development, contribute (in an unknown fashion) to proper capillary development
*"Prime" the immune system
*Maybe even affect the individual's weight
}}}
===
#Why can taking antibiotics for something like a sinus infection sometimes produce diarrhea or other gastrointestinal symptoms? +++*{{keyButton{[answer]}}}...
{{anstxt{
If the antibiotics are taken orally, then they will also be present in the gut at some level (or even if absorbed efficiently, at least in the blood that reaches the gut). If that level is high enough to kill a significant amount of the intestinal flora, digestive upsets can occur until they get re-established.
}}}
===
#There are hundreds of products advertised as "probiotics" intended to put specific bacteria into the gut, including various pills. If you were going to take one of these pills, what are two specific concerns that you might have about its effectiveness? +++*{{keyButton{[answer]}}}...
{{anstxt{
*Are the bacteria in the pill actually viable?
*What kinds of bacteria are included, and what is known about their benefits?
*How many bacteria from the pill will actually survive the stomach acid and reach the intestine alive?
}}}
===
!!Additional terms
{{col2{
normal flora
transient flora
permanent flora
microbial consortium
exosymbiont
endosymbiont
prebiotic
facultative anaerobe
obligate anaerobe
fermentation
anaerobic respiration
germ-free mice
}}}
!!Practice problems
*[Dd[Problems|problem sets/normal flora.htm]] from previous exams
*[Dd[Key|problem sets/normal flora key.htm]] for problem set
!!Outline
!!Handouts and class materials
!!Links to more information
!Objectives
!Outline
!Activities
!Ideas
{{lechelp{
The ''Independent Study'' section is designed to help you __prepare__ for each class session. If you learn the basics //before// you come to class, we can use class time for more sophisticated and active learning. The focused readings, guide questions and list of key terms will help you direct your preparation appropriately. We will //not// go back over these basic ideas during class; you are expected to know them (a quiz could happen at any time!). You can test your ability to apply what you've learned with the application questions, which will often be discussed in class. Application questions will help you see if you can apply what you've learned and will often be discussed in class. You are encouraged to bring your notes to class in case you need them.
}}}
{{lecblurb{
''Context question'' Lecture introduction
}}}
!!Focused readings
{{smalltext{
all page numbers below are from //Microbiology: Diversity, Disease and the Environment// by Salyers and Whitt
}}}
!!Guide questions
!!Key terms
{{col3{
}}}
!!Application questions
<script>
var ctid = story.findContainingTiddler(place).getAttribute("tiddler");
var slideState = store.getValue(ctid,"slides");
if (slideState == "true" ) {
folder = ctid.toLowerCase();
folder = folder.replace(" ","%20");
linkpath = "web%20materials/" + folder + "/slides.pdf";
var slideLink = createTiddlyElement(place,"a",null,"fileLink","click here to download")
slideLink.href = linkpath;
slideLink.onclick = openInNewWindow;
var stext = "<html><br><iframe height = \"600\" width=\"800\" src=\"";
stext += linkpath + "\"></iframe></html>";
wikify(stext,place);
}
else {
wikify("//Slides for this class session have not yet been posted. Please check back later.//",place);
}
</script>
!!Review questions
#Question. +++*{{keyButton{[answer]}}}...
{{anstxt{
Answer.
}}}
===
!!Additional terms
{{col2{
}}}
!!Practice problems
!!Links to more information
!!Outline
!!Handouts and class materials
!!Links to more information
!Objectives
!Outline
!Activities
!Ideas
*Good material from [[Todar|http://textbookofbacteriology.net/themicrobialworld/origins.html]]
*[[Phylogeny.fr|http://www.phylogeny.fr/version2_cgi/index.cgi]]: easy phylogenetics programs
{{lechelp{
The ''Independent Study'' section is designed to help you __prepare__ for each class session. If you learn the basics //before// you come to class, we can use class time for more sophisticated and active learning. The focused readings, guide questions and list of key terms will help you direct your preparation appropriately. We will //not// go back over these basic ideas during class; you are expected to know them (a quiz could happen at any time!). You can test your ability to apply what you've learned with the application questions, which will often be discussed in class. Application questions will help you see if you can apply what you've learned and will often be discussed in class. You are encouraged to bring your notes to class in case you need them.
}}}
{{lecblurb{
''Context question'' Lecture introduction
}}}
!!Focused readings
{{smalltext{
all page numbers below are from //Microbiology: Diversity, Disease and the Environment// by Salyers and Whitt
}}}
!!Guide questions
!!Key terms
{{col3{
}}}
!!Application questions
<script>
var ctid = story.findContainingTiddler(place).getAttribute("tiddler");
var slideState = store.getValue(ctid,"slides");
if (slideState == "true" ) {
folder = ctid.toLowerCase();
folder = folder.replace(" ","%20");
linkpath = "web%20materials/" + folder + "/slides.pdf";
var slideLink = createTiddlyElement(place,"a",null,"fileLink","click here to download")
slideLink.href = linkpath;
slideLink.onclick = openInNewWindow;
var stext = "<html><br><iframe height = \"600\" width=\"800\" src=\"";
stext += linkpath + "\"></iframe></html>";
wikify(stext,place);
}
else {
wikify("//Slides for this class session have not yet been posted. Please check back later.//",place);
}
</script>
!!Review questions
#Question. +++*{{keyButton{[answer]}}}...
{{anstxt{
Answer.
}}}
===
!!Additional terms
{{col2{
}}}
!!Practice problems
!!Links to more information
<!--{{{-->
<div class='header' macro='gradient vert [[ColorPalette::PrimaryLight]] [[ColorPalette::PrimaryMid]]'>
<div class='headerShadow'>
<span class='siteTitle' refresh='content' tiddler='SiteTitle'></span>
<span class='siteSubtitle' refresh='content' tiddler='SiteSubtitle'></span>
<div id="loginBox" refresh='content' tiddler='loginBox'></div>
</div>
<div class='headerForeground'>
<span class='siteTitle' refresh='content' tiddler='SiteTitle'></span>
<span class='siteSubtitle' refresh='content' tiddler='SiteSubtitle'></span>
</div>
</div>
<div id='mainMenu' refresh='content' force='true' tiddler='MainMenu'></div>
<div id='displayArea'>
<div id='messageArea'></div>
<div id='tiddlersBar' refresh='none' ondblclick='config.macros.tiddlersBar.onTiddlersBarAction(event)'></div>
<div id='tiddlerDisplay'></div>
</div>
<!--}}}-->
{{outline{
!!Outline
#Pathogenesis
##Opportunists and pathogens
##Virulence factors
##Measures of virulence
#Requirements for pathogenesis
##Reservoir
##Entry
##Attachment
##Invasion of cells
##Evasion of host defenses
##Obtain nutrients and multiply
##Damage tissues or produce symptoms
##Exit
!!Handouts and class materials
*[Dd[Group problem on virulence factors|web materials/pathogenesis/group problem.pdf]]
!!Links to more information
*Great site on [[Virulence Factors of Pathogenic Bacteria|http://www.mgc.ac.cn/VFs]]
*Introduction to [[Pathogenesis|http://faculty.ccbcmd.edu/courses/bio141/lecguide/unit2/bacpath/intro.html]]
*[[Pathogenicity|http://bacteriamuseum.org/cms/Pathogenic-Bacteria/bacterial-pathogenicity.html]] and examples of virulence factors
*[[Adherence|http://student.ccbcmd.edu/courses/bio141/lecguide/unit2/bacpath/adhere.html]]
}}}
{{outline{
!Objectives
!Outline
#Pathogenesis
##Opportunists and pathogens
##Virulence factors
##Measures of virulence
#Requirements for pathogenesis
##Reservoir
##Entry
##Attachment
##Invasion of cells
##Evasion of host defenses
##Obtain nutrients and multiply
##Damage tissues or produce symptoms
##Exit
!Activities
*[[Group problem|class materials/pathogenesis/group problem.pdf]] on contributions of various factors to virulence
!Ideas
{{lechelp{
The ''Independent Study'' section is designed to help you __prepare__ for each class session. If you learn the basics //before// you come to class, we can use class time for more sophisticated and active learning. The focused readings, guide questions and list of key terms will help you direct your preparation appropriately. We will //not// go back over these basic ideas during class; you are expected to know them (a quiz could happen at any time!). You can test your ability to apply what you've learned with the application questions, which will often be discussed in class. Application questions will help you see if you can apply what you've learned and will often be discussed in class. You are encouraged to bring your notes to class in case you need them.
}}}
{{lecblurb{
''How do bacteria cause disease?'' Some bacteria cause disease outright, while many others (opportunists) can be harmless under many conditions and pathogenic in the wrong place or if they multiply out of control. Of course, many bacteria simply can't cause disease in humans at all. What makes the difference? This class session will introduce pathogenesis, or the process of causing disease.
}}}
!!Focused readings
{{smalltext{all page numbers below are from //Microbiology: Diversity, Disease and the Environment// by Salyers and Whitt}}}
*Introduction to pathogenesis and virulence: pp. 293-296 and Figure 15.3
*Koch's postulates: pp. 297-298 and Table 15.1
*Virulence factors: pp. 298-304, Table 15.2 and Figure 15.4
!!Guide questions
#What is the difference between an infection and a disease?
#If you were colonized by a microbe defined as pathogenic or virulent, why might it not produce disease symptoms?
#How does measuring LD~~50~~ help us decide whether one bacterium is more virulent than another?
#What does measuring ID~~50~~ tell us?
#List at least four things that a microbe must be able to do in order to cause disease.
#List at least three characteristics that a microorganism might have (we would call these virulence factors) that would contribute to its ability to infect or cause disease.
!!Key terms
{{col3{
pathogen
opportunist
primary pathogen (frank pathogen)
pathogenesis
infection
infectivity
virulence
ID~~50~~
LD~~50~~
endotoxin
exotoxin
invasion
}}}
!!Application question
>When you finally identify the pathogen that is causing an unusual case of intestinal disease, you find that it is a member of the normal intestinal flora that has never previously been known to cause disease. When you investigate more closely, you find that the pathogen has a large plasmid that non-pathogenic members of the species do not have. What genes might the plasmid carry that would enhance the ability of this bacterium to cause disease?
<script>
var ctid = story.findContainingTiddler(place).getAttribute("tiddler");
var slideState = store.getValue(ctid,"slides");
if (slideState == "true" ) {
folder = ctid.toLowerCase();
folder = folder.replace(" ","%20");
linkpath = "web%20materials/" + folder + "/slides.pdf";
var slideLink = createTiddlyElement(place,"a",null,"fileLink","click here to download")
slideLink.href = linkpath;
slideLink.onclick = openInNewWindow;
var stext = "<html><br><iframe height = \"600\" width=\"800\" src=\"";
stext += linkpath + "\"></iframe></html>";
wikify(stext,place);
}
else {
wikify("//Slides for this class session have not yet been posted. Please check back later.//",place);
}
</script>
!!Review questions
Several different virulence factors for various pathogens are listed below. State whether each factor contributes to __transmission__, __colonization__ (infection) or actual __virulence__, then explain why it would be an asset for the pathogen to have this virulence factor.
#''Alginate'': In the lung of a cystic fibrosis patient, //Pseudomonas aeruginosa// forms a biofilm: a community of bacteria surrounded by a polysaccharide matrix made of alginate. Alginate gives the community a "slimy," mucoid coating; alginate-producing colonies on an agar plate are hard to pick up with a loop. +++*{{keyButton{[answer]}}}...
{{anstxt{
Alginate contributes to ''virulence'' (after the bacteria have colonized) by enhancing the ability of the bacteria to resist phagocytosis. The slimy alginate coating makes it difficult for phagocytic cells to bind and engulf the //Pseudomonas// cells.
}}}
===
#''Pertussis toxin (Ptx)'': One of the toxins made by //Bordetella pertussis//, the cause of pertussis (whooping cough), Ptx enables the bacteria to adhere to ciliated cells of the upper respiratory tract and also stimulates inflammation, one reason why infection with these bacteria results in severe cough. +++*{{keyButton{[answer]}}}...
{{anstxt{
Ptx contributes to ''colonization'' by enabling adherence and also to ''transmission,'' because the constant coughing allows for very efficient spread to others via respiratory droplets.
}}}
===
#''LOS (lipooligosaccharide)'' is anchored to the outer membrane lipids of //Neisseria gonorrhea//, the cause of gonorrhea. This molecule binds to asialoglycoprotein (these are proteins with carbohydrates other than sialic acid attached) receptors on the host cell surface. +++*{{keyButton{[answer]}}}...
{{anstxt{
LOS contributes to ''colonization'' by providing a means of adherence to cells.
}}}
===
#''mycolic acid'': //Mycobacterium tuberculosis//, the cause of tuberculosis, is a Gram-positive bacterium; the outer layer of its envelope is a thick layer of waxy, hydrophobic mycolic acid. +++*{{keyButton{[answer]}}}...
{{anstxt{
Mycolic acid serves as a barrier outside the peptidoglycan layer of the cell, greatly reducing the cell's permeability to defensive molecules (and also antibiotics and antibacterials, by the way). The major contribution would be to ''virulence'' by allowing the bacteria to better evade host defenses.
}}}
===
#''SprE'': //Enterococcus faecalis// is commonly found in the intestines of healthy humans but is an important cause of nosocomial infections elsewhere in the body. //E. faecalis// produces an exoenzyme (secreted enzyme) called SprE that is a protease. +++*{{keyButton{[answer]}}}...
{{anstxt{
SprE contributes to ''virulence'' by breaking down proteins of the extracellular matrix and enabling the bacteria to spread more readily in the body. It could also be thought of as improving the ability of the bacteria to gain nutrients (amino acids from the proteins SprE breaks down).
}}}
===
#''MOMP'': An outer membrane protein of //Legionella pneumophila//, cause of Legionnaire's disease, a form of pneumonia. This protein binds to receptors on the surface of macrophages, allowing phagocytosis. //Legionella// replicates inside macrophages; this bacterium has no known free-living state: in nature, it replicates inside freshwater amoebae. +++*{{keyButton{[answer]}}}...
{{anstxt{
One would think that a protein that binds macrophages would be an anti-virulence factor! But in this case, the bacteria must invade to survive, and this protein allows them to invade macrophages via a phagocytosis mechanism. It therefore contributes to ''colonization''.
}}}
===
!!Practice problems
{{smalltext{
Note: in the past, there was one class session combining our session on pathogenesis in general and our session on pathogenesis of __E. coli__. This problem set has problems from both of these closely related topics, so you may not be able to do all of them until after the next session.
}}}
*[Dd[Problems|problem sets/pathogenesis.htm]] from previous exams
*[Dd[Key|problem sets/pathogenesis key.htm]] for problem set
!!Outline
!!Handouts and class materials
!!Links to more information
!Objectives
!Outline
!Activities
!Ideas
{{lechelp{
The ''Independent Study'' section is designed to help you __prepare__ for each class session. If you learn the basics //before// you come to class, we can use class time for more sophisticated and active learning. The focused readings, guide questions and list of key terms will help you direct your preparation appropriately. We will //not// go back over these basic ideas during class; you are expected to know them (a quiz could happen at any time!). You can test your ability to apply what you've learned with the application questions, which will often be discussed in class. Application questions will help you see if you can apply what you've learned and will often be discussed in class. You are encouraged to bring your notes to class in case you need them.
}}}
{{lecblurb{
''Context question'' Lecture introduction
}}}
!!Focused readings
{{smalltext{
all page numbers below are from //Microbiology: Diversity, Disease and the Environment// by Salyers and Whitt
}}}
!!Guide questions
!!Key terms
{{col3{
}}}
!!Application questions
<script>
var ctid = story.findContainingTiddler(place).getAttribute("tiddler");
var slideState = store.getValue(ctid,"slides");
if (slideState == "true" ) {
folder = ctid.toLowerCase();
folder = folder.replace(" ","%20");
linkpath = "web%20materials/" + folder + "/slides.pdf";
var slideLink = createTiddlyElement(place,"a",null,"fileLink","click here to download")
slideLink.href = linkpath;
slideLink.onclick = openInNewWindow;
var stext = "<html><br><iframe height = \"600\" width=\"800\" src=\"";
stext += linkpath + "\"></iframe></html>";
wikify(stext,place);
}
else {
wikify("//Slides for this class session have not yet been posted. Please check back later.//",place);
}
</script>
!!Review questions
#Question. +++*{{keyButton{[answer]}}}...
{{anstxt{
Answer.
}}}
===
!!Additional terms
{{col2{
}}}
!!Practice problems
!!Links to more information
!!!Barium chloride standard
//for standardization of culture density in antibiotic sensitivity testing//
• Make 1 ml of 1% BaCl~~2~~ in dH~~2~~O in a microcentrifuge tube (caution: toxic)
• Make 4.75 ml of 1% H~~2~~SO~~4~~ in a clean screw-cap tube that fits the Spec-20
• Add 0.25 ml of the BaCl~~2~~ to the acid, cap and mix well
!!!x-gal
*Make 10 ml of 40 mg/ml stock by dissolving 400 mg x-gal in 10 ml [C[dimethylformamide]].
*Wrap in foil to protect from light and store in freezer.
!!!IPTG
*Make 10 ml of 100 mM stock by dissolving 238 mg in 10 ml dH~~2~~O.
*Filter sterilize and store in 1-ml aliquots in the freezer
!!!Top agar
• Determine total volume needed for the lab
• Add correct amount of __broth__ mix and __0.7%__ agar to a screw-cap bottle
• Add water, autoclave, cool, refrigerate until needed //or// make in a flask and aliquot immediately after autoclaving
!!!Nutrient agar
0.5 % Peptone
0.3 % beef extract
1.5 % agar
0.5% NaCl
!!!LB agar
25 g/l LB broth mix (Miller)
15 g/l agar
Autoclave, cool to 50°C, swirl to mix thoroughly, pour 25 ml/plate
!!!LB broth
25 g/l LB broth mix (Miller)
• Dissolve, dispense into bottles or tubes, autoclave
!!!BHI agar
52 g/l BHI agar mix
//or//
37 g/l BHI broth mix
15 g/l agar
Autoclave, cool to 50 °C, swirl to mix thoroughly, pour 25 ml/plate
!!!BHI broth
37 g/l BHI broth mix
• Dissolve, dispense into tubes or bottles, autoclave
!!!Slants
• Prepare melted agar as usual
• Pipette 5 ml agar into a sterile tall screw-cap glass tube
• Let harden on an angle (use a white slant rack propped up on something)
•Slant should have a 3-4 cm "butt" and a long slant surface
[1<i(150,auto)[An agar slant|images/slant.png]]
!!!TSA
40 g/l trypticase soy agar mix
//or//
30 g/l trypticase soy broth mix
15 g/l agar
Autoclave, cool to 50 °C, swirl to mix thoroughly, pour 25 ml/plate
!!!TSB
30 g/l trypticase soy broth mix
Autoclave
!!!3% hydrogen peroxide
2.5 ml of 30% hydrogen peroxide
dH~~2~~O to 25 ml
• Make fresh not more than a day before use
!!!Simmons citrate agar
24.2 g/l Simmons citrate agar mix
Autoclave, cool to 50 °C, swirl to mix thoroughly, pour 5 ml/slant or 25 ml/plate
!!!EMB agar
37.4 g/l EMB agar mix (Levine)
Autoclave, cool to 50 °C, swirl to mix thoroughly, pour 25 ml/plate
!!!Mannitol salt agar
111 g/l MSA mix
Autoclave, cool to 50 °C, swirl to mix thoroughly, pour 25 ml/plate
!!!R2A agar
18.2 g/l R2A agar mix
Autoclave, cool to 50 °C, swirl to mix thoroughly, pour 25 ml/plate
!!!Endo agar
51 g/l m Endo LES agar mix
20 ml/l 95% ethanol
Heat with stirring to boiling, boil 1 minute. Do not autoclave.
//Caution: do not allow to overheat or boil over!//
Cool to 50 °C, swirl to mix thoroughly, pour 25 ml/plate
!!!Kovac's oxidase reagent
0.5 g (1%) tetramethyl-p-phenylenediamine (TMPD)
50 ml dH~~2~~O
Store in dark or foil-wrapped bottle in refrigerator up to one week
!!!Phenol red fermentation tubes
15 g/l phenol red broth base
10 g/l of desired carbohydrate
• Stir to dissolve
• Dispense 12 ml into 16x125-mm tubes
• Add Durham tube
• Cap with thumb, shake to fill Durham tube
• Cap and autoclave
!!!Mueller-Hinton broth
21 g/l Mueller-Hinton broth mix
Dissolve, dispense into tubes or bottles, autoclave
!!!Mueller-Hinton agar
38 g/l Mueller-Hinton agar mix
(//or// 21 g/l Mueller-Hinton broth mix + 15 g/l agar)
Autoclave, cool to 50 °C, swirl to mix thoroughly, pour 25 ml/plate
!!!Deca-strength broth
To make 50 ml:
5 g peptone
2.5 g yeast extract
1.25 g NaCl
4 g K~~2~~HPO~~4~~
• Dissolve ingredients in about 35 ml of dH~~2~~O
• Adjust pH to about 7.6 (use pH paper)
• Bring to 50 ml total volume
• Autoclave
!!!PCR water
• Filter-sterilize about 1 ml dH~~2~~O into microcentrifuge tubes
• Place in rack
• Top with another rack; tape racks together to keep tubes closed in autoclave
• Autoclave
!!!TBE
104 g Tris base (0.45 M)
55 g Boric acid (0.45 M)
7.5 g disodium EDTA (10 mM)
• Dissolve all ingredients in a large beaker in about 1.6 l of dH~~2~~O
• Pour into graduated cylinder and bring to final volume
• Return to beaker and continue stirring 15 min
• Be sure carboy is very clean, with no precipitate or residue
• Filter TBE through a 0.45- or 0.2-μm filter and transfer to carboy
• Autoclave with cap ajar
!!!Supercoiled DNA ladder
15 μl NEB supercoiled DNA ladder (7.5 μg)
135 μl sterile dH~~2~~O
30 μl EZ-Vision loading buffer
• Mix well and store at –20 °C
• Load 10 μl (0.5 μg) per gel lane
!!!TE buffer
0.5 ml of 2 M Tris pH 8.0 (10 mM)
0.2 ml of 0.5 M EDTA
dH~~2~~O to 100 ml
• Mix and autoclave
!!!end
{{outline{
!!Outline
#Intrinsic resistance to antibiotics
#Acquired resistance to antibiotics
##Modification of antibiotic
##Modification of target
##Exclusion from cell
#Evolution of resistance
##Selection
##Role of antibiotic use
#Stationary phase and persisters
!!Handouts and class materials
*Case study: [[NDM-1|Case study: NDM-1 "Superbug"]]
!!Links to more information
*Good overview of [[antibiotics and resistance mechanisms|http://users.rcn.com/jkimball.ma.ultranet/BiologyPages/A/Antibiotics.html]]
*[[Antibiotic resistance genes and mechanisms|http://www.antibioresistance.be/]]
*Overview of [[resistance and issues|http://www.bioteach.ubc.ca/Biodiversity/AttackOfTheSuperbugs/]]
*Overview of [[NDM-1|http://en.wikipedia.org/wiki/New_Delhi_metallo-beta-lactamase_1]] "superbug" from Wikipedia
}}}
{{box{
[[Case study: NDM-1 "Superbug"]]
Key ideas:
*Resistance gene, resistant bacteria; bacteria, not people, become resistant
*Development of resistance against antibiotics developed specifically to combat resistance
*Ability of resistance gene to be transferred
*Not a new kind of resistance, but a modification of β-lactamases
*Increased resistance to penicillin family; other drugs work—but often other resistances can be acquired at the same time
*Significance of increasing necessary dosage even 10×
*Selection for resistance—antibiotic overuse/misuse increases selective pressure (does not cause resistance)
*Effect of unregulated antibiotic use
*Misuse of antibiotics for viruses
*Effect of reduced rate of antibiotic development
}}}
!!!Antibiotic resistance
The problem of resistance {{slide{slides}}}
Intrinsic resistance {{slide{polymixin slide}}}
Acquired resistance {{slide{slide}}}
How might //Staphylococcus aureus// develop resistance to penicillin?
*''What are the three general mechanisms?''
*We do not see export of the antibiotic (@@efflux pump@@) as an actual mechanism of resistance—''why?''
*''If a mutation modified the target of the antibiotic, what gene would be mutated?''
*''How is this complicated by the fact that most bacteria have multiple PBP genes?''
*''Why do you think this is not the most common mechanism seen in nature?''
*''What is the most common mechanism seen in nature?'' - modification (inactivation, in this case) of the antibiotic itself by an enzyme, β-lactamase
*''How would a β-lactamase arise by mutation?''
*''How might we test the hypothesis that β-lactamases are actually mutated PBPs?
**Download protein sequence for a //Staph. aureus// PBP ("penicillin binding protein" AND aureus), BLAST limiting to Entrez query "beta-lactamase[title]"
''How can we overcome resistance?''
*Change dosage
*Modified penicillins: methicillin
*New β-lactam antibiotics more resistant to cleavage (cephalosporins, carbapemes)
*β-lactamase inhibitors, e.g. Augmentin = ampicillin + clavulanic acid
''How will bacteria respond to these new drugs?''
*Development of new resistance methods is rapid - sometimes something simple like thickened peptidoglycan to "trap" the antibiotic is sufficient
How might //Staphylococcus aureus// develop resistance to vancomyin?
*Target modification - major method: replace terminal D-Ala-D-Ala with D-Ala-D-lactate, which has 1000× less affinity for vancomycin but is still bound by PBP
*Harder to acquire resistance because multiple genes needed: make D-lactate, add D-lactate to peptide, remove D-Ala-D-Ala
How might //E. coli// develop resistance to tetracycline?
*Target modification - observed
*Modification of the antibiotic - not observed
*Efflux pump - in reality, this is the common mechanism; why do you think it is more prevalent than the target modification mechanism?
''How is antibiotic use important in development and spread of resistance?''
*What happens when we don't take our full antibiotic prescription?
*What happens when we share with someone who's not been diagnosed?
*What happens when we use antibiotics for other purposes, such as growth promotion?
!!!Persisters
*Sub-population of __any__ bacterial culture with lower metabolic rate {{slide{slide}}}
*Tolerant of many antibiotics
*Have not actually acquired specific resistance mechanisms; not genetically different
{{outline{
!Objectives
*Appreciate antibiotic resistance as a major medical problem of today
*Understand how bacteria can resist antibiotics
*Understand how resistance can develop
*Recognize antibiotic resistance as an evolutionary adaptation
*Understand how antibiotic overuse/abuse contributes to development of resistance
!Outline
#Intrinsic resistance to antibiotics
#Acquired resistance to antibiotics
##Modification of antibiotic
##Modification of target
##Exclusion from cell
#Evolution of resistance
##Selection
##Role of antibiotic use
#Stationary phase and persisters
!Activities
*[[Case study|Case study: NDM-1 "Superbug"]] based on [[this case study|http://sciencecases.lib.buffalo.edu/cs/collection/detail.asp?case_id=594&id=594]]
!Ideas
*Original [Dd[paper|http://www.sciencemag.org/content/231/4744/1429.full.pdf]] on relatedness of PBPs and β-lactamases
}}}
{{lechelp{
The ''Independent Study'' section is designed to help you __prepare__ for each class session. If you learn the basics //before// you come to class, we can use class time for more sophisticated and active learning. The focused readings, guide questions and list of key terms will help you direct your preparation appropriately. We will //not// go back over these basic ideas during class; you are expected to know them (a quiz could happen at any time!). You can test your ability to apply what you've learned with the application questions, which will often be discussed in class. Application questions will help you see if you can apply what you've learned and will often be discussed in class. You are encouraged to bring your notes to class in case you need them.
}}}
{{lecblurb{
''What happened to our miracle drugs?'' Although antibiotics remain extremely important in battling bacterial diseases, they have lost some of their "shine" in recent years as more and more bacteria have developed resistance to the common antibiotics. This has become a major public-health issue, with even diseases like tuberculosis that were once largely contained coming back in new antibiotic-resistant forms. In this class session, we'll see why resistance is such a big medical problem today and look at how bacteria become resistant to antibiotics.
}}}
!!Focused readings
{{smalltext{all page numbers below are from //Microbiology: Diversity, Disease and the Environment// by Salyers and Whitt}}}
*Resistance and Re-Emergence: pp. 289-93 ("Emerging and Reemerging..." up to "What Do Microbes Want") and Fig. 15.1
*Resistance to penicillin and vancomycin: p. 64 and Box 4-1
*Resistance to protein synthesis inhibitors: pp. 118-120 and Fig. 6.19
!!Guide questions
#How does synthesis of β-lactamase permit a cell to resist penicillin?
#What is one medical strategy for dealing with the prevalence of bacteria that can make β-lactamase?
#What other mechanisms of resistance to penicillin have some bacteria developed?
#Why is resistance to vancomycin less likely to develop than resistance to penicillin?
#What are three distinct mechanisms by which a bacterium can protect itself from antibiotics that act on the 70S ribosome such as tetracycline and chloramphenicol?
!!Outside reading
Levy, S. B. 1998. The challenge of antibiotic resistance. Scientific American ''278''(3):46-53. [L[https://login.libproxy.noctrl.edu/login?url=http://www.nature.com/scientificamerican/journal/v278/n3/pdf/scientificamerican0398-46.pdf]]
#What does it mean for a bacterium to become resistant to an antibiotic?
#What are three major mechanisms by which an antibiotic-resistance gene can work?
#What are three major mechanisms by which bacteria can share antibiotic-resistance genes?
#Why was the discovery of a vancomycin-resistant strain of //Staphylococcus aureus// an especially significant (and frightening) one?
#The use of antibiotics does not //cause// antibiotic resistance. Why, then, has resistance increased as antibiotic use has increased?
#List at least two ways in which antibiotics are commonly misused, potentially leading to resistance.
!!Key terms
{{col3{
intrinsic resistance
acquired resistance
target modification
antibiotic modification
exclusion
β-lactamase
β-lactamase inhibitors
trapping
efflux pump
selection
}}}
!!Application questions
#Generally, a cell could become resistant to an antibiotic by (a) modifying the target of the antibiotic, (b) inactivating the antibiotic itself or (c) rapidly transporting the antibiotic out of the cell. Option (c) is never seen for penicillin resistance, however; why do you think this is true?
#When penicillin-resistant bacteria are isolated from a clinical setting, they almost always have β-lactamase enzymes, even though PBP mutations could theoretically also produce resistance. Why aren't PBP mutations common in actual isolates? (//Hint: how do most bacteria gain resistance?//)
<script>
var ctid = story.findContainingTiddler(place).getAttribute("tiddler");
var slideState = store.getValue(ctid,"slides");
if (slideState == "true" ) {
folder = ctid.toLowerCase();
folder = folder.replace(" ","%20");
linkpath = "web%20materials/" + folder + "/slides.pdf";
var slideLink = createTiddlyElement(place,"a",null,"fileLink","click here to download")
slideLink.href = linkpath;
slideLink.onclick = openInNewWindow;
var stext = "<html><br><iframe height = \"600\" width=\"800\" src=\"";
stext += linkpath + "\"></iframe></html>";
wikify(stext,place);
}
else {
wikify("//Slides for this class session have not yet been posted. Please check back later.//",place);
}
</script>
!!Review questions
#List the three major mechanisms of antibiotic resistance and give a specific example of each. +++*{{keyButton{[answer]}}}...
{{anstxt{
*Modification of the target (e.g., mutation of the 16S rRNA so that tetracycline can't bind it)
*Modification or inactivation of the antibiotic (e.g., cleavage of the β-lactam ring of penicillin by β-lactamase)
*Rapid transport of the antibiotic out of the cell (e.g., an efflux pump that uses active transport to remove tetracycline)
}}}
===
#Of the three major resistance mechanisms, which would be most likely to arise by mutation? Which would be least likely to arise by mutation alone? +++*{{keyButton{[answer]}}}...
{{anstxt{
Modification of the target might require only a single mutation and so is the most likely to arise that way. An enzyme that modifies the antibiotic is less likely to arise by simple mutation, but it could if the cell already has some protein that has related activity, like the PBP that binds penicillin. An antibiotic-specific export pump is probably the least likely to arise by mutation, although again this could be some modification of an existing active-transport protein.
}}}
===
#Suppose you have a strain of //E. coli// which is resistant to chloramphenicol—a very small, hydrophobic molecule that attacks the 70S ribosome. Which mechanism(s) of resistance would you hypothesize you are most likely to find in your resistant strain? +++*{{keyButton{[answer]}}}...
{{anstxt{
Modification of the ribosome so that chloramphenicol can't bind is one likely mechanism; it's also reasonable to hypothesize that there could be an enzyme that inactivates chloramphenicol (actually, this is the most common mechanism in nature). An efflux pump is less likely, because this molecule can so easily pass through the membrane that it would be very difficult to keep it pumped out.
}}}
===
#Below are some possible mechanisms that might make a Gram-negative cell more resistant to ampicillin (a derivative of penicillin that can kill both Gram-positive and Gram-negative cells readily). For each one, explain why it could potentially make a cell less easily killed by this antibiotic. (//Mouse over the gray box to reveal the answer//)
##Greatly increase the synthesis of PBPs %%- More PBPs means a higher concentration of ampicillin needed for complete inhibition%%
##Produce a β-lactamase enzyme %%- Directly inactivate the ampicillin by cleaving the β-lactam ring%%
##Reduce the pore size of porins %%- Reduce the ability of the ampicillin to get through the outer membrane%%
##Produce a large amount of an enzyme that can bind ampicillin but cannot cleave it %%- Bind up all the ampicillin so that it can't bind PBPs%%
##Change the structure of PBP by mutation %%- Could result in a PBP that still binds the peptide but not the ampicillin%%
##Produce a transport protein that pumps out ampicillin %%- If located in the outer membrane, could keep ampicillin out of the periplasm where the peptidoglycan is%%
#Which of the above mechanisms would likely be effective in increasing the penicillin resistance of a Gram-__positive__ cell? +++*{{keyButton{[answer]}}}...
{{anstxt{
a, b, d and e could all work, but c and f will not because there's no outer membrane on a Gram-positive cell.
}}}
===
!!Practice problems
*[Dd[Problems|problem sets/resistance.htm]] from previous exams
*[Dd[Key|problem sets/resistance key.htm]] for problem set
<html><iframe src =$1 width="500" height="375"></iframe></html>
/***
|Name|SectionLinksPlugin|
|Source|http://www.TiddlyTools.com/#SectionLinksPlugin|
|Documentation|http://www.TiddlyTools.com/#SectionLinksPlugin|
|Version|1.4.0|
|Author|Eric Shulman|
|License|http://www.TiddlyTools.com/#LegalStatements|
|~CoreVersion|2.1|
|Type|plugin|
|Description|allow tiddler sections in TiddlyLinks to be used as anchor points|
This plugin enhances the processing of section references so they can be used in links to auto-scroll to the indicated heading within a tiddler (i.e., similar to the 'anchor' behavior provided in HTML by {{{<a name="foo">}}} and {{{<a href="#foo">...</a>}}})
!!!Usage
<<<
!!!!~TiddlyLink syntax
>The standard link syntax has been extended so that a section name can included in a tiddler link (e.g., {{{[[SomeTiddler##SomeSection]]}}}). When clicked, the tiddler is displayed and the specified section heading will be automatically scrolled into view. If the tiddler title is omitted or the 'here' keyword is used (e.g., {{{[[##SomeSection]]}}} or {{{[[here##SomeSection]]>>}}}), then the current containing tiddler is implied by default.
>
>//Note: the enhanced "section"" link syntax can also be used with ''anchor'' elements defined by HTML syntax://
>>{{{<html><a name="sectionname" /></html>}}}
>//This provides an alternative syntax can automatically scroll to content without requiring use of the standard TW section ''heading'' syntax.//
!!!!{{{<<tiddler>>}}} macro
>The {{{<<tiddler SomeTiddler##SomeSection>>}}} syntax has been extended so that when the tiddler title is omitted or the 'here' keyword is used (e.g., {{{<<tiddler ##SomeSection>>}}} or {{{<<tiddler here##SomeSection>>}}}), then the current containing tiddler is implied by default.
!!!!"""<<sectionTOC>>""" macro
>This macro generates a 'Table of Contents'-style numbered-bullet list with links to all sections within the current tiddler. Simply place the following macro at the //end of the tiddler content// (i.e., following all section headings):
{{{
<<sectionTOC>> or <<sectionTOC className>>
}}}
>Note: The macro must occur at the end of the tiddler in order to locate the rendered section headings that precede it. In addition, to position the macro's //output// within the tiddler, you must create a special 'target element' that uses a specified classname (default='sectionTOC'), like this:
{{{
{{sectionTOC{}}}
}}}
>When the {{{<<sectionTOC>>}}} macro is rendered, it will find the matching 'sectionTOC'-classed element and writes it's output there. You can also add the macro and/or target elements directly to the [[ViewTemplate]] definition, so that every tiddler can automatically display the table of contents:
{{{
<span class='sectionTOC'></span> <!-- target element -->
...
<span macro='sectionTOC'></span> <!-- must be at end of tiddler -->
}}}
<<<
!!!Examples
<<<
links to sections defined by ''TW heading syntax'' (e.g, {{{!!!sectionname}}}):{{indent{
[[SectionLinksPlugin##onClickTiddlerLink]]
[[##onClickTiddlerLink]] //(current tiddler implied)//}}}
links to anchors defined by ''HTML syntax'' (e.g., {{{<html><a href="anchorname"></html>}}}):{{indent{
[[SectionLinksPlugin##sampleanchorlink]]
[[##sampleanchorlink]] //(current tiddler implied)//}}}
<<<
!!!Revisions
<<<
2010.08.09 1.4.0 in scrollToSection(), added support for using HTML <a name="..."> anchor elements
2009.08.21 1.3.4 added handling to ignore leading/trailing whitespace in section references
2009.08.21 1.3.3 in createTiddlyLink(), add tiddlyLinkNonExistingSection class if matching section is not found
2009.08.14 1.3.2 in createTiddlyLink(), don't override core value for ~TiddlyLink attribute
2009.08.02 1.3.1 in sectionTOC.handler(), trim leading/trailing whitespace from generated section links
2009.08.01 1.3.0 in scrollToSection(), apply 3-tier section matching (exact, startsWith, contains)
2009.07.06 1.2.2 fixed displayTiddler() hijack
2009.07.03 1.2.1 in {{{<<sectionTOC>>}}}, suppress output if target is not found
2009.06.02 1.2.0 added support for 'here' keyword in {{{[[here##section]]}}} links and {{{<<tiddler here##section>>}}} macro
2009.04.09 1.1.1 in sectionTOC macro, make target visible when TOC is rendered.
2009.01.18 1.1.0 added {{{<<sectionTOC>>}}} macro to generate numbered-bullet links to sections of current tiddler
2009.01.06 1.0.0 converted to stand-alone plugin
2008.10.14 0.0.0 initial release (as [[CoreTweaks]] #784 - http://trac.tiddlywiki.org/ticket/784)
<<<
!!!Code
***/
//{{{
version.extensions.SectionLinksPlugin= {major: 1, minor: 4, revision: 0, date: new Date(2010,8,9)};
Story.prototype.scrollToSection = function(title,section) {
if (!title||!section) return; var t=this.getTiddler(title); if (!t) return null;
var elems=t.getElementsByTagName('*');
var heads=[]; var anchors=[];
for (var i=0; i<elems.length; i++)
if (['H1','H2','H3','H4','H5'].contains(elems[i].nodeName)) heads.push(elems[i]);
for (var i=0; i<elems.length; i++)
if (elems[i].nodeName=='A' && (elems[i].getAttribute('name')||'').length) anchors.push(elems[i]);
var found=null;
for (var i=0; i<heads.length; i++)
if (getPlainText(heads[i]).trim()==section) { found=heads[i]; break; }
if (!found) for (var i=0; i<heads.length; i++)
if (getPlainText(heads[i]).trim().startsWith(section)) { found=heads[i]; break; }
if (!found) for (var i=0; i<heads.length; i++)
if (getPlainText(heads[i]).trim().indexOf(section)!=-1) { found=heads[i]; break; }
if (!found) for (var i=0; i<anchors.length; i++)
if (anchors[i].getAttribute('name')==section) { found=anchors[i]; break; }
if (!found) for (var i=0; i<anchors.length; i++)
if (anchors[i].getAttribute('name').startsWith(section)) { found=anchors[i]; break; }
if (!found) for (var i=0; i<anchors.length; i++)
if (anchors[i].getAttribute('name').indexOf(section)!=-1) { found=anchors[i]; break; }
if (found) {
// if section heading is collapsed, click to expand it - see [[FoldHeadingsPlugin]]
if (hasClass(found,'foldable') && found.nextSibling.style.display=='none') found.onclick();
// scroll *after* tiddler animation
var delay=config.options.chkAnimate?config.animDuration+100:0;
setTimeout('window.scrollTo('+findPosX(found)+','+findPosY(found)+')',delay);
return found;
}
}
//}}}
/***
!!!!core hijacks
***/
/***
!!!!!createTiddlyLink
***/
//{{{
// [[tiddlername##section]] and [[##section]]
if (!window.createTiddlyLink_section)
window.createTiddlyLink_section=window.createTiddlyLink;
window.createTiddlyLink=function(place,title) {
var t=story.findContainingTiddler(place); var tid=t?t.getAttribute('tiddler'):'';
var parts=title.split(config.textPrimitives.sectionSeparator);
var title=parts[0]; var section=parts[1]; if (section) section=section.trim();
if (!title.length || title.toLowerCase()=='here') title=tid; // default=current tiddler
arguments[1]=title;
var btn=createTiddlyLink_section.apply(this,arguments);
if (section) {
btn.setAttribute('section',section);
if (store.getTiddlerText(title+config.textPrimitives.sectionSeparator+section)===null)
addClass(btn,'tiddlyLinkNonExistingSection');
}
return btn;
}
//}}}
/***
!!!!!onClickTiddlerLink
***/
//{{{
if (!window.onClickTiddlerLink_section)
window.onClickTiddlerLink_section=window.onClickTiddlerLink;
window.onClickTiddlerLink=function(ev) {
var e=ev||window.event; var target=resolveTarget(e); var title=null;
while (target!=null && title==null) {
title=target.getAttribute('tiddlyLink');
section=target.getAttribute('section');
target=target.parentNode;
}
var t=story.findContainingTiddler(target); var tid=t?t.getAttribute('tiddler'):'';
if (title!=tid||!section) // avoid excess scrolling for intra-tiddler links
onClickTiddlerLink_section.apply(this,arguments);
story.scrollToSection(title,section);
return false;
}
//}}}
/***
!!!!! displayTiddler
***/
//{{{
if (!Story.prototype.displayTiddler_section)
Story.prototype.displayTiddler_section=Story.prototype.displayTiddler;
Story.prototype.displayTiddler = function(srcElement,tiddler)
{
var title=(tiddler instanceof Tiddler)?tiddler.title:tiddler;
var parts=title.split(config.textPrimitives.sectionSeparator);
var title=parts[0]; var section=parts[1]; if (section) section=section.trim();
if (!title.length || title.toLowerCase()=='here') {
var t=story.findContainingTiddler(place);
title=t?t.getAttribute('tiddler'):'';
}
arguments[1]=title; // default=current tiddler
this.displayTiddler_section.apply(this,arguments);
story.scrollToSection(title,section);
}
//}}}
/***
<html><a name="sampleanchorlink" /></html>This is a sample ''anchor link'': {{{<html><a name="sampleanchorlink" /></html>}}}
!!!!!isExternalLink
***/
//{{{
if (!config.formatterHelpers.isExternalLink_section)
config.formatterHelpers.isExternalLink_section=config.formatterHelpers.isExternalLink;
config.formatterHelpers.isExternalLink=function(link) {
if (link.indexOf(config.textPrimitives.sectionSeparator)!=-1) return false;
return config.formatterHelpers.isExternalLink_section.apply(this,arguments);
}
//}}}
/***
!!!!!tiddler.handler
***/
//{{{
if (!config.macros.tiddler.handler_section)
config.macros.tiddler.handler_section=config.macros.tiddler.handler;
config.macros.tiddler.handler=function(place,macroName,params,wikifier,paramString,tiddler)
{
if (!params[0]) return;
var sep=config.textPrimitives.sectionSeparator;
var parts=params[0].split(sep); var tid=parts[0]; var sec=parts[1]; if (sec) sec=sec.trim();
if ((tid.toLowerCase()=='here'||!tid.length) && sec) { // fixup for 'here##section' and '##section'
var here=story.findContainingTiddler(place)
var tid=here?here.getAttribute('tiddler'):tiddler?tiddler.title:'';
arguments[2][0]=tid+sep+sec;
arguments[4]=paramString.replace(new RegExp('(here)?'+sep+sec),tid+sep+sec);
}
config.macros.tiddler.handler_section.apply(this,arguments);
}
//}}}
/***
!!!!sectionTOC macro
***/
//{{{
config.macros.sectionTOC = {
targetClass: 'sectionTOC',
handler: function(place,macroName,params,wikifier,paramString,tiddler) {
var out=[];
var targetClass=params[0]||this.targetClass;
var t=story.findContainingTiddler(place); if (!t) return;
var elems=t.getElementsByTagName('*');
var level=5; // topmost heading level
for (var i=0; i<elems.length; i++) {
var txt=getPlainText(elems[i]).trim();
var link='[['+txt+'|##'+txt+']]';
switch(elems[i].nodeName) {
case 'H1': out.push('#'+link); level=1; break;
case 'H2': out.push('##'+link); level=lev