text:
Front Page The Milward Viola Violas Available Work in Progress Photo Gallery Publications Viola Design Construction Featured Violas Articles Contact Links
Viola size has always been, to a greater or lesser degree, a controversial topic since the early 17th century when the instrument we know today as 'the viola' was more clearly represented by at least two distinct forms. Since the viola has, in more recent times, found a greater popularity the issue as to the instruments 'correct' size has evoked a continued debate. To look for reasons for the present confusion both the origins of the string quartet in the late 17th and early 18th Century, and to the situation that persisted before this time should be considered.
During the early period of the violas history, at a time when the violin family was emerging as a group, the different instruments generally represented the vocal pattern of soprano, alto, tenor and bass. Two different sizes of violas were used to cover the middle voices. The 'alto' viola (small viola), and 'tenor' viola (large viola), both had the same tuning (c, g, d', a'), which is a fifth lower than the violin (soprano), (g, d', a', e''), but due to their different sizes they had quite different timbres, or sound qualities. However as the tuning of both the alto and tenor instruments is so far removed from the bass tuning a true tenor tuning of (F, c, g, d'), was sometimes used.
Historically then, three distinct forms of viola seem to have existed; the 'alto' viola in alto tuning (smaller body size), the 'tenor' viola in alto tuning (larger body size but with a relatively short neck), and the true 'tenor' tuned to F. Since the 18th Century, however, the string quartet has used just three different sizes of instrument, the violin, viola and violoncello. The bass instrument of the violin family, the violoncello, encompasses the tenor register whilst the viola generally covers the alto voice. These new roles for the instruments of the middle register overlap somewhat and reflect the situation that persists today. The term 'contralto viola' probably best describes the instrument suited to this contemporary role, occupying the ground somewhere between the soprano and tenor registers, historically represented by the older forms of viola.
The challenge, which faces the contemporary luthier, is how to define an instrument that will fit the middle voice separating the soprano from the bass, and what quality of sound should this instrument possess? Which is the more desirable, the alto or tenor timbre? Does the current desired tone colour call for a resonance that is nasal or completely clear?
William Primrose, "That there is a difference in sound quality goes without argument, and it is up to the individual player, to say nothing of the individual listener, to prefer one type of sonority to another. In my own case I must confess to a strong preference for the mezzo-soprano quality over the darker contralto sound…." However Primrose does go on to say, "experience has taught me not to expect a satisfactory 'viola' sound from a short model…."
Lionel Tertis, "The small violas have insufficient air space and therefore lack C string sonority. The large ones of over 17" or 18" in length, with their cumbersome features effectively prevent ease of manipulation."
Contemporary performance demands an instrument that is neither too small for efficient sonority nor too large as to compromise technical accomplishment. It would appear to remain, however, that the dark and pure tenor timbre is still the desired quality sought after by many instrumentalists today. Given that a suitable size of viola is required to give this desired timbre, that the instrument should be of a playable dimension, and that the form is required to preserve the classical unity of the string family, what then are the factors pertinent to achieving the ideal size of viola?
An increase in the body length goes some way to achieving the goal of a darker tenor quality and there exist certain arguments as to what this ideal size should be. Let us first realise, however, that by modern set up criteria, developed over the preceding centuries to establish the higher tension instruments in use today, that the body length of an instrument will dictate, by proportion, the final string length. For a given body length a stop length is established, which is determined by the design of the model. Using the modern proportion of 2:3 a final string length is achieved.
It should be born in mind that the string is the acoustical centre of any instrument, and consideration should also be given to the tension of the strings as this gives the variable downward force on the body of the instrument. For any given instrument there will be an optimum tension of string that will cause the body to resonate at is full potential.
As the viola is tuned a fifth below that of the violin and that the fifth indicates a vibratory ratio of 3:2, it has been reasoned that an instrument built in proper proportion should have a body length in a proportion of 3:2 to that of the violin. This would result in a viola with a body length of 54 cm. (21 in.), which for my part is not an acceptable goal, and is a solution that ignores other critical aspects of an instruments design. Eugene Sprenger (1882 - 1953), a luthier from Frankfurt, made use of basic design criteria to produce a viola that had a broader body combined with deeper ribs giving an increased air volume to the body of the instrument, effectively lowering the air space resonance tone. This 'Sprenger model' viola was used regularly by Paul Hindemith and had a 'strong tone with full character'. Lionel Tertis also used similar considerations combined with a wider bridge platform in his 'Tertis model' viola to good effect, and William Primrose comments when comparing the models of Andrea Guarneri to that of Stradivari, "The middle bout is wider, and therein lies the source of the greater sonority on the lowest string…" The most extreme example of this feature is most amusingly displayed by Jean-Baptiste Vuillaume's earlier contribution to this argument, his 'Contralto' viola of 1855, which has a body length of only 41.3 cm. (16 ¼ in.), but one that makes a valuable comment as to the criteria for design proportions.
Considering the question of body length of the viola, it is interesting to note that if we divide what has at times been suggested as the 'standard' size for a viola, 16¾ in., by 6, the violin dimension of 14 in. is achieved, and similarly if a fifth of the violin dimension is added to its length of 14 in., then a 16 ¾ in viola is obtained. Whilst the stature of any individual player will ultimately determine the size of viola sought, it should be remembered that an instruments body length is not the only consideration. An 'ideal' model should also display other features essential to good sonority. Not least, the neck should be in proper proportion to the body length to give the correct length of string. Suitable width, especially in the C bout, effectively widens the bridge platform and broadens the arching, allowing for a better mechanical dynamic. Good rib depth combined with considered arching also contribute to establishing the final enclosed air volume of the body with its associated resonance's, whilst the style of arching, combined with sensitive thickness, determines the final response of the instrument. All of these elements, each individually important, should in their turn be tempered by sensible playing considerations.
What then should be the point of departure for present day luthiers when considering viola design? The variable size range is a unique feature of the viola, and this does provide for individual requirements and taste. When considering viola size, the following comments are enlightening:
Robert Dolejsi makes the very valid point in his article in Violins and Violinists, December 1943, titled 'What size viola?', "…whose opinion and recommendation would be considered authoritive to define proper viola dimensions, I would not hesitate to state that those of us who have spent a lifetime with the viola under all the trying conditions of symphony, opera, chamber music and solo engagements, constitute a group of criterions worthy to form a definite opinion on the subject." Dolejsi continues, "The viola of from 16½ to 17 inches is ideal from all viewpoints." In the same vein Lionel Tertis comments, "…I have kept my eyes and ears open for nearly half a century and have put two and two together. In other words the design (of the 'Tertis' model viola), is simply an amalgamation of all the good points of the old masters in the many instruments I have seen, heard and played, plus anything I have learned that makes for ease in manipulating the larger dimension of viola." Tertis also states regarding his own 'Tertis' model, "It is 16¾ inches long….the minimum from which to hope for really satisfactory C string sonority." And finally from William Primrose, "I adjure violists to seek instruments not less in length than the models of Stradivari and Guarneri with an eye to those, like Guarneri's, with a wider middle bout. With that dimension up to seventeen inches I deem practical." And when considering the smaller dimension of instrument goes on to say, "…seek instruments of the widest dimensions and with deep ribs. These departures from the norm sometimes make up for the shorter lineal dimension. But, avoid the oddball models that have been offered from time to time."
Revised Oct. 2004
Viola Size
"The subject of viola size has been an area of controversy and confusion, not least among recent generations of luthiers."

redpajama_set_name: RedPajamaCommonCrawl


text:
HomeThat Christmas
That Christmas
That Christmas is a TV show on Australian national television from ABC with an average rating of 3.0 stars by TVCatchUpAustralia.com's visitors. We have 1 episodes of That Christmas in our archive. The first episode of That Christmas was broadcast in December, 2020. Did you miss an episode of That Christmas but don't you wan't that to happen in the future? Please set an alarm and add That Christmas to your favourites, so we can remind you by email when there's a new episode available to watch. Completely free: handy!
Eleven poignant, funny and powerful stories about Christmas like no other, told by the people who lived through them. Some of the storytellers are familiar faces, some are new.


This entry was posted	on Friday, June 29th, 2012 at 5:14 pm	and is filed under E-Books, Formats, History, iBooks - Interactive, India, Kashmir, Landscapes & Nature, PDF, People & Culture, Religion. You can follow any responses to this entry through the RSS 2.0 feed. You can leave a response, or trackback from your own site.


text:
Phonology Article History Tree Map
Encyclopedia of Keywords > Information > Science > Linguistics > Phonology Michael Charnine
SPEECH SOUND
SOUND PATTERNS
PHONETICS PHONOLOGY
PHONOLOGICAL
VOWEL HARMONY
TWO-LEVEL PHONOLOGY
This Review contains major "Phonology"- related terms, short phrases and links grouped together in the form of Encyclopedia article.
Phonology is the study of the sound patterns of language.
Phonology: the study of the systems of speech sounds.
Phonology is a discipline grounded in observable facts, but like any discipline it rests on conceptual assumptions.
Phonology is the study of the sound systems of languages.
Phonology is the study of contrastive sound units in language.
He introduces the modern methodology and principles on the phonology, morphology and syntax for the Pre-Indo-European and Proto-Indo-European.
The principles of Natural Phonology were extended to morphology by Wolfgang U. Dressler, who founded Natural Morphology.
Blackwell. A first full-length introduction to non-linear phonology.
I have only a basic knowledge of derivational Generative Phonology, but encountered no barriers to enter the world of Optimality Theory.
Phonology in generative grammar.
Hooper, Joan B. (1976). An introduction to natural generative phonology.
Cambridge, CUP. 1974a "Some ideas concerning the acquisition of phonology" In F. Bresson (ed) Problèmes Actuels en Psycholinguistique CNRS pp.
An important part of phonology is studying which sounds are distinctive units within a language.
See Phonology, below, for details on the ranges of actual allophones used.
Back in the Spring of 1999, Harvard and MIT hosted a symposium called Phonology 2000.
First the wh -word is fronted, then the result is fed to phonology (and hence pronounced) and to semantics (and hence interpreted).
The velar rows remain separate in Luwian, while Hittite may secondarily have undergone a Centum change, but the exact phonology is unclear.
Papers in laboratory phonology IV.
PYU working papers in linguistics: Focus on phonology, Vol.1.
Phonology and writing system Sanskrit has 48 phonemes (Vedic Sanskrit has 49).
Abu-Salim, Issam M. (1982a) A reanalysis of some aspects of Arabic phonology: a metrical approach.
A morpheme is an abstract unit and is realised by a morph; it is the approximate equivalent of a phoneme on the level of phonology.
Through the borrowed lexical items from Sanskrit it expands its phonology by incorporating the sounds like aspirated plosives and fricatives.
Two-level phonology traces its linguistic heritage to `classical' generative phonology as codified in The Sound Pattern of English ( Chomsky and Halle 1968).
When I was trained, the prevailing model of phonology was that of Chomsky and Halle's 1968 Sound Pattern of English (and Morris Halle was my thesis advisor).
His main research interests include clinical phonetics and phonology, and the linguistics of Welsh.
CSU Hayward Defining "sound" in phonetics and phonology.
First-year students are advised to take Phonetics and Phonology (LING1004).
The phonetics and phonology of gutturals: a case study from Ju|'hoansi.
Prerequisites: Introduction to the Study of Language, Phonetics and Phonology are recommended to be taken before or concurrently with this unit.
Part I seeks to clarify the nature of gradience from the perspectives of phonology, generative syntax, psycholinguistics, and sociolinguistics.
While Krahe only considered phonology and morphology, the edition also includes a comprehensive account of syntax and lexis.
The PhD qualifying exam procedure has now been altered to allow students to exempt from the any of the areas of the exam (phonology, syntax, special field).
Metrical phonology is a phonological theory concerned with organizing segments into groups of relative prominence.
Friedman, L. (1976). Phonology of a soundless language: phonological structure of ASL. Doctoral dissertation, University of California, Berkeley.
Child phonology and phonological theory.
Sandler, W. (1989). Phonological representation of the sign: linearity and non-linearity in ASL phonology.
This was based on the established rule of Malay phonology that the syllable structure consists of only a single consonant as its onset and its coda.
Davis, S. (1988). "Syllable onsets as a factor in stress rules." Phonology 5: 1-19.
Phonology also includes topics such as assimilation, elision, epenthesis, vowel harmony, tone, non-phonemic prosody and phonotactics.
Clements, G. N. Vowel harmony in nonlinear generative phonology.
Information theoretic approaches to phonology: the case of Finnish vowel harmony.
Crasborn, O. & E. van der Kooij (1997) Relative orientation in sign language phonology.
In: V. van Heuven, H. van der Hulst & J. van de Weijer (eds.) Issues in the phonetics - phonology interface.
Some implication of onset-coda constraints for syllable phonology.
The prevailing nonsequential approach to phonology, the Optimality Theory, OT, is based not on rewrite rules but on constraints.
Topics may include articulatory timing, the phonetics phonology interface, and constraints and constraint interaction.
Individual and joint research on selected topics in theoretical phonology.
Topics include phonology, morphology, syntax, semantics, first and second language acquisition, sociolinguistics, pyscholinguistics and neurolinguistics.
As a result, reduplication is interesting theoretically as it involves the interface between phonology and morphology.
Farina, Donna M. The morphological rule of learned backing and lexical phonology.
Natural Phonology was a theory based on the publications of its proponent David Stampe in 1969 and (more explicitly) in 1979.
The approach was soon extended to morphology by John McCarthy and Alan Prince, and has become the dominant trend in phonology.
Goldsmith, J. (1976). An overview of autosegmental phonology.
Brentari, D. 1999. A prosodic model of sign language phonology.
Friedman, L. A. 1976. Phonology of a soundless language: phonological structure of the American Sign Language.
A review of Steven Bird, Computational Phonology: a constraint-based approach.
At its core, then, two-level phonology is a rule formalism, not a complete theory of phonology.
Phonology Links to an online phonology course, phonology and sound change, and Canadian raising.
Phonological processes that delete or insert segments pose a special challenge to two-level phonology.
Bernhardt, B. & Gilbert, J. (1992). Applying linguistic theory to speech-language pathology: the case for nonlinear phonology.
Flemming claims that the phonology contains, i.e., the mind stores, acoustic representations.
Typical offerings include phonology and the lexicon, syntax and phonology, phonological representations.
Encyclopedia of Keywords > Information > Science > Linguistics
Encyclopedia of Keywords > Time > History
Society > Culture > Languages > Language
Perception > Senses > Hearing > Sound
Information > Science > Linguistics > Phonetics
Books about "Phonology" in Amazon.com
Short phrases about "Phonology"
Originally created: November 25, 2007.


The countless beauties of Greece in a unique film. All of the famous ancient archaeological sites, the world famous monuments, the incomparable natural locations.
From Crete to Thrace, from Corfu to Rhodes. The astonishing golden blue Greek beaches, the picturesque villages, places where tradition is alive in the everyday life, day after day, the continuous route through thousands of years. Paul Pissanos, the known specialized producer, presents an enjoyable journey that unveils the endless diversity of beauties in a land blessed by God.


text:
package com.facebook.buck.testutil;

import com.facebook.buck.util.ThrowingCloseableMemoizedSupplier;
import java.util.function.Supplier;
import org.junit.rules.ExternalResource;

/** A closeable resource for the lifetime of the junit test, but is cleaned up after the test. */
public class CloseableResource<T extends AutoCloseable> extends ExternalResource {

  private final ThrowingCloseableMemoizedSupplier<T, Exception> resource;

  private CloseableResource(ThrowingCloseableMemoizedSupplier<T, Exception> resource) {
    this.resource = resource;
  }

  /**
   * @param resourceSupplier creates the resource on command
   * @param <U> the type of the resource
   * @return a {@link org.junit.rules.TestRule} that initializes and closes the resource per test
   *     case
   */
  public static <U extends AutoCloseable> CloseableResource<U> of(Supplier<U> resourceSupplier) {
    return new CloseableResource<>(
        ThrowingCloseableMemoizedSupplier.of(resourceSupplier, resource -> resource.close()));
  }

  /** @return the resource this wraps */
  public T get() {
    return resource.get();
  }

  @Override
  protected void before() {
    resource.get();
  }

  @Override
  protected void after() {
    try {
      resource.close();
    } catch (Exception e) {
      throw new RuntimeException(e);
    }
  }
}

redpajama_set_name: RedPajamaGithub


text:
May/June 2018 Elwood McQuaid
Someone who stands before a faucet many times a day scrubbing up for fear of germs and general contamination suffers from mysophobia. The condition, which can lead to extreme anxiety, disrupts normal contact with others and is described as "hard to live with."
The government of Poland has officially put a law on the books, duly signed by President Andrzej Duda, which smacks of political mysophobia. It attempts to scrub the Nazi stain off the country by fining or imprisoning for up to three years anyone who accuses Poland of involvement with or responsibility for the atrocities that took place there during the Nazi occupation of World War II.
The crux of the legislators' angst revolves around references to "Polish death camps," which is a technical misnomer. It is, of course, well known that the Germans (not the Poles) built six concentration and death camps throughout Poland. The worst were the extermination camps they built solely to kill Jewish people and so-called undesirables after they liquidated the ghettos. Two of the most notorious were Auschwitz-Birkenau, where 1.1 million people were killed, and Treblinka, where people went directly to the gas chambers at the rate of approximately 2,000 every few hours.
Reaction to the new Polish law came swiftly. Israel's Prime Minister Benjamin Netanyahu declared it baseless. "One cannot change history and the Holocaust cannot be denied," he said. Then-U.S. Secretary of State Rex Tillerson expressed dismay. "Enactment of this law adversely affects freedom of speech and academic inquiry."
Netanyahu was correct: History cannot be changed. Its inviolability is undeniable. To attempt to corrupt it for political advantage is the real crime here, and it's a dangerous one. There were German "death camps" in Poland; and to impose a prison sentence on anyone, in Poland or abroad, who uses the term is a preposterous overreach. Even more consequential is the threat to incarcerate anyone accusing the Polish state or people of involvement with the Holocaust.
This law exempts people who have long been identified as Nazi collaborators from being exposed or brought to justice. No one knows the number of Polish people who took advantage of the Nazi offer of a bag of sugar or bottle of vodka for turning in a Jew. No one knows how many Polish people turned in their fellow Poles for harboring Jewish people.
But we do know about the courage and compassion of thousands of Polish citizens who risked their lives to provide safe havens for Jewish families whom the Nazis were hunting down for execution. The number honored by Yad Vashem, the World Holocaust Remembrance Center in Jerusalem, as "Righteous Among The Nations" exceeds 6,700—more than that of any other country. Another certainty is these 6,700 Poles are merely a token of those unnamed Polish heroes who quietly risked everything to save Jewish people.
If we are tempted to think that what happens in Poland is of little consequence to those of us sheltered a few thousand miles away, we must think again. The party in power in Poland, the Law and Justice party (PiS), is a right-wing populist movement representative of a growing anti-democratic wave in Europe. Since taking power, PiS "has come under fire for truncating democratic norms and institutions through policies set up to neuter judicial independence, weaken civil liberties, politicize the civil service, and exert control over media," reports Foreign Affairs magazine.
Germany is experiencing the same political tremors from a resurgence of right-wing nationalist movements. Along with this turn to the right in parts of Europe has come a surge of anti-Semitism. In December, thousands of protesters in Berlin burned Israeli flags to protest U.S. President Donald Trump's announcement that he plans to move the U.S. embassy from Tel Aviv to Jerusalem. A long-time Jewish resident exclaimed, "I thought that it could never happen in the middle of Berlin."
Are we witnessing an ominous turning back of the clock to the 1930s when truth, justice, and precious freedoms were being snatched away? Of greater consequence is the haunting question, Do we care? We had better care, or we may end up confronting our own version of mysophobia, and our freedoms in America may be the next to disappear.
Elwood McQuaid is the former Executive Director of The Friends of Israel Gospel Ministry and former editor-in-chief of Israel My Glory magazine. He is an author of multiple books focusing on Israel, prophecy, and Biblical teaching.
2 thoughts on "Scrubbing the Nazi Stain"
Joseph Porter says:
It has already started in America. Our free speech is under assault. Sad when we forget our past.
A. Miller says:
Look Up, Our redemption draws near……the signs are all around us.


text:
Miguel Costa Pinheiro de Araújo Jorge (Maia, 13 de julio de 1978), conocido artísticamente como Miguel Araújo, es un cantante y compositor portugués.

Es líder de la banda musical Os Azeitonas y desde 2012 ha desarrollado una carrera en solitario.

Biografía

Miguel Araújo se interesó por la música desde joven, pues sus tíos tocaban en un grupo. Cuando tenía 11 años le regalaron un bajo. Más tarde la cambió por la guitarra para componer y cantar al mismo tiempo.

En 2002 fundó con varios amigos universitarios la banda de rock alternativo Os Azeitonas, de la que era vocalista y guitarrista. En aquella época firmaba sus primeras canciones con el seudónimo «Miguel AJ». Años después recibió una oferta del músico Rui Veloso, considerado padre del rock portugués, para que grabara con su sello. Los discos Um Tanto ou Quanto Atarantado (2005) y Rádio Alegría (2007) le sirvieron para darse a conocer. Al tiempo, sacó bajo el apodo «Mendes» otra formación, el dúo Mendes e João Só, y colaboró con el cómico Nuno Markl.

A raíz de su éxito con Os Azeitonas, firmó un contrato con el sello EMI y publicó su debut en solitario, Cinco dias e meio (2012). El sencillo de lanzamiento, Os Maridos das Outras, obtuvo mucha repercusión en las radiofórmulas nacionales, mientras que el álbum fue disco de oro. Por otro lado, con Os Azeitonas fue nominado al «mejor artista portugués» en los MTV Europe Music Awards de 2012.

En abril de 2014 lanzó con Warner Music el segundo LP, Crónicas da Cidade Grande, que entró directamente en el número 1 de iTunes en la primera semana. Para ese trabajo contó con las colaboraciones de Ana Moura, Marcelo Camelo (Los Hermanos), el cantante Antonio Zambujo y la debutante Inês Viterbo en Balada Astral, otro de sus mayores éxitos.

Discografía

Referencias

Enlaces externos
 Sitio web oficial de Miguel Araújo

Nacidos en Maia
Cantantes masculinos de Portugal
Compositores de Portugal
Cantantes en portugués

redpajama_set_name: RedPajamaWikipedia


text:
Thanks to your support, we're delighted to share news of a major victory in our campaign to hold Glasgow City Council accountable for failures in its provision of homelessness services. More than 10,000 of you raised your voices in protest – and now you have been heard.
In August last year, we decided it was time to step up our campaign. We'd repeatedly tried and failed to engage with Glasgow City Council. And then came the publication of the annual statistics showing a year-on-year rise in number of times they had breached their legal duty to homeless people.
So, we asked the court for a judicial review into their 'unlawful practice' of denying vulnerable people temporary accommodation, specifically asking:
to declare that Glasgow City Council is acting unlawfully
to request that they submit a revised homelessness strategy guaranteeing temporary accommodation for every homeless person who needs it
We also asked for your support to help us #standupforjustice for those affected. In response, you crowdfunded nearly £17,000 and more than 10,000 of you added your voice to our petition calling for change and to protect homeless people's rights all across Scotland.
Forcing real change on the ground
Less than three hours before our case was due to be heard in court, news came through that the Scottish Housing Regulator would be stepping in to investigate weaknesses in the council's provision of homelessness services.
This has renewed our hope that this injustice can be put to an end, and we stand ready to provide the Regulator with evidence to assist with its inquiry. If necessary, we will also return to court.
To achieve this breakthrough in such a short time – after more than six years of raising our concerns over the council's failures – proves the value of both your voice in calling for change and the power of taking such unprecedented action.
It also means we no longer need to proceed with our legal case as our primary objective is being met.
A thank you from all of us at Shelter Scotland
As Graeme Brown, Director of Shelter Scotland, says: 'This historic and long overdue intervention by the Scottish Housing Regulator is the material change required to bring Glasgow City Council's provision of homelessness services under proper scrutiny.
'I would like to say a huge thank you to our amazing legal team and to every supporter who threw their weight behind this campaign.'
We couldn't have done this without the support of people like you.
Find out more about our campaigns and join the movement today


By accessing and using this website you agree to be bound by these terms and conditions. Information provided on this website is for general information only. It should not be relied on as being complete, accurate or up to date. The information on this website is subject to change.
Subject to any responsibilities implied by law which cannot be excluded, neither GM Property, its directors nor staff are liable for any loss, damage, liability, claim or expense whatsoever suffered or incurred by you arising out of or in connection with any material, information, service or process appearing on this website. While every care has been taken with the preparation of these particulars which are believed to be correct, they are in no way warranted by the selling agent or our clients either in whole or in part and should not be construed as forming part of any contract. Any intending purchasers are advised to make enquiries as they deem necessary to satisfy themselves on all matters in this respect. All areas and dimensions are subject to survey. Prices subject to change without notice.


Nuclear power provides a significant clean energy source for our nation and the world. Oak Ridge National Laboratory provides science and technology to address issues facing the current and future utilization of nuclear reactors and the supporting nuclear systems infrastructure. ORNL is committed to leadership class research and development that integrates our comprehensive staff expertise, strategic resources, and facility capabilities to address the needs and interests of a diverse set of sponsors.
Our recent science and technology activities include research in computational methods and their application to nuclear systems design and safety; design and performance of irradiation and thermal-hydraulic experiments; instrumentation and controls; and regulatory research and support. The nuclear safety expertise and the computational, experiment, and technology development capabilities within ORNL are also applied to other R&D areas such as nuclear security and fusion and accelerator systems.


text:
#define TC_M88K

#define TARGET_BYTES_BIG_ENDIAN 1

#ifdef M88KCOFF
#define COFF_MAGIC MC88OMAGIC
#define BFD_ARCH bfd_arch_m88k
#define COFF_FLAGS F_AR32W
#endif

#define NEED_FX_R_TYPE
#define TC_KEEP_FX_OFFSET
#define TC_CONS_RELOC RELOC_32

/* different type of relocation available in the m88k */

enum reloc_type
{
  RELOC_LO16,			/* lo16(sym) */
  RELOC_HI16,			/* hi16(sym) */
  RELOC_PC16,			/* bb0, bb1, bcnd */
  RELOC_PC26,			/* br, bsr */
  RELOC_32,			/* jump tables, etc */
  RELOC_IW16,			/* global access through linker regs 28 */
  NO_RELOC
};

struct reloc_info_m88k
{
  unsigned long int r_address;
  unsigned int r_symbolnum:24;
  unsigned int r_extern:1;
  unsigned int r_pad:3;
  enum reloc_type r_type:4;
  long int r_addend;
};

#define relocation_info reloc_info_m88k

/* The m88k uses '@' to start local labels.  */
#define LEX_AT (LEX_BEGIN_NAME | LEX_NAME)

#ifndef BFD_ASSEMBLER
#define LOCAL_LABEL(name) \
  ((name[0] =='@' && (name [1] == 'L' || name [1] == '.')) \
   || (name[0] == 'L' && name[1] == '0' && name[2] == '\001'))
#endif

/* The m88k uses pseudo-ops with no leading period.  */
#define NO_PSEUDO_DOT 1

/* Don't warn on word overflow; it happens on %hi relocs.  */
#undef WARN_SIGNED_OVERFLOW_WORD

#define md_convert_frag(b,s,f)		{as_fatal (_("m88k convert_frag\n"));}

/* We don't need to do anything special for undefined symbols.  */
#define md_undefined_symbol(s) 0

/* We have no special operand handling.  */
#define md_operand(e)

#ifdef M88KCOFF

/* Whether a reloc should be output.  */
#define TC_COUNT_RELOC(fixp) ((fixp)->fx_addsy != NULL)

/* Get the BFD reloc type to use for a gas fixS structure.  */
#define TC_COFF_FIX2RTYPE(fixp) tc_coff_fix2rtype (fixp)

/* No special hook needed for symbols.  */
#define tc_coff_symbol_emit_hook(s)

/* Align sections to a four byte boundary.  */
#ifndef max
#define max(a,b)	(((a) > (b)) ? (a) : (b))
#endif
#define SUB_SEGMENT_ALIGN(SEG, FRCHAIN)	max (section_alignment[(int) (SEG)], 4)

/* Fill in rs_align_code fragments.  */
extern void m88k_handle_align PARAMS ((fragS *));
#define HANDLE_ALIGN(frag)  m88k_handle_align (frag)

#define MAX_MEM_FOR_RS_ALIGN_CODE  (3 + 4)

#endif /* M88KCOFF */


Price: It is free to walk along the towpath and aqueduct, there are charges payable in the car parks.
Taking the Llangollen Canal across the River Dee valley in North Wales, the aqueduct is one of the most awesome engineering feats on the canal network. You can walk across the aqueduct or save your legs and go by boat - remember to bring your camera and a head for heights!
Our free Trevor Basin Visitor Centre is the best place to start your family day out at Pontcysyllte Aqueduct (pronounced Pont–ker-sulth-teh) or 'Ponty' as we call it, with hands on models, videos, local information and local gifts.
You may see swans, coots, moorhens and ducks. Remember - bread isn't good for ducks' tummies, so please keep our ducks healthy by buying our special duck food from our visitor centre.
By car - SATNAV LL14 3SG. Please look out for the brown signs in the area to avoid narrow and steep routes. It is now pay and display parking at Pontcysyllte Aqueduct and Trevor Basin.
Both car parks are just a short walk from the aqueduct.
By train - Ruabon or Chirk stations are the nearest, and while they are a fair walk to 'Ponty', you could cycle from the stations.
By bus - regular buses run from Wrexham via Ruabon station and Trevor. Buses also run from Chirk via Froncysyllte.
By boat - there's mooring and turning facilities for canal boats at Trevor Basin, north of the Pontcysyllte Aqueduct. You'll find public toilets and visitor moorings at our visitor centre. For more facilities, see our North Wales facilites sheet.
Pontcysyllte Aqueduct is currently closed for essential maintenance works until 9th February 2019.
Please help us to improve the way we manage our World Heritage Site by giving your input in our consultation. Deadline for submissions is Friday 1 March 2019.


Our consultancy and contracting services are now operated via a new company Land and Heritage Ltd. Please visit the Land and Heritage website for further information.
As well as offering woodland sales we are experienced countryside managers, and offer a comprehensive consultancy service, and a contracting division. The Land and Heritage team have skills and experience in forestry, ecology and nature conservation and also landscape design. The new business has been joined by Matt Jackson, and experienced Head Gardener and Estate Manager formerly with the National Trust. While working mainly in the south west we do travel for the right jobs, with clients from Kent to North Wales.
This service is available to all woodland and estate owners, including those who purchase a woodland from ourselves, offering you a professional back-up for either regular maintenance or larger jobs, such as track construction or major harvesting work.


text:
#ifndef COLLECTION_H
#define COLLECTION_H

#include <algorithm>
#include <boost/shared_ptr.hpp>
#include <cstdio>
#include <set>
#include <vector>
#include "constraints.hpp"
#include "interaction.hpp"
#include "vecrand.hpp"

/*!
A "Collection" of atoms, the box, and an integrator. Provides general simulation
time-stepping as
well as statistical tracking.

The most useful method is timestep(), which takes one step forward in time; this
is defined
by each subclass separately, as each subclass uses a different integration
scheme.
*/
class Collection {
   protected:
    sptr<Box> box;
    sptr<AtomGroup> atoms;
    vector<sptr<Interaction> > interactions;
    vector<sptr<StateTracker> > trackers;
    vector<sptr<Constraint> > constraints;

    //! To be called immediately after setting particle positions and
    //! velocities; lets
    //! `StateTracker` instances stay updated automatically
    void update_trackers();

    //! To be called approximately after forces have been set. Constraints will
    //! typically
    //! set forces / velocities in some direction to zero, so
    //! `update_constraints` should be
    //! called after all forces have been set, and any external velocity changes
    //! have been made.
    void update_constraint_positions();
    void update_constraint_velocities();
    void update_constraint_forces();
    virtual flt set_forces_get_pressure(bool constraints_and_a = true);

   public:
    Collection(
        sptr<Box> box, sptr<AtomGroup> atoms,
        vector<sptr<Interaction> > interactions = vector<sptr<Interaction> >(),
        vector<sptr<StateTracker> > trackers = vector<sptr<StateTracker> >(),
        vector<sptr<Constraint> > constraints = vector<sptr<Constraint> >(),
        bool should_initialize = true);

    virtual void initialize();

    // Timestepping Methods
    // /////////////////////////////////////////////////////////////////////
    //! Set forces. This should be called at the beginning of the simulation,
    //! and will also be
    //! called by timestep()
    virtual void set_forces(bool constraints_and_a = true);

    //! Take one step forward in time
    virtual void timestep() = 0;

    //! Total degrees of freedom. This takes into account constraints, and
    //! whether the
    //! center-of-mass is free.
    flt degrees_of_freedom();

    // Statistical Methods
    // //////////////////////////////////////////////////////////////////////
    flt potential_energy();
    //! Total energy, including both potential and kinetic_energy
    flt energy();
    virtual flt temp(bool minuscomv = true);
    virtual flt kinetic_energy() { return atoms->kinetic_energy(); };
    virtual flt virial();
    virtual flt pressure();
    sptr<Box> get_box() { return box; };
    inline Vec com() { return atoms->com(); };
    inline Vec com_velocity() { return atoms->com_velocity(); };
#ifdef VEC3D
    //! Shortcut to `AtomGroup` method of the same name
    inline Vec angular_momentum(const Vec &loc) {
        return atoms->angular_momentum(loc);
    };
    //! Shortcut to `AtomGroup` method of the same name
    inline Vec angular_momentum() { return atoms->angular_momentum(com()); };
#elif defined VEC2D
    //! Shortcut to `AtomGroup` method of the same name
    inline flt angular_momentum(const Vec &loc) {
        return atoms->angular_momentum(loc);
    };
    //! Shortcut to `AtomGroup` method of the same name
    inline flt angular_momentum() { return atoms->angular_momentum(com()); };
#endif
    flt gyradius();  // Radius of gyration
    virtual ~Collection(){};

    //! Shortcut to `AtomGroup` method of the same name
    void reset_com_velocity() { atoms->reset_com_velocity(); };
    //! Shortcut to `AtomGroup` method of the same name
    void reset_L() { atoms->reset_L(); };
    //! Scale all velocities by a factor
    void scale_velocities(flt scaleby);
    //! Scale all velocities to get to a specific temperature
    void scale_velocities_to_temp(flt T, bool minuscomv = true);
    //! Scale all velocities to get to a specific total energy
    void scale_velocities_to_energy(flt E);

    virtual void add_interaction(sptr<Interaction> inter) {
        interactions.push_back(inter);
        update_trackers();
    };
    virtual void add_tracker(sptr<StateTracker> track) {
        trackers.push_back(track);
        update_trackers();
    };
    virtual void add_constraint(sptr<Constraint> c) {
        constraints.push_back(c);
        update_trackers();
    };
    void add(sptr<Interaction> a) { add_interaction(a); };
    void add(sptr<StateTracker> a) { add_tracker(a); };
    void add(sptr<Constraint> a) { add_constraint(a); };

    vector<sptr<Interaction> > get_interactions() { return interactions; };
};

//! A "static" Collection, that doesn't move.
class StaticCollec : public Collection {
   public:
    StaticCollec(
        sptr<Box> box, sptr<AtomGroup> atoms,
        vector<sptr<Interaction> > interactions = vector<sptr<Interaction> >(),
        vector<sptr<StateTracker> > trackers = vector<sptr<StateTracker> >(),
        vector<sptr<Constraint> > constraints = vector<sptr<Constraint> >())
        : Collection(box, atoms, interactions, trackers, constraints){};

    //! Does nothing; a no-op.
    virtual void timestep(){};
    void update() {
        update_trackers();
        update_constraint_positions();
        update_constraint_velocities();
        update_constraint_forces();
    };
};

//! A Collection with a "solvent", using the Langevin equation.
/*! The Langevin Equation ((modified with \f$\vec{f}\f$):

\f$\dot{\vec{p}} = - \xi \vec{p} + \vec{f} + \overset{\circ}{\vec{p}}\f$

Where \f$- \xi \vec{p}\f$ is a drag term, \f$\overset{\circ}{\vec{p}}\f$ is a
"random force"
term, and \f$\vec{f}\f$ is the standard force term. When \f$\vec{f} =
\vec{0}\f$, particles undergo
Brownian motion, with \f$\xi = \frac{k_B T}{m D}\f$.

This particular algorithm is from Allen and Tildesley, p. 263:

\f$
\begin{align*}
\vec{r}\left(t+\delta t\right)) & =\vec{r}\left(t\right)+c_{1}\delta
t\vec{v}\left(t\right)+c_{2}\delta t^{2}\vec{a}\left(t\right)+\delta r^{G}\\
\vec{v}\left(t+\delta t\right) &
=c_{0}v\left(t\right)+\left(c_{1}-c_{2}\right)\delta
t\vec{a}\left(t\right)+c_{2}\delta t\vec{a}\left(t+\delta t\right)+\delta v^{G}
\end{align*}
\f$

where

\f$
\begin{align*}
c_0 & = e^{- \xi \delta t} &
c_1 & = \frac{1 - c_0}{\xi \delta t} &
c_2 & = \frac{1 - c_1}{\xi \delta t}
\end{align*}
\f$

There are expansions for all 3; see Allen and Tildesley page 261.

\f$\delta r^G\f$ and \f$\delta v^G\f$ are drawn from correlated Gaussian
distributions, with

\f$
\begin{align*}
\sigma_{r}^{2} & =\left(\xi dt\right)^{-1}\left[2-\left(\xi
dt\right)^{-1}\left(3-4e^{-\xi dt}+e^{-2\xi dt}\right)\right]\\
\sigma_{v}^{2} & =1-e^{-2\xi dt}\\
c_{rv} & =\frac{\left(1-e^{-\xi dt}\right)^{2}}{\xi dt\sigma_{r}\sigma_{v}}
\end{align*}
\f$

Those are the unitless versions, multiply by \f$\frac{\delta t^2 k_B T}{m}\f$,
\f$\frac{k_B
T}{m}\f$, and \f$\frac{\delta t k_B T}{m}\f$ respectively to get the unit-full
versions in the book

*/
class CollectionSol : public Collection {
   protected:
    //! The random number generator
    BivariateGauss gauss;
    flt dt;
    //! Damping coefficient, \f$\xi\f$
    flt damping;
    flt force_mag;
    //! desired temperature
    flt desT;
    //! note that this is sigmar/sqrt(T/m), same for sigmav
    //! corr is unitless, and correct
    flt sigmar, sigmav, corr;
    flt c0, c1, c2;
    //! Set c0, c1, c2, sigmar, sigmav, corr from desT, dt, and damping
    void set_constants();

   public:
    CollectionSol(
        //! Box for the atoms
        sptr<Box> box,
        //! The atoms
        sptr<AtomGroup> atoms,
        //! The timestep \f$\delta t\f$
        const flt dt,
        //! Damping coefficient, \f$\xi\f$
        const flt damping,
        //! The desired temperature \f$T\f$
        const flt desired_temperature,
        //! The interactions, other than brownian motion. These provide
        //! \f$\vec{f}\f$.
        vector<sptr<Interaction> > interactions = vector<sptr<Interaction> >(),
        //! Trackers, such as a NeighborList
        vector<sptr<StateTracker> > trackers = vector<sptr<StateTracker> >(),
        //! Constraints
        vector<sptr<Constraint> > constraints = vector<sptr<Constraint> >());
    //! Change the desired damping coefficient \f$\xi\f$ or temperature \f$T\f$.
    void change_temperature(const flt damp, const flt desired_temperature) {
        damping = damp;
        force_mag = damp;
        desT = desired_temperature;
        set_constants();
    };
    void change_force(const flt damp, const flt fmag,
                      const flt desired_temperature) {
        //! Change the timestep \f$\delta t\f$.
        damping = damp;
        force_mag = fmag;
        desT = desired_temperature;
        set_constants();
    };
    void set_dt(const flt newdt) {
        dt = newdt;
        set_constants();
    };
    void timestep();
    // void seed(uint n){gauss.seed(n);};
    // void seed(){gauss.seed();};
};

//! A damped Collection, equivalent to `CollectionSol` but without the random
//! forces.
/*! Uses the Langevin Equation (modified with \f$\vec{f}\f$):

\f$\dot{\vec{p}} = - \xi \vec{p} + \vec{f} + \overset{\circ}{\vec{p}}\f$

Except that here, we use \f$\overset{\circ}{\vec{p}} = 0\f$.
*/
class CollectionDamped : public Collection {
   protected:
    flt dt;
    flt damping;
    flt c0, c1, c2;
    void set_constants();

   public:
    CollectionDamped(
        sptr<Box> box, sptr<AtomGroup> atoms, const flt dt, const flt damping,
        vector<sptr<Interaction> > interactions = vector<sptr<Interaction> >(),
        vector<sptr<StateTracker> > trackers = vector<sptr<StateTracker> >(),
        vector<sptr<Constraint> > constraints = vector<sptr<Constraint> >());
    void change_damping(const flt damp) {
        damping = damp;
        set_constants();
    };
    void set_dt(const flt newdt) {
        dt = newdt;
        set_constants();
    };
    void timestep();
};

/*! for use in solution, with damped forces and random forces.
  *
  * This uses the same physics as `CollectionSol`, but a different algorithm
 from Honeycutt and Thirumalai.
  *
  * Note that the Honeycutt and Thirumalai algorithm is flawed, and this fixes
 it to some degree.
  *
  * Treats Atom.f as the "configurational force", and Atom.a as
  * the acceleration due to Atom.f + random force.
  * Note that d²r/dt² = Atom.f + random force (- damping*v), but we
  * don't include that.
  *
  * 1) find positions: (x0,v0,a0,f0) -> (x, v, a, f)
  *         sets Atom.x from previous force, velocity, and position
  *         x = x0 + dt v0 + 1/2 dt^2 a0 - damping*dt²/2m * v0
  * 2) intermediate v: (v0,f0) -> (v1, f0)
  *         v1 = damped(v0) +  dt/2 f0/m
  *                 where damped(vo) = v0*(1-h*damping/2m + (h*damping/m)²/4)
  * 3) set_forces(): (x, f0) -> (x,f)
  *         reset and set the forces
  *         f = grad(V(x))
  * 4) Acceleration: (f, a0) -> (f, a1)
  *         a1 = f/m + gaussian
  *         set acceleration given the forces, adding in random pieces, no
 damping
  * 5) Finish v and a: (v1, f, a1) -> (v, f, a)
  *         v = v1 + dt/2 a1
  *

 **/
class CollectionSolHT : public Collection {
   protected:
    flt dt;
    flt damping;
    flt desT;  // desired temperature
    GaussVec gauss;
    void set_gauss();

   public:
    CollectionSolHT(
        sptr<Box> box, sptr<AtomGroup> atoms, const flt dt, const flt damping,
        const flt desired_temperature,
        vector<sptr<Interaction> > interactions = vector<sptr<Interaction> >(),
        vector<sptr<StateTracker> > trackers = vector<sptr<StateTracker> >(),
        vector<sptr<Constraint> > constraints = vector<sptr<Constraint> >());
    void change_temperature(const flt newdt, const flt damp,
                            const flt desired_temperature) {
        dt = newdt;
        damping = damp;
        desT = desired_temperature;
        set_gauss();
    };
    void timestep();
    // void seed(uint n){gauss.seed(n);};
    // void seed(){gauss.seed();};
};

/**
\example LJatoms.cpp
\example LJ.py
\example polymer.py
*/
class CollectionVerlet : public Collection {
    // for use in fixed-E simulations
   protected:
    flt dt;

   public:
    CollectionVerlet(
        sptr<Box> box, sptr<AtomGroup> atoms, const flt dt,
        vector<sptr<Interaction> > interactions = vector<sptr<Interaction> >(),
        vector<sptr<StateTracker> > trackers = vector<sptr<StateTracker> >(),
        vector<sptr<Constraint> > constraints = vector<sptr<Constraint> >())
        : Collection(box, atoms, interactions, trackers, constraints), dt(dt){};
    void timestep();
    void set_dt(flt newdt) { dt = newdt; };
};

class CollectionOverdamped : public Collection {
    // over-damped simulation, v = gamma * f
   protected:
    flt dt, gamma;

   public:
    CollectionOverdamped(
        sptr<Box> box, sptr<AtomGroup> atoms, const flt dt,
        const flt gamma = 1.0,
        vector<sptr<Interaction> > interactions = vector<sptr<Interaction> >(),
        vector<sptr<StateTracker> > trackers = vector<sptr<StateTracker> >(),
        vector<sptr<Constraint> > constraints = vector<sptr<Constraint> >())
        : Collection(box, atoms, interactions, trackers, constraints),
          dt(dt),
          gamma(gamma){};
    void timestep();
    void set_dt(flt newdt) { dt = newdt; };
};

/**
Conjugate-Gradient energy minimization.

\example packer.cpp
*/
class CollectionNLCG : public Collection {
    // Conjugate-Gradient energy minimization, with
    // H = H0(x₁, x₂, …, L) + P V
    // More specifically, we take the Nose-Hoover NPH hamiltonian,
    // H = ½m V^⅔ Σṡᵢ² + ½Q V̇² + U(V^⅔ ⃗sᵢ…) + P₀ V
    // and E = U(V^⅔ ⃗sᵢ…) + P₀ V
    // We minimize using ⃗sᵢ and κ ln V as the dN+1 variables

   public:
    // Parameters
    flt dt;
    flt seceps;
    uint secmax;
    flt kappa;
    flt alphamax, afrac, dxmax, stepmax, kmax;

    // Goal pressure
    flt P0;

    // To keep between iterations
    flt Knew;
    flt k;
    flt vl, fl, al;

    // For tracking purposes
    flt alpha, beta, betaused, dxsum, alphavmax, maxdV;
    uint sec;

    virtual void stepx(flt dx);
    flt get_length_squared();
    flt fdota();
    flt fdotf();
    flt fdotv();
    flt vdotv();
    //~ void resizedl(flt dl);

   public:
    CollectionNLCG(
        sptr<OriginBox> box, sptr<AtomGroup> atoms, const flt dt, const flt P0,
        vector<sptr<Interaction> > interactions = vector<sptr<Interaction> >(),
        vector<sptr<StateTracker> > trackers = vector<sptr<StateTracker> >(),
        vector<sptr<Constraint> > constraints = vector<sptr<Constraint> >(),
        const flt kappa = 10.0, const flt kmax = 1000, const uint secmax = 40,
        const flt seceps = 1e-20);

    flt kinetic_energy();  // Note: masses are ignored
    flt pressure();
    flt hamiltonian();
    void set_forces(bool constraints_and_a = true) {
        set_forces(constraints_and_a, true);
    };
    void set_forces(bool constraints_and_a, bool setV);

    void timestep();
    void descend();  // use steepest descent
    void reset();

    void set_dt(flt newdt) {
        dt = newdt;
        reset();
    };
    void set_pressure_goal(flt P) {
        P0 = P;
        reset();
    };
    flt get_pressure_goal() { return P0; };
    void set_kappa(flt k) {
        kappa = k;
        reset();
    };
    void set_max_alpha(flt a) { alphamax = a; };
    void set_max_alpha_fraction(flt a) { afrac = a; };
    void set_max_dx(flt d) { dxmax = d; };
    void set_max_step(flt m) { stepmax = m; };
};

class CollectionNLCGFixedL : public CollectionNLCG {
   public:
    CollectionNLCGFixedL(
        sptr<OriginBox> box, sptr<AtomGroup> atoms, const flt dt, const flt P0,
        vector<sptr<Interaction> > interactions = vector<sptr<Interaction> >(),
        vector<sptr<StateTracker> > trackers = vector<sptr<StateTracker> >(),
        vector<sptr<Constraint> > constraints = vector<sptr<Constraint> >(),
        const flt kappa = 10.0, const flt kmax = 1000, const uint secmax = 40,
        const flt seceps = 1e-20)
        : CollectionNLCG(box, atoms, dt, P0, interactions, trackers,
                         constraints, kappa, kmax, secmax, seceps){};
    void stepx(flt dx);
};

class CollectionNLCGV : public Collection {
    // Conjugate-Gradient energy minimization, with
    // and E = U(⃗rᵢ…)

   public:
    // Parameters
    flt dt;  // initial step attempt
    flt seceps;
    uint secmax;

    // secmax is the max number of iterations within a timestep
    // seceps is the minimum alpha * v before we call it "close enough"
    flt alphamax, afrac, dxmax, stepmax, kmax;
    // alpha is how much larger the next step is, proportionally
    // if alpha < afrac * dxsum, we break, its "close enough"
    // alphamax is the largest proportion
    // dxmax is the maximum "step" you take in one "timestep"; the full
    //    step is v * dxsum
    // stepmax is the largest v*dxsum allowed
    // We reset after kmax iterations

    // To keep between iterations
    flt Knew;
    flt k;
    flt vl, fl, al;

    // For tracking purposes
    flt alpha, beta, betaused, dxsum, alphavmax;
    // alpha is how much bigger one iteration is than the previous
    // beta is how much we use of the previous v
    // betaused is after we take into account 0 <= beta <= 1
    // dxsum is the total of alphas over a timestep; atoms move v*dxsum in one
    // timestep
    // alphavmax = (last alpha) * sqrt(v dot v)
    uint sec;

    void stepx(flt dx);

    flt fdota();
    flt fdotf();
    flt fdotv();
    flt vdotv();
    //~ void resizedl(flt dl);

   public:
    CollectionNLCGV(
        sptr<Box> box, sptr<AtomGroup> atoms, const flt dt,
        vector<sptr<Interaction> > interactions = vector<sptr<Interaction> >(),
        vector<sptr<StateTracker> > trackers = vector<sptr<StateTracker> >(),
        vector<sptr<Constraint> > constraints = vector<sptr<Constraint> >(),
        const flt kmax = 1000, const uint secmax = 10, const flt seceps = 1e-4);

    flt pressure();

    void reset();
    void descend();  // use steepest descent
    void timestep();

    void set_dt(flt newdt) {
        dt = newdt;
        reset();
    };
    void set_max_alpha(flt a) { alphamax = a; };
    void set_max_alpha_fraction(flt a) { afrac = a; };
    void set_max_dx(flt d) { dxmax = d; };
    void set_max_step(flt m) { stepmax = m; };
};

flt solve_cubic_fast(flt b, flt c, flt d);

template <typename T>
int sgn(T val) {
    return (T(0) < val) - (val < T(0));
}

flt solve_cubic(flt a1, flt a2, flt a3, flt closeto = 0);

class CollectionNoseHoover : public Collection {
    // NVT
   protected:
    flt dt, Q, T;
    flt xi, lns;

   public:
    CollectionNoseHoover(
        sptr<Box> box, sptr<AtomGroup> atoms, const flt dt, const flt Q,
        const flt T,
        vector<sptr<Interaction> > interactions = vector<sptr<Interaction> >(),
        vector<sptr<StateTracker> > trackers = vector<sptr<StateTracker> >(),
        vector<sptr<Constraint> > constraints = vector<sptr<Constraint> >())
        : Collection(box, atoms, interactions, trackers, constraints),
          dt(dt),
          Q(Q),
          T(T) {
        xi = 0;
        lns = 0;
    };
    void set_dt(flt newdt) { dt = newdt; };
    void set_Q(flt newQ) { Q = newQ; };
    void reset_bath() {
        xi = 0;
        lns = 0;
    };

    void timestep();
    flt hamiltonian();
    flt get_xi() { return xi; };
    flt get_lns() { return lns; };
};

class CollectionGaussianT : public Collection {
    // Gaussian Constraint thermostat
    // NVT
   protected:
    flt dt;
    flt xi;
    flt set_xi();

   public:
    CollectionGaussianT(
        sptr<Box> box, sptr<AtomGroup> atoms, const flt dt,
        vector<sptr<Interaction> > interactions = vector<sptr<Interaction> >(),
        vector<sptr<StateTracker> > trackers = vector<sptr<StateTracker> >(),
        vector<sptr<Constraint> > constraints = vector<sptr<Constraint> >())
        : Collection(box, atoms, interactions, trackers, constraints),
          dt(dt),
          xi(0){};
    void set_dt(flt newdt) { dt = newdt; };
    void set_forces(bool constraints_and_a = true) { set_forces(true, true); };
    void set_forces(bool constraints_and_a, bool set_xi);
    void timestep();
};

class CollectionGear3A : public Collection {
    // for use in fixed-E simulations
   protected:
    flt dt;

   public:
    CollectionGear3A(
        sptr<Box> box, sptr<AtomGroup> atoms, const flt dt,
        vector<sptr<Interaction> > interactions = vector<sptr<Interaction> >(),
        vector<sptr<StateTracker> > trackers = vector<sptr<StateTracker> >(),
        vector<sptr<Constraint> > constraints = vector<sptr<Constraint> >())
        : Collection(box, atoms, interactions, trackers, constraints), dt(dt){};
    void timestep();
    void set_dt(flt newdt) { dt = newdt; };
};

class CollectionGear4A : public Collection {
    // for use in fixed-E simulations
   protected:
    flt dt;
    uint ncorrec;
    vector<Vec> bs;
    void resetbs() { bs.resize(atoms->size(), Vec::Zero()); }

   public:
    CollectionGear4A(
        sptr<Box> box, sptr<AtomGroup> atoms, const flt dt,
        uint ncorrectionsteps,
        vector<sptr<Interaction> > interactions = vector<sptr<Interaction> >(),
        vector<sptr<StateTracker> > trackers = vector<sptr<StateTracker> >(),
        vector<sptr<Constraint> > constraints = vector<sptr<Constraint> >())
        : Collection(box, atoms, interactions, trackers, constraints),
          dt(dt),
          ncorrec(ncorrectionsteps) {
        resetbs();
    };
    CollectionGear4A(
        sptr<Box> box, sptr<AtomGroup> atoms, const flt dt,
        vector<sptr<Interaction> > interactions = vector<sptr<Interaction> >(),
        vector<sptr<StateTracker> > trackers = vector<sptr<StateTracker> >(),
        vector<sptr<Constraint> > constraints = vector<sptr<Constraint> >())
        : Collection(box, atoms, interactions, trackers, constraints),
          dt(dt),
          ncorrec(1) {
        resetbs();
    };
    void timestep();
    void set_dt(flt newdt) { dt = newdt; };
};

class CollectionGear5A : public Collection {
    // for use in fixed-E simulations
   protected:
    flt dt;
    uint ncorrec;
    vector<Vec> bs, cs;
    void resetbcs() {
        uint Natoms = atoms->size();
        bs.resize(Natoms, Vec::Zero());
        cs.resize(Natoms, Vec::Zero());
    }

   public:
    CollectionGear5A(
        sptr<Box> box, sptr<AtomGroup> atoms, const flt dt,
        uint ncorrectionsteps,
        vector<sptr<Interaction> > interactions = vector<sptr<Interaction> >(),
        vector<sptr<StateTracker> > trackers = vector<sptr<StateTracker> >(),
        vector<sptr<Constraint> > constraints = vector<sptr<Constraint> >())
        : Collection(box, atoms, interactions, trackers, constraints),
          dt(dt),
          ncorrec(ncorrectionsteps) {
        resetbcs();
    };
    CollectionGear5A(
        sptr<Box> box, const flt dt, sptr<AtomGroup> atoms,
        vector<sptr<Interaction> > interactions = vector<sptr<Interaction> >(),
        vector<sptr<StateTracker> > trackers = vector<sptr<StateTracker> >(),
        vector<sptr<Constraint> > constraints = vector<sptr<Constraint> >())
        : Collection(box, atoms, interactions, trackers, constraints),
          dt(dt),
          ncorrec(1) {
        resetbcs();
    };
    void timestep();
    void set_dt(flt newdt) { dt = newdt; };
};

class CollectionGear6A : public Collection {
    // for use in fixed-E simulations
   protected:
    flt dt;
    uint ncorrec;
    vector<Vec> bs, cs, ds;
    void resetbcds() {
        uint Natoms = atoms->size();
        bs.clear();
        cs.clear();
        ds.clear();
        bs.resize(Natoms, Vec::Zero());
        cs.resize(Natoms, Vec::Zero());
        ds.resize(Natoms, Vec::Zero());
    }

   public:
    CollectionGear6A(
        sptr<Box> box, sptr<AtomGroup> atoms, const flt dt,
        uint ncorrectionsteps,
        vector<sptr<Interaction> > interactions = vector<sptr<Interaction> >(),
        vector<sptr<StateTracker> > trackers = vector<sptr<StateTracker> >(),
        vector<sptr<Constraint> > constraints = vector<sptr<Constraint> >())
        : Collection(box, atoms, interactions, trackers, constraints),
          dt(dt),
          ncorrec(ncorrectionsteps) {
        resetbcds();
    };
    CollectionGear6A(
        sptr<Box> box, sptr<AtomGroup> atoms, const flt dt,
        vector<sptr<Interaction> > interactions = vector<sptr<Interaction> >(),
        vector<sptr<StateTracker> > trackers = vector<sptr<StateTracker> >(),
        vector<sptr<Constraint> > constraints = vector<sptr<Constraint> >())
        : Collection(box, atoms, interactions, trackers, constraints),
          dt(dt),
          ncorrec(1) {
        resetbcds();
    };
    void timestep();
    void set_dt(flt newdt) { dt = newdt; };
};

struct RK4data {
    Vec Kxa, Kxb, Kxc, Kxd, Kva, Kvb, Kvc, Kvd;
};

class CollectionRK4 : public Collection {
    // for use in fixed-E simulations
   protected:
    flt dt;
    vector<RK4data> data;

   public:
    CollectionRK4(
        sptr<Box> box, sptr<AtomGroup> ratoms, const flt dt,
        vector<sptr<Interaction> > interactions = vector<sptr<Interaction> >(),
        vector<sptr<StateTracker> > trackers = vector<sptr<StateTracker> >(),
        vector<sptr<Constraint> > constraints = vector<sptr<Constraint> >())
        : Collection(box, ratoms, interactions, trackers, constraints),
          dt(dt),
          data(ratoms->vec().size()) {
        set_forces(true);
    };
    void timestep();
    void set_dt(flt newdt) { dt = newdt; };
};

class CollectionGear4NPH : public Collection {
    // for use in fixed-E, fixed-NPH simulations
    // Nose-Hoover, right?
   protected:
    flt dt;
    flt P, Q;           // goal pressure, damping
    flt dV, ddV, dddV;  // that's dV²/dt², dV/dt
    uint ncorrec;
    vector<Vec> bs;
    void resetbs() { bs.resize(atoms->size(), Vec::Zero()); }

   public:
    CollectionGear4NPH(
        sptr<OriginBox> box, sptr<AtomGroup> atoms, const flt dt, const flt P,
        const flt Q, uint ncorrectionsteps,
        vector<sptr<Interaction> > interactions = vector<sptr<Interaction> >(),
        vector<sptr<StateTracker> > trackers = vector<sptr<StateTracker> >(),
        vector<sptr<Constraint> > constraints = vector<sptr<Constraint> >())
        : Collection(box, atoms, interactions, trackers, constraints),
          dt(dt),
          P(P),
          Q(Q),
          dV(0),
          ddV(0),
          dddV(0),
          ncorrec(ncorrectionsteps) {
        resetbs();
    };
    CollectionGear4NPH(
        sptr<OriginBox> box, sptr<AtomGroup> atoms, const flt dt, const flt P,
        const flt Q,
        vector<sptr<Interaction> > interactions = vector<sptr<Interaction> >(),
        vector<sptr<StateTracker> > trackers = vector<sptr<StateTracker> >(),
        vector<sptr<Constraint> > constraints = vector<sptr<Constraint> >())
        : Collection(box, atoms, interactions, trackers, constraints),
          dt(dt),
          P(P),
          Q(Q),
          dV(0),
          ddV(0),
          dddV(0),
          ncorrec(1) {
        resetbs();
    };
    void timestep();
    flt kinetic_energy();
    flt temp(bool minuscomv = true);
    flt hamiltonian() {
        return kinetic_energy() + (Q / 2 * dV * dV) + potential_energy() +
               P * (boost::static_pointer_cast<OriginBox>(box)->V());
    }
    flt get_dV() { return dV; };
    flt getddV() { return ddV; };
    void set_dt(flt newdt) { dt = newdt; };
};

class XRPSummer : public FPairXFunct {
   private:
    sptr<Box> box;

   public:
    flt xsum, rpxsum, vfsum, rfsum;
    XRPSummer(sptr<Box> box)
        : box(box), xsum(0), rpxsum(0), vfsum(0), rfsum(0){};
    virtual void run(ForcePairX *);
    inline void reset() {
        xsum = 0;
        rpxsum = 0;
        vfsum = 0;
        rfsum = 0;
    };
};

class CollectionGear4NPT : public Collection {
    // for use in fixed-NPT simulations
    // Gaussian Constraint formulation
   public:
    flt dt;
    XRPSummer xrpsums;
    uint ncorrec;
    flt V1, V2, V3, chi, chixi;
    vector<Vec> xs1, xs2, xs3;
    vector<Vec> vs2, vs3;
    void resetbs() {
        uint Natoms = atoms->size();
        xs1.resize(Natoms, Vec::Zero());
        xs2.resize(Natoms, Vec::Zero());
        xs3.resize(Natoms, Vec::Zero());
        vs2.resize(Natoms, Vec::Zero());
        vs3.resize(Natoms, Vec::Zero());
        V1 = V2 = V3 = 0;
    }
    static vector<sptr<Interaction> > tointerpair(
        vector<sptr<InteractionPairsX> > &);

   public:
    CollectionGear4NPT(
        sptr<OriginBox> box, sptr<AtomGroup> atoms, const flt dt,
        uint ncorrectionsteps, vector<sptr<InteractionPairsX> > interactions =
                                   vector<sptr<InteractionPairsX> >(),
        vector<sptr<StateTracker> > trackers = vector<sptr<StateTracker> >(),
        vector<sptr<Constraint> > constraints = vector<sptr<Constraint> >())
        : Collection(box, atoms, tointerpair(interactions), trackers,
                     constraints),
          dt(dt),
          xrpsums(box),
          ncorrec(ncorrectionsteps),
          chi(0),
          chixi(0) {
        resetbs();
    };
    CollectionGear4NPT(
        sptr<OriginBox> box, const flt dt, sptr<AtomGroup> atoms,
        vector<sptr<InteractionPairsX> > interactions =
            vector<sptr<InteractionPairsX> >(),
        vector<sptr<StateTracker> > trackers = vector<sptr<StateTracker> >(),
        vector<sptr<Constraint> > constraints = vector<sptr<Constraint> >())
        : Collection(box, atoms, tointerpair(interactions), trackers,
                     constraints),
          dt(dt),
          xrpsums(box),
          ncorrec(1),
          chi(0),
          chixi(0) {
        resetbs();
    };
    void set_forces(bool constraints_and_a = true);
    void timestep();
};

class CollectionVerletNPT : public Collection {
    // From Toxvaerd 1993, PRE Vol. 47, No. 1,
    // http://dx.doi.org/10.1103/PhysRevE.47.343
    // Parameter equivalences (in the form code: paper):
    // degrees_of_freedom() or ndof: g
    // QT: g k T t_\eta^2
    // QP: N k T t_\xi^2
    // where N is the number of particles
   public:
    flt dt;
    flt eta, xidot, lastxidot, lastV;
    flt etasum;  // for calculating the "hamiltonian"
    vector<Vec> vhalf;
    flt P, QP, T, QT, curP;
    void resetvhalf();

   public:
    CollectionVerletNPT(
        sptr<OriginBox> box, sptr<AtomGroup> atoms, const flt dt, const flt P,
        const flt QP, const flt T, const flt QT,
        vector<sptr<Interaction> > interactions = vector<sptr<Interaction> >(),
        vector<sptr<StateTracker> > trackers = vector<sptr<StateTracker> >(),
        vector<sptr<Constraint> > constraints = vector<sptr<Constraint> >())
        : Collection(box, atoms, interactions, trackers, constraints),
          dt(dt),
          eta(0),
          xidot(0),
          lastxidot(0),
          lastV(box->V()),
          etasum(0),
          P(P),
          QP(QP),
          T(T),
          QT(QT),
          curP(0) {
        resetvhalf();
    };
    void timestep();
    void set_dt(flt newdt) { dt = newdt; };

    void reset_com_velocity() {
        Collection::reset_com_velocity();
        resetvhalf();
    };
    void reset_L() {
        Collection::reset_L();
        resetvhalf();
    };
    void scale_velocities(flt scaleby) {
        Collection::scale_velocities(scaleby);
        resetvhalf();
    };
    void scale_velocities_to_temp(flt T) {
        Collection::scale_velocities_to_temp(T);
        resetvhalf();
    };
    void scale_velocities_to_energy(flt E) {
        Collection::scale_velocities_to_energy(E);
        resetvhalf();
    };

    flt get_eta() { return eta; };
    flt det_xi_dot() { return xidot; };
    flt get_pressure() { return curP; };
    Vec get_vhalf(uint n) { return vhalf[n]; };

    // note that this is a constant of the motion, but not a real hamiltonian
    // and also only such at constant T
    flt hamiltonian() {
        // regular energy
        flt H = kinetic_energy() + potential_energy();

        if (QT > 0) {
            flt gkT = degrees_of_freedom() * T;
            H += gkT * etasum;
            H += eta * eta * QT / 2;
        }
        return H;
    }
};

struct Event {
    flt t;     // when it will occur
    AtomID a;  // Atom 1
    AtomID b;  // Atom 2

    bool operator<(const Event &other) const {
        if (t < other.t) {
            return true;
        };
        if (t > other.t) {
            return false;
        };
        if (a < other.a) {
            return true;
        };
        if (a > other.a) {
            return false;
        };
        if (b < other.b) {
            return true;
        };
        return false;
    };
};

flt get_max(vector<flt> v);

/// Collision-Driven Dynamics
class CollectionCD : public Collection {
   public:
    flt dt, curt;
    long long numevents;
    set<Event> events;      // note that this a sorted binary tree
    vector<flt> atomsizes;  /// diameters
    vector<sptr<StateTracker> > collision_trackers;

    void reset_events();
    void line_advance(flt deltat);

   public:
    CollectionCD(
        sptr<OriginBox> box, sptr<AtomGroup> atoms, const flt dt,
        vector<flt> sizes = vector<flt>(),
        vector<sptr<Interaction> > interactions = vector<sptr<Interaction> >(),
        vector<sptr<StateTracker> > trackers = vector<sptr<StateTracker> >(),
        vector<sptr<Constraint> > constraints = vector<sptr<Constraint> >());

    void reset_velocities(flt T);
    bool take_step(flt tlim = -1);  // returns true if it collides, false if it
                                    // hits the tlim
    void timestep();
    virtual void add_tracker(sptr<StateTracker> track);
    long long events_processed() {
        return numevents;
    };  // only counts collision-type events
};

/** Collision-Driven Brownian-Dynamics

\example hardspheres.cpp
*/
class CollectionCDgrid : public Collection {
   public:
    vector<sptr<StateTracker> > collision_trackers;

    flt dt, curt;
    long long numevents;
    set<Event> events;      // note that this a sorted binary tree
    vector<flt> atomsizes;  /// diameters
    flt edge_epsilon;

    void reset_events(bool force = true);
    void line_advance(flt deltat);

    Grid grid;
    flt gridt;  // when it was updated

    Event next_event(AtomID a);

   public:
    CollectionCDgrid(
        sptr<OriginBox> box, sptr<AtomGroup> atoms, const flt dt,
        vector<flt> sizes = vector<flt>(),
        vector<sptr<Interaction> > interactions = vector<sptr<Interaction> >(),
        vector<sptr<StateTracker> > trackers = vector<sptr<StateTracker> >(),
        vector<sptr<Constraint> > constraints = vector<sptr<Constraint> >());

    virtual void add_tracker(sptr<StateTracker> track);
    void update_grid(bool force = true);
    Grid &get_grid() { return grid; };
    flt get_epsilon() { return edge_epsilon; };
    void set_epsilon(flt eps) { edge_epsilon = eps; };
    void reset_velocities(flt T);
    bool take_step(flt tlim = -1);  // returns true if it collides, false if it
                                    // hits the tlim
    void timestep();
    long long events_processed() {
        return numevents;
    };  // only counts collision-type events
};

/// Collision-Driven Brownian-Dynamics
class CollectionCDBD : public CollectionCD {
   protected:
    flt T;

   public:
    CollectionCDBD(
        sptr<OriginBox> box, sptr<AtomGroup> atoms, const flt dt, const flt T,
        vector<flt> sizes = vector<flt>(),
        vector<sptr<Interaction> > interactions = vector<sptr<Interaction> >(),
        vector<sptr<StateTracker> > trackers = vector<sptr<StateTracker> >(),
        vector<sptr<Constraint> > constraints = vector<sptr<Constraint> >())
        : CollectionCD(box, atoms, dt, sizes, interactions, trackers,
                       constraints),
          T(T){};

    void timestep() {
        reset_velocities(T);
        CollectionCD::timestep();
    };
};

/// Collision-Driven Brownian-Dynamics
class CollectionCDBDgrid : public CollectionCDgrid {
   protected:
    flt T;

   public:
    CollectionCDBDgrid(
        sptr<OriginBox> box, sptr<AtomGroup> atoms, const flt dt, const flt T,
        vector<flt> sizes = vector<flt>(),
        vector<sptr<Interaction> > interactions = vector<sptr<Interaction> >(),
        vector<sptr<StateTracker> > trackers = vector<sptr<StateTracker> >(),
        vector<sptr<Constraint> > constraints = vector<sptr<Constraint> >())
        : CollectionCDgrid(box, atoms, dt, sizes, interactions, trackers,
                           constraints),
          T(T){};

    void timestep() {
        reset_velocities(T);
        CollectionCDgrid::timestep();
    };
};
#endif


text:
require "spec_helper"

describe 'Taxa data tab basic tests' do
  before(:all) do
    load_foundation_cache
    drop_all_virtuoso_graphs
    @taxon_concept = build_taxon_concept(comments: [], bhl: [], toc: [], sounds: [], youtube: [], flash: [], images: [])
    @target_taxon_concept = build_taxon_concept(comments: [], bhl: [], toc: [], sounds: [], youtube: [], flash: [], images: [])
    @resource = Resource.gen
    @user = User.gen
    @user.grant_permission(:see_data)
    @default_data_options = { subject: @taxon_concept, resource: @resource }
    @measurement = DataMeasurement.new(@default_data_options.merge(predicate: 'http://eol.org/weight',
      object: '12345.0', unit: 'http://eol.org/g'))
    @association = DataAssociation.new(@default_data_options.merge(object: @target_taxon_concept,
      type: 'http://eol.org/preys_on'))
    @user_added_data = UserAddedData.gen(user: @user, subject: @taxon_concept, predicate: 'http://eol.org/length',
      object: '9999.0')
    @master_curator = build_curator(@taxon_concept, level: :master)
    @master_curator.grant_permission(:see_data)
  end

  before(:each) do
    drop_all_virtuoso_graphs
    login_as @user
  end

  it 'should not show data with there is nothing in the triplestore' do
    visit taxon_data_path(@taxon_concept.id)
    body.should_not have_selector("table.data tr")
  end

  it 'should display harvested measurements' do
    @measurement.update_triplestore
    visit taxon_data_path(@taxon_concept.id)
    body.should have_selector("table.data tr")
    body.should have_selector("table.data th div", text: 'Weight')
    body.should have_selector("table.data td", text: '12,345.0')
    body.should include("Supplier: <a href=\"/content_partners/#{@resource.content_partner_id}")
  end

  it 'should display harvested associations' do
    @association.update_triplestore
    visit taxon_data_path(@taxon_concept.id)
    body.should have_selector("table.data tr")
    body.should have_selector("table.data th div", text: 'Preys On')
    body.should have_selector("table.data td a[href='/pages/#{@target_taxon_concept.id}/data']", text: @target_taxon_concept.title_canonical)
    body.should include("Supplier: <a href=\"/content_partners/#{@resource.content_partner_id}")
  end

  it 'should display user added data' do
    @user_added_data.update_triplestore
    visit taxon_data_path(@taxon_concept.id)
    body.should have_selector("table.data tr")
    body.should have_selector("table.data th div", text: 'Length')
    body.should have_selector("table.data td", text: '9,999.0')
    body.should include("provided by #{@user.full_name}")
  end

  it 'should display known uri labels when available' do
    @measurement = DataMeasurement.new(@default_data_options.merge(predicate: 'http://eol.org/mass', object: 'http://eol.org/massive'))
    @measurement.update_triplestore
    visit taxon_data_path(@taxon_concept.id)
    # readable label will be derived
    body.should have_selector("table.data td span", text: 'Massive')
    # URI should not be used
    body.should_not have_selector("table.data td span", text: 'http://eol.org/massive')
    body.should_not have_selector("table.data td span", text: 'Really Really Heavy')
    KnownUri.gen_if_not_exists(uri: 'http://eol.org/massive', name: 'Really Really Heavy')
    visit taxon_data_path(@taxon_concept.id)
    body.should_not have_selector("table.data td span", text: 'Massive')
    # the label for the new KnownURI should get used
    body.should have_selector("table.data td span", text: 'Really Really Heavy')
  end

  it 'should display units of measure when explicitly declared' do
    @measurement = DataMeasurement.new(@default_data_options.merge(predicate: 'http://eol.org/mass',
      object: '50', unit: 'http://eol.org/lbs'))
    @measurement.update_triplestore
    visit taxon_data_path(@taxon_concept.id)
    # unit should not display until the unit is a KnownURI
    body.should_not have_selector('span.term', text: '50 pounds')
    pounds = KnownUri.gen_if_not_exists(uri: 'http://eol.org/lbs', name: 'pounds', uri_type: UriType.measurement)
    KnownUri.unit_of_measure.add_value(pounds)
    visit taxon_data_path(@taxon_concept.id)
    body.should have_selector('span.term', text: 'pounds')
  end

  it 'should display units of measure when implied by measurement type' do
    @measurement = DataMeasurement.new(@default_data_options.merge(predicate: 'http://eol.org/time', object: '50'))
    @measurement.update_triplestore
    visit taxon_data_path(@taxon_concept.id)
    # unit should not display until the predicate is associated with a unit, and that unit is a KnownURI
    body.should have_selector("table.data td[headers='predicate_http___eol_org_time'] span", text: '50')
    body.should_not have_selector('span.term', text: 'hours')
    time = KnownUri.gen_if_not_exists(uri: 'http://eol.org/time', name: 'time')
    hours = KnownUri.gen_if_not_exists(uri: 'http://eol.org/hours', name: 'hours', uri_type: UriType.measurement)
    KnownUri.unit_of_measure.add_value(hours)
    time.add_implied_unit(hours);
    visit taxon_data_path(@taxon_concept.id)
    body.should have_selector('span.term', text: 'hours')
  end

  it 'should allow master curators to add data' do
    login_as @master_curator
    visit taxon_data_path(@taxon_concept.id)
    Rails.cache.clear
    body.should_not have_tag("table.data")
    body.should have_tag("form#new_user_added_data")
    body.should have_tag("form#new_user_added_data input[@type='submit']", value: "submit data value")
    within(:xpath, '//form[@id="new_user_added_data"]') do
      fill_in 'user_added_data_predicate', with: Rails.configuration.uri_term_prefix + 'testingadddata'
      fill_in 'user_added_data_object', with: 'testingadddata_value'
      click_button "submit data value"
      sleep(5)
    end
    visit taxon_data_path(@taxon_concept.id)
    KnownUri.gen_if_not_exists(uri: Rails.configuration.uri_term_prefix + 'testingadddata', name: 'testingadddata')
    body.should have_tag("table.data")
    body.should include("testingadddata")
    body.should include("testingadddata_value")
    visit('/logout')
  end

  describe "search" do
    context "clade is searchable" do
      it "should include link to search within clade"
    end
    context "clade is not searchable" do
      it "should include link to search TraitBank without clade"
    end
  end
end


WINCHENDON — The youngest person to seek a write-in seat on the School Committee says he hopes to help it thrive. Seth Signa has thrown his hat into the ring and asks for people to consider writing him in.
Signa graduated last May from Framingham State University and came back to the town where he grew up. He said he attended college because that is what his family expected. He honestly claimed to be a C student in high school who "never did anything spectacular." He really didn't have the money for college, but he went on a tour to Framingham State because his mother was a native of that city and he knew it would satisfy her if he applied.
"Next thing you know, I got in, so I said I guess I am doing this!" he said.
While working toward his degree, Signa learned a lot about the mindset beyond Winchendon.
He developed a broader view of the school district, and because his brother, who is six years older, graduated before him, and his younger sister is a current senior. He has seen the challenges and the positive changes that have happened in the schools.
"Some things are 100 percent different in the best way," he said.
Signa said that there should be someone weighing in on issues who attended the school district in this current millennium. During the last override in 2014, he was a student and unable to vote, but he was one of the activists within the district who encouraged others to participate in a drive to communicate the needs of the schools to the townspeople. Signa saw the cuts to be made between sports and teaching staff and was driven to take a stance and fight to keep programs in the district. He says he's proud that people were inspired to vote, and parents who never knew what was going on in the district finally listened and took an interest. He credits the student involvement with the outcome as the town passed the override.
Signa said he has watched as the foundation formula for funding schools is talked about at the state level. He said the formula is faulty and dated and no longer works.
Signa hopes that if he is voted in, it encourages others to become involved, or at least to vote. He said that before he went to college, he never realized how much of a "hole" Winchendon was in. He said that reading the news that the debt service was paid off early to the state, and that streetlights that had been turned off years ago were finally being turned on once more, made him realize how hard it has been for the town.
He said there is a communication gap within the town. He hopes that social media might be a great way to bridge some of that gap. He also thinks that finding ways for the students to become involved in the town will help the town take pride in its investment.
He remembers when the band was bigger and students wore uniforms as they marched down the street in parades. He would like to see a better connection so students become more involved in what makes the community a good place to live. He would like to see more students participating in the Winchendon Community Park/Ingleside project.
Signa says he knows the things he may face if he wins the seat. He knows there are many whose children have grown that may be angry they have to support the school district.
"If I had a dollar for every time I heard that, I could pay back my student loans," he said.
Signa believes that people should invest in their school district, that if the school district does well, the town will follow. He pointed out that the town may have been marked as underperforming, but there have been students who excelled and made it into Ivy League schools. He said his sister's class has students being accepted to college "left and right," but people still have the same mentality and the schools are not supported. He said he is unsure what the schools would have to do to get people's trust.
He said that college is hammered home to an excessive degree, and he believes that more attention should be directed toward the vocational fields. He said people are getting into five-figure debt before they realize what they are learning may not be their calling. He said there should be more guidance within the schools to direct students toward opportunities to develop skills other than a college.
Signa said he is 22, almost 23. He is not sure if he will stay in town for the rest of his life because there is a lot going on and he found he loves to work on campaigns. One path he is interested in is helping to provide students in higher education with the tools and direction they need to enter the workforce. Right now he is focused on paying off his own student loans.
He is in Winchendon for the foreseeable future and hopes to make things change for the better.
Signa said that using the people who represent us at a local, state and federal level can help make that change happen, but people need to know how to contact their representatives, and he will provide that information to anyone who asks. Signa said people have to understand that the reason things don't get done is because not enough people are engaged.
The annual town election will be held May 6, 8 a.m. to 8 p.m., at the Murdock Senior Center.


Downtown holiday window decorating contest local the. 40 stunning christmas window decorations ideas all. Outside christmas displays, holiday window box decorating. Bay window christmas decorating ideas home intuitive.


text:
/*
 * game.js
 *
 * Entry point of the Slash 'n' Smash game.
 *
 * Licensed under MIT license.
 * For license details please check the LICENSE file of the project.
 *
 * @author Konrad Nowakowski <konrad.x92@gmail.com>
 */

(function(window) {
	"use strict";

	/**
	 * Overrides Playground's common loading screen.
	 * Uses PIXI renderer to render the loading state.
	 */
	PLAYGROUND.LoadingScreen = {
		/**
		 * VHS-tape logo image asset encoded as PNG in base64.
		 */
		logoRaw: 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAAAYCAYAAABKtPtEAAAA+0lEQVRYw+1X0Q3FIAgsjQs4gCu4/xyu4ACO0PdFYmzLQyw1Vvmmyh3HSWFjhnPu2AaJGCNwc+Fr4GtJMNwDrbXDgE8psXP3bfJYBHxN/rX1Tq8AI/kohACcVwI7UeZzwnt/UIZWujzmq3sAFzwFTFosda+E5OYRkIAPIQAWWxJRS8wT+4nRmCuUp7X21CUEye0YnqW1jO1a4Km5vpMtRUrNettdAVz/yEmRzvBwi9CVCeajMcQz2AK+V6dfUwBlVtjpvNtIyD9itEywSQExRrgq7K5Yicwp4E8Yo3lTxpryl3oIaB7eM7hkr9/hRcAiYO5gu/JIRljz2vwANueFK1RCNCwAAAAASUVORK5CYII=',

		/**
		 * Creates loader scene.
		 */
		create: function() {
			// create Pixi logo sprite
			this.logo = new PIXI.Sprite(PIXI.Texture.fromImage(this.logoRaw));
			this.logo.anchor = new PIXI.Point(0.5, 1);

			// create loader progress bar
			this.progressBar = new PIXI.Graphics();
			this.progressBar.position = new PIXI.Point(0, 8);
			this.logo.addChild(this.progressBar);

			// error handler
			this.app.loader.on('error', this.error, this);
		},

		/**
		 * Prepares loader state.
		 */
		enter: function() {
			// change background colour
			this.app.renderer.backgroundColor = 0x101010;

			// reset progress value
			this.progress = 0;
		},

		/**
		 * Loading scene done. Quitting.
		 */
		leave: function() {
			console.log('Loading done.');
		},

		/**
		 * Process the loader progress.
		 *
		 * @param {Number} delta Delta time between last frame.
		 */
		step: function(delta) {
			// progress status
			this.progress += Math.abs(this.app.loader.progress - this.progress);

			// keep centered position
			this.logo.position = new PIXI.Point(
				Math.floor(this.app.renderer.width / 2),
				Math.floor(this.app.renderer.height / 2)
			);
		},

		/**
		 * Renders loader state.
		 */
		render: function() {
			// update progress bar
			var g = this.progressBar,
				c = this.progress;

			g.clear();
			g.lineStyle(0);
			g.beginFill(0xFFFFFF, 1);
			g.drawRect(-32, -2, 64 * c, 4);
			g.endFill();

			g.beginFill(0xFFFFFF, 1);
			g.drawRect(-34, -2, 1, 4);
			g.endFill();

			g.beginFill(0xFFFFFF, 1);
			g.drawRect(33, -2, 1, 4);
			g.endFill();

			// render loader stage
			this.app.renderer.render(this.logo);
		},

		/**
		 * Handles loader error.
		 */
		error: function(url) {
			// create text child node
			var text = new PIXI.Text('Error while loading\n' + url, {
				font: '9px Courier',
				fill: '#FFFFFF',
				align: 'center'
			});

			text.anchor = new PIXI.Point(0.5, 0);
			text.position = new PIXI.Point(0, 18);

			this.logo.addChild(text);
		}
	};

	/**
	 * Game application instance.
	 *
	 * @type PLAYGROUND.Application
	 */
	Game.app = playground({
		/**
		 * Common assets paths.
		 */
		paths: {
			base: 'assets/',
			images: 'images/',
			sounds: 'sounds/',
			atlases: 'atlases/'
		},

		/**
		 * Canvas viewport scale-up.
		 */
		scale: 3,

		/**
		 * Performance detector.
		 */
		performance: {
			ticks: 0,
			frame: 0,
			fps: 0
		},

		/**
		 * Application creation event.
		 */
		create: function() {
			// create PIXI properly renderer
			this.createRenderer();

			// creates info-board
			BBQ.console.status(
				this.renderer instanceof PIXI.WebGLRenderer ?
					'WebGL' : 'Canvas'
			);

			// perform assets loading
			// FOR DEMO PURPOSES ONLY, DO NOT BASE ON IT
			console.log('Loading game assets...');

			// load game assets
			for(var i in Game) {
				var Game_Child = Game[i];
				if(typeof Game_Child === 'object') {
					for(var n in Game_Child) {
						// invoke preloads for Game.Object.Object.preload
						if(typeof Game_Child[n].preload === 'function') {
							Game_Child[n].preload.call(this, this);
						}
					}
				}
			}
		},

		/**
		 * Assets loader ready event.
		 */
		ready: function() {
			// switch to game state
			this.setState(new Game.State.Menu());
		},

		/**
		 * Move sprites.
		 */
		step: function(delta) {
			// dummy method
		},

		/**
		 * Renders scene frame.
		 */
		render: function(delta) {
			// update ticks and FPS
			this.performance.frame++;
			this.performance.ticks += delta;
			if(this.performance.ticks >= 1) {
				// update FPS status
				this.performance.fps = this.performance.frame;
				BBQ.console.fps('FPS: ' + this.performance.fps);

				// reset counters
				this.performance.ticks = 0;
				this.performance.frame = 0;
			}
		},

		/**
		 * Handles viewport resize event.
		 */
		resize: function() {
		},

		/**
		 * Handle key input.
		 */
		keydown: function(event) {
			if(event.key === 'f1') {
				BBQ.console.toggle();
				return false;
			}
		},

		/**
		 * Handle pointer (mouse/touch) event.
		 */
		pointerdown: function(event) {
			//BBQ.Utils.fullscreen(true);
		}
	});
})(window);


None other than Hal Varian, luminary technology strategy guru, argues that Google has no traditional sources of strategic advantage, only a temporary knowledge curve advantage.
This seems overstated. True, Google ads do not enjoy the network effect often ascribed to them, but the company has at least the following traditional strategic advantages.
Web searches rely upon giant data centers. Google's massively parallel data center architecture facilitates the fastest web searches, most frequent index rebuilds, etc. It also facilitates the cheapest hosted services, such as email, photos et al. They have way more computing power than anyone else. As Varian might point out, this architectural advantage is temporary. However, when everyone else inevitably copies this architecture, data centers revert to a pure scale contest. Whoever buys the most boxes wins. Google can currently outspend everyone but Microsoft; by the time Microsoft builds a similar architecture (probably years), Google will be able to outspend them, too.
For 10 years, Google has defined web service innovation. They are increasingly trusted outside the narrow field of search (email hosting, for example). As a result, increasingly, when Google releases a new web service, other things equal, they will automatically win.
The anti-spam system in Google's hosted email enjoys network effects, because it relies upon group intelligence to decide what is spam, then rolls out the answer to all users simultaneously. The effectiveness of this system improves dramatically with scale. The largest network has the best spam control. Yes, anyone can copy the architecture, but again, by the time they do, Google will already be the biggest. They are probably #2 or #3 already, and their most logical competitors — Yahoo and Microsoft/Hotmail — are asleep at the wheel. By the time they figure it out, Google will be #1, and able to run away with this network effect.
No suggestions being made here. Just observing.


The Hoops gaffer was given just 15 seconds to analyse their dramatic 3-0 win over Aberdeen by Premier Sports.
Celtic manager Neil Lennon was delighted to see his side dominate Aberdeen and book their place in the Scottish Cup final next month.
But viewers watching the game on Premier Sports were surely left feeling short-changed when his post-match interview was cut to just 15 seconds.
The dramatic semi-final was full of incidents, with two red cards, three goals and a host of talking points.
But Celtic boss Lennon was cut short due to the lengthy delay in the first half as Ryan Christie was stretchered off after his horrific head clash with Dominic Ball.
In the shorter than short interview, Lennon said: "It's the best they've played since I've been here.
"From start to finish, I know the game changes on the cards but from my view they're both red cards.
"I thought we started the game brilliantly and deserved to win it.
"I can't speak highly enough of these players."
Then the interview ended as the channel switched to racing cars.
Premier Sports tweeted a video of the interview with the caption 'Neil Lennon with a brief synopsis of the game' with a laughing emoji.
But it remains to be seen if fans see the funny side of Scottish football being shortchanged on screen time yet again.


Planning a new home, bathroom renovation, or need to make some repairs? Let Century Glass help you ensure that your shower remains a beautiful and inspired centrepiece for years to come.
Whether it's a slider or hinged system, traditional framed or modern frameless glass-on-glass, conventional or steam shower, Century Glass is Kamloops' source for expert knowledge and service for all your shower glass and hardware needs.
Elevate your bathroom renovation to a new level with a beautiful frameless, all glass shower enclosure from Century Glass.


Get better battery life from your rechargeable batteries by using a high quality, smart battery charger. This excellent unit from Palo will protect your batteries from overcharging, ensuring better power output for longer. It can even resurrect some seemingly dead batteries. With a large, clear LCD screen, you can easily see the charge level. The screen dims when charging is complete so it's easy to tell when your batteries are good to go.
Note: This product is suitable for charging of NiMh & NiCd rechargeable batteries only. Batteries not included.


text:
High Court of Bombay authorises 'therapeutic' abortion in case involving a difficult social context
by Nirmala Carvalho
In a controversial ruling, the court is authorising an 18-year-old unwed woman to end her pregnancy after 26 weeks even though the foetus is healthy and represents no risks to her health. Instead of abortion, children should be given to the Missionaries of Charity, as Mother Teresa asked.
Mumbai (AsiaNews) – A pregnancy in a difficult social context can be considered "a risk to a woman's mental health," and thus constitutes sufficient grounds for a therapeutic abortion, even beyond the legal 20-week limit, this according to the High Court of Bombay (Mumbai).
The controversial decision shows that even in India the issue of the defence of unborn life is an open question.
The judges ruled in the case of an 18-year-old unmarried woman who wanted an abortion at the 26th week of pregnancy, despite the fact that the fetus is healthy and there are no risks to her physical health.
The woman was diagnosed with having a mild form of depression, which if properly treated would not create serious problems for her.
However, the judges accepted the argument that for an 18-year-old from a poor family, with other children, whose livelihood comes from selling vegetables and driving a rickshaw, a pregnancy could have a serious impact on her future mental health.
For this reason, the court authorised an abortion at the JJ Hospital, one of Mumbai's public hospitals.
It should be noted that just a few weeks ago the Kerala High Court expressed the opposite opinion on a petition presented by a woman in the 31st week of pregnancy, in many ways similar to the one in Mumbai.
The court decision left pro-life activists baffled. "The abortion law now makes it seem that an unborn child is not a child until the moment of birth," said Dr Pascoal Carvalho, a member of the Pontifical Academy for Life, speaking to AsiaNews.
"No one is addressing the rights of the foetus. Our society is also to blame for not providing adequate support for unwed mothers and their families," he explained.
"The Missionaries of Charity in Mumbai and around the world welcome babies and counter the evil of abortion with adoptions," he noted.
"As Mother Teresa said: 'Please, don't kill the child. I want the child, Please, give me the child.' [Thousands of saved children] have brought such love and joy to adopting parents'."
mental health argument
pascoal carvalho
e-mail this to a friend
Enter the verification code:
Mumbai: Indian Church always in favour of life
Kerala High Court against therapeutic abortion if mother's life is not at risk
"We are optimistic," says Paul Bhatti as Rimsha Masih's bail hearing postponed to Friday
Court overturns ruling ordering abortion on 19-year-old mentally challenged and orphaned woman
National Commission for Women asks for 'immediate action' in the nun rape case in Kerala
Israel, fourth dose has 'only partial' efficacy against Omicron
Subscribe to Asia News updates or change your preferences
Afganistan: 8 children killed in undetected bomb explosion
Erdogan risks losing support in Kazakhstan
Iran frees nine Christian convicted of anti-state activities
Jakarta: from tomorrow booster dose for the elderly and vulnerable
Some 60,000 people flee the city of Loikaw following clashes between Myanmar's military and anti-coup rebels
OFFICE: PIME Milan via Monte Rosa 81 - 20149 Milan tel. 02438201 - fax 0243822901
byscat.netscatgo.orgjap-scat.netfuckscat.net Personal use of the contents of this website is permitted for non-commercial purposes only. The reproduction, publication, sale and distribution of the contents of the website can only take place prior to an agreement with the publisher.


text:
Happening: A Clean Energy Revolution
NAME OF FILM: HAPPENING: A CLEAN ENERGY REVOLUTION
DIRECTOR(S): James Redford
GENRE: Documentary Film
SYNOPSIS: Seeking hope for a sustainable tomorrow, filmmaker James Redford crosses the country to chronicle the clean energy revolution already taking place.
DOC NYC 2017 to Close with NY Premiere of ERIC CLAPTON: LIFE IN 12 BARS + Announces Lineup
DOC NYC announced the full lineup of over 250 films and events for its eighth edition, running November 9 to 16 at the IFC Center in Greenwich Village and Chelsea's SVA Theatre and Cinepolis Chelsea.
Napa Valley Film Festival Unveils 2017 Lineup, Opens with THE UPSIDE
The seventh annual Napa Valley Film Festival (NVFF) returns this fall with its five-day festival showcasing the year's best new independent films from November 8 to 12, 2017.
Woodstock Film Festival Unveils 2017 Film Lineup, will Open with East Coast Premiere of STUCK
The 18th Woodstock Film Festival, will open with the East Coast premiere of Stuck, a musical narrative about a group of six strangers trapped together on a stalled New York City subway car.