Welcome to TiddlyWiki created by Jeremy Ruston; Copyright © 2004-2007 Jeremy Ruston, Copyright © 2007-2011 UnaMesa Association
Thaw 1-kb ladder completely before removing aliquot. Mix well and store at –20°C; avoid exposure to heat.
#Dissolve AMPSO in about 30 ml of dH~~2~~O
#Bring pH to 9.0 with solid potassium hydroxide
#Bring total volume to about 45 ml
#Make fresh FeSO~~4~~ solution and add it to solution
#Add the remaining solutions in the order shown and mix after each addition
#Bring to final volume with dH~~2~~O
#Filter-sterilize 10-ml aliquots into sterile tubes
#Store at -20°C
#Mix salts, K~~2~~HPO~~4~~ and water
#Adjust pH to 9.0 (or other desired pH in range 8.3-9.7) if necessary with a small amount of NaOH
#Filter sterilize into sterile bottle
#Store at 4 °C for up to one month
#Before use, add aseptically (for each 10 ml of medium):
**50 μl of 0.355% [f[thiamine|Thiamine]]
**0.5 ml of 20% [f[glucose|Glucose]] (1% final concentration)
**50 μl of 0.79% leucine (for MC1000-based strains)
A 75-bp fragment can be clearly separated on an 8% gel. For a full-sized gel (25 ml), add 75 μl APS and 5 μl TEMED.
Store in refrigerator. Each gel requires about 4 ml; add 75 μl of 10% APS and 4 μl of TEMED for each gel.
Requires about 1 ml for each stacking gel. Add 3.5 μl of 10% APS and 1 μl TEMED for each gel.
Ian Braun's [[senior thesis|data/isoAsp bioinformatics/Ian Braun thesis 2016.pdf]] documents the development of an algorithm for predicting susceptibility of proteins to isoAsp formation based on the amino acids flanking Asp and Asn. Ian "trained" his algorithm using specific Asp and Asn residues known to be isomerized (or not) //in vivo//. When Ian tested his program on the //E. coli// genome, several of the proteins predicted to have a high likelihood of isomerization were [g[adhesin]] proteins.
Although adhesins are secreted proteins attached to the outer membrane—and hence not obviously repairable by PCM—it would be interesting to see if there is evidence they are susceptible to damage.###Steve Clarke has speculated on the possibility that cell-surface proteins could be repaired by PCM released by lysis or by some other mechanism; see [r[Clarke, 2003|Clarke2003]]### Even if not repairable, isoAsp formation in adhesins over time could potentially permit a gradual decrease in adherence, which would be a cool regulatory mechanism.
!!Adhesin function[R[Roux2005]]
Autotransporters are a large group of secreted proteins in Gram-negative bacteria with adhesin, protease and hydrolytic enzyme functions. The best-studied is "antigen 43" (Ag43), encoded by the //flu// gene. Ag43 is an autotransporter self-recognizing adhesin: the N-terminal "passenger" domain is transported through an outer-membrane pore formed by the C-terminal β-barrel domain, βAT.[r[Diderichsen1980]] Ag43 promotes cell-cell interactions leading to aggregation, which can be monitored in culture tubes (see below). It is involved in single- or mixed-species biofilm formation and structure.[r[Kjaergaard2000,Danese2000]]
Expression of Ag43 is phase-variable and changes frequently from //flu//^^+^^ to //flu//^^−^^ states. The shift from ON to OFF results from regulation of //flu// by Dam methylase and OxyR. In MG1655 Δ//oxyR//, //flu// expression is not repressed and most cells are ON, leading to aggregation. MG1655 Δ//oxyR// Δ//flu// does not aggregate.[R[Roux2005]]
There are ten //E. coli// genes homologous to //flu//: //ypjA//, //yejO//, //ydhQ//, //ydbA//, //ycgH//, //yfaL//, //ydeK//, //ydeU//, //yaiT//, //ycgV//. Expression of //yfaL//, //yeeJ//, //ypjA// or //ycgV// leads to biofilm function, as tested by adhesion in microtiter plates (see below).
!!Adhesin assays
!!!Aggregation assay
<<wikify "%0" [[theory@Cell aggregation assay]]>>
!!!Biofilm adhesion assay
<<wikify "%0" [[theory@Biofilm adhesion assay]]>>
!!Ian's top proteins:
*''NP_416485'' "putative adhesin = //yeeJ//: similar to Ag43 but probably not autotransported; deletion does not affect biofilm formation but overexpression causes increased adhesion to solid surfaces and biofilm formation (see [[EcoCyc|http://biocyc.org/gene?orgid=ECOLI&id=G7064-MONOMER#]])[r[Roux2005]]
*''NP_416736'' "adhesin" = //yfaL//: similar to Ag43; deletion does not affect biofilm formation but overexpression causes increased adhesion to solid surfaces and biofilm formation (see [[EcoCyc|http://biocyc.org/gene?orgid=ECOLI&id=EG12850-MONOMER]])[r[Roux2005]]
*''NP_417134'' "adhesin-like autotransporter" = //ypjA//: similar to Ag43; deletion does not affect biofilm formation; overexpression causes increased adhesion to solid surfaces but does not affect biofilm formation (see [[EcoCyc|http://biocyc.org/gene?orgid=ECOLI&id=G7382-MONOMER]]).[r[Roux2005]] A //ypjA//::Tn5 mutant produces significantly less outer membrane vesicles than the wild type.[r[McBroom2006]]
*''YP_026189'' "putative secreted and surface-associated lipoprotein mucinase" = //yghJ// or //sslE//: not a homolog of Ag43; characterized as a likely mucinase involved in degrading intestinal mucins (PLoS Pathog 10:e1004124, I&I 82:509). Reported as required for biofilm formation, colonization and virulence (PLoS Pathog 10:e1004124, PNAS 107:9072, I&I 80:2042), but an //sslE// mutation had no effect on adherence and biofilm formation in an atypical EPEC strain (I&I 81:3793). Secreted by T2SS, but since K-12 lacks an intact T2SS-beta it is unlikely that K-12 secretes SslE. Homologous to //V. cholerae// accessory colonization factor AcfD. (see [[ecogene|http://www.ecogene.org/gene/EG12994]])
*''NP_415720'' "putative adhesin" = //ycgV//: similar to Ag43; deletion does not affect biofilm formation but overexpression causes increased adhesion to solid surfaces and biofilm formation (see [[EcoCyc|http://biocyc.org/gene?orgid=ECOLI&id=G6629-MONOMER]])[r[Roux2005]]
*''NP_417015'' "bacterial α2macroglobulin" = //yfhM// or ECAM: seems unrelated to adhesin function; periplasmic protein providing defense against host proteases (see [[EcoCyc|http://biocyc.org/gene?orgid=ECOLI&id=G7323-MONOMER]])
*''YP_026164'' "CP4-44 prophage; Ag43 phase-variable biofilm formation autotransporter" = //agn43// itself (see [[EcoCyc|http://biocyc.org/gene?orgid=ECOLI&id=G7080-MONOMER]])
*''NP_418674'' "SopA-central-domain-like hexapeptide repeat protein" = //yjgL//: unrelated to adhesins and of unknown function (see [[coligene|http://www.ecogene.org/gene/EG12531]])
*''YP_026208'' "DUF3971-AsmA2 domains protein" = //yhdP//: predicted transporter apparently unrelated to adhesins
*''NP_417683'' "putative outer membrane fimbrial usher protein" = //yhcD//: apparently unrelated to adhesins
Outline of initial experiments to see if adhesins are interesting:
!!!Strains:
To ensure that Ag43 is expressed, we will need //oxyR//-deficient strains; //flu//-deficient strains will serve as negative controls. We will need //pcm//^^+^^ and //pcm//^^−^^ versions of each strain.
*JV1120 (wild-type)
*JV1121 (Δ//pcm//)
*JV1120 Δ//oxyR//: construct by transduction from JW3933 (plate 95, C5); should lock most cells ON for Ag43 expression and aggregation
*JV1121 Δ//oxyR//: construct by transduction from JW3933 (plate 95, C5); should lock most cells ON for Ag43 expression and aggregation
*JV1120 Δ//flu//: construct by transduction from JW1982 (plate 91, C2); should not aggregate
*JV1121 Δ//flu//: construct by transduction from JW1982 (plate 91, C2); should not aggregate
(Can if needed construct Δ//oxyR// Δ//flu// strains, cognate of strain used in [r[Roux //et al.// (2005)|Roux2005]], by removing the Km marker from one of the single deletions and then adding the other by transduction)
!!!How to construct new strains
*[g[Bacteriophage]] P1 breaks up cellular DNA when it infects a host //E. coli// cell; this particular phage—and especially a mutant called P1~~//vir//~~—is somewhat careless about what DNA it packages into new phage capsids. Sometimes it will package a fragment of host DNA, thereby transferring genes between one host cell and another: [g[transduction]].
*We can use transduction to construct new strains. For example, suppose we want to add an //oxyR// mutation to our standard wild-type strain, JV1120. We first need a strain which has a mutation in //oxyR// caused by the insertion of an easy-to-identify antibiotic-resistance gene, in this case strain JW3933 (has //oxyR// interrupted by a kanamycin-resistance, or Km^^R^^ marker). Phage P1 is then grown on this strain, and the resulting phage [g[lysate]] (see the [[Preparation of P1vir liquid lysates]] protocol) will then contain some phage that have accidentally packaged up the part of the chromosome containing the mutated //oxyR//.
*Now, that phage lysate is allowed to infect JV1120 (see the [[Transduction with phage P1]] protocol), and we then plate the infected cells on a plate containing kanamycin. Colonies that grow have gotten a mutated //oxyR// from the phage, which has integrated (crossed-over, essentially) into the bacterial chromosome, replacing the wild-type //oxyR//.
*PCR is used to test the resulting strain and be sure there is an insertion in the gene as expected. Now the strain can be used in experiments.
!!!PCR Primers
| name | left primer | right primer | length<br>amplified |h
|oxyR|CCTATCGGGTAGCTGCGTTA|GTGGCGATGGAGGATGGATA| 964bp (wt)<br>1373bp (mutant)|
|flu|CTGCCGGTATCCACGTTTG|AGGCGATGGTTCTGTCAGAA| 3197bp (wt)<br>1405bp (mutant)|
(see [[this file|sequences/sequences of oxyR and flu wild-type and mutant strains.txt]] for details)
!!!Basic procedure for testing aggregation
*Verify the Δ//pcm// by PCR just to be sure, since it has no resistance marker
*Using the [[Cell aggregation assay]] protocol, test aggregation for the six strains grown overnight and then aggregated 24h to get baseline data and verify that controls aggregate or don't as expected
*Try LB vs M63B1-0.4% glucose (used in [ext[Roux2005|library/Roux2005.pdf]]) or M9 to see if the minimal medium is required
*Grow strains 10 days in stationary phase and test aggregation each day to see if isoAsp accumulation affects aggregation
*Test initial cultures and long-term cultures for biofilm adhesion using the [[Biofilm adhesion assay]]
%%''Preparation of agarose pads''###Make agarose fresh for each day's observations###
Add 150 mg of low-melt agarose###Do not use regular agarose### to 10 ml of PBS or liquid bacterial medium (1.5% agarose final conc.) in a 50-ml disposable conical tube###A complex medium such as LB will produce significant autofluorescence; a defined minimal medium is recommended when possible, or avoidance of yeast extract to minimize autofluorescent compounds###
Melt agarose by microwaving for 10-15s at a time and carefully vortexing between; beware of superheating
Let cool for a few minutes; add any desired additives to the medium after the agarose cools, immediately before forming the pads
Spread Parafilm on a flat surface to make a clean working surface
Pipette 1 ml of agarose onto a 22-mm coverslip and immediately place another coverslip on top, avoiding and removing air bubbles
Cover with a Petri-dish lid to reduce evaporation###Pads can be used for about 6 hours after pouring; older pads will show increased background fluorescence### and allow to solidify 45-60 min at room temperature
Expose a small amount of solidified agarose by sliding the top cover glass away
Cut individual pads with an ethanol-cleaned razor blade or a 6-mm punch###Be sure there is no damage on the imaging side of the pads; using a punch is important where some molecule will be added to the pads during observation, to ensure uniform dosage###
%%''Preparing bacteria for observation''
Dilute cells appropriately, usually to OD~~600~~ ≅ 0.01
Transfer individual pads to a coverslip with a razor blade
Pipette about 2.25 μl of diluted bacteria directly onto each pad
Allow bacterial suspension to absorb into the agarose 10-15 min###Residual liquid will allow cells to move###
During the drying time, place a thin line of silicone grease around the edges of the coverslip
Flip the agarose pads onto a glass-bottom dish, with the bacteria sandwiched between the pads and the cover glass
Press gently around the edges of the cover slip to seal it and prevent evaporation
Mount the dish on the microscope stage, focus on the cells, add oil to the coverslip and focus at high power###Focal drift will be reduced after 10-15 min###
Pipette 5 ml of desired medium (usually PBS###PBS will give much less background fluorescence than LB broth, but cell growth cannot be observed### or LB broth) into a 15-ml sterile disposable centrifuge tube
Add 100 mg of agarose (2% final concentration)
Microwave on half power 15s at a time until agarose is melted###Any unmelted agarose will produce background fluorescence, so be sure agarose is __completely__ melted###
Use a sterile Pasteur pipette to cover the surface of a cover slip with the melted agarose mix
Gently lay another cover slip on top, so that an even layer of agarose will form between the two; let harden 5-10 min
Carefully slide off the top coverslip###If it is difficult to slide the cover slip all the way off, sliding it enough to expose some agarose will allow some pads to be cut###
Cut the exposed agarose into squares a few mm on a side with an ethanol-cleaned razor blade
Use the razor blade to gently lift an agarose square and place it in the middle of a slide
Transfer 1-3 μl of appropriately diluted cells to the center of the pad, let dry 5 min
During the drying time, place a thin line of silicone grease around the edges of a coverslip###Grease slows evaporation, while the air trapped around the agarose pad provides oxygen for the bacteria###
Place the cover slip gently on top of the agarose pad and press gently to seal the edges
%%Making the cell lysate
Grow cells under desired conditions in 50-100 ml of medium in a 250-ml [G[baffle flask|baffle_flasks]] with aeration
Transfer cells to a sterile 50-ml centrifuge tube on ice
Centrifuge for 10 min at 7600×//g// and 4°C in a pre-chilled rotor
Remove supernatant and wash cells by resuspending pellet gently in 1.5 ml fresh TE-PMSF buffer###PMSF is very toxic: wear gloves and a dust mask when weighing it out, and gloves when working with PMSF-containing solutions###
Transfer to pre-chilled microcentrifuge tubes and centrifuge in refrigerated microcentrifuge 5 min at 6500×//g// and 4°C
Remove supernatant thoroughly and freeze pellet at -80 °C for at least 10 minutes (samples can be stored at -80 °C at this stage for later processing)###Freezing and thawing facilitates lysis of cells###
Resuspend pellet thoroughly in 1 ml fresh TE-PMSF buffer and transfer to 2-ml microcentrifuge tube###50 μl of 10 mg/ml lysozyme can be added at this stage to facilitate cell lysis and incubated 5 min on ice; however, lysozyme will also contribute to total protein in the extract###
[[Sonicate|Sonication]] on ice to lyse cells: 4 rounds of 10 1-second pulses at 40% power, cooling on ice between rounds###Cooling time should be at least 3 minutes; if not doing enough tubes for a round to take 3 min, be sure to wait before starting the next round###
Centrifuge 10 min. at 2000×//g// and 4 °C to remove any intact cells
Transfer supernatant (now a cell [g[lysate]], or crude protein extract) to clean tube
Transfer 100 μl to a clean tube for a [[protein assay|Lowry protein assay]] to determine the //total// amount of protein in the extract—soluble and insoluble###Both tubes can be stored at –80 &dec;C at this point for later analysis###
%%To purify aggregated proteins from the remaining cell lysate, continue with the procedure below. To also determine "aggregatable" proteins (those that were not aggregated in the cell but can be aggregated by heating), split the lysate into two aliquots and heat one at 37 °C for 1 hour. Then continue with the procedure below for each sample.
Centrifuge remaining cell lysate 30 min at 16,000×//g// and 4 ° in refrigerated microcentrifuge to pellet membranes and aggregated proteins
Remove supernatant and resuspend pellet in 500 μl 10% NP-40 alternative (in TE-PMSF buffer)###Nonidet P-40, or NP-40, was a non-ionic, non-denaturing detergent that can solubilize membrane proteins while minimally affecting protein aggregates; it is no longer sold, but a chemically equivalent detergent is IGEPAL CA-630, commonly sold as "NP-40 alternative."### by vortexing vigorously
Sonicate briefly (5 pulses) to ensure aggregated proteins are resuspended
Centrifuge again, 30 min at 16,000×//g// to pellet detergent-insoluble protein aggregates
Repeat resuspension, sonication and centrifugation steps
Redissolve insoluble protein aggregates in 50 μl of 6M guanidine-HCl as follows: vortex vigorously, incubate 15 min at 37 °C, sonicate briefly###Guanidine HCl is a strong protein denaturant in which almost any protein, even an aggregate, can be dissolved.###
This sample now contains the aggregated proteins. Quantitate the aggregated protein using the [[Lowry assay|Lowry protein assay]].###Can be frozen at -80 °C until ready to do protein assays.###
!!Hypothesis
[>image 300[Long-term survival of wild-type (without stress, open circles; with stress, closed circles), Δ//pcm// mutant (blue squares) and complemented (red squares) //E. coli// when treated with 0.5% methanol (left panel) or 0.1 mg/ml paraquat (right panel).|images/text/pcm_stress.jpg]]
In //E. coli//, Δ//pcm// mutants that are unable to repair proteins grow and survive just as well as wild-type under normal conditions. However, when they are placed under stress, the repair-deficient mutants show reduced survival in [g[long-term stationary phase|ltsp]], as shown at right for paraquat (oxidative stress) and methanol[r[Visick1998]]. These and the other stresses (high salt, repeated heating) that make survival PCM-dependent can denature proteins. Thus, we hypothesize that repair by PCM may be important in maintaining proteins in their folded, functional conformation. In the absence of PCM, isoaspartyl damage may result directly in protein unfolding, destabilize folded proteins or inhibit refolding of proteins that become denatured.
!!Approach
Unfolded proteins expose hydrophobic regions that should be sequestered. This makes them unstable in the aqueous environment of the cytoplasm, and they will thus tend to [g[aggregate|aggregation]], sticking together by hydrophobic interactions in order to minimize contact of the hydrophobic regions with water. All cells have some amount of protein aggregates[r[Maisonneuve2008a]] which can be measured by using [[centrifugation|Aggregated protein assay]] to separate large protein aggregates from soluble proteins[r[Diamant2001,Gur2004]]. If PCM is important for maintenance of protein conformation, unfolded proteins in Δ//pcm// mutant cells may result in an increased aggregate fraction.
[>image[Wild-type stationary-phase //E. coli// with an IbpA-YFP fusion showing polar localization of protein aggregates.|images/text/polar_agg.png]]
Additionally, protein aggregates can be visualized microscopically. As reported by [r[Lindner //et al.//,|Lindner2008]] the small chaperone protein [[IbpA|http://ecoliwiki.net/colipedia/index.php/ibpA:Gene]] binds to aggregates; a fusion of [[yellow fluorescent protein|https://en.wikipedia.org/wiki/Yellow_fluorescent_protein]] (YFP) to IbpA serves as a reporter in living cells, allowing aggregates to be visualized by fluorescence microscopy. In normal cells, protein aggregates are sequestered to the poles of the cells (right). Using this reporter, we can directly visualize the amount and location of protein aggregates in PCM-deficient cells under various conditions.
Using a combination of these approaches, we propose to examine the role of PCM in protein aggregation.
!!What we've learned so far
[>image 300[Protein aggregates in wild-type (circles) and //pcm//-mutant (squares) //E. coli// maintained for five days in stationary phase (A) in the absence of added stress, or (B) with paraquat to generate oxidative stress.|images/data/pcm_aggregates.png]]
Sean Harrington showed that wild-type and repair-deficient unstressed stationary-phase cells had similar levels of protein aggregates (panel A at right). When nutrients were added, aggregates were reduced as the recovering cells presumably degraded the unfolded protein. When paraquat was used to produce oxidative stress, however, Δ//pcm// cells developed higher levels of aggregated protein (panel B at right). As the cells recovered from stationary phase, degradation occurred at a higher rate than in wild-type cells, rapidly bringing aggregate levels down to those seen in wild-type cells. It may be that aggregated proteins with isoAsp damage are more easily or preferentially degraded.
[<image 300[Protein aggregates in wild-type (red) and Δ//pcm// (blue) strains incubated 24h in stationary phase in the absence of stress (dark lines/symbols) or in the presence of paraquat (producing oxidative stress; light lines/symbols). Aggregates were measured directly from cell lysates (t=0) or after lysates were incubated for the indicated time at 37°C.|images/data/aggregatable.png]]
Adam Kleinman found that even in cells freshly grown to stationary phase, the amount of aggregated protein increased upon incubation of cell lysates at 37°C. Although he observed no difference in aggregated proteins in these "day 0" cells, a slight increase in these "aggregatable" proteins was apparent in Δ//pcm// cells. By day 1 (see figure at left), mutant cells had much more aggregatable protein than wild-type, especially if incubated in the presence of oxidative stress.
Using the IbpA-YFP reporter, Katie DeRosa's preliminary data suggest that there might be more aggregated protein in Δ//pcm// cells than wild-type cells under low-salt conditions, and that these aggregates may segregate to the poles less efficiently.
!!Current Projects
*''Can we observe increased protein aggregation and/or defects in aggregate disposal in repair-deficient mutants //in vivo//?'' Using the IbpA-YFP reporter strain and fluorescence microscopy, we can measure protein aggregates (number of aggregates, intensity of fluorescence) in living cells[r[Lindner2008,Govers2014,Coquel2013]] (wild-type vs. //pcm// mutant). We can grow these cells without stress or with the addition of a stress such as [g[paraquat]] and observe them over several days as they move into stationary phase and then long-term stationary phase. We will want to not only quantitate the number and size of aggregates but also measure their locations within the cell, to see if the polar segregation observed in normal cells[r[Lindner2008]] is occurring. We could also try to track individual cells with aggregates as they recover from stationary phase to see if we can see evidence of aggregate degradation or disposal.
*''Are aggregate levels different in live and dead cells, and does aggregation contribute to cell death?'' If we are able to quantitate aggregates using the IbpA-YFP reporter system (above), we can ask whether the amount of aggregated protein is different in live vs. dead cells in a stationary-phase culture, as judged by CTC staining for respiration, PI staining for permeability or other measures of cell activity. The involvement of aggregation in cell death can be examined by starving cells with more and fewer aggregates in phosphate buffer and examining aggregates in high-density and low-density fractions: [r[see Maisonneuve //et al//., 1998.|Maisonneuve2008]]
Technical issues involved in using fluorescence to quantitate aggregates and measure their position include:
#Adequately immobilizing cells
#Developing a protocol for fluorescence microscopy so that high-quality images can be captured before bleaching
#Developing software workflows (and if necessary identifying additional software, such as ImageJ plugins) to measure cells, aggregates and aggregate positions in microscope images
For the inverted fluorescence microscope, we will use [[glass-bottom dishes|https://www.tedpella.com/section_html/pelco-glass-bottom-dishes.htm]] which essentially have a coverslip embedded in the bottom of a small Petri dish that will fit the holder of our microscope. Samples can be sandwiched between that coverslip and another coverslip and then observed through the bottom of the dish.
Immobilization of //E. coli// is an issue, as they're both motile and bounce around readily due to Brownian motion in lipid suspension. We may eventually have to develop fixation techniques, but a starting point would be to use [[agarose pads|Agarose pads for microscopy]] as described by [r[Young //et al.//|Young2011]].
Initially, the project can start by simply growing strain MGAY, which has the //ibpA//-YFP fusion, letting it age a couple of days in stationary phase so that aggregates form, and then testing our ability to imobilize, visualize and photograph cells containing aggregates. We can then work on analysis protocols and then move to comparison of pcm^^+^^ vs. pcm^^−^^ strains and more complex experiments.
''Bacterial aging?'' Most people don't really think about bacteria getting old. Indeed, until recently, it was common to think of bacteria as essentially "immortal:" one "old" cell can divide to form two "young" ones, and each then continues to divide as long as nutrients are available. However, recent evidence[R[Stewart2005]] suggests that there is a distinct "mother" and "daughter" cell and that the mother cell cannot continue to divide indefinitely. This is known as [G[reproductive aging]]. Bacteria are also good models for [G[chronological aging]] at the cellular level:[R[Nyström2002a,Nyström2003]] in [G[stationary phase|stat_phase]], when nutrients are limited and cells are dividing slowly or not at all, individual cells show [G[senescence|senescence]]—that is, they lose their ability to function over time.
''Stationary phase'' begins as a fast-growing bacterial culture (e.g., in a rich laboratory culture medium) begins to exhaust the available nutrients. Cell division slows and eventually ceases, and the number of cells in the culture stabilizes (see the left panel below). The bacteria reduce their metabolic rate and activate a variety of genes to enable them to survive nutrient limitation and cope with stresses such as heat and oxidation that they might encounter before the return of nutrients.[R[Siegele1992]] Soon, the cell number begins to decrease, marking what was once referred to as "death phase". More recently, however, we have realized that the cell number will eventually stabilize again and remain stable indefinitely, a state termed "long-term stationary phase" (right panel below). Although the number of cells changes little, this is actually a dynamic state in which some cells die, others can divide and mutants better equipped for survival can be selected.[R[Finkel1999]] Bacteria can remain in this state for many years with little loss of overall viability.[R[Finkel2006]]
[image[Typical bacterial growth curves showing stationary phase (left) and long-term stationary phase (right)|images/text/stationary.jpg]]
''In long-term stationary phase'', an //Escherichia coli// cell can survive only if it can maintain its macromolecules, including existing proteins, in a functional state. Oxidative damage and other environmental stresses are major causes of cell death, and stress protection is critical. Cellular functions decline over time, as does the cell's ability to recover successfully even when nutrients become available. In this state, metabolism is minimized, cell division becomes infrequent, new protein synthesis is reduced, and many products are made to protect macromolecules from damage, including [G[chaperons|chaperon]], [G[trehalose]], [G[catalase]], a repair exonuclease and altered lipids.[R[Kolter1993,Siegele1992]] Some cells multiply at the expense of others, and the community evolves as selection for favorable genetic changes occurs; although individual cells die, the population can apparently survive indefinitely.[R[Finkel2006]]
Long-term stationary phase in //E. coli// effectively models many aspects of cellular aging in higher organisms,[R[Ackermann2003,Bjedov2003,Leslie2003,Nyström2002]] suggesting that understanding successful long-term survival in //E. coli// can lead to enhanced understanding of successful aging at the cellular level in all organisms.
*Stationary-phase cells can be considered [G[senescent|senescence]] in that the ability of individual cells to carry out their essential life functions declines over time, as does their ability to return to normal growth even when nutrients are restored.[R[Nyström2003,Nyström1999,Siegele1993]]
*With limited metabolism and protein synthesis, the bacteria have little opportunity to replace damaged macromolecules, and their longevity becomes strongly dependent on effective maintenance and repair.[R[Kolter1993]]
*Consistent with the tenets of the [G[free-radical theory of aging|free_radical_theory]] in higher organisms, stationary-phase bacteria continue to produce [G[reactive oxygen species|ROS]] despite reduced metabolism[R[Gonzalez-Flecha1995]] and exhibit increased oxidative damage as well as decreased protein function as the culture ages.[R[Dukan1999]]
[>image[PCM is required for maximal survival of aging //E. coli//<br>exposed to methanol stress: compare //pcm// mutant JV1068<br>to wild-type MC1000 (Fig. 2 from Visick, 1998)|images/text/methanol.png]]
''PCM in aging //E. coli//''. We propose to extend our understanding of the //in vivo// roles of the vital PCM damage-control system by using long-term stationary phase in //E. coli// as a bacterial model for aging. We chose this model in part because the ability of the bacteria to survive long periods in a state of low metabolic activity affords ample opportunity for isoAsp-containing proteins to accumulate, increasing the need to rely on repair in order to survive. We have previously shown that maximal survival of "aging" //E. coli// in long-term stationary phase is indeed dependent on PCM[R[Visick1998]] (see figure at right), establishing a convenient model system in which to study the importance of isoAsp repair. IsoAsp damage accumulates as the culture ages,[R[Visick1998a]] and damage is repaired by a methyltransferase extremely similar in structure and function to its [G[orthologs]] throughout the living world.[R[Fu1991,Kagan1997]] Studies of PCM in //E. coli// are thus likely to yield insights into the role of protein repair in both bacteria and higher organisms. In particular, our previous work demonstrating the importance of PCM for survival of denaturing stresses[R[Visick1998]] and for recovery from stationary phase[R[Hicks2005]] suggest that we will be able to investigate the basis for many of the interesting findings from other systems, including roles for PCM in longevity,[R[Chavous2001,Kagan1997a,Kim1997,Mudgett1996]] protein conformation,[R[Chavous2001,Kern2005]] stress responses,[R[Chavous2001,Mudgett1994]] and recovery from dormant states.[R[Kagan1997a,Mudgett1993]]
#Mix PEG-200 with KOH and water
#Confirm that pH is 13.3-13.5###Some batches may have an acidic rather than neutral pH due to storage, and additional KOH may be required to bring pH to desired range###
#Dissolve NaOH in about 40 ml of dH~~2~~O
#Add SDS (will precipitate if added to more concentrated NaOH)
#Bring to final volume with dH~~2~~O
Must be made fresh
#Dissolve NH~~4~~OAc in about 8 ml of dH~~2~~O, then bring up to 25 ml total
#Filter-sterilize into sterile bottle and add 75 ml of isopropanol
| !Antibiotic | !Stock solution |>| !Final concentration |
|~|~| !Rich medium | !Minimal medium |
|Ampicillin (Ap)###Use sodium salt; trihydrate is not water soluble unless NaOH is added to 0.15N###| 100 mg/ml in 50% EtOH###50% ethanol keeps stock from freezing so that ampicillin won't degrade in multiple freeze-thaw cycles###| 100 μg/ml| 15 μg/ml|
|Chloramphenicol (Cm)| 20 mg/ml in EtOH| 20 μg/ml| 5 μg/ml|
|Kanamycin SO~~4~~ (Km)| 50 mg/ml| 50 μg/ml| 125 μg/ml|
|Streptomycin (Sm)| 100 mg/ml| 1 mg/ml| 2 mg/ml|
|Tetracycline HCl (Tc)| 20 mg/ml in 70% EtOH| 20 μg/ml| 10 μg/ml|
*All stock solutions are prepared in dH~~2~~O, filter-sterilized and stored at 4 °C unless otherwise indicated
*Antibiotics should always be treated as heat-labile and added only to cooled media
Dissolve in about 6 ml of dH~~2~~O, bring to final volume, filter sterilize into sterile tube.
!Table1
''Proteins with high Asp/Asn content and known or hypothesized functions''^^a^^
|!gene|!description|!length^^b^^|!Asp+Asn^^c^^|
|//yciU//|dsDNA-mimic protein|109|0.202|
|//ygeG//|predicted chaperon|163|0.172|
|//yibA//|lyase containing HEAT repeat|280|0.171|
|//rfaS//|LPS core biosynthesis protein|311|0.170|
|//hdeA//|acid resistance protein|110|0.155|
|//bfr//|bacterioferritin|158|0.152|
|//sspB//|ClpXP specificity-enhancing factor|165|0.152|
|//wcaM//|colanic acid biosynthesis protein|464|0.151|
|//rfaY//|LPS core biosynthesis protein|232|0.151|
|//imp//|organic solvent tolerance protein|784|0.151|
|//dps//|DNA protection during starvation|167|0.150|
|//ybhC//|predicted pectinesterase|427|0.148|
|//tehB//|predicted methyltransferase|197|0.147|
^^a^^Content of Asp and Asn exceeds mean by more than two s.d.; functions as described in GenBank
^^b^^Length of predicted protein in amino acids
^^c^^Fractional Asp+Asn content: total Asp+Asn divided by length
!Table2
''Proteins with high Asp/Asn content and unknown function''^^a^^
|!gene|!length^^b^^|!Asp+Asn^^c^^||!gene|!length|!Asp+Asn|
|//yddK//|318|0.223||//ypjB//|263|0.167|
|//ybgS//|126|0.222||//phnA//|111|0.162|
|//yjgL//|604|0.195||//yhiK//|130|0.162|
|//yjcF//|430|0.193||//ykfB//|155|0.161|
|//yfdF//|352|0.190||//yjgA//|183|0.158|
|//ydcD//|160|0.181||//yhiJ//|540|0.157|
|//yjgD//|138|0.181||//ylbH//|236|0.157|
|//yqeK//|141|0.177||//ygeF//|148|0.155|
|//yjbL//|442|0.176||//yecT//|162|0.154|
|//yrhA//|137|0.175||//yfjU//|104|0.154|
|//ygaQ//|110|0.173||//yhiS//|260|0.154|
|//yhaC//|395|0.172||//yfbO//|158|0.152|
|//yddJ//|111|0.171||//yahL//|271|0.151|
|//yjbM//|235|0.170||//cyaY//|106|0.151|
|//ybaJ//|124|0.169||//yoaB//|114|0.149|
|//yfjJ//|208|0.168||//yfjT//|155|0.148|
|//yhiL//|412|0.167||//yneK//|371|0.148|
|//yccE//|418|0.167|||||
^^a^^Content of Asp and Asn exceeds mean by more than two s.d.; no function or significant similarity described in GenBank
^^b^^Length of predicted protein in amino acids
^^c^^Fractional Asp+Asn content: total Asp+Asn divided by length
!Table3
''Aggregation-prone proteins with high Asp/Asn content''^^a^^
|!gene|!description|!length^^b^^|!Asp+Asn^^c^^|
|//glf//|UDP-galactopyranose mutase|367|0.131|
|//gapA//|glyceraldehyde-3-PO4 dehydrogenase|331|0.130|
|//bipA//|GTP-binding protein|607|0.129|
|//entB//|isochorismatase|285|0.123|
|//rfbB//|dTDP-glucose 4,6 dehydratase|361|0.119|
|//metF//|5,10-methylene THF reductase|296|0.118|
|//arcA//|two-component response regulator|238|0.118|
^^a^^Content of Asp and Asn exceeds mean by more than one standard deviation; described as aggregation-prone[R[Mogk1999]]
^^b^^Length of predicted protein in amino acids
^^c^^Fractional Asp+Asn content: total Asp+Asn divided by length
!End
Aliquot protein samples and standards; include a blank###Assay is suitable for measuring approximately 20 μg to 2 mg of protein per sample.###
Adjust volume of each sample to 50 or 100 μl with dH~~2~~O
Make BCA working solution###Working solution is stable for one week and should be green### by mixing 2 volumes of Reagent B with 100 volumes of Reagent A
Add 1 ml of BCA working solution to each sample and mix
Incubate 30 min at 60°C
Cool to room temperature and transfer to cuvettes###Final color is stable for about one hour###
Zero spectrophotomter with water only, then read absorbance of blank, standards and samples at 562 nm
#Dissolve all ingredients in dH~~2~~O
#pH to 11.25 with 10 N NaOH
#Bring to final volume with dH~~2~~O
Dissolve in about 8 ml of dH~~2~~O and bring to final volume of 10 ml
#Prepare 10 ml of buffer by adding Tris and NaCl to dH~~2~~O
#Dissolve BSA in 10 ml buffer to make 10 mg/ml (approx) stock
#Determine exact concentration by absorbance at 279 nm:
##Add 100 μl to 900 μl of dH~~2~~O
##Measure A~~279~~
##Calculate concentration: a 1 mg/ml solution has A~~279~~ = 0.67
#Based on measured concentration, calculate dilution to make a solution of 1 mg/ml BSA
#Prepare 1 mg/ml solution using same buffer
#Label the 10 mg/ml stock with exact concentration
#Store both solutions at 4°C in sterile, disposable 15-ml tubes
[[iBiology|http://www.ibiology.org]] lectures on protein folding and disease:
*[[chaperones and chaperone-assisted protein folding|https://www.ibiology.org/cell-biology/chaperone]]
*[[protein folding, prions and disease|https://www.ibiology.org/biochemistry/prions]]
Grow desired strains overnight in minimal medium with glucose (or appropriate carbon source)
Dilute 1:100 in 5 ml of the same medium; add any needed inducer
Grow to OD~~600~~ of 0.3 to 0.7 (2-5×10^^8^^ cells/ml)
Chill 20 min on ice and measure OD~~600~~
Add aliquots (0.1 ml if high activity is expected, 0.5 ml if activity is expected to be low) to Z-buffer in glass tubes to give final volumes of 1 ml
Permeabilize cells by adding two drops of chloroform and one drop of 0.1% SDS and vortexing vigorously for 10 seconds
Place tubes in water bath at 28°C for 5 min to equilibrate temperature
Add 0.2 ml of ONPG, shake or vortex to mix, and start timing
Incubate until distinct (but not dark) yellow color is visible###For very low activities (no yellow color within an hour), incubation can be continued up to overnight. Wrap tubes in foil and incubate a blank (ONPG + buffer) to account for spontaneous breakdown.###
Stop by adding 0.5 ml of 1 M sodium carbonate; mix well and record time
Transfer 1.5 ml to a microcentrifuge tube, spin to pellet debris###Absorbance at 420 nm is a combination of absorbance due to //o//-nitrophenol and scatter due to cells and debris. The centrifugation step is intended to remove light-scattering cell debris and chloroform. It is possible to skip this step by measuring absorbance at both 420 and 550 nm (absorbance at 550 nm is exclusively scatter) and subtracting 1.75 × OD~~550~~ from the OD~~420~~ reading. However, the centrifugation method usually gives more consistent results, particularly when the ONP concentration is low.###
Transfer supernatant to a cuvette and measure ONP formation at 420 nm using a blank consisting of Z-buffer plus ONPG, SDS, chloroform and carbonate, spun as above
Inoculate 100 μl M63 with thiamine and 0.4% glucose in 96-well plate with 1:100 dilutions from overnight cultures
Incubate 24h at 37°, rinse to remove planktonic cells
Add 125 μl of crystal violet to each well, incubate 15 min at room temperature, rinse
Solubilize crystal violet by addition of 200 μl 80:20 ethanol:acetone
Measure OD~~570~~
In considering the question of whether PCM simply repairs all isoaspartyl damage that it can detect or whether it has specific targets, [G[bioinformatic|bioinformatics]] analysis of the //E. coli// genome might reveal proteins which have a higher propensity for damage and thus are potentially more important targets of repair. In addition, we propose to [[monitor protein folding|Folding Reporter]] //in vivo// by fusing the α-fragment of β-galactosidase to target proteins; bioinformatics could identify a limited number of good candidates for PCM-mediated effects on folding. We have conducted this bioinformatic analysis in two ways:
!!Simple analysis of Asp/Asn content
To identify likely substrates for PCM-mediated repair, we developed a [G[PERL perl]] program to [G[mine|data_mining]] the //E. coli// genome, using the GenBank[R[Benson2007]] database, in order to discover proteins with a high percentage of Asp and Asn residues. We hypothesized that these would be among the proteins most likely to sustain isoAsp damage.
The mean value for combined Asp and Asn residues in the //E. coli// proteome is 8.9 per 100 total residues, or a fractional value of 0.089. Of the 4243 predicted protein sequences in the //E. coli// genome, the Asp/Asn content falls within one standard deviation of this mean value for 2957 protein sequences. The Asp/Asn content exceeds the mean by more than one standard deviation for 586 proteins, and only 105 proteins have Asp/Asn exceeding the mean by more than two standard deviations.
Starting with these 105 "high Asp/Asn" sequences, we refined the list for further consideration by excluding: (i) [G[pseudogenes|pseudogene]]; (ii) proteins with less than 100 amino acids (too small to have significant folded structure); and (iii) known and predicted inner- and outer-membrane proteins and periplasmic proteins (assuming that PCM functions in the cytoplasm). This left 13 proteins with known or hypothesized functions (+++(pCookie)^*{{slideme{[Table 1]}}}...<<tiddler [[Asp/Asn Bioinformatic Results##Table1]]>>===) and 35 uncharacterized proteins (+++(pCookie)^*{{slideme{[Table 2]}}}...<<tiddler [[Asp/Asn Bioinformatic Results##Table2]]>>===).
Interestingly, two of the proteins with putative functions (YibA and Imp) and four of the uncharacterized proteins (YddK, YjbL, YjbM and YoaB) have essential functions in //E. coli//[R[Gerdes2003]]. We propose to initially examine the effect of PCM on folding of the top five proteins in each of these categories.
We also took advantage of available proteomic data for chaperone substrates and other conformationally unstable proteins. One such study[R[Mogk1999]] has described 57 proteins that aggregate readily at elevated temperatures in the absence of disaggregating chaperons. We propose to examine folding of the seven of these that have an Asp/Asn content more than one standard deviation above the mean (+++(pCookie)^*{{slideme{[Table 3]}}}...<<tiddler [[Asp/Asn Bioinformatic Results##Table3]]>>===). None exceed the mean by more than two standard deviations. Among these proteins, GapA is essential for //E. coli// growth[R[Gerdes2003]].
!!Analysis based on amino-acid context
Ian Braun's [[senior thesis|data/isoAsp bioinformatics/Ian Braun thesis 2016.pdf]] documents the development of an algorithm for predicting susceptibility of proteins to isoAsp formation based on the amino acids flanking Asp and Asn. Ian "trained" his algorithm using specific Asp and Asn residues known to be isomerized (or not) //in vivo//. When Ian tested his program on the //E. coli// genome, several of the proteins predicted to have a high likelihood of isomerization were [g[adhesin]] proteins, stimulating development of the [[Adhesins]] project.
#Make up solutions A and B separately to 500 ml
#Autoclave separately for 20 minutes at 15 psi (time is important)
#Mix, cool to 50°C and add fusaric acid and ZnCl~~2~~
#Pour plates
#Fusaric acid can be replaced by 10 ml of 10 mg/ml quinaldic acid
Set up standard curve by pipetting 0, 10, 20, 30, 40 and 50 μl of a 1-mg/ml BSA standard|BSA protein standard (0-50 μg protein###Exact concentration of BSA standard should be determined spectrophotometrically###) into microcentrifuge tubes in duplicate
Add water to each standard to give a total volume of 50 μl in each tube
Transfer desired amount of unknown samples###For //E. coli// crude extracts, 5-10 μl of an extract made in 1/10 of the original culture volume will typically yield 20-50 μg of protein for an overnight culture; use about 3× this much for an exponentially growing culture### into microcentrifuge tubes in duplicate and add water to give 50 μl total
Add 1 ml of Bradford reagent###If the Bio-Rad reagent is used, it is diluted 1 part dye + 4 parts water before using; the standard Bio-Rad assay is 100 μl protein + 5 ml diluted dye.### to each tube and vortex
Incubate at room temperature for at least 5 min (no more than 60 min)
Read absorbance at 595 nm for each sample
!!Co-transduction frequency
Co-transduction frequency is related to physical distance by the Wu formula[r[Wu1966]]###For more on cotransduction and the Wu formula, see [[this page|http://www.sci.sdsu.edu/~smaloy/MicrobialGenetics/topics/phage/Wu.html]] from the Stan Malloy lab (though they have the cotransduction formula slightly wrong)###:
>d = L (1 - ^^3^^√C)
where
>d = distance between two markers (in minutes or kb)
>L = length of the transducing fragment (2 min or 90 kb for P1)
>C = cotransduction frequency (as a decimal - e.g., 10% cotransduction = 0.1)
Or, given distance:
>C = (1-^^d^^⁄~~L~~)^^3^^
To correct for the effect of insertions in one or both of the co-transduced genes, one can use this formula (from [r[Sanderson and Roth|Sanderson1988]]:
>1/C = 1 + [(L-a)^^3^^–(L-a-d)^^3^^/(L-a-b-d)^^3^^]
where
>a = length of insertion in selected marker
>b = length of insertion in unselected marker
!!Calculation of number of clones for a genomic library
The number of clones needed to have a certain probability (eg 95%) of including any particular sequence in a random human genomic library is:
>ln(1 - P) / ln(1-1/n)
where
>P = probability
>n = length of genome / length of average cloned fragment
Grow cultures to desired stage in 5 ml of medium, centrifuge to pellet cells
Resuspend cells in 0.5 ml of catalase assay buffer, chill on ice
Sonicate __gently__###HPI catalase is very heat-sensitive; to avoid destroying it, minimize sonication of extracts and keep extracts cold at all times.###, e.g. 4 rounds of 5 1-second pulses at 30% power
Centrifuge 10 min at 4°C in microcentrifuge to pellet debris
For total catalase, dilute an aliquot of extract to 1 ml with dH~~2~~O
For HPII catalase, heat an aliquot of extract to 55°C in a waterbath for 15 min (to inactivate HPI), then dilute to 1 ml with dH~~2~~O
Add 0.5 ml of 59 mM [[H2O2|H2O2 for catalase assay]] and immediately read absorbance at 240 nm; read every 15 seconds thereafter for 1 minute
Determine total protein concentration in extract using [[Lowry assay|Lowry protein assay]]
Add all ingredients and bring to volume with dH~~2~~O (7.54 ml). Prepare just before using; PMSF is not stable.
Grow 8 hours in LB, dilute 1:100 in M63 with thiamine and 0.4% glucose, grow overnight
Adjust OD to 2.5 by dilution with LB or M63B1
Transfer 3 ml to 5-ml tubes, incubate without shaking 24h at room temp
Measure OD~~600~~ of upper portion of each standing culture
%%Plasmid extraction (alkaline lysis method):
Grow 150 ml culture of cells overnight with aeration in LB with appropriate antibiotic
Centrifuge 10 min at 5000 × //g// to harvest cells
Resuspend quickly (one culture at a time) in 5 ml of GTE buffer containing 2 mg/ml lysozyme
Transfer to 50-ml centrifuge tubes and incubate 15 min at room temperature
Add 10 ml of 1% SDS in 0.2 N NaOH, mix thoroughly but gently by inversion and let stand 10 min on ice
Neutralize by adding 7.5 ml 3 M sodium acetate (pH 4.8) and mixing well; let stand 10 min on ice
Centrifuge 10 min at 10,000 × //g// at 4°C
Transfer supernatant to clean tube and add 12.5 ml cold isopropanol to precipitate plasmid DNA
Centrifuge 10 min at 10,000 & times; //g// at 4°C to pellet plasmid DNA
Resuspend in 5 ml of 1 part 3 M NaOAc (pH 4.8) : 30 parts 50 mM Tris pH 7.9
Reprecipitate with 15 ml ice-cold 95% ethanol, centrifuge 10 min at 10,000 × //g// at 4°C
Wash with 10 ml ice-cold 70% ethanol, centrifuge 10 min at 10,000 × //g// at 4°C
Dry pellet in dessicator jar under vacuum
%%CsCl purification:
Redissolve DNA in approximately 3.5 ml of 10:1 mM Tris-EDTA and adjust final volume to __exactly__ 4 ml
Add __exactly__ 4.1 g CsCl
Add 0.3 ml of 10 mg/ml ethidium bromide###Caution! Ethidium bromide is a potent mutagen; handle carefully with gloves.###
Centrifuge 10 min at 10,000 × //g// at 4°C to remove any debris
Fill VTI65 rotor tubes with supernatant and weigh to get volumes equal (within 0.01 g); heat-seal and weigh again
Centrifuge at 45,000 × //g// and 15 °C for 8 hours to overnight
Pellet will be on the outside wall of the tube (gradient //across// the tube); move carefully, as pellet tends to slide and disrupt gradient
In the dark, use UV lamp to visualize DNA bands; two bands should be visible near the center of tube: linear DNA (top) and closed circular DNA (bottom)
Puncture the tip of the tube with a hypodermic needle as a vent
Pull closed circular DNA band with a syringe and hypodermic needle, slowly eject into large screw-cap test tube (avoid shear)
Add water-equilibrated butanol to fill tube, invert slowly to mix, then allow phases to separate
Butanol will extract the ethidium bromide and turn bright pink; remove DNA layer to clean tube
Repeat butanol extraction 3×, check with UV lamp to be sure all ethidium bromide is removed
Dialyze against three changes of 4 l 10:1 mM [[Tris-EDTA]], pH 7.9; dry down after second dialysis to reduce volume
In many cases, chemical chaperones can reduce protein aggregation //in vitro// when added to the culture media. If our hypothesis that PCM is critical for maintenance of protein folding is correct, then we would expect that chemical chaperones that improve protein folding would also reduce the survival defect of Δ//pcm// mutants. This question could be investigated by first growing cells into stationary phase with and without stress in the presence and absence of some chemical chaperones and using the [[aggregated protein assay|Aggregated protein assay]] to determine which chaperones, if any, reduce aggregated or aggregatable protein under our conditions. Then, those chaperones could be tested in the [[long-term survival assay|Long-term survival assay]] to see if they "rescue" mutant bacteria from their decreased survival phenotypes. Chemical chaperones include trehalose betaine, potassium glutamate, proline.
Electroporate the desired //str//^^R^^ host strain with pKAS32 or pKAS46 containing the gene of interest
Plate transformants on LB agar containing 50 μg/ml ampicillin (//or// 50 μg/ml kanamycin, if pKAS46 is used)
Restreak several transformant colonies for isolation on LB agar lacking antibiotics
Restreak two or three colonies from each streak for isolation, again on LB agar lacking antibiotics
Restreak one colony from each streak on LB agar containing 1 mg/ml streptomycin
Choose the colonies that grew best on streptomycin and restreak one more time on streptomycin
Choose colonies from each streak that grow well and patch on LB, LB + streptomycin, LB + ampicillin and LB + kanamycin
Choose colonies that are clearly Str^^R^^, Ap^^S^^ and Km^^S^^ and test for the desired chromosomal insert by PCR
#Add citric acid (not sodium citrate) to 95 ml dH~~2~~O
#Bring pH to 5.5 with 10 N NaOH
#Bring to final volume with dH~~2~~O
#Autoclave
Label a 0.5-ml microcentrifuge tube for each colony and add 20 μl of sterile PCR-clean water to each
Label a 1.5-ml microcentrifuge tube for each colony and add 200 μl of sterile LB to each; this will become your source for growing the colonies that carry the correct DNA
Touch a toothpick to each desired colony###An amount of bacteria too small too see will be sufficient for PCR###
Swirl the toothpick in the corresponding tube of water###The water should become slightly turbid### and then break it off into the corresponding tube of LB broth
Vortex the tubes of water for a few seconds and then set them aside the PCR reaction is being set up###Optionally, these can be set up in PCR tubes and heated in the thermal cycler for 10 min at 95°C to increase lysis, but this step usually is not necessary to get good results###
Label a 0.2-ml thin-wall microcentrifuge tube for each colony and add, in this order:
**Enough sterile PCR-clean water for a final volume of 25 μl
**PCR buffer
**dNTPs
**primers
**1 μl of the appropriate colony suspension
**//Taq// polymerase
Program the thermal cycler for 30 cycles with the appropriate annealing and extension times and temperatures; ensure that before the first cycle there is a 95°C step of at least 5 to as much as 10 minutes
Carry out cycling and analysis by gel electrophoresis as usual
Start a 5-ml overnight culture of the desired strain in LB broth
Dilute 1:100 in 500 ml of LB broth in a 1-liter (or larger) flask and grow with aeration at 37°C to OD~~600~~ = 0.3###Competence may be increased by growing cells at 30 °C or lower; one approach is to directly inoculate a 500-ml culture and grow overnight at room temperature to OD~~600~~ = 0.3###
Transfer cells to 250-ml centrifuge bottles pre-chilled on ice and chill 30 min
Centrifuge 15 min at 2000 × //g//
Resuspend __gently__ in 200 ml ice-cold 0.1 M CaCl~~2~~ and let stand 20 min on ice
Centrifuge 15 min at 2000 × //g//
Resuspend __gently__ in 5 ml ice-cold 0.1 M CaCl~~2~~
%%To use fresh, add plasmid to a 200-μl aliquot of cells and proceed with [[transformation|Transformation of E. coli]]
%%To freeze:
Keep on ice (e.g., in ice bucket in 4°C refrigerator) for 24 hours###Overnight incubation on ice increases efficiency at least 4×###
Measure volume of cells and __slowly__ add ice-cold sterile 75% glycerol to a final concentration of 10%###Glycerol produces heat when dissolving in water! Add slowly to avoid warming cells significantly.###
Transfer 200-μl aliquots to microcentrifuge tubes, freeze in dry ice-ethanol and store at −80°C
Grow a 5-ml overnight culture of the desired recipient strain in salt-free LB broth.
Dilute 1:100 in 250 ml of salt-free LB broth in a 1-liter flask
Grow with aeration to OD~~600~~ = 0.5 to 0.7###Best results are obtained with early- to mid-log phase cells###
Pour into pre-chilled, sterile 250-ml centrifuge bottle and chill in ice-water bath for 45 min; //keep cells as close to 0°C as possible throughout the procedure//
Pre-chill centrifuge and rotor to 2°C
Centrifuge 5 min. at 4000 × //g// and 2°C and remove supernatant //completely// (even if a few cells are sacrificed)
Resuspend gently but completely in 250 ml ice-cold sterile dH~~2~~O //by swirling bottle in ice-water bath// (this typically takes at least 15 minutes)
Once resuspended, let stand in ice-water bath 10 min more
Centrifuge 5 min. at 4000 × //g// and 2°C
Resuspend gently but completely in 500 μl ice-cold sterile 1 mM HEPES with 10% glycerol by swirling in ice-water bath and/or gently swirling with a pre-chilled pipette tip###Final volume will probably be 1-1.5 ml###
Transfer 50-μl aliquots to microcentrifuge tubes in a dry-ice or liquid-nitrogen bath###It's important that the cells freeze immediately: if dry ice or liquid nitrogen is not available, pre-chill the microcentrifuge tubes in the -80°C freezer and then quickly aliquot the cells###
Store frozen aliquots at −80°C; frozen competent cells are stable for six months or more
Add 4 μl of 50% sucrose to 36 μl of protein sample in a microcentrifuge tube###The __maximum__ volume that can be concentrated in a microcentrifuge tube is 36 μl, so for larger volumes, samples must be split or larger tubes used### and mix well
Fill the microcentrifuge tube with acetone (or, for other tubes, add 37.5 volumes of acetone) and mix thoroughly
Let stand 15 min on ice
Spin 15 min at full speed in microcentrifuge (or 10,000 × //g// for larger samples)
Remove supernatant###After centrifugation, pellet should be very firm, so acetone can be wrist-flicked off thoroughly### and dry 10 minutes in dessicator jar under vacuum###Avoid overdrying###
Redissolve###If salt concentration is high, pellet might be hard to redissolve; heating may help, or micro-dialysis may be necessary### in desired amount###Final concentration of sucrose must be at least 10% to use subsequently in SDS-PAGE### of 2× SDS-PAGE sample buffer made __without glycerol__
Boil 5 minutes and use for SDS-PAGE as usual
After running gel, clip the lower left corner (to aid in orientation) and place on a Kimwipe in a staining tray or dish###Coomassie blue is difficult to remove from plastic, so dedicating a plastic tray to Coomassie staining is a good idea. Glass staining dishes can be cleaned with a solvent###
Cover with another Kimwipe, add enough Coomassie blue solution to cover and stain at 37°C for 30-60 min (or overnight at room temperature)
Destain with 10% acetic acid for 3 hours at 65°C to overnight (until desired degree of destaining is reached), changing solution at least twice###For more rapid destaining, add 25% isopropanol to the destaining solution###
Rinse with dH~~2~~O and photograph
Gel can be stored indefinitely in water or dried for preservation
/***
|Name|CopyTiddlerPlugin|
|Source|http://www.TiddlyTools.com/#CopyTiddlerPlugin|
|Version|3.2.6|
|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
<<<
2010.11.30 3.2.6 use story.getTiddler()
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
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.
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
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: 6, date: new Date(2010,11,30)};
// 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)||story.getTiddler(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=story.getTiddler(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||'');
}
};
//}}}
Text icon created by xwoodhillx for the Noun Project
Recipe icon created by Erickson Duverge for the Noun Project
Print icon created by Beth Bolton for the Noun Project
#Measure glycerol carefully, as it is viscous
#Mix all components thoroughly
#Store in 0.5-ml aliquots at 4°C
#Add Ficoll, Tris and EDTA to a small beaker
#Add dH~~2~~O to about 40-45 ml, heat to 65°C to dissolve Ficoll completely
#Bring to final volume of 50 ml with dH~~2~~O
#Transfer to bottle, add dyes and dissolve completely
#Store at room temperature
#For use, add RNAse to a small volume (e.g., 5 ml), aliquot into individual microcentrifuge tubes and store at -20°C
| Invitrogen<br>1-kb ladder | Invitrogen<br>1-kb Plus ladder | Amresco EZ-Vision<br>1-kb ladder | Amresco EZ-Vision<br>100-bp ladder | NEB 100-bp<br>ladder |h
| [image auto auto[images/text/1kb.png][https://assets.thermofisher.com/TFS-Assets/LSG/manuals/15615024.pdf]] |[image auto auto[images/text/1kbplus.png][https://assets.thermofisher.com/TFS-Assets/LSG/manuals/1Kb_Plus_DNA_ladder_man.pdf]]| [image auto auto[images/text/Amresco1kb.jpg]] | [image auto auto[images/text/Amresco100bp.jpg]] | [image auto auto[images/text/NEB100bp.jpg]] |
#Dissolve DNPH and potassium phosphate in guanidine HCl
#Adjust final pH to approx. 2.5
#Store in a foil-wrapped tube, keep in dark at 4 °C and use within 1-2 weeks
Alternative recipe for 2 mg/ml DNPH:
#Carefully prepare 2N HCl by diluting 1.65 ml of HCl to 10 ml in a 50-ml disposable centrifuge tube
#Dissolve 20 mg DNPH completely by inversion
/***
|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);
};
//}}}
Grow desired //E. coli// strains overnight in appropriate medium; OD~~600~~ should be approximately 1.5###If comparison of protein amounts between strains is desired, OD~~600~~ of the strains should be equalized before making extracts; dilute to below 1.0 for accurate measurement, then calculate amounts of undiluted to use###
Spin down a 1.5-ml aliquot of each culture for 1 min in microcentrifuge and remove suprernatant
Resuspend thoroughly in 30 μl of 10:1 mM TE
Add 30 μl of 2× SDS-PAGE sample buffer and boil 4 min
Sonicate 15 sec
To better denature resistant proteins, add 60 μl of urea buffer and boil 2 additional min if desired
Spin 1 min in microcentrifuge immediately before loading gel###Approximately 5-20 μl of extract should be loaded on gel, depending on abundance of protein(s) of interest### to pellet debris
May be stored at −20°C
*[[Coli Genetic Stock Center|https://cgsc2.biology.yale.edu/index.php]] (CGSC): maintains and distributes a large collection of //E. coli// strains with various chromosomal mutations, including the Keio Collection and a YFP fusion library
#Add both EDTA and NaOH to about 90% of final volume of dH~~2~~O
#Stir to dissolve
#Adjust pH to 7.5 if needed
#Bring to final volume
#Autoclave
<!--{{{-->
<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>
<!--}}}-->
[>image[Survival of //pcm// mutants in stationary phase|images/text/pcm_nostress.jpg]]
''PCM and survival''. In long-term stationary phase, isoaspartyl damage accumulates over time. One might imagine that PCM-deficient bacteria would show impaired survival, as more and more proteins become damaged. As shown at right, however, this is __not__ the case: mutants in which the //pcm// gene has been deleted (blue line) survive just as well as wild-type (unmutated) cells (black line).[R[Visick1998]] In contrast, the green line in the figure shows the drastic effect of mutating //rpoS//, a gene known to be important in stationary-phase survival.
''PCM and stress''. However, PCM is important in long-term stationary phase survival if the bacteria are __also__ subjected to an environmental stress: oxidative stress (using paraquat as a source of reactive oxygen species), osmotic stress (high salt), methanol or repeated heat stress (1-2 hrs/day at 42°C). The //pcm// mutant survives less well under these stressful conditions than its wild-type counterpart.[R[Visick1998]] Survival curves for methanol and paraquat are shown below. The black line shows survival for wild-type cells, the blue line is the pcm mutant, and the red line is the mutant complemented with a functional //pcm// gene. Open circles show the survival of unstressed cells.
[image[Stationary-phase survival of //pcm// mutants exposed to methanol (left) or paraquat (oxidative) stress (right)|images/text/pcm_stress.jpg]]
''PCM and competition''. Even in the absence of stress, PCM-deficient mutants compete poorly with their wild-type counterparts during long-term stationary phase. When wild-type cells are aged for 10 days, mutations are selected that allow these cells to out-compete "young" cells—even when the aged cells are greatly outnumbered. This is called the GASP (growth advantage in stationary phase) phenotype.[R[Zambrano1996]] Aged cells in which //pcm// is deleted can occasionally "win" in the competition, but usually either fail to compete effectively or are out-competed by young wild-type cells. This suggests that isoaspartyl accumulation creates problems even for unstressed cells, but that the effect may be too subtle to measure by the survival assay shown above.
[>image[Survival of //pcm// mutants in minimal medium buffered to pH 7|images/text/pcm_ph.jpg]]
''PCM and pH''. Interestingly, the stress phenotypes described above are observed only when cells are grown in a rich medium, such as LB broth. As shown at right, //pcm// mutants show no survival defect when grown under stress in minimal medium buffered to pH7.[R[Visick1998]] We hypothesized that the survival defects occur when growth on amino acids raises the pH of the growth medium and increases the rate of isoAsp formation. Survival testing in media buffered to specific pHs indicates that this is the case: //pcm// mutants survive poorly during long-term stationary phase when exposed to both high pH and a denaturing stress, even in minimal medium. Two North Central undergraduates published these results in the journal [[Microbiology|http://mic.sgmjournals.org/cgi/reprint/151/7/2151]] in 2005.[R[Hicks2005]]
''PCM and persisters''. [G[Persisters]] are sub-populations found in any bacterial culture that are tolerant of antibiotics. We found that a //pcm// mutant produced persisters for a longer period during stationary phase than wild-type //E. coli//, and that the persister fraction increased dramatically when a //pcm// mutation and a a mutation in //glpD// were combined. While we do not yet know the mechanism behind this observation, we found that the high-persister strain had increased fitness in competition with wild-type cells (below). We hypothesize that persister formation may be triggered as a response to unrepaired protein damage. Two North Central undergraduates published this work in the journal [[Applied & Environmental Microbiology|http://aem.asm.org/content/82/17/5444.abstract]] in 2016.[R[VandenBerg2016]]
[image[Competitive fitness of a //pcm// mutant (left), which is easily out-competed by wild-type in long-term stationary phase, vs. a high-persister //pcm glpD// strain, which competes almost as well as wild-type.|images/text/persistercomp.png]]
#Add HEPES to about 80% of the final volume of dH~~2~~O.
#pH to 7.2 with NaOH; raising pH is also needed for solubility of HEPES
#Add glycerol and mix well
#Bring to final volume with dH~~2~~O and autoclave.
Store at 4 °C for use in making electrocompetent cells; place on ice before use.
Place an aliquot of frozen, electrocompetent cells on ice###Cells ''must remain cold'' until the pulse is delivered!### to thaw. Also place the cuvette and the electroporation slide on ice.
If transforming a ligation, heat-inactivate ligase 10 min at 65 °C###transformation efficiency can be increased up to 250× by heat inactivation of ligase###
Add 1 to 2 μl of the DNA###DNA must be in a low ionic strength buffer such as TE### to the 40-μl cell aliquot, mix gently but well with pipette tip, and let stand on ice for 1 minute
Turn on the electroporator and make sure the leads from the shocking chamber are connected to the output jacks (see [[MicroPulser electroporator instruction manual|docs/MicroPulser.pdf]])
Set the electroporator to ''Ec1'' for 0.1-cm cuvettes or ''Ec2'' for 0.2-cm cuvettes (change setting with the raise and lower buttons)
Transfer the cell/DNA mixture to the cold electroporation cuvette and tap the suspension all the way to the bottom, looking from the side to be sure there are no air bubbles, and return to ice for one additional minute
Quickly wipe any moisture from the cuvette, place the cuvette in the slide and seat it between the contacts in the shocking chamber
Press the ''Pulse'' button once and wait for the tone
Immediately###Speed of resuspending the cells is critical; transformation frequency is reduced if this process takes more than 30 sec.### add 1 ml of SOC medium to the cuvette and resuspend the cells quickly but gently with a thin, sterile disposable Pasteur pipette.
Transfer the suspension to a culture tube and incubate with aeration at 37°C for 1 hour
Record the actual voltage and time constant###The time constant for the pulse should be close to 5 ms; if "Arc" is displayed, sample resistance may have been too low (e.g., too much salt), or cuvette may not have been clean enough###
Plate desired volume (typically 100 μl) on selective medium
Clean the cuvette thoroughly: add 10% bleach to the cuvette, wait 5 minutes, then rinse 10× with dH~~2~~O, 3× with 95% ethanol and 3× more with dH~~2~~O
Make fresh just before use. Discard unused portion###Small amounts of ethyl acetate may be flushed down the sink with plenty of water. For larger amounts, consult the chemical safety officer###, do not store.
Should be made fresh for use in media.
%%General information about the microscope
Use power strip to turn everything on or off
Phase-contrast objectives are 10×, 60×, and 100×
Oil-immersion objectives are 60× and 100×; wipe with 100% ethanol or lens cleaner to remove oil
Objectives are designed to work with no. 1.5 cover glasses
Ring at camera mount switches between camera and eyepiece
%%For brightfield or phase image
''DIA''scopic setting gives transmitted light from above
Aperture stop (iris diaphragm) is not needed for phase
Use PH1 (10×) or PH3 (60× or 100×) position on turret under condenser for phase, or brightfield position for brightfield###Can get a false darkfield effect by using the PH3 setting with the 4× or 10× objective###
Set filter cube to any position other than #1
Select {{{eyes}}} on slider (where camera joins microscope) and click live image ({{{play}}}) to find sample by eye###"Active shutter" requires software to be in live-image mode even when using the eyepieces###
Click {{{easy capture}}} tab
Adjust light to desired intensity
Use {{{capture and store}}} to set storage location, file type, base name, scale bar, etc.
Click camera button to capture image
%%For fluorescence
Switch off light source with ''EPI'' setting
Set filter cube to position #1
Select {{{eyes}}} on slider (where camera joins microscope) and click live image ({{{play}}}) to find sample by eye###"Active shutter" requires software to be in live-image mode even when using the eyepieces###
Click {{{easy capture}}} tab
Use appropriate button to set GFP, DAPI, cya or DxRed channel
Use {{{capture and store}}} to set storage location, file type, base name, scale bar, etc.
Click camera button to capture image
%%Image analysis
Can login using the "A" icon to go directly to analysis without the 'scope
Click the {{{analysis}}} tab
Using the {{{annotation and measurement}}} tab, add arrows and labels, use {{{length}}} tools to measure lengths, {{{area}}} tools to measure area (right-click to draw with the tool); can choose a shape for basic autodetect
Using the {{{object count}}} tab, adjust LUT to select based on brightness, get a table of objects which can be clicked to highlight or right-clicked to delete; select from list of measurements (mean intensity, area, etc.) for table
An increasing body of indirect evidence (see [[Results]]) supports connections between PCM-mediated protein repair and protein folding. So far, however, studies that have directly examined protein folding have been limited to //in vitro// folding assays (e.g., of ribonuclease A[R[DiDonato1993]]), crystallographic studies[R[Capasso1996]] or effects on foreign proteins expressed in //E. coli//[R[Kern2005,Wang2006,Zhu2006]]. Taking advantage of the availability of genomic and proteomic information as well as a previously described //in vivo// folding reporter, we propose a novel experimental approach which will allow us to begin accumulating information about the folding of natural substrates for PCM-mediated repair //in vivo//.
We propose to monitor folding by fusing the small [G[α-fragment|a_fragment]] of [G[β-galactosidase|b_galactosidase]] to the C-terminus of a target protein. In an //E. coli// strain expressing the ω-fragment of the protein, the two proteins can interact ("[G[structural complementation]]"), producing active β-galactosidase so long as the target protein is properly folded and soluble (see figure below). If it becomes unfolded or misfolded, its solubility and thus the level of β-galactosidase activity will be reduced[R[Stidham2003]]. This system has been used successfully to investigate the stability of a variety of proteins in //E. coli//.[R[Wigley2001]].
[image[Structural complementation to produce active β-galactosidase|images/text/bgal.png]]
For our purposes, the α-fragment fusion has three key advantages: (i) β-galactosidase is easily [G[assayed|b_gal_assay]] both qualitatively and quantitatively; (ii) the fusion peptide is relatively small (54 amino acids) and thus unlikely to grossly alter protein folding; and (iii) unlike a [G[GFP]] or [G[CAT]] reporter, it is sensitive not only to early folding events but also to post-translational aggregation.[R[Stidham2003]] That is, if a fusion protein is initially properly folded, the &alpha- and &omega-fragments will interact to give &beta-galactosidase activity, but if the target protein //later// unfolds and aggregates, activity will be reduced. This post-translational aggregation of the target protein is exactly the phenomenon we expect to observe if proteins in aging cells unfold over time due to the consequences of unrepaired isoAsp damage.
We have used a bioinformatic approach to mine the //E. coli// genome (see [[Results]]) and have identified a number of specific proteins with high concentrations of Asp and Asn residues that we believe are good candidates for PCM-mediated effects on folding. We propose to begin elucidating the effect of PCM on folding of //in vivo// substrates by making β-galactosidase reporter fusions to the +++(pCookie)^*{{slideme{[proteins with known or hypothesized functions]}}}...<<tiddler [[Asp/Asn Bioinformatic Results##Table1]]>>=== that have the highest Asp/Asn content, +++(pCookie)^*{{slideme{[uncharacterized proteins]}}}...<<tiddler [[Asp/Asn Bioinformatic Results##Table2]]>>=== with the highest Asp/Asn content, and +++(pCookie)^*{{slideme{[additional high Asp/Asn proteins]}}}...<<tiddler [[Asp/Asn Bioinformatic Results##Table3]]>>=== characterized in proteomic studies as prone to unfolding and aggregation. We will also test ribosomal protein S11, the sole specific //E. coli// protein identified to date as an //in vivo// substrate for PCM[r[David1999]].
!!Research plan
The general steps to make and test a folding reporter are:
#Construct an appropriate folding reporter plasmid
#Amplify a gene of interest (see the [[project overview|Folding Reporter]]) by PCR
#Insert the gene of interest into the reporter plasmid so that it is transcribed from the promoter on the plasmid and fused to the //lacZ//α sequence
#Integrate the reporter construct into the chromosome of strains based on JV1120 (wild-type) and JV1121 (Δ//pcm//) [[modified|lacZ strain construction]] to carry the //lacZ//ω but not α region
#Test initially for β-galactosidase production on x-gal plates
#If there appears to be some potential for difference between PCM+ and PCM− strains, design further experiments to test loss of folding over time, effect of denaturing stresses, etc.
!!Construction of a folding reporter plasmid
To date, we have assembled a DNA fragment (see [[sequence details|Integration vector and folding reporter construction]]) containing:
*DNA flanking the Tn7 chromosomal integration site (between //oriC// and //glmS// at 82 min on the //E. coli// chromosome
*the β-lactamase promoter
*a //Not//I site for cloning the PCR-amplified gene of interest
*the //lacZ//α fragment
[image 500px[the folding reporter insert|images/text/foldingreporterinsert.png]]
This fragment now needs to be inserted into pKAS46, which contains a streptomycin-sensitivity gene (used to verify chromosomal integration) and an kanamycin-resistance gene:
[image 250px[map of plasmids pKAS32 and pKAS46|images/plasmids/pKAS32 and pKAS46 maps.png]]
Cloning scheme:
#Grow cells containing pKAS46 and purify plasmid DNA
#Digest pKAS32 vector with //Not//I and //Kpn//I
#Blunt the ends of the DNA with the [[NEB Quick Blunting Kit|https://www.neb.com/protocols/0001/01/01/blunting-protocol-e1202]]
#Use phosphatase to dephosphorylate the ends to reduce the ability of the vector to self-religate
#Ligate the insert to the plasmid DNA with the [[NEB Quick Ligation Kit|https://www.neb.com/protocols/0001/01/01/quick-ligation-protocol]]
#Transform into strain GT115 (carries a gene for the //pir// protein required for the replication of this plasmid; plate on LB agar with 50 μg/ml kanamycin
#Do colony PCR on several colonies with Tn7 internal primers to identify one that appears to carry the correct plasmid
#Mini-prep DNA from a positive colony and use restriction mapping to verify that the correct insert is present
[image 500px[the completed folding reporter plasmid|images/text/foldingreporterplasmid.png]]
!!PCR amplification of a gene of interest
*Choose a gene of interest and design PCR primers to amplify it
*Both primers should contain //Eag//I or //Psp//OMI sites (ensure that the gene of interest does not contain one; cloning could be done with //Not//I but would be more difficult)
*The left primer needs to be carefully designed to place the gene in-frame with the start codon on the plasmid, which is positioned with a Shine-Dalgarno sequence for expression when the //bla// promoter is used
*The right primer needs to be carefully designed to place the gene in-frame with the //lacZ//α sequence
*Amplify the gene from the chromosome of strain MG1655
*Digest the PCR product with //Eag//I or //Psp//OMI
*Purify DNA for the folding reporter plasmid and digest it with //Not//I
*Ligate the gene to the vector
*Digest the ligation mix with //Not//I, which will only cut if the insert was __not__ ligated to the vector
*Transform into strain GT115 pr CC118λ and screen for colonies with the correct insert
[image 500px[cloning the gene of interest into the completed folding reporter plasmid|images/text/foldingreporterclone.png]]
!!Integration of the reporter construct into the chromosome
Now, the completed reporter construct needs to be integrated into the chromosome of strains JV1120 (PCM+) and JV1121 (PCM−). The pKAS32 plasmid will not replicate in these strains due to the absence of the //pir// protein, so after transformation, the strains will be Ap^^R^^ only if integration into the chromosome has occurred. Follow the [[integration procedure|Chromosomal Integration with pKAS32 or pKAS46]] to obtain a chromosomal insertion and then to ensure that the vector portion has recombined out, leaving only the reporter construct integrated at the Tn7 site. Finally, the strains are ready to test for β-galactosidase production!
[image 500px[the folding reporter recombining into the chromosome|images/text/foldingreporterrecombination.png]]
!!PCR primers
| name | primer 1 | primer 2 | length<br>amplified | region<br>amplified | use |h
|Tn7internal|TAGACGTCAGGTGGCACTTT|TCCACCGGATCAGCTTAGTA|185bp (integration)<br>351bp (reporter)|//bla// to omega|find correct clones|
|Tn7external|TGCAAACACAGAGAAAGCACT|CTTACCATGTCGCGCTGATC|465bp (chromosome)<br>842bp (integration)<br>1008bp (reporter)|Tn7L to Tn7R|verify chromosomal insertion|
/***
|''Name:''|FootnotePlugin|
|''Description:''|Create automated tiddler footnotes|
|''Source:''|Modified from [[FootnotesPlugin|http://tiddlywiki.squize.org]] by Saq Imtiaz|
!!Usage:
*To create a footnote, enclose it ###: ###This is footnote text###.
*Footnotes are numbered automatically and listed at the bottom of the tiddler.
***/
// /%
config.footnotesPlugin = {
prompt:"show footnote"
};
config.formatters.push({
name: "footnotes",
match: "[#]{3}",
lookaheadRegExp: /[#]{3}(.+?)[#]{3}/g,
handler: function(w) {
this.lookaheadRegExp.lastIndex = w.matchStart;
var lookaheadMatch = this.lookaheadRegExp.exec(w.source);
if(lookaheadMatch && lookaheadMatch.index == w.matchStart ) {
var tid = story.findContainingTiddler(w.output);
if ( tid == null ) { tid = story.findContainingTiddler(place); }
if ( !tid.notes ) { tid.notes = []; }
var title = tid.getAttribute("tiddler");
tid.notes.push(lookaheadMatch[1]);
var pos = tid.notes.length;
createTiddlyButton(w.output,pos,config.footnotesPlugin.prompt,function() {
document.getElementById(title+"Footnotes").scrollIntoView();
return false;
},
"ftnlink",title+"Footnote"+pos);
w.nextMatch = lookaheadMatch.index + lookaheadMatch[0].length;
}
}
});
old_footnotes_refreshTiddler = Story.prototype.refreshTiddler;
Story.prototype.refreshTiddler = function(title,template,force) {
var tid = old_footnotes_refreshTiddler.apply(this,arguments);
if ( tid.notes && tid.notes.length ) {
var title = tid.getAttribute("tiddler");
var tidId = "tiddler" + title.replace(/\s/g,"_")
var viewers = jQuery(".viewer");
for ( var i=0; i<viewers.length; i++ ) {
if ( viewers[i].parentNode.parentNode.id == tidId ) { var gotcha = viewers[i]; break; }
}
var footDiv = createTiddlyElement(gotcha,"div",null,"footnoteholder","");
var footList = createTiddlyElement(footDiv,"ol",title+"Footnotes","ftnlist",null);
for ( var i=0; i<tid.notes.length; i++ ) {
var ftn = createTiddlyElement(footList,"li",title+"Note"+(i+1),"footnote",null);
wikify(tid.notes[i],ftn);
}
tid.notes = [];
}
return false;
}
// %/
// // Enhanced image, with sizing and caption and lightbox button
// // Syntax: {{{[float(<,>) image width height[caption|source][link]]}}}
//{{{
config.formatters.push({
name: "imagecap",
match: "\\[[<>]?[Ii][Mm][Aa][Gg][Ee].*?\\[",
lookaheadRegExp: /\[([<]?)([>]?)[Ii][Mm][Aa][Gg][Ee](\s.+?)?(\s.+?)?\[(?:([^\|\]]+)\|)?([^\[\]\|]+)\](?:\[([^\]]*)\])?\]/mg,
handler: function(w) {
this.lookaheadRegExp.lastIndex = w.matchStart;
var lookaheadMatch = this.lookaheadRegExp.exec(w.source);
if(lookaheadMatch && lookaheadMatch.index == w.matchStart) {
if(lookaheadMatch[7]) {
var link = lookaheadMatch[7];
e = config.formatterHelpers.isExternalLink(link)
? createExternalLink(w.output,link)
: createTiddlyLink(w.output,link,false,null,w.isStatic,w.tiddler);
jQuery(e).addClass("imageLink");
}
e = createTiddlyElement(w.output,"div",null,"imgdiv",null);
e.style.visibility = "hidden";
img = createTiddlyElement(e,"img");
if ( lookaheadMatch[3] || lookaheadMatch[4] ) { var enlargeable = true; } else { var enlargeable = false; }
if (lookaheadMatch[5]) { var caption = lookaheadMatch[5]; }
else if ( enlargeable) { var caption = "(click to enlarge)"; }
if ( caption || enlargeable ) {
var cap = createTiddlyElement(e,"p",null,"imgcap",null);
if ( caption ) { wikify(caption,cap); }
if ( enlargeable ) {
var lb = createTiddlyButton(cap,null,"See image full size",function(e){enlargeImage(this.image);},"imageButton",null);
lb.image = lookaheadMatch[6];
var lbi = createTiddlyElement(lb,"img");
lbi.src = "images/icons/enlarge.svg";
}
}
if(lookaheadMatch[1]) { e.className += " imgleft" }
else if(lookaheadMatch[2]) { e.className += " imgright" }
img.src = lookaheadMatch[6];
img.onload = function(){
var width = img.width + "px";
this.parentElement.style.width = width;
};
if ( lookaheadMatch[3] ) {
width = lookaheadMatch[3];
if ( width != "auto" && width.match(/[0-9]$/) !== null ) { width += "px"; }
img.style.width = width;
e.style.width = width;
if ( lookaheadMatch[4] ) {
var height = lookaheadMatch[4];
if ( height != "auto" && height.match(/[0-9]$/) !== null ) { height += "px"; }
img.style.height = height;
}
}
e.style.visibility = "visible";
w.nextMatch = this.lookaheadRegExp.lastIndex;
}
}
});
// function ''enlargeImage(image)'' to show lightbox when button clicked
function enlargeImage(image) {
jQuery("#lightbox").remove();
var content = document.getElementById("contentWrapper");
var lightbox = createTiddlyElement(null,"div","lightbox","lightbox",null);
lightbox.onclick = function(e){jQuery("#lightbox").remove();};
var close = createTiddlyButton(lightbox,"close","Close this image",function(e){jQuery("#lightbox").remove();},"lightboxClose",null);
var img = createTiddlyElement(lightbox,"img",null,"lightboximg",null);
img.src = image;
content.insertBefore(lightbox, content.firstChild);
return false;
}
//}}}
// // e-mail link formatter
// // syntax: {{{[e[text (optional)|e-mail address]]}}}
//{{{
config.formatters.push({
name:"email",
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 mailContent = eMatch[1].split("|");
var mailSource = mailContent[1] || mailContent[0];
var mailParams = [mailSource,mailContent[0]];
var eCreate=config.macros.mailGen.handler(place,"mailGen",mailParams,w);
w.nextMatch=eMatch.index+eMatch[0].length;
}
}
});
config.macros.mailGen = {
handler: function(place,macroName,params,w) {
var mailSource = params[0];
var mailText = params[1];
var maillink = createTiddlyElement(w.output,"a",null,"email",mailText);
maillink.href = mailSource;
}
};
//}}}
// // formula (recipe) link formatter
// // syntax: {{{[f[text (optional)|recipe tiddler name]]}}}
//{{{
config.formatters.push({
name:"recipe",
img:"images/icons/recipe.svg",
match:"\\[[Ff]\\[",
lookaheadRegExp:/\[[Ff]\[(.+?)\]\]/g,
handler:function(w) {
this.lookaheadRegExp.lastIndex=w.matchStart;
var eMatch=this.lookaheadRegExp.exec(w.source);
if(eMatch && eMatch.index==w.matchStart) {
var recipeContent = eMatch[1].split("|");
var recipeText = recipeContent[0];
var recipeSource = recipeContent[1] || recipeText;
if ( !store.tiddlerExists(recipeSource) ) {
wikify(recipeText,w.output);
var missing = createTiddlyElement(w.output,"img",null,"missingModal",null);
missing.src = this.img;
}
else {
var disp = store.getValue(recipeSource,"displaytitle")
if ( recipeContent.length == 1 && disp ) { recipeText = disp; }
var id = recipeSource.replace(/\s/g,"");
var tip = "click to open " + recipeSource;
var par = ["link",id,recipeText,tip,recipeSource,recipeText,this.img,"recipeViewTemplate"];
config.macros.modalBox.handler(w.output,"modalBox",par);
}
w.nextMatch=eMatch.index+eMatch[0].length;
}
}
});
//}}}
// // formatter to open linked tiddler in a modal box
// // syntax: {{{[m[text (optional)|tiddler]]}}}
//{{{
config.formatters.push({
name:"modal",
match:"\\[[Mm]\\[",
lookaheadRegExp:/\[[Mm]\[(.+?)\]\]/g,
handler:function(w) {
this.lookaheadRegExp.lastIndex=w.matchStart;
var eMatch=this.lookaheadRegExp.exec(w.source);
if(eMatch && eMatch.index==w.matchStart) {
var modalContent = eMatch[1].split("|");
var modalText = modalContent[0];
var modalSource = modalContent[1] || modalText;
if ( !store.tiddlerExists(modalSource) ) {
wikify(modalText,w.output);
}
else {
var tip = "click to open " + modalSource;
var count = jQuery('.modalBox').length
var id = "modal" + (count+1);
var par = ["link",id,modalText,tip,modalSource,modalText,null,"strainViewTemplate"];
config.macros.modalBox.handler(w.output,"modalBox",par);
}
w.nextMatch=eMatch.index+eMatch[0].length;
}
}
});
//}}}
#Make up directly in growth flasks; no need to dissolve before autoclaving
#Slight precipitate will form when autoclaved
#Last 6 salts can be made up as 1000× stocks
Mix and add dH~~2~~O to a final volume of 100 ml; autoclave and store at 4°C
[f[Lysozyme]] can be added to 2 mg/ml if needed for plasmid prep
Transform the desired Km^^R^^ Keio strain with pCP20 and plate on ampicillin plates ''__at 30°C__''###Vector is temperature sensitive and will not replicate efficiently at higher temperatures###
Streak several colonies on __non-selective__ plates and incubate at 43°C###Growth at the non-permissive temperature cures the plasmid, allowing plasmid-free cells that may have recombined out the antibiotic marker to grow. [r[Datsenko and Wanner|Datsenko2000]] report that the majority lose the plasmid and the FRT-flanked resistance gene simultaneously.###
Patch colonies to LB with kanamycin and LB with ampicillin to identify those that have lost Km and Ap resistance
Test for the knockout phenotype or use PCR to verify that the colonies isolated are unmarked knockout mutants
Grow an overnight culture of the desired bacterial strain in LB broth with shaking at 37 °C
Heat water bath or heating block to 55 °C
''If the GenElute kit is new'', prepare wash solution by adding the indicated volume of 100% ethanol to the wash solution concentrate provided (be sure to mark the bottle to indicate that ethanol has been added)
''If the GenElute kit is new'', prepare proteinase K by adding sterile dH~~2~~O directly to the proteinase K bottle to obtain a 20 mg/ml solution (be sure to label the bottle to indicate that it's now a 20 mg/ml solution)
Transfer 1.5 ml of culture###Typical yield should be 15-20 μg for 1.5 ml of culture grown in LB broth. For cultures grown in Terrific Broth or other very rich media, reduce culture volume to 0.8 ml to avoid overloading column (should give same yield)### to a microcentrifuge tube and pellet the cells by centrifuging 2 min at full speed in the microcentrifuge
Remove the supernatant thoroughly
Resuspend the pellet completely in Lysis Solution T by pipetting up and down###For Gram-positive bacteria, a lysozyme step is required. See the kit instructions for more information###
Add 20 μl of the RNAse A solution, mix and incubate 2 min at room temperature
Add 20 μl of proteinase K solution, mix well and incubate 30 min. at 55 °C
Add 200 μl of Lysis Solution C, mix well and incubate 10 min. at 55 °C
While samples are incubating, prepare a column for each sample by obtaining a binding column and adding 500 μl of Column Preparation Solution to it
Place the column in a collection tube and centrifuge at full speed for 1 min; discard the liquid that flows through the column
Add 200 μl of ethanol to the cell lysate and mix by inverting 20 times
Transfer the lysate to the binding column (in the same collection tube) and centrifuge 1 min at 6500 × //g//
Move the binding column to a new collection tube, add 500 μl of Wash Solution O and centrifuge 1 min at 6500 × //g//
Move the binding column to a new collection tube, add 500 μl of Wash Solution (//not// Wash Solution O) and centrifuge 3 min at full speed
Move the binding column to a new collection tube, add 200 μl of Elution Solution and centrifuge 1 min at 6500 × //g//
Store eluted DNA at ^^−^^20 °C
To get started with this blank [[TiddlyWiki]], you'll need to modify the following tiddlers:
* [[SiteTitle]] & [[SiteSubtitle]]: The title and subtitle of the site, as shown above (after saving, they will also appear in the browser title bar)
* [[MainMenu]]: The menu (usually on the left)
* [[DefaultTiddlers]]: Contains the names of the tiddlers that you want to appear when the TiddlyWiki is opened
You'll also need to enter your username for signing your edits: <<option txtUserName>>
// //{{{getPath(file.ext)}}}: Convert a relative reference to a local file to an appropriate URL for file loading
//{{{
function getPath(filename) {
var path = document.location.href;
var slash=path.lastIndexOf('/');
return getLocalPath(path.substr(0,slash+1) + filename);
}
//}}}
// //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;
};
//}}}
// // {{{svgIcon(icontid,height,width,place)}}}: function to draw an SVG icon using a tiddler whose "svg" field contains the SVG
//{{{
function svgIcon(tid,ht,wd,here) {
if (!here) { here = this.parentNode; }
var div = createTiddlyElement(here,"div");
var txt = "<html>" + store.getValue(tid,"svg") + "</html>";
wikify(txt,div);
if ( !isNaN(ht) ) { ht = ht + "px"; }
if ( !isNaN(wd) ) { wd = wd + "px"; }
div.style.height=ht;
div.style.width=wd;
var svg = div.firstChild.firstChild;
svg.setAttribute("height","100%");
svg.setAttribute("width","auto");
svg.setAttribute("preserveAspectRatio","xMidYMid meet");
return div;
}
//}}}
// // {{{getTitle(place,id)}}}: function to get the title of the tiddler containing {{{place}}}
// // if optional variable {{{id}}} is true, then get the place using {{{getElementById}}} on the string in place
//{{{
function getTitle(place,id) {
if ( id ) { var title = story.findContainingTiddler(document.getElementById(place)).getAttribute("tiddler"); }
else { var title = story.findContainingTiddler(place).getAttribute("tiddler"); }
return title;
}
//}}}
// // {{{refreshMenu()}}}: function to refresh the macro-driven main menu
//{{{
function refreshMenu() {
var e = document.getElementById("wikiMenu");
e.innerHTML = "";
invokeMacro(e,"menuMacro","",null,null);
return false;
}
//}}}
|a_fragment|Residues 6-59 of the //E. coli// LacZ protein, capable of interacting with the ω-fragment and producing active β-galactosidase even when the two peptides are synthesized separately.|
|aggregation|Unfolded proteins tend to clump together (aggregate) because hydrophobic amino acids are exposed. Aggregation is thus one measure of unfolded protein.|
|aldehyde|[img[images/glossary/aldehyde.png]]A carbonyl carbon bonded to another carbon on one side and a hydrogen on the other. |
|antibody|[img[images/glossary/antibody.png]]A protein with two highly specific binding sites allowing it to bind a particular molecule known as an antigen. Antibodies are normally produced by the immune system to defend against invading bacteria or viruses, but antibodies can be produced that are specific for a desired molecule by injecting that molecule into a rabbit or mouse and harvesting antibodies from its serum. |
|arabad|Operon containing genes for arabinose utilization; the promoter is tightly "off" unless transcription is stimulated by an activator, AraC, bound to arabinose.|
|arabinose|[img[images/glossary/ara.png]]A sugar that can be used as a carbon/energy source by //E. coli//; utilization is dependent on genes of the //araBAD// operon.|
|asm|American Society for Microbiology|
|asparagine|[img[images/glossary/asnsm.png]]The amino acid asparagine (Asn or N) |
|aspartate|[img[images/glossary/aspsm.png]]The amino acid aspartate, or aspartic acid (Asp or D).|
|attb|The site on the //E. coli// chromosome where the bacteriophage λ naturally integrates, used in this study as a site at which foreign DNA can be integrated into the chromosome without harm to the bacterial cell.|
|b_galactosidase|An enzyme that hydrolyzes lactose into glucose + galactose; the product of the //lacZ// gene in //E. coli//.|
|b_gal_assay|Activity of β-galactosidase is assayed //in vitro// by spectrophotometric measurement of production of yellow //o//-nitrophenol from //o//-nitrophenyl-β-D-galactopyranoside (ONPG).|
|bacteriostatic|A bacteriostatic agent blocks bacterial growth but does not kill the cells; an example is the antibiotic tetracycline, which halts translation but does not kill cells directly.|
|baffle_flasks|[img[images/glossary/baffle.jpg]]Culture flasks with indentations at the bottom to increase aeration. |
|betaine|[img[images/glossary/betaine.png]] An amino-acid derivative produced by many organisms to protect cells from stress, particularly osmotic changes, drying and high temperature. |
|bioinformatics|An interdisciplinary field combining molecular biology and computer science, developing computational tools to investigate genes and genomes.|
|biotin|[img[images/glossary/biotin.png]]Vitamin B~~7~~, a small molecule needed for cell growth but also commonly used in molecular biology to detect molecules to which biotin can be linked. |
|bsa|Bovine serum albumin, a protein purified from the blood serum of cows and commonly used in molecular biology as a protein standard or a carrier protein.|
|carbonyl|[img[images/glossary/carbonyl.png]]a C=O group, such as in an aldehyde or ketone. |
|cat|Chloramphenicol acetyltransferase, an enzyme giving resistance to chloramphenicol.|
|catalase|An enzyme that defends against reactive oxygen species by breaking down peroxide to O~~2~~ and H~~2~~O.|
|chaperon|A protein that assists in the folding or re-folding of other proteins. Examples include GroEL (Hsp60) and DnaK (Hsp70).|
|chronological_aging|The length of time an organism has lived, and the biological changes associated with that span of time.|
|competent|Able to take up DNA.|
|conditioned_medium|Conditioned medium, or "spent" medium, is a growth medium in which bacteria have been grown, usually to saturation, and from which the bacteria have been removed by centrifugation or filtration.|
|conformational_damage|Unfolding (complete or partial) of a protein, caused by heat, changes in pH or salt, etc.|
|constitutive|Unregulated: when discussing gene expression, a gene which is always "on" (has no repressor or other regulatory factors to turn it off) is said to be ''constitutive''.|
|covalent_damage|Chemical alteration to the amino-acid sequence of the protein, such as isoAsp formation, oxidation, proline isomerization, etc.|
|data_mining|Use of computational tools to derive new information from existing pools of data.|
|deamidation|Removal of an amino (NH~~3~~) group, as in the deamidation of Asn to form isoAsp.|
|definition|Popups give definitions and other explanations.|
|deleterious|harmful|
|de_novo|Literally, "from new;" //de novo// synthesis means made from scratch, such as a new protein made from amino acids rather than repair of an existing protein.|
|density_gradient|A method of separating cells, organelles or molecules based on their densities. When centrifuged through a solution forming a gradient of variable density, cells or molecules sediment at different rates and "float" when the reach the region of the tube where the density of the solution is the same as their own.|
|divergent|Oriented for transcription in opposite directions.|
|denaturation|[img[images/glossary/denaturation.png]]Proteins' three-dimensional shapes, which are essential to function, are held together by weaker, non-covalent interactions such as hydrogen bonds, ionic bonds and hydrophobic interactions. Environmental conditions such as heat, salt, high or low pH, or oxidation can disrupt these interactions and ''denature'', or unfold, the protein.|
|denaturing_stress|An environmental condition such as heat, high salt, oxidative stress, etc. that can potentially unfold proteins.|
|dnph|[img[images/glossary/DNPH.png]]2,4-dinitrophenylhydrazine |
|dntps|A mixture of all four deoxynucleotide triphosphates (deoxy-ATP, deoxy-TTP, deoxy-CTP, deoxy-GTP) providing nucleotides for a DNA polymerase to use in PCR, sequencing, etc.|
|exogenous|Externally added or produced, such as an amino acid added to supplement growth, as opposed to being produced by the cell (endogenous).|
|elisa|__E__nzyme-__L__inked __I__mmunosorbent __A__ssay—a technique in which an antibody is used to detect a specific protein or other molecule, typically in a 96-well plate, and an enzyme bound to the antibody is in turn used to allow detection of the antibody by a spectrophotometer.|
|exonuclease|An enzyme that hydrolyzes a nucleic acid molecule starting from an end.|
|exp_phase|[img[images/glossary/growth.png]]The part of the bacterial growth curve where nutrients are available and the bacteria are growing at the maximum rate for that medium; also called log phase. |
|free_radical_theory|Theory that damage to macromolecules due to reactive oxygen species (ROS) is a major cause of senescence and aging.|
|gfp|Green fluorescent protein, a fluorescent protein produced by jellyfish.|
|glossary|Words shown in gray have glossary entries providing a definition or additional information.|
|heterologous|A gene or protein introduced to a cell in which it does not occur naturally.|
|homologous|Strictly speaking, homology means evolutionary relatedness. However, the term is used loosely to mean any two related sequences, such as in homologous recombination.|
|hplc|High-Pressure (or High Performance) Liquid Chromatography separates molecules by taking advantage of their differential affinity for a chromatography column (the stationary phase) in a particular buffer (the mobile phase).|
|hrp|Horseradish peroxidase, an enzyme that catalyzes the breakdown of peroxide (H~~2~~O~~2~~) and is often used in molecular biology as a detection reagent for ELISA or Western blots because substrates such as TMB yield colored products detectable by spectrophotometry.|
|hydrolysis|Cleavage of chemical bonds in a reaction involving the addition of a water molecule.|
|in_vivo|In the living cell (as opposed to ''//in vitro//'', an experiment conducted outside a living organism under controlled conditions).|
|in_vitro|Outside a living organism, under controlled conditions.|
|induce|In gene expression, to turn on a gene, such as by removing a repressor or adding an activator.|
|iptg|[img[images/glossary/IPTG.png]]Isopropyl ß-D-1-thiogalactopyranoside is an analog of lactose. It binds to the //lac// repressor of //E. coli// and thus induces transcription from the //lac// operon promoter but is not broken down by β-galactosidase. It is thus a ''gratuitous inducer'' and is commonly used to induce expression of any gene cloned downstream of a //lac// promoter/operator sequence. |
|isoaspartate|[img[images/glossary/isoaspsm.jpg]]Isoaspartate (isoAsp) is formed by spontaneous isomerization of Asp or deamidation and isomerization of Asn|
|ketone|[img[images/glossary/carbonyl.png]]A carbonyl carbon bonded to another carbon on both sides. |
|knockout_mice|Genetically engineered mice which are either heterozygous or homozygous for a deletion that makes some specific gene non-functional.|
|labile|unstable; susceptible to change or alteration|
|lag_phase|[img[images/glossary/growth.png]]An initial period after bacteria are added to fresh media in which their numbers don't increase; cells are adapting to the medium and conditions during this period. |
|lawn|Growth of bacteria on an agar plate as a continuous layer across the plate, due to a large number of bacteria forming colonies that all merge together.|
|ltsp|//E. coli// and many other bacteria are capable of surviving for days, weeks, or even years after reaching stationary phase with no added nutrients. In long-term stationary phase, some cells die while those capable of using the nutrients available in the current culture condition divide. The net result is apparent stability of the culture.|
|lysate|A suspension of proteins, DNA and other cell contents produced by breaking open (lysing) cells.|
|lysis|Breaking open of cells.|
|macromolecules|Several classes of large molecules (usually polymers) that carry out the major functions of a cell: DNA, proteins, lipids and carbohydrates.|
|methionine|[img[images/glossary/met.png]]Amino acid methionine (Met, M). |
|ncoi|A restriction endonuclease with the recognition sequence 5'-C↓CATGG.|
|ncur|National Conference on Undergraduate Research|
|onpg|[img[images/glossary/onpg.png]]ONPG = //o//-nitrophenyl-β-galactoside, an artificial substrate for β-galactosidase which when cleaved yields galactose and //o//-nitrophenol, a yellow molecule that can be used to measure β-galactosidase activity spectrophotometrically. |
|orthologs|Genes in different species that evolved from a common ancestral gene and diverged following speciation events; usually, orthologous genes in different species have the same function.|
|osmoprotectants|Molecules such as betaine used to counter osmotic changes and maintain osmotic balance in the cell.|
|paraquat|[img[images/glossary/paraquat.png]]A recyclable generator of reactive oxygen species. |
|pcm|[img[images/glossary/pcmsm.png]]The L-isoaspartyl protein carboxyl methyltransferase, also called PIMT or PCMT in eukaryotes.|
|periplasm|[img[images/glossary/fracsm.png]]Gram-negative bacteria, including //E. coli//, have two membranes. The region between the inner and outer membranes is the periplasm, or periplasmic space, where specific proteins reside. |
|perl|A computer language valuable for its text-processing tools and commonly used to write programs to deal with DNA and protein sequences.|
|persisters|A sub-population of cells that are not genetically antibiotic-resistant but have a low level of metabolic activity and thus tolerant of many antibiotics|
|prion|[img[images/glossary/prion.png]]An infectious protein. A mis-folded form of a cellular protein (PrP) forming an aggregate known as amyloid. Responsible for diseases such as BSE ("mad cow" disease).|
|protease|An enzyme that breaks down other proteins.|
|proteome|The complete set of proteins that a cell can synthesize. The proteome is of course encoded by the genome but could be larger than the genome due to alternative start sites within a gene, cleavage of proteins to produce functional subunits, etc.|
|pseudogene|A recognizable gene present in a genome but unable to be expressed. Pseudogenes may result from reverse transcription of mRNA or from mutation.|
|racemization|Conversion of a chiral molecule from one optically distinct form to the other (D to L or vice-versa).|
|reproductive_aging|Declining ability to reproduce as an organism ages.|
|residue|A general term for the amino-acid subunits of a protein or the nucleotide subunits of a nucleic acid.|
|ros|Sometimes called "oxygen radicals" or "free radicals," reactive oxygen species (ROS) are forms of oxygen that can readily oxidize proteins, DNA or lipids. Major ROS are peroxide (H~~2~~O~~2~~), superoxide (O~~2~~^^–^^), the hydroxide ion (OH^^–^^) and the hydroxyl radical (HO•).|
|sam|[img[images/glossary/sam.png]]S-adenosylmethonine (SAM or AdoMet) provides the methyl (CH~~3~~) group that PCM transfers to an isoAsp residue; SAM is the methyl donor for most methylation reactions in the cell. |
|sah|[img[images/glossary/sah.png]]S-adenosylhomocysteine (SAH or AdoHcy) is the product when the methyl group is removed from SAM in a methylation reaction. |
|stationary_phase|[img[images/glossary/growth.png]]The period in the bacterial growth curve where nutrients are exhausted and cell division slows or stops. |
|senescence|Gradual decline in normal function (of a cell or an organism) associated with aging.|
|streptavidin|a protein that binds to biotin with extremely high affinity.|
|structural_complementation|[img[images/glossary/acomp.png]]The ability of two separate segments of a protein to interact physically to yield a functional protein. For example, the C-terminal portion of //E. coli// β-galactosidase forms only inactive dimers rather than active tetramers. The small N-terminal α-peptide (orange in the figure below) can bind the dimers and restore activity. |
|suicide_vector|A plasmid that is unable to replicate in a particular strain; if transformed into the srain, plasmid sequences can recombine with the chromosome but the plasmid cannot be maintained independently.|
|tmb|3,3′,5,5′-tetramethylbenzidine, a colorless molecule which can be oxidized during the reaction of H~~2~~O~~2~~ with horseradish peroxidase, yielding a blue product. [img[images/glossary/tmb.png]] |
|tca|trichloroacetic acid, a reagent commonly used in molecular biology to precipitate proteins.|
|toxin_antitoxin|Toxin-antitoxin (TA) systems are commonly found in bacteria: expression of the toxin gene kills or inhibits the growth of any cell that does not also express the antitoxin gene.|
|transduction|Horizontal gene transfer by means of a bacteriophage.|
|trehalose|[img[images/glossary/trehalose.png]]A disaccharide composed of two glucose molecules produced by many organisms to protect cells from stress, particularly heat-induced conformational changes to proteins. |
|vector|A plasmid used to clone DNA of interest.|
|wild_type|Unmutated; typically refers to what is considered the "normal" or most common genotype or phenotype in a population.|
|bacteriophage|A virus that attacks bacteria.|
|transducing_phage|A bacteriophage that can package fragments of host DNA in place of its own DNA at some frequency and thus potentially transfer genes from one host to another|
|adhesin|Adhesins are proteins or other molecules exposed on the surface of bacteria that allow them to stick to each other (cell-cell adhesion) or to a surface (substrate or host tissue).|
|planktonic|When referring to biofilm formation, planktonic cells are those that remain suspended, as opposed to the biofilm-attached cells|
|static_cultures|Cultures grown without shaking|
// // 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).toLowerCase().replace(/\s/g,"_");
}
else {
var glossText = eMatch[1];
var glossLookup = glossText.toLowerCase().replace(/\s/g,"_");
}
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,"glossary");
this.popup = popup;
var gpar = createTiddlyElement(popup,"p",null,null);
var ghead = createTiddlyElement(gpar,"b",null,null,null);
wikify(this.subject,ghead);
gpar.innerHTML += ": " + wikifyStatic(this.anno);
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");
}
});
//}}}
// // {{{newGlossary}}} macro for new glossary item
//{{{
config.macros.newGlossary = {
label: "new glossary item",
prompt: "create a new glossary item"
};
config.macros.newGlossary.handler = function(place,macroName,params,wikifier,paramString) {
var btn = createTiddlyButton(place,this.label,this.prompt,this.onClickNewGlossary);
};
config.macros.newGlossary.onClickNewGlossary = function() {
var gname = prompt("Enter name for glossary entry");
gtemp = gname.replace(/\s/g,"_").toLowerCase();
var slice = store.getTiddlerSlice("Glossary",gtemp);
if ( slice ) { alert("Glossary entry " + gname + " exists!"); return false; }
var glossary = store.getTiddler("Glossary");
var text = "\n|" + gtemp + "|";
var gdef = prompt("Enter definition for " + gname + ":");
if ( !gdef ) { return false; }
var gimg = prompt("Enter an image filename (in images/glossary) if desired:");
if ( gimg ) { text += "[img[images/glossary/" + gimg + "]]"; }
text += gdef + "|";
glossary.text += text;
return false;
};
//}}}
#Heat and stir ½ desired volume of dH~~2~~O on a stirring block; do not boil
#Slowly add glucose to the hot water
#Continue stirring until completely dissolved
#Bring to final volume with dH~~2~~O and autoclave
#Measure glycerol into a graduated cylinder. Glycerol is viscous, so allow time for the liquid to collect from the walls of the cylinder
#Bring to final volume with dH~~2~~O
#Cover cylinder with parafilm and mix well to form a uniform solution before transferring to a bottle
#Autoclave
Dissolve in about 80 ml dH~~2~~O, then bring to final volume.
Make fresh just before use. Use 59 mM H~~2~~O~~2~~ for [[catalase]] assay.
Carefully dilute the concentrated acid to the final volume with dH~~2~~O in a graduated cylinder
#Add HEPES to about 80% of the final volume of dH~~2~~O.
#pH to 7.2 with NaOH; raising pH is also needed for solubility of HEPES
#Bring to final volume with dH~~2~~O and autoclave
Sterilize by filtration and store at -20°C
Dissolve in dH~~2~~O, adjust pH to 7.4 with HCl and autoclave.
Before using, add 100 μl of 64 mM KH~~2~~PO~~4~~ (8.7 mg/ml) for each 10 ml.
Add glucose and amino acids to make Hershey's medium
Dissolve IPTG in 10 ml of dH~~2~~O, filter-sterilize and store 1-ml aliquots at -20°C.
Working concentration in plates is 5 mg/l; add 125 μl of IPTG stock for each 500 ml of medium. Can also spread plates with 1.25 μl of stock, diluted to 50 μl with sterile dH~~2~~O.
On 8/13/2018, 7:22:42 PM, BioChair loaded 445 tiddlers from
[[X:\Research\Research wiki\strains.html|X:\Research\Research wiki\strains.html]]:
<<<
#[[14028s]] - added
#[[2175S]] - added
#[[2381L]] - added
#[[4WT]] - added
#[[A33]] - added
#[[AB1157]] - added
#[[AF1]] - added
#[[AJ10]] - added
#[[BD1527]] - added
#[[BD170]] - added
#[[BL21]] - added
#[[BL21(DE3)]] - added
#[[BR3637]] - added
#[[BTI]] - added
#[[BTI 20K::pKG1]] - added
#[[BW20338]] - added
#[[BW22826]] - added
#[[BW25113]] - added
#[[BW25141]] - added
#[[BW26355]] - added
#[[BW7261]] - added
#[[CAG12147]] - added
#[[CAG481]] - added
#[[CAG510]] - added
#[[CAG603]] - added
#[[CAG604]] - added
#[[CC1024]] - added
#[[CC118λ]] - added
#[[CF1693]] - added
#[[CF1693*]] - added
#[[CG217]] - added
#[[CG218]] - added
#[[CG236]] - added
#[[CG247]] - added
#[[CL1010]] - added
#[[CL1020]] - added
#[[CL2010]] - added
#[[CL3010]] - added
#[[CL4010]] - added
#[[CSH101]] - added
#[[CSH102]] - added
#[[CSH103]] - added
#[[CSH104]] - added
#[[CSH105]] - added
#[[CSH106]] - added
#[[D1210]] - added
#[[D1210HP]] - added
#[[DA16]] - added
#[[DC1348]] - added
#[[DC271]] - added
#[[DC272]] - added
#[[DC430]] - added
#[[DH5α]] - added
#[[EM158]] - added
#[[EM258]] - added
#[[EM259]] - added
#[[EM383]] - added
#[[EMG2]] - added
#[[ES1301]] - added
#[[ES1481]] - added
#[[EWH110]] - added
#[[FP4102]] - added
#[[GD32]] - added
#[[GR756]] - added
#[[GS09]] - added
#[[GW8306]] - added
#[[HB101]] - added
#[[HMS174]] - added
#[[J01]] - added
#[[J02]] - added
#[[J04]] - added
#[[J05]] - added
#[[J06]] - added
#[[JC2926]] - added
#[[JC5519]] - added
#[[JC7623]] - added
#[[JI370]] - added
#[[JKI1200]] - added
#[[JKI2010]] - added
#[[JM103]] - added
#[[JM109]] - added
#[[JM83]] - added
#[[JR501]] - added
#[[JV1001]] - added
#[[JV1002]] - added
#[[JV1003]] - added
#[[JV1004]] - added
#[[JV1005]] - added
#[[JV1006]] - added
#[[JV1007]] - added
#[[JV1008]] - added
#[[JV1009]] - added
#[[JV1010]] - added
#[[JV1011]] - added
#[[JV1012]] - added
#[[JV1013]] - added
#[[JV1014]] - added
#[[JV1015]] - added
#[[JV1016]] - added
#[[JV1017]] - added
#[[JV1018]] - added
#[[JV1019]] - added
#[[JV1020]] - added
#[[JV1021]] - added
#[[JV1022]] - added
#[[JV1023]] - added
#[[JV1024]] - added
#[[JV1025]] - added
#[[JV1026]] - added
#[[JV1027]] - added
#[[JV1028]] - added
#[[JV1029]] - added
#[[JV1030]] - added
#[[JV1031]] - added
#[[JV1032]] - added
#[[JV1033]] - added
#[[JV1034]] - added
#[[JV1035]] - added
#[[JV1036]] - added
#[[JV1037]] - added
#[[JV1038]] - added
#[[JV1039]] - added
#[[JV1040]] - added
#[[JV1041]] - added
#[[JV1042]] - added
#[[JV1043]] - added
#[[JV1044]] - added
#[[JV1045]] - added
#[[JV1046]] - added
#[[JV1047]] - added
#[[JV1048]] - added
#[[JV1049]] - added
#[[JV1050]] - added
#[[JV1051]] - added
#[[JV1052]] - added
#[[JV1053]] - added
#[[JV1054]] - added
#[[JV1055]] - added
#[[JV1056]] - added
#[[JV1057]] - added
#[[JV1058]] - added
#[[JV1059]] - added
#[[JV1060]] - added
#[[JV1061]] - added
#[[JV1062]] - added
#[[JV1063]] - added
#[[JV1064]] - added
#[[JV1065]] - added
#[[JV1066]] - added
#[[JV1067]] - added
#[[JV1068]] - added
#[[JV1068A]] - added
#[[JV1069]] - added
#[[JV1070]] - added
#[[JV1071]] - added
#[[JV1072]] - added
#[[JV1073]] - added
#[[JV1074]] - added
#[[JV1075]] - added
#[[JV1076]] - added
#[[JV1077]] - added
#[[JV1080]] - added
#[[JV1081]] - added
#[[JV1082]] - added
#[[JV1083]] - added
#[[JV1084]] - added
#[[JV1085]] - added
#[[JV1086]] - added
#[[JV1087]] - added
#[[JV1088]] - added
#[[JV1089]] - added
#[[JV1090]] - added
#[[JV1091]] - added
#[[JV1092]] - added
#[[JV1093]] - added
#[[JV1094]] - added
#[[JV1095]] - added
#[[JV1096]] - added
#[[JV1097]] - added
#[[JV1098]] - added
#[[JV1099]] - added
#[[JV1100]] - added
#[[JV1101]] - added
#[[JV1102]] - added
#[[JV1103]] - added
#[[JV1104]] - added
#[[JV1105]] - added
#[[JV1106]] - added
#[[JV1107]] - added
#[[JV1108]] - added
#[[JV1109]] - added
#[[JV1110]] - added
#[[JV1111]] - added
#[[JV1112]] - added
#[[JV1113]] - added
#[[JV1114]] - added
#[[JV1115]] - added
#[[JV1116]] - added
#[[JV1117]] - added
#[[JV1118]] - added
#[[JV1119]] - added
#[[JV1120]] - added
#[[JV1121]] - added
#[[JV1122]] - added
#[[JV1123]] - added
#[[JV1124]] - added
#[[JV1125]] - added
#[[JV1126]] - added
#[[JV1127]] - added
#[[JV1128]] - added
#[[JV1129]] - added
#[[JV1131]] - added
#[[JV1132]] - added
#[[JV1133]] - added
#[[JV1136]] - added
#[[JV1138]] - added
#[[JV1139]] - added
#[[JV1140]] - added
#[[JV1141]] - added
#[[JV1142]] - added
#[[JV1143]] - added
#[[JV1144]] - added
#[[JV1145]] - added
#[[JV1146]] - added
#[[JV1147]] - added
#[[JV1148]] - added
#[[JV1149]] - added
#[[JV1150]] - added
#[[JV1151]] - added
#[[JV1152]] - added
#[[JV1153]] - added
#[[JV1154]] - added
#[[JV1155]] - added
#[[JV1156]] - added
#[[JV1157]] - added
#[[JV1158]] - added
#[[JV1159]] - added
#[[JV1160]] - added
#[[JV1161]] - added
#[[JV1162]] - added
#[[JV1163]] - added
#[[JV1164]] - added
#[[JV1165]] - added
#[[JV1166]] - added
#[[JV1167]] - added
#[[JV1168]] - added
#[[JV1169]] - added
#[[JV1170]] - added
#[[JV1171]] - added
#[[JV1172]] - added
#[[JV1173]] - added
#[[JV1174]] - added
#[[JV1175]] - added
#[[JV1176]] - added
#[[JV1177]] - added
#[[JV1178]] - added
#[[JV1179]] - added
#[[JV1180]] - added
#[[JV1181]] - added
#[[JV1182]] - added
#[[JV1183]] - added
#[[JV1184]] - added
#[[JV1185]] - added
#[[JV1186]] - added
#[[JV1187]] - added
#[[JV1188]] - added
#[[JV1189]] - added
#[[JV1190]] - added
#[[JV1191]] - added
#[[JV1192]] - added
#[[JV1193]] - added
#[[JV1194]] - added
#[[JV1195]] - added
#[[JV1196]] - added
#[[JV1197]] - added
#[[JV1198]] - added
#[[JV1199]] - added
#[[JV1200]] - added
#[[JV1201]] - added
#[[JV1202]] - added
#[[JV1203]] - added
#[[JV1204]] - added
#[[JV1205]] - added
#[[JV1206]] - added
#[[JV1207]] - added
#[[JV1208]] - added
#[[JW0227-1]] - added
#[[JW0303-1]] - added
#[[JW0449-5]] - added
#[[JW0462-1]] - added
#[[JW0598-2]] - added
#[[JW0733]] - added
#[[JW0742]] - added
#[[JW0742-1]] - added
#[[JW0864-1]] - added
#[[JW0915-1]] - added
#[[JW0985-2]] - added
#[[JW1500-2]] - added
#[[JW1500-2A]] - added
#[[JW1501-1]] - added
#[[JW1555-2]] - added
#[[JW1648-1]] - added
#[[JW2507-1]] - added
#[[JW2990-2]] - added
#[[JW3389-1]] - added
#[[JW3526-3]] - added
#[[JW3663-1]] - added
#[[JW3664-1]] - added
#[[JW3702-1]] - added
#[[JW3823-1]] - added
#[[JW3879-1]] - added
#[[JW3933-3]] - added
#[[JW4178-3]] - added
#[[JW4217-6]] - added
#[[JW5312-3]] - added
#[[K165]] - added
#[[KL304]] - added
#[[KM22]] - added
#[[KM32]] - added
#[[KS272]] - added
#[[KV1605]] - added
#[[LC5RT]] - added
#[[LE392]] - added
#[[LT2]] - added
#[[M26]] - added
#[[MC1000]] - added
#[[MC1000 clpB::Km]] - added
#[[MC4100 hns::neo]] - added
#[[MC4100 relA+ ΔmazEF]] - added
#[[MC4100 relA+ ΔmazEF Δ//pcm//]] - added
#[[MC4100 relA+ wt]] - added
#[[MC4100λ]] - added
#[[MG1]] - added
#[[MG1655]] - added
#[[MG1655 ΔIS1]] - added
#[[MG1655 ΔIS1 Δpcm]] - added
#[[MG1655A]] - added
#[[MGAY]] - added
#[[MP180]] - added
#[[MS40]] - added
#[[MS41]] - added
#[[MS60]] - added
#[[MS63]] - added
#[[MST1]] - added
#[[MST10]] - added
#[[MST100]] - added
#[[MST1024]] - added
#[[MST1028]] - added
#[[MST1063]] - added
#[[MST12]] - added
#[[MST1282]] - added
#[[MST13]] - added
#[[MST14]] - added
#[[MST1599]] - added
#[[MST1805]] - added
#[[MST1933]] - added
#[[MST2]] - added
#[[MST2027]] - added
#[[MST2179]] - added
#[[MST2185]] - added
#[[MST2192]] - added
#[[MST2196]] - added
#[[MST220]] - added
#[[MST2243]] - added
#[[MST2250]] - added
#[[MST2253]] - added
#[[MST2254]] - added
#[[MST2256]] - added
#[[MST2260]] - added
#[[MST2277]] - added
#[[MST2278]] - added
#[[MST2288]] - added
#[[MST2293]] - added
#[[MST2308]] - added
#[[MST2313]] - added
#[[MST2330]] - added
#[[MST2332]] - added
#[[MST2334]] - added
#[[MST2335]] - added
#[[MST2336]] - added
#[[MST2337]] - added
#[[MST2338]] - added
#[[MST2339]] - added
#[[MST2343]] - added
#[[MST251]] - added
#[[MST267]] - added
#[[MST268]] - added
#[[MST272]] - added
#[[MST297]] - added
#[[MST298]] - added
#[[MST300]] - added
#[[MST301]] - added
#[[MST4]] - added
#[[MST5]] - added
#[[MST508]] - added
#[[MST509]] - added
#[[MST6]] - added
#[[MST727]] - added
#[[MST730]] - added
#[[MST746]] - added
#[[MST747]] - added
#[[MST8]] - added
#[[MST818]] - added
#[[MST887]] - added
#[[NK6024]] - added
#[[NK6732]] - added
#[[OD311]] - added
#[[RI89]] - added
#[[RJ1795]] - added
#[[RJ1800]] - added
#[[RM4606]] - added
#[[RO121]] - added
#[[S17-1λ-//pir//]] - added
#[[SC122]] - added
#[[SG22007]] - added
#[[SG935]] - added
#[[SHH31]] - added
#[[SM10λ-//pir//]] - added
#[[SS996]] - added
#[[SX1323]] - added
#[[SX1550]] - added
#[[SX1685]] - added
#[[TA4112]] - added
#[[TAM1]] - added
#[[TH1191]] - added
#[[TH1255]] - added
#[[TH1269]] - added
#[[TH1355]] - added
#[[TH1367]] - added
#[[TH331]] - added
#[[TH338]] - added
#[[TH339]] - added
#[[TH341]] - added
#[[TSM7]] - added
#[[TST1]] - added
#[[TT10917]] - added
#[[UM120]] - added
#[[UM122]] - added
#[[UM197]] - added
#[[UM2]] - added
#[[W1485]] - added
#[[W3350]] - added
#[[W3350-htpR(ts)]] - added
#[[XA21]] - added
#[[ZK1012]] - added
<<<
----
On 8/10/2018, 4:21:53 PM, BioChair loaded 445 tiddlers from
[[X:\Research\Research wiki\strains.html|X:\Research\Research wiki\strains.html]]:
<<<
#[[14028s]] - added
#[[2175S]] - added
#[[2381L]] - added
#[[4WT]] - added
#[[A33]] - added
#[[AB1157]] - added
#[[AF1]] - added
#[[AJ10]] - added
#[[BD1527]] - added
#[[BD170]] - added
#[[BL21]] - added
#[[BL21(DE3)]] - added
#[[BR3637]] - added
#[[BTI]] - added
#[[BTI 20K::pKG1]] - added
#[[BW20338]] - added
#[[BW22826]] - added
#[[BW25113]] - added
#[[BW25141]] - added
#[[BW26355]] - added
#[[BW7261]] - added
#[[CAG12147]] - added
#[[CAG481]] - added
#[[CAG510]] - added
#[[CAG603]] - added
#[[CAG604]] - added
#[[CC1024]] - added
#[[CC118λ]] - added
#[[CF1693]] - added
#[[CF1693*]] - added
#[[CG217]] - added
#[[CG218]] - added
#[[CG236]] - added
#[[CG247]] - added
#[[CL1010]] - added
#[[CL1020]] - added
#[[CL2010]] - added
#[[CL3010]] - added
#[[CL4010]] - added
#[[CSH101]] - added
#[[CSH102]] - added
#[[CSH103]] - added
#[[CSH104]] - added
#[[CSH105]] - added
#[[CSH106]] - added
#[[D1210]] - added
#[[D1210HP]] - added
#[[DA16]] - added
#[[DC1348]] - added
#[[DC271]] - added
#[[DC272]] - added
#[[DC430]] - added
#[[DH5α]] - added
#[[EM158]] - added
#[[EM258]] - added
#[[EM259]] - added
#[[EM383]] - added
#[[EMG2]] - added
#[[ES1301]] - added
#[[ES1481]] - added
#[[EWH110]] - added
#[[FP4102]] - added
#[[GD32]] - added
#[[GR756]] - added
#[[GS09]] - added
#[[GW8306]] - added
#[[HB101]] - added
#[[HMS174]] - added
#[[J01]] - added
#[[J02]] - added
#[[J04]] - added
#[[J05]] - added
#[[J06]] - added
#[[JC2926]] - added
#[[JC5519]] - added
#[[JC7623]] - added
#[[JI370]] - added
#[[JKI1200]] - added
#[[JKI2010]] - added
#[[JM103]] - added
#[[JM109]] - added
#[[JM83]] - added
#[[JR501]] - added
#[[JV1001]] - added
#[[JV1002]] - added
#[[JV1003]] - added
#[[JV1004]] - added
#[[JV1005]] - added
#[[JV1006]] - added
#[[JV1007]] - added
#[[JV1008]] - added
#[[JV1009]] - added
#[[JV1010]] - added
#[[JV1011]] - added
#[[JV1012]] - added
#[[JV1013]] - added
#[[JV1014]] - added
#[[JV1015]] - added
#[[JV1016]] - added
#[[JV1017]] - added
#[[JV1018]] - added
#[[JV1019]] - added
#[[JV1020]] - added
#[[JV1021]] - added
#[[JV1022]] - added
#[[JV1023]] - added
#[[JV1024]] - added
#[[JV1025]] - added
#[[JV1026]] - added
#[[JV1027]] - added
#[[JV1028]] - added
#[[JV1029]] - added
#[[JV1030]] - added
#[[JV1031]] - added
#[[JV1032]] - added
#[[JV1033]] - added
#[[JV1034]] - added
#[[JV1035]] - added
#[[JV1036]] - added
#[[JV1037]] - added
#[[JV1038]] - added
#[[JV1039]] - added
#[[JV1040]] - added
#[[JV1041]] - added
#[[JV1042]] - added
#[[JV1043]] - added
#[[JV1044]] - added
#[[JV1045]] - added
#[[JV1046]] - added
#[[JV1047]] - added
#[[JV1048]] - added
#[[JV1049]] - added
#[[JV1050]] - added
#[[JV1051]] - added
#[[JV1052]] - added
#[[JV1053]] - added
#[[JV1054]] - added
#[[JV1055]] - added
#[[JV1056]] - added
#[[JV1057]] - added
#[[JV1058]] - added
#[[JV1059]] - added
#[[JV1060]] - added
#[[JV1061]] - added
#[[JV1062]] - added
#[[JV1063]] - added
#[[JV1064]] - added
#[[JV1065]] - added
#[[JV1066]] - added
#[[JV1067]] - added
#[[JV1068]] - added
#[[JV1068A]] - added
#[[JV1069]] - added
#[[JV1070]] - added
#[[JV1071]] - added
#[[JV1072]] - added
#[[JV1073]] - added
#[[JV1074]] - added
#[[JV1075]] - added
#[[JV1076]] - added
#[[JV1077]] - added
#[[JV1080]] - added
#[[JV1081]] - added
#[[JV1082]] - added
#[[JV1083]] - added
#[[JV1084]] - added
#[[JV1085]] - added
#[[JV1086]] - added
#[[JV1087]] - added
#[[JV1088]] - added
#[[JV1089]] - added
#[[JV1090]] - added
#[[JV1091]] - added
#[[JV1092]] - added
#[[JV1093]] - added
#[[JV1094]] - added
#[[JV1095]] - added
#[[JV1096]] - added
#[[JV1097]] - added
#[[JV1098]] - added
#[[JV1099]] - added
#[[JV1100]] - added
#[[JV1101]] - added
#[[JV1102]] - added
#[[JV1103]] - added
#[[JV1104]] - added
#[[JV1105]] - added
#[[JV1106]] - added
#[[JV1107]] - added
#[[JV1108]] - added
#[[JV1109]] - added
#[[JV1110]] - added
#[[JV1111]] - added
#[[JV1112]] - added
#[[JV1113]] - added
#[[JV1114]] - added
#[[JV1115]] - added
#[[JV1116]] - added
#[[JV1117]] - added
#[[JV1118]] - added
#[[JV1119]] - added
#[[JV1120]] - added
#[[JV1121]] - added
#[[JV1122]] - added
#[[JV1123]] - added
#[[JV1124]] - added
#[[JV1125]] - added
#[[JV1126]] - added
#[[JV1127]] - added
#[[JV1128]] - added
#[[JV1129]] - added
#[[JV1131]] - added
#[[JV1132]] - added
#[[JV1133]] - added
#[[JV1136]] - added
#[[JV1138]] - added
#[[JV1139]] - added
#[[JV1140]] - added
#[[JV1141]] - added
#[[JV1142]] - added
#[[JV1143]] - added
#[[JV1144]] - added
#[[JV1145]] - added
#[[JV1146]] - added
#[[JV1147]] - added
#[[JV1148]] - added
#[[JV1149]] - added
#[[JV1150]] - added
#[[JV1151]] - added
#[[JV1152]] - added
#[[JV1153]] - added
#[[JV1154]] - added
#[[JV1155]] - added
#[[JV1156]] - added
#[[JV1157]] - added
#[[JV1158]] - added
#[[JV1159]] - added
#[[JV1160]] - added
#[[JV1161]] - added
#[[JV1162]] - added
#[[JV1163]] - added
#[[JV1164]] - added
#[[JV1165]] - added
#[[JV1166]] - added
#[[JV1167]] - added
#[[JV1168]] - added
#[[JV1169]] - added
#[[JV1170]] - added
#[[JV1171]] - added
#[[JV1172]] - added
#[[JV1173]] - added
#[[JV1174]] - added
#[[JV1175]] - added
#[[JV1176]] - added
#[[JV1177]] - added
#[[JV1178]] - added
#[[JV1179]] - added
#[[JV1180]] - added
#[[JV1181]] - added
#[[JV1182]] - added
#[[JV1183]] - added
#[[JV1184]] - added
#[[JV1185]] - added
#[[JV1186]] - added
#[[JV1187]] - added
#[[JV1188]] - added
#[[JV1189]] - added
#[[JV1190]] - added
#[[JV1191]] - added
#[[JV1192]] - added
#[[JV1193]] - added
#[[JV1194]] - added
#[[JV1195]] - added
#[[JV1196]] - added
#[[JV1197]] - added
#[[JV1198]] - added
#[[JV1199]] - added
#[[JV1200]] - added
#[[JV1201]] - added
#[[JV1202]] - added
#[[JV1203]] - added
#[[JV1204]] - added
#[[JV1205]] - added
#[[JV1206]] - added
#[[JV1207]] - added
#[[JV1208]] - added
#[[JW0227-1]] - added
#[[JW0303-1]] - added
#[[JW0449-5]] - added
#[[JW0462-1]] - added
#[[JW0598-2]] - added
#[[JW0733]] - added
#[[JW0742]] - added
#[[JW0742-1]] - added
#[[JW0864-1]] - added
#[[JW0915-1]] - added
#[[JW0985-2]] - added
#[[JW1500-2]] - added
#[[JW1500-2A]] - added
#[[JW1501-1]] - added
#[[JW1555-2]] - added
#[[JW1648-1]] - added
#[[JW2507-1]] - added
#[[JW2990-2]] - added
#[[JW3389-1]] - added
#[[JW3526-3]] - added
#[[JW3663-1]] - added
#[[JW3664-1]] - added
#[[JW3702-1]] - added
#[[JW3823-1]] - added
#[[JW3879-1]] - added
#[[JW3933-3]] - added
#[[JW4178-3]] - added
#[[JW4217-6]] - added
#[[JW5312-3]] - added
#[[K165]] - added
#[[KL304]] - added
#[[KM22]] - added
#[[KM32]] - added
#[[KS272]] - added
#[[KV1605]] - added
#[[LC5RT]] - added
#[[LE392]] - added
#[[LT2]] - added
#[[M26]] - added
#[[MC1000]] - added
#[[MC1000 clpB::Km]] - added
#[[MC4100 hns::neo]] - added
#[[MC4100 relA+ ΔmazEF]] - added
#[[MC4100 relA+ ΔmazEF Δ//pcm//]] - added
#[[MC4100 relA+ wt]] - added
#[[MC4100λ]] - added
#[[MG1]] - added
#[[MG1655]] - added
#[[MG1655 ΔIS1]] - added
#[[MG1655 ΔIS1 Δpcm]] - added
#[[MG1655A]] - added
#[[MGAY]] - added
#[[MP180]] - added
#[[MS40]] - added
#[[MS41]] - added
#[[MS60]] - added
#[[MS63]] - added
#[[MST1]] - added
#[[MST10]] - added
#[[MST100]] - added
#[[MST1024]] - added
#[[MST1028]] - added
#[[MST1063]] - added
#[[MST12]] - added
#[[MST1282]] - added
#[[MST13]] - added
#[[MST14]] - added
#[[MST1599]] - added
#[[MST1805]] - added
#[[MST1933]] - added
#[[MST2]] - added
#[[MST2027]] - added
#[[MST2179]] - added
#[[MST2185]] - added
#[[MST2192]] - added
#[[MST2196]] - added
#[[MST220]] - added
#[[MST2243]] - added
#[[MST2250]] - added
#[[MST2253]] - added
#[[MST2254]] - added
#[[MST2256]] - added
#[[MST2260]] - added
#[[MST2277]] - added
#[[MST2278]] - added
#[[MST2288]] - added
#[[MST2293]] - added
#[[MST2308]] - added
#[[MST2313]] - added
#[[MST2330]] - added
#[[MST2332]] - added
#[[MST2334]] - added
#[[MST2335]] - added
#[[MST2336]] - added
#[[MST2337]] - added
#[[MST2338]] - added
#[[MST2339]] - added
#[[MST2343]] - added
#[[MST251]] - added
#[[MST267]] - added
#[[MST268]] - added
#[[MST272]] - added
#[[MST297]] - added
#[[MST298]] - added
#[[MST300]] - added
#[[MST301]] - added
#[[MST4]] - added
#[[MST5]] - added
#[[MST508]] - added
#[[MST509]] - added
#[[MST6]] - added
#[[MST727]] - added
#[[MST730]] - added
#[[MST746]] - added
#[[MST747]] - added
#[[MST8]] - added
#[[MST818]] - added
#[[MST887]] - added
#[[NK6024]] - added
#[[NK6732]] - added
#[[OD311]] - added
#[[RI89]] - added
#[[RJ1795]] - added
#[[RJ1800]] - added
#[[RM4606]] - added
#[[RO121]] - added
#[[S17-1λ-//pir//]] - added
#[[SC122]] - added
#[[SG22007]] - added
#[[SG935]] - added
#[[SHH31]] - added
#[[SM10λ-//pir//]] - added
#[[SS996]] - added
#[[SX1323]] - added
#[[SX1550]] - added
#[[SX1685]] - added
#[[TA4112]] - added
#[[TAM1]] - added
#[[TH1191]] - added
#[[TH1255]] - added
#[[TH1269]] - added
#[[TH1355]] - added
#[[TH1367]] - added
#[[TH331]] - added
#[[TH338]] - added
#[[TH339]] - added
#[[TH341]] - added
#[[TSM7]] - added
#[[TST1]] - added
#[[TT10917]] - added
#[[UM120]] - added
#[[UM122]] - added
#[[UM197]] - added
#[[UM2]] - added
#[[W1485]] - added
#[[W3350]] - added
#[[W3350-htpR(ts)]] - added
#[[XA21]] - added
#[[ZK1012]] - added
<<<
----
On 8/10/2018, 4:20:12 PM, BioChair loaded 445 tiddlers from
[[X:\Research\Research wiki\strains.html|X:\Research\Research wiki\strains.html]]:
<<<
#[[14028s]] - added
#[[2175S]] - added
#[[2381L]] - added
#[[4WT]] - added
#[[A33]] - added
#[[AB1157]] - added
#[[AF1]] - added
#[[AJ10]] - added
#[[BD1527]] - added
#[[BD170]] - added
#[[BL21]] - added
#[[BL21(DE3)]] - added
#[[BR3637]] - added
#[[BTI]] - added
#[[BTI 20K::pKG1]] - added
#[[BW20338]] - added
#[[BW22826]] - added
#[[BW25113]] - added
#[[BW25141]] - added
#[[BW26355]] - added
#[[BW7261]] - added
#[[CAG12147]] - added
#[[CAG481]] - added
#[[CAG510]] - added
#[[CAG603]] - added
#[[CAG604]] - added
#[[CC1024]] - added
#[[CC118λ]] - added
#[[CF1693]] - added
#[[CF1693*]] - added
#[[CG217]] - added
#[[CG218]] - added
#[[CG236]] - added
#[[CG247]] - added
#[[CL1010]] - added
#[[CL1020]] - added
#[[CL2010]] - added
#[[CL3010]] - added
#[[CL4010]] - added
#[[CSH101]] - added
#[[CSH102]] - added
#[[CSH103]] - added
#[[CSH104]] - added
#[[CSH105]] - added
#[[CSH106]] - added
#[[D1210]] - added
#[[D1210HP]] - added
#[[DA16]] - added
#[[DC1348]] - added
#[[DC271]] - added
#[[DC272]] - added
#[[DC430]] - added
#[[DH5α]] - added
#[[EM158]] - added
#[[EM258]] - added
#[[EM259]] - added
#[[EM383]] - added
#[[EMG2]] - added
#[[ES1301]] - added
#[[ES1481]] - added
#[[EWH110]] - added
#[[FP4102]] - added
#[[GD32]] - added
#[[GR756]] - added
#[[GS09]] - added
#[[GW8306]] - added
#[[HB101]] - added
#[[HMS174]] - added
#[[J01]] - added
#[[J02]] - added
#[[J04]] - added
#[[J05]] - added
#[[J06]] - added
#[[JC2926]] - added
#[[JC5519]] - added
#[[JC7623]] - added
#[[JI370]] - added
#[[JKI1200]] - added
#[[JKI2010]] - added
#[[JM103]] - added
#[[JM109]] - added
#[[JM83]] - added
#[[JR501]] - added
#[[JV1001]] - added
#[[JV1002]] - added
#[[JV1003]] - added
#[[JV1004]] - added
#[[JV1005]] - added
#[[JV1006]] - added
#[[JV1007]] - added
#[[JV1008]] - added
#[[JV1009]] - added
#[[JV1010]] - added
#[[JV1011]] - added
#[[JV1012]] - added
#[[JV1013]] - added
#[[JV1014]] - added
#[[JV1015]] - added
#[[JV1016]] - added
#[[JV1017]] - added
#[[JV1018]] - added
#[[JV1019]] - added
#[[JV1020]] - added
#[[JV1021]] - added
#[[JV1022]] - added
#[[JV1023]] - added
#[[JV1024]] - added
#[[JV1025]] - added
#[[JV1026]] - added
#[[JV1027]] - added
#[[JV1028]] - added
#[[JV1029]] - added
#[[JV1030]] - added
#[[JV1031]] - added
#[[JV1032]] - added
#[[JV1033]] - added
#[[JV1034]] - added
#[[JV1035]] - added
#[[JV1036]] - added
#[[JV1037]] - added
#[[JV1038]] - added
#[[JV1039]] - added
#[[JV1040]] - added
#[[JV1041]] - added
#[[JV1042]] - added
#[[JV1043]] - added
#[[JV1044]] - added
#[[JV1045]] - added
#[[JV1046]] - added
#[[JV1047]] - added
#[[JV1048]] - added
#[[JV1049]] - added
#[[JV1050]] - added
#[[JV1051]] - added
#[[JV1052]] - added
#[[JV1053]] - added
#[[JV1054]] - added
#[[JV1055]] - added
#[[JV1056]] - added
#[[JV1057]] - added
#[[JV1058]] - added
#[[JV1059]] - added
#[[JV1060]] - added
#[[JV1061]] - added
#[[JV1062]] - added
#[[JV1063]] - added
#[[JV1064]] - added
#[[JV1065]] - added
#[[JV1066]] - added
#[[JV1067]] - added
#[[JV1068]] - added
#[[JV1068A]] - added
#[[JV1069]] - added
#[[JV1070]] - added
#[[JV1071]] - added
#[[JV1072]] - added
#[[JV1073]] - added
#[[JV1074]] - added
#[[JV1075]] - added
#[[JV1076]] - added
#[[JV1077]] - added
#[[JV1080]] - added
#[[JV1081]] - added
#[[JV1082]] - added
#[[JV1083]] - added
#[[JV1084]] - added
#[[JV1085]] - added
#[[JV1086]] - added
#[[JV1087]] - added
#[[JV1088]] - added
#[[JV1089]] - added
#[[JV1090]] - added
#[[JV1091]] - added
#[[JV1092]] - added
#[[JV1093]] - added
#[[JV1094]] - added
#[[JV1095]] - added
#[[JV1096]] - added
#[[JV1097]] - added
#[[JV1098]] - added
#[[JV1099]] - added
#[[JV1100]] - added
#[[JV1101]] - added
#[[JV1102]] - added
#[[JV1103]] - added
#[[JV1104]] - added
#[[JV1105]] - added
#[[JV1106]] - added
#[[JV1107]] - added
#[[JV1108]] - added
#[[JV1109]] - added
#[[JV1110]] - added
#[[JV1111]] - added
#[[JV1112]] - added
#[[JV1113]] - added
#[[JV1114]] - added
#[[JV1115]] - added
#[[JV1116]] - added
#[[JV1117]] - added
#[[JV1118]] - added
#[[JV1119]] - added
#[[JV1120]] - added
#[[JV1121]] - added
#[[JV1122]] - added
#[[JV1123]] - added
#[[JV1124]] - added
#[[JV1125]] - added
#[[JV1126]] - added
#[[JV1127]] - added
#[[JV1128]] - added
#[[JV1129]] - added
#[[JV1131]] - added
#[[JV1132]] - added
#[[JV1133]] - added
#[[JV1136]] - added
#[[JV1138]] - added
#[[JV1139]] - added
#[[JV1140]] - added
#[[JV1141]] - added
#[[JV1142]] - added
#[[JV1143]] - added
#[[JV1144]] - added
#[[JV1145]] - added
#[[JV1146]] - added
#[[JV1147]] - added
#[[JV1148]] - added
#[[JV1149]] - added
#[[JV1150]] - added
#[[JV1151]] - added
#[[JV1152]] - added
#[[JV1153]] - added
#[[JV1154]] - added
#[[JV1155]] - added
#[[JV1156]] - added
#[[JV1157]] - added
#[[JV1158]] - added
#[[JV1159]] - added
#[[JV1160]] - added
#[[JV1161]] - added
#[[JV1162]] - added
#[[JV1163]] - added
#[[JV1164]] - added
#[[JV1165]] - added
#[[JV1166]] - added
#[[JV1167]] - added
#[[JV1168]] - added
#[[JV1169]] - added
#[[JV1170]] - added
#[[JV1171]] - added
#[[JV1172]] - added
#[[JV1173]] - added
#[[JV1174]] - added
#[[JV1175]] - added
#[[JV1176]] - added
#[[JV1177]] - added
#[[JV1178]] - added
#[[JV1179]] - added
#[[JV1180]] - added
#[[JV1181]] - added
#[[JV1182]] - added
#[[JV1183]] - added
#[[JV1184]] - added
#[[JV1185]] - added
#[[JV1186]] - added
#[[JV1187]] - added
#[[JV1188]] - added
#[[JV1189]] - added
#[[JV1190]] - added
#[[JV1191]] - added
#[[JV1192]] - added
#[[JV1193]] - added
#[[JV1194]] - added
#[[JV1195]] - added
#[[JV1196]] - added
#[[JV1197]] - added
#[[JV1198]] - added
#[[JV1199]] - added
#[[JV1200]] - added
#[[JV1201]] - added
#[[JV1202]] - added
#[[JV1203]] - added
#[[JV1204]] - added
#[[JV1205]] - added
#[[JV1206]] - added
#[[JV1207]] - added
#[[JV1208]] - added
#[[JW0227-1]] - added
#[[JW0303-1]] - added
#[[JW0449-5]] - added
#[[JW0462-1]] - added
#[[JW0598-2]] - added
#[[JW0733]] - added
#[[JW0742]] - added
#[[JW0742-1]] - added
#[[JW0864-1]] - added
#[[JW0915-1]] - added
#[[JW0985-2]] - added
#[[JW1500-2]] - added
#[[JW1500-2A]] - added
#[[JW1501-1]] - added
#[[JW1555-2]] - added
#[[JW1648-1]] - added
#[[JW2507-1]] - added
#[[JW2990-2]] - added
#[[JW3389-1]] - added
#[[JW3526-3]] - added
#[[JW3663-1]] - added
#[[JW3664-1]] - added
#[[JW3702-1]] - added
#[[JW3823-1]] - added
#[[JW3879-1]] - added
#[[JW3933-3]] - added
#[[JW4178-3]] - added
#[[JW4217-6]] - added
#[[JW5312-3]] - added
#[[K165]] - added
#[[KL304]] - added
#[[KM22]] - added
#[[KM32]] - added
#[[KS272]] - added
#[[KV1605]] - added
#[[LC5RT]] - added
#[[LE392]] - added
#[[LT2]] - added
#[[M26]] - added
#[[MC1000]] - added
#[[MC1000 clpB::Km]] - added
#[[MC4100 hns::neo]] - added
#[[MC4100 relA+ ΔmazEF]] - added
#[[MC4100 relA+ ΔmazEF Δ//pcm//]] - added
#[[MC4100 relA+ wt]] - added
#[[MC4100λ]] - added
#[[MG1]] - added
#[[MG1655]] - added
#[[MG1655 ΔIS1]] - added
#[[MG1655 ΔIS1 Δpcm]] - added
#[[MG1655A]] - added
#[[MGAY]] - added
#[[MP180]] - added
#[[MS40]] - added
#[[MS41]] - added
#[[MS60]] - added
#[[MS63]] - added
#[[MST1]] - added
#[[MST10]] - added
#[[MST100]] - added
#[[MST1024]] - added
#[[MST1028]] - added
#[[MST1063]] - added
#[[MST12]] - added
#[[MST1282]] - added
#[[MST13]] - added
#[[MST14]] - added
#[[MST1599]] - added
#[[MST1805]] - added
#[[MST1933]] - added
#[[MST2]] - added
#[[MST2027]] - added
#[[MST2179]] - added
#[[MST2185]] - added
#[[MST2192]] - added
#[[MST2196]] - added
#[[MST220]] - added
#[[MST2243]] - added
#[[MST2250]] - added
#[[MST2253]] - added
#[[MST2254]] - added
#[[MST2256]] - added
#[[MST2260]] - added
#[[MST2277]] - added
#[[MST2278]] - added
#[[MST2288]] - added
#[[MST2293]] - added
#[[MST2308]] - added
#[[MST2313]] - added
#[[MST2330]] - added
#[[MST2332]] - added
#[[MST2334]] - added
#[[MST2335]] - added
#[[MST2336]] - added
#[[MST2337]] - added
#[[MST2338]] - added
#[[MST2339]] - added
#[[MST2343]] - added
#[[MST251]] - added
#[[MST267]] - added
#[[MST268]] - added
#[[MST272]] - added
#[[MST297]] - added
#[[MST298]] - added
#[[MST300]] - added
#[[MST301]] - added
#[[MST4]] - added
#[[MST5]] - added
#[[MST508]] - added
#[[MST509]] - added
#[[MST6]] - added
#[[MST727]] - added
#[[MST730]] - added
#[[MST746]] - added
#[[MST747]] - added
#[[MST8]] - added
#[[MST818]] - added
#[[MST887]] - added
#[[NK6024]] - added
#[[NK6732]] - added
#[[OD311]] - added
#[[RI89]] - added
#[[RJ1795]] - added
#[[RJ1800]] - added
#[[RM4606]] - added
#[[RO121]] - added
#[[S17-1λ-//pir//]] - added
#[[SC122]] - added
#[[SG22007]] - added
#[[SG935]] - added
#[[SHH31]] - added
#[[SM10λ-//pir//]] - added
#[[SS996]] - added
#[[SX1323]] - added
#[[SX1550]] - added
#[[SX1685]] - added
#[[TA4112]] - added
#[[TAM1]] - added
#[[TH1191]] - added
#[[TH1255]] - added
#[[TH1269]] - added
#[[TH1355]] - added
#[[TH1367]] - added
#[[TH331]] - added
#[[TH338]] - added
#[[TH339]] - added
#[[TH341]] - added
#[[TSM7]] - added
#[[TST1]] - added
#[[TT10917]] - added
#[[UM120]] - added
#[[UM122]] - added
#[[UM197]] - added
#[[UM2]] - added
#[[W1485]] - added
#[[W3350]] - added
#[[W3350-htpR(ts)]] - added
#[[XA21]] - added
#[[ZK1012]] - added
<<<
----
On 8/10/2018, 4:16:27 PM, BioChair loaded 445 tiddlers from
[[X:\Research\Research wiki\strains.html|X:\Research\Research wiki\strains.html]]:
<<<
#[[14028s]] - added
#[[2175S]] - added
#[[2381L]] - added
#[[4WT]] - added
#[[A33]] - added
#[[AB1157]] - added
#[[AF1]] - added
#[[AJ10]] - added
#[[BD1527]] - added
#[[BD170]] - added
#[[BL21]] - added
#[[BL21(DE3)]] - added
#[[BR3637]] - added
#[[BTI]] - added
#[[BTI 20K::pKG1]] - added
#[[BW20338]] - added
#[[BW22826]] - added
#[[BW25113]] - added
#[[BW25141]] - added
#[[BW26355]] - added
#[[BW7261]] - added
#[[CAG12147]] - added
#[[CAG481]] - added
#[[CAG510]] - added
#[[CAG603]] - added
#[[CAG604]] - added
#[[CC1024]] - added
#[[CC118λ]] - added
#[[CF1693]] - added
#[[CF1693*]] - added
#[[CG217]] - added
#[[CG218]] - added
#[[CG236]] - added
#[[CG247]] - added
#[[CL1010]] - added
#[[CL1020]] - added
#[[CL2010]] - added
#[[CL3010]] - added
#[[CL4010]] - added
#[[CSH101]] - added
#[[CSH102]] - added
#[[CSH103]] - added
#[[CSH104]] - added
#[[CSH105]] - added
#[[CSH106]] - added
#[[D1210]] - added
#[[D1210HP]] - added
#[[DA16]] - added
#[[DC1348]] - added
#[[DC271]] - added
#[[DC272]] - added
#[[DC430]] - added
#[[DH5α]] - added
#[[EM158]] - added
#[[EM258]] - added
#[[EM259]] - added
#[[EM383]] - added
#[[EMG2]] - added
#[[ES1301]] - added
#[[ES1481]] - added
#[[EWH110]] - added
#[[FP4102]] - added
#[[GD32]] - added
#[[GR756]] - added
#[[GS09]] - added
#[[GW8306]] - added
#[[HB101]] - added
#[[HMS174]] - added
#[[J01]] - added
#[[J02]] - added
#[[J04]] - added
#[[J05]] - added
#[[J06]] - added
#[[JC2926]] - added
#[[JC5519]] - added
#[[JC7623]] - added
#[[JI370]] - added
#[[JKI1200]] - added
#[[JKI2010]] - added
#[[JM103]] - added
#[[JM109]] - added
#[[JM83]] - added
#[[JR501]] - added
#[[JV1001]] - added
#[[JV1002]] - added
#[[JV1003]] - added
#[[JV1004]] - added
#[[JV1005]] - added
#[[JV1006]] - added
#[[JV1007]] - added
#[[JV1008]] - added
#[[JV1009]] - added
#[[JV1010]] - added
#[[JV1011]] - added
#[[JV1012]] - added
#[[JV1013]] - added
#[[JV1014]] - added
#[[JV1015]] - added
#[[JV1016]] - added
#[[JV1017]] - added
#[[JV1018]] - added
#[[JV1019]] - added
#[[JV1020]] - added
#[[JV1021]] - added
#[[JV1022]] - added
#[[JV1023]] - added
#[[JV1024]] - added
#[[JV1025]] - added
#[[JV1026]] - added
#[[JV1027]] - added
#[[JV1028]] - added
#[[JV1029]] - added
#[[JV1030]] - added
#[[JV1031]] - added
#[[JV1032]] - added
#[[JV1033]] - added
#[[JV1034]] - added
#[[JV1035]] - added
#[[JV1036]] - added
#[[JV1037]] - added
#[[JV1038]] - added
#[[JV1039]] - added
#[[JV1040]] - added
#[[JV1041]] - added
#[[JV1042]] - added
#[[JV1043]] - added
#[[JV1044]] - added
#[[JV1045]] - added
#[[JV1046]] - added
#[[JV1047]] - added
#[[JV1048]] - added
#[[JV1049]] - added
#[[JV1050]] - added
#[[JV1051]] - added
#[[JV1052]] - added
#[[JV1053]] - added
#[[JV1054]] - added
#[[JV1055]] - added
#[[JV1056]] - added
#[[JV1057]] - added
#[[JV1058]] - added
#[[JV1059]] - added
#[[JV1060]] - added
#[[JV1061]] - added
#[[JV1062]] - added
#[[JV1063]] - added
#[[JV1064]] - added
#[[JV1065]] - added
#[[JV1066]] - added
#[[JV1067]] - added
#[[JV1068]] - added
#[[JV1068A]] - added
#[[JV1069]] - added
#[[JV1070]] - added
#[[JV1071]] - added
#[[JV1072]] - added
#[[JV1073]] - added
#[[JV1074]] - added
#[[JV1075]] - added
#[[JV1076]] - added
#[[JV1077]] - added
#[[JV1080]] - added
#[[JV1081]] - added
#[[JV1082]] - added
#[[JV1083]] - added
#[[JV1084]] - added
#[[JV1085]] - added
#[[JV1086]] - added
#[[JV1087]] - added
#[[JV1088]] - added
#[[JV1089]] - added
#[[JV1090]] - added
#[[JV1091]] - added
#[[JV1092]] - added
#[[JV1093]] - added
#[[JV1094]] - added
#[[JV1095]] - added
#[[JV1096]] - added
#[[JV1097]] - added
#[[JV1098]] - added
#[[JV1099]] - added
#[[JV1100]] - added
#[[JV1101]] - added
#[[JV1102]] - added
#[[JV1103]] - added
#[[JV1104]] - added
#[[JV1105]] - added
#[[JV1106]] - added
#[[JV1107]] - added
#[[JV1108]] - added
#[[JV1109]] - added
#[[JV1110]] - added
#[[JV1111]] - added
#[[JV1112]] - added
#[[JV1113]] - added
#[[JV1114]] - added
#[[JV1115]] - added
#[[JV1116]] - added
#[[JV1117]] - added
#[[JV1118]] - added
#[[JV1119]] - added
#[[JV1120]] - added
#[[JV1121]] - added
#[[JV1122]] - added
#[[JV1123]] - added
#[[JV1124]] - added
#[[JV1125]] - added
#[[JV1126]] - added
#[[JV1127]] - added
#[[JV1128]] - added
#[[JV1129]] - added
#[[JV1131]] - added
#[[JV1132]] - added
#[[JV1133]] - added
#[[JV1136]] - added
#[[JV1138]] - added
#[[JV1139]] - added
#[[JV1140]] - added
#[[JV1141]] - added
#[[JV1142]] - added
#[[JV1143]] - added
#[[JV1144]] - added
#[[JV1145]] - added
#[[JV1146]] - added
#[[JV1147]] - added
#[[JV1148]] - added
#[[JV1149]] - added
#[[JV1150]] - added
#[[JV1151]] - added
#[[JV1152]] - added
#[[JV1153]] - added
#[[JV1154]] - added
#[[JV1155]] - added
#[[JV1156]] - added
#[[JV1157]] - added
#[[JV1158]] - added
#[[JV1159]] - added
#[[JV1160]] - added
#[[JV1161]] - added
#[[JV1162]] - added
#[[JV1163]] - added
#[[JV1164]] - added
#[[JV1165]] - added
#[[JV1166]] - added
#[[JV1167]] - added
#[[JV1168]] - added
#[[JV1169]] - added
#[[JV1170]] - added
#[[JV1171]] - added
#[[JV1172]] - added
#[[JV1173]] - added
#[[JV1174]] - added
#[[JV1175]] - added
#[[JV1176]] - added
#[[JV1177]] - added
#[[JV1178]] - added
#[[JV1179]] - added
#[[JV1180]] - added
#[[JV1181]] - added
#[[JV1182]] - added
#[[JV1183]] - added
#[[JV1184]] - added
#[[JV1185]] - added
#[[JV1186]] - added
#[[JV1187]] - added
#[[JV1188]] - added
#[[JV1189]] - added
#[[JV1190]] - added
#[[JV1191]] - added
#[[JV1192]] - added
#[[JV1193]] - added
#[[JV1194]] - added
#[[JV1195]] - added
#[[JV1196]] - added
#[[JV1197]] - added
#[[JV1198]] - added
#[[JV1199]] - added
#[[JV1200]] - added
#[[JV1201]] - added
#[[JV1202]] - added
#[[JV1203]] - added
#[[JV1204]] - added
#[[JV1205]] - added
#[[JV1206]] - added
#[[JV1207]] - added
#[[JV1208]] - added
#[[JW0227-1]] - added
#[[JW0303-1]] - added
#[[JW0449-5]] - added
#[[JW0462-1]] - added
#[[JW0598-2]] - added
#[[JW0733]] - added
#[[JW0742]] - added
#[[JW0742-1]] - added
#[[JW0864-1]] - added
#[[JW0915-1]] - added
#[[JW0985-2]] - added
#[[JW1500-2]] - added
#[[JW1500-2A]] - added
#[[JW1501-1]] - added
#[[JW1555-2]] - added
#[[JW1648-1]] - added
#[[JW2507-1]] - added
#[[JW2990-2]] - added
#[[JW3389-1]] - added
#[[JW3526-3]] - added
#[[JW3663-1]] - added
#[[JW3664-1]] - added
#[[JW3702-1]] - added
#[[JW3823-1]] - added
#[[JW3879-1]] - added
#[[JW3933-3]] - added
#[[JW4178-3]] - added
#[[JW4217-6]] - added
#[[JW5312-3]] - added
#[[K165]] - added
#[[KL304]] - added
#[[KM22]] - added
#[[KM32]] - added
#[[KS272]] - added
#[[KV1605]] - added
#[[LC5RT]] - added
#[[LE392]] - added
#[[LT2]] - added
#[[M26]] - added
#[[MC1000]] - added
#[[MC1000 clpB::Km]] - added
#[[MC4100 hns::neo]] - added
#[[MC4100 relA+ ΔmazEF]] - added
#[[MC4100 relA+ ΔmazEF Δ//pcm//]] - added
#[[MC4100 relA+ wt]] - added
#[[MC4100λ]] - added
#[[MG1]] - added
#[[MG1655]] - added
#[[MG1655 ΔIS1]] - added
#[[MG1655 ΔIS1 Δpcm]] - added
#[[MG1655A]] - added
#[[MGAY]] - added
#[[MP180]] - added
#[[MS40]] - added
#[[MS41]] - added
#[[MS60]] - added
#[[MS63]] - added
#[[MST1]] - added
#[[MST10]] - added
#[[MST100]] - added
#[[MST1024]] - added
#[[MST1028]] - added
#[[MST1063]] - added
#[[MST12]] - added
#[[MST1282]] - added
#[[MST13]] - added
#[[MST14]] - added
#[[MST1599]] - added
#[[MST1805]] - added
#[[MST1933]] - added
#[[MST2]] - added
#[[MST2027]] - added
#[[MST2179]] - added
#[[MST2185]] - added
#[[MST2192]] - added
#[[MST2196]] - added
#[[MST220]] - added
#[[MST2243]] - added
#[[MST2250]] - added
#[[MST2253]] - added
#[[MST2254]] - added
#[[MST2256]] - added
#[[MST2260]] - added
#[[MST2277]] - added
#[[MST2278]] - added
#[[MST2288]] - added
#[[MST2293]] - added
#[[MST2308]] - added
#[[MST2313]] - added
#[[MST2330]] - added
#[[MST2332]] - added
#[[MST2334]] - added
#[[MST2335]] - added
#[[MST2336]] - added
#[[MST2337]] - added
#[[MST2338]] - added
#[[MST2339]] - added
#[[MST2343]] - added
#[[MST251]] - added
#[[MST267]] - added
#[[MST268]] - added
#[[MST272]] - added
#[[MST297]] - added
#[[MST298]] - added
#[[MST300]] - added
#[[MST301]] - added
#[[MST4]] - added
#[[MST5]] - added
#[[MST508]] - added
#[[MST509]] - added
#[[MST6]] - added
#[[MST727]] - added
#[[MST730]] - added
#[[MST746]] - added
#[[MST747]] - added
#[[MST8]] - added
#[[MST818]] - added
#[[MST887]] - added
#[[NK6024]] - added
#[[NK6732]] - added
#[[OD311]] - added
#[[RI89]] - added
#[[RJ1795]] - added
#[[RJ1800]] - added
#[[RM4606]] - added
#[[RO121]] - added
#[[S17-1λ-//pir//]] - added
#[[SC122]] - added
#[[SG22007]] - added
#[[SG935]] - added
#[[SHH31]] - added
#[[SM10λ-//pir//]] - added
#[[SS996]] - added
#[[SX1323]] - added
#[[SX1550]] - added
#[[SX1685]] - added
#[[TA4112]] - added
#[[TAM1]] - added
#[[TH1191]] - added
#[[TH1255]] - added
#[[TH1269]] - added
#[[TH1355]] - added
#[[TH1367]] - added
#[[TH331]] - added
#[[TH338]] - added
#[[TH339]] - added
#[[TH341]] - added
#[[TSM7]] - added
#[[TST1]] - added
#[[TT10917]] - added
#[[UM120]] - added
#[[UM122]] - added
#[[UM197]] - added
#[[UM2]] - added
#[[W1485]] - added
#[[W3350]] - added
#[[W3350-htpR(ts)]] - added
#[[XA21]] - added
#[[ZK1012]] - added
<<<
----
On 8/10/2018, 4:09:18 PM, BioChair loaded 445 tiddlers from
[[X:\Research\Research wiki\strains.html|X:\Research\Research wiki\strains.html]]:
<<<
#[[14028s]] - added
#[[2175S]] - added
#[[2381L]] - added
#[[4WT]] - added
#[[A33]] - added
#[[AB1157]] - added
#[[AF1]] - added
#[[AJ10]] - added
#[[BD1527]] - added
#[[BD170]] - added
#[[BL21]] - added
#[[BL21(DE3)]] - added
#[[BR3637]] - added
#[[BTI]] - added
#[[BTI 20K::pKG1]] - added
#[[BW20338]] - added
#[[BW22826]] - added
#[[BW25113]] - added
#[[BW25141]] - added
#[[BW26355]] - added
#[[BW7261]] - added
#[[CAG12147]] - added
#[[CAG481]] - added
#[[CAG510]] - added
#[[CAG603]] - added
#[[CAG604]] - added
#[[CC1024]] - added
#[[CC118λ]] - added
#[[CF1693]] - added
#[[CF1693*]] - added
#[[CG217]] - added
#[[CG218]] - added
#[[CG236]] - added
#[[CG247]] - added
#[[CL1010]] - added
#[[CL1020]] - added
#[[CL2010]] - added
#[[CL3010]] - added
#[[CL4010]] - added
#[[CSH101]] - added
#[[CSH102]] - added
#[[CSH103]] - added
#[[CSH104]] - added
#[[CSH105]] - added
#[[CSH106]] - added
#[[D1210]] - added
#[[D1210HP]] - added
#[[DA16]] - added
#[[DC1348]] - added
#[[DC271]] - added
#[[DC272]] - added
#[[DC430]] - added
#[[DH5α]] - added
#[[EM158]] - added
#[[EM258]] - added
#[[EM259]] - added
#[[EM383]] - added
#[[EMG2]] - added
#[[ES1301]] - added
#[[ES1481]] - added
#[[EWH110]] - added
#[[FP4102]] - added
#[[GD32]] - added
#[[GR756]] - added
#[[GS09]] - added
#[[GW8306]] - added
#[[HB101]] - added
#[[HMS174]] - added
#[[J01]] - added
#[[J02]] - added
#[[J04]] - added
#[[J05]] - added
#[[J06]] - added
#[[JC2926]] - added
#[[JC5519]] - added
#[[JC7623]] - added
#[[JI370]] - added
#[[JKI1200]] - added
#[[JKI2010]] - added
#[[JM103]] - added
#[[JM109]] - added
#[[JM83]] - added
#[[JR501]] - added
#[[JV1001]] - added
#[[JV1002]] - added
#[[JV1003]] - added
#[[JV1004]] - added
#[[JV1005]] - added
#[[JV1006]] - added
#[[JV1007]] - added
#[[JV1008]] - added
#[[JV1009]] - added
#[[JV1010]] - added
#[[JV1011]] - added
#[[JV1012]] - added
#[[JV1013]] - added
#[[JV1014]] - added
#[[JV1015]] - added
#[[JV1016]] - added
#[[JV1017]] - added
#[[JV1018]] - added
#[[JV1019]] - added
#[[JV1020]] - added
#[[JV1021]] - added
#[[JV1022]] - added
#[[JV1023]] - added
#[[JV1024]] - added
#[[JV1025]] - added
#[[JV1026]] - added
#[[JV1027]] - added
#[[JV1028]] - added
#[[JV1029]] - added
#[[JV1030]] - added
#[[JV1031]] - added
#[[JV1032]] - added
#[[JV1033]] - added
#[[JV1034]] - added
#[[JV1035]] - added
#[[JV1036]] - added
#[[JV1037]] - added
#[[JV1038]] - added
#[[JV1039]] - added
#[[JV1040]] - added
#[[JV1041]] - added
#[[JV1042]] - added
#[[JV1043]] - added
#[[JV1044]] - added
#[[JV1045]] - added
#[[JV1046]] - added
#[[JV1047]] - added
#[[JV1048]] - added
#[[JV1049]] - added
#[[JV1050]] - added
#[[JV1051]] - added
#[[JV1052]] - added
#[[JV1053]] - added
#[[JV1054]] - added
#[[JV1055]] - added
#[[JV1056]] - added
#[[JV1057]] - added
#[[JV1058]] - added
#[[JV1059]] - added
#[[JV1060]] - added
#[[JV1061]] - added
#[[JV1062]] - added
#[[JV1063]] - added
#[[JV1064]] - added
#[[JV1065]] - added
#[[JV1066]] - added
#[[JV1067]] - added
#[[JV1068]] - added
#[[JV1068A]] - added
#[[JV1069]] - added
#[[JV1070]] - added
#[[JV1071]] - added
#[[JV1072]] - added
#[[JV1073]] - added
#[[JV1074]] - added
#[[JV1075]] - added
#[[JV1076]] - added
#[[JV1077]] - added
#[[JV1080]] - added
#[[JV1081]] - added
#[[JV1082]] - added
#[[JV1083]] - added
#[[JV1084]] - added
#[[JV1085]] - added
#[[JV1086]] - added
#[[JV1087]] - added
#[[JV1088]] - added
#[[JV1089]] - added
#[[JV1090]] - added
#[[JV1091]] - added
#[[JV1092]] - added
#[[JV1093]] - added
#[[JV1094]] - added
#[[JV1095]] - added
#[[JV1096]] - added
#[[JV1097]] - added
#[[JV1098]] - added
#[[JV1099]] - added
#[[JV1100]] - added
#[[JV1101]] - added
#[[JV1102]] - added
#[[JV1103]] - added
#[[JV1104]] - added
#[[JV1105]] - added
#[[JV1106]] - added
#[[JV1107]] - added
#[[JV1108]] - added
#[[JV1109]] - added
#[[JV1110]] - added
#[[JV1111]] - added
#[[JV1112]] - added
#[[JV1113]] - added
#[[JV1114]] - added
#[[JV1115]] - added
#[[JV1116]] - added
#[[JV1117]] - added
#[[JV1118]] - added
#[[JV1119]] - added
#[[JV1120]] - added
#[[JV1121]] - added
#[[JV1122]] - added
#[[JV1123]] - added
#[[JV1124]] - added
#[[JV1125]] - added
#[[JV1126]] - added
#[[JV1127]] - added
#[[JV1128]] - added
#[[JV1129]] - added
#[[JV1131]] - added
#[[JV1132]] - added
#[[JV1133]] - added
#[[JV1136]] - added
#[[JV1138]] - added
#[[JV1139]] - added
#[[JV1140]] - added
#[[JV1141]] - added
#[[JV1142]] - added
#[[JV1143]] - added
#[[JV1144]] - added
#[[JV1145]] - added
#[[JV1146]] - added
#[[JV1147]] - added
#[[JV1148]] - added
#[[JV1149]] - added
#[[JV1150]] - added
#[[JV1151]] - added
#[[JV1152]] - added
#[[JV1153]] - added
#[[JV1154]] - added
#[[JV1155]] - added
#[[JV1156]] - added
#[[JV1157]] - added
#[[JV1158]] - added
#[[JV1159]] - added
#[[JV1160]] - added
#[[JV1161]] - added
#[[JV1162]] - added
#[[JV1163]] - added
#[[JV1164]] - added
#[[JV1165]] - added
#[[JV1166]] - added
#[[JV1167]] - added
#[[JV1168]] - added
#[[JV1169]] - added
#[[JV1170]] - added
#[[JV1171]] - added
#[[JV1172]] - added
#[[JV1173]] - added
#[[JV1174]] - added
#[[JV1175]] - added
#[[JV1176]] - added
#[[JV1177]] - added
#[[JV1178]] - added
#[[JV1179]] - added
#[[JV1180]] - added
#[[JV1181]] - added
#[[JV1182]] - added
#[[JV1183]] - added
#[[JV1184]] - added
#[[JV1185]] - added
#[[JV1186]] - added
#[[JV1187]] - added
#[[JV1188]] - added
#[[JV1189]] - added
#[[JV1190]] - added
#[[JV1191]] - added
#[[JV1192]] - added
#[[JV1193]] - added
#[[JV1194]] - added
#[[JV1195]] - added
#[[JV1196]] - added
#[[JV1197]] - added
#[[JV1198]] - added
#[[JV1199]] - added
#[[JV1200]] - added
#[[JV1201]] - added
#[[JV1202]] - added
#[[JV1203]] - added
#[[JV1204]] - added
#[[JV1205]] - added
#[[JV1206]] - added
#[[JV1207]] - added
#[[JV1208]] - added
#[[JW0227-1]] - added
#[[JW0303-1]] - added
#[[JW0449-5]] - added
#[[JW0462-1]] - added
#[[JW0598-2]] - added
#[[JW0733]] - added
#[[JW0742]] - added
#[[JW0742-1]] - added
#[[JW0864-1]] - added
#[[JW0915-1]] - added
#[[JW0985-2]] - added
#[[JW1500-2]] - added
#[[JW1500-2A]] - added
#[[JW1501-1]] - added
#[[JW1555-2]] - added
#[[JW1648-1]] - added
#[[JW2507-1]] - added
#[[JW2990-2]] - added
#[[JW3389-1]] - added
#[[JW3526-3]] - added
#[[JW3663-1]] - added
#[[JW3664-1]] - added
#[[JW3702-1]] - added
#[[JW3823-1]] - added
#[[JW3879-1]] - added
#[[JW3933-3]] - added
#[[JW4178-3]] - added
#[[JW4217-6]] - added
#[[JW5312-3]] - added
#[[K165]] - added
#[[KL304]] - added
#[[KM22]] - added
#[[KM32]] - added
#[[KS272]] - added
#[[KV1605]] - added
#[[LC5RT]] - added
#[[LE392]] - added
#[[LT2]] - added
#[[M26]] - added
#[[MC1000]] - added
#[[MC1000 clpB::Km]] - added
#[[MC4100 hns::neo]] - added
#[[MC4100 relA+ ΔmazEF]] - added
#[[MC4100 relA+ ΔmazEF Δ//pcm//]] - added
#[[MC4100 relA+ wt]] - added
#[[MC4100λ]] - added
#[[MG1]] - added
#[[MG1655]] - added
#[[MG1655 ΔIS1]] - added
#[[MG1655 ΔIS1 Δpcm]] - added
#[[MG1655A]] - added
#[[MGAY]] - added
#[[MP180]] - added
#[[MS40]] - added
#[[MS41]] - added
#[[MS60]] - added
#[[MS63]] - added
#[[MST1]] - added
#[[MST10]] - added
#[[MST100]] - added
#[[MST1024]] - added
#[[MST1028]] - added
#[[MST1063]] - added
#[[MST12]] - added
#[[MST1282]] - added
#[[MST13]] - added
#[[MST14]] - added
#[[MST1599]] - added
#[[MST1805]] - added
#[[MST1933]] - added
#[[MST2]] - added
#[[MST2027]] - added
#[[MST2179]] - added
#[[MST2185]] - added
#[[MST2192]] - added
#[[MST2196]] - added
#[[MST220]] - added
#[[MST2243]] - added
#[[MST2250]] - added
#[[MST2253]] - added
#[[MST2254]] - added
#[[MST2256]] - added
#[[MST2260]] - added
#[[MST2277]] - added
#[[MST2278]] - added
#[[MST2288]] - added
#[[MST2293]] - added
#[[MST2308]] - added
#[[MST2313]] - added
#[[MST2330]] - added
#[[MST2332]] - added
#[[MST2334]] - added
#[[MST2335]] - added
#[[MST2336]] - added
#[[MST2337]] - added
#[[MST2338]] - added
#[[MST2339]] - added
#[[MST2343]] - added
#[[MST251]] - added
#[[MST267]] - added
#[[MST268]] - added
#[[MST272]] - added
#[[MST297]] - added
#[[MST298]] - added
#[[MST300]] - added
#[[MST301]] - added
#[[MST4]] - added
#[[MST5]] - added
#[[MST508]] - added
#[[MST509]] - added
#[[MST6]] - added
#[[MST727]] - added
#[[MST730]] - added
#[[MST746]] - added
#[[MST747]] - added
#[[MST8]] - added
#[[MST818]] - added
#[[MST887]] - added
#[[NK6024]] - added
#[[NK6732]] - added
#[[OD311]] - added
#[[RI89]] - added
#[[RJ1795]] - added
#[[RJ1800]] - added
#[[RM4606]] - added
#[[RO121]] - added
#[[S17-1λ-//pir//]] - added
#[[SC122]] - added
#[[SG22007]] - added
#[[SG935]] - added
#[[SHH31]] - added
#[[SM10λ-//pir//]] - added
#[[SS996]] - added
#[[SX1323]] - added
#[[SX1550]] - added
#[[SX1685]] - added
#[[TA4112]] - added
#[[TAM1]] - added
#[[TH1191]] - added
#[[TH1255]] - added
#[[TH1269]] - added
#[[TH1355]] - added
#[[TH1367]] - added
#[[TH331]] - added
#[[TH338]] - added
#[[TH339]] - added
#[[TH341]] - added
#[[TSM7]] - added
#[[TST1]] - added
#[[TT10917]] - added
#[[UM120]] - added
#[[UM122]] - added
#[[UM197]] - added
#[[UM2]] - added
#[[W1485]] - added
#[[W3350]] - added
#[[W3350-htpR(ts)]] - added
#[[XA21]] - added
#[[ZK1012]] - added
<<<
----
On 3/13/2018, 8:43:07 AM, JV loaded 1 tiddlers from
[[x:\Projects\2018 research wiki\refs.htm|x:\Projects\2018 research wiki\refs.htm]]:
<<<
#[[Visick1998a]] - added
<<<
----
On 3/13/2018, 8:42:15 AM, JV loaded 1 tiddlers from
[[x:\Projects\2018 research wiki\refs.htm|x:\Projects\2018 research wiki\refs.htm]]:
<<<
#[[Visick1998a]] - added
<<<
!!!Macros
Place macros for buttons at the top of the index panel between the dashed lines
-----
<<newTiddler>>
<<slider chkSliderOptionsPanel OptionsPanel 'options »' Advanced options'>>
<<closeAll>>
<<search>>
-----
!!!Tabs
format: {{{|name|+tag,-tag|}}}; use +all to match all
|Config|+systemConfig,+config|
|Scripts|+script|
|Text|+text|
|Protocols|+protocol|
|Recipes|+recipe|
|Images|+image,+icon|
|Data|+data|
|Strains|+strain|
|Other|+all,-systemConfig,-config,-plugin,-system,-setup-image,-icon,-data,-script,-text,-protocol,-recipe,-strain|
|System|+setup,+system|
|Plugins|+plugin|
/***
|Name|InlineJavascriptPlugin|
|Source|http://www.TiddlyTools.com/#InlineJavascriptPlugin|
|Documentation|http://www.TiddlyTools.com/#InlineJavascriptPluginInfo|
|Version|1.9.5|
|Author|Eric Shulman - ELS Design Studios|
|License|http://www.TiddlyTools.com/#LegalStatements <br>and [[Creative Commons Attribution-ShareAlike 2.5 License|http://creativecommons.org/licenses/by-sa/2.5/]]|
|~CoreVersion|2.1|
|Type|plugin|
|Requires||
|Overrides||
|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(/^#/,'')); } }
//}}}
This page introduces isoaspartyl damage to proteins and how it is repaired by PCM, the repair enzyme our laboratory studies.
''Isoaspartyl protein damage'' is the specific form of covalent protein damage that our lab studies. [G[Aspartate|asp]] (Asp) and [G[asparagine|asn]] (Asn), two of the 20 different amino acids that make up proteins, are especially [G[labile]] and can spontaneously isomerize to form [G[isoaspartate|isoasp]] (isoAsp). This chemical reaction does not affect free amino acids, but can happen when Asp or Asn is part of a protein chain—i.e., an aspartyl or asparaginyl residue. As shown below, the nitrogen in the peptide backbone (shown in blue) next to an Asp or Asn can attack the side-chain carbonyl carbon, forming a 5-member succinimide ring.[R[Geiger1987]] Asn is [G[deamidated|deamination]] (loses an NH~~3~~) in the process.
[image[Formation of succinimide from an Asp or Asn|images/text/succinimide.jpg]]
[G[Hydrolysis]] of this unstable succinimide intermediate occurs rapidly. As shown below, hydrolysis can occur on either side of the nitrogen in the succinimide ring. Hydrolysis on one side produces a normal Asp (Asn cannot be regenerated, due to the deamidation). Hydrolysis on the other side (which is favored by about 3:1) produces isoaspartate.
[image[Hydrolysis of succinimide to form Asp or isoAsp|images/text/hydrolysis.gif]]
''Isoaspartate impairs protein activity'' in at least three ways:[R[Clarke2003]]
#The original Asp or Asn may have been located at the active site or another location crucial to the function of the protein; the difference in structure (and charge, for Asn) at this site could disrupt function.
#The original Asp or Asn may have been critical for the protein's 3D structure, so that [G[conformational damage]] results.
#Notice that the peptide backbone (blue in the figure) now goes through what was previously the side-chain carbon; this "kink" could also disrupt protein structure.
The rate of isoAsp formation in histones of cultured mammalian cells is estimated at 1% of Asp and Asn per day,[R[Young2001]] and the damage rate increases with aging.[R[Barber1983]] Thus, this form of covalent damage could have serious consequences—especially for aging or nutrient-limited cells where protein turnover is restricted. Indeed, negative effects of isoAsp damage have been demonstrated //[G[in vitro]]// for a variety of proteins,[R[Clarke2003]] including calmodulin, calbindin, epidermal growth factor, histones, ribosomal proteins, tubulin and synapsin. Furthermore, connections have been identified between isoAsp damage and longevity,[R[Kim1997]] β-amyloid formation in Alzheimer's disease,[R[Lowenson1994]] autoimmune responses,[R[Doyle2003,Mamula1999]] hereditary spherocytosis[R[Ingrosso1995]] and other diseases (see [[PCM in Aging and Disease]] for more detail).
''Repair of isoaspartyl damage''. Isoaspartyl damage occurring spontaneously and accumulating over time could reduce protein function sufficiently that a cell could no longer carry out its normal activities. However, isoAsp can be readily recognized as a site of damage, because this amino acid is normally not found in proteins. The L-isoaspartyl __p__rotein __c__arboxyl __m__ethyltransferase (PCM for short; also known as PCMT in mammals and PIMT in some other organisms), is an enzyme capable of specifically recognizing and repairing isoAsp in proteins.[R[Geiger1987,McFadden1987]] This enzyme is nearly universal in the living world, having been found in bacteria, nematodes, insects, plants, mammals and humans.[R[Kagan1997]]
<html><video src="images/video/pcm_anim.mp4" height="209" width="300" class="animbox right" controls>HTML5 Video is required to view this animation</video></html>
''PCM'' specifically methylates isoAsp residues (shown in the figure below and the video at right) by transferring a methyl (CH~~3~~) group from S-adenosylmethionine ([G[SAM]]),[R[McFadden1987]] converting SAM to [G[SAH]]. The methylated isoAsp readily re-forms the unstable succinimide intermediate, which can again be hydrolyzed into either normal Asp or isoAsp. The net result (perhaps requiring multiple rounds of methylation and hydrolysis) is repair of isoAsp to normal Asp. In eukaryotes, PCM also recognizes and repairs D-aspartyl residues resulting from [G[racemization]] of the succinimide.
[image[Repair of an isoaspartyl by PCM|images/text/pcmrepair.gif]]
''Fountain of youth?'' Protein function can be restored or improved when PCM is allowed to repair damaged proteins,[R[Clarke2003]] suggesting the potential importance of PCM for aging cells that may accumulate isoAsp damage over time. Several lines of evidence support the idea that PCM is an important cellular defense against aging:
*Mice lacking PCM have an average lifespan of only 42 days and die of seizures resembling epilepsy.[R[Kim1997]]
*Plants activate PCM synthesis in response to stress and during seed formation; long-lived seeds have high levels of PCM.[R[Mudgett1994]]
*Increased PCM expression in //Drosophila// subjected to heat stress improves their longevity.[R[Chavous2001]]
*Bacteria[R[Visick1998]] and nematodes[R[Kagan1997]] require PCM to survive stress during periods of low metabolic activity.
PCM-mediated repair also appears to play a key role in protection from other degenerative disorders.
|frontiers_in_microbiology|Frontiers Microbiol.|
|current_biology_:_cb|Curr. Biol.|
|biochimica_et_biophysica_acta|Biochim. Biophys. Acta|
|the_journal_of_biological_chemistry|J. Biol. Chem.|
|fems_microbiology_letters|FEMS Microbiol. Lett.|
|acta_crystallographica._section_f,_structural_biology_and_crystallization_communications|Acta Crystallog.|
|plos_one|PloS One|
|environmental_microbiology|Environ. Microbiol.|
|journal_of_pharmaceutical_and_biomedical_analysis|J. Pharm. Biomed. Anal.|
|journal_of_bacteriology|J. Bacteriol.|
|trends_in_microbiology|Trends Microbiol.|
|molecular_systems_biology|Mol. Systems Biol.|
|science_(new_york,_n.y.)|Science|
|nature_reviews._microbiology|Nat. Rev. Microbiol.|
|the_embo_journal| EMBO J.|
|the_journals_of_gerontology._series_a,_biological_sciences_and_medical_sciences|J. Gerontol.|
|gene|Gene|
|molecular_microbiology|Mol. Microbiol.|
|journal_of_molecular_biology|J. Mol. Biol.|
|international_journal_of_food_microbiology|Int. J. Food Microbiol.|
|annual_review_of_microbiology|Ann. Rev. Microbiol.|
|proceedings_of_the_national_academy_of_sciences_of_the_united_states_of_america|Proc. Natl. Acad. Sci. USA|
|microbiology_(reading,_england)|Microbiol.|
|protein_engineering,_design_&_selection_:_peds|Protein Eng. Design Sel.|
|current_topics_in_medicinal_chemistry|Curr. Topics Med. Chem.|
|journal_of_structural_biology|J. Structural Biol.|
|nucleic_acids_research|Nucl. Acids Res.|
|biotechniques|BioTechniques|
|biotechnology_annual_review|Biotechnol. Ann. Rev.|
|cellular_signalling|Cell. Signalling|
|scientific_reports|Sci. Rep.|
|the_biochemical_journal|Biochem. J.|
|methods_in_enzymology|Meth. Enzymol.|
|analytical_biochemistry|Anal. Biochem.|
|current_opinion_in_microbiology|Curr. Opinion Microbiol.|
|biogerontology|Biogerontol.|
|protein_science_:_a_publication_of_the_protein_society|Protein Sci.|
|biochemical_and_biophysical_research_communications|Biochem. Biophys. Res. Commun.|
|journal_of_neurochemistry|J. Neurochem.|
|cell|Cell|
|sub-cellular_biochemistry|Sub-cellular Biochem.|
|free_radical_biology_&_medicine|Free Radical Biol. Med.|
|journal_of_microbiological_methods|J. Microbiol. Meth.|
|biological_chemistry|Biol. Chem.|
|annals_of_the_new_york_academy_of_sciences|Annals N. Y. Acad. Sci.|
|journal_of_applied_microbiology|J. Appl. Microbiol.|
|proceedings_of_the_national_conference_on_undergraduate_research_2015|Proc. Natl. Conf. Undergrad. Res.|
|journal_of_protein_chemistry|J. Protein Chem.|
|cellular_and_molecular_life_sciences_:_cmls|Cell. Mol. Life Sci.|
|journal_of_the_american_society_for_mass_spectrometry|J. Am. Soc. Mass Spectrom.|
|plos_genetics|PLoS Genetics|
|applied_and_environmental_microbiology|Appl. Environ. Microbiol.|
|biochemistry|Biochem.|
|analytical_chemistry|Anal. Chem.|
|the_journal_of_neuropsychiatry_and_clinical_neurosciences|J. Neuropsych. Clin. Neurosci.|
|molecular_cell|Mol. Cell|
|journal_of_molecular_evolution|J. Mol. Evol.|
|annual_review_of_biochemistry|Ann. Rev. Biochem.|
|iubmb_life|IUBMB Life|
|molecular_aspects_of_medicine|Mol. Aspects Med.|
|the_journal_of_experimental_medicine|J. Exper. Med.|
|fundamentals_of_medical_cell_biology|Fund. Med. Cell Biol.|
|stability_of_protein_pharmaceuticals,_part_a:_chemical_and_physical_pathways_of_protein_degradation|Stabil. Protein Pharm.|
|ageing_research_reviews|Ageing Res. Rev.|
|matrix_biology_:_journal_of_the_international_society_for_matrix_biology|Matrix Biol.|
|cell_host_&_microbe|Cell Host Microbe|
|plos_computational_biology|PLoS Computational Biol.|
|journal_of_cell_science|J. Cell Sci.|
|genetics|Genetics|
|neurochemistry_international|Neurochem. Int.|
|journal_of_bioscience_and_bioengineering|J. Biosci. Bioeng.|
|archives_of_biochemistry_and_biophysics|Arch. Biochem. Biophys.|
|comparative_biochemistry_and_physiology._part_b,_biochemistry_&_molecular_biology|Comp. Biochem. Physiol.|
|plos_biology|PLoS Biol.|
|journal_of_human_genetics|J. Human Genet.|
|embo_reports|EMBO Rep.|
|current_aging_science|Curr. Aging Sci.|
|current_opinion_in_microbiology|Curr. Opin. Microbiol.|
|the_plant_journal_:_for_cell_and_molecular_biology| Plant J.|
|infection_and_immunity|Infect. Immun.|
|journal_of_immunology_(baltimore,_md._:_1950)|J. Immunol.|
|nature_reviews._molecular_cell_biology|Nat. Rev. Mol. Cell Biol.|
|current_topics_in_cellular_regulation|Curr. Topics Cell. Reg.|
|water_research|Water Res.|
|genes_&_development|Genes Devel.|
|applied_biochemistry_and_biotechnology|Appl. Biochem. Biotechnol.|
|applied_microbiology_and_biotechnology|Appl. Microbiol. Biotechnol.|
|microbial_cell_factories|Microbial Cell Fact.|
|prion|Prion|
|cell_biochemistry_and_biophysics|Cell Biochem. Biophys.|
|journal_of_molecular_neuroscience_:_mn|J. Mol. Neurosci.|
|aging_cell|Aging Cell|
|the_journal_of_comparative_neurology|J. Comp. Neurol.|
|journal_of_the_royal_society,_interface_/_the_royal_society|J. Royal Soc.|
|bmc_microbiology|BMC Microbiol.|
|nature_biotechnology|Nature Biotechnol.|
|experimental_gerontology|Experimental Gerontol.|
|annual_review_of_genomics_and_human_genetics|Ann. Rev. Genomics Human Genet.|
|folding_&_design|Folding Des.|
|methods_in_molecular_biology_(clifton,_n.j.)|Meth.s Mol. Biol.|
|journal_of_biochemistry|J. Biochem.|
|amino_acids|Amino Acids|
|antimicrobial_agents_and_chemotherapy|Antimicrobial Agents Chemother.|
|chemistry_&_biodiversity|Chem. Biodiversity|
|modification_of_proteins_during_aging|Mod. Proteins During Aging|
|nature|Nature|
|developmental_biology|Devel. Biol.|
|autophagy|Autophagy|
|aging|Aging|
|oncology_letters|Oncol. Lett.|
|annual_review_of_genetics|Ann. Rev. Genet.|
|autoimmunity_reviews|Autoimmunity Rev.|
|springerplus|SpringerPlus|
|cellular_and_molecular_life_sciences_:_cmls|Cell. Mol. Life Sci.|
|mechanisms_of_ageing_and_development|Mech. Ageing Devel.|
|nature_reviews_microbiology|Nat. Rev. Microbiol.|
|trends_in_microbiology|Trends Microbiol.|
|trends_in_biochemical_sciences|Trends Biochem. Sci.|
|microbial_biotechnology|Microbial Biotechnol.|
|microbes_and_infection_/_institut_pasteur|Microbes Infection|
|bioinformatics_(oxford,_england)|Bioinformatics|
|european_journal_of_biochemistry_/_febs|FEBS|
|microbiology_and_immunology|Microbiol. Immunol.|
|diabetologia|Diabetol.|
|journal_of_biosciences|J. Biosci.|
|journal_of_molecular_microbiology_and_biotechnology|J. Mol. Microbiol. Biotechnol.|
|applied_microbiology_and_biotechnology|Appl. Microbiol. Biotechnol.|
|bioscience,_biotechnology,_and_biochemistry|Biosci. Biotechnol. Biochem.|
|f1000research|F1000Research|
|journal_of_hepatology|J. Hepatol.|
|world_journal_of_gastroenterology_:_wjg|World J. Gastroenterol..|
|biochemical_and_biophysical_research_communications|Biochem. Biophys. Res. Commun.|
|international_journal_of_medical_microbiology_:_ijmm|Int. J. Med. Microbiol.|
|research_in_microbiology|Res. Microbiol.|
|organic_letters|Organic Lett.|
|experimental_cell_research|Exper. Cell Res.|
|biochemistry_and_cell_biology_=_biochimie_et_biologie_cellulaire|Biochem. Cell Biol.|
|brain_research._molecular_brain_research|Brain Res.|
|nature_structural_biology|Nat. Struct. Biol.|
|journal_of_biochemistry_and_molecular_biology|J. Biochem. Mol. Biol.|
|nature_communications|Nat. Commun.|
|science_of_aging_knowledge_environment_:_sage_ke|Sci. Aging Knowledge Environ.|
|microbe|Microbe|
|the_journal_of_antimicrobial_chemotherapy|J. Antimicrobial Chemother.|
|biochemical_society_transactions|Biochem. Soc. Trans.|
|gerontology|Gerontol.|
|trends_in_cardiovascular_medicine|Trends Cardiovascular Med.|
|genomics|Genomics|
|science_progress|Sci. Prog.|
|proceedings_of_the_national_academy_of_sciences,_usa|Proc. Natl. Acad. Sci. USA|
|rejuvenation_research|Rejuvenation Res.|
|plant_molecular_biology|Plant Mol. Biol.|
|plant_physiology|Plant Physiol.|
|fems_microbiology_ecology|FEMS Microbiol. Ecol.|
|genes_to_cells_:_devoted_to_molecular_&_cellular_mechanisms|Genes Cells|
|fems_microbiology_reviews|FEMS Microbiol. Rev.|
|the_plant_cell| Plant Cell|
|biosensors_&_bioelectronics|Biosensors Bioelectron.|
|methods_(san_diego,_calif.)|Methods|
|acta_crystallographica._section_d,_biological_crystallography|Acta Crystallog.|
|biopolymers|Biopolymers|
|asm_news|ASM News|
|philosophical_transactions_of_the_royal_society_of_london._series_b,_biological_sciences|Phil. Trans. Royal Soc.|
|fems_yeast_research|FEMS Yeast Res.|
|cellular_regulation_and_malignant_growth|Cellular Reg. Malig. Growth|
|journal_of_pharmaceutical_sciences|J. Pharm. Sci.|
|dna_and_cell_biology|DNA Cell Biol.|
|the_febs_journal| FEBS J.|
|the_journal_of_clinical_investigation|J. Clin. Invest.|
|journal_of_the_american_society_of_nephrology_:_jasn|J. Am. Soc. Nephrol.|
|journal_of_nephrology|J. Nephrol.|
|canadian_journal_of_microbiology|Can. J. Microbiol.|
|acta_naturae|Acta Naturae|
|frontiers_in_cellular_and_infection_microbiology|Front. Cell. Infect. Microbiol.|
|biotechnology_letters|Biotechnol. Let.|
|aaps_pharmscitech|AAPS PharmSciTech|
|fertility_and_sterility|Fertility Sterility|
|investigative_ophthalmology_&_visual_science|Invest. Ophthalmol. Visual Sci.|
|neurobiology_of_aging|Neurobiol. Aging|
|research_in_microbiology|Res. Microbiol.|
|critical_reviews_in_microbiology|Crit. Rev. Microbiol.|
|microbiology|Microbiol.|
|international_journal_of_legal_medicine|Int. J. Legal Med.|
|current_topics_in_cellular_regulation|Curr. Topics Cell Reg.|
|molecular_basis_of_aging|Mol. Basis Aging|
|ecology_letters|Ecol. Lett.|
|age_(dordrecht,_netherlands)|Age|
|microbiological_reviews|Microbiol. Rev.|
|journal_of_biotechnology|J. Biotechnol.|
|trends_in_biochemical_sciences|Trends Biochem. Sci.|
|mbio|MBio|
|journal_of_bone_and_mineral_research_:_the_official_journal_of_the_american_society_for_bone_and_mineral_research|J. Bone Mineral Res.|
|proteins|Proteins|
|biological_&_pharmaceutical_bulletin|Biol. Pharm. Bull.|
|trends_in_biotechnology|Trends Biotechnol.|
|cell_stress_&_chaperones|Cell Stress Chaperones|
|pharmaceutical_research|Pharm. Res.|
|basic_life_sciences|Basic Life Sci.|
|journal_of_gerontology|J. Gerontol.|
|exs|EXS|
|molecular_and_cellular_biochemistry|Mol. Cell. Biochem.|
|advances_in_protein_chemistry|Adv. Protein Chem.|
|briefings_in_bioinformatics|Briefings Bioinform.|
|molecular_ecology|Mol. Ecol.|
|febs_letters|FEBS Lett.|
|antioxidants_&_redox_signaling|Antiox. Redox Signal.|
|international_journal_of_peptide_and_protein_research|Int. J. Peptide Protein Res.h|
|trends_in_biotechnology|Trends Biotechnol.|
|biochimie|Biochimie|
|rna_biology|RNA Biol.|
|genes_&_nutrition|Genes Nutrition|
|msystems|mSystems|
|microbiology_and_molecular_biology_reviews_:_mmbr|Microbiol. Mol. Biol. Rev.|
|journal_of_theoretical_biology|J. Theoretical Biol.|
|the_journal_of_neuroscience_:_the_official_journal_of_the_society_for_neuroscience|J. Neurosci.|
|international_journal_of_cardiology|International J. Cardiol.|
|electrophoresis|Electrophoresis|
|journal_of_proteome_research|J. Proteome Res.|
|critical_reviews_in_biochemistry_and_molecular_biology|Crit. Rev. Biochem. Mol. Biol.|
|microbiology_and_molecular_biology_reviews_:_mmbr|Microbiol. Mol. Biol. Rev.|
|current_alzheimer_research|Curr. Alzheimer Res.|
|molecular_pharmaceutics|Mol. Pharm.|
|biochemical_pharmacology|Biochem. Pharmacol.|
|journal_of_structural_and_functional_genomics|J. Struct. Func. Genom.|
Autoclave first 6 ingredients in water; just before use, add 10 μl thiamine and 0.5 ml glucose per 10 ml medium
Dissolve in about 90 ml of dH~~2~~O, bring to final volume, and autoclave
Dissolve in about 80% of final volume of dH~~2~~O, bring to final volume and autoclave
Dissolve in dH~~2~~O and bring to final volume
*[[Index of Keio collection strains|docs/keio collection index.xls]]
*[[Keio collection primers|docs/keio collection primers.xls]]
#Measure dry ingredients and place in a media flask with a volume at least twice the total volume of medium to be made.
#Add appropriate volume of dH~~2~~O and swirl to mix. (No need to add a stir bar or dissolve completely.)
#Cover with foil, add a square of autoclave tape and autoclave 20 min. at 15 psi. Mix well after autoclaving. (See protocol for [[pouring plates]].)
#After use, rinse media flask 3× with tap water and 3× with dH~~2~~O and return to shelf. No dishwashing.
#Measure dry ingredients and place in a media flask with a volume at least twice the total volume of medium to be made.
#Add appropriate volume of dH~~2~~O and swirl to mix. (No need to add a stir bar or dissolve completely.)
#Cover with foil, add a square of autoclave tape and autoclave 20 min. at 15 psi. (See protocol for [[pouring plates]].)
#After use, rinse media flask 3× with tap water and 3× with dH~~2~~O and return to shelf. No dishwashing.
#Measure dry ingredients and place in a media flask with a volume at least twice the total volume of medium to be made.
#Add appropriate volume of dH~~2~~O and swirl to mix. (No need to add a stir bar or dissolve completely.)
#Cover with foil, add a square of autoclave tape and autoclave 20 min. at 15 psi. (See protocol for [[pouring plates]].)
#After use, rinse media flask 3× with tap water and 3× with dH~~2~~O and return to shelf. No dishwashing.
Dissolve in dH~~2~~O and autoclave (or filter-sterilize small concentrations).
Ligase at a concentration of 0.1 u/μl is stable for 3 months at -20°C in this buffer. Store buffer at -20°C until use, then use to dilute a small amount of ligase for short-term use.
<script>
// get the name of the list tiddler and use it to determine what tiddlers should be listed and what is indexed
var listTid = story.findContainingTiddler(place).getAttribute("tiddler");
if ( listTid == "ListMaker" ) { return false; }
var tags = store.getValue(listTid,"list").split(",");
var tids = [];
for ( var i=0; i<tags.length; i++ ) {
var temp = store.getTaggedTiddlers(tags[i]);
tids = tids.concat(temp);
}
// get category or categories to include in indexes; if no categories, assume alpha
// find the most recent method and re-use it or set to first method if none
var cats = store.getValue(listTid,"cats").split(",");
if ( !cats ) { var cats = ["alpha"]; }
var method = store.getValue(listTid,"method");
if ( !method ) { method = cats[0]; store.setValue(listTid,"method",method); }
// for each category, make switch button if inactive
for ( var i=0; i<cats.length; i++ ) { if ( cats[i] != method ) { methodButton(listTid,cats[i]); } }
// make index buttons for active category
var index = createTiddlyElement(place,"div",null,"listindex");
var list = [];
if ( method == "alpha" ) {
index.classList += " alpha";
for ( var i=0; i<tids.length; i++ ) {
var match = tids[i].title.match(/^([a-zA-Z])/);
if ( match ) { var first = match[1].toUpperCase(); } else { var first = "#"; }
list.pushUnique(first);
}
}
else {
var field = method.replace(/[:].+/,"");
for ( var i=0; i<tids.length; i++ ) { list.pushUnique(tids[i].fields[field]); }
list.sort( function(a,b) { return a.localeCompare(b, undefined, { numeric:true, sensitivity:'base' }); });
}
var currentItem = store.getValue(listTid,"currentitem");
if ( !currentItem || currentItem == "" ) {
currentItem = list[0];
store.setValue(listTid,"currentitem",currentItem);
}
for ( var i=0; i<list.length; i++ ) {
var item = list[i];
var btn = createTiddlyButton(index,item,item,function(e){
store.setValue(this.listtid,"currentitem",this.item);
story.refreshTiddler(this.listtid,null,true);
},"indexButton",listTid+item);
btn.listtid = listTid;
btn.item = item;
if ( currentItem == item ) { btn.classList += " active"; }
}
// create text based on currentItem
var content = createTiddlyElement(place,"div",null,"listContent");
var ul = createTiddlyElement(content,"ul");
if ( field && field != method ) {
var srt = method.replace(/.+?[:]/,"");
tids.sort (function(a,b) { return a.fields[srt].localeCompare(b.fields[srt],undefined,{numeric:true,sensitivity:'base'}); });
}
else { tids.sort( function(a,b) { return a.title.localeCompare(b.title,undefined,{numeric:true,sensitivity:'base'}); }); }
for ( var i=0; i<tids.length; i++ ) {
if ( method == "alpha" ) {
var match = tids[i].title.match(/^([a-zA-Z])/);
if ( match ) { var first = match[1].toUpperCase(); } else { var first = "#"; }
}
else { var first = tids[i].fields[field]; }
if ( first == currentItem ) { listItem(tids[i],ul); }
}
function listItem(item,list) {
var li = createTiddlyElement(list,"li");
var sp = createTiddlyElement(li,"span");
switch( listTid ) {
case "Strains" :
wikify("[m[" + item.title + "]]",sp);
var desc = " (" + item.fields.box + "-" + item.fields.slot + ") - " + item.fields.geno;
wikify(desc,li);
li.className = "writesmall";
sp.className = "write1rem";
break;
default :
var link = createTiddlyLink(sp,item.title,false);
wikify(item.fields.displaytitle || item.title,link);
break;
}
}
function methodButton(tid,method) {
var tidId = "tiddler" + tid.replace(/\s/g,"_");
var loc = document.getElementById(tidId).getElementsByClassName("title")[0];
if ( method != "alpha" ) { var label = "List by " + method.replace(/[:].+/,""); }
else { var label = "Alphabetical list"; }
var mbtn = createTiddlyButton(loc,label,label,function(e){
store.setValue(tid,"method",method);
store.setValue(tid,"currentitem","");
story.closeTiddler(tid);
story.displayTiddler(null,tid);
return false;
},"switchButton",null);
return false;
}
function checkStrains() {
if ( !window.strainsLoaded ) { window.setTimeout(checkStrains(), 250); }
else { alert("got it!"); }
}
</script>
/***
|Name|ListboxPlugin|
|Source|http://www.TiddlyTools.com/#ListboxPlugin|
|Documentation|http://www.TiddlyTools.com/#ListboxPluginInfo|
|Version|1.4.1|
|Author|Eric Shulman|
|License|http://www.TiddlyTools.com/#LegalStatements|
|~CoreVersion|2.1|
|Type|plugin|
|Description|set custom field or tiddler tags by selecting from listbox/droplist|
The {{{<<select>>}}} macro allows you to set tiddler field values by selecting pre-configured values from a listbox/droplist control.
!!!!!Documentation
>see [[ListboxPluginInfo]]
!!!!!Revisions
<<<
2010.03.14 1.4.1 use filterTiddlers() instead of getTaggedTiddlers() - use MatchTagsPlugin for tag expressions
|please see [[ListboxPluginInfo]] for additional revision details|
2007.05.12 0.5.0 started
<<<
!!!!!Code
***/
//{{{
version.extensions.ListboxPlugin= {major: 1, minor: 4, revision: 1, date: new Date(2010,3,14)};
config.macros.select = {
tooltip: "select a value for %0@%1",
blankTooltip: "set %0@%1=[no value]",
valueTooltip: "set %0@%1=%2",
otherLabel: "other",
otherTooltip: "set %0@%1=[enter a value...]",
otherPrompt: "enter a value for '%0'",
editLabel: "edit list...",
editTooltip: "edit '%0' list definition (%1)",
changeMsg: "setting %0@%1=%2",
verbose: false,
hereKeyword: "here",
defaultTarget: "SiteFields",
handler:
function(place,macroName,params,wikifier,paramString,tiddler) {
// default to containing tiddler or "SiteFields" catch-all
var here=story.findContainingTiddler(place);
var targetID=here?here.getAttribute("tiddler"):this.defaultTarget;
// get field name and non-default target (if any)
var field=params.shift();
var pos=field.indexOf("@"); // if non-default target ("field@tiddler" syntax)
if(pos!=-1) { // split field into field and tiddlername.
if (field.substr(pos+1)!=this.hereKeyword) // "here" == use default target
targetID=field.substr(pos+1); // use different target tiddler
field=field.substr(0,pos);
}
if(!field || !field.length) return; // no field name... do nothing
if (field.substr(0,1)=="=") targetID="(system)"; // internal option value
var items=[]; var listsrc='';
var autosave=false; var allowBlank=false; var allowOther=false; var allowEdit=false;
var allowMultiple=false; var wikifyData=false; var rows=0; var width='';
var p=params.shift();
while (p) {
if (p.toLowerCase()=='autosave') // autosave on change
autosave=true;
else if (p.toLowerCase()=='allowblank') // add empty item
var allowBlank=true;
else if (p.toLowerCase()=='allowother') // add "other: ____" item
var allowOther=true;
else if (p.toLowerCase()=='allowedit') // add "edit list..." item
var allowEdit=true;
else if (p.toLowerCase()=='allowmultiple') // multi-select
var allowMultiple=true;
else if (p.startsWith('rows:')) // 0=autosize listbox, 1=droplist, n=listbox
var rows=p.substr(5);
else if (p.startsWith('width:')) // CSS width of list
var width=p.substr(6);
else if (p.startsWith('prompt:')) // prompt text (1st item in list)
var ptext=p.substr(7);
else if (p.substr(0,1)=="+"||p.substr(0,1)=="*") { // read HR-separated tiddler
var listsrc=p.substr(1);
var listtxt=store.getTiddlerText(listsrc,'');
var wikifyData=p.substr(0,1)=="*";
if (listtxt.length && wikifyData) // wikify source to handle macros/scripts
listtxt=this.getWikifiedData(listtxt);
if (listtxt.length)
items=items.concat(listtxt.split(listtxt.indexOf('\n----\n')!=-1?'\n----\n':'\n'));
}
else if (p.startsWith("=")) { // get items from tagged tiddlers
var filter=p.substr(1);
if (!filter.startsWith('[')) filter='[tag['+filter+']]';
var tids=store.filterTiddlers(filter);
for (var t=0; t<tids.length; t++) items.push(tids[t].title);
}
else { // param is item value or 'label=value'
var parts=p.split("=");
var label=parts[0]; var v=parts[1]?parts[1]:parts[0];
items.push(label+"="+v);
}
p=params.shift();
}
if (rows==1) allowMultiple=false; // droplist cannot do multi-select
if (tiddler && !story.isDirty(tiddler.title)) autosave=true; // tiddler is in VIEW mode, force autosave
this.render(createTiddlyElement(place,"span"), null,
targetID, field, ptext, items, listsrc, wikifyData,
rows, width, autosave, allowBlank, allowOther, allowEdit, allowMultiple);
store.addNotification(null,this.refresh); // syncs lists when tiddlers are changed
},
getWikifiedData: // wikify tiddler content, then extract text WITH newlines and HRs included
function(txt) {
var e=createTiddlyElement(document.body,"div"); wikify(txt,e);
var breaks=e.getElementsByTagName("br");
for (var b=0; b<breaks.length; b++) breaks[b].parentNode.insertBefore(document.createTextNode("\n"),breaks[b]);
var lines=e.getElementsByTagName("hr");
for (var l=0; l<lines.length; l++) lines[l].parentNode.insertBefore(document.createTextNode("----\n"),lines[l]);
var items=e.getElementsByTagName("li");
for (var i=0; i<items.length; i++) items[i].parentNode.insertBefore(document.createTextNode("\n"),items[i]);
var txt=getPlainText(e); removeNode(e); return txt;
},
refresh:
function (title) { // re-render dependent lists
var lists=document.getElementsByTagName('select');
for (var i=0; i<lists.length; i++) { var list=lists[i];
if (list.getAttribute('listsrc')!=title) continue; // no sync needed
var listtxt=store.getTiddlerText(list.getAttribute('listsrc')||'','');
if (listtxt.length && list.getAttribute("wikifyData")=="true")
listtxt=this.getWikifiedData(listtxt);
if (listtxt.length)
var items=listtxt.split(listtxt.indexOf('\n----\n')!=-1?'\n----\n':'\n');
config.macros.select.render(list.parentNode, list,
list.getAttribute('tiddler'),
list.getAttribute('edit'),
list.getAttribute('ptext'),
items||[],
list.getAttribute('listsrc'),
list.getAttribute("wikifyData")=="true",
list.getAttribute("rows"),
list.getAttribute("width"),
list.getAttribute("autosave")=="true",
list.getAttribute("allowBlank")=="true",
list.getAttribute("allowOther")=="true",
list.getAttribute("allowEdit")=="true",
list.getAttribute("allowMultiple")=="true");
}
},
render:
function (place, here, targetID, field, ptext, items, listsrc, wikifyData,
rows, width, autosave, allowBlank, allowOther, allowEdit, allowMultiple) {
var values=[]; var opts=[];
// use current selection(s) (if any) (except for "edit list..." item)
if (here) for (var i=0; i<here.options.length; i++) {
var opt=here.options[i];
if (opt.selected && opt.text!=config.macros.select.editLabel) values.push(opt.value);
}
// no listbox or no selections... get value(s) from field (if any)
if (!values.length) {
var v=(field.substr(0,1)=='=')?config.options[field.substr(1)]:store.getValue(targetID,field);
if (v) values=(field=='tags'||allowMultiple)?v.readBracketedList():[v];
}
// add prompt item
if (ptext&&ptext.length)
opts.push('<option value="_ptext" title="">'+ptext+'</option>');
// add 'no value' item
if ((!allowMultiple && !values.length) || allowBlank)
opts.push('<option value="" title="'+this.blankTooltip.format([field,targetID])+'"></option>');
// add enumerated items
var isOther=values.length; // assume no matching value
for (var opt=0; opt<items.length; opt++) {
var lines=items[opt].split("\n"); var parts=lines[0].split("=");
var label=parts[0];
var v=parts[1]?parts[1]:parts[0];
var title=lines[1]?lines[1]:this.valueTooltip.format([field,targetID,v]);
var sel=values.contains(v); if (sel) isOther=false; // found matching value
opts.push('<option value="'+v+'" '+(sel?'selected':'')+' title="'+title+'">'+label+'</option>');
}
// add 'other...'
if (field=='tags') isOther=false;
if (isOther||allowOther) {
var label="other"+(isOther?(": "+values[0]):"...");
var v=isOther?values[0]:'';
var t=this.otherTooltip.format([field,targetID]);
opts.push('<option value="'+v+'" '+(isOther?'selected':'')+' title="'+t+'">'+label+'</option>');
}
// add 'edit list...'
if (listsrc && (!store.getTiddlerText(listsrc) || allowEdit)) {
var title=this.editTooltip.format([field,listsrc]);
opts.push('<option value="'+listsrc+'" title="'+title+'">'+this.editLabel+'</option>');
}
// render listbox
var html='<select '+(values[0]?'value="'+values[0]+'" ':' ')
+' title="'+this.tooltip.format([field,targetID])+'"'
+' rows="'+rows+'"'+' size="'+(rows!=0?rows:opts.length)+'"'+' style="width:'+width+'"'
+' tiddler="'+targetID+'"'+' edit="'+field+'"'+' ptext="'+ptext+'"'
+' listsrc="'+listsrc+'"'+' wikifyData="'+wikifyData+'"'
+' autosave="'+autosave+'"'+' allowBlank="'+allowBlank+'"'+' allowOther="'+allowOther+'"'
+' allowEdit="'+allowEdit+'"'+' allowMultiple="'+allowMultiple+'"'+(allowMultiple?' multiple':'')
+' onclick="return config.macros.select.onClick(this,event)"'
+' onchange="return config.macros.select.onChange(this,event)"'
+' ondblclick="return false">'+opts.join('')+'</select>';
place.innerHTML=html;
},
onClick:
function(here,event) {
var sel=here.selectedIndex;
if (sel!=-1 && here.options[sel].text.startsWith(config.macros.select.otherLabel))
here.onchange.apply(here,arguments);
},
onChange:
function(here,event) {
var cms=config.macros.select; // abbrev
var sel=here.selectedIndex;
if (sel!=-1) {
if (here.options[sel].text==cms.editLabel) {
story.displayTiddler(story.findContainingTiddler(here),here.value,DEFAULT_EDIT_TEMPLATE);
return false;
}
if (here.options[sel].text.startsWith(cms.otherLabel)) {
var newval=prompt(cms.otherPrompt.format([here.getAttribute("edit")]),here.value);
if (!newval) {// user cancelled
var v=store.getValue(here.getAttribute("tiddler"),here.getAttribute("edit"));
{ here.value=v; if (v==undefined) here.selectedIndex=0; return false; }
};
here.options[sel].value=newval;
here.options[sel].text=cms.otherLabel+": "+newval;
here.value=newval;
}
if (here.options[sel].value=='_ptext')
for (var i=0; i<here.options.length; i++)
here.options[i].selected=false;
}
if (here.getAttribute("autosave")=="true") config.macros.select.setFieldValue(here);
return false;
},
setFieldValue: function(here) {
var tid=here.getAttribute("tiddler"); if (!tid || !tid.length) return; // no target, do nothing
var field=here.getAttribute("edit");
if (field.substr(0,1)=='=') { // option cookie instead of tiddler field
config.macros.option.propagateOption(field.substr(1),"value",here.value,"input");
return;
}
// ensure tiddler exists
if (!store.tiddlerExists(tid)) store.saveTiddler(tid,tid,"",config.options.txtUserName,new Date(),[]);
if (field=='tags') {
store.suspendNotifications();
for (var i=0; i<here.options.length; i++) {
var opt=here.options[i];
if (opt.text==config.macros.select.editLabel) continue;
store.setTiddlerTag(tid,opt.selected,opt.value);
}
store.resumeNotifications();
} else {
// get multi-select items
var values=[];
for (var i=0; i<here.options.length; i++) {
var opt=here.options[i];
if (opt.text==config.macros.select.editLabel) continue;
if (opt.selected) values.pushUnique(String.encodeTiddlyLink(opt.value));
}
if (values.length==1) values=[here.value]; // remove unneeded brackets around single value
store.setValue(tid,field,values.length?values.join(' '):null); // if no selections, delete field
}
// 'touch' tiddler and report to user
var t=store.getTiddler(tid);
var who=config.options.chkForceMinorUpdate?t.modifier:config.options.txtUserName;
var when=config.options.chkForceMinorUpdate?t.modified:new Date();
store.saveTiddler(tid,tid,t.body,who,when,t.tags,t.fields);
if (config.macros.select.verbose)
{ clearMessage(); displayMessage(config.macros.select.changeMsg.format([field,tid,here.value])); }
}
}
//}}}
/***
A version of LoadTiddlersPlugin, function to load tiddlers from a source.
Tiddlers are marked as temporary using a tag specified in TemporaryTiddlersPlugin.
Usage: loadTaggedTiddlers(source,tag)
***/
//{{{
function loadTaggedTiddlers(src,tag) {
if (!src || !src.length) return; // filename is required
var cvar = tag + "sLoaded";
delete window[cvar];
createTiddlyElement(window.loadhere,"div","loadMsg","loadmsg","Loading; please wait a moment...");
fileLoader(src,tiddlerImporter,tag);
}
function fileLoader(src,callback,tag) {
// if working locally and src is not a URL, read from local filesystem
if ( document.location.protocol == 'file:' && src.substr(0,5) != 'http:' && src.substr(0,5) != 'file:' ) {
var txt=loadFile(src);
if (!txt) { // file didn't load, might be relative path.. try fixup
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);
src=pathPrefix+src;
if (pathPrefix.substr(0,5)!='http:') src=getLocalPath(src);
var txt=loadFile(src);
}
if (!txt) { // file still didn't load, report error
displayMessage("Local file didn't load");
}
else { callback(true,tag,txt,src,null); }
}
else { // use XMLHttpRequest
doHttp('GET',src,null,null,null,null,callback,tag,null);
}
}
function tiddlerImporter(status,tag,html,src,xhr) {
var remoteStore = new TiddlyWiki();
remoteStore.importTiddlyWiki(html);
var tiddlers = remoteStore.getTiddlers('title');
var tempTag = config.options.txtTemporaryTag || "temp";
store.suspendNotifications();
if ( tiddlers ) {
for ( var t=0; t<tiddlers.length; t++ ) {
var inbound = tiddlers[t];
if ( !store.tiddlerExists(inbound.title) && inbound.tags.contains(tag) ) {
var tags=new Array().concat(inbound.tags,[tempTag]);
store.saveTiddler(inbound.title,inbound.title,inbound.text,inbound.modifier,inbound.modified,
tags,inbound.fields,true,inbound.created)
store.setDirty(false);
}
}
}
jQuery("#loadMsg").remove();
var cvar = tag + "sLoaded";
window[cvar] = true;
if ( window.loadtid ) {
story.closeTiddler(window.loadtid);
story.displayTiddler(null,window.loadtid);
delete window.loadtid;
}
}
//}}}
#Dissolve Tris in ~175 ml dH~~2~~O
#pH to 8.8 with conc. HCl (~9 ml)
#Add SDS
#Bring to final volume with dH~~2~~O and check pH
Dissolve in dH~~2~~O and bring to final volume
Dissolve in dH~~2~~O and bring to final volume
#Dissolve CuSO~~4~~ and tartarate in about 50 ml dH~~2~~O.
#Add phosphate buffer and acetonitrile, mixing after each addition.
#Bring volume to 90 ml with dH~~2~~O, then add SDS and mix (avoid vigorous mixing after addition of SDS due to foaming).
#Stable for at least two weeks.
Set up standard curve by pipetting 0, 10, 20, 30, 40 and 50 μl of 1 mg/ml BSA standard###Exact concentration of BSA standard should be determined spectrophotometrically.### (0-50 μg protein###Above 50 μg, the curve may not be linear###) into microcentrifuge tubes in duplicate
Transfer desired amount of unknown samples###For E. coli crude extracts, 5-10 μl of an extract made in 1/10 of the original culture volume will typically yield 20-50 μg of protein for an overnight culture; try 15-30 μl for an extract from an exponentially growing culture.### into microcentrifuge tubes in duplicate
Add 1 ml of 10% TCA to each standard and each sample and let stand 10 min###[G[TCA]] precipitates proteins, allowing most other molecules that might potentially interfere with the assay to be removed with the supernatant###
Microcentrifuge 10 min. at full speed and remove supernatant by aspiration
Add 50 μl of 1.5 M NaOH to each pellet to neutralize TCA
Add 1 ml of Lowry reagent U to each sample, mix and let stand 10 min
Dilute folin reagent 1:1 with dH~~2~~O just before use###Folin reagent must be freshly diluted just before use### and add 100 μl to each sample, vortexing each tube immediately
Transfer 100 μl of each sample to a 96-well plate (to use the microplate reader) or entire volume to a semi-micro cuvette (to use the spectrophotometer)
Read absorbance at 750 nm for each sample. Standards and samples should all be read within a 5-minute period, as color will continue to darken slowly.
Make fresh just before use or freeze in aliquots
#Add Tris to dH~~2~~O and mix.
#Add lysozyme and mix well to dissolve completely.
#Store at –20 °C
#Dissolve salts in about 400 ml of dH~~2~~O
#Adjust pH to 7.0 with KOH
#Bring to volume and autoclave
#After cooling, add sterile carbon source, thiamine and MgSO~~4~~
#Bring 5× salts to appropriate volume with dH~~2~~O
#Add agar (15 g/l) if needed
#Autoclave and cool
#Aseptically add sterile CaCl~~2~~, MgSO~~4~~ and glucose or other carbon source
#Aseptically add sterile amino acids or other supplements as required
Dissolve salts in about 600 ml of dH~~2~~O, bring to volume and autoclave
#Add MgSO~~4~~ to dH~~2~~O first, then add CaCl~~2~~ (to avoid precipitation)
#Bring to final volume with dH~~2~~O
#Can be autoclaved, or for smaller volumes make with sterile dH~~2~~O in a sterile tube
#Dissolve MOPS and tricine in about 30 ml of dH~~2~~O
#Bring pH to 7.4 with 10 M potassium hydroxide (should take 1-2 ml)
#Bring total volume to about 45 ml
#Make fresh FeSO~~4~~ solution and add it to solution
#Add the remaining solutions in the order shown and mix after each addition
#Bring to final volume with dH~~2~~O
#Filter-sterilize 10-ml aliquots into sterile tubes
#Store at -20°C
#Mix salts, K~~2~~HPO~~4~~ and water
#Adjust pH to 7.2 if necessary with a small amount of NaOH
#Filter sterilize into sterile bottle
#Store at 4 °C for up to one month
// // {{{see}}} macro = shows a field in a viewform by wikifying field contents in a span at the end of its "label" element
//{{{
config.macros.see = {};
config.macros.see.handler = function(place,macroName,params,wikifier,paramString,tiddler) {
var cspan = createTiddlyElement(null,"span",null,"seeContent");
var field = params[0];
if ( field == "title" ) { var txt = tiddler.fields.displaytitle || tiddler.title; }
else { var txt = tiddler.fields[field]; }
if ( !txt || txt == "" ) { txt = " "; }
wikify (txt,cspan);
place.appendChild(cspan);
}
//}}}
// // {{{logIn}}} macro - creates a login button, if successful, sets readOnly to false, window.loggedIn to true and refreshes
//{{{
config.macros.logIn = {};
config.macros.logIn.handler = function(place,macroName,params,wikifier,paramString,tiddler) {
if ( document.location.protocol == "file:" || window.loggedIn ) { return false; }
var container = createTiddlyElement(place,"span",null,"loginButton");
var img = createTiddlyElement(container,"img",null,null);
img.src = "images/icons/login.svg";
var btn = createTiddlyButton(container,"LogIn","Click here to log in if you are a Visick lab member",this.onClickLogin,null,null);
}
config.macros.logIn.onClickLogin = function() {
var pass = prompt("Enter the password");
if ( pass != "ILuvPCM" ) { alert("Sorry, you don't seem to know the password."); return false; }
window.loggedIn = true;
readOnly = false;
showBackstage = true;
backstage.init();
backstage.show();
refreshAll();
refreshPageTemplate();
return false;
}
//}}}
// // {{{protect(tiddlerName)}}} macro - use in a view template or page template to require login or local file
//{{{
config.macros.protect = {};
config.macros.protect.handler = function(place,macroName,params,wikifier,paramString,tiddler) {
if ( document.location.protocol != "file:" && !window.loggedIn ) {
wikify(store.getTiddlerText("loginButton"),place);
}
else {
wikify(store.getTiddlerText(params[0]),place);
}
}
//}}}
// // {{{wikiText(text)}}} macro to wikify text tiddlers with <p> tags on paragraphs
//{{{
config.macros.wikiText = {};
config.macros.wikiText.handler = function(place,macroName,params,wikifier,paramString,tiddler) {
var text = tiddler.text.split(/[\n]{1,2}/);
var sym = "*#><!|";
for ( var i=0; i<text.length; i++ ) {
if ( sym.indexOf(text[i].substr(0,1)) == -1 ) {
var tpar = createTiddlyElement(place,"p",null,"textpar",null);
wikify(text[i],tpar);
}
else {
var temp = text[i];
while ( i + 1 < text.length && sym.indexOf(text[i+1].substr(0,1)) > -1 ) {
temp += "\n" + text[i+1];
i++;
}
wikify(temp,place);
}
}
return false;
}
//}}}
// //''iconBar'' macro creates icon toolbar; parameters: commands (from iconBarCommands), direction (h or v), style (button or tool), size (px), tiddler (if in a tiddler)
// // example: {{{<div id='barID' macro='iconBar [[iconBarCommands::MainBar]] h button 32></div>}}}
//{{{
config.macros.iconBar = {};
config.macros.iconBar.handler = function(place,macroName,params,wikifier,paramString,tiddler) {
var cmd = params[0].split(",");
var dir = params[1];
var style = params[2];
var size = params[3];
if ( dir == "h" ) { var btnstyle = " horiz"; } else { var btnstyle = " vert"; }
for ( var i=0; i<cmd.length; i++ ) {
if ( cmd[i].substr(0,1) == "+" ) { // default command for double-click
cmd[i] = cmd[i].substr(1);
var defCom = true;
}
else { var defCom = false; }
var command = config.commands[cmd[i]];
if ( !command.hideReadOnly || !readOnly || window.isLocal() ) {
if ( defCom ) { document.getElementById("iconTools").setAttribute("defCom",cmd[i]); }
if ( style == "button" ) {
iconStyle = "iconButton" + btnstyle;
var btn = createTiddlyElement(place,"div",null,iconStyle);
var btni = svgIcon(command.icon,size-2,size-2,btn);
btni.classList = btnstyle;
}
else {
iconStyle = "iconTool" +btnstyle;
var btn = svgIcon(command.icon,size,size,place);
btn.classList = iconStyle;
}
btn.name = cmd[i];
btn.title = command.tooltip;
if ( tiddler ) { btn.tid = tiddler.title; } else { btn.tid = null; }
btn.onclick = function(ev){config.macros.iconBar.runToolbarCommand(ev,this.name,this.tid);};
}
}
}
//function for iconBar to run a command
config.macros.iconBar.runToolbarCommand = function(ev,name,title) {
var e = ev || window.event;
e.cancelBubble = true;
if(e.stopPropagation) e.stopPropagation();
return config.commands[name].handler(e,null,title);
}
//hijack tiddler double-click to run default icon bar command
Story.prototype.onTiddlerDblClick = function(ev) {
var e = ev || window.event;
var target = resolveTarget(e);
if(target && target.nodeName.toLowerCase() != "input" && target.nodeName.toLowerCase() != "textarea") {
if(document.selection && document.selection.empty)
document.selection.empty();
while (target.parentNode.id != "tiddlerDisplay") { target = target.parentNode; }
var icBar = target.querySelector("#iconTools");
if ( icBar && icBar.getAttribute("defCom") ) {
var title = target.getAttribute("tiddler");
config.macros.iconBar.runToolbarCommand(e,icBar.getAttribute("defCom"),title);
}
else { config.macros.toolbar.invokeCommand(this,"defaultCommand",e); }
e.cancelBubble = true;
if(e.stopPropagation) e.stopPropagation();
return true;
}
return false;
};
//hijack config.commands.editTiddler to ensure it has a hideReadOnly attribute
merge(config.commands.editTiddler,{
hideReadOnly: true
});
//}}}
// // {{{titleedit(title)}}} - Use standard edit macro to edit title, but add an onchange that updates displaytitle
//{{{
config.macros.titleedit = {}
config.macros.titleedit.handler = function(place,macroName,params,wikifier,paramString,tiddler) {
var e = config.macros.edit.handler(place,macroName,params,wikifier,paramString,tiddler);
e.onchange = function(){jQuery("input[edit='displaytitle']").val(this.value);};
}
//}}}
// // {{{materialview}}} macro to format materials in recipes
//{{{
config.macros.materialview = {}
config.macros.materialview.handler = function(place,macroName,params,wikifier,paramString,tiddler) {
var ttext = "|materialtable|k\n|| m.w. | final<br>concentration | stock<br>concentration ||h\n";
text = tiddler.fields.materials.split("\n");
for ( var i=0; i<text.length; i++ ) {
if ( text[i].substr(0,1) == ">" ) { ttext += "|>|>|>|>| !" + text[i].substr(1) + " |\n"; } else { ttext += text[i] + "\n"; }
}
wikify(ttext,place);
var tid = story.findContainingTiddler(place);
var title = tid.getAttribute("tiddler");
store.setValue(title,"rewritten",false);
var basevol = store.getValue(title,"basevol").split(" ");
var amtid = title.replace(/\s/g,"") + "amt";
var amthead = "amount to<br>make <input id=\"" + amtid + "\" class=\"recipeamt\"> " + basevol[1];
jQuery(".materialtable thead td:last-child").html(amthead);
var amount = document.getElementById(amtid);
amount.value = basevol[0];
amount.tid = title;
amount.onchange = function(){ rewriteRecipe(this.tid,this.value); };
jQuery("div[tiddler~='"+title+"'] .materialtable tbody tr td:last-child").each(
function(index) {
var amt = jQuery(this).text().split(" ")[0];
jQuery(this).attr("id","amt"+index);
jQuery(this).attr("amt",amt);
});
jQuery("div[tiddler~='"+title+"'] .materialtable tbody tr td:nth-child(3)").each(
function(index) {
var amt = jQuery(this).text().split(" ")[0];
jQuery(this).attr("id","fconc"+index);
jQuery(this).attr("fconc",amt);
});
return false;
}
//}}}
// // {{{function rewriteRecipe(title,amt)}}} - function called from macros.materialview to rewrite recipe volumes on change
//{{{
function rewriteRecipe(title,amt) {
var base = store.getValue(title,"basevol").split(" ");
var factor = amt / base[0];
var i=0;
while ( document.getElementById("amt"+i) ) {
var cell = document.getElementById("amt"+i);
var cur = cell.getAttribute("amt");
cell.innerHTML = (cur * factor) + " " + base[1];
i++;
}
}
//}}}
// // {{{recipeconc}}} macro to show recipe concentration or selector
//{{{
config.macros.recipeconc = {}
config.macros.recipeconc.handler = function(place,macroName,params,wikifier,paramString,tiddler) {
var conc = tiddler.fields.baseconc;
if ( conc ) {
var otherconc = tiddler.fields.otherconc;
if ( otherconc ) {
tiddler.fields.cfactor = conc;
var other = otherconc.split(",");
var select = createTiddlyElement(place,"select","concsel",null);
var def = createTiddlyElement(select,"option",null,null,conc);
def.value = 1;
def.selected = 'selected'
for ( var i=0; i<other.length; i++ ) {
var temp = other[i].split("|");
var opt = createTiddlyElement(select,"option",null,null,temp[0]);
opt.value = temp[1];
}
select.onchange = function(){rewriteConc(this.value);}
}
else { wikify(conc,place); }
}
}
//}}}
// // {{{function rewriteConc(factor)}}} - function called from macros.recipeconc to rewrite recipe volumes on change
//{{{
function rewriteConc(factor) {
var i=0;
while ( document.getElementById("amt"+i) ) {
var cell = document.getElementById("amt"+i);
var cur = cell.getAttribute("amt");
var unit = cell.innerHTML.split(" ")[1];
cell.innerHTML = (cur * factor) + " " + unit;
i++;
}
i=0;
while ( document.getElementById("fconc"+i) ) {
var cell = document.getElementById("fconc"+i);
var cur = cell.getAttribute("fconc");
var unit = cell.innerHTML.split(" ")[1];
cell.innerHTML = (cur * factor) + " " + unit;
i++;
}
}
//}}}
// // {{{protocolview}}} - macro to format a protocol for viewing
//{{{
config.macros.protocolview = {}
config.macros.protocolview.handler = function(place,macroName,params,wikifier,paramString,tiddler) {
var theory = tiddler.fields.theory;
if ( theory ) {
wikify("!!How it works\n",place);
var temp = theory.split("\n");
for ( var j=0; j<temp.length; j++ ) {
if ( temp[j] && temp[j] != "" && temp[j] != "\n" ) {
var group = "";
while ( temp[j].match(/^[*#>|]/) ) {
group += temp[j] + "\n";
j++;
}
if ( group ) { wikify(group,place); }
else {
var tpar = createTiddlyElement(place,"p",null,"textpar",null);
wikify(temp[j],tpar);
}
}
}
}
var materials = tiddler.fields.materials;
if ( materials ) { wikify("!!Materials\n|materialslist|k\n" + materials + (materials.endsWith("\n") ? "" : "\n"),place); }
var procedure = tiddler.text;
if ( procedure ) {
var steps = procedure.split("\n");
for ( var i=0; i<steps.length; i++ ) {
if ( steps[i] == "" ) { steps.splice(i,1); }
else if ( steps[i].substr(0,2) == "%%" ) { steps[i] = steps[i].substr(2); }
else if ( !steps[i].match(/^[*|>#]/) ) { steps[i] = "#" + steps[i]; }
}
wikify("!!Procedure\n" + steps.join("\n") + "\n",place);
}
var analysis = tiddler.fields.analysis;
if ( analysis ) { wikify("!!Analysis\n" + analysis + (analysis.endsWith("\n") ? "" : "\n"),place); }
wikify("!!Sources and notes\n",place);
var source = tiddler.fields.source;
if ( source ) { wikify(source + (source.endsWith("\n") ? "" : "\n"),place); }
}
//}}}
*Research Overview
**Protein Damage and Repair|Damage & Repair
**Isoaspartyl Damage and Repair by PCM|Isoaspartate & PCM
**PCM vs. Aging and Disease|Aging and Disease
**Aging in E. coli
**Effects of PCM in E. coli|Effects of PCM
**Questions and Hypotheses|Research Questions
*Projects
**tag:project
*Protocols
*Recipes
*References
*Strains
*Tools
*Results
**Presentations
**Publications
*Orders
----
(don't change anything below this line)
- To add a page to the menu, precede its name with asterisks representing its level in the hierarchy
- If the page has a long name and you want a short name for the menu, use *Long name|Short name
- To add all pages (alphabetically) with a given tag, use **tag:TagName
<script>
menuConstructor();
</script>
Prepare glycerol tubes in advance by pipetting 0.4 ml of 75% glycerol into a rack of 2-ml screw-cap vials
Put caps on vials and loosen ¼ turn
Tape another rack on top to prevent caps from coming off in the autoclave
Autoclave; cool before use
// // {{{menuConstructor()}}}: read MainMenu and construct a menu array
//{{{
function menuConstructor() {
var menu = store.getTiddlerText("MainMenu").split("\n");
window.mainMenu = [];
var currentlevel = 1;
var parent = "";
var lastparent = "";
for ( var i=0; i<menu.length; i++ ) {
if ( menu[i].substr(0,1) != "*" ) { break; }
var data = menu[i].match(/^([*]+?)([^*].+)/);
var level = data[1].length;
var text = data[2];
var short = "";
var temp = text.match(/(.+?)[|](.+)/);
if ( temp !== null ) { text = temp[1]; short = temp[2]; }
if ( level > currentlevel ) { parent = lastparent; }
else { lastparent = text; }
currentlevel = level;
var indent = (level-1)*18 + "px";
temp = text.match(/[Tt][Aa][Gg][:](.+)/);
if ( temp !== null ) {
var tag = temp[1];
var tids = store.getTaggedTiddlers(tag,"title");
for ( var j=0; j<tids.length; j++ ) { window.mainMenu.push([tids[j].title,level,parent,indent,short]); }
}
else {
window.mainMenu.push([text,level,parent,indent,short]);
}
}
}
//}}}
// // {{{menuMacro}}}: add to sidebar in PageTemplate to create menu
//{{{
config.macros.menuMacro = {};
config.macros.menuMacro.handler = function(place,macroName,params,wikifier,paramString,tiddler) {
var mdiv = createTiddlyElement(place,"div","menudiv","menu");
if ( !window.mainMenu ) { menuConstructor(); }
for ( var i = 0; i<window.mainMenu.length; i++ ) {
var arr = window.mainMenu[i];
var text = arr[0];
var level = arr[1];
var parent = arr[2];
var indent = arr[3];
var short = arr[4];
if ( short ) { var itemtxt = short; }
else { var itemtxt = store.getValue(text,"displaytitle") || text; }
var open = false;
var openpt = false;
story.forEachTiddler(function(title,element) {
if ( title == text ) { open = true; }
if ( title == parent ) { openpt = true; }
});
if ( level == 1 || open || openpt ) {
var item = createTiddlyElement(mdiv,"div",null,"menuitem");
item.style.marginLeft = indent;
var menuimg = createTiddlyElement(item,"img",null,"menuicon");
if ( open ) {
menuimg.src = "images/icons/flask-r.svg";
wikify(itemtxt,item);
}
else {
menuimg.src = "images/icons/flask.svg";
var link = createTiddlyElement(item,"a",null,null);
wikify(itemtxt,link);
link.target = text;
link.onclick = function() { story.displayTiddler(null,this.target); }
}
}
}
}
//}}}
// // {{{textSPM()}}} macro: run from [tag]ViewTemplate to close other tiddlers whenever a tiddler with specified tag is opened
//{{{
config.macros.textSPM = {}
config.macros.textSPM.handler = function(place,macroName,params,wikifier,paramString,tiddler) {
story.closeAllTiddlers(tiddler.title);
refreshMenu();
}
//}}}
#pH to 8.0 with NaOH
#Bring to volume with dH~~2~~O
#Add PMSF and DTT to a suitable aliquot just before use
Dissolve in about 80% of desired volume of dH~~2~~O; bring to volume and autoclave
Dissolve in about 80 ml dH~~2~~O; bring to volume and autoclave
%%This small-scale assay is suitable for measuring approximately 0.5 to 50 μg of protein per sample.
Aliquot protein samples and standards; include a blank
Adjust volume of each sample to 500 μl with dH~~2~~O
Make BCA working solution###Working solution may initially be turbid but should clear quickly after mixing. It is unstable and should be made fresh and used within a day.### by mixing 1 volume of Reagent C with 25 volumes of Reagent B and then adding 26 volumes of Reagent A to the mixture
Add 500 μl of BCA working solution to each sample and mix
Incubate 60 min at 60°C
Cool to room temperature and transfer to cuvettes###Color will continue to change, but change is slow at room temperature; all standards and samples should be read within about 10 min.###
Zero spectrophotomter with water only, then read absorbance of blank, standards and samples at 562 nm
#Dissolve ingredients in about 80 ml of dH~~2~~O
#Adjust pH to 11.25 with 10 N NaOH
#Bring to final volume with dH~~2~~O
Dissolve in 100 ml of dH~~2~~O and bring to final volume of 125 ml with dH~~2~~O
Dissolve in about 8 ml of dH~~2~~O and bring to final volume of 10 ml
#Dissolve all components in 40 ml of sterile water
#Bring final volume to 50 ml
#Store at room temperature
#Dissolve ingredients in approx. 80% of final volume of Milli-Q water
#Adjust pH to 3.2 with H~~3~~PO~~4~~
#Bring to final volume
#Filter through 0.2 μm filter
// // Plugin to create a "modal" dialog (window that sits on top of open tiddler)
// // use by {{{<<modalBox type id text tooltip tiddler title template>>}}}
// // or with a formatter that runs modalBox
// // parameters: id=identifier, type = button|link, text = text for button/link, tooltip = tooltip text
// // tiddler = tiddler whose text is box content, title = text for title bar (optional)
// // template = template to show tiddler (optional, else tiddler text shown wikified)
//{{{
config.macros.modalBox = {}
config.macros.modalBox.handler = function(place,macroName,params,wikifier,paramString,tiddler) {
if ( params[0] == "button" ) { var cl = "modalButton"; } else { var cl = "modalLink"; }
var btn = createTiddlyElement(place,"a",null,cl);
wikify(params[2],btn);
if ( params[6] ) { var bi = createTiddlyElement(btn,"img",null,null,null); bi.src = params[6]; }
if ( params[3] ) { btn.title = params[3]; }
btn.onclick = function() { jQuery('.modalBox').hide(); document.getElementById(this.modal).style.display = "block"; }
var modal = params[1];
btn.modal = modal;
if ( place.tagName.toLowerCase() == "td" ) {
while ( place.tagName.toLowerCase() != "table" ) { place = place.parentNode; }
place = place.parentNode;
}
var box = createTiddlyElement(place,"div",modal,"modalBox",null);
var title = params[4];
var template = params[7];
if ( template ) {
var boxtitle = title + "box";
var tidid = story.tiddlerId(title);
var close = createTiddlyElement(box,"span",null,"modalClose",null);
var tiddlerElem = createTiddlyElement(box,"div",tidid,"tiddler");
tiddlerElem.setAttribute("refresh","tiddler");
story.refreshTiddler(title,template,false,null,null);
jQuery("#" + modal + " .tiddler").attr('id',boxtitle);
jQuery("#"+ modal + " #iconTools").css("display","none");
}
else {
var title = createTiddlyElement(box,"div",null,"modalTitle",null);
var close = createTiddlyElement(title,"span",null,"modalClose",null);
var ttxt = createTiddlyLink(title,title,false,"modalTitleText");
if ( params[5] ) { wikify(params[5],ttxt); } else { wikify(title,ttxt); }
var text = store.getTiddlerText(title);
var tbox = createTiddlyElement(box,"div",null,"modalTextBox",null);
wikify(text,tbox);
}
wikify("×",close);
close.modal = modal;
close.onclick = function() { document.getElementById(this.modal).style.display = "none"; }
}
//}}}
#Add NP-40 to TE-PMSF (note that NP-40 is viscous)
#Mix well until no schlieren lines are visible
Dissolve in about 80 ml of dH~~2~~O, adjust to desired pH with NaOH and bring to final volume. Autoclave.
#Dissolve in dH~~2~~O and bring to final volume
#Autoclave
0.85% NaCl is "normal saline"
Dissolve in dH~~2~~O and bring to final volume
/***
|Name|NestedSlidersPlugin|
|Source|http://www.TiddlyTools.com/#NestedSlidersPlugin|
|Documentation|http://www.TiddlyTools.com/#NestedSlidersPluginInfo|
|Version|2.4.3|
|Author|Eric Shulman - ELS Design Studios|
|License|http://www.TiddlyTools.com/#LegalStatements <br>and [[Creative Commons Attribution-ShareAlike 2.5 License|http://creativecommons.org/licenses/by-sa/2.5/]]|
|~CoreVersion|2.1|
|Type|plugin|
|Requires||
|Overrides||
|Options|##Configuration|
|Description|show content in nest-able sliding/floating panels, without creating separate tiddlers for each panel's content|
This plugin adds new wiki syntax for embedding 'slider' panels directly into tiddler content.
!!!!!Documentation
>see [[NestedSlidersPluginInfo]]
!!!!!Configuration
<<<
Enable animation for slider panels
<<option chkFloatingSlidersAnimate>> allow sliders to animate when opening/closing
>(note: This setting is in //addition// to the general option for enabling/disabling animation effects:
><<option chkAnimate>> enable animations (entire document)
>For slider animation to occur, you must also allow animation in general.
Debugging messages for 'lazy sliders' deferred rendering:
<<option chkDebugLazySliderDefer>> show debugging alert when deferring slider rendering
<<option chkDebugLazySliderRender>> show debugging alert when deferred slider is actually rendered
<<<
!!!!!Revisions
<<<
2008.05.07 - 2.4.3 updated Morpher hijack to adjust floatingPanel styles after animation without affecting other animated elements (i.e. popups). Also, updated adjustSliderPos() to account for scrollwidth and use core findWindowWidth().
|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.nestedSliders = {major: 2, minor: 4, revision: 3, date: new Date(2008,5,7)};
//}}}
//{{{
// options for deferred rendering of sliders that are not initially displayed
if (config.options.chkDebugLazySliderDefer==undefined) config.options.chkDebugLazySliderDefer=false;
if (config.options.chkDebugLazySliderRender==undefined) config.options.chkDebugLazySliderRender=false;
if (config.options.chkFloatingSlidersAnimate==undefined) config.options.chkFloatingSlidersAnimate=true;
// 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");
//}}}
//{{{
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(event) {
// optional 'open on hover' handling
if (this.getAttribute("hover")=="true" && this.sliderPanel.style.display=='none') {
document.onclick(event); // close transients
onClickNestedSlider(event); // 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++;
if (config.options.chkDebugLazySliderDefer) alert("deferred '"+title+"':\n\n"+panel.getAttribute("raw"));
}
}
}
}
)
// TBD: ignore 'quoted' delimiters (e.g., "{{{+++foo===}}}" isn't really a slider)
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";
// 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") {
if (config.options.chkDebugLazySliderRender)
alert("rendering slider '"+theTarget.innerHTML+"':\n\n"+theSlider.getAttribute("raw"));
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")
{ ctrls[c].focus(); break; }
}
}
var cookie=theTarget.sliderCookie;
if (cookie && cookie.length) {
config.options[cookie]=!isOpen;
if (config.options[cookie]!=theTarget.defOpen)
saveOptionCookie(cookie);
else { // remove cookie if slider is in default display state
var ex=new Date(); ex.setTime(ex.getTime()-1000);
document.cookie = cookie+"=novalue; path=/; expires="+ex.toGMTString();
}
}
// 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})
}
return retval;
};
//}}}
//{{{
// adjust floating panel position based on button position
if (window.adjustSliderPos==undefined) window.adjustSliderPos=function(place,btn,panel) {
if (hasClass(panel,"floatingPanel")) {
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;
}
if (place.id=="ht") {
var left=-(panelWidth+10);
var top=0;
}
panel.style.left=left+"px"; panel.style.top=top+"px";
}
}
//}}}
//{{{
// TW2.1 and earlier:
// hijack Slider animation handler '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 stop handler so floatingPanel can be adjusted after animation
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,"floatingPanel")) { // adjust floating panel overflow and position after animation
e.style.overflow = "visible";
if (window.adjustSliderPos) window.adjustSliderPos(e.parentNode,e.button,e);
}
};
}
//}}}
Dissolve ONPG in Z-buffer. Make fresh day of use or store no more than a few days in foil at 4°C
Dissolve in water; store at −20 °C
// // Set options independent of user's browser
//{{{
config.options.chkAutoSave = true; // save automatically
config.options.chkSaveBackups = false; // don't save backup files
config.options.chkAnimate = false; // don't animate
config.macros.edit.saveMsg = ""; // suppress confirmation message for editing in view mode
config.options.chkDisableNonExistingWikiLinks= true; // disable automatic creation of links from WikiWords
config.options.chkDisableWikiLinks=true; // disable automatic creation of links from WikiWords
config.options.chkHttpReadOnly=true; //hide editing features over http
config.options.chkOpenInNewWindow=true; // open external links in new window
//}}}
// // Customize backstage with style sheet
//{{{
config.tasks.styleSheet = {
text: "styles",
tooltip: "Open style sheet",
action: function() {story.displayTiddler("top","StyleSheet");}
};
config.backstageTasks.push("styleSheet");
//}}}
// // Limit saved popup display
//{{{
window.oldDisplayMessage = displayMessage;
displayMessage = function (text,linkText) {
oldDisplayMessage(text,linkText);
setTimeout( 'clearMessage()', 5000 );
};
//}}}
<script>
var tids = store.getTiddlers();
var re = /\[[Ff]\[(.+?)\]\]/g;
var list = [];
for ( var i=0; i<tids.length; i++ ) {
if ( tids[i].tags.contains("systemConfig") ) { continue; }
var text = tids[i].text;
if ( tids[i].fields.materials ) { text += tids[i].fields.materials; }
var result;
while ( result = re.exec(text) ) {
var recipe = result[1].split("|");
var title = recipe[1] || recipe[0];
if ( !store.tiddlerExists(title) ) { list.pushUnique(title); }
}
}
for ( var i=0; i<list.length; i++ ) {
wikify("*"+list[i]+"\n",place);
}
</script>
#Add 110 μl of sodium hypochlorite to a 1-ml aliquot of 10 mg/ml BSA
#Incubate 30 min at room temperature
#Dialyze overnight in 4 l of PBS, stirring at 4 °C
#Check protein concentration of resulting solution by measuring absorbance at 280 nm
#Store at –20 °C
#Use 0.5 mg as a standard for DNPH assay
%%To prepare fully reduced BSA:
''In a hood'', weigh out 0.1 g of sodium borohydride###Sodium borohydride is toxic and produces flammable hydrogen gas upon contact with water.### and add to 5 ml of //cold// 1% BSA in a small beaker
Stir until fully dissolved, then transfer to a 15-ml disposable centrifuge tube, cap and incubate 30 min
Neutralize by adding HCl
Dialyze overnight against PBS (4l, 4°C)
Check protein concentration by measuring A~~280~~###Concentration of BSA is A~~280~~/0.67 mg/ml### (in quartz cuvette) and adjust to 2 mg/ml
Aliquot and store at −20°C
%%To prepare fully oxidized BSA:
Add 100 μl of sodium hypochlorite to a 1-ml aliquot (2 mg) of fully reduced BSA
Incubate 30 min
Dialyze overnight against PBS (4l, 4°C)
Check protein concentration by measuring A~~280~~###Concentration of BSA is A~~280~~/0.67 mg/ml### (in quartz cuvette) and adjust to 2 mg/ml
Store at −20°C
#Dissolve in 800 ml dH~~2~~O
#Adjust pH to 7.4 with HCl, bring to final volume
#Aliquot desired volumes into bottles and autoclave
#Dilute PBS to about 900 ml with dH~~2~~O in a graduated cylinder
#Add Tween and mix well
#Bring to volume with dH~~2~~O and mix well
#Dissolve BSA completely in about 90 ml of 1× PBST
#Bring to final volume with 1× PBST
''Biological effects of PCM''. PCM is distributed throughout the biological world,[R[Kagan1997a]] and PCM-mediated repair can restore activity of many isoAsp-damaged proteins //in vitro//, including epidermal growth factor, histones, glucagon, human growth hormone, calmodulin, calbindin and tubulin.[R[Clarke1992,Clarke1992b,Galletti1995,Najbauer1996,Young2001]] The //in vivo// importance of this repair enzyme has to date been most clearly demonstrated by its strong links with successful aging in a variety of species.
[<image[//E. coli// lacking PCM (JV1068) are<br>impaired in survival of oxidative<br>stress during long-term stationary<br>phase. (Fig 3 from Visick, 1998)|images/text/colipcm.png]]
''PCM and aging''. We have shown that //Escherichia coli// requires PCM for maximal long-term stationary-phase survival in the presence of oxidative and other stresses.[R[Visick1998,Hicks2005]] PCM also increases lifespan in the dauer stage of the nematode //Caenorhabditis elegans//, a state of reduced metabolism in which nutrient-limited worms persist for an extended period.[R[Kagan1997b]] Overproduction of PCM extends the life of //Drosophila// maintained at elevated temperatures,[R[Chavous2001]] while PCM activity in plants is induced in response to stress and during production of seeds—for many plants, the organ with the greatest potential for longevity.[R[Mudgett1994,Mudgett1996]]
[>image[Mice lacking PCM die at an early<br>age. (Fig 3B from Kim, 1997)|images/text/mousepcm.png]]Most dramatically, homozygous knockout mice lacking PCM accumulate high levels of damaged proteins in erythrocytes, liver, heart and brain and die of seizures no more than 60 days after birth (see graph at right).[R[Kim1997]] PCM appears to be of critical importance in the brain: PCM-deficient mice exhibit abnormal cell proliferation in the dentate gyrus (see figure below),[R[Farrar2005a]] activation of growth-factor signal-transduction systems,[R[Farrar2005]] and an increased SAM/SAH ratio in the hippocampus.[R[Farrar2002]] PCM also protects certain mouse neurons from apoptosis and can be induced by an anti-Parkinsons drug.[R[Huebscher1999]]
[<image[The hippocampus and dentate gyrus|images/text/hippocampus.png]]
''Human PCM''. Human PCM activity is also high in the brain,[R[Kim1997]] as well as in tissues where we would expect preservation of existing proteins to be crucial, including erythrocytes and eye lens epithelia.[R[Galletti1995]] There is one known genetic polymorphism for the human PCM gene (PCMT1): valine vs. isoleucine at position 119. The valine allele has higher specific activity and heat stability, but the isoleucine variant has higher affinity for isoAsp.[R[DeVry1999]] Initial genetic studies suggest that the heterozygous condition may be correlated with healthy aging,[R[DeVry1999,David1997]] while a recent report suggests that homozygosity for the valine form may decrease risk of spina bifida.[R[Zhu2005]]
''PCM and Disease''. In addition to promoting longevity, intriguing connections between PCM and a variety of degenerative diseases point to the need for better understanding of how protein repair contributes to the maintenance of cellular health. A number of recent papers suggest that isoaspartyl modification of proteins may be an important trigger for autoimmune responses,[R[Doyle2003,Mamula1999]] perhaps because isoAsp-containing peptides cannot be completely degraded.[R[Young2001,Mamula1999,Cirrito2001]] Furthermore, recent studies suggest that rates of isoAsp formation are elevated in a lupus-prone mouse model[R[Yang2006]] and that induction of PCM reduces apoptosis and onset of Type 1 diabetes in a rat model.[R[Wagner2007]]
High levels of isoAsp are found in β-amyloid aggregates in Alzheimer’s disease,[R[Lowenson1994]] while decreased PCM activity has been correlated with epilepsy[R[Lanthier2002]] as well as progression of astrocytic brain tumors.[R[LaPointe2005]] Increased isoaspartyl damage has been detected in conjunction with cytoskeletal defects in hereditary spherocytosis.[R[Ingrosso1995]] Conversely, excess SAH levels in uremia inhibit PCM-mediated repair,[R[Perna1997]] perhaps increasing the severity of this disorder.
''How does PCM defend cells and organisms against aging and disease?'' Although it has been well-characterized biochemically, surprisingly little is known about the //in vivo// roles of this protein-repair enzyme. Proteomic approaches have recently identified synapsin,[R[Reissner2006]] collagen,[R[Lanthier2004]] tubulin[R[Lanthier2002]] and histones[R[Young2001]] as targets of PCM-mediated repair, but whether PCM primarily maintains a small number of critical substrates or a broad range of damaged proteins is unknown. PCM might be continuously active as a maintenance enzyme or might respond more specifically to damage or stress. IsoAsp damage might affect protein activity mainly when it occurs near an active site or, as we hypothesize, might affect protein conformation more generally. The involvement of isoAsp formation and repair in such a broad range of pathological conditions strongly suggests that a clearer picture of how, when and where PCM acts //in vivo// is needed.
%%This is only a general procedure for PCR. The needs of each unique research situation have to be considered, and there are in fact many ways to do PCR for different goals. The guidelines below are generally suitable for ordinary amplification from plasmids or bacterial genomic DNA. Carry out the entire procedure wearing gloves and in the cleanest environment possible. If the risk of contamination is particularly high, use a UV-sterilized biological safety cabinet.
Label###Label on the side of the tube near the top; otherwise, the markings are likely to rub off during thermal cycling.### __thin-walled__ 0.2-ml PCR tubes###A 96-well plate designed specifically for PCR can also be used if many samples need to be run.### for each sample.
Keeping tubes on ice, add the following components in the order listed to each tube###If more than a few reactions are to be done, prepare a "master mix" containing water, buffer, dNTPs, MgCl~~2~~ and primers. Calculate how much of each component would be required for teh desired number of reactions //plus one//, mix the components thoroughly and aliquot into individual reaction tubes.###:
**dH~~2~~O###It's best to use small aliquots of sterile dH~~2~~O to avoid the risk of contamination in a large bottle. We usually maintain a stock of 2-ml screw-cap tubes in lab that are exclusively for PCR use containing dH~~2~~O that has been filtered through a 0.45 μm filter and then autoclaved.### to final volume of 25 μl
**2.5 μl of 10× buffer###Check the buffer supplied by the manufacturer; sometimes it could be supplied at 5× or another concentration###
**MgCl~~2~~ if required###//Taq// polymerase requires Mg^^2+^^, either provided in the reaction buffer or added separately. Check the buffer provided with your enzyme to see if it contains MgCl~~2~~ (typically at a final concentration between 1.5-3.5 mM). The Mg^^2+^^ concentration may need to be optimized for a particular reaction; some manufacturers provide buffers with and without MgCl~~2~~ for this purpose.###
**dNTP mixture (final conc. 0.2 mM of each dNTP)
**Primers (final conc. 0.2-0.5 μM each)
**Template DNA###Template DNA concentrations are typically 10-25 ng for plasmid DNA up to 50-125 ng for complex DNAs such as human genomic DNA.###
**//Taq// DNA polymerase (usually 0.5-1 μl)
Give tubes a brief spin in a microcentrifuge to bring all liquid to the bottom of the tube.
If you are not using a thermal cycler with a heated lid, overlay the reaction with 25 μl of sterile mineral oil
Place tubes in thermal cycler and run the desired program; a basic program is:
**2 minutes at 95°C
**30 cycles of:
***30 seconds at 95°C (denaturation)
***30 seconds at desired annealing temperature###Annealing temperature depends on the primers chosen and as a rule of thumb should be about 5°C below the melting temperature (T~~m~~) of the primer with the __lower__ T~~m~~. Ideally, the T~~m~~s of the two primers should be very similar.###
***60 seconds per 1000-bp length of product expected (extension)
**2 minutes at 72°C
**Hold at 4°C
#Add dry ingredients to 880 ml dH~~2~~O and autoclave
#Autoclave Na~~2~~HPO~~4~~, KH~~2~~PO~~4~~ and glucose separately and add after autoclaving
#Dissolve in isopropanol
#Divide into 1-ml aliquots and store at -20°C (PMSF is unstable, keep in freezer when not in use)
//Note: //DANGER—//PMSF is poisonous!// Use gloves and a mask when weighing powder, gloves when handling liquid.
<!--{{{-->
<div id='sidebar'>
<div id='header' role='banner'>
<img src="images/pcmlogo.svg" />
</div>
<div id='wikiMenu' macro='menuMacro'></div>
<div id='wikiControls' macro='protect wikiControls'></div>
<div id='contactInfo' refresh='content' tiddler='contactInfo'></div>
<div id='messageArea'></div>
</div>
<div id='displayArea' role='main'>
<div id='tiddlerDisplay'></div>
</div>
<!--}}}-->
Inoculate 3 ml sterile LB broth with desired culture###Use a 13×100 mm tube that will fit in the Spec-20 or a Klett flask if you need to monitor entry into stationary phase, which increases repeatabilit.###
Incubate with aeration for exactly 24h __or__ monitor growth by OD~~600~~ every 30 min. until culture enters stationary phase###Stationary phase is defined for the purpose of this assay as the point at which the OD~~600~~ does not change by more than 5% in a 30-min. interval[r[Luidalepp2011]]###
At 24h or at desired time point after entry into stationary phase, serially dilute and [[spot plate|Viable count by spot plating]] to obtain [g[viable count]] (total cell count)
Transfer a 150-μl aliquot of each culture to a sterile 96-well plate and add 1 μl of 3.75 mg/ml ofloxacin (25 μg/ml final concentration);###Dilute a small amount of [f[ofloxacin]] stock to 3.75 mg/ml; keeps in the refrigerator for a few days###
pipette up and down several times to be sure ofloxacin has been thoroughly mixed in.
Place lid on plate and incubate for exactly 24 hours at 37 °C.
Serially dilute and [[spot plate|Viable count by spot plating]] the persister sample to obtain a count of viable persisters that have survived antibiotic treatment.
%%Equilibration of phenol:
Melt phenol in 50°C waterbath
Add equal volume of 10:1 mM Tris-EDTA and shake or vortex, then allow phases to separate
If no aqueous (upper) phase is seen, add more TE and repeat
%%Phenol extraction of DNA:
Ethanol-precipitate DNA and redissolve in 0.2 ml Tris-EDTA
Add 4 μl of 10% SDS
Add 0.2 ml equilibrated phenol, vortex 30 sec and centrifuge 5-10 min in microcentrifuge (until phases separate)
Carefully remove aqueous (upper) layer to clean tube
Add 0.2 ml of 24:1 chloroform/isoamyl alcohol (will dissolve any residual phenol) and extract as above
Repeat chloroform/isoamyl alcohol extraction
Add 20 μl 3 M sodium acetate, mix well
Add 0.4 ml of 100% ethanol, mix well
Centrifuge at 4°C for 30 min, remove supernatant and dry pellet
Redissolve in 20 μl Tris-EDTA
#Dissolve in about 80% of the final volume of dH~~2~~O
#Adjust pH to 7.4 with HCl
#Bring to final volume
#Autoclave
#Mix first three ingredients with water, autoclave
#Add sterile potassium phosphate buffer
Transfer 1.5 ml of fresh, saturated overnight culture###For higher-quality DNA (e.g., for sequencing), grow cells overnight at room temperature without shaking, then transfer to shaker at 37 °C for four hours and proceed with plasmid prep.### into a microcentrifuge tube and spin for 30 seconds in microcentrifuge at full speed
Remove supernatant; resupend cells in 0.3 ml of STET by pipetting up and down
Add 20 μl of lysozyme and incubate 1-2 min. at room temperature###This step is dispensable for //E. coli//; for //Salmonella//, increase incubation to 30 min.###
Heat to 100°C in a boiling water bath for 90 seconds
Spin 5 minutes in microcentrifuge
Carefully scoop out pellet with a sterile toothpick and discard
Add 300 μl of ammonium acetate/isopropanol and mix well by inverting 20 times
Spin for 5 minutes in microcentrifuge at full speed
Pour off supernatant, add 1 ml of 70% ethanol and spin 3 minutes in microcentrifuge
Dry pellet thoroughly
Resuspend carefully in 50 μl of 10:1 mM TE
%%Ponceau S binds tightly to nylon-based membranes so cannot be used with them, but it is suitable for either nitrocellulose or PVDF membranes.
Incubate membrane for up to an hour in staining solution on a rocker
Rinse in dH~~2~~O until the background is clean
Stain can be completely removed from the protein bands by continued washing
#Mix ingredients and dissolve stain
#Store at 4 °C; do not freeze
Calculate amount of growth medium needed based on 25 ml per plate
Add agar (unless included in a commercial mix) at 15 g/l
Prepare medium in a //media flask//###Use a flask at least twice as large as the volume of medium needed, to avoid boil-over problems during autoclaving.###
Add desired volume of water, swirl to mix well###No stir bar is needed for most ordinary media.###
Cover flask with foil and add a small square of autoclave tape
Turn on the 50 °C water bath adjacent to the autoclave and be sure it has about 5 cm of water—add more ''dH~~2~~O only'' if necessary
Autoclave medium 20 min. at 15 psi (121 °C) on ''fluid'' cycle
Remove medium promptly after autoclaving (with gloves) and transfer to 50 °C water bath
Allow about 15 min. to cool to pouring temperature (water bath thermometer should return to about 50 °C)
Add any needed antibiotics or other supplements
''__Mix thoroughly__'' (even if no supplements were added) by swirling the flask###Agar is heavier than water and will settle to the bottom; if not well mixed, you'll get some sloppy plates and some too-solid plates###
Pour enough agar into each plate so that it just covers the bottom by itself with no swirling—this should be about 25 ml per plate (bottom half about half full as seen from the side)
Let harden 15-20 min.
Invert plates and incubate about 24 hrs at 37 °C to dry, then place in a plate bag and refrigerate
Grow host strain overnight in LB broth
Dilute 1:100 (50 μl) into 5 ml of LB broth and add CaCl~~2~~ to a final concentration of 5 mM (250 μl of 0.1 M)###Calcium is required for phage adsorption and to prevent sensitivity to chloroform###
Incubate with aeration to OD~~600~~ = 0.8 (about 2 × 10^^8^^ cells/ml)
Add P1 phage###Amount of phage to add should be about 10^^7^^ phage, if concentration is known; otherwise, try 50 μl of an existing stock### to 1 ml of the host strain and incubate 20 min in a waterbath at 37°C
Add 2.5 ml R top agar and plate immediately on a fresh R plate
Incubate right-side-up at 37°C for 8 hours
Scrape soft agar layer into a __glass__ centrifuge tube (30-ml Corex tube)
Wash the surface of the plate with 1 ml LB broth and add to the tube
Add 100 μl of chloroform and vortex vigorously for 30 sec, then let stand 10 min
Centrifuge 10 min at 7000 × //g// to pellet cell debris
Transfer supernatant to a clean tube, add 100 μl of chloroform, vortex vigorously for 30 sec and store at 4°C
Grow donor strain overnight in LB broth
Dilute overnight culture 1:100 (50 μl) in 5 ml of LB broth containing 0.2% glucose (50 μl of 20%) and 5 mM CaCl~~2~~ (250 μl of 0.1M)###Calcium is required for phage adsorption and to prevent sensitivity to chloroform.###
Incubate for 30 min. at 37 °C with aeration###Cultures will not lyse if the starting cell density is too high. Miller recommends growing the cells for one hour at 37°C without shaking prior to adding the phage.###
Add 0.1 ml of P1//vir// phage stock###The ratio of phage to bacteria should be greater than 1:1. Miller recommends 0.1 ml of phage at 10^^9^^ pfu/ml for 5 ml of culture grown one hour without aeration.### and shake or rotate at 37 °C for 2-4 hours, until cells lyse (culture clears). If no clearing is seen by four hours, continue with procedure###Cultures that do not visibly lyse will often yield usable lysates. However, plate lysates generally yield a higher titer of phage and can be used to amplify a low-titer phage###.
Add 0.1 ml of chloroform and vortex vigorously for at least 30 seconds
Transfer to a 30-ml Corex centrifuge tube###Chloroform will destroy most plastic centrifuge tubes### and centrifuge 10 min. at 4500 × //g//
Transfer supernatant to a sterile 5-ml screw-cap tube, add 0.1 ml chloroform, vortex vigorously
Store at 4 °C
Transfer 10 ml of culture to a 50-ml centrifuge tubeand centrifuge at 5000 × //g// and 4°C; ''keep cold throughout remainder of procedure''###Samples must be kept cold throughout to prevent formation of additional isoAsp residues###
Wash pellet twice with 10 ml of cold wash buffer (methyltransferase assay buffer lacking PMSF and DTT)
After last wash, resuspend pellet in 1 ml cold methyltransferase assay buffer and transfer to a microcentrifuge tube on ice###If assays will not be done immediately, quick-freeze in liquid nitrogen and store at −80°C###
Use sonicator with microtip set for 1-second pulses and 40% power; rinse tip with ethanol and dH~~2~~O before use and with dH~~2~~O between samples
Keeping samples on ice, sonicate each for 20-30 sec, then move to the next—do not allow samples to get warm
Continue until each sample has been sonicated 3×
Centrifuge samples in a refrigerated microcentrifuge at 4°C and 20,000 × //g// for 40 minutes to pellet membranes and unbroken cells
Remove lysate to a clean, prechilled tube without transferring pellet or debris
Transfer 50 μl of each lysate to a clean tube for [[Lowry assay|Lowry protein assay]] for total protein
Use remainder of lysate immediately for Macfarlane assay or quick-freeze in liquid nitrogen and store at −80°C###If samples are to be shipped for the isoAsp assay, ship frozen samples on dry ice.###
!!!Kits and reagents
*New England Biolabs [[Quick Blunting Kit|https://www.neb.com/protocols/0001/01/01/blunting-protocol-e1202]]
*New England Biolabs [[Quick Ligation Kit|https://www.neb.com/protocols/0001/01/01/quick-ligation-protocol]]
*Zymo Research [[Zyppy plasmid midiprep kit|docs/zyppy midiprep.pdf]]
!!!Instrument manuals
*BioRad 680 [[microplate reader|docs/BioRad 680 microplate reader.pdf]]
This page briefly describes currently active projects in the lab. Click the heading of each project for a detailed description of current progress and open questions.
!!!!Hypothesis 1: isoAsp damage has a synergistic effect in combination with denaturing stresses, destabilizing the conformation of cellular proteins or inhibiting their re-folding once unfolded.
!!![[Aggregation]]
Using an aggregated protein assay, determine whether PCM repair reduces the amount of bulk aggregated or stress-aggregatable protein in the //E. coli// cell.
!!!Aggregate disposal
Using fluorescence microscopy and a strain with an IbpA-YFP reporter fusion, find out whether PCM-deficient strains have more or larger aggregates and whether they are defective in disposing their aggregates to the poles of the cell.
!!![[PCM Partners]]
Dissect the possible relationship of PCM with other protein-maintenance factors, using a genetic approach to determine (a) whether Δ//pcm// mutant phenotypes intensify in combination with mutations in chaperons, proteases or other stress-response proteins; and (b) whether overexpression of chaperons or other maintenance proteins ameliorates Δ//pcm// phenotypes.
!!![[Chemical Chaperones]]
Could "chemical chaperones"[r[Diamant2001,Diamant2003,Tatzelt1996,Samuel2000,Singer1998a,Yang1999,Voziyan2000,Prasad2011]]—molecules that can prevent misfolding or promote refolding of proteins—"rescue" repair-deficient cells from survival defects?
!!!//In vivo// [[Folding Reporter]]
Construct a //lacZ//-based reporter that can be fused to proteins known or suspected to be easily unfolded or susceptible to isoAsp damage to monitor their folded state //in vivo// in wild-type and Δ//pcm// strains.
!!![[Oxidation]]
Measure protein oxidation in the presence and absence of PCM to look for an effect of oxidation on isoAsp damage or vice-versa.
!!![[Prions]]
Determine whether PCM can prevent or reverse prion aggregation and whether this effect is dependent on its catalytic activity.
!!!!Hypothesis 2: PCM is advantageous primarily after restoration of nutrients allows aged E. coli cultures to resume metabolic activity, as well as in subpopulations that are active at any given point during long-term stationary phase.
!!![[Viable/Inviable Cells]]
Separate viable from inviable stationary-phase cells and examine isoAsp accumulation in the viable and inviable fractions as well as the ability of each to repair isoAsp damage //in vivo//.
!!![[Aggregation in Viable/Inviable Cells|Aggregation]]
Fluorescent dyes that bind DNA and RNA can be used to visually distinguish viable from inviable cells. Combining this with the IbpA-YFP system to quantitate protein aggregates using fluorescence could lead to determining whether PCM reduces aggregation in viable but not inviable cells.
!!![[Stasis]]
Using //E. coli//'s RelE/RelB toxin-antitoxin system, induce stasis by blocking protein synthesis in cells that have access to nutrients and can generate energy to determine if these metabolically active cells are able to prevent isoAsp accumulation, unlike their starving stationary-phase counterparts.
!!!!Additional Projects
!!![[Adhesins]]
A bioinformatic algorithm suggests that an outer-membrane adhesin, Ag43 or Flu, is likely strongly susceptible to isoAsp damage; determine whether PCM affects cell-cell or cell-surface adhesion via this protein.
!!!Filamentation
Under low-salt conditions, a Δpcm mutant forms filaments during long-term stationary phase while repair-proficient cells are less likely to filament. We are investigating the conditions under which filamentation occurs, what genes are involved, and whether this represents a survival strategy or is the result of protein damage.
!!![[Cellular Compartments]]
Determine whether PCM is strictly cytoplasmic or might act on periplasmic or membrane proteins in some way by fractionating cells and measuring PCM activity and isoAsp damage in the cytoplasm, periplasm and inner- and outer-membrane fractions.
!!![[PCM and SurE]]
[>image[The //surE//-//pcm// operon in //E. coli//|images/text/sure.gif]]
The first gene in the //pcm// operon is //surE// (figure at right), a putative acid phosphatase[R[Lee2001]] with no known specific function; isoaspartyl damage accumulates to a higher level in a //surE-pcm// double mutant than in a //pcm// mutant.[R[Visick1998a]] What could be the function of SurE in limiting isoAsp accumulation?
Our lab studies the repair of a specific form of protein damage, isoaspartyl damage. This page introduces major kinds of protein damage and repair mechanisms. The [[next page|Isoaspartyl Damage and Repair by PCM]] discusses isoaspartate formation and repair specifically.
''Prevention and repair of macromolecular damage are crucial to the survival of a cell''. DNA repair, essential for limiting the mutation rate, is the best-known form of repair. However, spontaneous and environmentally induced alterations of proteins have also been implicated in diseases such as diabetes, atherosclerosis, Alzheimer’s disease, autoimmune disorders and cancer, as well as in the aging process.[R[Johnson1999]] Even in the absence of damaging environmental agents, the myriad chemical reactions occurring within cells pose a constant threat to the integrity of macromolecules. Generation of [G[reactive oxygen species|ROS]], for example, is an inescapable consequence of oxygen-dependent metabolism and results in damage to proteins, lipids and DNA.[R[Berlett1997]]
''Protein damage'' can be divided into two major classes: conformational and covalent.[R[Visick1995]] As shown in the diagram below, [G[conformational damage]] refers to unfolding of the protein, while [G[covalent damage]] is a chemical change in the amino acids that make up the protein. These changes can occur spontaneously or can be induced or accelerated by environmental factors. Both kinds of damage can drastically affect protein function.
[image[Proteins are subject to conformational (unfolding) damage (left)<br>as well as covalent (chemical) damage (right)|images/text/damage.png]]
''Conformational protein damage'' is the best-studied kind of protein damage. It results from heat, attack by [G[ROS]], pH changes, high salt or other conditions that [G[denature|denaturation]] (unfold) proteins.[R[Visick1995]] This disruption of the three-dimensional structure of a folded protein can reduce or eliminate its function and may lead to formation of non-functional or even pathological aggregates as hydrophobic regions become exposed.[R[Lowenson1994]]
''Covalent protein damage'' alters the primary amino-acid sequence of the protein is [G[covalent protein damage|covalent_damage]].[R[Visick1995]] Oxidative modification of amino acids resulting from [G[reactive oxygen species|ROS]][R[Linton2001]] is one form of covalent damage: for example, methionine can be oxidized to form methionine sulfoxide[R[Farr1991]] or histidine can be converted to asparagine or aspartate.[R[Stadtman1992]] Isomerization of proline[R[Lang1987]] or formation of unwanted disulfide bonds[R[Derman1993]] are other forms of covalent damage. Our laboratory studies one specific form of covalent damage, [[isoaspartyl damage|Isoaspartyl Damage and Repair by PCM]].
''Why repair proteins?'' Unlike DNA, proteins might seem dispensable at first glance: as long as its DNA is intact, a cell can synthesize new copies of proteins indefinitely. But when protein damage is detectable by enzymes, repair is a frugal alternative to replacement, particularly if new protein synthesis is limited. Striking examples of the need for repair include human erythrocytes (which circulate for 120 days with no new protein synthesis[R[Galletti1995]]), eye lens proteins (never replaced in the lifetime of the individual[R[Kagan1997]]) and bacteria in stationary phase (which can survive for years with no added nutrients[R[Finkel2006]]). Maintaining function of existing proteins can become critical for //any// cell, however—such as when nutritional conditions limit protein turnover, or as //de novo// protein synthesis declines in aging tissue.[R[Ryazanov2002]] ''Repair of protein damage'' depends on (i) the ability to recognize a change in a protein as abnormal, and (ii) a means of reversing the change. Protein repair is conceptually illustrated in the figure below.
[image[Overview of protein damage and repair|images/text/prepair.gif]]
The best-known protein-repair mechanisms are the [G[chaperon|chaperon]] systems for refolding conformationally damaged proteins.[R[Bukau1998]] The Hsp60 family, represented by GroEL in //E. coli//, can re-fold partially denatured proteins,[R[Ben-Zvi2001]] while chaperons such as DnaK (Hsp70 family) or ClpB (Hsp104 family) can both re-fold and disaggregate conformationally damaged substrates.[R[Glover1998,Parsell1993]] Additionally, protective agents such as [G[betaine]] and [G[trehalose]] stabilize protein conformation and further help reduce the incidence of covalent damage.[R[Diamant2001]]
Detecting covalent damage is more difficult, but several covalent repair systems have been identified, including methionine sulfoxide reductase,[R[Stadtman2002]] peptidyl-prolyl isomerases[R[Göthel1999]] and the subject of our lab's work, the [G[L-isoaspartyl protein carboxyl methyltransferase|pcm]] (or PCM), which repairs isoaspartate.
[G[Proteases|protease]] can also be seen as damage-response systems, since prompt degradation of proteins that cannot be readily refolded is an important means of limiting their negative effects.[R[Davies1998]]
''Deterioration of protein function'' often involves the interplay of covalent and conformational damage. Oxidative damage, for example, is a common cause of unfolding and aggregation,[R[Levine2001,Squier2001]] while misfolded proteins become more susceptible to covalent attacks.[R[Nyström2003]] Prevention of covalent damage by superoxide dismutases, [G[catalases|catalase]], and glutathione thus plays a role in maintenance of protein conformation,[R[Linton2001]] and one can readily imagine that repair of covalent damage might have a similar function in mitigating conformational damage.
Our work to date raises many questions about the function of PCM, including:
#''How'' does PCM enhance long-term survival in //E. coli//: by repairing active-site residues? by maintaining protein conformation? by mitigating effects of oxidative or other damage? by acting on a small number of key substrates or more generally?
#''When'' does PCM act to repair damaged proteins: continuously as damage occurs? or at specific times during aging or recovery?
#''Where'' in the cell or population does PCM exert its effect: only in the cytoplasm, or in other compartments as well? in all cells of the population or only in selected subpopulations?
This page presents the two major working hypotheses that are currently guiding most of the work in our lab.
!!How does PCM-mediated repair help protect aging //E. coli// from stress?
[<image[Long-term survival of pcm mutants (JV1068)<br>treated with paraquat (from Visick, 1998)|images/text/paraquat.png]]
Surprisingly, isoAsp formation does not seem directly [G[deleterious]]: Mutants lacking isoAsp repair survive as well as their wild-type counterparts in long-term stationary phase.[R[Visick1998]] This suggests that restoring activity of proteins damaged by isoAsp formation at an active-site Asp or Asn is //not// likely PCM's primary role. However, PCM-deficient mutants //are// reduced in viability when challenged with environmental stresses[R[Visick1998]] in rich media^^1^^. After 6-8 days of incubation with paraquat, for example (see figure at left), no viable cells were detectable in a //pcm// mutant culture (Δ//pcm//), while wild-type cells persisted for several more days.[R[Visick1998]]
Not all stresses reduce survival in the absence of PCM. Intriguingly, however, the ones that do—oxidative and osmotic stresses, heat and methanol[R[Visick1998]]—have significant effects on protein conformation.[R[Davies1987,Nguyen1989]] To explain this correlation, we propose the following hypothesis:
>''Hypothesis 1'': isoAsp damage has a synergistic effect in combination with denaturing stresses, destabilizing the conformation of cellular proteins or inhibiting their re-folding once unfolded.
Our hypothesis predicts that we will be able to identify defects in protein folding or re-folding in //pcm// mutants (see [[Projects]]). The model below shows how isoaspartyl damage might destabilize a protein's three-dimensional structure, so that it would either be more easily unfolded or more difficult to refold. (i) Partial unfolding due to environmental stress could allow more (or more rapid) isoAsp formation; (ii) isoAsp formation could magnify the unfolding effect of the stress; or (iii) isoAsp formation could expose additional sites for oxidation or other stress-induced damage. Alternatively, degradation and recycling of unfolded proteins could be blocked by isoAsp formation.
[image[Models for the interaction between isoAsp formation and unfolding stresses|images/text/foldingmodels.jpg]]
Several recent findings lend support to our hypothesis: In //Drosophila//, overexpression of PCM extends lifespan only when the flies are subjected to heat stress.[R[Chavous2001]] Flies fed urea, a strong denaturant, showed increases in isoAsp accumulation and PCM activity.[R[David1999]] Additionally, overexpression of PCM was able to suppress aggregation of three different heterologous proteins expressed in //E. coli//.[R[Kern2005,Wang2006,Zhu2006]] To date, however, no published work has directly addressed the effect of PCM-mediated repair on protein conformation //in vivo//.
!!When is PCM active in repairing proteins?
[<image[Isoasp accumulation in stationary phase|images/text/accum.png]]
Because isoaspartyl damage is spontaneousR[Clarke1992]], we'd expect damaged proteins to accumulate during long-term stationary phase, when protein synthesis is minimized by nutrient limitation. Indeed, this is the case (see figure at right), with more rapid accumulation when cells are cultured at higher pH.[R[Hicks2005]]^^1^^ Surprisingly, however, a mutant lacking PCM (Δ//pcm//) did __not__ accumulate more isoAsp than wild-type, nor did damage accumulate more rapidly. Thus, the survival phenotypes of //pcm// mutants cannot be accounted for simply by an overall increase in isoAsp damage for all cells in the aging culture. Three ways to explain this unexpected result are:
#PCM effectively repairs proteins only in a minority subpopulation of aging cells
#PCM repairs only cytoplasmic damage, and extensive extracytoplasmic isoAsp accumulation masks any difference
#PCM effectively repairs a small number of critical substrates but has little effect on the majority of proteins
Based on our results to date, we favor the first option and propose the following hypothesis:
>''Hypothesis 2'': PCM is advantageous primarily after restoration of nutrients allows aged //E. coli// cultures to resume metabolic activity, as well as in subpopulations that are active at any given point during long-term stationary phase.
{{tableBox right{<<tiddler [[Tables##Lag]]>>}}}
The basis for this hypothesis comes from another unexpected result: Growth-curve measurements revealed that after five days of aging in stationary phase, PCM-deficient cells exhibited a significantly (//p// < 0.03) longer [G[lag phase]] (see table at right) before resuming exponential growth upon restoration of nutrients.[R[Hicks2005]] The increased lag time was observed only for aged cells and only when the fresh medium was buffered to pH9. We did not anticipate that PCM-mediated repair would be important when cells were //not// nutrient-limited and could freely synthesize new proteins.
[>image[Model suggesting that PCM might act primarily in<br>metabolically active subpopulations of stationary-phase //E. coli//<br>and/or in recovering cells|images/text/hyp2.png]]
Taken together, these results suggest that the simplistic view that PCM repairs damage as it occurs to maintain protein function in metabolically inactive cells needs to be re-examined. We propose that (1) PCM may have limited function in metabolically inactive starving cells but is needed to repair proteins and speed recovery once nutrients are restored. (2) Enhanced stationary-phase stress survival may actually result from improved recovery of sub-populations of cells which are metabolically active (at the expense of other subpopulations) at a particular time in the dynamic long-term stationary-phase state.[R[Finkel2006]] In this view, PCM-mediated repair would improve the survival rate of currently active aging cells, but the culture as a whole would continue to accumulate isoAsp due to PCM's limited role in cells that are genuinely dormant. When those cells that are still viable encounter fresh nutrients, however, we suggest that the enzyme gains renewed importance as the bacteria attempt to utilize those nutrients rapidly and efficiently. Our hypothesis predicts that we will find differences in PCM activity or isoAsp accumulation in subpopulations of stationary cells and during recovery from stationary phase (see [[Projects]]).
!!Where does PCM function to repair proteins?
PCM appears, based on its amino-acid sequence, to be a cytoplasmic protein. Yet, if the effect of pH is to increase the rate of isoaspartyl damage, proteins in the [G[inner and outer membranes and periplasm|periplasm]] of the //E. coli// cell would be most readily affected: the cytoplasmic pH is strongly buffered. It may be that a relatively small change in cytoplasmic pH has a significant effect, or it is possible that PCM could also assist in maintaining functional cell-surface proteins in some way. For example, one author has suggested that PCM released from lysed cells could function in the extracellular milleu.[R[Clarke2003]]
An intriguing recent finding also points toward the possibility of an extra-cytoplasmic role for PCM. A bioinformatic analysis of the //E. coli// [G[proteome]] (Braun, Visick and St. Clair, unpublished) identified proteins predicted to have a high likelihood of isoaspartyl damage. Several of these putatively damage-prone proteins are [G[adhesins]] in the //flu// (Ag43) family. These adhesins are outer-membrane proteins that allow cell-cell and cell-surface adhesion of //E. coli//;[R[Danese2000,Roux2005]] if they are indeed both susceptible to damage and repaired by PCM, there would have to be some mechanism of extracellular PCM function.
''Want to contribute?''' The answers to these questions will come from undergraduate research! NCC students who would like to work on protein repair by PCM in //E. coli// should [e[contact Dr. Visick|jevisick@noctrl.edu]] to discuss possible projects. Research can be done during the summer (summer stipends are available; see the [[Biology|http://www.nccbiology.com]] page for more info.), during the academic year or during D-term.
-----
#Stress phenotypes are dependent on elevated pH,[R[Hicks2005]] which occurs naturally over time in rich media, where amino acids are the primary energy source, resulting in formation of ammonia. This finding is consistent with an increased rate of isoaspartyl formation //in vitro// under alkaline conditions[R[Brennan1994]] which favor deprotonation of the peptide-bond nitrogen and succinimide formation.
#Add tryptone, NaCl, yeast extract and agar to 100 ml dH~~2~~O; mix and autoclave.
#Cool to 50° and add CaCl~~2~~ and glucose
#Pour plates
#Add tryptone, NaCl, yeast extract and agar to 100 ml dH~~2~~O; mix and autoclave.
#Cool to 50° and add CaCl~~2~~ and glucose
#Dispense into tubes (2.5 ml each) and maintain at 50°C
#Add Tris and NaCl to dH~~2~~O and mix
#Dissolve RNAse
#Heat to 100°C for 15 minutes###Heating step inactivates much more heat-labile DNAse, yielding DNAse-free RNAse###
#Let cool slowly to room temperature
#Dispense into 1-ml aliquots and store at -20°C
Prewarm 50 ml of growth medium to 37°C at least 1 hr prior to inoculation
Inoculate media with desired strains and grow under desired conditions
Harvest 35 ml cells and place on ice
Centrifuge at 20,000 × //g// for 10 min at 4°C to pellet cells
Remove supernatant and wash cells in 10 ml of ice-cold 1× PBS
Measure OD~~600~~ after resuspension and repeat centrifugation
Resuspend cells to an OD~~600~~ of about 1.0/ml in room-temperature 1× PBS
Aliquot 750 μl into 1.5-ml microcentrifuge tubes; keep unused cells on ice
Add CellROX Green to a final concentration of 5 μM (15 μl of 250 μM stock dilution) and incubate at 37°C for 30 min
Add an equal volume of 10% formalin to fix cells and incubate at room temperature for 15 min
Centrifuge at 20,000 × //g// for 10 min to pellet cells
Wash three times with 1 ml of 1× PBS, centrifuging 10 min at 20,000 × //g// each time
Resuspend cells in 1× PBS to an OD~~600~~ of about 1.0/ml (about ⅔ of the volume used during incubation with CellROX)
Aliquot 300 μl per well into a 96-well plate
Serially dilute 1:2 three times, leaving 150 μl of sample in each well (4 wells/sample)
Measure fluorescence###CellROX can also be detected via microscopy. Counterstain with FM4-64 (excitation 515nm, emission 640 nm; use 15 μg/ml and stain 10 min at room temperature) to visualize the membrane of the bacteria### (excitation 485 nm, emission 520 nm) with microtiter plate reader, then measure OD~600~
<script>
var listTid = story.findContainingTiddler(place).getAttribute("tiddler");
if ( listTid == "RefList" ) { return false; }
place.innerHTML = "Retrieving...";
var method = store.getValue("References","method");
if ( !method || method == "alpha" ) {
var currentItem = store.getValue("References","currentitem");
if ( !currentItem || currentItem == "" ) {
currentItem = "A";
store.setValue("References","currentitem",currentItem);
}
var query = "SELECT DISTINCT LEFT(authors,1) as letter FROM reftable ORDER BY letter";
var letters = refQuery(query);
var query = "SELECT * FROM reftable WHERE authors LIKE '" + currentItem + "%' ORDER BY authors ASC, year ASC";
var refs = refQuery(query);
place.innerHTML = "";
switchButton(place,method);
var index = createTiddlyElement(place,"div",null,"listindex alpha");
for ( var i=0; i<letters.length; i++ ) {
var item = letters[i].letter;
var btn = createTiddlyButton(index,item,item,function(e){
store.setValue("References","currentitem",this.item);
story.refreshTiddler("References",null,true);
},"indexButton","References"+item);
btn.item = item;
if ( currentItem == item ) { btn.classList += " active"; }
}
writeRefList(refs,place);
}
else {
var currentItem = store.getValue("References","currentitem");
if ( !currentItem || currentItem == "" ) {
currentItem = "PCM";
store.setValue("References","currentitem",currentItem);
}
var query = "SELECT DISTINCT file FROM reftable ORDER BY file";
var topics = refQuery(query);
var query = "SELECT * FROM reftable WHERE file = '" + currentItem + "' ORDER BY authors ASC, year ASC";
var refs = refQuery(query);
place.innerHTML = "";
switchButton(place,method);
var index = createTiddlyElement(place,"div",null,"listindex topics");
for ( var i=0; i<topics.length; i++ ) {
var item = topics[i].file;
var btn = createTiddlyButton(index,item,item,function(e){
store.setValue("References","currentitem",this.item);
story.refreshTiddler("References",null,true);
},"indexButton","References"+item);
btn.item = item;
if ( currentItem == item ) { btn.classList += " active"; }
}
writeRefList(refs,place);
}
function writeRefList (refs,place) {
var rlist = parseRef(refs,"reflist");
var content = createTiddlyElement(place,"div",null,"refListContent");
var ul = createTiddlyElement(content,"ul",null,"refListUL");
for ( var i=0; i<rlist.length; i++ ) {
var li = createTiddlyElement(ul,"li",null,"refListItem");
wikify(rlist[i][0],li);
li.ref = rlist[i][1];
li.onclick = function(){
referenceCard(this.ref,this);
}
}
return false;
}
function switchButton(place,method) {
var loc = document.getElementById("tiddlerReferences").getElementsByClassName("title")[0];
if ( method == "alpha" ) {
var label = "List by topic"; var tip = "List references by topic"; var cur = "PCM"; var mtd = "topic";
}
else {
var label = "Alphabetical list"; var tip = "List references alphabetically"; var cur = "A"; var mtd = "alpha";
}
var mbtn = createTiddlyButton(loc,label,tip,function(e){
store.setValue("References","method",mtd);
store.setValue("References","currentitem",cur);
story.refreshTiddler("References");
return false;
},"switchButton",null);
return false;
}
</script>
// // {{{referenceCard(ref,place)}}}: Pop up reference information in a modal box "card" format
//{{{
function referenceCard(ref,place) {
jQuery("#refcard").remove();
var anchor = createTiddlyElement(place,"span","refcard","refanchor");
place.id = "openref";
var width = jQuery("#openref").width() * 0.95;
jQuery("#refcard").insertAfter("#openref");
place.id = "";
var refobj = getRef(ref);
for ( var i in refobj ) {
if ( i == "title" ) { store.setValue("ShowReference","reftitle",refobj[i]); }
else { store.setValue("ShowReference",i,refobj[i]); }
}
var authors = store.getValue("ShowReference","authors").split(",");
var cardtitle = briefAuthors(authors) + " (" + store.getValue("ShowReference","year") + ")";
var box = createTiddlyElement(anchor,"div",null,"refModal",null);
jQuery("#refModal").width(width);
var title = createTiddlyElement(box,"div",null,"modalTitle",cardtitle);
var close = createTiddlyElement(title,"span",null,"modalClose",null);
var template = "refViewTemplate";
var tidid = story.tiddlerId("ShowReference");
var tiddlerElem = createTiddlyElement(box,"div",tidid,"tiddler");
tiddlerElem.setAttribute("refresh","tiddler");
story.refreshTiddler("ShowReference","refcardViewTemplate",false,null,null);
wikify("×",close);
close.onclick = function() { document.getElementById("refcard").remove(); }
jQuery("#refcard modalBox").show();
}
//}}}
// // {{{getRef(name)}}}: Get a single reference by {{{name}}}
//{{{
function getRef(name) {
return JSON.parse(jQuery.ajax({
type: 'POST',
url: 'refs/getref.php',
data: { refname: name },
async:false
}).responseText);
}
//}}}
// // {{{parseRef(obj,parse)}}}: parse a JSON reference object as specified by {{{parse}}}
// // use for one (getRef) or multiple (getRefs, getRefQuery) references; returns array
//{{{
function parseRef(obj,parse) {
if ( obj instanceof Array ) { var refs = obj; } else { var refs = [obj]; }
var output = [];
for ( var i=0; i<refs.length; i++ ) {
var authors = refs[i].authors.split(",");
switch(parse) {
case "brief":
output.push(briefAuthors(authors) + " (" + refs[i].year + ")");
break;
case "popup":
var txt = briefAuthors(authors) + " (" + refs[i].year + ") " + shortJournal(refs[i].journal) + " \'\'" + refs[i].volume + "\'\':" + refs[i].pages;
if ( refs[i].pdf ) { output.push([txt,refs[i].pdf]); } else { output.push(txt); }
break;
case "reflist":
var txt = briefAuthors(authors) + " (" + refs[i].year + ") " + refs[i].title;
output.push([txt,refs[i].ref]);
break;
default:
alert("Parse method " + parse + " is not yet defined.");
return false;
}
}
return output;
}
//}}}
// // {{{briefAuthors(authors)}}}: return authors in the form {{{Smith}}}, {{{Smith and Jones}}}, or {{{Smith et al.}}} as appropriate
//{{{
function briefAuthors(authors) {
var first = lastName(authors[0]);
if ( authors.length > 1 ) {
if ( authors.length > 2 ) { return (first + " et al."); }
else { return first + " and " + lastName(authors[1]); }
}
return first;
}
//}}}
// // {{{lastName(author)}}}: extract last name from author in the form {{{Smith AB}}}
//{{{
function lastName(author) {
var end = author.lastIndexOf(" ");
return author.substr(0,end);
}
//}}}
// // {{{shortJournal(journal)}}}: lookup journal abbreviation
//{{{
function shortJournal(journal) {
return store.getTiddlerSlice("JournalList",journal.toLowerCase().replace(/\s/g,"_")) || journal;
}
//}}}
// // {{{getRefs(names)}}}: Get ref objects for a comma-separated list of names
//{{{
function getRefs(list) {
return JSON.parse(jQuery.ajax({
type: 'POST',
url: 'refs/getrefs.php',
data: { refnames: list },
async:false
}).responseText);
}
//}}}
// // {{{refQuery(query)}}}: Query ref database with WITH expression {{{query}}}
//{{{
function refQuery(query) {
return JSON.parse(jQuery.ajax({
type: 'POST',
url: 'refs/refquery.php',
data: { query },
async: false
}).responseText);
}
//}}}
// // Formatter for reference popup link
// // Syntax: {{{[R[text (optional)|ref1,ref2]]}}}
//{{{
config.formatters.push({
name: "reference",
match: "\\[[Rr]\\[",
lookaheadRegExp: /\[[Rr]\[(.+?)\]\]/g,
handler: function(w) {
this.lookaheadRegExp.lastIndex=w.matchStart;
var eMatch=this.lookaheadRegExp.exec(w.source);
if(eMatch && eMatch.index==w.matchStart) {
var rtext = eMatch[1].split("|");
if ( rtext.length > 1 ) { var text = rtext[0]; var refs = rtext[1]; }
else { var text = null; var refs = rtext[0]; }
if ( text ) { wikify(text,w.output); }
var marker = createTiddlyElement(w.output,"img",null,"refMark",null);
marker.src = "images/icons/ref.svg";
marker.reflist = refs;
marker.onclick = this.onclick;
w.nextMatch=eMatch.index+eMatch[0].length;
}
},
onclick: function(ev) {
var e = ev || window.event;
var popup = Popup.create(this,null,"popup reference sticky");
var refs = parseRef(getRefs(this.reflist),"popup");
for ( var i=0; i<refs.length; i++ ) {
var rpar = createTiddlyElement(popup,"p",null,null);
rpar.innerHTML = wikifyStatic(refs[i][0]);
if ( refs[i][1] ) {
var pdfa = createTiddlyElement(rpar,"a",null,null,null);
var pdfi = createTiddlyElement(pdfa,"img",null,"pdfimage",null);
pdfi.src = "images/icons/pdf.svg";
pdflink = "library/" + refs[i][1];
pdfa.href = pdflink;
pdfa.onclick = openInNewWindow;
}
}
Popup.show();
e.cancelBubble = true;
if(e.stopPropagataion) e.stopPropagation();
return false;
}
});
//}}}
''Molecular damage'' is one important cause of aging and disease###The [[National Institute on Aging|http://www.nia.nih.gov]] publication "[[In Search of the Secrets of Aging|http://www.niapublications.org/pubs/secrets-of-aging/index.htm#content]]" provides a good overview of aging research for the general public (Finch2001).###. Genetic changes, environmental factors such as [[reactive oxygen species|http://en.wikipedia.org/wiki/Reactive_oxygen_species]] ("free radicals") and spontaneous chemical reactions can all affect the [G[macromolecules]] essential to the functions of a cell.
''Proteins can lose their function'' when they are misfolded or unfolded ("conformational damage") or when critical amino acids are chemically changed ("covalent damage"). Damaged proteins have been implicated in aging and are also involved in Alzheimer's disease, autoimmune diseases, "mad cow" disease and even cancer.[R[Lee2005]] Some forms of damage can't be repaired, and the abnormal protein must be degraded. But some kinds of damage can be recognized by cellular enzymes and the protein refolded or repaired.
<html><video src="images/video/pcm_anim.mp4" height="209" width="300" class="animbox right" controls>HTML5 Video is required to view this animation</video></html>
''Our laboratory studies protein repair'', which cells use to overcome protein damage resulting from common, spontaneous chemical reactions. Specifically, we study the repair of isoaspartyl damage. The animation at right shows how an [G[aspartate]] (Asp) or [G[asparagine]] (Asn) amino acid within a protein can spontaneously isomerize. The resulting [G[isoaspartate]] (isoAsp) could affect protein activity if it occurs near an active site or if the resulting "kink" in the protein backbone affects the positioning of key amino acids or the folding of the protein. As shown in the animation, isoAsp (never found in normal proteins) can be recognized and methylated by the repair enzyme [G[PCM]] (short for L-isoaspartyl __p__rotein __c__arboxyl __m__ethyltransferase), resulting in net repair to normal Asp.[R[Clarke2003]]
''PCM is almost universal in living things'' and can restore the activity of damaged enzymes. Researchers working on bacteria,[R[Visick1998,Hicks2005]] plants,[R[Mudgett1994,Mudgett1996]] nematodes,[R[Kagan1997b]] fruit flies[R[Chavous2001]] and mice[R[Kim1997]] have shown that PCM is important for aging and/or long-term survival in each of these organisms. There is also evidence that the lack of PCM may contribute to epilepsy,[R[Lanthier2002]] autoimmunity,[R[Doyle2003,Mamula1999]] Alzheimer's,[R[Lowenson1994]] spina bifida,[R[Zhu2005]] cancer[R[LaPointe2005,Lee2012]] and other disease conditions.
[<image 150[//E. coli// (false color EM)|images/text/coli.png]]''//Escherichia coli// requires PCM'' for maximum long-term survival. Bacteria "age"###For more information, see [[Aging in E. coli]]### when they are starved and can't make new proteins, even though they can survive for years in this state, called long-term [g[stationary phase]].[R[Finkel2006]] [>image[Long-term survival of wild-type (MC1000), Δ//pcm// (JV1068) and a complementing strain (JV1083) in the presence of paraquat|images/text/colipcm.png]]When //E. coli// is grown to stationary phase in a rich growth medium, the pH rises (reaching about pH 8.5-9) due to growth on amino acids,[R[Hicks2005]] and high pH favors isoAsp formation.[R[Brennan1994]] Under these conditions, mutants lacking PCM (Δ//pcm// mutants) have a shorter "lifespan" when exposed to oxidative stress (paraquat), heat, high salt, or methanol.[R[Visick1998]] The graph at right shows the reduced survival of a Δ//pcm// mutant (JV1068) in the presence of methanol. Additionally, aged Δ//pcm// mutants exhibit a longer [G[lag phase]] once nutrients are restored.
''There is a lot we don't know'' about how PCM works in a living cell. Does it primarily repair certain crucial proteins, or is it a "maintenance" enzyme for all proteins? Does PCM function in all cells at all times or in specific subpopulations? How does it interact with other protein repair and maintenance systems? How does isoaspartate affect protein function in the cell? We hope that our research will begin to answer some of these questions, yielding information not only about the physiology of bacteria but also about the ability of PCM to maintain proteins in other organisms.
''Our current main hypotheses'' are: (1) The major effect of isoAsp damage is to disrupt or destabilize protein conformation; PCM thus contributes primarily to the maintenance of protein folding. (2) PCM functions primarily in metabolically active subpopulations during stationary phase and after nutrients are restored.
''Want to learn more?'' The other pages under this topic will tell you a lot more about isoAsp damage and what we know about PCM, as well as what we're currently investigating in the lab. Contact [E[Dr. Visick|jevisick@noctrl.edu]] if you're interested in being part of this work!
#Heat gently to dissolve SDS in about 90 ml dH~~2~~O
#Adjust pH to 7.2 with a few drops of HCl
#Bring to volume with dH~~2~~O
Keep refrigerated. Can be diluted to 2× for use or used directly.
#Dissolve components in dH~~2~~O
#Adjust pH to 7.0 with NaOH if needed
#Autoclave
#Measure dry ingredients and place in a media flask with a volume at least twice the total volume of medium to be made.
#Add liquid ingredients and appropriate volume of dH~~2~~O and swirl to mix. (No need to add a stir bar or dissolve completely.)
#Cover with foil, add a square of autoclave tape and autoclave 20 min. at 15 psi.
#Add sterile MgCl~~2~~ and glucose after autoclaving.
#After use, rinse media flask 3× with tap water and 3× with dH~~2~~O and return to shelf. No dishwashing.
#Add solid NaOH to give a pH of 6.1 (about 2 g)
#Autoclave
#Dissolve sucrose in about 60 % of total volume of dH~~2~~O
#Bring to about 80% of total volume with dH~~2~~O
#Add liquid ingredients, adjust to final volume
#Filter sterilize into sterile bottle
#Measure dry ingredients and place in a media flask with a volume at least twice the total volume of medium to be made.
#Add appropriate volume of dH~~2~~O and swirl to mix. (No need to add a stir bar or dissolve completely.)
#Cover with foil, add a square of autoclave tape and autoclave 20 min. at 15 psi
#After use, rinse media flask 3× with tap water and 3× with dH~~2~~O and return to shelf. No dishwashing.
/***
|Name|ShortcutKeysPlugin|
|Source|http://twkeys.tiddlyspace.com#ShortcutKeysPlugin|
|Version|1.0|
|Author|Jon Visick|
|License|none|
|~CoreVersion|2.1|
|Type|plugin|
|Requires|ShortcutPlugin|
|Description|Allow use of shortcut keys during TW editing|
!!!!!Description
The plugins ShortcutKeysPlugin and ShortcutPlugin provide shortcut key functions for editing ~TiddlyWiki tiddlers.
ShortcutPlugin needs to be loaded for anything to happen; you do not need to edit this file. ShortcutKeysPlugin contains the definitions for the shortcut keys you wish to use and can be edited to suit your needs. By default, it includes basic TW editing shortcuts such as ~Ctrl+B for ''bold'', ~Ctrl+I for //italic//, ~Ctrl+U for __underline__, etc.
!!!!!Usage
A shortcut key definition looks like one of these three examples:
{{{
shortcut.add("Ctrl+I",function(){
jQuery().insCursor("//")
});
shortcut.add("Alt+8",function(){
jQuery().insOne("°")
});
shortcut.add("Alt+I",function(){
jQuery().insPair("[img[","]]")
});
}}}
The key to be used goes in quotes right after the {{{shortcut.add(}}}. See list of key names below for keys that can be modified. Use a + to separate a modifier (Shift, Ctrl, Alt, Meta) from a key name.
The text that you want the key to insert into the editing area goes in quotes in the last set of parentheses. This is simply text, so it might be a ~TiddlyWiki formatter like {{{//}}} for italic, an HTML entity like {{{α}}} for the Greek letter alpha, or just a piece of text that you need to insert frequently, like {{{~TiddlyWiki}}}.
There are three ways the plugin can work; you need to specify the appropriate mode for each key you define:
#''insCursor'' means: //If no text is selected//, insert a __pair__ of the specified text at the cursor, but //if text is selected//, insert the specified text on both sides of the selected text. So, with the above definition, pressing {{{Ctrl+I}}} inserts {{{//}}} into the text at the cursor, but if the word "italicize" were selected, we'd get {{{//italicize//}}} with paired formatters. This is useful for inserting ~TiddlyWiki formatting like bold, italic, underline, links, etc. and could also be used for something like an HTML tag.
#''insOne'' means insert the specified text at the cursor. If text is selected, it will be replaced. This is useful for inserting HTML entities like special symbols, Greek letters, etc. and could also be used for un-paired ~TiddlyWiki formatters like {{{!!!}}} for a heading.
#''insPair'' means: //If no text is selected//, insert the __two__ specified text items at the cursor, but //if text is selected//, insert the first specified text before the selected text and the second after it. This is useful for some of the special ~TiddlyWiki formatters such as an image: with the definition shown above, one could select an image file name and the result would be {{{[img[image/file.name]]}}}.
!!!!!Keys
//Note: all key names are case-insensitive//
| Modifiers | Standard Keys | Special Keys |h
|shift<br>ctrl<br>alt<br>meta //(Mac only)//|~A-Z //(case-insensitive)//<br>0-9<br>punctuation:<br> `~!@#$%^&*()-_=+;:'<br> \,<.>/?{{{|}}}[]{}|f1-f12 (function keys)<br>esc //or// escape<br>tab<br>space<br>return //or// enter<br>backspace<br>scroll //or// scrolllock //or// scroll_lock<br>caps //or// capslock //or// caps_lock<br>num //or// numlock //or// num_lock<br>pause //or// break<br>insert<br>home<br>delete<br>end<br>pageup //or// page_up //or// pu<br>pagedown //or// page_down //or// pd<br>left<br>up<br>right<br>down|
!!!!!Code
***/
//{{{
shortcut.add("Ctrl+B",function(){ // Bold text: insert '' or paired formatters around ''selection''
jQuery().insCursor("''")
});
shortcut.add("Ctrl+I",function(){ // Italic text: insert // or paired formatters around //selection//
jQuery().insCursor("//")
});
shortcut.add("Ctrl+,",function(){ // Subscript: insert ~~ or paired formatters around ~~selection~~
jQuery().insCursor("~~")
});
shortcut.add("Ctrl+.",function(){ // Superscript: insert ^^ or paired formatters around ^^selection^^
jQuery().insCursor("^^")
});
shortcut.add("Ctrl+U",function(){ // Underline text: insert __ or paired formatters around __selection__
jQuery().insCursor("__")
});
shortcut.add("Alt+X",function(){ // Insert times symbol (HTML entity ×) at cursor
jQuery().insOne("×")
});
shortcut.add("Alt+8",function(){ // Insert bullet symbol (HTML entity •) at cursor
jQuery().insOne("• ")
});
shortcut.add("Alt+.",function(){ // Insert right arrow symbol (HTML entity →) at cursor
jQuery().insOne("→")
});
shortcut.add("Alt+B",function(){ // Insert Greek letter beta (HTML entity β) at cursor
jQuery().insOne("β")
});
shortcut.add("Alt+A",function(){ // Insert Greek letter alpha (HTML entity α) at cursor
jQuery().insOne("α")
});
shortcut.add("Alt+,",function(){ // Insert left arrow symbol (HTML entity ←) at cursor
jQuery().insOne("←")
});
shortcut.add("Alt+M",function(){ // Insert Greek letter mu (HTML entity μ) at cursor
jQuery().insOne("μ")
});
shortcut.add("Alt+\'",function(){ // Insert prime symbol (HTML entity ′) at cursor
jQuery().insOne("′")
});
shortcut.add("Ctrl+/",function(){ // Insert line break (<br>) at cursor
jQuery().insOne("<br>")
});
shortcut.add("Alt+Shift+*",function(){ // Insert degree symbol (HTML entity °) at cursor
jQuery().insOne("°")
});
shortcut.add("Alt+-",function(){ // Insert em dash (HTML entity —) at cursor
jQuery().insOne("—")
});
shortcut.add("Alt+Shift+_",function(){ // Insert en dash (HTML entity –) at cursor
jQuery().insOne("–")
});
shortcut.add("Ctrl+L",function(){ // Insert link formatter ([[ ]])
jQuery().insPair("[[","]]")
});
shortcut.add("Alt+I",function(){ // Insert image formatter ([img[ ]])
jQuery().insPair("[img[","]]")
});
//}}}
/***
|Name|ShortcutPlugin|
|Source|http://twkeys.tiddlyspace.com/#ShortcutPlugin|
|Version|1.0|
|Author|Jon Visick|
|License|Plugin is based on http://www.openjs.com/scripts/events/keyboard_shortcuts <br>Original shortcut script covered by BSD license|
|~CoreVersion|2.1|
|Type|plugin|
|Requires||
|Description|Allow use of shortcut keys during TW editing|
!!!!!Usage
Keys are defined in the [[ShortcutKeysPlugin]], which includes documentation.
!!!!!Credits
Source of shortcut script:
>http://www.openjs.com/scripts/events/keyboard_shortcuts/
>Version : 2.01.B
>By Binny V A
>License : BSD
!!!!!Code
***/
//{{{
shortcut = {
'all_shortcuts':{}, //All the shortcuts are stored in this array
'add': function (shortcut_combination,callback) {
var ele = document;
var ths = this;
shortcut_combination = shortcut_combination.toLowerCase();
//The function to be called at keypress
var func = function(e) {
e = e || window.event;
var element;
if ( e.target ) { element=e.target; }
else if ( e.srcElement ) { element=e.srcElement; }
if ( element.nodeType==3 ) { element=element.parentNode; }
if ( element.tagName.toUpperCase() != 'TEXTAREA' ) { return; }
//Find Which key is pressed
if ( e.keyCode ) { code = e.keyCode; }
else if ( e.which ) { code = e.which; }
var character = String.fromCharCode(code).toLowerCase();
if ( code == 188 ) { character = ","; } //If the user presses , when the type is onkeydown
if ( code == 190 ) { character="."; } //If the user presses , when the type is onkeydown
var keys = shortcut_combination.split("+");
//Counts valid keypresses - if same as number of keys, shortcut function invoked
var kp = 0;
//workaround for broken shift+num combination created by using lowercase
var shift_nums = { "`":"~", "1":"!", "2":"@", "3":"#", "4":"$", "5":"%", "6":"^",
"7":"&", "8":"*", "9":"(", "0":")", "-":"_", "=":"+", ";":":",
"'":"\"", ",":"<", ".":">", "/":"?", "\\":"|"
}
//Special Keys - and their codes
var special_keys = { 'esc':27, 'escape':27,
'tab':9,
'space':32,
'return':13, 'enter':13,
'backspace':8,
'scrolllock':145, 'scroll_lock':145, 'scroll':145,
'capslock':20, 'caps_lock':20, 'caps':20,
'numlock':144, 'num_lock':144, 'num':144,
'pause':19, 'break':19,
'insert':45,
'home':36,
'delete':46,
'end':35,
'pageup':33, 'page_up':33, 'pu':33,
'pagedown':34, 'page_down':34, 'pd':34,
'left':37,
'up':38,
'right':39,
'down':40,
'f1':112, 'f2':113, 'f3':114, 'f4':115, 'f5':116, 'f6':117,
'f7':118, 'f8':119, 'f9':120, 'f10':121, 'f11':122, 'f12':123
}
var modifiers = { shift: { wanted:false, pressed:false},
ctrl : { wanted:false, pressed:false},
alt : { wanted:false, pressed:false},
meta : { wanted:false, pressed:false} //Meta is Mac specific
};
if ( e.ctrlKey ) { modifiers.ctrl.pressed = true; }
if ( e.shiftKey ) { modifiers.shift.pressed = true; }
if ( e.altKey ) { modifiers.alt.pressed = true; }
if ( e.metaKey ) { modifiers.meta.pressed = true; }
for ( var i=0; k=keys[i],i<keys.length; i++ ) {
//Modifiers
if ( k == 'ctrl' || k == 'control' ) { kp++; modifiers.ctrl.wanted = true; }
else if ( k.toLowerCase() == 'shift' ) { kp++; modifiers.shift.wanted = true; }
else if ( k == 'alt' ) { kp++; modifiers.alt.wanted = true; }
else if ( k == 'meta' ) {kp++; modifiers.meta.wanted = true; }
//Special keys
else if ( k.length > 1 ) { if(special_keys[k] == code) { kp++; } }
//Normal key, or special keys did not match
else {
if ( character == k ) { kp++; }
else {
if ( shift_nums[character] && e.shiftKey ) { //deals with shift+num problem
character = shift_nums[character];
if(character == k) { kp++; }
}
}
}
}
if( kp == keys.length && modifiers.ctrl.pressed == modifiers.ctrl.wanted &&
modifiers.shift.pressed == modifiers.shift.wanted &&
modifiers.alt.pressed == modifiers.alt.wanted &&
modifiers.meta.pressed == modifiers.meta.wanted ) {
callback(e);
//Stop the event for IE
e.cancelBubble = true;
e.returnValue = false;
//Stop the event for Firefox.
if (e.stopPropagation) { e.stopPropagation(); e.preventDefault(); }
return false;
}
}
this.all_shortcuts[shortcut_combination] = { 'callback':func, 'target':ele, 'event': 'keypress' };
//Attach the function with the event
if ( ele.addEventListener ) { ele.addEventListener('keypress', func, false); }
else if ( ele.attachEvent ) { ele.attachEvent('onkeypress', func); }
else { ele['onkeypress'] = func; }
}
}
// Function to insert paired text at cursor OR insert pair around selected text
jQuery.fn.extend({
insCursor: function(insText){
var domEl = jQuery('textarea').get(0);
var sp = domEl.scrollTop;
var cStart = domEl.selectionStart;
var cEnd = domEl.selectionEnd;
var cAdd = cEnd + insText.length;
var newText = domEl.value.substring(0,cStart) + insText;
if (cStart != cEnd)
{ newText += domEl.value.substring(cStart,cEnd)
if ( newText.substr(newText.length-1,1) == " " ) {
newText = newText.substr(0,newText.length-1) + insText + " ";
}
else { newText += insText; }
cAdd += insText.length;
}
newText += domEl.value.substring(cEnd);
domEl.value = newText;
domEl.setSelectionRange(cAdd,cAdd);
domEl.focus();
domEl.scrollTop = sp;
}})
// Function to insert text at cursor
jQuery.fn.extend({
insOne: function(insText){
var domEl = jQuery('textarea').get(0);
var sp = domEl.scrollTop;
var cStart = domEl.selectionStart;
var cEnd = domEl.selectionEnd;
var cAdd = cEnd + insText.length;
var newText = domEl.value.substring(0,cStart) + insText;
newText += domEl.value.substring(cEnd);
domEl.value = newText;
domEl.setSelectionRange(cAdd,cAdd);
domEl.focus();
domEl.scrollTop = sp;
}})
// Function to insert two distinct text items at cursor or around selected text
jQuery.fn.extend({
insPair: function(insTextA,insTextB){
var domEl = jQuery('textarea').get(0);
var sp = domEl.scrollTop;
var cStart = domEl.selectionStart;
var cEnd = domEl.selectionEnd;
var cAdd = cEnd + insTextA.length;
var newText = domEl.value.substring(0,cStart) + insTextA;
if (cStart != cEnd) {
newText += domEl.value.substring(cStart,cEnd) + insTextB;
cAdd = cAdd + insTextB.length;
}
else { newText += insTextB; }
newText += domEl.value.substring(cEnd);
domEl.value = newText;
domEl.setSelectionRange(cAdd,cAdd);
domEl.focus();
domEl.scrollTop = sp;
}})
//}}}
<script>
wikify(tiddler.fields.reftitle,place);
wikify(tiddler.fields.year,place);
</script>
#Dissolve in 80 ml dH~~2~~O
#pH to 5.2 with concentrated acetic acid
#Bring to final volume with dH~~2~~O
#Autoclave
Dissolve in 80 ml dH~~2~~O, then bring to volume.
/***
|Name|StickyPopupPlugin|
|Source|http://www.TiddlyTools.com/#StickyPopupPlugin|
|Version|1.0.1|
|Author|Eric Shulman|
|License|http://www.TiddlyTools.com/#LegalStatements|
|~CoreVersion|2.1|
|Type|plugin|
|Description|allow mouse interactions inside popups without automatically closing them|
Usually, when a TW popup is displayed, it is automatically closed whenever a click occurs //anywhere// in the document, either //inside// or //outside// the popup itself. This plugin makes popups persistent (a.k.a, "sticky"), allowing you to perform multiple mouse interactions on content //inside// the popup (e.g., entering form fields, opening links, selecting text, etc.), remaining visible until you click //outside// the popup or perform an action that opens another popup (only one popup can be displayed at any given time).
!!!!!Configuration
<<<
You can cause popups to behave in a persistent ("sticky") manner simply by selecting the option checkbox below. The selected popup display behavior will be applied to ALL popups in the document automatically.
><<option chkStickyPopups>> make all popups "sticky"
>{{{usage: <<option chkStickyPopups>>}}}
<<<
!!!!!Usage
<<<
If you are developing your own plugins or inline scripts that create popups programmatically using the core function:
{{{
Popup.create(this)
}}}
you can provide additional parameters that specify the desired CSS classname(s) to assign to the popup DOM element. The default class when none is specified is simply "popup". To create a //sticky// popup, simply enter a custom class combination like this:
{{{
Popup.create(this,null,"sticky popup")
}}}
<<<
!!!!!Revisions
<<<
2008.05.16 [1.0.1] added try..catch around addEvent/removeEvent calls to avoid error in Opera
2007.11.25 [1.0.0] initial release - moved from [[CoreTweaks]]
<<<
!!!!!Code
***/
//{{{
version.extensions.StickyPopupPlugin= {major: 1, minor: 0, revision: 1, date: new Date(2008,5,16)};
if (config.options.chkStickyPopups==undefined) config.options.chkStickyPopups=false;
Popup.stickyPopup_onDocumentClick = function(ev)
{
// if click is in a sticky popup, ignore it so popup will remain visible
var e = ev ? ev : window.event; var target = resolveTarget(e);
var p=target; while (p) {
if (hasClass(p,"popup") && (hasClass(p,"sticky")||config.options.chkStickyPopups)) break;
else p=p.parentNode;
}
if (!p) // not in sticky popup (or sticky popups disabled)... use normal click handling
Popup.onDocumentClick(ev);
return true;
};
try{removeEvent(document,"click",Popup.onDocumentClick);}catch(e){};
try{addEvent(document,"click",Popup.stickyPopup_onDocumentClick);}catch(e){};
//}}}
----
''Always ask for help'' in retrieving strains from our main strain collection! Our bacterial strains are irreplaceable or would require days or weeks of work to re-construct; it is essential that we avoid contamination at all cost. If you will be routinely working with a strain, culture it (get help) and then create a working stock to use in your experiments.
----
To view the strain collection, [[click here|https://www.nccbiology.com/pcm/index.php?wiki=strains.html]]
#Dissolve completely in approx. 80% of the final volume of dH~~2~~O
#Bring to volume
#Do not autoclave; may be filter sterilized into sterile bottle if desired
#Store at 4°C
/*{{{*/
/*Includes*/
[[StyleSheet-PageLayout]]
[[StyleSheet-Fonts]]
/*Main menu & Sidebar*/
#wikiMenu { margin-top: 12px; }
.menuitem { font-family: OpenSans; font-size: 0.9rem; color: black; line-height: 1.5; padding-left: 18px; text-indent: -18px; }
.menuitem a { text-decoration: none; color: black; font-weight: normal; cursor: pointer; }
.menuitem a:hover { color: maroon; background-color: transparent; font-weight: bold; }
.menuicon { height: 18px; margin-right: 8px; }
#contactInfo { margin-top: 40px; font-family: OpenSans; font-size: 0.7rem; color: #666; }
#contactInfo a { text-decoration: none; }
#contactInfo a:hover { background-color: #ccc; color: blue; }
#wikiControls { margin-top: 40px; font-family: OpenSans; font-size: 0.8rem; color: #666; }
#wikiControls a { text-decoration: none; }
#wikiControls a:hover { background-color: #ccc; color: blue; border: none; }
#wikiControls img { height: 16px; margin-right: 3px; }
/*Text tiddlers*/
.texttiddler .viewer { font-family: OpenSans; font-size: 1rem; color: black; line-height: 1.5; }
.texttiddler .title { font-family: Raleway; font-size: 2rem; font-weight: 400; color: black; display: block; text-align: center; margin-bottom: 12px; }
.texttiddler a { color: black; text-decoration: none; border-bottom: 1px solid black; font-weight: normal; }
.texttiddler a:hover { color: maroon; border-bottom: 1px solid maroon; background-color: #eee !important; }
.texttiddler ol { list-style-position: inside; margin-top: 6px; margin-bottom: 6px; }
.texttiddler ul { list-style-type:square; margin-top: 6px; margin-bottom: 6px; }
.texttiddler li { margin-bottom: 9px; }
.texttiddler h2 { font-size: 1.2rem; color: maroon; margin: 0 0 12px 0; font-family: Raleway; border: none; font-weight: bold; }
.texttiddler h3 { font-size: 1.1rem; color: maroon; margin: 0 0 9px 0; font-family: Raleway; border: none; border-bottom: 1px solid maroon; font-weight: normal; }
.texttiddler h4 { font-size: 1rem; font-family: OpenSans; border: 1px solid maroon; border-left: none; border-right: none; color: maroon; font-weight: 500; margin: 6px 0; padding: 3px 6px; }
.textpar { margin-bottom: 12px; margin-top: 0; text-align: justify; }
.textpar strong { font-size: 1.1rem; font-weight: 700; }
.texttiddler blockquote { font-size: 1rem; font-family: OpenSans; border: none; border-left: 1px solid #ccc; color: maroon; font-weight: normal; margin: 6px 0 6px 15px; padding: 3px 6px; }
div[tiddler~="Projects"] h3 { color: #333; border: none; padding-left: 20px; background-image: url(images/icons/beaker.png); background-position: left center; background-repeat: no-repeat; background-size: 16px 16px; margin-top: 9px; font-size: 1.1rem; font-family: Raleway; }
div[tiddler~="Projects"] h3 a { border: none; }
/*Protocol tiddlers*/
.protocol .viewer { font-family: OpenSans; font-size: 0.9rem; color: black; line-height: 1.5; }
.protocol .title { font-family: Raleway; font-size: 1.75rem; font-weight: 400; color: black; margin-bottom: 12px; }
.protocol a { color: black; text-decoration: none; border-bottom: 1px solid black; font-weight: normal; }
.protocol a:hover { color: maroon; border-bottom: 1px solid maroon; background-color: #eee !important; }
.protocol ol { list-style-position: outside; margin: 6px 0; }
.protocol ul { list-style-type:square; margin-top: 6px; margin-bottom: 6px; }
.protocol li { margin-bottom: 6px; }
.protocol h2 { font-size: 1.2rem; color: maroon; margin: 12px 0 6px 0; font-family: Raleway; border: none; font-weight: bold; border-bottom: 1px solid maroon; clear: both; }
.protocol h3 { font-size: 1.1rem; color: maroon; margin: 0 0 9px 0; font-family: Raleway; border: none; border-bottom: 1px solid maroon; font-weight: normal; }
.materialslist, .materialslist td, .materialslist tr { border: none !important; }
.materialslist td { padding-right: 2.5rem; }
.materialslist td:last-child { text-align: right; }
/*Recipe tiddlers*/
.recipe { width: auto; display: inline-block; box-shadow: 8px 8px 6px 4px #666; padding: 8px 2px 6px 12px; }
.modalBox .recipe { box-shadow: none; padding: 0; }
.recipe .materials, .recipe .viewer { font-family: OpenSans; font-size: 0.9rem; color: black; line-height: 1.5; }
.recipe .materials { display: inline-block; }
.recipe .title { font-family: Raleway; font-size: 1.75rem; font-weight: 400; color: black; margin-bottom: 12px; }
.recipe a { color: black; text-decoration: none; border-bottom: 1px solid black; font-weight: normal; }
.recipe a:hover { color: maroon; border-bottom: 1px solid maroon; background-color: #eee !important; }
.recipe ol, .recipeTable ol { list-style-position: outside; margin-top: 6px; margin-bottom: 6px; }
.recipe ul, .recipeTable ul { list-style-type:square; margin-top: 6px; margin-bottom: 6px; }
.recipe li, .recipeTable li { margin-bottom: 4px; }
.recipeuse { font-family:OpenSans; font-size: 0.7rem; font-style: italic; display: block; margin: 4px 0 6px 9px; }
.recipeuse:before { content: "Usage: "; }
.recipeuse:empty { display: none; }
.materialtable { border: none !important; border-collapse: collapse; margin: 8px 4px 10px 4px; }
.materialtable td { padding: 2px 6px; }
.materialtable thead td { background-color: white; border: none !important; color: black;text-align: center; vertical-align: bottom; }
.materialtable th { background-color: #ccc !important; border: none !important; color: black; vertical-align: bottom; font-weight: bold; padding: 1px 3px; }
.materialtable td { border-right: none !important; border-left: none !important; }
.materialtable tr { border-top: 1px solid black; border-bottom: 1px solid black; border-left: none; border-right: none; }
.materialtable tbody td { text-align: right; }
.materialtable tbody td:first-child { text-align: left; }
input.recipeamt { font-family: Arial,Helvetica,sans-serif; font-size: 0.8rem; width: 3.2rem; padding: 0 1px; color: black; text-align: right; }
.conc { display: block; float: right; margin: 0.9rem 24px 0 0; font-family: OpenSans; font-size: 1.25rem; color: black; font-weight: 400; }
.conc select { font-family: OpenSans; font-size: 1rem; font-weight: 400; color: black; }
.recipeTable { margin-top: 15px; font-family: OpenSans; font-size: 0.8rem; font-weight: normal; color: black; }
.recipeTable h2 { font-size: 1.2rem; color: black; margin: 12px 0 6px 0; font-family: Raleway; border: none; font-weight: bold; border-bottom: 1px solid black; clear: both; page-break-after: avoid; }
.recipeTable .recipeLeft { clear: both; float: left; width: 48%; margin-bottom: 1.5rem; margin-right: 1.5rem; }
.recipeTable .recipeRight { float: left; width: 48%; margin-bottom: 1.5 rem; }
.recipePrintTitle { font-size: 1.2rem; margin-bottom: 0.5rem; }
.recipePrintUse { font-style: italic; text-indent: 2rem; margin-bottom: 0.5rem; }
.recipeTable ol, .recipeTable ul { padding-left: 1rem; }
.recipeNotes { font-size: 0.7rem; }
/*Formatting not specific to a category of tiddlers*/
.titleimg { display: inline-block; height: 2rem; margin-right: 5px; }
a.externalLink { border: none; padding-right: 1rem; background: url(images/icons/ext.svg) no-repeat right center; background-size: 0.75rem; }
/*List tiddlers*/
.listtiddler .viewer { font-family: OpenSans; font-size: 1rem; color: black; padding-top: 0; }
.listtiddler .title { font-family: Raleway; font-size: 1.5rem; font-weight: 400; color: black; display: block; text-align: left; margin-bottom: 12px; border-bottom: 1px solid #ccc; }
.listtiddler a { color: black; text-decoration: none; border: none; font-weight: normal; }
.listtiddler a:hover { color: maroon; border:none; background-color: #eee !important; }
.listindex { width: 12%; float: left; margin-right: 6px; margin-top: 3px; }
.alpha { width: 2rem !important; }
.topics { width: 20% !important; }
.listindex a { display: block; border: 1px solid #ccc; text-decoration: none; border-radius: 4px; width: 95%; font-size: 0.9rem; color: #333; font-family: OpenSans; text-align: center; padding: 1px; margin: 0 0 2px 0; background-color: #ddd; line-height: 1.2; }
.listindex a.active { background-color: white; }
.listindex a:hover { border: 1px solid maroon; color: maroon; background-color: white; }
.listindex a.active:hover { border: 1px solid #ccc; color: #333; background-color: white !important; }
.listContent { float: left; max-width: 85%; }
.listContent ul { margin-top: 0; list-style-type: none; padding-left: 0; }
.listContent li { margin-bottom: 1px; font-size: 1rem; overflow: hidden; white-space: nowrap; text-overflow:ellipsis; }
.listContent li a, .listContent li a:hover { border: none; }
.refListItem { color: black; text-decoration: none; border: none; font-weight: normal; cursor: pointer; padding-bottom: 2px; text-overflow: ellipsis; overflow: hidden; white-space: nowrap; font-size: 0.75rem; }
.refListItem:hover { color: maroon; background-color: #eee !important; }
.refListContent { margin-left: 12px; }
.switchButton { display: block; float: right; border: 1px solid #ccc; border-radius: 4px; width: 10rem; font-size: 0.7rem; color: #333; font-family: OpenSans; text-align: center; padding: 1px; margin: 0 10px 0 0; background-color: #ddd; }
/*General, reuseable styles*/
.right { float: right; }
.left { float: left; }
.center { text-align: center; }
.animbox { border: none; overflow: visible; padding-left: 6px; }
.col4 { -moz-column-count: 4; margin-left: 12px; }
.col3 { -moz-column-count: 3; margin-left: 12px; }
.col2 { -moz-column-count: 2; margin-left: 12px; }
.sequence { display: block; margin: 0 12px 0 12px; font-family: RobotoMono; font-size: 0.9rem; overflow: auto; word-wrap:break-word }
.writesmall { font-size: 70% !important; }
.write1rem { font-size: 1rem; }
.loadmsg { font-size: 1 rem; font-family: OpenSans; font-weight: normal; font-color: navy; }
.nicetitle { font-family: Raleway; font-size: 1.5rem; font-weight: 400; color: black; display: block; text-align: left; margin-bottom: 12px; border-bottom: 1px solid #ccc; }
/*Sliders*/
.slideme { color: #2255a5 !important; text-decoration: none !important; border: none !important; }
.slideme:after { content: '\a0\25BD'; }
.floatingPanel { background-color: white; border: 2px solid #ccc; width: 50% !important; padding: 2px 10px 3px 10px; font-size: 0.7rem; font-family: OpenSans; }
.floatingPanel img { border: none; }
/*Edit forms*/
.editform { font-family: OpenSans; font-size: 0.9rem; }
.editform input { border: 1px solid #ccc; padding: 3px; color: black; border-radius: 6px; font-family: OpenSans; font-size: 0.8rem; margin-top: 6px; display: inline-block; margin-left: 12px; }
.editform label { width: 100%; color: #333; display: block; }
.editform label:after { content: attr(subtext); font-size: 0.7rem; color: #666; display: inline-block; margin-left: 9px; }
.editform textarea { width: 100%; color: black; border: 1px solid #ccc; padding: 3px; border-radius: 6px; }
.editform select { margin-top: 6px; margin-left: 12px; }
/*View forms*/
.viewform { font-family: OpenSans; font-size: 0.9rem; }
.viewform div { color: #333; display: inline-block; max-width: 85%; }
.viewform span.seeContent { display: inline-block; border: 1px solid #ccc; padding: 3px; color: black; border-radius: 6px; font-family: OpenSans; font-size: 0.8rem; margin-bottom: 6px; margin-left: 12px; min-width: 50px; white-space: normal; vertical-align: text-top; }
.viewform div:after { content: attr(subtext); font-size: 0.7rem; color: #666; display: inline-block; margin-left: 9px; }
/*Glossary*/
.glossary { position: absolute; -webkit-box-shadow: 2px 2px 15px 1px rgba(119, 119, 119, 0.5); -moz-box-shadow: 2px 2px 15px 1px rgba(119, 119, 119, 0.5); box-shadow: 2px 2px 15px 1px rgba(119, 119, 119, 0.5); background-color: white; color: #333; font-family: Helvetica,Callibri,Arial,sans-serif; font-size: 0.7rem; line-height: 1.1; padding: 8px; margin-left: 10px; margin-right: 10px; max-width:25vw; padding: 9px; }
.glossary p { margin: 0; text-align: left; font-family: OpenSans; font-size: 0.75rem; }
.glossary p b { font-family: Raleway; font-weight: 600; color: #666; font-size: 1rem; }
.glossary img { float: right; max-width: 50%; }
.glossText { color: #600; }
.glossLink { background: url("images/icons/info.svg") no-repeat scroll center center transparent; background-size: 12px 12px; display: inline-block; width: 12px; height: 12px; margin-left: 2px;}
.glossSubOver { z-index: 225; background-color: #DFDFFF; cursor:help; }
/*Reference marker and popup*/
.reference { position: absolute; border: none; -webkit-box-shadow: 2px 2px 15px 1px rgba(119, 119, 119, 0.5); -moz-box-shadow: 2px 2px 15px 1px rgba(119, 119, 119, 0.5); box-shadow: 2px 2px 15px 1px rgba(119, 119, 119, 0.5); background-color: white; color: #333; font-family: Helvetica,Callibri,Arial,sans-serif; font-size: 0.8rem; line-height: 1.1; padding: 8px; margin-left: 10px; margin-right: 10px; max-width:30vw; padding: 9px; }
.reference p { margin: 0; text-align: left; font-family: OpenSans; font-size: 0.75rem; }
.reference a:hover { background: transparent; }
.refMark { height: 16px; display: inline-block; vertical-align: bottom; margin: 0 0 2px 2px; cursor: help; }
.pdfimage { height: 12px; margin-left: 5px; }
.pdfimage:hover { background-color: #ccc; }
/*Captioned image*/
.imgright { float: right; margin-left: 10px; margin-top: 8px; }
.imgleft { float: left; margin-right: 10px; margin-top: 8px; }
.imgdiv { font-size: 0.75rem; color: #333; font-family: OpenSans; text-align: center; vertical-align: bottom; margin: 0 auto 0 auto; }
.imgcap { margin-top: 2px; margin-bottom: 6px; }
a.imageButton { display: inline-block; width: 12px; margin-left: 4px; border: none !important; text-decoration: none; }
.lightbox { display: block; position: fixed; z-index: 1; padding-top: 100px; left: 0; top: 0; width: 100%; height: 100%; overflow: auto; background: rgba(0, 0, 0, 0.6); }
.lightboximg { display: block; margin: 0 auto; max-width: 95%; background: white; border: 1px solid white; }
.lightboxClose { display: block; float: right; position: absolute; top: 40px; right: 20px; border: 1px solid white; padding: 2px; color: white; font-family: OpenSans; font-size: 0.8rem; }
/*Icon bars*/
#iconTools { float: right; }
#iconTools svg:hover * { stroke: maroon; fill: maroon; }
.horiz { display: inline-block; margin-right: 6px; }
.vert { display: block; margin-bottom: 6px; }
/*Message area*/
#messageArea { position: relative; background: transparent; border: none; color: #999; font-size: 0.6rem; font-style: italic; }
#messageArea a { color: #999; text-decoration: none; }
#messageArea a.button { display: none; }
#messageArea a:hover { background-color: transparent; color: #999; }
/*Tables*/
th, thead td { background-color: lightsteelblue !important; color: black !important; text-align: center !important; }
table, th, td { border: 1px solid #666 !important; font-family: OpenSans; font-size: 0.8rem; }
.tableBox { font-size: 0.75rem; font-family: Helvetica,Arial,sans-serif; color: black; float: right; margin-left: 8px; border: 1px solid #666; padding: 6px; }
.tableBox br { margin-bottom: 0 !important; }
/*e-mail formatter*/
a.email { text-decoration: none; border-bottom: none; background-image: url(images/icons/mail.svg); background-size: 12px 12px; background-position: right center; background-repeat: no-repeat; display: inline-block; padding-right: 15px; }
a.email:hover { color: maroon; background-color: #ccc; text-decoration: none; border: none; }
/*Modal box*/
.modalButton { background-color: #ccc; border: 1px solid #999; border-radius: 5px; color: navy; }
.modalLink { text-decoration: none; border: none !important; color: #03117c !important; cursor: pointer; }
.modalLink img, .missingModal { width: 12px; display: inline-block; margin-left: 3px; }
.modalBox { padding: 0; box-shadow: 8px 8px 6px 4px #666; display: none; font-family: OpenSans; font-size: 1rem; color: black; max-width: 50vw; }
.modalTitle { margin: 0; padding: 0; width: 100%; }
.modalTitleText { display: block; padding: 12px 8px 6px 8px; color: black; border-bottom: 1px solid black; font-family: OpenSans; font-size: 1rem; text-align: center; font-weight: bold; }
.modalTextBox { padding: 12px 8px 6px 8px; }
.modalClose { display: inline-block; float: right; border: 1px solid #333; background-color: black; color: white; font-family: OpenSans; font-size: 1rem; font-weight: bold; cursor: pointer; }
.refModal { padding: 0; box-shadow: 8px 8px 6px 4px #666; font-family: OpenSans; font-size: 1rem; color: black; max-width: 50vw; z-index: 1; float: right; margin-right: 20px; }
/*Footnotes*/
a.ftnlink { vertical-align: baseline; position: relative; top: -0.4em; font-family: OpenSans; font-size: 0.65rem; color: maroon; border: none; !important; }
a.ftnlink:hover { background-color: #ccc; font-weight: bold; border: none !important; }
.footnoteholder { font-size: 0.75rem; font-family: OpenSans; margin-top: 12px; }
.ftnlist { margin: 0 !important; padding: 0 !important; list-style-position: outside; list-style-type: none; counter-reset: item; }
.ftnlist li { display: block; margin-left: 2.5rem; text-indent: -1.5rem; margin-bottom: 3px; }
.ftnlist li:before { content: counter(item); counter-increment: item; display: inline-block; text-align: right; width: 1rem; padding-right: 0.2rem; vertical-align: super; font-size: 0.65rem; }
/*Clean layout for printing*/
@media print {
@page { size:8.5in 11in; margin: 0.5in 0.75in 0.5in 0.75in; }
html, body, #displayArea, #tiddlerDisplay, .tiddler { background-color: #fff; }
.viewer, .recipe { font-size: 10pt !important; }
a { color: inherit !important; border: none !important; text-decoration: none !important; background-image: none !important; padding: 0 !important; }
video { display: none; }
#backstageButton, #backstageArea, #backstage, #sidebar, #iconTools, .toolbar, .tagged { display: none !important; }
#contentWrapper { width: 100% !important; }
#displayArea { width: 100% !important; margin: 0 !important; padding: 0 !important; }
#tiddlerDisplay {width: 97% !important; margin: 0 !important; padding: 0 !important; }
.tiddler {width: 100% !important; margin: 0 !important; padding: 0 !important; height: auto; overflow-wrap:normal; border: none !important;}
.title { text-align: left !important; }
.glossLink, .refMark, .titleimg, .modalLink img, .missingModal { display: none !important; }
.glossText { color: inherit; }
.modalLink, h1, h2, h3, h4 { color: black !important; }
.texttiddler h3, .protocol h2, .protocol h3 { border-bottom: 1px solid black !important; }
.recipeLeft, .recipeRight { page-break-inside: avoid; }
}
/*}}}*/
/*{{{*/
/*OpenSans*/
@font-face {
font-family: OpenSans;
font-style: normal;
font-weight: normal;
src: url('fonts/OpenSans-Regular.ttf') format('truetype');
}
@font-face {
font-family: OpenSans;
font-style: italic;
font-weight: normal;
src: url('fonts/OpenSans-Italic.ttf') format('truetype');
}
@font-face {
font-family: OpenSans;
font-style: normal;
font-weight: bold;
src: url('fonts/OpenSans-Semibold.ttf') format('truetype');
}
@font-face {
font-family: OpenSans;
font-style: italic;
font-weight: bold;
src: url('fonts/OpenSans-SemiboldItalic.ttf') format('truetype');
}
@font-face {
font-family: OpenSans;
font-style: normal;
font-weight: 300;
src: url('fonts/OpenSans-Light.ttf') format('truetype');
}
@font-face {
font-family: OpenSans;
font-style: italic;
font-weight: 300;
src: url('fonts/OpenSans-LightItalic.ttf') format('truetype');
}
@font-face {
font-family: OpenSans;
font-style: normal;
font-weight: 700;
src: url('fonts/OpenSans-Bold.ttf') format('truetype');
}
@font-face {
font-family: OpenSans;
font-style: italic;
font-weight: 700;
src: url('fonts/OpenSans-BoldItalic.ttf') format('truetype');
}
@font-face {
font-family: OpenSans;
font-style: normal;
font-weight: 800;
src: url('fonts/OpenSans-ExtraBold.ttf') format('truetype');
}
@font-face {
font-family: OpenSans;
font-style: italic;
font-weight: 800;
src: url('fonts/OpenSans-ExtraBoldItalic.ttf') format('truetype');
}
/*Raleway*/
@font-face {
font-family: Raleway;
font-style: normal;
font-weight: normal;
src: url('fonts/Raleway-Regular.ttf') format('truetype');
}
@font-face {
font-family: Raleway;
font-style: italic;
font-weight: normal;
src: url('fonts/Raleway-Italic.ttf') format('truetype');
}
@font-face {
font-family: Raleway;
font-style: normal;
font-weight: 700;
src: url('fonts/Raleway-Bold.ttf') format('truetype');
}
@font-face {
font-family: Raleway;
font-style: italic;
font-weight: bold;
src: url('fonts/Raleway-BoldItalic.ttf') format('truetype');
}
@font-face {
font-family: Raleway;
font-style: normal;
font-weight: 300;
src: url('fonts/Raleway-Light.ttf') format('truetype');
}
@font-face {
font-family: Raleway;
font-style: italic;
font-weight: 300;
src: url('fonts/Raleway-LightItalic.ttf') format('truetype');
}
@font-face {
font-family: Raleway;
font-style: normal;
font-weight: 600;
src: url('fonts/Raleway-Semibold.ttf') format('truetype');
}
@font-face {
font-family: Raleway;
font-style: italic;
font-weight: 600;
src: url('fonts/Raleway-SemiboldItalic.ttf') format('truetype');
}
@font-face {
font-family: Raleway;
font-style: normal;
font-weight: 900;
src: url('fonts/Raleway-Black.ttf') format('truetype');
}
@font-face {
font-family: Raleway;
font-style: italic;
font-weight: 900;
src: url('fonts/Raleway-BlackItalic.ttf') format('truetype');
}
@font-face {
font-family: Raleway;
font-style: normal;
font-weight: 200;
src: url('fonts/Raleway-ExtraLight.ttf') format('truetype');
}
@font-face {
font-family: Raleway;
font-style: italic;
font-weight: 200;
src: url('fonts/Raleway-ExtraLightItalic.ttf') format('truetype');
}
@font-face {
font-family: Raleway;
font-style: normal;
font-weight: 100;
src: url('fonts/Raleway-Thin.ttf') format('truetype');
}
@font-face {
font-family: Raleway;
font-style: italic;
font-weight: 100;
src: url('fonts/Raleway-ThinItalic.ttf') format('truetype');
}
@font-face {
font-family: Raleway;
font-style: normal;
font-weight: 500;
src: url('fonts/Raleway-Medium.ttf') format('truetype');
}
@font-face {
font-family: Raleway;
font-style: italic;
font-weight: 500;
src: url('fonts/Raleway-MediumItalic.ttf') format('truetype');
}
@font-face {
font-family: Raleway;
font-style: normal;
font-weight: 800;
src: url('fonts/Raleway-ExtraBold.ttf') format('truetype');
}
@font-face {
font-family: Raleway;
font-style: italic;
font-weight: 800;
src: url('fonts/Raleway-ExtraBoldItalic.ttf') format('truetype');
}
/*RobotoMono*/
@font-face {
font-family: RobotoMono;
font-style: normal;
font-weight: normal;
src: url('fonts/RobotoMono-Regular.ttf') format('truetype');
}
@font-face {
font-family: RobotoMono;
font-style: normal;
font-weight: bold;
src: url('fonts/RobotoMono-Bold.ttf') format('truetype');
}
@font-face {
font-family: RobotoMono;
font-style: italic;
font-weight: bold;
src: url('fonts/RobotoMono-BoldItalic.ttf') format('truetype');
}
@font-face {
font-family: RobotoMono;
font-style: italic;
font-weight: normal;
src: url('fonts/RobotoMono-Italic.ttf') format('truetype');
}
@font-face {
font-family: RobotoMono;
font-style: normal;
font-weight: 300;
src: url('fonts/RobotoMono-Light.ttf') format('truetype');
}
@font-face {
font-family: RobotoMono;
font-style: italic;
font-weight: 300;
src: url('fonts/RobotoMono-LightItalic.ttf') format('truetype');
}
@font-face {
font-family: RobotoMono;
font-style: normal;
font-weight: 500;
src: url('fonts/RobotoMono-Medium.ttf') format('truetype');
}
@font-face {
font-family: RobotoMono;
font-style: italic;
font-weight: 500;
src: url('fonts/RobotoMono-MediumItalic.ttf') format('truetype');
}
@font-face {
font-family: RobotoMono;
font-style: normal;
font-weight: 100;
src: url('fonts/RobotoMono-Thin.ttf') format('truetype');
}
@font-face {
font-family: RobotoMono;
font-style: italic;
font-weight: 100;
src: url('fonts/RobotoMono-ThinItalic.ttf') format('truetype');
}
/*}}}*/
/*{{{*/
html { font-size: calc(0.75em + 0.33vw) }
#contentWrapper { width: 1024px; margin: 0 auto; }
#header { height: auto; padding: 6px; background-color: white; }
#header img { height: auto; }
#displayArea { width: 800px; float: right; margin: 0 0 6px 0; padding-left: 10px; border-left: 1px solid #ccc; }
#sidebar { width: 210px; margin: 0; position: sticky; top: 25px; float: left; }
img { max-width: 99%; height: auto; }
@media screen and (max-width: 1024px) {
#contentWrapper { width: 95%; }
#displayArea { width: 78%; }
#sidebar { width: 20%; }
}
@media screen and (max-width: 650px) {
#header { height: 150px; }
#header img { height: 150px; }
#displayArea { width: auto; float: none; margin: 10px 0; }
#sidebar { width: 100%; float: none; }
#header { float: left; margin-right: 20px; }
#wikiMenu { column-count: 2; }
}
@media screen and (max-width: 480px) {
html { -webkit-text-size-adjust: none; }
}
/*}}}*/
#Dissolve sucrose by adding slowly to hot (but not boiling) dH~~2~~O
#Add remaining ingredients and dH~~2~~O to volume, autoclave
Cells should be grown at 30°C for best selective effect.
#Disolve all ingredients in about 80% of water volume.
#Bring to final volume.
#Continue stirring for 15 min. to ensure complete dissolution.
#Be sure container to be used is very clean - no residue.
#Filter TBE through a 0.45- or 0.2-μm filter.###Filtration and autoclaving facilitates complete dissolution and removal of any small particles that can nucleate precipitation.###
#Transfer to container to be used and autoclave with cap ajar.
#Dissolve in about 800 ml dH~~2~~O
#Adjust pH to 8.0
#Bring to final volume with dH~~2~~O
Dilute TCA to final volume in graduated cylinder
Aliquot protein sample into a microcentrifuge tube
To recover very small amounts of protein, add up to 500 μl of a carrier such as 2 mg/ml yeast RNA
Add 1 ml of 10% TCA, mix well and let stand on ice 15 min
Centrifuge 10 min at full speed in microcentrifuge and remove TCA thoroughly###Or, for quantitating radioactive proteins, filter through glass fiber filter to collect proteins and count by scintillation.###
Redissolve in water or 6M guanidine HCl
#Add dH~~2~~O to Tris and EDTA
#Just before use, add 140 μl of PMSF for each 1 ml of buffer to be used
#Keep on ice until use
PMSF is unstable, so make a stock of the buffer __without__ PMSF and then add PMSF to only a small volume—only what you need for the day. Discard any remaining PMSF-containing buffer at the end of the day.
//Note: ''PMSF is toxic!'' Wear gloves and handle all PMSF-containing solutions with care!//
!!Lag
Effect of PCM on recovery^^//a//^^ from stationary phase
|!|>|!lag phase (min)|
|!strain|!pH7|!pH9|
|wild-type, overnight|112 ± 5|301 ± 28|
|Δ//pcm//, overnight|120 ± 5|294 ± 24|
|wild-type, aged^^//b//^^|134 ± 8|331 ± 36|
|Δ//pcm//, aged|136 ± 8|419 ± 39|
^^//a//^^1:100 dilution in fresh LB broth
^^//b//^^Maintained 5 days in stationary phase in LB broth
/***
|Name|TaggedTemplateTweak|
|Source|http://www.TiddlyTools.com/#TaggedTemplateTweak|
|Documentation|http://www.TiddlyTools.com/#TaggedTemplateTweakInfo|
|Version|1.6.1|
|Author|Eric Shulman|
|License|http://www.TiddlyTools.com/#LegalStatements|
|~CoreVersion|2.1|
|Type|plugin|
|Description|use alternative ViewTemplate/EditTemplate for specific tiddlers|
This plugin extends the core function, story.chooseTemplateForTiddler(), so that any given tiddler can be viewed and/or edited using alternatives to the standard tiddler templates.
!!!!!Documentation
>see [[TaggedTemplateTweakInfo]]
!!!!!Revisions
<<<
2009.09.02 [1.6.1] apply field-based template (if any) *before* tag-based template
| please see [[TaggedTemplateTweakInfo]] for previous revision details |
2007.06.11 [1.0.0] initial release
<<<
!!!!!Code
***/
//{{{
version.extensions.TaggedTemplateTweak= {major: 1, minor: 6, revision: 1, date: new Date(2009,9,2)};
if (!config.options.txtTemplateTweakFieldname)
config.options.txtTemplateTweakFieldname='template';
Story.prototype.taggedTemplate_chooseTemplateForTiddler = Story.prototype.chooseTemplateForTiddler
Story.prototype.chooseTemplateForTiddler = function(title,template)
{
// get core template and split into theme and template name
var coreTemplate=this.taggedTemplate_chooseTemplateForTiddler.apply(this,arguments);
var theme=""; var template=coreTemplate;
var parts=template.split(config.textPrimitives.sectionSeparator);
if (parts[1]) { theme=parts[0]; template=parts[1]; }
else theme=config.options.txtTheme||""; // if theme is not specified
theme+=config.textPrimitives.sectionSeparator;
// look for template using title as prefix
if (!store.getTaggedTiddlers(title).length) { // if tiddler is not a tag
if (store.getTiddlerText(theme+title+template))
{ return theme+title+template; } // theme##TitleTemplate
if (store.getTiddlerText(title+template))
{ return title+template; } // TitleTemplate
}
// look for templates using custom field value as prefix
var v=store.getValue(title,config.options.txtTemplateTweakFieldname);
if (store.getTiddlerText(theme+v+template))
{ return theme+v+template; } // theme##valueTemplate
if (store.getTiddlerText(v+template))
{ return v+template; } // valueTemplate
// look for template using tags as prefix
var tiddler=store.getTiddler(title);
if (!tiddler) return coreTemplate; // tiddler doesn't exist... use core result
for (i=0; i<tiddler.tags.length; i++) {
var t=tiddler.tags[i]+template; // add tag prefix to template
var c=t.substr(0,1).toUpperCase()+t.substr(1); // capitalized for WikiWord title
if (store.getTiddlerText(theme+t)) { return theme+t; } // theme##tagTemplate
if (store.getTiddlerText(theme+c)) { return theme+c; } // theme##TagTemplate
if (store.getTiddlerText(t)) { return t; } // tagTemplate
if (store.getTiddlerText(c)) { return c; } // TagTemplate
}
// no match... use core result
return coreTemplate;
}
//}}}
*[[4x36 template for spot plating|docs/Template 4x36 for spot plating.pdf]]
*[[4x100 template for patching|docs/Template 4x100 for patching.pdf]]
/***
|Name|TemporaryTiddlersPlugin|
|Source|http://www.TiddlyTools.com/#TemporaryTiddlersPlugin|
|Version|1.1.2|
|Author|Eric Shulman|
|License|http://www.TiddlyTools.com/#LegalStatements|
|~CoreVersion|2.1|
|Type|plugin|
|Description|blocks tiddlers tagged with "temporary" from being saved into the TW file|
!!!!!Usage
<<<
When the TW document is saved (either to local disk or remote URL), any tiddlers tagged with "temporary" will be skipped over, so that they are not written to the file. To keep a temporary tiddler, simply edit it and remove the tag before saving the file. This feature can be combined with various plugins that can automatically create new tiddlers, such as [[SearchOptionsPlugin]] ([[SearchResults]]) and [[ImportTiddlersPlugin]] ([[ImportedTiddlers]]) so that these transient results are not retained when you save you document.
You can also use this tag with the {{{<<loadTiddlers>>}}} macro and the //auto-tagging// features provided by [[ImportTiddlersPlugin]], so that each time you open your document, you can automatically retrieve an up-to-date set of common tiddlers that are stored in another document (either local or via remote URL), without those tiddlers being retained when you save your document.
<<<
!!!!!Revisions
<<<
2008.11.14 [1.1.2] added "nnn temporary tiddlers not saved" summary message
2008.04.08 [1.1.1] don't automatically add configuration options to AdvancedOptions tiddler
2008.03.01 [1.1.0] added support for recognizing 'temporary' flag stored as a tiddler *field* (as an optional alternative to using a tag)
2007.02.08 [1.0.0] initial release
<<<
!!!!!Code
***/
//{{{
version.extensions.TemporaryTiddlersPlugin= {major: 1, minor: 1, revision: 2, date: new Date(2008,11,14)};
// configuration defaults
config.options.chkTemporaryKeep = false;
config.options.chkTemporaryQuiet= true;
config.options.txtTemporaryTag = "importtemp";
// lingo
config.messages.TemporaryWarning = "'%0' ...temporary tiddler";
config.messages.TemporarySummary = "%0 temporary tiddlers will not be saved";
// core override
SaverBase.prototype.externalize = function(store)
{
var results=[]; var totaltemps=0;
var tiddlers=store.getTiddlers("title");
for (var t=0; t<tiddlers.length; t++) {
if (config.options.chkTemporaryKeep||!(tiddlers[t].fields['temporary']||tiddlers[t].isTagged(config.options.txtTemporaryTag)))
results.push(this.externalizeTiddler(store, tiddlers[t]));
else {
if (!config.options.chkTemporaryQuiet) // notify user that tiddler won't be saved
displayMessage(config.messages.TemporaryWarning.format([tiddlers[t].title]));
totaltemps++;
}
}
if (totaltemps) displayMessage(config.messages.TemporarySummary.format([totaltemps]));
return results.join("\n");
}
//}}}
#Measure dry ingredients and place in a media flask with a volume at least twice the total volume of medium to be made.
#Add liquid ingredients and appropriate volume of dH~~2~~O and swirl to mix. (No need to add a stir bar or dissolve completely.)
#Cover with foil, add a square of autoclave tape and autoclave 20 min. at 15 psi
#After use, rinse media flask 3× with tap water and 3× with dH~~2~~O and return to shelf. No dishwashing.
This is a very rich medium often used for maximizing plasmid yields.
<script label="go">
var test = "strload";
window[test] = 17
alert(window.strload);
</script>
#Dissolve in dH~~2~~O
#Filter sterilize
#Store in dark or foil-covered bottle
/***
|Name|TiddlerTweakerPlugin|
|Source|http://www.TiddlyTools.com/#TiddlerTweakerPlugin|
|Version|2.4.4|
|Author|Eric Shulman|
|License|http://www.TiddlyTools.com/#LegalStatements|
|~CoreVersion|2.1|
|Type|plugin|
|Description|select multiple tiddlers and modify author, created, modified and/or tag values|
~TiddlerTweaker is a 'power tool' for TiddlyWiki authors. Select multiple tiddlers from a listbox and 'bulk modify' the creator, author, created, modified and/or tag values of those tiddlers using a compact set of form fields. The values you enter into the fields simultaneously overwrite the existing values in all tiddlers you have selected.
!!!!!Usage
<<<
{{{<<tiddlerTweaker>>}}}
{{smallform{<<tiddlerTweaker>>}}}
By default, any tags you enter into the TiddlerTweaker will //replace// the existing tags in all the tiddlers you have selected. However, you can also use TiddlerTweaker to quickly filter specified tags from the selected tiddlers, while leaving any other tags assigned to those tiddlers unchanged:
>Any tag preceded by a '+' (plus) or '-' (minus), will be added or removed from the existing tags //instead of replacing the entire tag definition// of each tiddler (e.g., enter '-excludeLists' to remove that tag from all selected tiddlers. When using this syntax, care should be taken to ensure that //every// tag is preceded by '+' or '-', to avoid inadvertently overwriting any other existing tags on the selected tiddlers. (note: the '+' or '-' prefix on each tag value is NOT part of the tag value, and is only used by TiddlerTweaker to control how that tag value is processed)
Important Notes:
* TiddlerTweaker is a 'power user' tool that can make changes to many tiddlers at once. ''You should always have a recent backup of your document (or 'save changes' just *before* tweaking the tiddlers), just in case you accidentally 'shoot yourself in the foot'.''
* The date and author information on any tiddlers you tweak will ONLY be updated if the corresponding checkboxes have been selected. As a general rule, after using TiddlerTweaker, always ''//remember to save your document//'' when you are done, even though the tiddler timeline tab may not show any recently modified tiddlers.
* Selecting and updating all tiddlers in a document can take a while. Your browser may warn about an 'unresponsive script'. Usually, if you allow it to continue, it should complete the processing... eventually. Nonetheless, be sure to save your work before you begin tweaking lots of tiddlers, just in case something does get stuck.
<<<
!!!!!Revisions
<<<
2009.09.15 2.4.4 added 'edit' button. moved html definition to separate section
2009.09.13 2.4.3 in settiddlers(), convert backslashed chars (\n\b\s\t) in replacement text
2009.06.26 2.4.2 only add brackets around tags containing spaces
2009.06.22 2.4.1 in setFields(), add brackets around all tags shown tweaker edit field
2009.03.30 2.4.0 added 'sort by modifier'
2009.01.22 2.3.0 added support for text pattern find/replace
2008.10.27 2.2.3 in setTiddlers(), fixed Safari bug by replacing static Array.concat(...) with new Array().concat(...)
2008.09.07 2.2.2 added removeCookie() function for compatibility with [[CookieManagerPlugin]]
2008.05.12 2.2.1 replace built-in backstage tweak task with tiddler tweaker control panel (moved from BackstageTweaks)
2008.01.13 2.2.0 added 'auto-selection' links: all, changed, tags, title, text
2007.12.26 2.1.0 added support for managing 'creator' custom field (see [[CoreTweaks]])
2007.11.01 2.0.3 added config.options.txtTweakerSortBy for cookie-based persistence of list display order preference setting.
2007.09.28 2.0.2 in settiddlers() and deltiddlers(), added suspend/resume notification handling (improves performance when operating on multiple tiddlers)
2007.08.03 2.0.1 added shadow definition for [[TiddlerTweaker]] tiddler for use as parameter references with {{{<<tiddler>>, <<slider>> or <<tabs>>}}} macros.
2007.08.03 2.0.0 converted from inline script
2006.01.01 1.0.0 initial release
<<<
!!!!!Code
***/
//{{{
version.extensions.TiddlerTweakerPlugin= {major: 2, minor: 4, revision: 4, date: new Date(2009,9,15)};
// shadow tiddler
config.shadowTiddlers.TiddlerTweaker='<<tiddlerTweaker>>';
// defaults
if (config.options.txtTweakerSortBy==undefined) config.options.txtTweakerSortBy='modified';
// backstage task
if (config.tasks) { // for TW2.2b3 or above
config.tasks.tweak.tooltip='review/modify tiddler internals: dates, authors, tags, etc.';
config.tasks.tweak.content='{{smallform small groupbox{<<tiddlerTweaker>>}}}';
}
// 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.macros.tiddlerTweaker = {
handler: function(place,macroName,params,wikifier,paramString,tiddler) {
var span=createTiddlyElement(place,'span');
span.innerHTML=store.getTiddlerText('TiddlerTweakerPlugin##html');
this.init(span.getElementsByTagName('form')[0],config.options.txtTweakerSortBy);
},
init: function(f,sortby) { // initialize form controls
if (!f) return; // form might not be rendered yet...
while (f.list.options[0]) f.list.options[0]=null; // empty current list content
var tids=store.getTiddlers(sortby);
if (sortby=='size') // descending order
tids.sort(function(a,b) {return a.text.length > b.text.length ? -1 : (a.text.length == b.text.length ? 0 : +1);});
var who='';
for (i=0; i<tids.length; i++) { var t=tids[i];
var label=t.title; var value=t.title;
switch (sortby) {
case 'modified':
case 'created':
var t=tids[tids.length-i-1]; // reverse order
var when=t[sortby].formatString('YY.0MM.0DD 0hh:0mm ');
label=when+t.title;
value=t.title;
break;
case 'size':
label='['+t.text.length+'] '+label;
break;
case 'modifier':
case 'creator':
if (who!=t[sortby]) {
who=t[sortby];
f.list.options[f.list.length]=new Option('by '+who+':','',false,false);
}
label='\xa0\xa0\xa0'+label; // indent
break;
}
f.list.options[f.list.length]=new Option(label,value,false,false);
}
f.title.value=f.who.value=f.creator.value=f.tags.value='';
f.cm.value=f.cd.value=f.cy.value=f.ch.value=f.cn.value='';
f.mm.value=f.md.value=f.my.value=f.mh.value=f.mn.value='';
f.stats.disabled=f.set.disabled=f.del.disabled=f.edit.disabled=f.display.disabled=true;
f.settitle.disabled=false;
config.options.txtTweakerSortBy=sortby;
f.sortby.value=sortby; // sync droplist
if (sortby!='modified') saveOptionCookie('txtTweakerSortBy');
else removeCookie('txtTweakerSortBy');
},
selecttiddlers: function(here) { // enables/disables inputs based on #items selected
var f=here.form; var list=f.list;
var c=0; for (i=0;i<list.length;i++) if (list.options[i].selected) c++;
if (c>1) f.title.disabled=true;
if (c>1) f.settitle.checked=false;
f.set.disabled=(c==0);
f.del.disabled=(c==0);
f.edit.disabled=(c==0);
f.display.disabled=(c==0);
f.settitle.disabled=(c>1);
f.stats.disabled=(c==0);
var msg=(c==0)?'select tiddlers':(c+' tiddler'+(c!=1?'s':'')+' selected');
here.previousSibling.firstChild.firstChild.nextSibling.innerHTML=msg;
if (c) clearMessage(); else displayMessage('no tiddlers selected');
},
setfields: function(here) { // set fields from first selected tiddler
var f=here.form;
if (!here.value.length) {
f.title.value=f.who.value=f.creator.value=f.tags.value='';
f.cm.value=f.cd.value=f.cy.value=f.ch.value=f.cn.value='';
f.mm.value=f.md.value=f.my.value=f.mh.value=f.mn.value='';
return;
}
var tid=store.getTiddler(here.value); if (!tid) return;
f.title.value=tid.title;
f.who.value=tid.modifier;
f.creator.value=tid.fields['creator']||''; // custom field - might not exist
f.tags.value=tid.tags.map(function(t){return String.encodeTiddlyLink(t)}).join(' ');
var c=tid.created; var m=tid.modified;
f.cm.value=c.getMonth()+1;
f.cd.value=c.getDate();
f.cy.value=c.getFullYear();
f.ch.value=c.getHours();
f.cn.value=c.getMinutes();
f.mm.value=m.getMonth()+1;
f.md.value=m.getDate();
f.my.value=m.getFullYear();
f.mh.value=m.getHours();
f.mn.value=m.getMinutes();
},
settiddlers: function(here) {
var f=here.form; var list=f.list;
var tids=[];
for (i=0;i<list.length;i++) if (list.options[i].selected) tids.push(list.options[i].value);
if (!tids.length) { alert('please select at least one tiddler'); return; }
var cdate=new Date(f.cy.value,f.cm.value-1,f.cd.value,f.ch.value,f.cn.value);
var mdate=new Date(f.my.value,f.mm.value-1,f.md.value,f.mh.value,f.mn.value);
if (tids.length>1 && !confirm('Are you sure you want to update these tiddlers:\n\n'+tids.join(', '))) return;
store.suspendNotifications();
for (t=0;t<tids.length;t++) {
var tid=store.getTiddler(tids[t]); if (!tid) continue;
var title=!f.settitle.checked?tid.title:f.title.value;
var who=!f.setwho.checked?tid.modifier:f.who.value;
var text=tid.text;
if (f.replacetext.checked) {
var r=f.replacement.value.replace(/\\t/mg,'\t').unescapeLineBreaks();
text=text.replace(new RegExp(f.pattern.value,'mg'),r);
}
var tags=tid.tags;
if (f.settags.checked) {
var intags=f.tags.value.readBracketedList();
var addtags=[]; var deltags=[]; var reptags=[];
for (i=0;i<intags.length;i++) {
if (intags[i].substr(0,1)=='+')
addtags.push(intags[i].substr(1));
else if (intags[i].substr(0,1)=='-')
deltags.push(intags[i].substr(1));
else
reptags.push(intags[i]);
}
if (reptags.length)
tags=reptags;
if (addtags.length)
tags=new Array().concat(tags,addtags);
if (deltags.length)
for (i=0;i<deltags.length;i++)
{ var pos=tags.indexOf(deltags[i]); if (pos!=-1) tags.splice(pos,1); }
}
if (!f.setcdate.checked) cdate=tid.created;
if (!f.setmdate.checked) mdate=tid.modified;
store.saveTiddler(tid.title,title,text,who,mdate,tags,tid.fields);
if (f.setcreator.checked) store.setValue(tid.title,'creator',f.creator.value); // set creator
if (f.setcdate.checked) tid.assign(null,null,null,null,null,cdate); // set create date
}
store.resumeNotifications();
this.init(f,f.sortby.value);
},
displaytiddlers: function(here,edit) {
var f=here.form; var list=f.list;
var tids=[];
for (i=0; i<list.length;i++) if (list.options[i].selected) tids.push(list.options[i].value);
if (!tids.length) { alert('please select at least one tiddler'); return; }
story.displayTiddlers(story.findContainingTiddler(f),tids,edit?DEFAULT_EDIT_TEMPLATE:null);
},
deltiddlers: function(here) {
var f=here.form; var list=f.list;
var tids=[];
for (i=0;i<list.length;i++) if (list.options[i].selected) tids.push(list.options[i].value);
if (!tids.length) { alert('please select at least one tiddler'); return; }
if (!confirm('Are you sure you want to delete these tiddlers:\n\n'+tids.join(', '))) return;
store.suspendNotifications();
for (t=0;t<tids.length;t++) {
var tid=store.getTiddler(tids[t]); if (!tid) continue;
if (tid.tags.contains('systemConfig')) {
var msg=tid.title+' is tagged with systemConfig.'
+'\n\nRemoving this tiddler may cause unexpected results. Are you sure?';
if (!confirm(msg)) continue;
}
store.removeTiddler(tid.title);
story.closeTiddler(tid.title);
}
store.resumeNotifications();
this.init(f,f.sortby.value);
},
stats: function(here) {
var f=here.form; var list=f.list; var tids=[]; var out=''; var tot=0;
var target=f.nextSibling;
for (i=0;i<list.length;i++) if (list.options[i].selected) tids.push(list.options[i].value);
if (!tids.length) { alert('please select at least one tiddler'); return; }
for (t=0;t<tids.length;t++) {
var tid=store.getTiddler(tids[t]); if (!tid) continue;
out+='[['+tid.title+']] '+tid.text.length+'\n'; tot+=tid.text.length;
}
var avg=tot/tids.length;
out=tot+' bytes in '+tids.length+' selected tiddlers ('+avg+' bytes/tiddler)\n<<<\n'+out+'<<<\n';
removeChildren(target);
target.innerHTML="<hr><font size=-2><a href='javascript:;' style='float:right' "
+"onclick='this.parentNode.parentNode.style.display=\"none\"'>close</a></font>";
wikify(out,target);
target.style.display='block';
}
};
//}}}
/***
//{{{
!html
<style>
.tiddlerTweaker table,
.tiddlerTweaker table tr,
.tiddlerTweaker table td
{ padding:0;margin:0;border:0;white-space:nowrap; }
</style><form class='tiddlerTweaker'><!--
--><table style="width:100%"><tr valign="top"><!--
--><td style="text-align:center;width:99%;"><!--
--><font size=-2><div style="text-align:left;"><span style="float:right"><!--
--> <a href="javascript:;"
title="select all tiddlers"
onclick="
var f=this; while (f&&f.nodeName.toLowerCase()!='form')f=f.parentNode;
for (var t=0; t<f.list.options.length; t++)
if (f.list.options[t].value.length) f.list.options[t].selected=true;
config.macros.tiddlerTweaker.selecttiddlers(f.list);
return false">all</a><!--
--> <a href="javascript:;"
title="select tiddlers that are new/changed since the last file save"
onclick="
var lastmod=new Date(document.lastModified);
var f=this; while (f&&f.nodeName.toLowerCase()!='form')f=f.parentNode;
for (var t=0; t<f.list.options.length; t++) {
var tid=store.getTiddler(f.list.options[t].value);
f.list.options[t].selected=tid&&tid.modified>lastmod;
}
config.macros.tiddlerTweaker.selecttiddlers(f.list);
return false">changed</a><!--
--> <a href="javascript:;"
title="select tiddlers with at least one matching tag"
onclick="
var t=prompt('Enter space-separated tags (match ONE)');
if (!t||!t.length) return false;
var tags=t.readBracketedList();
var f=this; while (f&&f.nodeName.toLowerCase()!='form')f=f.parentNode;
for (var t=0; t<f.list.options.length; t++) {
f.list.options[t].selected=false;
var tid=store.getTiddler(f.list.options[t].value);
if (tid&&tid.tags.containsAny(tags)) f.list.options[t].selected=true;
}
config.macros.tiddlerTweaker.selecttiddlers(f.list);
return false">tags</a><!--
--> <a href="javascript:;"
title="select tiddlers whose titles include matching text"
onclick="
var txt=prompt('Enter a title (or portion of a title) to match');
if (!txt||!txt.length) return false;
var f=this; while (f&&f.nodeName.toLowerCase()!='form')f=f.parentNode;
for (var t=0; t<f.list.options.length; t++) {
f.list.options[t].selected=f.list.options[t].value.indexOf(txt)!=-1;
}
config.macros.tiddlerTweaker.selecttiddlers(f.list);
return false">titles</a><!--
--> <a href="javascript:;"
title="select tiddlers containing matching text"
onclick="
var txt=prompt('Enter tiddler text (content) to match');
if (!txt||!txt.length) return false;
var f=this; while (f&&f.nodeName.toLowerCase()!='form')f=f.parentNode;
for (var t=0; t<f.list.options.length; t++) {
var tt=store.getTiddlerText(f.list.options[t].value,'');
f.list.options[t].selected=(tt.indexOf(txt)!=-1);
}
config.macros.tiddlerTweaker.selecttiddlers(f.list);
return false">text</a> <!--
--></span><span>select tiddlers</span><!--
--></div><!--
--></font><select multiple name=list size="11" style="width:99.99%"
title="use click, shift-click and/or ctrl-click to select multiple tiddler titles"
onclick="config.macros.tiddlerTweaker.selecttiddlers(this)"
onchange="config.macros.tiddlerTweaker.setfields(this)"><!--
--></select><br><!--
-->show<input type=text size=1 value="11"
onchange="this.form.list.size=this.value; this.form.list.multiple=(this.value>1);"><!--
-->by<!--
--><select name=sortby size=1
onchange="config.macros.tiddlerTweaker.init(this.form,this.value)"><!--
--><option value="title">title</option><!--
--><option value="size">size</option><!--
--><option value="modified">modified</option><!--
--><option value="created">created</option><!--
--><option value="modifier">modifier</option><!--
--></select><!--
--><input type="button" value="refresh"
onclick="config.macros.tiddlerTweaker.init(this.form,this.form.sortby.value)"<!--
--> <input type="button" name="stats" disabled value="totals..."
onclick="config.macros.tiddlerTweaker.stats(this)"><!--
--></td><td style="width:1%"><!--
--><div style="text-align:left"><font size=-2> modify values</font></div><!--
--><table style="width:100%;"><tr><!--
--><td style="padding:1px"><!--
--><input type=checkbox name=settitle unchecked
title="allow changes to tiddler title (rename tiddler)"
onclick="this.form.title.disabled=!this.checked">title<!--
--></td><td style="padding:1px"><!--
--><input type=text name=title size=35 style="width:98%" disabled><!--
--></td></tr><tr><td style="padding:1px"><!--
--><input type=checkbox name=setcreator unchecked
title="allow changes to tiddler creator"
onclick="this.form.creator.disabled=!this.checked">created by<!--
--></td><td style="padding:1px;"><!--
--><input type=text name=creator size=35 style="width:98%" disabled><!--
--></td></tr><tr><td style="padding:1px"><!--
--><input type=checkbox name=setwho unchecked
title="allow changes to tiddler author"
onclick="this.form.who.disabled=!this.checked">modified by<!--
--></td><td style="padding:1px"><!--
--><input type=text name=who size=35 style="width:98%" disabled><!--
--></td></tr><tr><td style="padding:1px"><!--
--><input type=checkbox name=setcdate unchecked
title="allow changes to created date"
onclick="var f=this.form;
f.cm.disabled=f.cd.disabled=f.cy.disabled=f.ch.disabled=f.cn.disabled=!this.checked"><!--
-->created on<!--
--></td><td style="padding:1px"><!--
--><input type=text name=cm size=2 style="width:2em;padding:0;text-align:center" disabled><!--
--> / <input type=text name=cd size=2 style="width:2em;padding:0;text-align:center" disabled><!--
--> / <input type=text name=cy size=4 style="width:3em;padding:0;text-align:center" disabled><!--
--> at <input type=text name=ch size=2 style="width:2em;padding:0;text-align:center" disabled><!--
--> : <input type=text name=cn size=2 style="width:2em;padding:0;text-align:center" disabled><!--
--></td></tr><tr><td style="padding:1px"><!--
--><input type=checkbox name=setmdate unchecked
title="allow changes to modified date"
onclick="var f=this.form;
f.mm.disabled=f.md.disabled=f.my.disabled=f.mh.disabled=f.mn.disabled=!this.checked"><!--
-->modified on<!--
--></td><td style="padding:1px"><!--
--><input type=text name=mm size=2 style="width:2em;padding:0;text-align:center" disabled><!--
--> / <input type=text name=md size=2 style="width:2em;padding:0;text-align:center" disabled><!--
--> / <input type=text name=my size=4 style="width:3em;padding:0;text-align:center" disabled><!--
--> at <input type=text name=mh size=2 style="width:2em;padding:0;text-align:center" disabled><!--
--> : <input type=text name=mn size=2 style="width:2em;padding:0;text-align:center" disabled><!--
--></td></tr><tr><td style="padding:1px"><!--
--><input type=checkbox name=replacetext unchecked
title="find/replace matching text"
onclick="this.form.pattern.disabled=this.form.replacement.disabled=!this.checked">replace text<!--
--></td><td style="padding:1px"><!--
--><input type=text name=pattern size=15 value="" style="width:40%" disabled
title="enter TEXT PATTERN (regular expression)"> with<!--
--><input type=text name=replacement size=15 value="" style="width:40%" disabled
title="enter REPLACEMENT TEXT"><!--
--></td></tr><tr><td style="padding:1px"><!--
--><input type=checkbox name=settags checked
title="allow changes to tiddler tags"
onclick="this.form.tags.disabled=!this.checked">tags<!--
--></td><td style="padding:1px"><!--
--><input type=text name=tags size=35 value="" style="width:98%"
title="enter new tags or use '+tag' and '-tag' to add/remove tags from existing tags"><!--
--></td></tr></table><!--
--><div style="text-align:center"><!--
--><nobr><input type=button name=display disabled style="width:24%" value="display"
title="show selected tiddlers"
onclick="config.macros.tiddlerTweaker.displaytiddlers(this,false)"><!--
--> <input type=button name=edit disabled style="width:23%" value="edit"
title="edit selected tiddlers"
onclick="config.macros.tiddlerTweaker.displaytiddlers(this,true)"><!--
--> <input type=button name=del disabled style="width:24%" value="delete"
title="remove selected tiddlers"
onclick="config.macros.tiddlerTweaker.deltiddlers(this)"><!--
--> <input type=button name=set disabled style="width:24%" value="update"
title="update selected tiddlers"
onclick="config.macros.tiddlerTweaker.settiddlers(this)"></nobr><!--
--></div><!--
--></td></tr></table><!--
--></form><span style="display:none"><!--content replaced by tiddler "stats"--></span>
!end
//}}}
***/
Grow host strain overnight in LB broth
Make serial dilutions###Typically, dilutions of 10^^−5^^, 10^^−6^^, 10^^−7^^, and 10^^−8^^ should be plated### of phage lysate in 5 mM CaCl~~2~~###Calcium is required for P1 phage absorption###
Centrifuge a volume of the host strain equal to 0.1 ml × the number of dilutions to plate and resuspend in the same volume of 5 mM CaCl~~2~~
Add 0.1 ml of each dilution and 0.1 ml of host strain to a microcentrifuge tube and preadsorb for 10 min in a waterbath at 37 °C
Add each dilution to 2.5 ml of melted R top agar (held at 50 °C) and plate on an R agar plate
When hardened, incubate upside-down at 37 °C overnight
*Clicking any menu link should close all others
*Use admin login to override chkHttpReadOnly and allow editing directly from Reclaim Hosting MTS folder
*Recipe volume change pulls from *original* amounts - if the concentration changes, need to change the stored original amounts as well.
*If two recipes or protocols are open, onchange from title of one changes the other as well
*Shortcut Plugin needs to know what field it's in if the tiddler has fields other than text
*Find and add "orphan" recipes, protocols, references (e.g., recipes mentioned in protocols but not added yet, protocols mentioned in recipes and elsewhere that have not been added or whose link titles might need adjustment)
*Sizing on recipe "cards" - maybe size to print size and fit text?
*Recipe cards should have their own print buttons leading to a printable view with the currently chosen concentration and no input box to change volume
*Pop up recipe cards over recipe index tiddler instead of below it
*Maybe only the close button should disappear when a recipe is opened in modalBox, not the whole toolbar, so it could still be edited - but would have to open for editing outside the box
*Clicking an open tiddler in the main menu should close it
*Single-page mode, at least for text tiddlers-SPM or maybe just close other tiddlers when a text tiddler is opened?
*Edit button on menu that opens the menu tiddler for editing and then refreshes the menu
*"Protect" tag that will lead to a log-in message instead of tiddler display
*Log in for lab members
*Make link processing case-insensitive and maybe default to displayname
*Breadcrumbs
*When page with glossary entries is saved, run a routine to see if the entry exists and if not either pick from list or enter new.
*Could extend modal box to allow for OK/Cancel buttons or input? Like for new glossary entry?
*If no PDF for a reference, use PubMed ID to link to PubMed abstract with appropriate icon
*Under Results, papers and presentations links; Presentations can have enlargeable small poster images
*Bring in all references and add reference lists with new button style
*Modal plugin could use a re-look and re-write to be more versatile; make it include the formatter and styles, then it could be published to the "classic" group
// // ''projectNotes'' - open Notes page associated with a project
//{{{
config.commands.projectNotes = {
tooltip: 'Show notes on this project',
icon: 'iconClip',
handler: function(event,src,title) {
var tid = title + "Notes";
story.displayTiddler(null,tid);
}
};
//}}}
// // ''shutTiddler'' - closeTiddler, refresh menu and (if no other tiddlers open) re-open default tiddler(s)
//{{{
config.commands.shutTiddler = {
tooltip: 'Close',
icon: 'iconClose',
handler: function(event,src,title) {
config.commands.closeTiddler.handler(event, src, title);
var tids = 0;
story.forEachTiddler(function(){ tids++; });
if ( tids == 0 ) { story.displayDefaultTiddlers(); }
refreshMenu();
}
};
//}}}
// // ''printProtocol'' - close others, move recipe boxes to bottom and reveal, then print protocol
//{{{
config.commands.printProtocol = {
tooltip: 'Print this protocol',
icon: 'iconPrint',
handler: function(event,src,title) {
story.closeAllTiddlers();
story.displayTiddler(null,title,"protocolPrintTemplate");
}
};
//}}}
// // ''closePrintTid'' - close a tiddler created for printing
//{{{
config.commands.closePrintTid = {
tooltip: 'Close this page',
icon: 'iconClose',
handler: function(event,src,title) {
config.commands.closeTiddler.handler(event,src,title);
story.displayTiddler(null,title);
}
};
//}}}
// // Icons for standard commands used in iconBar
//{{{
merge(config.commands.editTiddler,{ icon: 'iconEdit' });
//}}}
Grow a 3-ml overnight culture of the recipient strain(s)
Transfer 1 ml to a microcentrifuge tube and centrifuge 1 min. at full speed###This volume will be enough for 5 transductions; adjust volume if more are needed. Larger volumes can be spun in the Sorvall centrifuge at 1500 × //g// for 10 min.###
Resuspend cells in 0.5 ml of MC buffer (or half the culture volume you started with, if different)
Transfer 100 μl of the resuspended recipient cells to a microcentrifuge tube for each transduction to be done
If strain and/or phage have not been tested previously, prepare a "phage control" tube with 100 μl of phage only (no cells) and a "cell control" tube with 100 μl of cells only (no phage)—neither control should produce colonies
Add appropriate amount (start with 10 μl###For most lysates, 10 μl of phage should be sufficient for good transduction, but phage can be diluted further if excessive lysis occurs, or up to 100 μl may be used if stock is of low titer.###) of [[P1 lysate|Preparation of P1vir liquid lysates]] from donor strain and mix well
Incubate tubes in a 30 °C waterbath for 30 min. without shaking###This incubation allows time for the phage to bind and introduce DNA into the cells.###
Add 200 μl of citrate buffer###Citrate is added to chelate the Ca^^2+^^ needed by the phage, blocking further replication of the phage, which could lead to excessive lysis. Some protocols use 100 or 200 μl of 1M sodium citrate, but Miller recommends the gentler 0.1 M citrate buffer. Citrate may inhibit transduction of Δ//dnaK//52; for this mutation, skip the citrate bufer step, plate directly on plates with and without 0.3% sodium citrate and incubate at 30°.### to each tube and mix well to halt phage replication
If transducing a resistance gene (such as Tc and especially Km###Recessive antibiotic-resistance alleles, such as StrR and RifR, require a longer period to allow segregation of the alleles as well as expression; these should be grown for four hours in LB broth plus citrate or plated by the double-overlay method.###) that requires time for phenotypic expression __before__ plating on selective media, add 1 ml of LB broth and incubate at 37 °C without shaking for 1 hour###If excessive killing occurs during the phenotypic expression period, an alternative is to plate in top agar on plates lacking antibiotic, incubate for several hours, and then overlay soft agar containing sufficient antibiotic to give the desired final concentration in the total plate volume.###
Spread desired amount of transduction mixture (start with 100 μl) on selective plates###The transduction mixture can also be added to 2.5 ml of molten top agar and plated.### and incubate at 37 °C###Transductants can also be plated on LB agar containing 5 mM citrate (and buffered with minimal salts ([f[LBC agar]]) to further reduce reinfection.###
If competent cells are frozen, thaw aliquots on ice
Add up to 5 μl plasmid DNA to a 200-μl aliquot of competent cells and mix gently but well
Incubate 30 min on ice
Heat-shock 90 sec at 37°C and return immediately to ice
Add 1 ml of SOC medium###LB medium can be used, but SOC increases transformation efficiency slightly### and mix gently but well
Incubate 60 min at 37°C without shaking
Plate 100 μl on a selective plate; if desired, plate the remainder of the cells on another plate
#Use a new, unopened bottle of TCA and make up the entire amount right in the bottle
#Add the indicated volume of dH~~2~~O directly to the bottle of TCA
#The resulting solution will contain 100% (w/v) TCA
#Dissolve Tris in about 80% of final volume of dH~~2~~O
#Adjust to desired pH with concentrated HCl. For pH 7.5, this is about 6-8 ml.
#Bring to final volume and autoclave
#Dissolve ingredients in dH~~2~~O
#Bring to total volume with dH~~2~~O
#Autoclave
#Dissolve Tris in ~175 ml dH~~2~~O
#pH with conc. HCl to 6.8
#Add SDS, bring to volume and check pH
Grow cultures under desired conditions
Pour a few ml of sterile 0.85% NaCl into a sterile multichannel pipettor reservoir
Determine the number of serial dilutions you need to do (usually seven, for overnight cultures) and use a multichannel pipettor set for 90 μl to transfer 0.85% NaCl to that number of rows of a sterile 96-well plate, one column per culture###Depending on the available multichannel pipettors, you could also use 180 μl of saline and 20 μl of culture.###
Remove the ejector from a P-20 pipettor set to 10 μl, wipe its barrel with a Kimwipe dampened with 10% bleach or 70% ethanol and let dry
Remove a 10-μl aliquot from each culture and transfer it to the first well in the appropriate column, pipetting up and down a few times to mix###Because the risk of contaminating a 10-day culture is so high, do this quickly and without touching the micropipettor to the sides of the tubes.###
When all strains have been transferred from their culture tubes to the first row, set the multichannel pipettor to 10 μl, transfer 10 μl from each well to the next row (next higher dilution) and mix all the wells by pipetting up and down a few times
Using fresh tips, repeat the transfer and mixing for each subsequent dilution
When all dilutions are complete, decide which dilutions should be plated and transfer 10 μl (using a regular micropipettor) __in duplicate__ to an agar plate placed over a [L[grid template|http://jevisick.faculty.noctrl.edu/research/docs/36-spot template for spot plating.pdf]]
Record carefully (e.g., on a [L[dilution record template|http://jevisick.faculty.noctrl.edu/research/docs/Dilution template.pdf]]) which strains and dilutions are in which plates and spots and be sure the plate has a mark on the back for orientation
Wait for spots to dry completely, then invert and incubate the plates
<!--{{{-->
<div class='toolbar' role='navigation' macro='toolbar [[ToolbarCommands::ViewToolbar]]'></div>
<div class='title' macro='view title'></div>
<div class='subtitle'><span macro='view modifier link'></span>, <span macro='view modified date'></span> (<span macro='message views.wikified.createdPrompt'></span> <span macro='view created date'></span>)</div>
<div class='tagging' macro='tagging'></div>
<div class='tagged' macro='tags'></div>
<div class='viewer' macro='view text wikified'></div>
<div class='tagClear'></div>
<!--}}}-->
Dissolve all ingredients thoroughly. Use at 2× for best transfer.
/***
|Name|WikifyPlugin|
|Source|http://www.TiddlyTools.com/#WikifyPlugin|
|Documentation|http://www.TiddlyTools.com/#WikifyPluginInfo|
|Version|1.2.0|
|Author|Eric Shulman|
|License|http://www.TiddlyTools.com/#LegalStatements|
|~CoreVersion|2.1|
|Type|plugin|
|Description|insert sections, slices, fields, literals, or computed values into a wiki-format output|
!!!!!Documentation
> see [[WikifyPluginInfo]]
!!!!!Revisions
<<<
2011.03.07 1.2.0 added handling in getFieldReference() for retrieving section values
|please see [[WikifyPluginInfo]] for additional revision details|
2007.06.22 1.0.0 initial release
<<<
!!!!!Code
***/
//{{{
version.extensions.WikifyPlugin= {major: 1, minor: 2, revision: 0, date: new Date(2011,3,7)};
config.macros.wikify={
handler: function(place,macroName,params,wikifier,paramString,tiddler) {
var fmt=params.shift();
var values=[];
var out="";
if (!fmt.match(/\%[0-9]/g) && params.length) // format has no markers, just join all params with spaces
out=fmt+" "+params.join(" ");
else { // format param has markers, get values and perform substitution
while (p=params.shift()) values.push(this.getFieldReference(place,p));
out=fmt.format(values);
}
if (macroName=="wikiCalc") out=eval(out).toString();
wikify(out.unescapeLineBreaks(),place,null,tiddler);
},
getFieldReference: function(place,p) {
if (typeof p != "string") return p; // literal non-string value... just return it...
var val=undefined;
var here=story.findContainingTiddler(place);
var current=here?here.getAttribute('tiddler'):'';
// SLICES: "::slicename" OR "here::slicename" OR "tiddlername::slicename"
var parts=p.split(config.textPrimitives.sliceSeparator);
var tid=parts[0]; var slice=parts[1];
if (slice) { // slice reference
if (!tid || !tid.length || tid=="here") tid=current;
var val=store.getTiddlerSlice(tid,slice);
}
// SECTIONS: "##sectionname" OR "here##sectionname" OR "tiddlername##sectionname"
if (!slice) {
var parts=p.split(config.textPrimitives.sectionSeparator);
var tid=parts[0]; var section=parts[1];
if (section) {
if (!tid || !tid.length || tid=="here") tid=current;
var val=store.getTiddlerText(tid+config.textPrimitives.sectionSeparator+section);
}
}
// FIELDS: "fieldname" OR "fieldname@tiddlername"
if (!slice && !section) {
var parts=p.split("@");
var field=parts[0]; var tid=parts[1];
if (!tid || !tid.length || tid=="here") tid=current;
var val=store.getValue(tid,field);
}
// not a slice, section or field, or value not found... return value unchanged
return val===undefined?p:val;
}
}
//}}}
//{{{
// define alternative macroName for triggering pre-rendering call to eval()
config.macros.wikiCalc=config.macros.wikify;
//}}}
#Dissolve X-gal in dimethylformamide.
#Wrap tube in foil and store at 4°C; no need to sterilize.
Working concentration in plates is 20 mg/l; add 0.5 ml of stock for each 500 ml of medium. Can also spread plates with 50 μl of stock.
#Dissolve ingredients in about 180 ml of dH~~2~~O
#Adjust pH to 7.0
#Do not autoclave
#Store at 4°C
laboratory of
[e[Jonathan E. Visick, PhD|mailto:jevisick@noctrl.edu]]
[[Dept. of Biology|http://www.nccbiology.com]]
[[North Central College|http://www.noctrl.edu]]
30 N. Brainard St.
Naperville, IL 60540
(630) 637-5185
/***
|''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.
***/
|~StandardViewBar|+editTiddler,shutTiddler|
|~ProtocolViewBar|+editTiddler,printProtocol,shutTiddler|
|~ProtocolPrintBar|closePrintTid|
|~CloseOnlyBar|+editTiddler,shutTiddler|
|~ProjectBar|projectNotes,+editTiddler,shutTiddler|
<!--{{{-->
<div class='toolbar' macro='toolbar [[ToolbarCommands::EditToolbar]]'></div>
<div class='title' macro='view title'></div>
<div class='editor' macro='edit title'></div>
<div class='editor' macro='edit text'></div>
<div class='editor' macro='edit svg 5'></div>
<div class='editor' macro='edit tags'></div><div class='editorFooter'><span macro='message views.editor.tagPrompt'></span><span macro='tagChooser excludeLists'></span></div>
<!--}}}-->
<script>
var tid = getTitle(place);
var div = createTiddlyElement(place,"div");
div.style.border = "1px solid #ccc";
div.style.padding = "2px";
svgIcon(tid,"auto",32,div)
</script>
<!--{{{-->
<div class='toolbar' macro='toolbar [[ToolbarCommands::ViewToolbar]]'></div>
<div class='title' macro='view title'></div>
<div class='viewer' macro='tiddler iconTemplate'></div>
<!--}}}-->
!tabConfig
{{col4{
<<forEachTiddler
where 'tiddler.tags.contains("systemConfig")'
sortBy 'tiddler.title.toUpperCase()'
write '"[["+tiddler.title+"]]\n"'
>>
}}}
{{col4{
<<forEachTiddler
where 'tiddler.tags.contains("config")'
sortBy 'tiddler.title.toUpperCase()'
write '"[["+tiddler.title+"]]\n"'
>>
}}}
!endConfig
!tabScripts
{{col4{
<<forEachTiddler
where 'tiddler.tags.contains("script")'
sortBy 'tiddler.title.toUpperCase()'
write '"[["+tiddler.title+"]]\n"'
>>
}}}
!endScripts
!tabText
{{col4{
<<forEachTiddler
where 'tiddler.tags.contains("text")'
sortBy 'tiddler.title.toUpperCase()'
write '"[["+tiddler.title+"]]\n"'
>>
}}}
!endText
!tabProtocols
{{col4{
<<forEachTiddler
where 'tiddler.tags.contains("protocol")'
sortBy 'tiddler.title.toUpperCase()'
write '"[["+tiddler.title+"]]\n"'
>>
}}}
!endProtocols
!tabRecipes
{{col4{
<<forEachTiddler
where 'tiddler.tags.contains("recipe")'
sortBy 'tiddler.title.toUpperCase()'
write '"[["+tiddler.title+"]]\n"'
>>
}}}
!endRecipes
!tabImages
{{col4{
<<forEachTiddler
where 'tiddler.tags.contains("image")'
sortBy 'tiddler.title.toUpperCase()'
write '"[["+tiddler.title+"]]\n"'
>>
}}}
{{col4{
<<forEachTiddler
where 'tiddler.tags.contains("icon")'
sortBy 'tiddler.title.toUpperCase()'
write '"[["+tiddler.title+"]]\n"'
>>
}}}
!endImages
!tabData
{{col4{
<<forEachTiddler
where 'tiddler.tags.contains("data")'
sortBy 'tiddler.title.toUpperCase()'
write '"[["+tiddler.title+"]]\n"'
>>
}}}
!endData
!tabStrains
{{col4{
<<forEachTiddler
where 'tiddler.tags.contains("strain")'
sortBy 'tiddler.title.toUpperCase()'
write '"[["+tiddler.title+"]]\n"'
>>
}}}
!endStrains
!tabOther
{{col4{
<<forEachTiddler
where '!tiddler.tags.containsAny(["systemConfig","config","plugin","system","setup-image","icon","data","script","text","protocol","recipe","strain"])'
sortBy 'tiddler.title.toUpperCase()'
write '"[["+tiddler.title+"]]\n"'
>>
}}}
!endOther
!tabSystem
{{col4{
<<forEachTiddler
where 'tiddler.tags.contains("setup")'
sortBy 'tiddler.title.toUpperCase()'
write '"[["+tiddler.title+"]]\n"'
>>
}}}
{{col4{
<<forEachTiddler
where 'tiddler.tags.contains("system")'
sortBy 'tiddler.title.toUpperCase()'
write '"[["+tiddler.title+"]]\n"'
>>
}}}
!endSystem
!tabPlugins
{{col4{
<<forEachTiddler
where 'tiddler.tags.contains("plugin")'
sortBy 'tiddler.title.toUpperCase()'
write '"[["+tiddler.title+"]]\n"'
>>
}}}
!endPlugins
//{{{
// Create editIndex macro
config.macros.editIndex = {
label: "edit index",
prompt: "Edit the index panel"
};
config.macros.editIndex.handler = function(place,macroName,params,wikifier,paramString,tiddler) {
if ( !readOnly ) { var btn = createTiddlyButton(place,this.label,this.prompt,this.onClickEditIndex,null,null,null); }
}
config.macros.editIndex.onClickEditIndex = function() {
story.displayTiddler(null,"Index",2);
return false;
}
// Create indexData tiddler if necessary
if ( !store.tiddlerExists("indexData") ) { store.saveTiddler("indexData","indexData","","system",new Date(),["system"]); }
// Get index text
var index = store.getTiddlerText("Index");
// Add any macro buttons to index panel; add editIndex button
var txt = "";
var reg = /[-]{5}\n([\s\S]+?)\n[-]{5}/;
var match = reg.exec(index);
if ( match ) {
var btns = match[1];
txt += btns.split("\n").join(" • ");
}
txt += " • <<editIndex>>\n";
// Create tab text and place in indexData, create tab definitions
txt += "<<tabs indexTabs\n";
var tabText = "";
var tid = store.getTiddler("indexData");
tid.text = "";
var reg = /\n[|](.+?)[|](.+?)[|]/g;
while ( match = reg.exec(index) ) {
var name = match[1];
tid.text += "!tab" + name + "\n"
var tags = match[2].split(",");
var toMatch = [];
var noMatch = [];
for ( var i=0; i<tags.length; i++ ) {
var first = tags[i].substr(0,1);
var rest = tags[i].substr(1);
if ( first == "+" ) { toMatch.push(rest); }
else if ( first == "-" ) { noMatch.push(rest); }
}
var noMatchString = "";
if ( noMatch.length > 0 ) { noMatchString = "!tiddler.tags.containsAny([\"" + noMatch.join("\",\"") + "\"])"; }
for ( var i=0; i<toMatch.length; i++ ) {
tabText = "{{col4{\n<<forEachTiddler\nwhere '";
if ( toMatch[i] == "all" ) { tabText += noMatchString; }
else {
tabText += "tiddler.tags.contains(\"" + toMatch[i] + "\")";
if ( noMatchString ) { tabText += " && " + noMatchString; }
}
tabText += "'\nsortBy 'tiddler.title.toUpperCase()'\n";
tabText += "write '\"[[\"+tiddler.title+\"]]\\n\"'\n>>\n}}}\n";
tid.text += tabText;
}
tid.text += "\n!end" + name + "\n";
txt += "'" + name + "' '' [[indexData##tab" + name + "]]\n";
}
txt += ">>";
// Put index in backstage
config.tasks.index = {
text: "index",
tooltip: "Index of all tiddlers",
content: txt
};
config.backstageTasks.push("index");
//}}}
<!--{{{-->
<div class='toolbar' macro='toolbar [[ToolbarCommands::EditToolbar]]'></div>
<div class='editform'>
<label macro='titleedit title'>Title:</label>
<label macro='edit text 1'>Text to show above list:</label>
<label macro='edit list' subtext='(list all tiddlers with specified tag(s), comma-separated)'>List tag:</label>
<label macro='edit cats' subtext = '("alpha" or fieldname to use in tagged tiddlers'>Categories:</label>
</div>
<!--}}}-->
<!--{{{-->
<div class='listtiddler'>
<div id='iconTools' macro='iconBar [[iconBarCommands::StandardViewBar]] h tool 16'></div>
<div class='title' macro='view title wikified'></div>
<div class='viewer'>
<div macro='view text wikified'></div>
<div macro='tiddler ListMaker'></div>
</div>
</div>
<div class='tagClear'></div>
<!--}}}-->
<!--{{{-->
<div class='texttiddler'>
<div id='iconTools' macro='iconBar [[iconBarCommands::ProjectBar]] h tool 16'></div>
<div class='title' macro='tiddler showTitle with: {{tiddler.title}}'></div>
<div class='viewer' macro='wikiText'></div>
</div>
<div macro='textSPM'></div>
<div class='tagClear'></div>
<!--}}}-->
<script>
var tids = store.getTaggedTiddlers("protocol");
var cats = [];
for ( var i=0; i<tids.length; i++ ) {
if ( tids[i].fields.category ) { cats.pushUnique(tids[i].fields.category); }
}
for ( var i=0; i<cats.length; i++ ) {
document.write(cats[i] + "<br>");
}
</script>
<!--{{{-->
<div class='toolbar' macro='toolbar [[ToolbarCommands::EditToolbar]]'></div>
<div class='editform'>
<label macro='titleedit title'>Title:</label>
<label macro='edit displaytitle'>Display title:</label>
<label macro='edit theory 8'>How it works:</label>
<label macro='edit materials 8' subtext='Format: item (use [f[title]] to link a recipe)|amount needed'>Materials:</label>
<label macro='edit text' subtext='One procedure step per line; precede line with %% if it should not be numbered'>Procedure:</label>
<label macro='edit analysis 8'>Analysis:</label>
<label macro='edit source'>Source:</label>
<label macro='select category *protocolCategories rows:1 allowOther'>Category:</label>
<label macro='edit tags'>Tags:</label>
</div>
<!--}}}-->
<script>
var name = story.findContainingTiddler(place).getAttribute("tiddler");
if ( name == "protocolPrint" ) { return false; }
var tid = store.getTiddler(name);
var theory = tid.fields.theory;
if ( theory ) {
wikify("!!How it works\n",place);
var temp = theory.split("\n");
for ( var j=0; j<temp.length; j++ ) {
if ( temp[j] && temp[j] != "" && temp[j] != "\n" ) {
var group = "";
while ( temp[j].match(/^[*#>|]/) ) {
group += temp[j] + "\n";
j++;
}
if ( group ) { wikify(group,place); }
else {
var tpar = createTiddlyElement(place,"p",null,"textpar",null);
wikify(temp[j],tpar);
}
}
}
}
var materials = tid.fields.materials;
var recipes = [];
materials = materials.replace(/\[[Ff]\[(.+?)\]\]/g,function(a,b){ recipes.push(b); return b; });
if ( materials ) { wikify("!!Materials\n|materialslist|k\n" + materials + (materials.endsWith("\n") ? "" : "\n"),place); }
var procedure = tid.text;
if ( procedure ) {
var steps = procedure.split("\n");
for ( var i=0; i<steps.length; i++ ) {
if ( steps[i] == "" ) { steps.splice(i,1); }
else if ( steps[i].substr(0,2) == "%%" ) { steps[i] = steps[i].substr(2); }
else if ( !steps[i].match(/^[*|>#]/) ) { steps[i] = "#" + steps[i]; }
}
wikify("!!Procedure\n" + steps.join("\n") + "\n",place);
}
var analysis = tid.fields.analysis;
if ( analysis ) { wikify("!!Analysis\n" + analysis + (analysis.endsWith("\n") ? "" : "\n"),place); }
wikify("!!Sources and notes\n",place);
var source = tid.fields.source;
if ( source ) { wikify(source + (source.endsWith("\n") ? "" : "\n"),place); }
if ( confirm("Click OK to add recipes to the printed protocol,\nor Cancel for no recipes") ) {
var grid = createTiddlyElement(null,"div",null,"recipeTable");
createTiddlyElement(grid,"h2",null,null,"Recipes");
jQuery(".protocol").after(grid);
var n = 0;
for ( var i=0; i<recipes.length; i++ ) {
var title = recipes[i];
if ( store.tiddlerExists(title) ) {
if ( n % 2 == 0 ) { var cell = createTiddlyElement(grid,"div",null,"recipeLeft"); }
else { var cell = createTiddlyElement(grid,"div",null,"recipeRight"); }
var tid = store.getTiddler(title);
var header = createTiddlyElement(cell,"div",null,"recipePrintTitle");
wikify (tid.fields.displaytitle||tid.title,header);
if ( tid.fields.baseconc ) { wikify(" (" + tid.fields.baseconc,header) + ")"; }
if ( tid.fields.use ) { var use = createTiddlyElement(cell,"div",null,"recipePrintUse"); wikify (tid.fields.use,use); }
var body = createTiddlyElement(cell,"div",null,"recipePrintBody");
var notes = [];
var vol = tid.fields.basevol;
var ttext = "|materialtable|k\n|| m.w. | final<br>conc. | stock<br>conc. |to make<br>" + vol + "|h\n";
text = tid.fields.materials.split("\n");
for ( var j=0; j<text.length; j++ ) {
text[j] = text[j].replace(/\[[Ff]\[(.+?)\]\]/g,function(a,b){ recipes.pushUnique(b); return b; });
text[j] = text[j].replace(/[#]{3}(.+?)[#]{3}/g,function(a,b){ notes.push(b); return ""; });
if ( text[j].substr(0,1) == ">" ) { ttext += "|>|>|>|>| !" + text[j].substr(1) + " |\n"; } else { ttext += text[j] + "\n"; }
}
wikify(ttext,body);
text = tid.text;
text = text.replace(/[#]{3}(.+?)[#]{3}/g,function(a,b){ notes.push(b); return ""; });
wikify(text,body);
if ( notes.length > 0 ) {
var nt = createTiddlyElement(body,"div",null,"recipeNotes");
for ( var j=0; j<notes.length; j++ ) { wikify("^^" + (j+1) + "^^" + notes[j] + "\n",nt); }
}
n++;
}
}
}
</script>
<!--{{{-->
<div class='protocol'>
<div id='iconTools' macro='iconBar [[iconBarCommands::ProtocolPrintBar]] h tool 16'></div>
<div class='title' macro='view displaytitle wikified'></span></div>
<div class='viewer' macro='tiddler protocolPrint'></div>
</div>
<div class='tagClear'></div>
<!--}}}-->
<!--{{{-->
<div class='protocol'>
<div id='iconTools' macro='iconBar [[iconBarCommands::ProtocolViewBar]] h tool 16'></div>
<div><img class='titleimg' src="images/icons/flask.svg"><span class='title' macro='view displaytitle wikified'></span></div>
<div class='viewer' macro='protocolview'></div>
</div>
<div class='tagClear'></div>
<!--}}}-->
<!--{{{-->
<div class='toolbar' macro='toolbar [[ToolbarCommands::EditToolbar]]'></div>
<div class='editform'>
<label macro='titleedit title'>Title:</label>
<label macro='edit displaytitle'>Display title:</label>
<label macro='edit use'>Usage:</label>
<label macro='edit baseconc' subtext = '(can be blank if no specific concentration)'>Concentration:</label>
<label macro='edit otherconc' subtext=' (format: conc|factor,... e.g. 20 mM|0.2,40 mM 0.4)'>Additional concentrations:</label>
<label macro='edit basevol'>Base volume:</label>
<label macro='edit materials 6' subtext='format: |name|mw|final conc|stock conc|amount|; precede a heading line (e.g., for two distinct solutions) with >'>Materials:</label>
<label macro='edit text 8' subtext='one instruction per line; start description line with %%'>Directions:</label>
<label macro='edit tags'>Tags:</label>
</div>
<!--}}}-->
<!--{{{-->
<div class='recipeprint'>
<div><span class='title' macro='view displaytitle wikified'></span><span class='conc' macro='recipeconc'></span></div>
<div class='recipeuse' macro='view use wikified'></div>
<div class='materials' macro='tiddler recipePrint with:{{tiddler.title}}'></div>
<div class='viewer' macro='view text wikified'></div>
</div>
<div class='tagClear'></div>
<!--}}}-->
<!--{{{-->
<div class='recipe'>
<div id='iconTools' macro='iconBar [[iconBarCommands::StandardViewBar]] h tool 16'></div>
<div><img class='titleimg' src="images/icons/recipe.svg"><span class='title' macro='view displaytitle wikified'></span><span class='conc' macro='recipeconc'></span></div>
<div class='recipeuse' macro='view use wikified'></div>
<div class='materials' macro='materialview'></div>
<div class='viewer' macro='view text wikified'></div>
</div>
<div class='tagClear'></div>
<!--}}}-->
<!--{{{-->
<div class='viewer' macro='view text wikified'></div>
<div class='tagClear'></div>
<!--}}}-->
<!--{{{-->
<div class='listtiddler reflist'>
<div id='iconTools' macro='iconBar [[iconBarCommands::CloseOnlyBar]] h tool 16'></div>
<div class='title' macro='view title wikified'></div>
<div class='viewer' macro='tiddler RefList'></div>
</div>
<div class='tagClear'></div>
<!--}}}-->
<script>
var tids = store.getTaggedTiddlers("result");
var cats = [];
for ( var i=0; i<tids.length; i++ ) {
if ( tids[i].fields.category ) { cats.pushUnique(tids[i].fields.category); }
}
for ( var i=0; i<cats.length; i++ ) {
document.write(cats[i] + "<br>");
}
</script>
<!--{{{-->
<div class='toolbar' macro='toolbar [[ToolbarCommands::EditToolbar]]'></div>
<div class='editform'>
<label macro='titleedit title'>Title:</label>
<label macro='edit displaytitle'>Display title:</label>
<div macro='edit text 10'></div>
<label macro='select category *resultCategories rows:1 allowOther'>Category:</label>
<label macro='edit tags'>Tags:</label>
</div>
<!--}}}-->
<script>
var title = "$1";
return ( store.getValue(title,"displaytitle") || title );
</script>
<!--{{{-->
<div id='iconTools' macro='iconBar [[iconBarCommands::StandardViewBar]] h tool 16'></div>
<div class='nicetitle' macro='view title'>Strain </div>
<div class='viewform'>
<div macro='see box'>Box:</div><div macro='see slot'>Slot:</div><br>
<div macro='see geno'>Genotype:</div><br>
<div macro='see species'>Species:</div><div macro='see parent'>Parent:</div>
<div macro='see atitle'>Alternate name:</div><br>
<div macro='see growth'>Growth requirements:</div><div macro='see use'>Use:</div><br>
<div macro='see source'>Source:</div><br>
<div macro='see notes'>Notes:</div>
</div>
<!--}}}-->
<!--{{{-->
<div class='toolbar' macro='toolbar [[ToolbarCommands::EditToolbar]]'></div>
<div class='editform'>
<label macro='titleedit title'>Title:</label>
<label macro='edit displaytitle'>Display title:</label>
<label macro='edit text'>Text:</label>
<label macro='edit tags'>Tags:</label>
</div>
<!--}}}-->
<!--{{{-->
<div class='texttiddler'>
<div id='iconTools' macro='iconBar [[iconBarCommands::StandardViewBar]] h tool 16'></div>
<div class='title' macro='tiddler showTitle with: {{tiddler.title}}'></div>
<div class='viewer' macro='wikiText'></div>
</div>
<div macro='textSPM'></div>
<div class='tagClear'></div>
<!--}}}-->
[img[images/icons/info.svg]]<<newGlossary>>
[img[images/icons/text.svg]]<<newTiddler label:"new text page" tags:text>>
[img[images/icons/flask.svg]]<<newTiddler label:"new protocol" tag:protocol template: "protocolEditTemplate" text:"" title:"New protocol">>
[img[images/icons/recipe.svg]]<<newTiddler label:"new recipe" text:"" tag:recipe template:"recipeEditTemplate">>
| gene | selection | method | reference |h
|//codA// (cytosine deaminase)<br>//codB// (cytosine permease)|5-fluorocytosine|20 μg/ml in minimal|MGG 118:323|
|//lacZ//|phenethyl β-D-galactoside<br>4-chloro-2-cyclopentyl-pnenyl-β-D-galactoside<br>ONPG|0.1 M in lactose broth<br>1 mM in lactose broth<br>2 mM in minimal|Can J. Micro 16:83<br><br>JB 114:882|
%%Method 1
Prepare P1 phage [[lysate|Preparation of P1vir liquid lysates]] as usual through first centrifugation step
Transfer phage from centrifuge tube to a 0.45 μm syringe filter, being careful to avoid transferring chloroform-containing pellet
Filter-sterilize into a sterile 5-ml screw-cap tube and store lysate at 4°C###The risk in this method would be possible bacterial contamination after the lysate is made###
%%Method 2
Prepare P1 phage lysate as usual
Mix 0.67 ml phage lysate with 1.3 ml 75% glycerol and freeze at -80°C
%%Method 3
Grow phage host overnight
Dilute 1:100 in LB containing 10 mM MgSO~~4~~ and 10 mM CaCl~~2~~ and grow to late exponential or early stationary phase (OD~~600~~ 0.8-1)
Cool to room temperature and add 50 μl of fresh phage stock to 1.4 ml host
Allow phage to adsorb 15 min at room temperature
Add 0.4 ml of sterile 75% glycerol and freeze at -80°C
!!Integration vector plasmid construction
*Clone DNA flanking the Tn7 chromosomal integration site (between //oriC// and //glmS// at 82 min on the //E. coli// chromosome) into pKAS32 or pKAS46, with a unique //Not//I restriction site between the two flanking sequences. This will allow any arbitrary sequence to be inserted at the //Not//I site and integrated at this chromosomal location.
*Add a β-lactamase (//bla//) promoter to permit constitutive expression of the gene of interest.
*Add omega fragment to serve as a transcriptional hard-stop at the end of the gene and prevent downstream effects.
Sequence of a DNA fragment (synthesized by GenScript) which can be inserted into //Eag//I-cut pKAS32 or pKAS46 (inactivating the //Not//I site):
{{sequence{ACTGACTGAC@@color:blue;CGGCCG@@@@color:red;GATGGCTTCATCATCCCACTTCTTGATTTTGCCCAGGTAGATGTCGCCGAGGGTTTTACCATCCAGCACCAGTTCGCCAGACTTCAGCCCTGGAATGTTAACCGCCAGCACCACGCCGCCAATCACGGTCGGGAACTGGAACAGACCTTCCTGAGCCAGTTTTTCGTCAGACAGCGGCGCGTCAGAGGCACCAAAATCAACGGTATTAGCGATAATCTGTTTTACGCCACCGGAAGAACCGATACCCTGGTAGTTAACTTTATTACCGGTTTCTTTCTGGTAAGTGTCAGCCCATTTGGCATACACCGGCGCAGGGAAGGTTGCACCTGCACCTGTCAGGCTTGCTTCTGCAAACACAGAGAAAGCACTCATCGATAAGGTCGCGGCGACAACAGTTGCGACGGTGGTACGCATAACTTTCATAATGTCTCCTGGGAGGATTCATAAAGCATTGTTTGTTGGCTACGAGAAGCAAAATAGGACAAACAGGTGACAGTTATATGTAAGGAATATGACAGTTTTATGACAGAGAGATAAAGTCTTCAGTCTGATTTAAATAAGCGTTGATATTCAGTCAATTACAAACA@@@@color:green;CGATGATAAGCTGTCAAACATGAGAATTCTTGAAGACGAAAGGGCCTCGTGATACGCCTATTTTTATAGGTTAATGTCATGATAATAATGGTTTCT@@@@color:green;text-decoration:underline;TAGACGTCAGGTGGCACTTT@@@@color:green;TCGGGGAAATGTGCGCGGAACCCCTATTTGTTTATTTTTCTAAATACATTCAAATATGTATCCGCTCATGAGACAATAACCCTGATAAATGCTTCAATAATATTGAAAAAGGAAGAGT''ATG''AGTATTCA@@@@color:fuchsia;GCGGCCGC@@@@color:lightslategray;GAGGGCTT@@@@text-decoration:underline;color:lightslategray;TACTAAGCTGATCCGGTGGA@@@@color:lightslategray;TGACCTTTTGAATGACCTTTAATAGATTATATTACTAATTAATTGGGGACCCTAGAGGTCCCCTTTTTTATTTTAAAAATTTTTTCACAAAACGGTTTACAAGCATAAAGCTAGCTTGCTCAATCAATCACCGGATCGACGCGTCAATTCGAGCTCCACC@@@@color:maroon;CGGTTTGTCACATGGAGTTGGCAGGATGTTTGATTAAAAACATAACAGGAAGAAAAATGCCCCGCTTACGCAGGGCATCCATTTATTACTCAACCGTAACCGATTTTGCCAGGTTACGCGGCTGGTCAACGTCGGTGCCTTTGATCAGCGCGACATGGTAAGCCAGCAGCTGCAGCGGAACGGTGTAGAAGATCGGTGCAATCACCTCTTCCACATGCGGCATCTCGATGATGTGCATGTTATCGCTACTTACAAAACCCGCATCCTGATCGGCGAAGACATACAACTGACCGCCACGCGCGCGAACTTCTTCAATGTTGGATTTCAGTTTTTCCAGCAATTCGTTGTTCGGTGCAACAACAATAACCGGCATATCGGCATCAATTAGCGCCAGCGGACCGTGTTTCAGTTCGCCAGCAGCGTAGGCTTCAGCGTGAATGTAAGAGATCTCTTTCAACTTCAATGCGCCTTCCAGCGCGATTGGGTACTGATCGCCACGGCCCAGGAACAGCGCGTGATGTTTGTCAGAGAAATCTTCTGCCAGCGCTTCAATGCGTTTGTCCTGAGACAGCATCTGCTCAATACGGCTCGGCAGCGCCTGCAGACCATGCACGATGTCATGTTCAATGGAGGCATCCAGACCTTTCAGGCGAGACAGCTTCGCCACCAGCATCAACAGCACAGT@@@@color:blue;CGGCCG@@ACTGACTGAC}}}
|@@color:blue;//Eag//I (C|GGCCG)@@|@@color:red;//att//Tn7L@@|@@color:green;P//bla//@@|@@color:fuchsia;//Not//I (GC|GGCCGC)@@|@@color:lightslategray;omega@@|@@color:maroon;Tn7R@@|
!!Folding reporter vector plasmid construction
*Clone DNA flanking the Tn7 chromosomal integration site (between //oriC// and //glmS// at 82 min on the //E. coli// chromosome) into pKAS32 or pKAS46, with a unique //Not//I restriction site between the two flanking sequences. This will allow any arbitrary sequence to be inserted at the //Not//I site and integrated at this chromosomal location.
*Add a β-lactamase (//bla//) promoter to permit constitutive expression of the gene of interest.
*''Add the //lacZ// α-fragment such that it can be fused to the gene'' (PCR desired gene with a primer designed to match //NotI// and put the α-fragment in frame).
*Add omega fragment to serve as a transcriptional hard-stop at the end of the gene and prevent downstream effects.
Sequence of a DNA fragment (synthesized by GenScript) which can be inserted into //Eag//I-cut pKAS32 or pKAS46 (inactivating the //Not//I site):
{{sequence{ACTGACTGAC@@color:blue;CGGCCG@@@@color:red;GATGGCTTCATCATCCCACTTCTTGATTTTGCCCAGGTAGATGTCGCCGAGGGTTTTACCATCCAGCACCAGTTCGCCAGACTTCAGCCCTGGAATGTTAACCGCCAGCACCACGCCGCCAATCACGGTCGGGAACTGGAACAGACCTTCCTGAGCCAGTTTTTCGTCAGACAGCGGCGCGTCAGAGGCACCAAAATCAACGGTATTAGCGATAATCTGTTTTACGCCACCGGAAGAACCGATACCCTGGTAGTTAACTTTATTACCGGTTTCTTTCTGGTAAGTGTCAGCCCATTTGGCATACACCGGCGCAGGGAAGGTTGCACCTGCACCTGTCAGGCTTGCTTCTGCAAACACAGAGAAAGCACTCATCGATAAGGTCGCGGCGACAACAGTTGCGACGGTGGTACGCATAACTTTCATAATGTCTCCTGGGAGGATTCATAAAGCATTGTTTGTTGGCTACGAGAAGCAAAATAGGACAAACAGGTGACAGTTATATGTAAGGAATATGACAGTTTTATGACAGAGAGATAAAGTCTTCAGTCTGATTTAAATAAGCGTTGATATTCAGTCAATTACAAACA@@@@color:green;CGATGATAAGCTGTCAAACATGAGAATTCTTGAAGACGAAAGGGCCTCGTGATACGCCTATTTTTATAGGTTAATGTCATGATAATAATGGTTTCT@@@@color:green;text-decoration:underline;TAGACGTCAGGTGGCACTTT@@@@color:green;TCGGGGAAATGTGCGCGGAACCCCTATTTGTTTATTTTTCTAAATACATTCAAATATGTATCCGCTCATGAGACAATAACCCTGATAAATGCTTCAATAATATTGAAAAAGGAAGAGT''ATG''AGTATTCA@@@@color:fuchsia;GCGGCCGC@@@@color:navy;TCACTGGCCGTCGTTTTACAACGTCGTGACTGGGAAAACCCTGGCGTTACCCAACTTAATCGCCTTGCAGCACATCCCCCTTTCGCCAGCTGGCGTAATAGCGAAGAGGCCCGCACCGATCGCCCTTCCCAACAGTTGCGCAGCCTGAATGGCGAATGGCGCTTTG@@@@color:lightslategray;GAGGGCTT@@@@color:lightslategray;text-decoration:underline;TACTAAGCTGATCCGGTGGA@@@@color:lightslategray;TGACCTTTTGAATGACCTTTAATAGATTATATTACTAATTAATTGGGGACCCTAGAGGTCCCCTTTTTTATTTTAAAAATTTTTTCACAAAACGGTTTACAAGCATAAAGCTAGCTTGCTCAATCAATCACCGGATCGACGCGTCAATTCGAGCTCCACC@@@@color:maroon;CGGTTTGTCACATGGAGTTGGCAGGATGTTTGATTAAAAACATAACAGGAAGAAAAATGCCCCGCTTACGCAGGGCATCCATTTATTACTCAACCGTAACCGATTTTGCCAGGTTACGCGGCTGGTCAACGTCGGTGCCTTTGATCAGCGCGACATGGTAAGCCAGCAGCTGCAGCGGAACGGTGTAGAAGATCGGTGCAATCACCTCTTCCACATGCGGCATCTCGATGATGTGCATGTTATCGCTACTTACAAAACCCGCATCCTGATCGGCGAAGACATACAACTGACCGCCACGCGCGCGAACTTCTTCAATGTTGGATTTCAGTTTTTCCAGCAATTCGTTGTTCGGTGCAACAACAATAACCGGCATATCGGCATCAATTAGCGCCAGCGGACCGTGTTTCAGTTCGCCAGCAGCGTAGGCTTCAGCGTGAATGTAAGAGATCTCTTTCAACTTCAATGCGCCTTCCAGCGCGATTGGGTACTGATCGCCACGGCCCAGGAACAGCGCGTGATGTTTGTCAGAGAAATCTTCTGCCAGCGCTTCAATGCGTTTGTCCTGAGACAGCATCTGCTCAATACGGCTCGGCAGCGCCTGCAGACCATGCACGATGTCATGTTCAATGGAGGCATCCAGACCTTTCAGGCGAGACAGCTTCGCCACCAGCATCAACAGCACAGT@@@@color:blue;CGGCCG@@ACTGACTGAC}}}
|@@color:blue;//Eag//I (C|GGCCG)@@|@@color:red;//att//Tn7L@@|@@color:green;P//bla//@@|@@color:fuchsia;//Not//I (GC|GGCCGC)@@|@@color:navy;//lacZ//-α@@|@@color:lightslategray;omega@@|@@color:maroon;Tn7R@@|
''Problem'': need //pcm//+ and Δ//pcm// strains based on MG1655 that carry //lacZ//ΔM15 (//lacZ//α−, //lacZ//ω+) based on MG1655 as hosts for the [[folding reporter|Folding Reporter]] project
''Strategy'':
*PCR amplify //lacZ//ΔM15 along with //lacI22// from strain XA21 using primers with //Eag//I ends (there are no //Eag//I sites in this sequence)
*Insert into the //Not//I site of pKAS32 (or 46)
*Recombine into chromosome of JV1120 and JV1121, selecting str^^R^^ and screening lac−
*Verify deletion by PCR
''Primers'':
left: ''lacIZ-L-Eag'' - 5′-ATCGAT''C|GGCCG''TGGCTGTCTGAATCTGGTGT (T~~m~~ for matching region 57.3°C; overall 72°C)
right: ''lacIZ-R-Eag'' - 5′-CGATCG''C|GGCCG''AGAAAGCAGACCAAACAGCG (T~~m~~ for matching region 57.3°C; overall 74.6°C)
expected product: 4795, including //Eag//I ends
same primers without //Eag//I ends: lacIZ-L and lacIZ-R
''Sequence'':
{{sequence{gggatcaggaggagaagatcgcctctatcgccgtaccgctgcgcagtgaacaacgggtgat__TGGCTGTCT__<br>__GAATCTGGTGT__atatggcgagcgcaatgaccattgaacaggcagcggaaaagcatcttccggcgctacaa<br>cgggtagcaaaacagatcgaagaaggggttgaatcgcaggctattctggtggccggaaggcgaagcggca<br>tgcatttacgttgacaccatcgaatggcgcaaaacctttcgcggtatggcatgatagcgcccggaagaga<br>gtcaattcagggtggtgaat@@color:blue;GTGAAACCAGTAACGTTATACGATGTCGCAGAGTATGCCGGTGTCTCTTA<br>TCAGACCGTTTCCCGCGTGGTGAACCAGGCCAGCCACGTTTCTGCGAAAACGCGGGAAAAAGTGGAAGCG<br>GCGATGGCGGAGCTGAATTACATTCCCAACCGCGTGGCACAACAACTGGCGGGCAAACAGTCGTTGCTGA<br>TTGGCGTTGCCACCTCCAGTCTGGCCCTGCACGCGCCGTCGCAAATTGTCGCGGCGATTAAATCTCGCGC<br>CGATCAACTGGGTGCCAGCGTGGTGGTGTCGATGGTAGAACGAAGCGGCGTCGAAGCCTGTAAAGCGGCG<br>GTGCACAATCTTCTCGCGCAACGCGTCAGTGGGCTGATCATTAACTATCCGCTGGATGACCAGGATGCCA<br>TTGCTGTGGAAGCTGCCTGCACTAATGTTCCGGCGTTATTTCTTGATGTCTCTGACCAGACACCCATCAA<br>CAGTATTATTTTCTCCCATGAAGACGGTACGCGACTGGGCGTGGAGCATCTGGTCGCATTGGGTCACCAG<br>CAAATCGCGCTGTTAGCGGGCCCATTAAGTTCTGTCTCGGCGCGTCTGCGTCTGGCTGGCTGGCATAAAT<br>ATCTCACTCGCAATCAAATTCAGCCGATAGCGGAACGGGAAGGCGACTGGAGTGCCATGTCCGGTTTTCA<br>ACAAACCATGCAAATGCTGAATGAGGGCATCGTTCCCACTGCGATGCTGGTTGCCAACGATCAGATGGCG<br>CTGGGCGCAATGCGCGCCATTACCGAGTCCGGGCTGCGCGTTGGTGCGGATATCTCGGTAGTGGGATACG<br>ACGATACCGAAGACAGCTCATGTTATATCCCGCCGTTAACCACCATCAAACAGGATTTTCGCCTGCTGGG<br>GCAAACCAGCGTGGACCGCTTGCTGCAACTCTCTCAGGGCCAGGCGGTGAAGGGCAATCAGCTGTTGCCC<br>GTCTCACTGGTGAAAAGAAAAACCACCCTGGCGCCCAATACGCAAACCGCCTCTCCCCGCGCGTTGGCCG<br>ATTCATTAATGCAGCTGGCACGACAGGTTTCCCGACTGGAAAGCGGGCAGTGA@@gcgcaacgcaattaatg<br>tgagttagctcactcattaggcaccccaggctttacactttatgcttccggctcgtatgttgtgtggaat<br>tgtgagcggataacaatttcacacaggaaacagct@@color:blue;ATGACCATGATTACGGATTCACTGGCCGTCGTTTT<br>ACAACGTCGTGACTGGGAAAACCCTGGCGTTACCCAACTTAATCGCCTTGCAGCACATCCCCCTTTCGCC<br>AGCTGGCGTAATAGCGAAGAGGCCCGCACCGATCGCCCTTCCCAACAGTTGCGCAGCCTGAATGGCGAAT<br>GGCGCTTTGCCTGGTTTCCGGCACCAGAAGCGGTGCCGGAAAGCTGGCTGGAGTGCGATCTTCCTGAGGC<br>CGATACTGTCGTCGTCCCCTCAAACTGGCAGATGCACGGTTACGATGCGCCCATCTACACCAACGTGACC<br>TATCCCATTACGGTCAATCCGCCGTTTGTTCCCACGGAGAATCCGACGGGTTGTTACTCGCTCACATTTA<br>ATGTTGATGAAAGCTGGCTACAGGAAGGCCAGACGCGAATTATTTTTGATGGCGTTAACTCGGCGTTTCA<br>TCTGTGGTGCAACGGGCGCTGGGTCGGTTACGGCCAGGACAGTCGTTTGCCGTCTGAATTTGACCTGAGC<br>GCATTTTTACGCGCCGGAGAAAACCGCCTCGCGGTGATGGTGCTGCGCTGGAGTGACGGCAGTTATCTGG<br>AAGATCAGGATATGTGGCGGATGAGCGGCATTTTCCGTGACGTCTCGTTGCTGCATAAACCGACTACACA<br>AATCAGCGATTTCCATGTTGCCACTCGCTTTAATGATGATTTCAGCCGCGCTGTACTGGAGGCTGAAGTT<br>CAGATGTGCGGCGAGTTGCGTGACTACCTACGGGTAACAGTTTCTTTATGGCAGGGTGAAACGCAGGTCG<br>CCAGCGGCACCGCGCCTTTCGGCGGTGAAATTATCGATGAGCGTGGTGGTTATGCCGATCGCGTCACACT<br>ACGTCTGAACGTCGAAAACCCGAAACTGTGGAGCGCCGAAATCCCGAATCTCTATCGTGCGGTGGTTGAA<br>CTGCACACCGCCGACGGCACGCTGATTGAAGCAGAAGCCTGCGATGTCGGTTTCCGCGAGGTGCGGATTG<br>AAAATGGTCTGCTGCTGCTGAACGGCAAGCCGTTGCTGATTCGAGGCGTTAACCGTCACGAGCATCATCC<br>TCTGCATGGTCAGGTCATGGATGAGCAGACGATGGTGCAGGATATCCTGCTGATGAAGCAGAACAACTTT<br>AACGCCGTGCGCTGTTCGCATTATCCGAACCATCCGCTGTGGTACACGCTGTGCGACCGCTACGGCCTGT<br>ATGTGGTGGATGAAGCCAATATTGAAACCCACGGCATGGTGCCAATGAATCGTCTGACCGATGATCCGCG<br>CTGGCTACCGGCGATGAGCGAACGCGTAACGCGAATGGTGCAGCGCGATCGTAATCACCCGAGTGTGATC<br>ATCTGGTCGCTGGGGAATGAATCAGGCCACGGCGCTAATCACGACGCGCTGTATCGCTGGATCAAATCTG<br>TCGATCCTTCCCGCCCGGTGCAGTATGAAGGCGGCGGAGCCGACACCACGGCCACCGATATTATTTGCCC<br>GATGTACGCGCGCGTGGATGAAGACCAGCCCTTCCCGGCTGTGCCGAAATGGTCCATCAAAAAATGGCTT<br>TCGCTACCTGGAGAGACGCGCCCGCTGATCCTTTGCGAATACGCCCACGCGATGGGTAACAGTCTTGGCG<br>GTTTCGCTAAATACTGGCAGGCGTTTCGTCAGTATCCCCGTTTACAGGGCGGCTTCGTCTGGGACTGGGT<br>GGATCAGTCGCTGATTAAATATGATGAAAACGGCAACCCGTGGTCGGCTTACGGCGGTGATTTTGGCGAT<br>ACGCCGAACGATCGCCAGTTCTGTATGAACGGTCTGGTCTTTGCCGACCGCACGCCGCATCCAGCGCTGA<br>CGGAAGCAAAACACCAGCAGCAGTTTTTCCAGTTCCGTTTATCCGGGCAAACCATCGAAGTGACCAGCGA<br>ATACCTGTTCCGTCATAGCGATAACGAGCTCCTGCACTGGATGGTGGCGCTGGATGGTAAGCCGCTGGCA<br>AGCGGTGAAGTGCCTCTGGATGTCGCTCCACAAGGTAAACAGTTGATTGAACTGCCTGAACTACCGCAGC<br>CGGAGAGCGCCGGGCAACTCTGGCTCACAGTACGCGTAGTGCAACCGAACGCGACCGCATGGTCAGAAGC<br>CGGGCACATCAGCGCCTGGCAGCAGTGGCGTCTGGCGGAAAACCTCAGTGTGACGCTCCCCGCCGCGTCC<br>CACGCCATCCCGCATCTGACCACCAGCGAAATGGATTTTTGCATCGAGCTGGGTAATAAGCGTTGGCAAT<br>TTAACCGCCAGTCAGGCTTTCTTTCACAGATGTGGATTGGCGATAAAAAACAACTGCTGACGCCGCTGCG<br>CGATCAGTTCACCCGTGCACCGCTGGATAACGACATTGGCGTAAGTGAAGCGACCCGCATTGACCCTAAC<br>GCCTGGGTCGAACGCTGGAAGGCGGCGGGCCATTACCAGGCCGAAGCAGCGTTGTTGCAGTGCACGGCAG<br>ATACACTTGCTGATGCGGTGCTGATTACGACCGCTCACGCGTGGCAGCATCAGGGGAAAACCTTATTTAT<br>CAGCCGGAAAACCTACCGGATTGATGGTAGTGGTCAAATGGCGATTACCGTTGATGTTGAAGTGGCGAGC<br>GATACACCGCATCCGGCGCGGATTGGCCTGAACTGCCAGCTGGCGCAGGTAGCAGAGCGGGTAAACTGGC<br>TCGGATTAGGGCCGCAAGAAAACTATCCCGACCGCCTTACTGCCGCCTGTTTTGACCGCTGGGATCTGCC<br>ATTGTCAGACATGTATACCCCGTACGTCTTCCCGAGCGAAAACGGTCTGCGCTGCGGGACGCGCGAATTG<br>AATTATGGCCCACACCAGTGGCGCGGCGACTTCCAGTTCAACATCAGCCGCTACAGTCAACAGCAACTGA<br>TGGAAACCAGCCATCGCCATCTGCTGCACGCGGAAGAAGGCACATGGCTGAATATCGACGGTTTCCATAT<br>GGGGATTGGTGGCGACGACTCCTGGAGCCCGTCAGTATCGGCGGAATTCCAGCTGAGCGCCGGTCGCTAC<br>CATTACCAGTTGGTCTGGTGTCAAAAATAA@@taataaccgggcaggccatgtctgcccgtatttcgcgtaa<br>ggaaatccattatgtactatttaaaaaacacaaacttttggatgttcggtttattctttttcttttactt<br>ttttatcatgggagcctacttcccgtttttcccgatttggctacatgacatcaaccatatcagcaaaagt<br>gatacgggtattatttttgccgctatttctctgttctcgctattattccaac__CGCTGTTTGGTCTGCTTT__<br>CTgacaaactcgggctgcgcaaatacctgctgtggattattaccggcatg}}}